use crate::ids::{
CanisterRole, ComponentSpecAdmission, ComponentSpecId, ComponentTopologyDigest,
FleetRegistryAuthority, FleetSubnetRootLimits, FleetSubnetRootReleaseSet, SubnetId,
};
use candid::{CandidType, Principal};
use serde::{Deserialize, Serialize};
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetSubnetRootStatus {
Joining,
Active,
Draining,
Removed,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetComponentSpecEntry {
pub component_spec: ComponentSpecId,
pub spec_hash: [u8; 32],
pub component_role: CanisterRole,
pub maximum_fleet_instances: u32,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootEntry {
pub placement_subnet: SubnetId,
pub fleet_subnet_root: Principal,
pub component_admissions: Vec<ComponentSpecAdmission>,
pub component_topology_digest: ComponentTopologyDigest,
pub active_release_set: FleetSubnetRootReleaseSet,
pub limits: FleetSubnetRootLimits,
pub status: FleetSubnetRootStatus,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistry {
pub authority: FleetRegistryAuthority,
pub revision: u64,
pub component_specs: Vec<FleetComponentSpecEntry>,
pub fleet_subnet_roots: Vec<FleetSubnetRootEntry>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistryManifest {
pub authority: FleetRegistryAuthority,
pub revision: u64,
pub byte_length: u64,
pub content_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistryVersion {
pub authority: FleetRegistryAuthority,
pub revision: u64,
pub content_hash: [u8; 32],
}