use std::future::Future;
use std::time::Duration;
use self::runner::spawn_interval_task;
use tokio::task::JoinHandle;
mod runner;
#[cfg(test)]
mod tests;
#[derive(Debug, Default)]
pub struct CronjobManager {
jobs: Vec<JoinHandle<()>>,
}
impl CronjobManager {
pub fn new() -> Self {
Self { jobs: Vec::new() }
}
pub fn spawn_interval<F, Fut>(&mut self, interval: Duration, run_on_start: bool, task: F)
where
F: Fn() -> Fut + Send + Sync + 'static,
Fut: Future<Output = ()> + Send + 'static,
{
self.jobs
.push(spawn_interval_task(interval, run_on_start, task));
}
}
impl Drop for CronjobManager {
fn drop(&mut self) {
for job in &self.jobs {
job.abort();
}
}
}