use crate::engine::events::EngineEvent;
pub trait EventHandler {
fn handle(
&self,
event: &EngineEvent,
ctx: &mut EngineContext,
) -> Vec<EngineEvent>;
}
pub struct EngineContext {
pub process_repo: Option<Box<dyn crate::persistence::ProcessInstanceRepo>>,
pub token_repo: Option<Box<dyn crate::persistence::TokenRepo>>,
pub process_def_repo: Option<Box<dyn crate::persistence::ProcessDefinitionRepo>>,
pub task_repo: Option<Box<dyn crate::persistence::UserTaskRepo>>,
pub parallel_join_repo: Option<Box<dyn crate::persistence::ParallelJoinRepo>>,
pub timer_repo: Option<Box<dyn crate::persistence::TimerRepo>>,
pub compensation_repo: Option<Box<dyn crate::persistence::CompensationRecordRepo>>,
pub run_in_tx: Option<Box<dyn FnMut(&crate::engine::events::EngineEvent, &[Box<dyn EventHandler>], &mut EngineContext, &mut std::collections::VecDeque<crate::engine::events::EngineEvent>)>>,
}
impl Default for EngineContext {
fn default() -> Self {
EngineContext {
process_repo: None,
token_repo: None,
process_def_repo: None,
task_repo: None,
parallel_join_repo: None,
timer_repo: None,
compensation_repo: None,
run_in_tx: None,
}
}
}