Skip to main content

strontium_assurance/assurance/model/
error.rs

1use std::fmt;
2
3use super::FailureClassification;
4
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub enum ValidationError {
7    MissingField(&'static str),
8    UnexpectedValue {
9        field: &'static str,
10        expected: &'static str,
11        actual: String,
12    },
13    PhaseMismatch {
14        expected: String,
15        actual: String,
16    },
17    DatasetFamilyMismatch {
18        expected: String,
19        actual: String,
20    },
21    WorkloadMismatch {
22        expected: String,
23        actual: String,
24    },
25    ReplayScenarioMismatch {
26        expected: String,
27        actual: String,
28    },
29    DuplicateScenarioId(String),
30    UnsupportedFailureClassification(FailureClassification),
31    UnexpectedFailureClassification,
32    IncompleteScenarioPack,
33    JsonParse(String),
34}
35
36impl fmt::Display for ValidationError {
37    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38        match self {
39            Self::MissingField(field) => write!(f, "missing required field: {field}"),
40            Self::UnexpectedValue {
41                field,
42                expected,
43                actual,
44            } => write!(
45                f,
46                "unexpected value for {field}: expected {expected}, got {actual}"
47            ),
48            Self::DatasetFamilyMismatch { expected, actual } => {
49                write!(
50                    f,
51                    "dataset_family mismatch: expected {expected}, got {actual}"
52                )
53            }
54            Self::PhaseMismatch { expected, actual } => {
55                write!(f, "phase mismatch: expected {expected}, got {actual}")
56            }
57            Self::WorkloadMismatch { expected, actual } => {
58                write!(f, "workload_id mismatch: expected {expected}, got {actual}")
59            }
60            Self::ReplayScenarioMismatch { expected, actual } => {
61                write!(
62                    f,
63                    "replay bundle scenario mismatch: expected {expected}, got {actual}"
64                )
65            }
66            Self::DuplicateScenarioId(scenario_id) => {
67                write!(f, "duplicate scenario id in preview pack: {scenario_id}")
68            }
69            Self::UnsupportedFailureClassification(classification) => write!(
70                f,
71                "failure classification is not allowed by the manifest: {classification:?}"
72            ),
73            Self::UnexpectedFailureClassification => {
74                write!(f, "pass results must not include a failure classification")
75            }
76            Self::IncompleteScenarioPack => {
77                write!(
78                    f,
79                    "phase-1 scenario pack must contain all four approved classes"
80                )
81            }
82            Self::JsonParse(message) => write!(f, "manifest JSON parse error: {message}"),
83        }
84    }
85}
86
87impl std::error::Error for ValidationError {}