use clap::Parser;
use config::Config;
use itertools::Itertools;
+use tokio::signal;
use tower::layer::Layer;
use tower::{ServiceBuilder, buffer::BufferLayer, limit::RateLimitLayer};
use tower_http::{
listener,
app_with_url_rewriting.into_make_service_with_connect_info::<SocketAddr>(),
)
+ .with_graceful_shutdown(shutdown_signal())
.await
.unwrap();
+
+ event!(Level::INFO, "Recipes stopped");
}
async fn user_authentication(
true
}
+
+async fn shutdown_signal() {
+ let ctrl_c = async {
+ signal::ctrl_c()
+ .await
+ .expect("failed to install Ctrl+C handler");
+ };
+
+ #[cfg(unix)]
+ let terminate = async {
+ signal::unix::signal(signal::unix::SignalKind::terminate())
+ .expect("failed to install signal handler")
+ .recv()
+ .await;
+ };
+
+ #[cfg(not(unix))]
+ let terminate = std::future::pending::<()>();
+
+ tokio::select! {
+ _ = ctrl_c => {},
+ _ = terminate => {},
+ }
+}