#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum ExitCode {
Success = 0,
MixedFailures = 1,
Aborted = 2,
BudgetExhausted = 3,
FailedToStart = 4,
ConsecutiveFailures = 5,
PrCreationFailed = 6,
}
impl ExitCode {
pub fn as_u8(self) -> u8 {
self as u8
}
pub fn into_process(self) -> std::process::ExitCode {
std::process::ExitCode::from(self.as_u8())
}
}
impl std::fmt::Display for ExitCode {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ExitCode::Success => f.write_str("success"),
ExitCode::MixedFailures => f.write_str("mixed-failures"),
ExitCode::Aborted => f.write_str("aborted"),
ExitCode::BudgetExhausted => f.write_str("budget-exhausted"),
ExitCode::FailedToStart => f.write_str("failed-to-start"),
ExitCode::ConsecutiveFailures => f.write_str("consecutive-failures"),
ExitCode::PrCreationFailed => f.write_str("pr-creation-failed"),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn exit_code_numeric_values_match_documented_table() {
assert_eq!(ExitCode::Success.as_u8(), 0);
assert_eq!(ExitCode::MixedFailures.as_u8(), 1);
assert_eq!(ExitCode::Aborted.as_u8(), 2);
assert_eq!(ExitCode::BudgetExhausted.as_u8(), 3);
assert_eq!(ExitCode::FailedToStart.as_u8(), 4);
assert_eq!(ExitCode::ConsecutiveFailures.as_u8(), 5);
assert_eq!(ExitCode::PrCreationFailed.as_u8(), 6);
}
}