From 9de05362be2c6c26cb83b65daafb910ca522f682 Mon Sep 17 00:00:00 2001 From: BloxerHD018 Date: Sat, 4 Jul 2026 17:56:51 +0100 Subject: [PATCH] Fix Error Handling --- src/main.rs | 59 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/src/main.rs b/src/main.rs index 9e7bb68..9d2c42e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,13 @@ use dotenvy::dotenv; use rocket::fs::NamedFile; use rocket::State; +use rocket::http::Status; use reqwest::Client; use bytes::Bytes; static MII_RENDERER_URL: &str = "https://mii-renderer.bloxerhd.co.uk"; -async fn request_mii_render(client: &State, mii_data: &str, ext: &str) -> Option { +async fn request_mii_render(client: &State, mii_data: &str, ext: &str) -> Result { let req_str = format!("{MII_RENDERER_URL}/miis/image.{ext}?data={mii_data}"); let response = client.get(req_str) @@ -15,33 +16,35 @@ async fn request_mii_render(client: &State, mii_data: &str, ext: &str) - match response { Ok(res) => { + let status = res.status(); + + if !status.is_success() { + let text = res.text().await.unwrap_or_default(); + println!("Error Returned from Renderer: ({}) {text}", status.as_u16()); + return Err((Status::new(status.as_u16()), format!("Error Returned from Renderer: {text}"))) + } + let bytes = res.bytes().await; match bytes { Ok(bytes) => { - Some(bytes) + Ok(bytes) }, - Err(_) => { - println!("Error Getting Response Bytes"); - None + Err(e) => { + println!("Error Parsing Response Bytes: {e}"); + Err((Status::new(e.status().unwrap().as_u16()), "Error Parsing Response Bytes".into())) } } - } - Err(err) => { - let status = match err.status() { - Some(err_status) => { - err_status.to_string() - } - None => String::from("No Response") - }; - println!("Error Requesting New Render - {}", status); - None + }, + Err(e) => { + println!("Transport Error getting Render: {e}"); + Err((Status::new(e.status().unwrap().as_u16()), "Transport Error getting Render".into())) } } } #[rocket::get("//")] -pub async fn mii_render(pid: i32, path: &str, client: &State) -> Option { - let ext = path.splitn(2, ".").nth(1)?; +pub async fn mii_render(pid: i32, path: &str, client: &State) -> Result { + let ext = path.splitn(2, ".").nth(1).unwrap_or(".png"); let mii_data = { let route = format!("https://account.spfn.net/api/v2/users/{pid}/mii"); @@ -50,16 +53,26 @@ pub async fn mii_render(pid: i32, path: &str, client: &State) -> Option< .await; let response = match response { - Ok(res) => res, + Ok(res) => { + let status = res.status(); + + if !status.is_success() { + let text = res.text().await.unwrap_or_default(); + + return Err((Status::new(status.as_u16()), format!("Error Returned from Renderer: {text}"))) + } + + res + }, Err(e) => { - println!("Error Fetching Mii Data: {e}"); - return None; + println!("Transport Error fetching Mii Data: {e}"); + return Err(((Status::new(e.status().unwrap().as_u16())), "Transport Error fetching Mii Data".into())) } }; let data: String = match response.json().await { Ok(data) => data, - Err(_) => return None, + Err(e) => return Err((Status::new(e.status().unwrap().as_u16()), "Error Parsing Json Response when fetching Mii Data".into())), }; data @@ -111,10 +124,10 @@ pub async fn mii_render(pid: i32, path: &str, client: &State) -> Option< let img = match NamedFile::open(img_path).await { Ok(img) => img, - Err(_) => return None + Err(_) => return Err((Status::InternalServerError, "Failed to Open Image File".into())), }; - Some(img) + Ok(img) } #[rocket::launch]