Fix Error Handling
All checks were successful
Build and Test / cache-mii (push) Successful in 3m1s

This commit is contained in:
BloxerHD 2026-07-04 17:56:51 +01:00
commit 9de05362be
Signed by: bloxerhd018
SSH key fingerprint: SHA256:ItSfcfhpXlfkMK3uQSDYW5X3XKm0hbHWQqWcCK57px8

View file

@ -1,12 +1,13 @@
use dotenvy::dotenv; use dotenvy::dotenv;
use rocket::fs::NamedFile; use rocket::fs::NamedFile;
use rocket::State; use rocket::State;
use rocket::http::Status;
use reqwest::Client; use reqwest::Client;
use bytes::Bytes; use bytes::Bytes;
static MII_RENDERER_URL: &str = "https://mii-renderer.bloxerhd.co.uk"; static MII_RENDERER_URL: &str = "https://mii-renderer.bloxerhd.co.uk";
async fn request_mii_render(client: &State<Client>, mii_data: &str, ext: &str) -> Option<Bytes> { async fn request_mii_render(client: &State<Client>, mii_data: &str, ext: &str) -> Result<Bytes, (Status, String)> {
let req_str = format!("{MII_RENDERER_URL}/miis/image.{ext}?data={mii_data}"); let req_str = format!("{MII_RENDERER_URL}/miis/image.{ext}?data={mii_data}");
let response = client.get(req_str) let response = client.get(req_str)
@ -15,33 +16,35 @@ async fn request_mii_render(client: &State<Client>, mii_data: &str, ext: &str) -
match response { match response {
Ok(res) => { 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; let bytes = res.bytes().await;
match bytes { match bytes {
Ok(bytes) => { Ok(bytes) => {
Some(bytes) Ok(bytes)
}, },
Err(_) => { Err(e) => {
println!("Error Getting Response Bytes"); println!("Error Parsing Response Bytes: {e}");
None Err((Status::new(e.status().unwrap().as_u16()), "Error Parsing Response Bytes".into()))
} }
} }
} },
Err(err) => { Err(e) => {
let status = match err.status() { println!("Transport Error getting Render: {e}");
Some(err_status) => { Err((Status::new(e.status().unwrap().as_u16()), "Transport Error getting Render".into()))
err_status.to_string()
}
None => String::from("No Response")
};
println!("Error Requesting New Render - {}", status);
None
} }
} }
} }
#[rocket::get("/<pid>/<path>")] #[rocket::get("/<pid>/<path>")]
pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Option<NamedFile> { pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Result<NamedFile, (Status, String)> {
let ext = path.splitn(2, ".").nth(1)?; let ext = path.splitn(2, ".").nth(1).unwrap_or(".png");
let mii_data = { let mii_data = {
let route = format!("https://account.spfn.net/api/v2/users/{pid}/mii"); 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<Client>) -> Option<
.await; .await;
let response = match response { 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) => { Err(e) => {
println!("Error Fetching Mii Data: {e}"); println!("Transport Error fetching Mii Data: {e}");
return None; return Err(((Status::new(e.status().unwrap().as_u16())), "Transport Error fetching Mii Data".into()))
} }
}; };
let data: String = match response.json().await { let data: String = match response.json().await {
Ok(data) => data, 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 data
@ -111,10 +124,10 @@ pub async fn mii_render(pid: i32, path: &str, client: &State<Client>) -> Option<
let img = match NamedFile::open(img_path).await { let img = match NamedFile::open(img_path).await {
Ok(img) => img, Ok(img) => img,
Err(_) => return None Err(_) => return Err((Status::InternalServerError, "Failed to Open Image File".into())),
}; };
Some(img) Ok(img)
} }
#[rocket::launch] #[rocket::launch]