use std::{io, time::Duration}; use axum::{routing, Router}; use tokio::net::TcpListener; use tokio_util::sync::CancellationToken; use tower_http::{timeout::TimeoutLayer, trace::TraceLayer}; pub struct Config { pub listen_port: u16, } pub async fn run(config: Config, token: CancellationToken) -> Result<(), io::Error> { let app = Router::new() .route("/", routing::get(|| async { "Hello kube world!" })) .layer(( TraceLayer::new_for_http(), TimeoutLayer::new(Duration::from_secs(10)), )); let listener = TcpListener::bind(("0.0.0.0", config.listen_port)) .await .unwrap(); let _ = axum::serve(listener, app) .with_graceful_shutdown(async move { token.cancelled().await; }) .await; Ok(()) }