use crate::dto::prelude::*;
#[derive(CandidType, Clone, Debug, Deserialize)]
pub enum Request {
CreateCanister(CreateCanisterRequest),
UpgradeCanister(UpgradeCanisterRequest),
RecycleCanister(RecycleCanisterRequest),
Cycles(CyclesRequest),
}
impl Request {
#[must_use]
pub const fn create_canister(request: CreateCanisterRequest) -> Self {
Self::CreateCanister(request)
}
#[must_use]
pub const fn upgrade_canister(request: UpgradeCanisterRequest) -> Self {
Self::UpgradeCanister(request)
}
#[must_use]
pub const fn recycle_canister(request: RecycleCanisterRequest) -> Self {
Self::RecycleCanister(request)
}
#[must_use]
pub const fn cycles(request: CyclesRequest) -> Self {
Self::Cycles(request)
}
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct RootRequestMetadata {
pub request_id: [u8; 32],
pub ttl_ns: u64,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct CreateCanisterRequest {
pub canister_role: CanisterRole,
pub parent: CreateCanisterParent,
pub extra_arg: Option<Vec<u8>>,
#[serde(default)]
pub metadata: Option<RootRequestMetadata>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub enum CreateCanisterParent {
Root,
ThisCanister,
Parent,
Canister(Principal),
Index(CanisterRole),
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct UpgradeCanisterRequest {
pub canister_pid: Principal,
#[serde(default)]
pub metadata: Option<RootRequestMetadata>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct RecycleCanisterRequest {
pub canister_pid: Principal,
#[serde(default)]
pub metadata: Option<RootRequestMetadata>,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct CyclesRequest {
pub cycles: u128,
#[serde(default)]
pub metadata: Option<RootRequestMetadata>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
pub enum Response {
CreateCanister(CreateCanisterResponse),
UpgradeCanister(UpgradeCanisterResponse),
RecycleCanister(RecycleCanisterResponse),
Cycles(CyclesResponse),
}
#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
pub struct CreateCanisterResponse {
pub new_canister_pid: Principal,
}
#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
pub struct UpgradeCanisterResponse {}
#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
pub struct RecycleCanisterResponse {}
#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
pub struct CyclesResponse {
pub cycles_transferred: u128,
}