1use crate::{
8 dto::{
9 component_registry::ComponentRuntimeStatusResponse,
10 fleet_activation::FleetActivationStatusResponse,
11 fleet_registry::FleetSubnetRootDrainingReservationResponse,
12 metadata::CanicMetadataResponse, metrics::MetricsKind, page::PageRequest, prelude::*,
13 },
14 log::Level,
15};
16
17#[derive(
19 CandidType, Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize,
20)]
21#[remain::sorted]
22pub enum RoleCapability {
23 AutomaticTopup,
24 ChildProvisioning,
25 DelegatedTokenIssuer,
26 DelegatedTokenVerifier,
27 FleetAdmissionProjection,
28 FleetCoordinator,
29 Icrc21,
30 Index,
31 RoleAttestationSigner,
32 RoleAttestationVerifier,
33 Root,
34 RootControlPlane,
35 RootDelegation,
36 Runtime,
37 Scaling,
38 Sharding,
39 WasmStore,
40}
41
42#[derive(CandidType, Clone, Debug, Deserialize)]
44pub struct RoleOverviewResponse {
45 pub role: CanisterRole,
46 pub capabilities: Vec<RoleCapability>,
47 pub protocol_profile_digest: [u8; 32],
48 pub metadata: CanicMetadataResponse,
49 pub bootstrap: BootstrapStatusResponse,
50}
51
52#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
54pub struct OperationStatusRequest {
55 pub operation_id: [u8; 32],
56}
57
58#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
60pub struct OperationReceipt {
61 pub operation_id: [u8; 32],
62}
63
64#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
66pub struct RootRemovalRequest {
67 pub reservation: FleetSubnetRootDrainingReservationResponse,
68}
69
70#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
72pub struct ConfigStatusResponse {
73 pub toml: String,
74}
75
76#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
78pub struct CycleBalanceStatusResponse {
79 pub cycles: u128,
80}
81
82#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
84pub struct LogStatusRequest {
85 pub crate_name: Option<String>,
86 pub topic: Option<String>,
87 pub min_level: Option<Level>,
88 pub page: PageRequest,
89}
90
91#[derive(CandidType, Clone, Copy, Debug, Deserialize)]
93pub struct MetricsStatusRequest {
94 pub kind: MetricsKind,
95 pub page: PageRequest,
96}
97
98#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
100pub struct ComponentRuntimeOperationStatus {
101 pub operation_id: [u8; 32],
102 pub fleet_activation: FleetActivationStatusResponse,
103 pub runtime: ComponentRuntimeStatusResponse,
104}
105
106pub use crate::dto::state::BootstrapStatusResponse;
107
108#[cfg(test)]
109mod tests {
110 use super::*;
111 use candid::{Decode, Encode};
112
113 #[test]
114 fn shared_role_status_requests_round_trip_through_candid() {
115 let operation = OperationStatusRequest {
116 operation_id: [7; 32],
117 };
118 let bytes = Encode!(&operation).expect("encode operation status request");
119 assert_eq!(
120 Decode!(&bytes, OperationStatusRequest).expect("decode operation status request"),
121 operation
122 );
123
124 let receipt = OperationReceipt {
125 operation_id: operation.operation_id,
126 };
127 let bytes = Encode!(&receipt).expect("encode operation receipt");
128 assert_eq!(
129 Decode!(&bytes, OperationReceipt).expect("decode operation receipt"),
130 receipt
131 );
132
133 let logs = LogStatusRequest {
134 crate_name: Some("canic-core".to_string()),
135 topic: Some("Cycles".to_string()),
136 min_level: Some(Level::Warn),
137 page: PageRequest {
138 limit: 25,
139 offset: 50,
140 },
141 };
142 let bytes = Encode!(&logs).expect("encode log status request");
143 assert_eq!(
144 Decode!(&bytes, LogStatusRequest).expect("decode log status request"),
145 logs
146 );
147 }
148}