use tokio::time::{delay_until, Duration, Instant};
#[derive(Debug)]
pub struct Timer {
due: Instant,
duration: Duration,
}
impl Timer {
pub fn new(duration_in_ms: u64) -> Timer {
let duration = Duration::from_millis(duration_in_ms);
Timer {
due: Instant::now() + duration,
duration,
}
}
pub async fn hold(&mut self) {
delay_until(self.due).await;
self.increment();
}
pub fn check(&mut self) -> bool {
if Instant::now() >= self.due {
self.increment();
true
} else {
false
}
}
fn increment(&mut self) {
self.due += self.duration
}
pub fn reset(&mut self) {
self.due = Instant::now() + self.duration;
}
}