1use crate::dto::prelude::*;
2
3pub use crate::domain::state::{FleetMode, FleetStatus};
4
5#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
7pub struct SetCyclesFundingRequest {
8 pub enabled: bool,
9}
10
11#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
13pub struct SetFleetStatusRequest {
14 pub status: FleetStatus,
15}
16
17#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
22pub enum FleetCommand {
23 SetStatus(FleetStatus),
24 SetCyclesFundingEnabled(bool),
25}
26
27#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
32pub enum FleetCommandResponse {
33 Status(SetStateResponse<FleetStatus>),
34 CyclesFundingEnabled(SetStateResponse<bool>),
35}
36
37#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
42pub struct SetStateResponse<T> {
43 pub previous: T,
44 pub current: T,
45 pub changed: bool,
46}
47
48#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
50pub struct FleetStateCommandResult<T> {
51 pub change: SetStateResponse<T>,
52 pub propagation: crate::dto::cascade::StateCascadeReport,
53 pub reconciliation_error: Option<crate::dto::error::Error>,
54}
55
56#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
58pub struct FleetCommandExecutionResponse {
59 pub change: FleetCommandResponse,
60 pub propagation: crate::dto::cascade::StateCascadeReport,
61 pub reconciliation_error: Option<crate::dto::error::Error>,
62}
63
64#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq)]
69pub struct FleetStateInput {
70 pub mode: FleetMode,
71 pub cycles_funding_enabled: bool,
72}
73
74#[derive(CandidType, Deserialize)]
79pub struct FleetStateResponse {
80 pub mode: FleetMode,
81 pub cycles_funding_enabled: bool,
82}
83
84#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
89pub struct BootstrapStatusResponse {
90 pub ready: bool,
91 pub phase: String,
92 pub last_error: Option<String>,
93}
94
95#[cfg(test)]
96mod tests {
97 use super::*;
98 use candid::{Decode, Encode};
99 use serde::de::DeserializeOwned;
100 use std::fmt::Debug;
101
102 #[test]
103 fn fleet_mode_roundtrips_candid_through_dto_path() {
104 assert_enum_candid_contract(FleetMode::Readonly);
105 }
106
107 #[test]
108 fn fleet_status_roundtrips_candid_through_dto_path() {
109 assert_enum_candid_contract(FleetStatus::Readonly);
110 }
111
112 fn assert_enum_candid_contract<T>(value: T)
113 where
114 T: CandidType + Clone + Debug + DeserializeOwned + Eq,
115 {
116 let bytes = Encode!(&value).expect("encode state enum");
117 let decoded = Decode!(&bytes, T).expect("decode state enum");
118
119 assert_eq!(decoded, value);
120 }
121}