use std::fmt;
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum Signal {
Interrupt,
Terminate,
Quit,
User1,
User2,
}
impl Signal {
pub(super) const fn from_mio(signal: mio_signals::Signal) -> Signal {
match signal {
mio_signals::Signal::Interrupt => Signal::Interrupt,
mio_signals::Signal::Terminate => Signal::Terminate,
mio_signals::Signal::Quit => Signal::Quit,
mio_signals::Signal::User1 => Signal::User1,
mio_signals::Signal::User2 => Signal::User2,
}
}
pub(super) const fn should_stop(self) -> bool {
match self {
Signal::Interrupt | Signal::Terminate | Signal::Quit => true,
Signal::User1 | Signal::User2 => false,
}
}
pub(super) const fn as_str(self) -> &'static str {
match self {
Signal::Interrupt => "interrupt",
Signal::Terminate => "terminate",
Signal::Quit => "quit",
Signal::User1 => "user-1",
Signal::User2 => "user-2",
}
}
const fn as_posix(self) -> &'static str {
match self {
Signal::Interrupt => "SIGINT",
Signal::Terminate => "SIGTERM",
Signal::Quit => "SIGQUIT",
Signal::User1 => "SIGUSR1",
Signal::User2 => "SIGUSR2",
}
}
}
impl fmt::Display for Signal {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())?;
if f.alternate() {
f.write_str(" (")?;
f.write_str(self.as_posix())?;
f.write_str(")")?;
}
Ok(())
}
}