#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ExitStatusKind {
Code(i32),
Signal(String),
Unknown,
}
impl std::fmt::Display for ExitStatusKind {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ExitStatusKind::Code(c) => write!(f, "{c}"),
ExitStatusKind::Signal(s) => write!(f, "signal {s}"),
ExitStatusKind::Unknown => write!(f, "<unknown>"),
}
}
}
pub fn exit_status_kind(status: std::process::ExitStatus) -> ExitStatusKind {
if let Some(code) = status.code() {
return ExitStatusKind::Code(code);
}
#[cfg(unix)]
{
use std::os::unix::process::ExitStatusExt;
if let Some(sig) = status.signal() {
return ExitStatusKind::Signal(sig.to_string());
}
}
ExitStatusKind::Unknown
}