use core::fmt::Display;
use std::fmt::Debug;
use num_traits::{PrimInt, Zero};
pub trait RawExitCode: Clone + Copy + Debug + PartialEq + Eq {
type Code: PrimInt + Display;
fn is_success(&self) -> bool {
self.to_raw().is_zero()
}
fn is_failure(&self) -> bool {
!self.is_success()
}
fn from_raw(code: Self::Code) -> Self;
fn to_raw(&self) -> Self::Code;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::unix::ExitCode;
#[test]
fn test_into_raw_exit_code() {
fn arg_raw_exit_code<T: RawExitCode>(code: impl Into<T>) -> T {
code.into()
}
let code: ExitCode = arg_raw_exit_code(0);
assert!(code.is_success());
assert_eq!(code.to_raw(), 0);
let code: ExitCode = arg_raw_exit_code(1);
assert!(code.is_failure());
assert_eq!(code.to_raw(), 1);
}
}