1use crate::dto::prelude::*;
2
3#[derive(CandidType, Clone, Debug, Deserialize)]
10pub enum Request {
11 CreateCanister(CreateCanisterRequest),
12 UpgradeCanister(UpgradeCanisterRequest),
13 RecycleCanister(RecycleCanisterRequest),
14 Cycles(CyclesRequest),
15}
16
17impl Request {
18 #[must_use]
22 pub const fn create_canister(request: CreateCanisterRequest) -> Self {
23 Self::CreateCanister(request)
24 }
25
26 #[must_use]
30 pub const fn upgrade_canister(request: UpgradeCanisterRequest) -> Self {
31 Self::UpgradeCanister(request)
32 }
33
34 #[must_use]
38 pub const fn recycle_canister(request: RecycleCanisterRequest) -> Self {
39 Self::RecycleCanister(request)
40 }
41
42 #[must_use]
46 pub const fn cycles(request: CyclesRequest) -> Self {
47 Self::Cycles(request)
48 }
49}
50
51#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
58pub struct RootRequestMetadata {
59 pub request_id: [u8; 32],
60 pub ttl_ns: u64,
61}
62
63#[derive(CandidType, Clone, Debug, Deserialize)]
70pub struct CreateCanisterRequest {
71 pub canister_role: CanisterRole,
72 pub parent: CreateCanisterParent,
73 pub extra_arg: Option<Vec<u8>>,
74 #[serde(default)]
75 pub metadata: Option<RootRequestMetadata>,
76}
77
78#[derive(CandidType, Clone, Debug, Deserialize)]
85pub enum CreateCanisterParent {
86 Root,
87 ThisCanister,
89 Parent,
91 Canister(Principal),
92 Index(CanisterRole),
93}
94
95#[derive(CandidType, Clone, Debug, Deserialize)]
102pub struct UpgradeCanisterRequest {
103 pub canister_pid: Principal,
104 #[serde(default)]
105 pub metadata: Option<RootRequestMetadata>,
106}
107
108#[derive(CandidType, Clone, Debug, Deserialize)]
115pub struct RecycleCanisterRequest {
116 pub canister_pid: Principal,
117 #[serde(default)]
118 pub metadata: Option<RootRequestMetadata>,
119}
120
121#[derive(CandidType, Clone, Debug, Deserialize)]
128pub struct CyclesRequest {
129 pub cycles: u128,
130 #[serde(default)]
131 pub metadata: Option<RootRequestMetadata>,
132}
133
134#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
141pub enum Response {
142 CreateCanister(CreateCanisterResponse),
143 UpgradeCanister(UpgradeCanisterResponse),
144 RecycleCanister(RecycleCanisterResponse),
145 Cycles(CyclesResponse),
146}
147
148#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
154pub struct CreateCanisterResponse {
155 pub new_canister_pid: Principal,
156}
157
158#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
164pub struct UpgradeCanisterResponse {}
165
166#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
172pub struct RecycleCanisterResponse {}
173
174#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
180pub struct CyclesResponse {
181 pub cycles_transferred: u128,
182}