use crate::fleet_ensure::view::release::FleetReleaseReceiptsView;
use candid::Principal;
use std::collections::BTreeMap;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseReplayState {
Reserved,
ExternalEffectInFlight,
Committed,
ExternalEffectStatusUnknown,
ComponentChildLifecycleInterrupted,
ResponseCommitFailed,
CostSettlementFailed,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseIntentState {
Missing,
Pending,
Committed,
Aborted,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct ReleaseIntentFact {
pub intent_id: u64,
pub state: ReleaseIntentState,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct ReleaseAccountingFacts {
pub quota: ReleaseIntentFact,
pub reservation: ReleaseIntentFact,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseReplayFacts {
pub slot: [u8; 32],
pub operation_id: [u8; 32],
pub status: ReleaseReplayState,
pub accounting: Option<ReleaseAccountingFacts>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseReplayDisposition {
RecordedCompletion,
ReservedOperation,
EffectReconciliation,
ChildLifecycleRecovery,
ResponseRecovery,
AccountingRecovery,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseReplayAssessment {
pub slot: [u8; 32],
pub operation_id: [u8; 32],
pub disposition: ReleaseReplayDisposition,
pub pending_intents: Vec<u64>,
pub missing_intents: Vec<u64>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetReleaseReplayAssessment {
pub evidence: FleetReleaseReceiptsView,
pub owners: BTreeMap<Principal, Vec<ReleaseReplayAssessment>>,
}