use crate::ids::{FleetAdmissionPolicy, FleetAdmissionSelector, FleetCoordinatorBinding, SubnetId};
use candid::Principal;
pub const FLEET_ADMISSION_AUTHORITY_SCHEMA_VERSION: u16 = 1;
pub const MAX_FLEET_ADMISSION_AUTHORITY_RECORD_BYTES: u32 = 8 * 1024 * 1024;
pub const MAX_FLEET_ADMISSION_PUBLICATIONS: usize = 4_096;
pub const MAX_FLEET_ADMISSION_STATUS_PAGE: u64 = 128;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FleetAdmissionMutationActionModel {
Add,
Remove,
}
impl FleetAdmissionMutationActionModel {
#[must_use]
pub const fn hash_byte(self) -> u8 {
match self {
Self::Add => 0,
Self::Remove => 1,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FleetAdmissionMutationOutcomeModel {
Planned,
Converged,
CatalogChanged,
AlreadyPresent,
AlreadyAbsent,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionRootCatalogAuthorityModel {
pub fleet_subnet_root: Principal,
pub participant_catalog_digest: [u8; 32],
pub participant_count: u32,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionMutationRequestModel {
pub authority: FleetCoordinatorBinding,
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub action: FleetAdmissionMutationActionModel,
pub selector: FleetAdmissionSelector,
pub principal: Principal,
pub operation_id: [u8; 32],
pub successor_policy_digest: [u8; 32],
pub participant_catalog_digest: [u8; 32],
pub participant_count: u32,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionMutationOperationInput {
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub action: FleetAdmissionMutationActionModel,
pub selector: FleetAdmissionSelector,
pub principal: Principal,
pub successor_policy_digest: [u8; 32],
pub participant_catalog_digest: [u8; 32],
pub participant_count: u32,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionMutationResponseModel {
pub outcome: FleetAdmissionMutationOutcomeModel,
pub operation_id: [u8; 32],
pub generation: u64,
pub policy_digest: [u8; 32],
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FleetAdmissionCoordinatorTransitionPhaseModel {
Planned,
Preparing,
Releasing,
PerimeterFenced,
Activating,
Opening,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum FleetAdmissionCoordinatorRootPhaseModel {
Pending,
Reserved,
Prepared,
Activated,
Open,
Released,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionCoordinatorRootProgressModel {
pub fleet_subnet_root: Principal,
pub placement_subnet: SubnetId,
pub phase: FleetAdmissionCoordinatorRootPhaseModel,
pub participant_catalog_digest: Option<[u8; 32]>,
pub participant_count: Option<u32>,
pub last_receipt_hash: Option<[u8; 32]>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionTransitionModel {
pub request: FleetAdmissionMutationRequestModel,
pub request_hash: [u8; 32],
pub successor: FleetAdmissionPolicy,
pub phase: FleetAdmissionCoordinatorTransitionPhaseModel,
pub roots: Vec<FleetAdmissionCoordinatorRootProgressModel>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionRetainedResultModel {
pub request: FleetAdmissionMutationRequestModel,
pub request_hash: [u8; 32],
pub response: FleetAdmissionMutationResponseModel,
pub roots: Vec<FleetAdmissionCoordinatorRootProgressModel>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FleetAdmissionAuthorityState {
pub schema_version: u16,
pub active_policy: FleetAdmissionPolicy,
pub current_transition: Option<FleetAdmissionTransitionModel>,
pub last_result: Option<FleetAdmissionRetainedResultModel>,
}