use crate::{
dto::{page::Page, prelude::*},
ids::{
FleetAdmissionSelector, FleetBinding, FleetCoordinatorBinding, FleetSubnetRootBinding,
ManagedCanisterBinding,
},
};
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetAdmissionMutationAction {
Add,
Remove,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetAdmissionMutationRequest {
pub authority: FleetCoordinatorBinding,
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub action: FleetAdmissionMutationAction,
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(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetAdmissionMutationOutcome {
Planned,
Converged,
CatalogChanged,
AlreadyPresent,
AlreadyAbsent,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetAdmissionMutationResponse {
pub outcome: FleetAdmissionMutationOutcome,
pub operation_id: [u8; 32],
pub generation: u64,
pub policy_digest: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionPolicyStatus {
pub generation: u64,
pub policy_digest: [u8; 32],
pub fleet_principal_count: u16,
pub narrower_rule_count: u16,
pub narrower_principal_reference_count: u16,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub enum FleetAdmissionOperationPhase {
Planned {
successor: FleetAdmissionPolicyStatus,
},
Preparing {
successor: FleetAdmissionPolicyStatus,
},
Releasing {
successor: FleetAdmissionPolicyStatus,
},
PerimeterFenced {
successor: FleetAdmissionPolicyStatus,
},
Activating {
successor: FleetAdmissionPolicyStatus,
},
Opening {
successor: FleetAdmissionPolicyStatus,
},
Completed(FleetAdmissionMutationResponse),
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionOperationStatusResponse {
pub operation_id: [u8; 32],
pub action: FleetAdmissionMutationAction,
pub selector: FleetAdmissionSelector,
pub principal: Principal,
pub phase: FleetAdmissionOperationPhase,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionStatusRequest {
pub selector: FleetAdmissionSelector,
pub page: crate::dto::page::PageRequest,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct FleetAdmissionStatusResponse {
pub fleet: FleetBinding,
pub active: FleetAdmissionPolicyStatus,
pub selector: FleetAdmissionSelector,
pub principals: Page<Principal>,
pub maximum_page_size: u16,
pub current_operation: Option<FleetAdmissionOperationStatusResponse>,
pub last_result: Option<FleetAdmissionOperationStatusResponse>,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum FleetAdmissionProjectionPhase {
Fenced,
Open,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionPreparedProjectionStatus {
pub generation: u64,
pub policy_digest: [u8; 32],
pub projection_digest: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct FleetAdmissionProjectionStatusResponse {
pub authority: FleetCoordinatorBinding,
pub target: ManagedCanisterBinding,
pub generation: u64,
pub policy_digest: [u8; 32],
pub projection_digest: [u8; 32],
pub phase: FleetAdmissionProjectionPhase,
pub prepared: Option<FleetAdmissionPreparedProjectionStatus>,
pub principals: Page<Principal>,
pub maximum_page_size: u16,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetAdmissionTargetTransitionPhase {
Prepare,
Activate,
Open,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionPrepareTargetRequest {
pub operation_id: [u8; 32],
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub successor: crate::ids::FleetAdmissionProjection,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionActivateTargetRequest {
pub operation_id: [u8; 32],
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub successor_generation: u64,
pub successor_policy_digest: [u8; 32],
pub successor_projection_digest: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionOpenTargetRequest {
pub operation_id: [u8; 32],
pub generation: u64,
pub policy_digest: [u8; 32],
pub projection_digest: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetAdmissionTargetReceipt {
pub operation_id: [u8; 32],
pub phase: FleetAdmissionTargetTransitionPhase,
pub target: ManagedCanisterBinding,
pub generation: u64,
pub policy_digest: [u8; 32],
pub projection_digest: [u8; 32],
pub receipt_hash: [u8; 32],
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum FleetAdmissionPrepareRootStage {
Reserve,
Fence,
Release,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionPrepareRootRequest {
pub authority: FleetCoordinatorBinding,
pub operation_id: [u8; 32],
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub successor: crate::ids::FleetAdmissionPolicy,
pub stage: FleetAdmissionPrepareRootStage,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionActivateRootRequest {
pub authority: FleetCoordinatorBinding,
pub operation_id: [u8; 32],
pub expected_generation: u64,
pub expected_policy_digest: [u8; 32],
pub successor_generation: u64,
pub successor_policy_digest: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionOpenRootRequest {
pub authority: FleetCoordinatorBinding,
pub operation_id: [u8; 32],
pub generation: u64,
pub policy_digest: [u8; 32],
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetAdmissionRootTransitionPhase {
Preparing,
PerimeterFenced,
Activating,
Opening,
Converged,
Released,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetAdmissionRootReceipt {
pub operation_id: [u8; 32],
pub phase: FleetAdmissionRootTransitionPhase,
pub root: FleetSubnetRootBinding,
pub generation: u64,
pub policy_digest: [u8; 32],
pub participant_catalog_digest: [u8; 32],
pub participant_count: u32,
pub receipt_hash: [u8; 32],
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
pub enum FleetAdmissionRootParticipantPhase {
Pending,
Prepared,
Activated,
Open,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct FleetAdmissionRootParticipantStatus {
pub target: ManagedCanisterBinding,
pub projection_digest: [u8; 32],
pub phase: FleetAdmissionRootParticipantPhase,
pub last_receipt_hash: Option<[u8; 32]>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct FleetAdmissionRootStatusResponse {
pub operation_id: Option<[u8; 32]>,
pub phase: Option<FleetAdmissionRootTransitionPhase>,
pub active_generation: u64,
pub active_policy_digest: [u8; 32],
pub successor_generation: Option<u64>,
pub successor_policy_digest: Option<[u8; 32]>,
pub participant_catalog_digest: Option<[u8; 32]>,
pub participants: Page<FleetAdmissionRootParticipantStatus>,
pub maximum_page_size: u16,
pub last_result: Option<FleetAdmissionRootReceipt>,
}