#[warn(missing_docs)]
use serde::{Deserialize, Serialize};
use crate::models::{Artist, ContributorArtist, DeezerArray, DeezerObject, Genre, Track};
use crate::Result;
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct Album {
pub id: u64,
pub title: String,
pub upc: String,
pub link: String,
#[serde(rename = "share")]
pub share_link: String,
pub cover: String,
pub cover_small: String,
pub cover_medium: String,
pub cover_big: String,
pub cover_xl: String,
pub genre_id: Option<i32>,
pub genres: DeezerArray<AlbumGenre>,
pub label: String,
pub nb_tracks: u64,
#[serde(rename = "duration")]
pub duration_in_seconds: u64,
pub fans: u64,
pub rating: u64,
pub release_date: String,
pub record_type: String,
pub available: bool,
#[serde(default)]
#[serde(rename = "alternative")]
pub alternative_album: Option<Box<Album>>,
#[serde(rename = "tracklist")]
tracklist_api_url: String,
#[serde(rename = "explicit_lyrics")]
pub has_explicit_lyrics: bool,
pub contributors: Vec<ContributorArtist>,
pub artist: AlbumArtist,
pub tracks: DeezerArray<AlbumTrack>,
}
impl DeezerObject for Album {
fn get_api_url(id: u64) -> String {
format!("album/{}", id)
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct AlbumArtist {
pub id: u64,
pub name: String,
pub picture: String,
pub picture_small: String,
pub picture_medium: String,
pub picture_big: String,
pub picture_xl: String,
}
impl AlbumArtist {
pub async fn get_full(&self) -> Result<Artist> {
let artist = Artist::get(self.id).await?.unwrap();
Ok(artist)
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct AlbumTrackArtist {
pub id: u64,
pub name: String,
pub tracklist: String,
}
impl AlbumTrackArtist {
pub async fn get_full(&self) -> Result<Artist> {
let artist = Artist::get(self.id).await?.unwrap();
Ok(artist)
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct AlbumTrack {
pub id: u64,
pub readable: bool,
pub title: String,
pub title_short: String,
pub title_version: String,
pub link: String,
#[serde(rename = "duration")]
pub duration_in_seconds: u64,
pub rank: u64,
pub explicit_lyrics: bool,
pub preview: String,
pub artist: AlbumTrackArtist,
}
impl AlbumTrack {
pub async fn get_full(&self) -> Result<Track> {
let track = Track::get(self.id).await?.unwrap();
Ok(track)
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct AlbumGenre {
pub id: u64,
pub name: String,
pub picture: String,
}
impl AlbumGenre {
pub async fn get_full(&self) -> Result<Genre> {
let genre = Genre::get(self.id).await?.unwrap();
Ok(genre)
}
}