diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs index 7b5d3c2..f2b81ae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,60 @@ +use tokio::net::TcpListener; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; +use unnamed_server::state::AppState; + +use crate::config::Config; + +mod config; #[tokio::main] #[tracing::instrument] async fn main() -> Result<(), unnamed_server::Error> { tracing_subscriber::registry() .with( - tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| { - "example_tracing_aka_logging=debug,tower_http=debug,axum::rejection=trace".into() - }), + tracing_subscriber::EnvFilter::try_from_default_env() + .unwrap_or_else(|_| "unnamed_server=debug".into()), ) .with(tracing_subscriber::fmt::layer()) .init(); - let socket_addr = std::net::SocketAddr::from(([127, 0, 0, 1], 30000)); + let _ = dotenvy::dotenv(); + + let config = Config::init(); + + let state = AppState::new(config.database_url).await?; + + let app = unnamed_server::router(state); + + let listener = TcpListener::bind("127.0.0.1:30000").await?; + + tracing::info!("Server listening on http://{}", listener.local_addr()?); + + axum::serve(listener, app) + .with_graceful_shutdown(shutdown_signal()) + .await + .map_err(From::from) +} + +async fn shutdown_signal() { + let ctrl_c = async { + tokio::signal::ctrl_c() + .await + .expect("failed to install Ctrl+C handler"); + }; + + #[cfg(unix)] + let terminate = async { + tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()) + .expect("failed to install signal handler") + .recv() + .await; + }; + + #[cfg(not(unix))] + let terminate = std::future::pending::<()>(); - unnamed_server::serve(socket_addr).await + tokio::select! { + _ = ctrl_c => {}, + _ = terminate => {}, + } } |