bpmn_engine/engine/
instance.rs1use crate::engine::context::ExecutionContext;
6use crate::model::ProcessDefinition;
7use std::sync::Arc;
8use tokio::sync::RwLock;
9
10#[derive(Debug, Clone)]
14pub struct ProcessInstance {
15 pub id: String,
17 pub definition: Arc<ProcessDefinition>,
19 pub context: Arc<RwLock<ExecutionContext>>,
21}
22
23impl ProcessInstance {
24 pub fn new(definition: Arc<ProcessDefinition>, instance_id: String) -> Self {
26 let context = ExecutionContext::new((*definition).clone(), instance_id.clone());
27 Self {
28 id: instance_id,
29 definition,
30 context: Arc::new(RwLock::new(context)),
31 }
32 }
33
34 pub fn id(&self) -> &str {
36 &self.id
37 }
38
39 pub fn definition(&self) -> &Arc<ProcessDefinition> {
41 &self.definition
42 }
43
44 pub async fn context(&self) -> tokio::sync::RwLockReadGuard<'_, ExecutionContext> {
46 self.context.read().await
47 }
48
49 pub async fn context_mut(&self) -> tokio::sync::RwLockWriteGuard<'_, ExecutionContext> {
51 self.context.write().await
52 }
53}
54