//! Shared signal registration for long-running CLI servers.
/// Receive Ctrl+C on every platform, or SIGTERM on Unix/container hosts.
pub(crate) fn signal() -> std::io::Result<impl std::future::Future<Output = std::io::Result<()>>> {
#[cfg(unix)]
{
let mut terminate =
tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate())?;
let mut interrupt =
tokio::signal::unix::signal(tokio::signal::unix::SignalKind::interrupt())?;
Ok(async move {
tokio::select! {
_ = interrupt.recv() => Ok(()),
_ = terminate.recv() => Ok(()),
}
})
}
#[cfg(not(unix))]
{
Ok(tokio::signal::ctrl_c())
}
}