use crate::dto::{prelude::*, state::FleetStateInput};
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct StateSnapshotInput {
pub fleet_state: Option<FleetStateInput>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub enum StateCascadeTargetResult {
Applied,
AppliedWithReconciliationFailure(crate::dto::error::Error),
Unconfirmed(crate::dto::error::Error),
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct StateCascadeTargetOutcome {
pub canister_id: Principal,
pub result: StateCascadeTargetResult,
}
#[derive(CandidType, Clone, Debug, Default, Deserialize, Eq, PartialEq)]
pub struct StateCascadeReport {
pub successful_targets: u64,
pub reconciliation_failures: u64,
pub unconfirmed_targets: u64,
pub omitted_targets: u64,
pub targets: Vec<StateCascadeTargetOutcome>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct TopologySnapshotInput {
pub parents: Vec<TopologyPathNode>,
pub children_map: Vec<TopologyChildren>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct TopologyChildren {
pub parent_pid: Principal,
pub children: Vec<TopologyDirectChild>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct TopologyDirectChild {
pub pid: Principal,
pub role: CanisterRole,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct TopologyPathNode {
pub pid: Principal,
pub role: CanisterRole,
pub parent_pid: Option<Principal>,
}