use crate::workflow::runtime::timer::{ApplicationTimerId, TimerWorkflow};
use std::{future::Future, time::Duration};
#[derive(Debug, Eq, PartialEq)]
pub struct TimerHandle(ApplicationTimerId);
pub struct TimerApi;
impl TimerApi {
pub fn set(
delay: Duration,
label: impl Into<String>,
task: impl Future<Output = ()> + 'static,
) -> TimerHandle {
TimerHandle(TimerWorkflow::set_application_once(delay, label, task))
}
pub fn defer_lifecycle(
delay: Duration,
label: impl Into<String>,
task: impl Future<Output = ()> + 'static,
) -> TimerHandle {
Self::set(delay, label, task)
}
pub fn set_interval<F, Fut>(
interval: Duration,
label: impl Into<String>,
task: F,
) -> TimerHandle
where
F: FnMut() -> Fut + 'static,
Fut: Future<Output = ()> + 'static,
{
TimerHandle(TimerWorkflow::set_application_interval(
interval, label, task,
))
}
#[must_use]
pub fn cancel(handle: TimerHandle) -> bool {
TimerWorkflow::cancel_application(handle.0)
}
}