1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
//! [Artist API](https://developers.deezer.com/api/artist) #[warn(missing_docs)] use crate::models::DeezerObject; use crate::Result; use serde::{Deserialize, Serialize}; /// Contains all the information provided for an Artist. /// /// # Examples /// /// You can query an artist by id via the [`DeezerObject::get()`] method: /// /// ```rust /// # use deezer::models::*; /// # use deezer::DeezerError; /// # /// # #[tokio::main] /// # async fn main() -> Result<(), DeezerError> { /// let artist = Artist::get(27).await?.unwrap(); /// # assert_eq!(artist.id, 27); /// # println!("{:?}", artist); /// # Ok(()) /// # } /// ``` /// /// Or you can use [`DeezerClient::artist()`](crate::DeezerClient::artist): /// /// ```rust /// # use deezer::models::*; /// # use deezer::{DeezerClient, DeezerError}; /// # /// # #[tokio::main] /// # async fn main() -> Result<(), DeezerError> { /// let deezer = DeezerClient::new(); /// /// let artist = deezer.artist(27).await?.unwrap(); /// # assert_eq!(artist.id, 27); /// # Ok(()) /// # } /// /// ``` #[derive(Deserialize, Serialize, Debug)] pub struct Artist { /// `The artist's Deezer id` pub id: u64, /// `The artist's name` pub name: String, /// `The url of the artist on Deezer` pub link: String, /// `The share link of the artist on Deezer` #[serde(rename = "share")] pub share_link: String, /// `The url of the artist picture.` pub picture: String, /// `The url of the artist picture in size small` pub picture_small: String, /// `The url of the artist picture in size medium` pub picture_medium: String, /// `The url of the artist picture in size big` pub picture_big: String, /// `The url of the artist picture in size xl` pub picture_xl: String, /// `The number of artist's albums` pub nb_album: u64, /// `The number of artist's fans` pub nb_fan: u64, /// `True if the artist has a smartradio` #[serde(rename = "radio")] pub has_radio: bool, /// `API Link to the top of this artist` pub tracklist: String, } impl DeezerObject for Artist { fn get_api_url(id: u64) -> String { format!("artist/{}", id) } } /// Subset of [`Artist`]. /// /// Use [`get_full()`] for the corresponding [`Artist`] struct. /// /// [`get_full()`]: ContributorArtist::get_full #[derive(Deserialize, Serialize, Debug, Clone)] pub struct ContributorArtist { /// `The artist's Deezer id` pub id: u64, /// `The artist's name` pub name: String, /// `The url of the artist on Deezer` pub link: String, /// `The share link of the artist on Deezer` #[serde(rename = "share")] pub share_link: String, /// `The url of the artist picture in size small.` pub picture_small: String, /// `The url of the artist picture in size medium.` pub picture_medium: String, /// `The url of the artist picture in size big.` pub picture_big: String, /// `The url of the artist picture in size xl.` pub picture_xl: String, /// `True if the artist has a smartradio` #[serde(rename = "radio")] pub has_radio: bool, /// `API Link to the top of this artist` pub tracklist: String, } impl ContributorArtist { /// Returns the corresponding [`Artist`]. pub async fn get_full(&self) -> Result<Artist> { // Safety: unwrap should be okay here, as the artist is referenced by the deezer api let artist = Artist::get(self.id).await?.unwrap(); Ok(artist) } }