gwyh 0.1.0

gwyh is a sweet gossip library
Documentation
use std::future::Future;
use std::time::Duration;

use tokio::task::JoinHandle;
use tokio::time::MissedTickBehavior;

pub struct Interval {
    joinhandle: JoinHandle<()>,
}

impl Drop for Interval {
    fn drop(&mut self) {
        self.joinhandle.abort();
    }
}

impl Interval {
    pub fn new<F, Fut>(duration: Duration, f: F) -> Self
    where
        F: Fn() -> Fut + Send + Sync + 'static,
        Fut: Future + Send + Sync + 'static,
    {
        let joinhandle = tokio::spawn(async move {
            let mut interval = tokio::time::interval(duration);
            interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
            loop {
                interval.tick().await;
                f().await;
            }
        });
        Self { joinhandle }
    }
}