use axum::{extract::Query, response::Response, routing::get, Router, http::StatusCode}; use serde::Deserialize; use crate::types::http::ResponseCode; #[derive(Deserialize)] struct AvatarRequest { user_id: u64, } async fn avatar(params: Option>) -> Response { let Some(params) = params else { return ResponseCode::BadRequest.text("Missing query paramaters"); }; let custom = format!("/image/custom/avatar/{}.png", params.user_id); let default = format!("/image/default/{}.png", params.user_id % 25); let file = ResponseCode::Success.file(&custom).await; if file.status() != StatusCode::OK { return ResponseCode::Success.file(&default).await } file } #[derive(Deserialize)] struct BannerRequest { user_id: u64, } async fn banner(params: Option>) -> Response { let Some(params) = params else { return ResponseCode::BadRequest.text("Missing query paramaters"); }; let custom = format!("/image/custom/banner/{}.png", params.user_id); let file = ResponseCode::Success.file(&custom).await; if file.status() != StatusCode::OK { return ResponseCode::NotFound.text("User does not have a custom banner") } file } pub fn router() -> Router { Router::new() .route("/avatar", get(avatar)) .route("/banner", get(banner)) }