canic_host/deployment_truth/model/lifecycle/completion/
mod.rs1use super::proposal::{
2 ExternalUpgradeConsentEvidenceV1, ExternalUpgradeConsentStateV1, ExternalUpgradeProposalV1,
3 ExternalUpgradeVerificationResultV1,
4};
5use super::verification::{
6 ExternalUpgradeVerificationCheckV1, ExternalVerificationObservationSourceV1,
7};
8use serde::{Deserialize, Serialize};
9
10#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
14pub struct ExternalUpgradeCompletionReportV1 {
15 pub schema_version: u32,
16 pub report_id: String,
17 pub report_digest: String,
18 pub proposal_id: String,
19 pub proposal_digest: String,
20 pub consent_evidence_id: String,
21 pub consent_evidence_digest: String,
22 pub verification_check_id: String,
23 pub verification_check_digest: String,
24 pub subject: String,
25 pub canister_id: Option<String>,
26 pub role: Option<String>,
27 pub consent_state: ExternalUpgradeConsentStateV1,
28 pub verification_result: ExternalUpgradeVerificationResultV1,
29 pub verification_observation_source: ExternalVerificationObservationSourceV1,
30 pub completion_status: ExternalUpgradeCompletionStatusV1,
31 pub blockers: Vec<String>,
32 pub next_actions: Vec<String>,
33 pub status_summary: String,
34}
35
36#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
40pub enum ExternalUpgradeCompletionStatusV1 {
41 AwaitingConsent,
42 ConsentRefused,
43 SuppliedEvidenceConsistent,
44 AwaitingVerification,
45 VerifiedComplete,
46 VerificationFailed,
47}
48
49impl ExternalUpgradeCompletionStatusV1 {
50 #[must_use]
51 pub const fn label(self) -> &'static str {
52 match self {
53 Self::AwaitingConsent => "awaiting_consent",
54 Self::ConsentRefused => "consent_refused",
55 Self::SuppliedEvidenceConsistent => "supplied_evidence_consistent",
56 Self::AwaitingVerification => "awaiting_verification",
57 Self::VerifiedComplete => "verified_complete",
58 Self::VerificationFailed => "verification_failed",
59 }
60 }
61}
62
63#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
67pub struct ExternalUpgradeCompletionReportRequest {
68 pub report_id: String,
69 pub proposal: ExternalUpgradeProposalV1,
70 pub consent_evidence: ExternalUpgradeConsentEvidenceV1,
71 pub verification_check: ExternalUpgradeVerificationCheckV1,
72}
73
74#[cfg(test)]
75mod tests {
76 use super::*;
77
78 #[test]
79 fn external_upgrade_completion_status_owns_text_labels() {
80 assert_eq!(
81 ExternalUpgradeCompletionStatusV1::AwaitingConsent.label(),
82 "awaiting_consent"
83 );
84 assert_eq!(
85 ExternalUpgradeCompletionStatusV1::ConsentRefused.label(),
86 "consent_refused"
87 );
88 assert_eq!(
89 ExternalUpgradeCompletionStatusV1::SuppliedEvidenceConsistent.label(),
90 "supplied_evidence_consistent"
91 );
92 assert_eq!(
93 ExternalUpgradeCompletionStatusV1::AwaitingVerification.label(),
94 "awaiting_verification"
95 );
96 assert_eq!(
97 ExternalUpgradeCompletionStatusV1::VerifiedComplete.label(),
98 "verified_complete"
99 );
100 assert_eq!(
101 ExternalUpgradeCompletionStatusV1::VerificationFailed.label(),
102 "verification_failed"
103 );
104 }
105}