From b8bbceb00be3ba01cd14a111f4dfc407880f493e Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Wed, 15 Feb 2023 18:08:23 +0000 Subject: refactor rust into separate files and add proper error handling --- src/scrobbles.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/scrobbles.rs (limited to 'src/scrobbles.rs') diff --git a/src/scrobbles.rs b/src/scrobbles.rs new file mode 100644 index 0000000..07b1ad1 --- /dev/null +++ b/src/scrobbles.rs @@ -0,0 +1,55 @@ +use listenbrainz::raw::response::UserPlayingNowResponse; +use serde::{Deserialize, Serialize}; + +use crate::error::BlossomError; + +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)] +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, + } + } + } +} -- cgit