use serde::{Deserialize, Serialize}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Root { pub recenttracks: Recenttracks, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Recenttracks { pub track: Vec, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Track { pub artist: Artist, pub album: Album, pub name: String, pub image: Vec, #[serde(rename = "@attr")] pub attr: Option, pub url: String, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Artist { pub mbid: String, #[serde(rename = "#text")] pub text: String, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Album { pub mbid: String, #[serde(rename = "#text")] pub text: String, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Attr { pub nowplaying: String, } #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct Image { pub size: String, #[serde(rename = "#text")] pub text: String, } pub struct NowPlaying { pub artist: String, pub title: String, pub image: String, pub url: String, } impl std::fmt::Display for NowPlaying { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}, {}", self.title, self.artist) } }