use crate::{Job, QueueHandle}; use actix_rt::time::{interval_at, Instant}; use log::error; use std::time::Duration; /// A type used to schedule recurring jobs. /// /// ```rust,ignore /// let server = create_server(storage); /// server.every(Duration::from_secs(60 * 30), MyJob::new()); /// ``` pub(crate) fn every(spawner: &QueueHandle, duration: Duration, job: J) where J: Job + Clone + Send, { let spawner_clone = spawner.clone(); spawner.arbiter.spawn(async move { let mut interval = interval_at(Instant::now(), duration); loop { interval.tick().await; if spawner_clone.queue(job.clone()).is_err() { error!("Failed to queue job"); } } }); }