jtp/
task.rs

1use std::sync::Arc;
2
3pub type TaskFn = Box<dyn FnOnce() + Send + 'static>;
4
5pub(crate) struct TaskListeners {
6    pub(crate) before_execute: Box<dyn Fn(usize) + Send + Sync>,
7    pub(crate) after_execute: Box<dyn Fn(usize) + Send + Sync>,
8}
9
10pub struct Task {
11    id: usize,
12    task_fn: TaskFn,
13    listeners: Arc<TaskListeners>,
14}
15
16impl Task {
17    pub(crate) fn create(id: usize, task_fn: TaskFn, listeners: Arc<TaskListeners>) -> Self {
18        Self {
19            id,
20            task_fn,
21            listeners,
22        }
23    }
24
25    pub(crate) fn run(self) {
26        let listeners = self.listeners;
27        (listeners.before_execute)(self.id);
28        (self.task_fn)();
29        (listeners.after_execute)(self.id);
30    }
31}