use std::path::Path;
use axum::Router;
use axum::http::header::{CACHE_CONTROL, HeaderValue};
use tower_http::services::ServeDir;
use tower_http::set_header::SetResponseHeaderLayer;
pub async fn start(port: u16, target: &Path) -> std::io::Result<()> {
let serve_dir = ServeDir::new(target).append_index_html_on_directories(true);
let app = Router::new()
.fallback_service(serve_dir)
.layer(SetResponseHeaderLayer::overriding(
CACHE_CONTROL,
HeaderValue::from_static("no-cache, no-store, must-revalidate"),
));
let addr = std::net::SocketAddr::from(([127, 0, 0, 1], port));
let listener = tokio::net::TcpListener::bind(addr).await?;
axum::serve(listener, app)
.await
.map_err(|e| std::io::Error::other(format!("server error: {}", e)))
}