1use crate::dto::prelude::*;
2
3#[derive(CandidType, Clone, Debug, Deserialize)]
10pub enum Request {
11 AcknowledgePlacementReceipt(AcknowledgePlacementReceiptRequest),
12 AllocatePlacementChild(CreateCanisterRequest),
13 CreateCanister(CreateCanisterRequest),
14 UpgradeCanister(UpgradeCanisterRequest),
15 RecycleCanister(RecycleCanisterRequest),
16 Cycles(CyclesRequest),
17}
18
19impl Request {
20 #[must_use]
24 pub const fn acknowledge_placement_receipt(
25 request: AcknowledgePlacementReceiptRequest,
26 ) -> Self {
27 Self::AcknowledgePlacementReceipt(request)
28 }
29
30 #[must_use]
34 pub const fn allocate_placement_child(request: CreateCanisterRequest) -> Self {
35 Self::AllocatePlacementChild(request)
36 }
37
38 #[must_use]
42 pub const fn create_canister(request: CreateCanisterRequest) -> Self {
43 Self::CreateCanister(request)
44 }
45
46 #[must_use]
50 pub const fn upgrade_canister(request: UpgradeCanisterRequest) -> Self {
51 Self::UpgradeCanister(request)
52 }
53
54 #[must_use]
58 pub const fn recycle_canister(request: RecycleCanisterRequest) -> Self {
59 Self::RecycleCanister(request)
60 }
61
62 #[must_use]
66 pub const fn cycles(request: CyclesRequest) -> Self {
67 Self::Cycles(request)
68 }
69}
70
71#[derive(CandidType, Clone, Debug, Deserialize)]
78pub struct AcknowledgePlacementReceiptRequest {
79 pub operation_id: [u8; 32],
80 #[serde(default)]
81 pub metadata: Option<RootRequestMetadata>,
82}
83
84#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
91pub struct RootRequestMetadata {
92 pub request_id: [u8; 32],
93 pub ttl_ns: u64,
94}
95
96#[derive(CandidType, Clone, Debug, Deserialize)]
103pub struct CreateCanisterRequest {
104 pub canister_role: CanisterRole,
105 pub parent: CreateCanisterParent,
106 pub extra_arg: Option<Vec<u8>>,
107 #[serde(default)]
108 pub metadata: Option<RootRequestMetadata>,
109}
110
111#[derive(CandidType, Clone, Debug, Deserialize)]
118pub enum CreateCanisterParent {
119 Root,
120 ThisCanister,
122 Parent,
124 Canister(Principal),
125 Index(CanisterRole),
126}
127
128#[derive(CandidType, Clone, Debug, Deserialize)]
135pub struct UpgradeCanisterRequest {
136 pub canister_pid: Principal,
137 #[serde(default)]
138 pub metadata: Option<RootRequestMetadata>,
139}
140
141#[derive(CandidType, Clone, Debug, Deserialize)]
148pub struct RecycleCanisterRequest {
149 pub canister_pid: Principal,
150 #[serde(default)]
151 pub metadata: Option<RootRequestMetadata>,
152}
153
154#[derive(CandidType, Clone, Debug, Deserialize)]
161pub struct CyclesRequest {
162 pub cycles: u128,
163 #[serde(default)]
164 pub metadata: Option<RootRequestMetadata>,
165}
166
167#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
174pub enum Response {
175 AcknowledgePlacementReceipt(AcknowledgePlacementReceiptResponse),
176 CreateCanister(CreateCanisterResponse),
177 UpgradeCanister(UpgradeCanisterResponse),
178 RecycleCanister(RecycleCanisterResponse),
179 Cycles(CyclesResponse),
180}
181
182#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
188pub struct AcknowledgePlacementReceiptResponse {}
189
190#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
196pub struct CreateCanisterResponse {
197 pub new_canister_pid: Principal,
198}
199
200#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
206pub struct UpgradeCanisterResponse {}
207
208#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
214pub struct RecycleCanisterResponse {}
215
216#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
222pub struct CyclesResponse {
223 pub cycles_transferred: u128,
224}