use crate::{
dto::{
component_registry::ComponentRuntimeStatusResponse,
fleet_activation::FleetActivationStatusResponse,
fleet_registry::FleetSubnetRootDrainingReservationResponse,
metadata::CanicMetadataResponse, metrics::MetricsKind, page::PageRequest, prelude::*,
},
log::Level,
};
#[derive(
CandidType, Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize,
)]
#[remain::sorted]
pub enum RoleCapability {
AutomaticTopup,
ChildProvisioning,
DelegatedTokenIssuer,
DelegatedTokenVerifier,
FleetAdmissionProjection,
FleetCoordinator,
Icrc21,
Index,
RoleAttestationSigner,
RoleAttestationVerifier,
Root,
RootControlPlane,
Runtime,
Scaling,
Sharding,
WasmStore,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct RoleOverviewResponse {
pub role: CanisterRole,
pub capabilities: Vec<RoleCapability>,
pub protocol_profile_digest: [u8; 32],
pub metadata: CanicMetadataResponse,
pub bootstrap: BootstrapStatusResponse,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct OperationStatusRequest {
pub operation_id: [u8; 32],
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct OperationReceipt {
pub operation_id: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct RootRemovalRequest {
pub reservation: FleetSubnetRootDrainingReservationResponse,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct ConfigStatusResponse {
pub toml: String,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct CycleBalanceStatusResponse {
pub cycles: u128,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq)]
pub struct LogStatusRequest {
pub crate_name: Option<String>,
pub topic: Option<String>,
pub min_level: Option<Level>,
pub page: PageRequest,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize)]
pub struct MetricsStatusRequest {
pub kind: MetricsKind,
pub page: PageRequest,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct ComponentRuntimeOperationStatus {
pub operation_id: [u8; 32],
pub fleet_activation: FleetActivationStatusResponse,
pub runtime: ComponentRuntimeStatusResponse,
}
pub use crate::dto::state::BootstrapStatusResponse;
#[cfg(test)]
mod tests {
use super::*;
use candid::{Decode, Encode};
#[test]
fn shared_role_status_requests_round_trip_through_candid() {
let operation = OperationStatusRequest {
operation_id: [7; 32],
};
let bytes = Encode!(&operation).expect("encode operation status request");
assert_eq!(
Decode!(&bytes, OperationStatusRequest).expect("decode operation status request"),
operation
);
let receipt = OperationReceipt {
operation_id: operation.operation_id,
};
let bytes = Encode!(&receipt).expect("encode operation receipt");
assert_eq!(
Decode!(&bytes, OperationReceipt).expect("decode operation receipt"),
receipt
);
let logs = LogStatusRequest {
crate_name: Some("canic-core".to_string()),
topic: Some("Cycles".to_string()),
min_level: Some(Level::Warn),
page: PageRequest {
limit: 25,
offset: 50,
},
};
let bytes = Encode!(&logs).expect("encode log status request");
assert_eq!(
Decode!(&bytes, LogStatusRequest).expect("decode log status request"),
logs
);
}
}