diff --git a/Cargo.toml b/Cargo.toml index d758e31..19b269e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,8 +48,8 @@ name = "musichoard-edit" required-features = ["bin", "database-json"] [[example]] -name = "musicbrainz-api---lookup-artist" -path = "examples/musicbrainz_api/lookup_artist.rs" +name = "musicbrainz-api---lookup" +path = "examples/musicbrainz_api/lookup.rs" required-features = ["bin", "musicbrainz"] [[example]] diff --git a/examples/musicbrainz_api/lookup.rs b/examples/musicbrainz_api/lookup.rs new file mode 100644 index 0000000..29e02ee --- /dev/null +++ b/examples/musicbrainz_api/lookup.rs @@ -0,0 +1,83 @@ +#![allow(non_snake_case)] + +use musichoard::{ + collection::musicbrainz::Mbid, + external::musicbrainz::{ + api::{ + lookup::{LookupArtistRequest, LookupReleaseGroupRequest}, + MusicBrainzClient, + }, + http::MusicBrainzHttp, + }, +}; +use structopt::StructOpt; +use uuid::Uuid; + +const USER_AGENT: &str = concat!( + "MusicHoard---examples---musicbrainz-api---lookup/", + env!("CARGO_PKG_VERSION"), + " ( musichoard@thenineworlds.net )" +); + +#[derive(StructOpt)] +struct Opt { + #[structopt(subcommand)] + entity: OptEntity, +} + +#[derive(StructOpt)] +enum OptEntity { + #[structopt(about = "Lookup artist")] + Artist(OptArtist), + #[structopt(about = "Lookup release group")] + ReleaseGroup(OptReleaseGroup), +} + +#[derive(StructOpt)] +struct OptArtist { + #[structopt(help = "Artist MBID to lookup")] + mbid: Uuid, + #[structopt(long, help = "Include release groups in lookup")] + release_groups: bool, +} + +#[derive(StructOpt)] +struct OptReleaseGroup { + #[structopt(help = "Release group MBID to lookup")] + mbid: Uuid, +} + +fn main() { + let opt = Opt::from_args(); + + println!("USER_AGENT: {USER_AGENT}"); + + let http = MusicBrainzHttp::new(USER_AGENT).expect("failed to create API client"); + let mut client = MusicBrainzClient::new(http); + + match opt.entity { + OptEntity::Artist(opt_artist) => { + let mbid: Mbid = opt_artist.mbid.into(); + let mut request = LookupArtistRequest::new(&mbid); + if opt_artist.release_groups { + request.include_release_groups(); + } + + let response = client + .lookup_artist(request) + .expect("failed to make API call"); + + println!("{response:#?}"); + } + OptEntity::ReleaseGroup(opt_release_group) => { + let mbid: Mbid = opt_release_group.mbid.into(); + let request = LookupReleaseGroupRequest::new(&mbid); + + let response = client + .lookup_release_group(request) + .expect("failed to make API call"); + + println!("{response:#?}"); + } + } +} diff --git a/examples/musicbrainz_api/lookup_artist.rs b/examples/musicbrainz_api/lookup_artist.rs deleted file mode 100644 index 3b65167..0000000 --- a/examples/musicbrainz_api/lookup_artist.rs +++ /dev/null @@ -1,42 +0,0 @@ -#![allow(non_snake_case)] - -use musichoard::{ - collection::musicbrainz::Mbid, - external::musicbrainz::{ - api::{lookup::LookupArtistRequest, MusicBrainzClient}, - http::MusicBrainzHttp, - }, -}; -use structopt::StructOpt; -use uuid::Uuid; - -const USER_AGENT: &str = concat!( - "MusicHoard---examples---musicbrainz-api---lookup-artist/", - env!("CARGO_PKG_VERSION"), - " ( musichoard@thenineworlds.net )" -); - -#[derive(StructOpt)] -struct Opt { - #[structopt(help = "Artist MBID to lookup")] - mbid: Uuid, -} - -fn main() { - let opt = Opt::from_args(); - - println!("USER_AGENT: {USER_AGENT}"); - - let http = MusicBrainzHttp::new(USER_AGENT).expect("failed to create API client"); - let mut client = MusicBrainzClient::new(http); - - let mbid: Mbid = opt.mbid.into(); - let mut request = LookupArtistRequest::new(&mbid); - request.include_release_groups(); - - let response = client - .lookup_artist(request) - .expect("failed to make API call"); - - println!("{response:#?}"); -}