use actix_web::{middleware, web, App, HttpResponse, HttpServer}; use awmpde::{form_or_multipart_unwrap, FromActixMultipart}; use serde::Deserialize; #[derive(Debug, Deserialize, Clone)] pub struct AnimalDesc { name: String, kind: String, } #[derive(Debug, Deserialize, FromActixMultipart)] pub struct IsAnimalRequest { #[serde_json] animal_desc: AnimalDesc, } #[form_or_multipart_unwrap] async fn is_animal( awmpde::FormOrMultipart(req): awmpde::FormOrMultipart, ) -> HttpResponse { let IsAnimalRequest { animal_desc: AnimalDesc { kind, .. }, } = req; let kind: &str = &kind; let out = match kind { "dog" => true, "cat" => true, _ => false, }; actix_web::HttpResponse::Ok().body(format!("out is {}", out)) } #[actix_web::main] async fn main() -> std::io::Result<()> { std::env::set_var("RUST_LOG", "actix_server=info,actix_web=info"); env_logger::init(); HttpServer::new(|| { App::new() .wrap(middleware::DefaultHeaders::new().header("X-Version", "0.2")) .wrap(middleware::Compress::default()) .wrap(middleware::Logger::default()) .route("/is_animal", web::post().to(is_animal)) }) .bind("127.0.0.1:8080")? .run() .await }