strontium_assurance/assurance/model/
error.rs1use 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 {}