From c7b5e3c953e7b5952a45c69d9f48dcdaedc51e22 Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Wed, 12 Oct 2022 00:30:00 +0200 Subject: [PATCH] Implement /gen/2 and /pgen/2 --- src/main.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 7a03c3b..01ce022 100644 --- a/src/main.rs +++ b/src/main.rs @@ -152,7 +152,7 @@ struct Canvas1(Option); #[get("/hello/{name}")] async fn greet(name: web::Path, req: HttpRequest) -> impl Responder { println!("{:?}", req); - format!("Hello {name}!") + format!("Hello {name}!\n{:?}", req.headers().get("user-agent")) } fn rgb_encode_to_canvas(mut canvas: Canvas, data: &mut dyn Iterator) -> Result { @@ -251,6 +251,19 @@ async fn img_gen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>) -> Result< .body(cursor.into_inner())) } +#[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 cursor = make_png(dim_x, dim_y, scale, &mut data.bytes())?; + Ok(HttpResponse::build(StatusCode::OK) + .content_type("image/png") + .body(cursor.into_inner())) +} + #[get("/pgen/0/{data}")] async fn img_pgen0(req: HttpRequest, canvas0: web::Data>>) -> Result { let data = req.uri().path().split("/").skip(3).next().unwrap(); @@ -279,6 +292,23 @@ async fn img_pgen1(req: HttpRequest, path: web::Path<(u32, u32, u32)>, canvas1: .body(cursor.into_inner())) } +#[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 img: RgbImage = ({ + let canvas_option = &mut *canvas1.lock().unwrap(); + Ok(apply_to_canvas( |c, d| to_canvasresult(rgb_encode_to_canvas(c, d)), &mut canvas_option.0, Some((dim_x, dim_y)), data)?.img.clone()) + } as Result)?; + let cursor = image_to_cursor(img, scale)?; + Ok(HttpResponse::build(StatusCode::OK) + .content_type("image/png") + .body(cursor.into_inner())) +} + #[get("/pdrop/{canvas_id}")] async fn pdrop(canvas_id: web::Path, canvas0: web::Data>>, canvas1: web::Data>>) -> Result { let canvas_id = canvas_id.into_inner(); @@ -302,8 +332,10 @@ async fn main() -> std::io::Result<()> { .service(greet) .service(img_gen0) .service(img_gen1) + .service(img_gen2) .service(img_pgen0) .service(img_pgen1) + .service(img_pgen2) .service(pdrop) .app_data(web::Data::new(canvas0.clone())) .app_data(web::Data::new(canvas1.clone())) -- 2.34.1