1use crate::workflow::runtime::timer::{
8 TimerAuthorityWorkflow, recovery_watchdog_identity, require_active,
9};
10use ic_timers::TimerRunResult;
11use std::{future::Future, time::Duration};
12
13pub use crate::workflow::runtime::timer::TimerError;
14
15#[doc(hidden)]
17pub struct TimerApi;
18
19impl TimerApi {
20 #[doc(hidden)]
22 pub fn initialize_nonroot_runtime_required() {
23 TimerAuthorityWorkflow::initialize_nonroot_runtime()
24 .unwrap_or_else(|error| ic_cdk::trap(format!("timer runtime init failed: {error}")));
25 }
26
27 #[doc(hidden)]
29 pub fn initialize_root_runtime_required() {
30 TimerAuthorityWorkflow::initialize_root_runtime()
31 .unwrap_or_else(|error| ic_cdk::trap(format!("timer runtime init failed: {error}")));
32 }
33
34 #[doc(hidden)]
36 pub fn initialize_shared_runtime_required() {
37 TimerAuthorityWorkflow::initialize_shared_runtime()
38 .unwrap_or_else(|error| ic_cdk::trap(format!("timer runtime init failed: {error}")));
39 }
40
41 #[doc(hidden)]
43 pub fn restore_snapshot_suspension(sealed: bool) {
44 TimerAuthorityWorkflow::restore_snapshot_suspension(sealed);
45 }
46
47 #[doc(hidden)]
49 pub fn require_root_authority_snapshot_resumable() -> Result<(), TimerError> {
50 TimerAuthorityWorkflow::require_root_resumable()
51 }
52
53 #[doc(hidden)]
55 pub fn require_active() -> Result<(), TimerError> {
56 require_active()
57 }
58
59 #[doc(hidden)]
61 pub fn recovery_watchdog_identity() -> Result<ic_timers::TimerIdentity, TimerError> {
62 recovery_watchdog_identity()
63 }
64
65 #[doc(hidden)]
67 #[must_use]
68 pub fn recover_expired_async_jobs(now_ns: u64) -> u64 {
69 TimerAuthorityWorkflow::recover_expired_async_jobs(now_ns)
70 }
71
72 #[doc(hidden)]
74 #[must_use]
75 pub fn recover_expired_root_async_jobs(now_ns: u64) -> u64 {
76 TimerAuthorityWorkflow::recover_expired_async_jobs_with_automatic_topup(now_ns)
77 }
78
79 #[doc(hidden)]
81 pub fn defer_lifecycle_required(
82 delay: Duration,
83 label: impl Into<String>,
84 task: impl Future<Output = ()> + 'static,
85 ) {
86 TimerAuthorityWorkflow::defer_lifecycle_once(delay, label, task)
87 .unwrap_or_else(|error| ic_cdk::trap(format!("lifecycle timer rejected: {error}")));
88 }
89
90 #[doc(hidden)]
92 pub fn defer_lifecycle_result_required(
93 delay: Duration,
94 label: impl Into<String>,
95 task: impl Future<Output = TimerRunResult> + 'static,
96 ) {
97 TimerAuthorityWorkflow::defer_lifecycle_result_once(delay, label, task)
98 .unwrap_or_else(|error| ic_cdk::trap(format!("lifecycle timer rejected: {error}")));
99 }
100}