use listenbrainz::raw::response::UserPlayingNowResponse; use rocket::fs::{relative, FileServer}; use rocket::response::Responder; use rocket_dyn_templates::{context, Template}; use serde::{Deserialize, Serialize}; #[macro_use] extern crate rocket; #[derive(Serialize, Deserialize)] struct ScrobbleData { is_scrobbling: bool, song: Option, artist: Option, } impl ScrobbleData { 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, } } } } #[get("/")] async fn home() -> Template { let listenbrainz = listenbrainz::raw::Client::new(); let playingnow = listenbrainz.user_playing_now("celblossom").unwrap(); println!( "{}", playingnow.payload.listens[0].track_metadata.artist_name ); let listenbrainz_data = ScrobbleData::new(playingnow); println!("{}", listenbrainz_data.is_scrobbling); Template::render( "home", context! { is_live: false, listenbrainz: listenbrainz_data }, ) } #[get("/contact")] async fn contact() -> Template { Template::render("contact", context! {}) } // #[get("/test")] // async fn test() -> Result { // let posts = reqwest::get("https://skinnyver.se/api/v1/accounts/cel/statuses").await; // posts // } #[tokio::main] async fn main() -> Result<(), rocket::Error> { let _rocket = rocket::build() .attach(Template::fairing()) .mount("/", routes![home, contact]) .mount("/", FileServer::from(relative!("static"))) .launch() .await?; Ok(()) } #[derive(Responder)] enum BlossomError { #[response(status = 500)] Reqwest(&'static str, #[response(ignore)] reqwest::Error), } impl From for BlossomError { fn from(e: reqwest::Error) -> Self { BlossomError::Reqwest("reqwest error", e) } }