1use serde::{Deserialize, Serialize};
10use std::collections::HashMap;
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
16#[serde(rename_all = "camelCase")]
17pub struct BpmnJsonProcess {
18 pub id: String,
20 pub name: Option<String>,
22 #[serde(default = "default_process_type")]
24 pub process_type: String,
25 #[serde(default = "default_true")]
27 pub is_executable: bool,
28 pub elements: Vec<BpmnJsonElement>,
30 #[serde(default)]
32 pub variables: HashMap<String, BpmnJsonVariable>,
33}
34
35fn default_process_type() -> String {
36 "process".to_string()
37}
38
39fn default_true() -> bool {
40 true
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(tag = "type", rename_all = "camelCase")]
48pub enum BpmnJsonElement {
49 StartEvent(BpmnJsonStartEvent),
51 EndEvent(BpmnJsonEndEvent),
53 IntermediateCatchEvent(BpmnJsonIntermediateCatchEvent),
55 IntermediateThrowEvent(BpmnJsonIntermediateThrowEvent),
57 ServiceTask(BpmnJsonServiceTask),
59 UserTask(BpmnJsonUserTask),
61 ScriptTask(BpmnJsonScriptTask),
63 ManualTask(BpmnJsonManualTask),
65 ExclusiveGateway(BpmnJsonExclusiveGateway),
67 ParallelGateway(BpmnJsonParallelGateway),
69 InclusiveGateway(BpmnJsonInclusiveGateway),
71 SequenceFlow(BpmnJsonSequenceFlow),
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct BpmnJsonElementBase {
79 pub id: String,
81 pub name: Option<String>,
83 pub documentation: Option<String>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct BpmnJsonStartEvent {
91 #[serde(flatten)]
92 pub base: BpmnJsonElementBase,
93 pub event_definition: Option<BpmnJsonEventDefinition>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize)]
99#[serde(rename_all = "camelCase")]
100pub struct BpmnJsonEndEvent {
101 #[serde(flatten)]
102 pub base: BpmnJsonElementBase,
103 pub event_definition: Option<BpmnJsonEventDefinition>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109#[serde(rename_all = "camelCase")]
110pub struct BpmnJsonIntermediateCatchEvent {
111 #[serde(flatten)]
112 pub base: BpmnJsonElementBase,
113 pub event_definition: Option<BpmnJsonEventDefinition>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
119#[serde(rename_all = "camelCase")]
120pub struct BpmnJsonIntermediateThrowEvent {
121 #[serde(flatten)]
122 pub base: BpmnJsonElementBase,
123 pub event_definition: Option<BpmnJsonEventDefinition>,
125}
126
127#[derive(Debug, Clone, Serialize, Deserialize)]
129#[serde(rename_all = "camelCase")]
130pub struct BpmnJsonServiceTask {
131 #[serde(flatten)]
132 pub base: BpmnJsonElementBase,
133 pub implementation: Option<String>,
135 pub operation_ref: Option<String>,
137 #[serde(default)]
139 pub io_mapping: BpmnJsonIoMapping,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144#[serde(rename_all = "camelCase")]
145pub struct BpmnJsonUserTask {
146 #[serde(flatten)]
147 pub base: BpmnJsonElementBase,
148 pub assignment: Option<BpmnJsonAssignment>,
150 pub form_key: Option<String>,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
156#[serde(rename_all = "camelCase")]
157pub struct BpmnJsonScriptTask {
158 #[serde(flatten)]
159 pub base: BpmnJsonElementBase,
160 pub script_format: Option<String>,
162 pub script: Option<String>,
164}
165
166#[derive(Debug, Clone, Serialize, Deserialize)]
168#[serde(rename_all = "camelCase")]
169pub struct BpmnJsonManualTask {
170 #[serde(flatten)]
171 pub base: BpmnJsonElementBase,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
176#[serde(rename_all = "camelCase")]
177pub struct BpmnJsonExclusiveGateway {
178 #[serde(flatten)]
179 pub base: BpmnJsonElementBase,
180 pub default_flow: Option<String>,
182}
183
184#[derive(Debug, Clone, Serialize, Deserialize)]
186#[serde(rename_all = "camelCase")]
187pub struct BpmnJsonParallelGateway {
188 #[serde(flatten)]
189 pub base: BpmnJsonElementBase,
190}
191
192#[derive(Debug, Clone, Serialize, Deserialize)]
194#[serde(rename_all = "camelCase")]
195pub struct BpmnJsonInclusiveGateway {
196 #[serde(flatten)]
197 pub base: BpmnJsonElementBase,
198 pub default_flow: Option<String>,
200}
201
202#[derive(Debug, Clone, Serialize, Deserialize)]
204#[serde(rename_all = "camelCase")]
205pub struct BpmnJsonSequenceFlow {
206 #[serde(flatten)]
207 pub base: BpmnJsonElementBase,
208 pub source_ref: String,
210 pub target_ref: String,
212 pub condition_expression: Option<BpmnJsonConditionExpression>,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize)]
218#[serde(tag = "type", rename_all = "camelCase")]
219pub enum BpmnJsonEventDefinition {
220 Message {
222 message_ref: Option<String>,
224 },
225 Timer {
227 time_definition: Option<String>,
229 },
230 Signal {
232 signal_ref: Option<String>,
234 },
235 Error {
237 error_ref: Option<String>,
239 },
240 Escalation {
242 escalation_ref: Option<String>,
244 },
245 Cancel,
247 Compensation {
249 activity_ref: Option<String>,
251 },
252 Conditional {
254 condition: Option<BpmnJsonConditionExpression>,
256 },
257 Link {
259 name: Option<String>,
261 },
262 Terminate,
264 None,
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize)]
270#[serde(rename_all = "camelCase")]
271pub struct BpmnJsonConditionExpression {
272 pub language: Option<String>,
274 pub body: String,
276}
277
278#[derive(Debug, Clone, Default, Serialize, Deserialize)]
280#[serde(rename_all = "camelCase")]
281pub struct BpmnJsonIoMapping {
282 #[serde(default)]
284 pub input_parameters: Vec<BpmnJsonIoParameter>,
285 #[serde(default)]
287 pub output_parameters: Vec<BpmnJsonIoParameter>,
288}
289
290#[derive(Debug, Clone, Serialize, Deserialize)]
292#[serde(rename_all = "camelCase")]
293pub struct BpmnJsonIoParameter {
294 pub name: String,
296 pub source: Option<String>,
298 pub target: Option<String>,
299 pub value: Option<String>,
301}
302
303#[derive(Debug, Clone, Serialize, Deserialize)]
305#[serde(rename_all = "camelCase")]
306pub struct BpmnJsonAssignment {
307 pub assignment_type: String,
309 pub value: String,
311}
312
313#[derive(Debug, Clone, Serialize, Deserialize)]
315#[serde(rename_all = "camelCase")]
316pub struct BpmnJsonVariable {
317 pub name: String,
319 pub variable_type: Option<String>,
321 pub default_value: Option<serde_json::Value>,
323}
324