canic_core/macros/endpoints/
mod.rs1pub mod root;
4
5#[macro_export]
7macro_rules! canic_endpoints {
8 () => {
9 #[::canic::cdk::update]
16 fn ic_cycles_accept(max_amount: u128) -> u128 {
17 $crate::cdk::api::msg_cycles_accept(max_amount)
18 }
19
20 #[::canic::cdk::query]
25 pub fn icrc10_supported_standards() -> Vec<(String, String)> {
26 $crate::ops::icrc::Icrc10Ops::supported_standards()
27 }
28
29 #[::canic::cdk::query]
30 async fn icrc21_canister_call_consent_message(
31 req: ::canic::core::spec::icrc::icrc21::ConsentMessageRequest,
32 ) -> ::canic::core::spec::icrc::icrc21::ConsentMessageResponse {
33 $crate::ops::icrc::Icrc21Ops::consent_message(req)
34 }
35
36 #[::canic::cdk::query]
41 fn canic_canister_cycle_balance() -> u128 {
42 $crate::cdk::api::canister_cycle_balance()
43 }
44
45 #[::canic::cdk::query]
46 fn canic_canister_version() -> u64 {
47 $crate::cdk::api::canister_version()
48 }
49
50 #[::canic::cdk::query]
51 fn canic_time() -> u64 {
52 $crate::cdk::api::time()
53 }
54
55 #[::canic::cdk::query]
60 fn canic_memory_registry() -> ::canic::core::ops::model::memory::registry::MemoryRegistryView {
61 $crate::ops::model::memory::registry::MemoryRegistryOps::export()
62 }
63
64 #[::canic::cdk::query]
65 fn canic_env() -> ::canic::core::ops::model::memory::env::EnvData {
66 $crate::ops::model::memory::EnvOps::export()
67 }
68
69 #[::canic::cdk::query]
70 fn canic_log(
71 crate_name: Option<String>,
72 topic: Option<String>,
73 min_level: Option<::canic::core::log::Level>,
74 page: ::canic::core::types::PageRequest,
75 ) -> ::canic::core::ops::model::memory::log::LogPageDto {
76 ::canic::core::ops::model::memory::log::LogOps::page(
77 crate_name, topic, min_level, page,
78 )
79 }
80
81 #[::canic::cdk::query]
86 async fn canic_metrics()
87 -> ::canic::core::ops::metrics::MetricsReport {
88 ::canic::core::ops::metrics::MetricsOps::report()
89 }
90
91 #[::canic::cdk::query]
92 fn canic_perf(
93 page: ::canic::core::types::PageRequest,
94 ) -> ::canic::core::ops::perf::PerfSnapshot {
95 ::canic::core::ops::perf::PerfOps::snapshot(page)
96 }
97
98 #[::canic::cdk::query]
103 fn canic_app_state() -> ::canic::core::ops::model::memory::state::AppStateData {
104 $crate::ops::model::memory::state::AppStateOps::export()
105 }
106
107 #[::canic::cdk::query]
108 fn canic_subnet_state() -> ::canic::core::ops::model::memory::state::SubnetStateData {
109 $crate::ops::model::memory::state::SubnetStateOps::export()
110 }
111
112 #[::canic::cdk::query]
117 fn canic_app_directory(
118 page: ::canic::core::types::PageRequest,
119 ) -> ::canic::core::ops::model::memory::directory::DirectoryPageDto {
120 $crate::ops::model::memory::directory::AppDirectoryOps::page(page)
121 }
122
123 #[::canic::cdk::query]
124 fn canic_subnet_directory(
125 page: ::canic::core::types::PageRequest,
126 ) -> Result<::canic::core::ops::model::memory::directory::DirectoryPageDto, ::canic::Error> {
127 $crate::ops::model::memory::directory::SubnetDirectoryOps::page(page)
128 }
129
130 #[::canic::cdk::query]
135 fn canic_subnet_canister_children(
136 page: ::canic::core::types::PageRequest,
137 ) -> ::canic::core::ops::model::memory::topology::subnet::SubnetCanisterChildrenPage {
138 ::canic::core::ops::model::memory::topology::subnet::SubnetCanisterChildrenOps::page(
139 page,
140 )
141 }
142
143 #[::canic::cdk::query]
149 fn canic_cycle_tracker(
150 page: ::canic::core::types::PageRequest,
151 ) -> ::canic::core::ops::model::memory::cycles::CycleTrackerPage {
152 $crate::ops::model::memory::cycles::CycleTrackerOps::page(page)
153 }
154
155 #[::canic::cdk::query]
161 async fn canic_scaling_registry()
162 -> Result<::canic::core::ops::model::memory::scaling::ScalingRegistryView, ::canic::Error> {
163 $crate::auth_require_any!(::canic::core::auth::is_controller)?;
164
165 Ok($crate::ops::model::memory::scaling::ScalingRegistryOps::export())
166 }
167
168 #[::canic::cdk::query]
174 async fn canic_sharding_registry()
175 -> Result<::canic::core::ops::model::memory::sharding::ShardingRegistryDto, ::canic::Error> {
176 $crate::auth_require_any!(::canic::core::auth::is_controller)?;
177
178 Ok($crate::ops::model::memory::sharding::ShardingPolicyOps::export())
179 }
180
181 #[::canic::cdk::query]
186 fn icts_name() -> String {
187 env!("CARGO_PKG_NAME").to_string()
188 }
189
190 #[::canic::cdk::query]
191 fn icts_version() -> String {
192 env!("CARGO_PKG_VERSION").to_string()
193 }
194
195 #[::canic::cdk::query]
196 fn icts_description() -> String {
197 env!("CARGO_PKG_DESCRIPTION").to_string()
198 }
199
200 #[::canic::cdk::query]
201 fn icts_metadata() -> Vec<(String, String)> {
202 vec![
203 ("name".to_string(), icts_name()),
204 ("version".to_string(), icts_version()),
205 ("description".to_string(), icts_description()),
206 ]
207 }
208
209 #[::canic::cdk::update]
210 async fn icts_canister_status()
211 -> Result<::canic::cdk::management_canister::CanisterStatusResult, String> {
212 use $crate::cdk::{
213 api::canister_self,
214 management_canister::{CanisterStatusArgs, canister_status},
215 };
216
217 if &msg_caller().to_string() != "ylse7-raaaa-aaaal-qsrsa-cai" {
218 return Err("Unauthorized".to_string());
219 }
220
221 canister_status(&CanisterStatusArgs {
222 canister_id: canister_self(),
223 })
224 .await
225 .map_err(|e| e.to_string())
226 }
227 };
228}