mod build;
mod endpoints;
mod start;
mod timer;
#[macro_export]
macro_rules! canic_protected_endpoint {
() => {};
(
$(#[$meta:meta])*
$vis:vis fn $name:ident = $method:expr, role = $role:expr;
$($rest:tt)*
) => {
$(#[$meta])*
$vis fn $name() -> $crate::api::ic::ProtectedInternalEndpoint {
$crate::api::ic::ProtectedInternalEndpoint::new($method, [$role])
}
$crate::canic_protected_endpoint! {
$($rest)*
}
};
(
$(#[$meta:meta])*
$vis:vis fn $name:ident = $method:expr, roles = [$($role:expr),+ $(,)?];
$($rest:tt)*
) => {
$(#[$meta])*
$vis fn $name() -> $crate::api::ic::ProtectedInternalEndpoint {
$crate::api::ic::ProtectedInternalEndpoint::new($method, [$($role),+])
}
$crate::canic_protected_endpoint! {
$($rest)*
}
};
(
$(#[$meta:meta])*
$vis:vis fn $name:ident = $method:expr, roles = [] $($tail:tt)*
) => {
compile_error!(
"canic_protected_endpoint! roles = [] is invalid; protected internal endpoints must accept at least one caller role"
);
};
(
$(#[$meta:meta])*
$vis:vis fn $name:ident = $method:expr, role = $role:expr $(;)?
) => {
$(#[$meta])*
$vis fn $name() -> $crate::api::ic::ProtectedInternalEndpoint {
$crate::api::ic::ProtectedInternalEndpoint::new($method, [$role])
}
};
(
$(#[$meta:meta])*
$vis:vis fn $name:ident = $method:expr, roles = [$($role:expr),+ $(,)?] $(;)?
) => {
$(#[$meta])*
$vis fn $name() -> $crate::api::ic::ProtectedInternalEndpoint {
$crate::api::ic::ProtectedInternalEndpoint::new($method, [$($role),+])
}
};
}
#[macro_export]
macro_rules! log {
($($tt:tt)*) => {{
$crate::__internal::core::log!($($tt)*);
}};
}
#[macro_export]
macro_rules! perf {
($($label:tt)*) => {{
$crate::__internal::core::perf::PERF_LAST.with(|last| {
let now = $crate::__internal::core::perf::perf_counter();
let then = *last.borrow();
let delta = now.saturating_sub(then);
*last.borrow_mut() = now;
let label = format!($($label)*);
let delta_fmt = $crate::__internal::instructions::format_instructions(delta);
let now_fmt = $crate::__internal::instructions::format_instructions(now);
$crate::__internal::core::perf::record_checkpoint(module_path!(), &label, delta);
$crate::__internal::core::log!(
Info,
Topic::Perf,
"{}: '{}' used {}i since last (total: {}i)",
module_path!(),
label,
delta_fmt,
now_fmt
);
});
}};
}