tulpje_framework/handler/
task_handler.rs

1use std::{future::Future, pin::Pin};
2
3use async_cron_scheduler::cron::Schedule;
4use chrono::{DateTime, Utc};
5
6use crate::context::TaskContext;
7use crate::Error;
8
9pub(crate) type TaskFunc<T> =
10    fn(TaskContext<T>) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>;
11
12#[derive(Clone)]
13pub struct TaskHandler<T: Clone + Send + Sync> {
14    pub module: String,
15    pub name: String,
16    pub cron: Schedule,
17    pub func: TaskFunc<T>,
18}
19
20impl<T: Clone + Send + Sync> TaskHandler<T> {
21    pub async fn run(&self, ctx: TaskContext<T>) -> Result<(), Error> {
22        // can add more handling/parsing/etc here in the future
23        (self.func)(ctx).await
24    }
25
26    pub fn next_run(&self) -> Option<DateTime<Utc>> {
27        self.cron.upcoming(Utc).next()
28    }
29}