use serde::Deserialize; use super::{DzArray, Track, Album, Artist, Playlist, Podcast}; use crate::errors::ErrorKind; use reqwest::Method; #[derive(Deserialize, Debug)] pub struct Chart { pub tracks: DzArray, pub albums: DzArray, pub artists: DzArray, pub playlists: DzArray, pub podcasts: DzArray, } impl Chart { pub async fn get(client: &mut crate::Client, id: u64) -> Result { client.api_call(Method::GET, &format!("chart/{}", id), &()).await } pub async fn tracks(client: &mut crate::Client, id: u64) -> Result, ErrorKind> { client.api_call(Method::GET, &format!("chart/{}/tracks", id), &()).await } pub async fn albums(client: &mut crate::Client, id: u64) -> Result, ErrorKind> { client.api_call(Method::GET, &format!("chart/{}/albums", id), &()).await } pub async fn artists(client: &mut crate::Client, id: u64) -> Result, ErrorKind> { client.api_call(Method::GET, &format!("chart/{}/artists", id), &()).await } pub async fn playlists(client: &mut crate::Client, id: u64) -> Result, ErrorKind> { client.api_call(Method::GET, &format!("chart/{}/playlists", id), &()).await } pub async fn podcasts(client: &mut crate::Client, id: u64) -> Result, ErrorKind> { client.api_call(Method::GET, &format!("chart/{}/podcasts", id), &()).await } } #[derive(Deserialize, Debug)] pub struct ChartTrack { #[serde(flatten)] pub track: Track, pub position: u64, } #[derive(Deserialize, Debug)] pub struct ChartAlbum { #[serde(flatten)] pub album: Album, pub position: u64, } #[derive(Deserialize, Debug)] pub struct ChartArtist { #[serde(flatten)] pub artist: Artist, pub position: u64, }