Skip to main content

pacemaker/
lib.rs

1use std::time::{Duration, Instant};
2
3/// Regulate minimum time intervals between some tasks.
4#[derive(Debug)]
5pub struct Pacemaker {
6    min_interval: Duration,
7    last_reset: Instant,
8}
9
10impl Pacemaker {
11    /// Crate Pacemaker with minimum interval between ticks.
12    pub fn new(min_interval: Duration) -> Pacemaker {
13        Pacemaker {
14            min_interval,
15            last_reset: Instant::now(),
16        }
17    }
18
19    /// Checks if minimum interval time has elapsed; returns true and resets if it did.
20    pub fn tick(&mut self) -> bool {
21        let now = Instant::now();
22        if now.duration_since(self.last_reset) > self.min_interval {
23            self.last_reset = now;
24            return true
25        }
26        false
27    }
28}