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}