1use thiserror::Error;
4
5#[derive(Debug, Error)]
10pub enum CodeIngestError {
11 #[error("findings.json must be a JSON object with required field findings: array")]
12 InvalidRoot,
13
14 #[error("missing required field {path}")]
15 MissingField { path: &'static str },
16
17 #[error("field {path} must be {expected}")]
18 InvalidType {
19 path: String,
20 expected: &'static str,
21 },
22
23 #[error("invalid {field} {value:?}; valid: {valid}")]
24 InvalidValue {
25 field: &'static str,
26 value: String,
27 valid: &'static str,
28 },
29
30 #[error("finding {id:?} with severity {severity:?} requires non-empty failure_scenario")]
31 MissingFailureScenario { id: String, severity: String },
32
33 #[error(
34 "invalid evidence at findings[{finding_index}].evidence[{evidence_index}]; valid: string or object with path,line,description"
35 )]
36 InvalidEvidence {
37 finding_index: usize,
38 evidence_index: usize,
39 },
40
41 #[error("invalid source_run; provide options.source_run or audit.date and audit.commit")]
42 MissingSourceRun,
43
44 #[error("json parse: {0}")]
45 Json(#[from] serde_json::Error),
46}