tulpje_framework/handler/
task_handler.rsuse std::{future::Future, pin::Pin};
use async_cron_scheduler::cron::Schedule;
use chrono::{DateTime, Utc};
use crate::context::TaskContext;
use crate::Error;
pub(crate) type TaskFunc<T> =
fn(TaskContext<T>) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>;
#[derive(Clone)]
pub struct TaskHandler<T: Clone + Send + Sync> {
pub module: String,
pub name: String,
pub cron: Schedule,
pub func: TaskFunc<T>,
}
impl<T: Clone + Send + Sync> TaskHandler<T> {
pub async fn run(&self, ctx: TaskContext<T>) -> Result<(), Error> {
(self.func)(ctx).await
}
pub fn next_run(&self) -> Option<DateTime<Utc>> {
self.cron.upcoming(Utc).next()
}
}