Skip to main content

canic_host/deployment_truth/lifecycle/error/external_upgrade/
mod.rs

1use super::super::super::LifecycleVerificationRequirementV1;
2
3///
4/// ExternalUpgradeReceiptError
5///
6#[derive(Debug, Eq, thiserror::Error, PartialEq)]
7pub enum ExternalUpgradeReceiptError {
8    #[error("external upgrade receipt schema version {actual} does not match expected {expected}")]
9    SchemaVersionMismatch { expected: u32, actual: u32 },
10    #[error("external upgrade receipt field `{field}` is required")]
11    MissingRequiredField { field: &'static str },
12    #[error("external upgrade receipt field `{field}` digest is stale")]
13    DigestMismatch { field: &'static str },
14    #[error("external upgrade receipt field `{field}` does not match proposal source")]
15    SourceMismatch { field: &'static str },
16    #[error("external upgrade receipt verification result does not match observations")]
17    VerificationMismatch,
18    #[error("external upgrade receipt refused consent cannot be verified")]
19    RefusedConsentVerified,
20}
21
22///
23/// ExternalUpgradeConsentEvidenceError
24///
25#[derive(Debug, Eq, thiserror::Error, PartialEq)]
26pub enum ExternalUpgradeConsentEvidenceError {
27    #[error(
28        "external upgrade consent evidence schema version {actual} does not match expected {expected}"
29    )]
30    SchemaVersionMismatch { expected: u32, actual: u32 },
31    #[error("external upgrade consent evidence field `{field}` is required")]
32    MissingRequiredField { field: &'static str },
33    #[error("external upgrade consent evidence field `{field}` digest is stale")]
34    DigestMismatch { field: &'static str },
35    #[error("external upgrade consent evidence field `{field}` no longer matches source receipt")]
36    SourceMismatch { field: &'static str },
37    #[error(transparent)]
38    Receipt(#[from] ExternalUpgradeReceiptError),
39}
40
41///
42/// ExternalUpgradeVerificationReportError
43///
44#[derive(Debug, Eq, thiserror::Error, PartialEq)]
45pub enum ExternalUpgradeVerificationReportError {
46    #[error(
47        "external upgrade verification report schema version {actual} does not match expected {expected}"
48    )]
49    SchemaVersionMismatch { expected: u32, actual: u32 },
50    #[error("external upgrade verification report field `{field}` is required")]
51    MissingRequiredField { field: &'static str },
52    #[error("external upgrade verification report field `{field}` digest is stale")]
53    DigestMismatch { field: &'static str },
54    #[error("external upgrade verification report field `{field}` does not match source evidence")]
55    SourceMismatch { field: &'static str },
56    #[error(transparent)]
57    Receipt(#[from] ExternalUpgradeReceiptError),
58}
59
60///
61/// ExternalUpgradeVerificationPolicyError
62///
63#[derive(Debug, Eq, thiserror::Error, PartialEq)]
64pub enum ExternalUpgradeVerificationPolicyError {
65    #[error(
66        "external upgrade verification policy schema version {actual} does not match expected {expected}"
67    )]
68    SchemaVersionMismatch { expected: u32, actual: u32 },
69    #[error("external upgrade verification policy field `{field}` is required")]
70    MissingRequiredField { field: &'static str },
71    #[error("external upgrade verification policy field `{field}` digest is stale")]
72    DigestMismatch { field: &'static str },
73    #[error("external upgrade verification policy field `{field}` does not match proposal source")]
74    SourceMismatch { field: &'static str },
75}
76
77///
78/// ExternalUpgradeVerificationCheckError
79///
80#[derive(Debug, Eq, thiserror::Error, PartialEq)]
81pub enum ExternalUpgradeVerificationCheckError {
82    #[error(
83        "external upgrade verification check schema version {actual} does not match expected {expected}"
84    )]
85    SchemaVersionMismatch { expected: u32, actual: u32 },
86    #[error("external upgrade verification check field `{field}` is required")]
87    MissingRequiredField { field: &'static str },
88    #[error("external upgrade verification check field `{field}` digest is stale")]
89    DigestMismatch { field: &'static str },
90    #[error("external upgrade verification check field `{field}` does not match policy source")]
91    SourceMismatch { field: &'static str },
92    #[error("external upgrade verification check contains duplicate requirement `{requirement:?}`")]
93    DuplicateRequirement {
94        requirement: LifecycleVerificationRequirementV1,
95    },
96    #[error(
97        "external upgrade verification check requirement `{requirement:?}` has invalid satisfaction state"
98    )]
99    RequirementStatusMismatch {
100        requirement: LifecycleVerificationRequirementV1,
101    },
102}
103
104///
105/// ExternalUpgradeProposalReportError
106///
107#[derive(Debug, Eq, thiserror::Error, PartialEq)]
108pub enum ExternalUpgradeProposalReportError {
109    #[error(
110        "external upgrade proposal report schema version {actual} does not match expected {expected}"
111    )]
112    SchemaVersionMismatch { expected: u32, actual: u32 },
113    #[error("external upgrade proposal report field `{field}` is required")]
114    MissingRequiredField { field: &'static str },
115    #[error("external upgrade proposal report field `{field}` digest is stale")]
116    DigestMismatch { field: &'static str },
117    #[error("external upgrade proposal report field `{field}` does not match lifecycle source")]
118    SourceMismatch { field: &'static str },
119    #[error(
120        "external upgrade proposal report contains proposal for directly controlled row `{subject}`"
121    )]
122    DirectLifecycleProposal { subject: String },
123    #[error("external upgrade proposal report contains duplicate subject `{subject}`")]
124    DuplicateSubject { subject: String },
125}
126
127///
128/// ExternalUpgradeCompletionReportError
129///
130#[derive(Debug, Eq, thiserror::Error, PartialEq)]
131pub enum ExternalUpgradeCompletionReportError {
132    #[error(
133        "external upgrade completion report schema version {actual} does not match expected {expected}"
134    )]
135    SchemaVersionMismatch { expected: u32, actual: u32 },
136    #[error("external upgrade completion report field `{field}` is required")]
137    MissingRequiredField { field: &'static str },
138    #[error("external upgrade completion report field `{field}` digest is stale")]
139    DigestMismatch { field: &'static str },
140    #[error("external upgrade completion report field `{field}` does not match source evidence")]
141    SourceMismatch { field: &'static str },
142    #[error(transparent)]
143    Proposal(#[from] ExternalUpgradeProposalReportError),
144    #[error(transparent)]
145    ConsentEvidence(#[from] ExternalUpgradeConsentEvidenceError),
146    #[error(transparent)]
147    VerificationCheck(#[from] ExternalUpgradeVerificationCheckError),
148}