diff options
author | cel 🌸 <cel@blos.sm> | 2023-02-15 18:08:23 +0000 |
---|---|---|
committer | cel 🌸 <cel@blos.sm> | 2023-02-15 18:08:23 +0000 |
commit | b8bbceb00be3ba01cd14a111f4dfc407880f493e (patch) | |
tree | a5a4897e10f992b70c05bb494c4eb3c1c09091e8 /src/main.rs | |
parent | fce07d2749f2e5fad3e4925919233d2f3796b684 (diff) | |
download | blossom-b8bbceb00be3ba01cd14a111f4dfc407880f493e.tar.gz blossom-b8bbceb00be3ba01cd14a111f4dfc407880f493e.tar.bz2 blossom-b8bbceb00be3ba01cd14a111f4dfc407880f493e.zip |
refactor rust into separate files and add proper error handling
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 113 |
1 files changed, 24 insertions, 89 deletions
diff --git a/src/main.rs b/src/main.rs index 1a2aab7..ba7bed0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,82 +1,27 @@ -use std::borrow::Cow; - -use listenbrainz::raw::response::UserPlayingNowResponse; -use mastodon_async::{Data, Mastodon}; use rocket::fs::{relative, FileServer}; use rocket::http::Status; -use rocket::response::Responder; use rocket::Request; +use rocket::State; use rocket_dyn_templates::{context, Template}; -use serde::{Deserialize, Serialize}; +use std::borrow::Cow; -#[macro_use] -extern crate rocket; +mod scrobbles; +mod skweets; -#[derive(Serialize, Deserialize)] -struct ScrobbleData { - is_scrobbling: bool, - song: Option<String>, - artist: Option<String>, +struct Clients { + listenbrainz: listenbrainz::raw::Client, + skinnyverse: mastodon_async::Mastodon, } -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, - } - } - } -} +#[macro_use] +extern crate rocket; #[get("/")] -async fn home() -> Template { - let listenbrainz = listenbrainz::raw::Client::new(); - let playingnow = listenbrainz.user_playing_now("celblossom").unwrap(); - let listenbrainz_data = ScrobbleData::new(playingnow); - - let mut skinny_data = Data::default(); - skinny_data.base = Cow::from("https://skinnyver.se"); - let skinny_client = Mastodon::from(skinny_data); - let mut skweets = skinny_client - .statuses("cel", Default::default()) - .await - .unwrap() - .initial_items; - - skweets.truncate(6); - - Template::render( +async fn home(clients: &State<Clients>) -> Result<Template, BlossomError> { + Ok(Template::render( "home", - context! { is_live: false, listenbrainz: listenbrainz_data, skweets: skweets }, - ) + context! { is_live: false, listenbrainz: scrobbles::get_now_playing(&clients.listenbrainz).await?, skweets: skweets::get_recents(&clients.skinnyverse).await? }, + )) } #[get("/contact")] @@ -89,16 +34,8 @@ async fn plants() -> Result<Template, BlossomError> { todo!() } -// #[get("/test")] -// async fn test() -> Result<Template, BlossomError> { -// let posts = reqwest::get("https://skinnyver.se/api/v1/accounts/cel/statuses") -// .await? -// .json() -// .await?; -// } - #[catch(default)] -fn error(status: Status, req: &Request) -> Template { +fn catcher(status: Status, req: &Request) -> Template { let message; if status.code == 404 { message = "i either haven't built this page yet or it looks like you're a little lost"; @@ -118,12 +55,19 @@ fn error(status: Status, req: &Request) -> Template { #[tokio::main] async fn main() -> Result<(), rocket::Error> { + let mut skinny_data = mastodon_async::Data::default(); + skinny_data.base = Cow::from("https://skinnyver.se"); + let _rocket = rocket::build() + .manage(Clients { + listenbrainz: listenbrainz::raw::Client::new(), + skinnyverse: mastodon_async::Mastodon::from(skinny_data), + }) .attach(Template::custom(|engines| { engines.tera.autoescape_on(vec![]); })) .mount("/", routes![home, contact]) - .register("/", catchers![error]) + .register("/", catchers![catcher]) .mount("/", FileServer::from(relative!("static"))) .launch() .await?; @@ -131,14 +75,5 @@ async fn main() -> Result<(), rocket::Error> { Ok(()) } -#[derive(Responder)] -enum BlossomError { - #[response(status = 500)] - Reqwest(&'static str, #[response(ignore)] reqwest::Error), -} - -impl From<reqwest::Error> for BlossomError { - fn from(e: reqwest::Error) -> Self { - BlossomError::Reqwest("reqwest error", e) - } -} +mod error; +use error::BlossomError; |