bpmn_engine/engine/
context.rs1use crate::model::ProcessDefinition;
9use std::collections::HashMap;
10
11#[derive(Debug, Clone)]
16pub struct ExecutionContext {
17 pub process_definition: ProcessDefinition,
19 pub instance_id: String,
21 pub current_elements: Vec<String>,
23 pub variables: HashMap<String, serde_json::Value>,
25 pub execution_history: Vec<ExecutionStep>,
27 pub state: ProcessInstanceState,
29}
30
31impl ExecutionContext {
32 pub fn new(process_definition: ProcessDefinition, instance_id: String) -> Self {
34 Self {
35 process_definition,
36 instance_id,
37 current_elements: Vec::new(),
38 variables: HashMap::new(),
39 execution_history: Vec::new(),
40 state: ProcessInstanceState::Active,
41 }
42 }
43
44 pub fn set_variable(&mut self, name: String, value: serde_json::Value) {
46 self.variables.insert(name, value);
47 }
48
49 pub fn get_variable(&self, name: &str) -> Option<&serde_json::Value> {
51 self.variables.get(name)
52 }
53
54 pub fn add_execution_step(&mut self, step: ExecutionStep) {
56 self.execution_history.push(step);
57 }
58
59 pub fn set_current_elements(&mut self, element_ids: Vec<String>) {
61 self.current_elements = element_ids;
62 }
63
64 pub fn clear_current_elements(&mut self) {
66 self.current_elements.clear();
67 }
68}
69
70#[derive(Debug, Clone, Copy, PartialEq, Eq)]
72pub enum ProcessInstanceState {
73 Active,
75 Completed,
77 Terminated,
79 Suspended,
81 Failed,
83}
84
85#[derive(Debug, Clone)]
89pub struct ExecutionStep {
90 pub element_id: String,
92 pub timestamp: std::time::SystemTime,
94 pub result: ExecutionStepResult,
96}
97
98#[derive(Debug, Clone)]
100pub enum ExecutionStepResult {
101 Completed,
103 Failed(String),
105 Waiting(String),
107}
108