Reviewed-on: #48 Co-authored-by: Felipe Contreras Salinas <felipe@bstr.cl> Co-committed-by: Felipe Contreras Salinas <felipe@bstr.cl>
37 lines
1.1 KiB
Rust
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");
|
|
}
|