use crate::engine::context::ExecutionContext;
use crate::model::ProcessDefinition;
use std::sync::Arc;
use tokio::sync::RwLock;
#[derive(Debug, Clone)]
pub struct ProcessInstance {
pub id: String,
pub definition: Arc<ProcessDefinition>,
pub context: Arc<RwLock<ExecutionContext>>,
}
impl ProcessInstance {
pub fn new(definition: Arc<ProcessDefinition>, instance_id: String) -> Self {
let context = ExecutionContext::new((*definition).clone(), instance_id.clone());
Self {
id: instance_id,
definition,
context: Arc::new(RwLock::new(context)),
}
}
pub fn id(&self) -> &str {
&self.id
}
pub fn definition(&self) -> &Arc<ProcessDefinition> {
&self.definition
}
pub async fn context(&self) -> tokio::sync::RwLockReadGuard<'_, ExecutionContext> {
self.context.read().await
}
pub async fn context_mut(&self) -> tokio::sync::RwLockWriteGuard<'_, ExecutionContext> {
self.context.write().await
}
}