use std::task::Context;
use std::time::Duration;
use tokio::time::{Interval, MissedTickBehavior};
use crate::handler::REQUEST_TIMEOUT;
#[derive(Debug)]
pub(crate) struct PeriodicJob {
interval: Interval,
}
impl PeriodicJob {
pub fn poll_ready(&mut self, cx: &mut Context<'_>) -> bool {
self.interval.poll_tick(cx).is_ready()
}
pub fn new(period: Duration) -> Self {
let mut interval = tokio::time::interval_at(tokio::time::Instant::now() + period, period);
interval.set_missed_tick_behavior(MissedTickBehavior::Delay);
Self { interval }
}
}
impl Default for PeriodicJob {
fn default() -> Self {
Self::new(Duration::from_millis(REQUEST_TIMEOUT))
}
}