Skip to main content

fallow_cli/report/ci/
severity.rs

1use fallow_config::Severity;
2
3use crate::output_envelope::CodeClimateSeverity;
4
5#[must_use]
6pub const fn sarif_level(severity: Severity) -> &'static str {
7    match severity {
8        Severity::Error => "error",
9        Severity::Warn => "warning",
10        Severity::Off => unreachable!(),
11    }
12}
13
14#[must_use]
15pub const fn review_label(severity: Severity) -> &'static str {
16    match severity {
17        Severity::Error => "error",
18        Severity::Warn => "warn",
19        Severity::Off => "off",
20    }
21}
22
23#[must_use]
24pub const fn codeclimate_severity(severity: Severity) -> CodeClimateSeverity {
25    match severity {
26        Severity::Error => CodeClimateSeverity::Major,
27        Severity::Warn => CodeClimateSeverity::Minor,
28        Severity::Off => unreachable!(),
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn maps_error_across_ci_surfaces() {
38        assert_eq!(sarif_level(Severity::Error), "error");
39        assert_eq!(review_label(Severity::Error), "error");
40        assert_eq!(
41            codeclimate_severity(Severity::Error),
42            CodeClimateSeverity::Major
43        );
44    }
45
46    #[test]
47    fn maps_warn_across_ci_surfaces() {
48        assert_eq!(sarif_level(Severity::Warn), "warning");
49        assert_eq!(review_label(Severity::Warn), "warn");
50        assert_eq!(
51            codeclimate_severity(Severity::Warn),
52            CodeClimateSeverity::Minor
53        );
54    }
55
56    #[test]
57    #[should_panic(expected = "internal error: entered unreachable code")]
58    fn codeclimate_severity_off_is_unreachable() {
59        let _ = codeclimate_severity(Severity::Off);
60    }
61}