Skip to main content

async_repeater/
lib.rs

1//! Tokio based library for repeating tasks with user defined durations and start times.
2
3mod entry;
4mod handle;
5mod repeater;
6
7use std::time::{Duration, SystemTime, SystemTimeError};
8
9pub use entry::RepeaterEntry;
10pub use handle::RepeaterHandle;
11pub use repeater::Repeater;
12
13/// For defining a delay
14#[derive(Debug, Clone, Copy)]
15pub enum Delay {
16    Relative(Duration),
17    Absolute(SystemTime),
18    None,
19}
20
21impl TryFrom<Delay> for Duration {
22    type Error = SystemTimeError;
23
24    fn try_from(value: Delay) -> Result<Duration, SystemTimeError> {
25        match value {
26            Delay::Relative(dur) => Ok(dur),
27            Delay::Absolute(timestamp) => timestamp.duration_since(SystemTime::now()),
28            Delay::None => Ok(Duration::ZERO),
29        }
30    }
31}