This commit is contained in:
parent
8480e1c56b
commit
9de05362be
1 changed files with 36 additions and 23 deletions
59
src/main.rs
59
src/main.rs
|
|
@ -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]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue