bpmn_engine/elements/
task.rs1use crate::activity::{Activity, ActivityError, ActivityResult};
6use crate::capability::{Capability, CapabilityError, CapabilityResult, CapabilityProvider};
7use crate::engine::ExecutionContext;
8use crate::model::{ServiceTask, UserTask, ScriptTask, ManualTask};
9use async_trait::async_trait;
10use std::collections::HashMap;
11
12pub struct ServiceTaskActivity {
16 task: ServiceTask,
17}
18
19impl ServiceTaskActivity {
20 pub fn new(task: ServiceTask) -> Self {
21 Self { task }
22 }
23}
24
25#[async_trait]
26impl Activity for ServiceTaskActivity {
27 async fn execute(&self, context: &mut ExecutionContext) -> Result<ActivityResult, ActivityError> {
28 Ok(ActivityResult::Completed { output_variables: None })
31 }
32
33 fn id(&self) -> &str {
34 &self.task.base.id
35 }
36
37 fn name(&self) -> Option<&str> {
38 self.task.base.name.as_deref()
39 }
40}
41
42pub struct UserTaskActivity {
46 task: UserTask,
47}
48
49impl UserTaskActivity {
50 pub fn new(task: UserTask) -> Self {
51 Self { task }
52 }
53}
54
55#[async_trait]
56impl Activity for UserTaskActivity {
57 async fn execute(&self, context: &mut ExecutionContext) -> Result<ActivityResult, ActivityError> {
58 Ok(ActivityResult::Waiting {
60 reason: format!("User task '{}' waiting for user input", self.task.base.id),
61 })
62 }
63
64 fn id(&self) -> &str {
65 &self.task.base.id
66 }
67
68 fn name(&self) -> Option<&str> {
69 self.task.base.name.as_deref()
70 }
71}
72
73pub struct ScriptTaskActivity {
77 task: ScriptTask,
78}
79
80impl ScriptTaskActivity {
81 pub fn new(task: ScriptTask) -> Self {
82 Self { task }
83 }
84}
85
86#[async_trait]
87impl Activity for ScriptTaskActivity {
88 async fn execute(&self, context: &mut ExecutionContext) -> Result<ActivityResult, ActivityError> {
89 Ok(ActivityResult::Completed { output_variables: None })
92 }
93
94 fn id(&self) -> &str {
95 &self.task.base.id
96 }
97
98 fn name(&self) -> Option<&str> {
99 self.task.base.name.as_deref()
100 }
101}
102
103pub struct ManualTaskActivity {
107 task: ManualTask,
108}
109
110impl ManualTaskActivity {
111 pub fn new(task: ManualTask) -> Self {
112 Self { task }
113 }
114}
115
116#[async_trait]
117impl Activity for ManualTaskActivity {
118 async fn execute(&self, context: &mut ExecutionContext) -> Result<ActivityResult, ActivityError> {
119 Ok(ActivityResult::Completed { output_variables: None })
121 }
122
123 fn id(&self) -> &str {
124 &self.task.base.id
125 }
126
127 fn name(&self) -> Option<&str> {
128 self.task.base.name.as_deref()
129 }
130}