ic_backup/policy/settlement_identity/
mod.rs1use crate::model::artifacts::ArtifactChecksumRecord;
4
5pub(super) struct SettlementIdentity<'a> {
6 pub authority: &'a ArtifactChecksumRecord,
7 pub mutation_attempt: u32,
8 pub observation_attempt: u32,
9 pub challenge: &'a ArtifactChecksumRecord,
10}
11
12impl SettlementIdentity<'_> {
13 pub fn compare(&self, expected: &Self) -> Result<(), SettlementIdentityMismatch> {
14 if self.authority != expected.authority {
15 return Err(SettlementIdentityMismatch::Authority);
16 }
17 if self.mutation_attempt != expected.mutation_attempt
18 || self.observation_attempt != expected.observation_attempt
19 {
20 return Err(SettlementIdentityMismatch::Attempt);
21 }
22 if self.challenge != expected.challenge {
23 return Err(SettlementIdentityMismatch::Challenge);
24 }
25 Ok(())
26 }
27}
28
29#[derive(Debug, thiserror::Error, Eq, PartialEq)]
31pub enum SettlementIdentityMismatch {
32 #[error("settlement authority differs")]
34 Authority,
35 #[error("settlement attempts differ")]
37 Attempt,
38 #[error("settlement challenge differs")]
40 Challenge,
41}