canic_core/api/application_startup/
mod.rs1use crate::{
6 dto::{caller_authority::CallerAuthorityPublication, error::Error},
7 workflow::runtime::application_startup,
8};
9use std::future::Future;
10
11#[doc(hidden)]
18pub struct ApplicationStartupApi;
19
20impl ApplicationStartupApi {
21 pub fn release(publication: CallerAuthorityPublication) -> Result<(), Error> {
22 application_startup::release(publication).map_err(Into::into)
23 }
24
25 pub fn require_initialization_effect() {
27 application_startup::require_initialization_effect().unwrap_or_else(|error| {
28 ic_cdk::trap(format!("application initialization fenced: {error}"))
29 });
30 }
31
32 pub fn require_upgrade_effect() {
34 application_startup::require_started()
35 .unwrap_or_else(|error| ic_cdk::trap(format!("application upgrade fenced: {error}")));
36 }
37
38 pub fn schedule_required<F: Future<Output = ()> + 'static>(hook: fn(Option<Vec<u8>>) -> F) {
40 application_startup::schedule(hook)
41 .unwrap_or_else(|error| ic_cdk::trap(format!("application startup rejected: {error}")));
42 }
43
44 #[must_use]
46 pub fn is_started() -> bool {
47 application_startup::require_started().is_ok()
48 }
49}