huellas/src/server.rs
Felipe Contreras Salinas 78cb376791
chore: use native HTML5 dialog element and refactor backend into hexagonal architecture. (#48)
Reviewed-on: #48
Co-authored-by: Felipe Contreras Salinas <felipe@bstr.cl>
Co-committed-by: Felipe Contreras Salinas <felipe@bstr.cl>
2025-06-11 22:46:58 -04:00

37 lines
1.1 KiB
Rust

//! HTTP Server
use anyhow::Result;
use axum::Router;
use axum::serve::ListenerExt;
use std::net::SocketAddr;
use tower_http::services::ServeDir;
pub async fn serve(place_routes: Router) -> Result<()> {
let port = std::env::var("PORT").unwrap_or_default();
let port = str::parse(&port).unwrap_or(3000);
let address = SocketAddr::from(([0, 0, 0, 0], port));
let routes = Router::new()
.nest("/places", place_routes)
.fallback_service(ServeDir::new("static"));
tracing::debug!("listening on {}", address);
let listener = tokio::net::TcpListener::bind(address)
.await?
.tap_io(|tcp_stream| {
if let Err(err) = tcp_stream.set_nodelay(true) {
tracing::trace!("failed to set TCP_NODELAY on incoming connection: {err:#}");
}
});
axum::serve(listener, routes.into_make_service())
.with_graceful_shutdown(shutdown_signal())
.await?;
Ok(())
}
async fn shutdown_signal() {
tokio::signal::ctrl_c()
.await
.expect("failed to listen for ctrl-c");
tracing::debug!("Received shutdown signal");
}