#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
#[non_exhaustive]
pub enum FailurePolicy {
#[default]
Report,
FailOpen,
}
impl FailurePolicy {
#[must_use]
pub const fn swallows_errors(self) -> bool {
matches!(self, Self::FailOpen)
}
#[must_use]
pub const fn exit_code(self) -> i32 {
match self {
Self::FailOpen => 0,
Self::Report => 1,
}
}
}
#[cfg(test)]
mod tests {
use super::FailurePolicy;
#[test]
fn report_is_the_default_failure_policy() {
assert_eq!(FailurePolicy::default(), FailurePolicy::Report);
}
#[test]
fn fail_open_swallows_errors_and_exits_zero() {
assert!(FailurePolicy::FailOpen.swallows_errors());
assert_eq!(FailurePolicy::FailOpen.exit_code(), 0);
}
#[test]
fn report_surfaces_errors_and_exits_nonzero() {
assert!(!FailurePolicy::Report.swallows_errors());
assert_ne!(FailurePolicy::Report.exit_code(), 0);
}
}