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 ObservabilityDiagnostics,
32 ObservabilityHistory,
33 ObservabilityLogs,
34 ObservabilityMetrics,
35 RoleAttestationSigner,
36 RoleAttestationVerifier,
37 Root,
38 RootControlPlane,
39 RootDelegation,
40 Runtime,
41 Scaling,
42 Sharding,
43 WasmStore,
44}
45
46#[derive(CandidType, Clone, Debug, Deserialize)]
48pub struct RoleOverviewResponse {
49 pub role: CanisterRole,
50 pub capabilities: Vec<RoleCapability>,
51 pub protocol_profile_digest: [u8; 32],
52 pub metadata: CanicMetadataResponse,
53 pub bootstrap: BootstrapStatusResponse,
54}
55
56#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
58pub struct OperationStatusRequest {
59 pub operation_id: [u8; 32],
60}
61
62#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
64pub struct OperationReceipt {
65 pub operation_id: [u8; 32],
66}
67
68#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
70pub struct RootRemovalRequest {
71 pub reservation: FleetSubnetRootDrainingReservationResponse,
72}
73
74#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
76pub struct ConfigStatusResponse {
77 pub toml: String,
78}
79
80#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
82pub struct CycleBalanceStatusResponse {
83 pub cycles: u128,
84}
85
86#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
88pub struct LogStatusRequest {
89 pub crate_name: Option<String>,
90 pub topic: Option<String>,
91 pub min_level: Option<Level>,
92 pub page: PageRequest,
93}
94
95#[derive(CandidType, Clone, Copy, Debug, Deserialize)]
97pub struct MetricsStatusRequest {
98 pub kind: MetricsKind,
99 pub page: PageRequest,
100}
101
102#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
104pub struct ComponentRuntimeOperationStatus {
105 pub operation_id: [u8; 32],
106 pub fleet_activation: FleetActivationStatusResponse,
107 pub runtime: ComponentRuntimeStatusResponse,
108}
109
110pub use crate::dto::state::BootstrapStatusResponse;
111
112#[cfg(test)]
113mod tests {
114 use super::*;
115 use candid::{Decode, Encode};
116
117 #[test]
118 fn shared_role_status_requests_round_trip_through_candid() {
119 let operation = OperationStatusRequest {
120 operation_id: [7; 32],
121 };
122 let bytes = Encode!(&operation).expect("encode operation status request");
123 assert_eq!(
124 Decode!(&bytes, OperationStatusRequest).expect("decode operation status request"),
125 operation
126 );
127
128 let receipt = OperationReceipt {
129 operation_id: operation.operation_id,
130 };
131 let bytes = Encode!(&receipt).expect("encode operation receipt");
132 assert_eq!(
133 Decode!(&bytes, OperationReceipt).expect("decode operation receipt"),
134 receipt
135 );
136
137 let logs = LogStatusRequest {
138 crate_name: Some("canic-core".to_string()),
139 topic: Some("Cycles".to_string()),
140 min_level: Some(Level::Warn),
141 page: PageRequest {
142 limit: 25,
143 offset: 50,
144 },
145 };
146 let bytes = Encode!(&logs).expect("encode log status request");
147 assert_eq!(
148 Decode!(&bytes, LogStatusRequest).expect("decode log status request"),
149 logs
150 );
151 }
152}