use actix_web::middleware::Logger; use actix_web::{App, HttpResponse, HttpServer, Responder, get, post, web}; use clap::Parser; use env_logger::Env; /// Simple hello world HTTP server #[derive(clap::Parser, Debug)] #[command(version, about, long_about = None)] struct Args { /// Listen address #[arg(env, short, long, default_value = "0.0.0.0:8000")] listen_addr: String, } #[get("/")] async fn hello() -> impl Responder { HttpResponse::Ok().body("Hello world!") } #[post("/echo")] async fn echo(req_body: String) -> impl Responder { HttpResponse::Ok().body(req_body) } async fn manual_hello() -> impl Responder { HttpResponse::Ok().body("Hey there!") } #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init_from_env(Env::default().default_filter_or("info")); let args = Args::parse(); log::info!("Starting to listen on {}", args.listen_addr); HttpServer::new(|| { App::new() .wrap(Logger::default()) .service(hello) .service(echo) .route("/hey", web::get().to(manual_hello)) }) .bind(args.listen_addr)? .run() .await } #[cfg(test)] mod test { use crate::Args; #[test] fn verify_cli() { use clap::CommandFactory; Args::command().debug_assert() } }