use crate::{
dto::{caller_authority::CallerAuthorityPublication, error::Error},
workflow::runtime::application_startup,
};
use std::future::Future;
#[doc(hidden)]
pub struct ApplicationStartupApi;
impl ApplicationStartupApi {
pub fn release(publication: CallerAuthorityPublication) -> Result<(), Error> {
application_startup::release(publication).map_err(Into::into)
}
pub fn require_initialization_effect() {
application_startup::require_initialization_effect().unwrap_or_else(|error| {
ic_cdk::trap(format!("application initialization fenced: {error}"))
});
}
pub fn require_upgrade_effect() {
application_startup::require_started()
.unwrap_or_else(|error| ic_cdk::trap(format!("application upgrade fenced: {error}")));
}
pub fn schedule_required<F: Future<Output = ()> + 'static>(hook: fn(Option<Vec<u8>>) -> F) {
application_startup::schedule(hook)
.unwrap_or_else(|error| ic_cdk::trap(format!("application startup rejected: {error}")));
}
#[must_use]
pub fn is_started() -> bool {
application_startup::require_started().is_ok()
}
}