4 routing::{get, get_service},
5 extract::{Path, TypedHeader},
10 async fn hello(Path(name): Path<String>, user_agent: Option<TypedHeader<axum::headers::UserAgent>>) -> impl response::IntoResponse {
11 if let Some(TypedHeader(user_agent)) = user_agent {
12 (StatusCode::OK, format!("Hello {} from {}", name, user_agent))
14 (StatusCode::OK, format!("Hello {}", name))
20 tracing_subscriber::fmt::init();
21 let app = Router::new()
22 .route("/hello/:name", get(hello))
24 get_service(tower_http::services::ServeFile::new("Cargo.toml").precompressed_gzip())
25 .handle_error(|e: io::Error| async move {
26 (StatusCode::INTERNAL_SERVER_ERROR, format!("Unhandled internal error: {}", e))
30 tower::ServiceBuilder::new()
32 tower_http::trace::TraceLayer::new_for_http()
33 .make_span_with(tower_http::trace::DefaultMakeSpan::default().include_headers(true)),
37 let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 3000));
38 tracing::info!("listening on {}", addr);
39 axum::Server::bind(&addr)
40 .serve(app.into_make_service())