bpm_engine_runtime/
handler.rs1use async_trait::async_trait;
5use bpm_engine_core::EngineEvent;
6use bpm_engine_storage::{
7 CompensationRecordRepo, ExternalTaskStore, HistoryRepo, OutboxRepo, ParallelJoinRepo,
8 ProcessDefinitionStore, ProcessInstanceStore, TimerStore, TokenStore,
9};
10use std::sync::Arc;
11
12#[async_trait]
14pub trait EventHandler: Send + Sync {
15 async fn handle(&self, event: &EngineEvent, ctx: &mut EngineContext) -> Vec<EngineEvent>;
16}
17
18#[derive(Default)]
20pub struct EngineContext {
21 pub process_store: Option<Arc<dyn ProcessInstanceStore>>,
22 pub token_store: Option<Arc<dyn TokenStore>>,
23 pub process_def_store: Option<Arc<dyn ProcessDefinitionStore>>,
24 pub parallel_join_repo: Option<Arc<dyn ParallelJoinRepo>>,
25 pub timer_store: Option<Arc<dyn TimerStore>>,
26 pub compensation_repo: Option<Arc<dyn CompensationRecordRepo>>,
27 pub outbox_repo: Option<Arc<dyn OutboxRepo>>,
28 pub external_task_store: Option<Arc<dyn ExternalTaskStore>>,
29 pub history_repo: Option<Arc<dyn HistoryRepo>>,
30 pub tenant_id: Option<String>,
31}