From 28d1dac83fe657934607b1be85199e3017199d2d Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Mon, 28 Nov 2022 00:15:15 +0100 Subject: [PATCH] Macros to extract data from request --- src/main.rs | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main.rs b/src/main.rs index 4e21a83..7bd6bfe 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,6 +30,21 @@ macro_rules! response_image { } } +macro_rules! extract_data { + ($req:expr,$n:expr) => { + $req.uri().path().split('/').nth($n).unwrap() + } +} + +macro_rules! extract_header { + ($req:expr,$header:expr) => { + match $req.headers().get($header) { + Some(header) => header.to_str().unwrap_or(""), + _ => "" + } + } +} + #[derive(Debug)] struct ImageError(image::ImageError); @@ -247,7 +262,7 @@ fn image_to_cursor(img: RgbImage, scale: u32) -> Result>, ImageEr #[get("/gen/0/{data}")] async fn img_gen0(req: HttpRequest) -> Result { - let data = req.uri().path().split('/').nth(3).unwrap(); + let data = extract_data!(req, 3); let cursor = make_png(32, 32, 16, percent_decode_str(data).into_iter().borrow_mut())?; Ok(response_image!(cursor)) } @@ -255,7 +270,7 @@ async fn img_gen0(req: HttpRequest) -> Result { #[get("/gen/1/{dim_x}/{dim_y}/{scale}/{data}")] async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result { let (dim_x, dim_y, scale) = path.into_inner(); - let data = req.uri().path().split('/').nth(6).unwrap(); + let data = extract_data!(req, 6); let cursor = make_png(dim_x, dim_y, scale, percent_decode_str(data).into_iter().borrow_mut())?; Ok(response_image!(cursor)) } @@ -263,10 +278,7 @@ async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result< #[get("/gen/2/{dim_x}/{dim_y}/{scale}")] async fn img_gen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result { let (dim_x, dim_y, scale) = path.into_inner(); - let data = match req.headers().get("user-agent") { - Some(header) => header.to_str().unwrap_or(""), - _ => "" - }; + let data = extract_header!(req, "user-agent"); let cursor = make_png(dim_x, dim_y, scale, &mut data.bytes())?; Ok(response_image!(cursor)) } @@ -274,10 +286,7 @@ async fn img_gen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result< #[get("/gen/3/{scale}")] async fn img_gen3(req: HttpRequest, path: web::Path) -> Result { let scale = path.into_inner(); - let data = match req.headers().get("user-agent") { - Some(header) => header.to_str().unwrap_or(""), - _ => "" - }; + let data = extract_header!(req, "user-agent"); let rgbimg: RgbImage = rgb_encode(ImageBuffer::new(TIMEAVATAR_SIZE_U32, TIMEAVATAR_SIZE_U32), &mut data.bytes())?; let mut resimg: RgbImage = ImageBuffer::new(60 * TIMEAVATAR_SIZE_U32, 24 * TIMEAVATAR_SIZE_U32); let time = OffsetDateTime::now_utc().time(); @@ -289,7 +298,7 @@ async fn img_gen3(req: HttpRequest, path: web::Path) -> Result>>) -> Result { - let data = req.uri().path().split('/').nth(3).unwrap(); + let data = extract_data!(req, 3); let scale = 16; let img: RgbImage = ({ let canvas_option = &mut *canvas0.lock().unwrap(); @@ -302,7 +311,7 @@ async fn img_pgen0(req: HttpRequest, canvas0: web::Data>>) -> #[get("/pgen/1/{dim_x}/{dim_y}/{scale}/{data}")] async fn img_pgen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>, canvas1: web::Data>>) -> Result { let (dim_x, dim_y, scale) = path.into_inner(); - let data = req.uri().path().split('/').nth(6).unwrap(); + let data = extract_data!(req, 6); let img: RgbImage = ({ let canvas_option = &mut *canvas1.lock().unwrap(); Ok(apply_to_canvas( |c, d| rgb_encode_to_canvas(c, d), &mut canvas_option.0, Some((dim_x, dim_y)), data)?.img.clone()) @@ -314,10 +323,7 @@ async fn img_pgen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>, canvas1: #[get("/pgen/2/{dim_x}/{dim_y}/{scale}")] async fn img_pgen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>, canvas1: web::Data>>) -> Result { let (dim_x, dim_y, scale) = path.into_inner(); - let data = match req.headers().get("user-agent") { - Some(header) => header.to_str().unwrap_or(""), - _ => "" - }; + let data = extract_header!(req, "user-agent"); let img: RgbImage = ({ let canvas_option = &mut *canvas1.lock().unwrap(); Ok(apply_to_canvas( |c, d| rgb_encode_to_canvas(c, d), &mut canvas_option.0, Some((dim_x, dim_y)), data)?.img.clone()) @@ -329,10 +335,7 @@ async fn img_pgen2(req: HttpRequest, path: web::Path<(u32, u32, u32)>, canvas1: #[get("/pgen/3/{scale}")] async fn img_pgen3(req: HttpRequest, path: web::Path, canvas2: web::Data>>) -> Result { let scale = path.into_inner(); - let data = match req.headers().get("user-agent") { - Some(header) => header.to_str().unwrap_or(""), - _ => "" - }; + let data = extract_header!(req, "user-agent"); let time = OffsetDateTime::now_utc().time(); let (hour, minute): (i64, i64) = (time.hour().into(), time.minute().into()); let rgbimg: RgbImage = rgb_encode(ImageBuffer::new(TIMEAVATAR_SIZE_U32, TIMEAVATAR_SIZE_U32), &mut data.bytes())?; -- 2.34.1