snoai_mda_config/
errors.rs1use serde_json::Value;
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, MdaConfigError>;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub enum ErrorCategory {
8 InvalidEncoding,
9 UnterminatedFrontmatter,
10 MissingRequiredFrontmatter,
11 FrontmatterYamlParseError,
12 SchemaViolation,
13 SignatureDigestMismatch,
14 SignaturesWithoutIntegrity,
15 MissingRequiredIntegrity,
16 MissingRequiredSignature,
17 IntegrityMismatch,
18 RekorEntryTypeMismatch,
19 RekorInclusionFailure,
20 FulcioChainFailure,
21 SignatureVerificationFailure,
22 NoTrustedSignature,
23 InsufficientTrustedSignatures,
24 TrustPolicyViolation,
25 UnknownSignerMethod,
26 RequiresNotSatisfied,
27 ProjectSchemaViolation,
28}
29
30impl ErrorCategory {
31 pub fn as_str(&self) -> &'static str {
32 match self {
33 Self::InvalidEncoding => "invalid-encoding",
34 Self::UnterminatedFrontmatter => "unterminated-frontmatter",
35 Self::MissingRequiredFrontmatter => "missing-required-frontmatter",
36 Self::FrontmatterYamlParseError => "frontmatter-yaml-parse-error",
37 Self::SchemaViolation => "schema-violation",
38 Self::SignatureDigestMismatch => "signature-digest-mismatch",
39 Self::SignaturesWithoutIntegrity => "signatures-without-integrity",
40 Self::MissingRequiredIntegrity => "missing-required-integrity",
41 Self::MissingRequiredSignature => "missing-required-signature",
42 Self::IntegrityMismatch => "integrity-mismatch",
43 Self::RekorEntryTypeMismatch => "rekor-entry-type-mismatch",
44 Self::RekorInclusionFailure => "rekor-inclusion-failure",
45 Self::FulcioChainFailure => "fulcio-chain-failure",
46 Self::SignatureVerificationFailure => "signature-verification-failure",
47 Self::NoTrustedSignature => "no-trusted-signature",
48 Self::InsufficientTrustedSignatures => "insufficient-trusted-signatures",
49 Self::TrustPolicyViolation => "trust-policy-violation",
50 Self::UnknownSignerMethod => "unknown-signer-method",
51 Self::RequiresNotSatisfied => "requires-not-satisfied",
52 Self::ProjectSchemaViolation => "project-schema-violation",
53 }
54 }
55}
56
57impl std::fmt::Display for ErrorCategory {
58 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
59 f.write_str(self.as_str())
60 }
61}
62
63#[derive(Debug, Error)]
64#[error("[{category}] {message}")]
65pub struct MdaConfigError {
66 pub category: ErrorCategory,
67 pub message: String,
68 pub details: Value,
69}
70
71impl MdaConfigError {
72 pub fn new(category: ErrorCategory, message: impl Into<String>) -> Self {
73 Self {
74 category,
75 message: message.into(),
76 details: Value::Object(Default::default()),
77 }
78 }
79
80 pub fn with_details(
81 category: ErrorCategory,
82 message: impl Into<String>,
83 details: Value,
84 ) -> Self {
85 Self {
86 category,
87 message: message.into(),
88 details,
89 }
90 }
91}