use listenbrainz::raw::response::UserPlayingNowResponse; use serde::{Deserialize, Serialize}; use crate::Result; pub async fn get_now_playing(client: &listenbrainz::raw::Client) -> Result { let playingnow = client.user_playing_now("celblossom")?; Ok(NowPlayingData::new(playingnow)) } #[derive(Serialize, Deserialize, Default)] pub struct NowPlayingData { pub is_scrobbling: bool, pub song: Option, pub artist: Option, } impl NowPlayingData { fn new(playingnow: UserPlayingNowResponse) -> Self { let is_scrobbling = playingnow.payload.count > 0; if is_scrobbling { Self { is_scrobbling, song: Some( playingnow .payload .listens .first() .unwrap() .track_metadata .track_name .clone(), ), artist: Some( playingnow .payload .listens .first() .unwrap() .track_metadata .artist_name .clone(), ), } } else { Self { is_scrobbling, song: None, artist: None, } } } }