]> piware.de Git - learn-rust.git/blob - axum-server/src/main.rs
axum-server: Serve single static file
[learn-rust.git] / axum-server / src / main.rs
1 use std::io;
2
3 use axum::{
4     routing::{get, get_service},
5     extract::Path,
6     http::{StatusCode},
7     response,
8     Router};
9
10 async fn hello(Path(name): Path<String>) -> impl response::IntoResponse {
11     (StatusCode::OK, format!("Hello {}", name))
12 }
13
14 #[tokio::main]
15 async fn main() {
16     tracing_subscriber::fmt::init();
17     let app = Router::new()
18         .route("/hello/:name", get(hello))
19         .route("/static",
20                get_service(tower_http::services::ServeFile::new("Cargo.toml").precompressed_gzip())
21                    .handle_error(|e: io::Error| async move {
22                        (StatusCode::INTERNAL_SERVER_ERROR, format!("Unhandled internal error: {}", e))
23                    })
24         )
25         .layer(
26             tower::ServiceBuilder::new()
27                 .layer(tower_http::trace::TraceLayer::new_for_http())
28         );
29
30     let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 3000));
31     tracing::info!("listening on {}", addr);
32     axum::Server::bind(&addr)
33         .serve(app.into_make_service())
34         .await
35         .unwrap();
36 }