basics/
basics.rs

1use doitlater::{typetag, ExecutableExt, Queue, Worker};
2
3#[derive(serde::Serialize, serde::Deserialize)]
4pub struct HelloTask {
5    recipient: String,
6}
7
8#[typetag::serde]
9impl doitlater::Executable for HelloTask {
10    fn execute(&self) -> Result<(), Box<dyn std::error::Error>> {
11        println!("Oh, hello, {}.", self.recipient);
12        Ok(())
13    }
14}
15
16impl HelloTask {
17    pub fn new(recipient: &str) -> Self {
18        Self {
19            recipient: recipient.to_string(),
20        }
21    }
22}
23
24fn main() -> Result<(), doitlater::error::Error> {
25    let mut queue = Queue::new("tasks", "redis://localhost")?;
26    HelloTask::new("John").enqueue_into(&mut queue, "SayHimHello")?;
27    let mut worker = Worker::new("tasks", "redis://localhost")?;
28    let mut scheduler = worker.create_scheduler()?;
29    scheduler
30        .register_job("SayHelloOften", "* * * * *", || {
31            Box::new(HelloTask::new("our repeating world"))
32        })
33        .expect("Could not register task");
34    worker.use_scheduler(scheduler);
35    worker.run()?;
36    Ok(())
37}