timer-lib 0.4.0

A feature-rich Rust library for creating and managing timers.
Documentation
use std::time::Duration;

use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use timer_lib::Timer;
use tokio::runtime::Runtime;

fn bench_timer_start_and_join(c: &mut Criterion) {
    let runtime = Runtime::new().expect("runtime");
    let mut group = c.benchmark_group("timer_start_and_join");

    for delay_ms in [1_u64, 5, 10] {
        group.bench_with_input(
            BenchmarkId::from_parameter(delay_ms),
            &delay_ms,
            |b, delay_ms| {
                b.to_async(&runtime).iter(|| async move {
                    let timer = Timer::new();
                    let _ = timer
                        .start_once(Duration::from_millis(*delay_ms), || async { Ok(()) })
                        .await
                        .expect("start timer");
                    timer.join().await.expect("join timer");
                });
            },
        );
    }

    group.finish();
}

fn bench_timer_event_delivery(c: &mut Criterion) {
    let runtime = Runtime::new().expect("runtime");
    c.bench_function("timer_event_delivery", |b| {
        b.to_async(&runtime).iter(|| async {
            let timer = Timer::new();
            let mut events = timer.subscribe();
            let _ = timer
                .start_once(Duration::from_millis(1), || async { Ok(()) })
                .await
                .expect("start timer");

            let _ = events.wait_started().await.expect("started event");
            let _ = events.wait_tick().await.expect("tick event");
            let _ = events.wait_finished().await.expect("finished event");
        });
    });
}

criterion_group!(
    timer_benches,
    bench_timer_start_and_join,
    bench_timer_event_delivery
);
criterion_main!(timer_benches);