#[warn(missing_docs)]
use crate::models::{Album, Artist, DeezerArray, DeezerObject, Playlist, PlaylistUser, Track};
use crate::Result;
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct Chart {
pub tracks: DeezerArray<ChartTrack>,
pub albums: DeezerArray<ChartAlbum>,
pub artists: DeezerArray<ChartArtist>,
pub playlists: DeezerArray<ChartPlaylist>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ChartTrack {
pub id: u64,
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,
#[serde(rename = "explicit_lyrics")]
pub has_explicit_lyrics: bool,
#[serde(default)]
pub preview_url: Option<String>,
pub position: u64,
pub artist: ChartTrackArtist,
pub album: ChartTrackAlbum,
}
impl ChartTrack {
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 ChartTrackArtist {
pub id: u64,
pub name: String,
pub link: String,
pub picture: String,
pub picture_small: String,
pub picture_medium: String,
pub picture_big: String,
pub picture_xl: String,
#[serde(rename = "radio")]
pub has_radio: bool,
}
impl ChartTrackArtist {
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 ChartTrackAlbum {
pub id: u64,
pub title: String,
pub cover: String,
pub cover_small: String,
pub cover_medium: String,
pub cover_big: String,
pub cover_xl: String,
}
impl ChartTrackAlbum {
pub async fn get_full(&self) -> Result<Album> {
let album = Album::get(self.id).await?.unwrap();
Ok(album)
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ChartAlbum {
pub id: u64,
pub title: String,
pub cover: String,
pub cover_small: String,
pub cover_medium: String,
pub cover_big: String,
pub cover_xl: String,
pub record_type: String,
#[serde(rename = "explicit_lyrics")]
pub has_explicit_lyrics: bool,
pub position: u64,
pub artist: ChartAlbumArtist,
}
impl ChartAlbum {
pub async fn get_full(&self) -> Result<Album> {
let album = Album::get(self.id).await?.unwrap();
Ok(album)
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ChartAlbumArtist {
pub id: u64,
pub name: String,
pub link: String,
pub picture: String,
pub picture_small: String,
pub picture_medium: String,
pub picture_big: String,
pub picture_xl: String,
#[serde(rename = "radio")]
pub has_radio: bool,
}
impl ChartAlbumArtist {
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 ChartArtist {
pub id: u64,
pub name: String,
pub link: String,
pub picture: String,
pub picture_small: String,
pub picture_medium: String,
pub picture_big: String,
pub picture_xl: String,
#[serde(rename = "radio")]
pub has_radio: bool,
pub position: u64,
}
impl ChartArtist {
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 ChartPlaylist {
pub id: u64,
pub title: String,
#[serde(rename = "public")]
pub is_public: bool,
pub link: String,
pub picture: String,
pub picture_small: String,
pub picture_medium: String,
pub picture_big: String,
pub picture_xl: String,
#[serde(default)]
pub position: u64,
pub user: PlaylistUser,
}
impl ChartPlaylist {
pub async fn get_full(&self) -> Result<Playlist> {
let playlist = Playlist::get(self.id).await?.unwrap();
Ok(playlist)
}
}