use serde::{Deserialize, Serialize}; /// A reference to a release (album) that a recording appears on. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReleaseRef { pub mbid: String, pub title: String, pub date: Option, pub track_number: Option, } /// A recording match from a search query. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RecordingMatch { pub mbid: String, pub title: String, pub artist: String, pub artist_mbid: Option, pub releases: Vec, /// MusicBrainz API score (0-100). pub score: u8, } /// A release (album) match from a search query. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReleaseMatch { pub mbid: String, pub title: String, pub artist: String, pub artist_mbid: Option, pub date: Option, pub track_count: Option, pub score: u8, } /// Full details for a recording, retrieved by MBID. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct RecordingDetails { pub mbid: String, pub title: String, pub artist: String, pub artist_mbid: Option, pub releases: Vec, pub duration_ms: Option, pub genres: Vec, } /// Detailed artist info from a direct MBID lookup. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ArtistInfo { pub name: String, #[serde(default)] pub mbid: Option, pub disambiguation: Option, pub country: Option, pub artist_type: Option, pub begin_year: Option, pub urls: Vec, } /// An external URL linked to an artist on MusicBrainz. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ArtistUrl { pub url: String, pub link_type: String, } /// An artist match from a search query. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ArtistSearchResult { pub mbid: String, pub name: String, pub disambiguation: Option, pub country: Option, pub artist_type: Option, pub score: u8, } /// A release entry in an artist's discography. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DiscographyEntry { pub mbid: String, pub title: String, pub date: Option, pub release_type: Option, pub track_count: Option, } /// A release group (deduplicated album/EP/single concept). #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReleaseGroupEntry { pub mbid: String, pub title: String, pub primary_type: Option, pub secondary_types: Vec, pub first_release_date: Option, /// MBID of the first release in this group (for fetching tracks). pub first_release_mbid: Option, /// True if the queried artist is not the primary credit on this release group. #[serde(default)] pub featured: bool, } /// A track within a release. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReleaseTrack { pub recording_mbid: String, pub title: String, pub track_number: Option, pub disc_number: Option, pub duration_ms: Option, } /// A similar artist returned by Last.fm or another provider. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct SimilarArtist { pub name: String, pub mbid: Option, pub match_score: f64, } /// A popular/top track for an artist from Last.fm. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PopularTrack { pub name: String, pub mbid: Option, pub playcount: u64, } /// Result from a lyrics lookup. #[derive(Debug, Clone, Serialize, Deserialize)] pub struct LyricsResult { pub found: bool, pub lyrics: Option, pub synced_lyrics: Option, }