main
#[cfg(unix)]
pub struct Signals {
sigint: tokio::signal::unix::Signal,
sigterm: tokio::signal::unix::Signal,
}
#[cfg(not(unix))]
pub struct Signals;
#[cfg(unix)]
impl Signals {
pub fn new() -> Option<Self> {
use tokio::signal::unix::{SignalKind, signal};
let sigint = signal(SignalKind::interrupt()).ok()?;
let sigterm = signal(SignalKind::terminate()).ok()?;
Some(Self { sigint, sigterm })
}
pub async fn next(&mut self) -> &'static str {
tokio::select! {
_ = self.sigint.recv() => "SIGINT",
_ = self.sigterm.recv() => "SIGTERM",
}
}
}
#[cfg(not(unix))]
impl Signals {
pub fn new() -> Option<Self> {
Some(Self)
}
pub async fn next(&mut self) -> &'static str {
let _ = tokio::signal::ctrl_c().await;
"ctrl-c"
}
}