use std::io;
use tracing::info;
pub async fn shutdown_signal() -> Result<(), io::Error> {
#[cfg(unix)]
let mut terminate =
tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate())?;
let ctrl_c = tokio::signal::ctrl_c();
#[cfg(unix)]
{
tokio::select! {
result = ctrl_c => {
result?;
info!("Received Ctrl+C, shutting down gracefully");
},
_ = terminate.recv() => {
info!("Received SIGTERM, shutting down gracefully");
},
}
}
#[cfg(not(unix))]
{
ctrl_c.await?;
info!("Received Ctrl+C, shutting down gracefully");
}
Ok(())
}