use crate::fleet_ensure::view::release::FleetReleaseProvisioningView;
use candid::Principal;
use std::collections::BTreeSet;
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub enum ReleaseProvisioningOwner {
Provisioning,
DirectorySynchronization,
}
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
pub struct ReleaseProvisioningIdentity {
pub owner: ReleaseProvisioningOwner,
pub operation_id: [u8; 32],
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseProvisioningState {
Accepted,
Provisioned,
Publishing,
Published,
Activating,
RuntimesActive,
DirectoryPlanned,
DirectorySynchronizing,
DirectorySynchronized,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseProvisioningFacts {
pub identity: ReleaseProvisioningIdentity,
pub plan_hash: [u8; 32],
pub state: ReleaseProvisioningState,
pub delivery_in_flight: Option<Principal>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseRootProvisioningFacts {
pub root: Principal,
pub active: BTreeSet<ReleaseProvisioningIdentity>,
pub operations: Vec<ReleaseProvisioningFacts>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ReleaseProvisioningDisposition {
OwnerReconciliation,
DeliveryReconciliation { recipient: Principal },
RecordedCompletion,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseProvisioningAssessment {
pub facts: ReleaseProvisioningFacts,
pub disposition: ReleaseProvisioningDisposition,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ReleaseRootProvisioningAssessment {
pub root: Principal,
pub operations: Vec<ReleaseProvisioningAssessment>,
pub unmatched_active: BTreeSet<ReleaseProvisioningIdentity>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetReleaseProvisioningAssessment {
pub evidence: FleetReleaseProvisioningView,
pub roots: Vec<ReleaseRootProvisioningAssessment>,
}