tulpje_framework/handler/
task_handler.rs1use 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 (self.func)(ctx).await
24 }
25
26 pub fn next_run(&self) -> Option<DateTime<Utc>> {
27 self.cron.upcoming(Utc).next()
28 }
29}