#[macro_use] extern crate lazy_static; use actix_web::{get, post, App, HttpResponse, HttpServer, Responder}; use listenfd::ListenFd; mod error; mod image_api; mod result; #[get("/")] async fn hello() -> impl Responder { HttpResponse::Ok().body("Hey, this is an API!") } #[post("/images")] async fn create_image(req_body: String) -> impl Responder { let data = match image_api::extract_data(&req_body) { Err(e) => return HttpResponse::BadRequest().body(format!("fail: {}", e.to_string())), Ok(d) => d, }; if let Err(e) = image_api::generate_images(data) { return HttpResponse::BadRequest().body(format!( "Unable to extract image from data URI: {}", e.to_string() )); } HttpResponse::Ok().body("Image created.") } #[get("/products")] async fn get_products(_req_body: String) -> impl Responder { HttpResponse::Ok().body("got products!") } #[actix_web::main] async fn main() -> std::io::Result<()> { let mut listenfd = ListenFd::from_env(); let mut server = HttpServer::new(|| { App::new() .service(hello) .service(create_image) .service(get_products) }); server = if let Some(l) = listenfd .take_tcp_listener(0) .expect("Unable to grab TCP listener!") { // "Debug mode" with cargo watch auto-reloading server.listen(l)? } else { // "Release mode" server.bind("127.0.0.1:8000")? }; server.run().await }