Skip to main content

canic_core/dto/
rpc.rs

1use crate::dto::{auth::DelegatedToken, prelude::*};
2
3///
4/// Request
5/// Root-directed orchestration commands.
6///
7
8#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
9pub enum Request {
10    CreateCanister(CreateCanisterRequest),
11    UpgradeCanister(UpgradeCanisterRequest),
12    Cycles(CyclesRequest),
13}
14
15///
16/// AuthenticatedRequest
17///
18
19#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
20pub struct AuthenticatedRequest {
21    pub request: Request,
22    pub delegated_token: DelegatedToken,
23}
24
25///
26/// CreateCanisterRequest
27/// Payload for [`Request::CreateCanister`]
28///
29
30#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
31pub struct CreateCanisterRequest {
32    pub canister_role: CanisterRole,
33    pub parent: CreateCanisterParent,
34    pub extra_arg: Option<Vec<u8>>,
35}
36
37///
38/// CreateCanisterParent
39/// Parent-location choices for a new canister
40///
41
42#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
43pub enum CreateCanisterParent {
44    Root,
45    /// Use the requesting canister as parent.
46    ThisCanister,
47    /// Use the requesting canister's parent (creates a sibling).
48    Parent,
49    Canister(Principal),
50    Directory(CanisterRole),
51}
52
53///
54/// UpgradeCanisterRequest
55/// Payload for [`Request::UpgradeCanister`]
56///
57
58#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
59pub struct UpgradeCanisterRequest {
60    pub canister_pid: Principal,
61}
62
63///
64/// CyclesRequest
65/// Payload for [`Request::Cycles`]
66///
67
68#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
69pub struct CyclesRequest {
70    pub cycles: u128,
71}
72
73///
74/// Response
75/// Response payloads produced by root for orchestration requests.
76///
77
78#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
79pub enum Response {
80    CreateCanister(CreateCanisterResponse),
81    UpgradeCanister(UpgradeCanisterResponse),
82    Cycles(CyclesResponse),
83}
84
85pub type AuthenticatedResponse = Response;
86
87///
88/// CreateCanisterResponse
89/// Result of creating and installing a new canister.
90///
91
92#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
93pub struct CreateCanisterResponse {
94    pub new_canister_pid: Principal,
95}
96
97///
98/// UpgradeCanisterResponse
99/// Result of an upgrade request (currently empty, reserved for metadata)
100///
101
102#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
103pub struct UpgradeCanisterResponse {}
104
105///
106/// CyclesResponse
107/// Result of transferring cycles to a child canister
108///
109
110#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
111pub struct CyclesResponse {
112    pub cycles_transferred: u128,
113}