Skip to main content

libverify_core/
verdict.rs

1use serde::{Deserialize, Serialize};
2
3/// Severity levels for control outcomes.
4///
5/// Invariant: the ordering Pass < Warning < Error corresponds to
6/// increasing severity.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
8#[serde(rename_all = "lowercase")]
9pub enum Severity {
10    Pass,
11    Warning,
12    Error,
13}
14
15impl Severity {
16    /// Returns true if this severity should cause a non-zero exit code.
17    pub fn is_failing(&self) -> bool {
18        matches!(self, Severity::Error)
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn severity_ordering() {
28        assert!(Severity::Pass < Severity::Warning);
29        assert!(Severity::Warning < Severity::Error);
30    }
31
32    #[test]
33    fn severity_is_failing() {
34        assert!(!Severity::Pass.is_failing());
35        assert!(!Severity::Warning.is_failing());
36        assert!(Severity::Error.is_failing());
37    }
38}