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}