1use crate::dto::prelude::*;
2
3#[derive(CandidType, Clone, Debug, Deserialize)]
10pub enum Request {
11 AcknowledgePlacementReceipt(AcknowledgePlacementReceiptRequest),
12 AllocatePlacementChild(CreateCanisterRequest),
13 CreateCanister(CreateCanisterRequest),
14 RecycleCanister(RecycleCanisterRequest),
15 Cycles(CyclesRequest),
16}
17
18impl Request {
19 #[must_use]
23 pub const fn acknowledge_placement_receipt(
24 request: AcknowledgePlacementReceiptRequest,
25 ) -> Self {
26 Self::AcknowledgePlacementReceipt(request)
27 }
28
29 #[must_use]
33 pub const fn allocate_placement_child(request: CreateCanisterRequest) -> Self {
34 Self::AllocatePlacementChild(request)
35 }
36
37 #[must_use]
41 pub const fn create_canister(request: CreateCanisterRequest) -> Self {
42 Self::CreateCanister(request)
43 }
44
45 #[must_use]
49 pub const fn recycle_canister(request: RecycleCanisterRequest) -> Self {
50 Self::RecycleCanister(request)
51 }
52
53 #[must_use]
57 pub const fn cycles(request: CyclesRequest) -> Self {
58 Self::Cycles(request)
59 }
60}
61
62#[derive(CandidType, Clone, Debug, Deserialize)]
69pub struct AcknowledgePlacementReceiptRequest {
70 pub operation_id: [u8; 32],
71 pub metadata: Option<RootRequestMetadata>,
72}
73
74#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
81pub struct RootRequestMetadata {
82 pub request_id: [u8; 32],
83 pub ttl_ns: u64,
84}
85
86#[derive(CandidType, Clone, Debug, Deserialize)]
93pub struct CreateCanisterRequest {
94 pub canister_role: CanisterRole,
95 pub parent: CreateCanisterParent,
96 pub extra_arg: Option<Vec<u8>>,
97 pub metadata: Option<RootRequestMetadata>,
98}
99
100#[derive(CandidType, Clone, Debug, Deserialize)]
107pub enum CreateCanisterParent {
108 Root,
109 ThisCanister,
111 Parent,
113 Canister(Principal),
114 Directory(CanisterRole),
115}
116
117#[derive(CandidType, Clone, Debug, Deserialize)]
124pub struct RecycleCanisterRequest {
125 pub canister_pid: Principal,
126 pub metadata: Option<RootRequestMetadata>,
127}
128
129#[derive(CandidType, Clone, Debug, Deserialize)]
136pub struct CyclesRequest {
137 pub cycles: u128,
138 pub metadata: Option<RootRequestMetadata>,
139}
140
141#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
148pub enum Response {
149 AcknowledgePlacementReceipt,
150 CreateCanister(CreateCanisterResponse),
151 RecycleCanister,
152 Cycles(CyclesResponse),
153}
154
155#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
161pub struct CreateCanisterResponse {
162 pub new_canister_pid: Principal,
163}
164
165#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
171pub struct CyclesResponse {
172 pub cycles_transferred: u128,
173}