#[doc(hidden)]
#[macro_export]
macro_rules! __canic_compiled_role_capabilities {
() => {{
let mut capabilities = ::std::collections::BTreeSet::new();
#[cfg(not(canic_capability_runtime))]
compile_error!("configured Canic roles must include the Runtime capability");
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::Runtime);
#[cfg(canic_capability_automatic_topup)]
capabilities
.insert($crate::__internal::core::role_contract::RoleCapabilityKey::AutomaticTopup);
#[cfg(canic_capability_child_provisioning)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::ChildProvisioning,
);
#[cfg(canic_capability_delegated_token_issuer)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::DelegatedTokenIssuer,
);
#[cfg(canic_capability_delegated_token_verifier)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::DelegatedTokenVerifier,
);
#[cfg(canic_capability_fleet_admission_projection)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::FleetAdmissionProjection,
);
#[cfg(canic_capability_fleet_coordinator)]
capabilities
.insert($crate::__internal::core::role_contract::RoleCapabilityKey::FleetCoordinator);
#[cfg(canic_capability_icrc21)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::Icrc21);
#[cfg(canic_capability_index)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::Index);
#[cfg(canic_capability_local_application_authorization)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::LocalApplicationAuthorization,
);
#[cfg(canic_capability_role_attestation_signer)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::RoleAttestationSigner,
);
#[cfg(canic_capability_role_attestation_verifier)]
capabilities.insert(
$crate::__internal::core::role_contract::RoleCapabilityKey::RoleAttestationVerifier,
);
#[cfg(canic_capability_root)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::Root);
#[cfg(canic_capability_root_delegation)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::RootDelegation);
#[cfg(canic_capability_root_control_plane)]
capabilities
.insert($crate::__internal::core::role_contract::RoleCapabilityKey::RootControlPlane);
#[cfg(canic_capability_scaling)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::Scaling);
#[cfg(canic_capability_sharding)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::Sharding);
#[cfg(canic_capability_wasm_store)]
capabilities.insert($crate::__internal::core::role_contract::RoleCapabilityKey::WasmStore);
capabilities
}};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_emit_managed_status_endpoint {
() => {
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum CanisterOperationStatusResponse {
ConfigureRuntime(::canic::dto::role::ComponentRuntimeOperationStatus),
}
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum PublicStatusRequest {
Health,
Metrics(::canic::dto::public_status::PublicMetricsRequest),
History(::canic::dto::public_status::PublicHistoryRequest),
Overview,
#[cfg(canic_capability_child_provisioning)]
Children(::canic::dto::page::PageRequest),
}
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum PublicStatusResponse {
Health(::canic::dto::public_status::PublicHealth),
Metrics(::canic::dto::public_status::PublicMetricsSnapshot),
History(::canic::dto::public_status::PublicHistorySnapshot),
Overview(::canic::dto::role::RoleOverviewResponse),
#[cfg(canic_capability_child_provisioning)]
Children(::canic::dto::page::Page<::canic::dto::canister::CanisterInfo>),
}
#[$crate::canic_query(public)]
async fn canic_public_status(
request: PublicStatusRequest,
) -> Result<PublicStatusResponse, ::canic::Error> {
match request {
PublicStatusRequest::Health => Ok(PublicStatusResponse::Health(::canic::__internal::core::api::public_status::PublicStatusApi::health())),
PublicStatusRequest::Metrics(request) => Ok(PublicStatusResponse::Metrics(::canic::__internal::core::api::public_status::PublicStatusApi::metrics(request))),
PublicStatusRequest::History(request) => Ok(PublicStatusResponse::History(::canic::__internal::core::api::public_status::PublicStatusApi::history(request))),
PublicStatusRequest::Overview => Ok(PublicStatusResponse::Overview(
$crate::__canic_role_overview!(),
)),
#[cfg(canic_capability_child_provisioning)]
PublicStatusRequest::Children(page) => Ok(PublicStatusResponse::Children(
$crate::__internal::core::api::topology::children::CanisterChildrenApi::page(
page,
),
)),
}
}
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum ObservabilityRequest {
Binding,
ChildFunding(::canic::__internal::candid::Principal),
CycleBalance,
CycleHistory(::canic::dto::page::PageRequest),
#[cfg(canic_capability_automatic_topup)]
CycleTopups(::canic::dto::page::PageRequest),
Health,
Logs(::canic::dto::role::LogStatusRequest),
MemoryAllocations,
Metrics(::canic::dto::role::MetricsStatusRequest),
Readiness,
Runtime,
}
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum ObservabilityResponse {
Binding(::canic::ids::ManagedCanisterBinding),
ChildFunding(::canic::dto::observability::ChildFundingUsage),
CycleBalance(::canic::dto::role::CycleBalanceStatusResponse),
CycleHistory(::canic::dto::page::Page<::canic::dto::cycles::CycleTrackerEntry>),
#[cfg(canic_capability_automatic_topup)]
CycleTopups(::canic::dto::page::Page<::canic::dto::cycles::CycleTopupEvent>),
Health(::canic::dto::runtime::CanicHealthStatus),
Logs(::canic::dto::page::Page<::canic::dto::log::LogEntry>),
MemoryAllocations(::canic::dto::memory::MemoryAllocationsResponse),
Metrics(::canic::dto::page::Page<::canic::dto::metrics::MetricEntry>),
Readiness(::canic::dto::runtime::CanicReadinessStatus),
Runtime(::canic::dto::runtime::CanicRuntimeStatus),
}
#[$crate::canic_query(requires(caller::is_controller()))]
async fn canic_observability(
request: ObservabilityRequest,
) -> Result<ObservabilityResponse, ::canic::Error> {
match request {
ObservabilityRequest::Binding => {
$crate::__internal::core::api::lifecycle::nonroot::LifecycleApi::managed_binding()
.map(ObservabilityResponse::Binding)
}
ObservabilityRequest::ChildFunding(child) => {
$crate::__internal::core::api::observability::ObservabilityApi::child_funding(child)
.map(ObservabilityResponse::ChildFunding)
}
ObservabilityRequest::CycleBalance => Ok(
ObservabilityResponse::CycleBalance(
::canic::dto::role::CycleBalanceStatusResponse {
cycles: $crate::__internal::cdk::api::canister_cycle_balance(),
},
),
),
ObservabilityRequest::CycleHistory(page) => {
Ok(ObservabilityResponse::CycleHistory(
$crate::__internal::core::api::cycles::CycleTrackerQuery::page(page),
))
}
#[cfg(canic_capability_automatic_topup)]
ObservabilityRequest::CycleTopups(page) => {
Ok(ObservabilityResponse::CycleTopups(
$crate::__internal::core::api::cycles::CycleTrackerQuery::topups(page),
))
}
ObservabilityRequest::Health => Ok(ObservabilityResponse::Health(
$crate::__internal::core::api::runtime::RuntimeIntrospectionApi::health(Some(
$crate::__internal::cdk::api::time(),
)),
)),
ObservabilityRequest::Logs(request) => {
Ok(ObservabilityResponse::Logs(
$crate::__internal::core::api::log::LogQuery::page(
request.crate_name,
request.topic,
request.min_level,
request.page,
),
))
}
ObservabilityRequest::MemoryAllocations => {
$crate::__internal::core::api::memory::MemoryQuery::allocations()
.map(ObservabilityResponse::MemoryAllocations)
}
ObservabilityRequest::Metrics(request) => {
$crate::__canic_role_metrics_status!(request)
.map(ObservabilityResponse::Metrics)
}
ObservabilityRequest::Readiness => Ok(ObservabilityResponse::Readiness(
$crate::__internal::core::api::runtime::RuntimeIntrospectionApi::readiness(
$crate::__internal::cdk::api::time(),
),
)),
ObservabilityRequest::Runtime => Ok(ObservabilityResponse::Runtime(
$crate::__internal::core::api::runtime::RuntimeIntrospectionApi::runtime_status(
$crate::__internal::cdk::api::time(),
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION"),
$crate::VERSION,
$crate::__internal::cdk::api::canister_version(),
),
)),
}
}
#[cfg(any(
canic_capability_delegated_token_issuer,
canic_capability_local_application_authorization
))]
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum AuthStatusRequest {
#[cfg(canic_capability_delegated_token_issuer)]
ActiveDelegationProof,
#[cfg(canic_capability_local_application_authorization)]
ApplicationSession,
#[cfg(canic_capability_delegated_token_issuer)]
DelegatedToken(::canic::dto::auth::DelegatedTokenGetRequest),
}
#[cfg(any(
canic_capability_delegated_token_issuer,
canic_capability_local_application_authorization
))]
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum AuthStatusResponse {
#[cfg(canic_capability_delegated_token_issuer)]
ActiveDelegationProof(::canic::dto::auth::ActiveDelegationProofStatusResponse),
#[cfg(canic_capability_local_application_authorization)]
ApplicationSession(::canic::dto::auth::ApplicationSessionStatus),
#[cfg(canic_capability_delegated_token_issuer)]
DelegatedToken(::canic::dto::auth::DelegatedToken),
}
#[cfg(any(
canic_capability_delegated_token_issuer,
canic_capability_local_application_authorization
))]
#[$crate::canic_query(public)]
async fn canic_auth_status(
request: AuthStatusRequest,
) -> Result<AuthStatusResponse, ::canic::Error> {
match request {
#[cfg(canic_capability_delegated_token_issuer)]
AuthStatusRequest::ActiveDelegationProof => {
$crate::__internal::core::api::auth::AuthApi::active_delegation_proof_status()
.map(AuthStatusResponse::ActiveDelegationProof)
}
#[cfg(canic_capability_local_application_authorization)]
AuthStatusRequest::ApplicationSession => {
$crate::__internal::core::api::auth::AuthApi::application_session_status()
.map(AuthStatusResponse::ApplicationSession)
}
#[cfg(canic_capability_delegated_token_issuer)]
AuthStatusRequest::DelegatedToken(request) => {
$crate::__internal::core::api::auth::AuthApi::get_delegated_token(request)
.map(AuthStatusResponse::DelegatedToken)
}
}
}
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum ControlStatusRequest {
#[cfg(canic_capability_local_application_authorization)]
ApplicationSessionAudit(::canic::dto::page::PageRequest),
Operation(::canic::dto::role::OperationStatusRequest),
}
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum ControlStatusResponse {
#[cfg(canic_capability_local_application_authorization)]
ApplicationSessionAudit(::canic::dto::auth::ApplicationSessionAuditResponse),
Operation(CanisterOperationStatusResponse),
}
#[$crate::canic_query(requires(caller::is_root()))]
async fn canic_control_status(
request: ControlStatusRequest,
) -> Result<ControlStatusResponse, ::canic::Error> {
match request {
#[cfg(canic_capability_local_application_authorization)]
ControlStatusRequest::ApplicationSessionAudit(page) => {
$crate::__internal::core::api::auth::AuthApi::application_session_audit(page)
.map(ControlStatusResponse::ApplicationSessionAudit)
}
ControlStatusRequest::Operation(request) => {
$crate::__internal::core::api::component_runtime::ComponentRuntimeApi::operation_status(
request.operation_id,
)
.map(CanisterOperationStatusResponse::ConfigureRuntime)
.map(ControlStatusResponse::Operation)
}
}
}
#[cfg(canic_capability_fleet_admission_projection)]
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum AdmissionStatusRequest {
#[cfg(canic_capability_fleet_admission_projection)]
Admission(::canic::dto::page::PageRequest),
}
#[cfg(canic_capability_fleet_admission_projection)]
#[derive(::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize)]
#[serde(crate = "::canic::__internal::serde")]
pub enum AdmissionStatusResponse {
#[cfg(canic_capability_fleet_admission_projection)]
Admission(::canic::dto::fleet_admission::FleetAdmissionProjectionStatusResponse),
}
#[cfg(canic_capability_fleet_admission_projection)]
#[$crate::canic_query(requires(any(caller::is_controller(), caller::is_root())))]
async fn canic_admission_status(
request: AdmissionStatusRequest,
) -> Result<AdmissionStatusResponse, ::canic::Error> {
match request {
#[cfg(canic_capability_fleet_admission_projection)]
AdmissionStatusRequest::Admission(page) => {
$crate::__internal::core::api::fleet_admission_projection::FleetAdmissionProjectionApi::status(page)
.map(AdmissionStatusResponse::Admission)
}
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_emit_local_status_endpoint {
() => {
#[derive(
::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize,
)]
#[serde(crate = "::canic::__internal::serde")]
pub enum PublicStatusRequest {
Health,
Metrics(::canic::dto::public_status::PublicMetricsRequest),
History(::canic::dto::public_status::PublicHistoryRequest),
#[cfg(canic_capability_child_provisioning)]
Children(::canic::dto::page::PageRequest),
}
#[derive(
::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize,
)]
#[serde(crate = "::canic::__internal::serde")]
pub enum PublicStatusResponse {
Health(::canic::dto::public_status::PublicHealth),
Metrics(::canic::dto::public_status::PublicMetricsSnapshot),
History(::canic::dto::public_status::PublicHistorySnapshot),
#[cfg(canic_capability_child_provisioning)]
Children(::canic::dto::page::Page<::canic::dto::canister::CanisterInfo>),
}
#[$crate::canic_query(public)]
async fn canic_public_status(
request: PublicStatusRequest,
) -> Result<PublicStatusResponse, ::canic::Error> {
match request {
PublicStatusRequest::Health => Ok(PublicStatusResponse::Health(
::canic::__internal::core::api::public_status::PublicStatusApi::health(),
)),
PublicStatusRequest::History(request) => Ok(PublicStatusResponse::History(
::canic::__internal::core::api::public_status::PublicStatusApi::history(
request,
),
)),
PublicStatusRequest::Metrics(request) => Ok(PublicStatusResponse::Metrics(
::canic::__internal::core::api::public_status::PublicStatusApi::metrics(
request,
),
)),
#[cfg(canic_capability_child_provisioning)]
PublicStatusRequest::Children(page) => Ok(PublicStatusResponse::Children(
$crate::__internal::core::api::topology::children::CanisterChildrenApi::page(
page,
),
)),
}
}
#[derive(
::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize,
)]
#[serde(crate = "::canic::__internal::serde")]
pub enum ObservabilityRequest {
ChildFunding(::canic::__internal::candid::Principal),
CycleBalance,
CycleHistory(::canic::dto::page::PageRequest),
#[cfg(canic_capability_automatic_topup)]
CycleTopups(::canic::dto::page::PageRequest),
Health,
Logs(::canic::dto::role::LogStatusRequest),
Metrics(::canic::dto::role::MetricsStatusRequest),
Readiness,
Runtime,
}
#[derive(
::canic::__internal::candid::CandidType, ::canic::__internal::serde::Deserialize,
)]
#[serde(crate = "::canic::__internal::serde")]
pub enum ObservabilityResponse {
ChildFunding(::canic::dto::observability::ChildFundingUsage),
CycleBalance(::canic::dto::role::CycleBalanceStatusResponse),
CycleHistory(::canic::dto::page::Page<::canic::dto::cycles::CycleTrackerEntry>),
#[cfg(canic_capability_automatic_topup)]
CycleTopups(::canic::dto::page::Page<::canic::dto::cycles::CycleTopupEvent>),
Health(::canic::dto::runtime::CanicHealthStatus),
Logs(::canic::dto::page::Page<::canic::dto::log::LogEntry>),
Metrics(::canic::dto::page::Page<::canic::dto::metrics::MetricEntry>),
Readiness(::canic::dto::runtime::CanicReadinessStatus),
Runtime(::canic::dto::runtime::CanicRuntimeStatus),
}
#[$crate::canic_query(requires(caller::is_controller()))]
async fn canic_observability(
request: ObservabilityRequest,
) -> Result<ObservabilityResponse, ::canic::Error> {
match request {
ObservabilityRequest::ChildFunding(child) => {
$crate::__internal::core::api::observability::ObservabilityApi::child_funding(
child,
)
.map(ObservabilityResponse::ChildFunding)
}
ObservabilityRequest::CycleBalance => Ok(ObservabilityResponse::CycleBalance(
::canic::dto::role::CycleBalanceStatusResponse {
cycles: $crate::__internal::cdk::api::canister_cycle_balance(),
},
)),
ObservabilityRequest::CycleHistory(page) => {
Ok(ObservabilityResponse::CycleHistory(
$crate::__internal::core::api::cycles::CycleTrackerQuery::page(page),
))
}
#[cfg(canic_capability_automatic_topup)]
ObservabilityRequest::CycleTopups(page) => Ok(ObservabilityResponse::CycleTopups(
$crate::__internal::core::api::cycles::CycleTrackerQuery::topups(page),
)),
ObservabilityRequest::Health => Ok(ObservabilityResponse::Health(
$crate::__internal::core::api::runtime::RuntimeIntrospectionApi::health(Some(
$crate::__internal::cdk::api::time(),
)),
)),
ObservabilityRequest::Logs(request) => Ok(ObservabilityResponse::Logs(
$crate::__internal::core::api::log::LogQuery::page(
request.crate_name,
request.topic,
request.min_level,
request.page,
),
)),
ObservabilityRequest::Metrics(request) => {
$crate::__canic_role_metrics_status!(request)
.map(ObservabilityResponse::Metrics)
}
ObservabilityRequest::Readiness => Ok(ObservabilityResponse::Readiness(
$crate::__internal::core::api::runtime::RuntimeIntrospectionApi::readiness(
$crate::__internal::cdk::api::time(),
),
)),
ObservabilityRequest::Runtime => Ok(ObservabilityResponse::Runtime(
$crate::__internal::core::api::runtime::RuntimeIntrospectionApi::runtime_status(
$crate::__internal::cdk::api::time(),
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION"),
$crate::VERSION,
$crate::__internal::cdk::api::canister_version(),
),
)),
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_emit_managed_command_endpoint {
() => {
#[derive(
::canic::__internal::candid::CandidType,
::canic::__internal::serde::Deserialize,
)]
#[serde(crate = "::canic::__internal::serde")]
pub enum CanisterCommand {
#[cfg(canic_capability_fleet_admission_projection)]
ActivateFleetAdmission(
::canic::dto::fleet_admission::FleetAdmissionActivateTargetRequest,
),
#[cfg(canic_capability_local_application_authorization)]
ApplicationSession(::canic::dto::auth::ApplicationSessionCommand),
ConfigureRuntime(
::canic::dto::component_registry::ComponentRuntimeDirectoryPreparationRequest,
),
#[cfg(canic_capability_delegated_token_issuer)]
InstallDelegationProof(
::canic::dto::auth::InstallActiveDelegationProofRequest,
),
Observe(::canic::dto::observability::CanisterObservabilityRequest),
#[cfg(canic_capability_fleet_admission_projection)]
OpenFleetAdmission(
::canic::dto::fleet_admission::FleetAdmissionOpenTargetRequest,
),
#[cfg(canic_capability_delegated_token_issuer)]
PrepareDelegatedToken(::canic::dto::auth::DelegatedTokenPrepareRequest),
#[cfg(canic_capability_fleet_admission_projection)]
PrepareFleetAdmission(
::canic::dto::fleet_admission::FleetAdmissionPrepareTargetRequest,
),
#[cfg(canic_capability_child_provisioning)]
RespondCapability(::canic::dto::capability::NonrootCyclesCapabilityEnvelopeV1),
SynchronizeState(::canic::dto::cascade::StateSnapshotInput),
}
#[derive(
::canic::__internal::candid::CandidType,
::canic::__internal::serde::Deserialize,
)]
#[serde(crate = "::canic::__internal::serde")]
pub enum CanisterCommandResponse {
#[cfg(canic_capability_fleet_admission_projection)]
ActivateFleetAdmission(
::canic::dto::fleet_admission::FleetAdmissionTargetReceipt,
),
#[cfg(canic_capability_local_application_authorization)]
ApplicationSession(::canic::dto::auth::ApplicationSessionCommandResponse),
#[cfg(canic_capability_delegated_token_issuer)]
InstallDelegationProof(
::canic::dto::auth::InstallActiveDelegationProofResponse,
),
Observe(::canic::dto::observability::CanisterObservabilityResponse),
#[cfg(canic_capability_fleet_admission_projection)]
OpenFleetAdmission(
::canic::dto::fleet_admission::FleetAdmissionTargetReceipt,
),
OperationAccepted(::canic::dto::role::OperationReceipt),
#[cfg(canic_capability_delegated_token_issuer)]
PrepareDelegatedToken(::canic::dto::auth::DelegatedTokenPrepareResponse),
#[cfg(canic_capability_fleet_admission_projection)]
PrepareFleetAdmission(
::canic::dto::fleet_admission::FleetAdmissionTargetReceipt,
),
#[cfg(canic_capability_child_provisioning)]
RespondCapability(::canic::dto::capability::NonrootCyclesCapabilityResponseV1),
SynchronizeState(::canic::dto::cascade::StateCascadeReport),
}
#[doc(hidden)]
fn __canic_inspect_managed_update_message() {
if $crate::__internal::core::ingress::payload::current_method_name()
!= $crate::__internal::core::protocol::CANIC_COMMAND
{
$crate::__internal::core::ingress::payload::inspect_update_message();
return;
}
let bytes = $crate::__internal::core::ingress::payload::current_payload_bytes();
if !$crate::__internal::core::ingress::payload::payload_within_limit(
bytes.len(),
$crate::__internal::core::ingress::payload::DEFAULT_UPDATE_INGRESS_MAX_BYTES,
) {
return;
}
if ::canic::__internal::candid::decode_one::<CanisterCommand>(&bytes).is_ok() {
$crate::__internal::core::ingress::payload::accept_current_message();
}
}
#[$crate::canic_update(
internal,
public,
payload(max_bytes = ::canic::__internal::core::ingress::payload::DEFAULT_UPDATE_INGRESS_MAX_BYTES)
)]
async fn canic_command(
command: CanisterCommand,
) -> Result<CanisterCommandResponse, ::canic::Error> {
if !matches!(&command, CanisterCommand::SynchronizeState(_)) {
$crate::__internal::core::access::expr::eval_default_fleet_guard(
$crate::__internal::core::access::expr::DefaultFleetGuard::AllowsUpdates,
$crate::__internal::core::ids::EndpointCall {
endpoint: $crate::__internal::core::ids::EndpointId::new(
$crate::__internal::core::protocol::CANIC_COMMAND,
),
kind: $crate::__internal::core::ids::EndpointCallKind::Update,
},
)
.map_err(::canic::Error::from)?;
}
match command {
#[cfg(canic_capability_fleet_admission_projection)]
CanisterCommand::ActivateFleetAdmission(request) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_root(caller)
.await
.map_err(::canic::Error::from)?;
$crate::__internal::core::api::fleet_admission_projection::FleetAdmissionProjectionApi::activate(request)
.map(CanisterCommandResponse::ActivateFleetAdmission)
}
#[cfg(canic_capability_local_application_authorization)]
CanisterCommand::ApplicationSession(command) => {
let response = match command {
::canic::dto::auth::ApplicationSessionCommand::Establish(request) => {
$crate::__internal::core::api::auth::AuthApi::establish_application_session(request)?
}
::canic::dto::auth::ApplicationSessionCommand::Clear => {
$crate::__internal::core::api::auth::AuthApi::clear_application_session()?
}
};
Ok(CanisterCommandResponse::ApplicationSession(response))
}
CanisterCommand::ConfigureRuntime(request) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_root(caller)
.await
.map_err(::canic::Error::from)?;
let operation_id = request.operation_id;
#[cfg(canic_capability_automatic_topup)]
let configure_runtime = $crate::__internal::core::api::lifecycle::nonroot::LifecycleApi::configure_component_runtime_with_automatic_topup;
#[cfg(not(canic_capability_automatic_topup))]
let configure_runtime = $crate::__internal::core::api::component_runtime::ComponentRuntimeApi::configure;
let transition = configure_runtime(request)?;
#[cfg(canic_capability_fleet_admission_projection)]
$crate::__internal::core::api::fleet_admission_projection::FleetAdmissionProjectionApi::open_fresh()?;
if transition.transitioned {
__canic_schedule_prepared_activation_init(
transition.application_init_args,
);
}
$crate::__internal::core::api::lifecycle::nonroot::LifecycleApi::schedule_init_nonroot_bootstrap();
Ok(CanisterCommandResponse::OperationAccepted(
::canic::dto::role::OperationReceipt { operation_id },
))
}
#[cfg(canic_capability_delegated_token_issuer)]
CanisterCommand::InstallDelegationProof(request) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_controller(caller)
.await
.map_err(::canic::Error::from)?;
$crate::__internal::core::api::auth::AuthApi::install_active_delegation_proof(
request,
)
.map(CanisterCommandResponse::InstallDelegationProof)
}
CanisterCommand::Observe(request) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_controller(caller)
.await
.map_err(::canic::Error::from)?;
$crate::__canic_sensitive_observability_response!(request)
.map(CanisterCommandResponse::Observe)
}
#[cfg(canic_capability_fleet_admission_projection)]
CanisterCommand::OpenFleetAdmission(request) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_root(caller)
.await
.map_err(::canic::Error::from)?;
$crate::__internal::core::api::fleet_admission_projection::FleetAdmissionProjectionApi::open(request)
.map(CanisterCommandResponse::OpenFleetAdmission)
}
#[cfg(canic_capability_delegated_token_issuer)]
CanisterCommand::PrepareDelegatedToken(request) => {
$crate::__internal::core::api::auth::AuthApi::prepare_delegated_token(request)
.await
.map(CanisterCommandResponse::PrepareDelegatedToken)
}
#[cfg(canic_capability_fleet_admission_projection)]
CanisterCommand::PrepareFleetAdmission(request) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_root(caller)
.await
.map_err(::canic::Error::from)?;
$crate::__internal::core::api::fleet_admission_projection::FleetAdmissionProjectionApi::prepare(request)
.map(CanisterCommandResponse::PrepareFleetAdmission)
}
#[cfg(canic_capability_child_provisioning)]
CanisterCommand::RespondCapability(envelope) => {
$crate::__internal::core::api::rpc::RpcApi::response_capability_v1_nonroot(
envelope,
)
.await
.map(CanisterCommandResponse::RespondCapability)
}
CanisterCommand::SynchronizeState(snapshot) => {
let caller = $crate::__internal::cdk::api::msg_caller();
$crate::__internal::core::access::auth::is_parent(caller)
.await
.map_err(::canic::Error::from)?;
$crate::__internal::core::api::cascade::CascadeApi::sync_state(snapshot)
.await
.map(CanisterCommandResponse::SynchronizeState)
}
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_protocol_profile_digest {
() => {{
let Some(__canic_protocol_profile_digest) = option_env!("CANIC_PROTOCOL_PROFILE_DIGEST")
else {
panic!("canonical role artifact must embed its protocol-profile digest");
};
__canic_protocol_profile_digest
.parse::<$crate::__internal::core::role_contract::ProtocolProfileDigest>()
.expect("embedded protocol-profile digest must be canonical lowercase SHA-256")
.into_bytes()
}};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_role_overview {
() => {{
let capabilities = $crate::__canic_compiled_role_capabilities!();
$crate::__internal::core::api::role::RoleOverviewApi::overview(
$crate::__internal::core::ids::CanisterRole::from(env!("CANIC_CANISTER_ROLE")),
&capabilities,
$crate::__canic_protocol_profile_digest!(),
$crate::__internal::core::api::metadata::CanicMetadataApi::metadata_for(
env!("CARGO_PKG_NAME"),
env!("CARGO_PKG_VERSION"),
env!("CARGO_PKG_DESCRIPTION"),
$crate::VERSION,
$crate::__internal::cdk::api::canister_version(),
),
$crate::__internal::core::api::ready::ReadyApi::bootstrap_status(),
)
}};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_role_metrics_status {
($request:expr) => {{
let request = $request;
match request.kind {
#[cfg(canic_metrics_core)]
::canic::dto::metrics::MetricsKind::Core => Ok(
$crate::__internal::core::api::metrics::MetricsQuery::core(request.page),
),
#[cfg(canic_metrics_placement)]
::canic::dto::metrics::MetricsKind::Placement => {
Ok($crate::__internal::core::api::metrics::MetricsQuery::placement(request.page))
}
#[cfg(canic_metrics_platform)]
::canic::dto::metrics::MetricsKind::Platform => {
Ok($crate::__internal::core::api::metrics::MetricsQuery::platform(request.page))
}
#[cfg(canic_metrics_runtime)]
::canic::dto::metrics::MetricsKind::Runtime => {
Ok($crate::__internal::core::api::metrics::MetricsQuery::runtime(request.page))
}
#[cfg(canic_metrics_security)]
::canic::dto::metrics::MetricsKind::Security => {
Ok($crate::__internal::core::api::metrics::MetricsQuery::security(request.page))
}
#[cfg(canic_metrics_storage)]
::canic::dto::metrics::MetricsKind::Storage => {
Ok($crate::__internal::core::api::metrics::MetricsQuery::storage(request.page))
}
_ => Err(::canic::Error::from_registered(
::canic::diagnostics::codes::REQUEST_INVALID,
)),
}
}};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __canic_sensitive_observability_response {
($request:expr) => {{
match $request {
::canic::dto::observability::CanisterObservabilityRequest::ChildFunding(child) => {
$crate::__internal::core::api::observability::ObservabilityApi::child_funding(child)
.map(::canic::dto::observability::CanisterObservabilityResponse::ChildFunding)
}
::canic::dto::observability::CanisterObservabilityRequest::CycleBalance => Ok(
::canic::dto::observability::CanisterObservabilityResponse::CycleBalance(
::canic::dto::role::CycleBalanceStatusResponse {
cycles: $crate::__internal::cdk::api::canister_cycle_balance(),
},
),
),
::canic::dto::observability::CanisterObservabilityRequest::CycleHistory(page) => Ok(
::canic::dto::observability::CanisterObservabilityResponse::CycleHistory(
$crate::__internal::core::api::cycles::CycleTrackerQuery::page(page),
),
),
::canic::dto::observability::CanisterObservabilityRequest::CycleTopups(page) => {
#[cfg(canic_capability_automatic_topup)]
{
Ok(
::canic::dto::observability::CanisterObservabilityResponse::CycleTopups(
$crate::__internal::core::api::cycles::CycleTrackerQuery::topups(page),
),
)
}
#[cfg(not(canic_capability_automatic_topup))]
{
let _ = page;
Err(::canic::Error::from_registered(
::canic::diagnostics::codes::REQUEST_INVALID,
))
}
}
::canic::dto::observability::CanisterObservabilityRequest::MemoryAllocations => {
$crate::__internal::core::api::memory::MemoryQuery::allocations().map(
::canic::dto::observability::CanisterObservabilityResponse::MemoryAllocations,
)
}
::canic::dto::observability::CanisterObservabilityRequest::Metrics(request) => {
$crate::__canic_role_metrics_status!(request)
.map(::canic::dto::observability::CanisterObservabilityResponse::Metrics)
}
}
}};
}