use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonProcess {
pub id: String,
pub name: Option<String>,
#[serde(default = "default_process_type")]
pub process_type: String,
#[serde(default = "default_true")]
pub is_executable: bool,
pub elements: Vec<BpmnJsonElement>,
#[serde(default)]
pub variables: HashMap<String, BpmnJsonVariable>,
}
fn default_process_type() -> String {
"process".to_string()
}
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum BpmnJsonElement {
StartEvent(BpmnJsonStartEvent),
EndEvent(BpmnJsonEndEvent),
IntermediateCatchEvent(BpmnJsonIntermediateCatchEvent),
IntermediateThrowEvent(BpmnJsonIntermediateThrowEvent),
ServiceTask(BpmnJsonServiceTask),
UserTask(BpmnJsonUserTask),
ScriptTask(BpmnJsonScriptTask),
ManualTask(BpmnJsonManualTask),
ExclusiveGateway(BpmnJsonExclusiveGateway),
ParallelGateway(BpmnJsonParallelGateway),
InclusiveGateway(BpmnJsonInclusiveGateway),
SequenceFlow(BpmnJsonSequenceFlow),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonElementBase {
pub id: String,
pub name: Option<String>,
pub documentation: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonStartEvent {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub event_definition: Option<BpmnJsonEventDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonEndEvent {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub event_definition: Option<BpmnJsonEventDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonIntermediateCatchEvent {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub event_definition: Option<BpmnJsonEventDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonIntermediateThrowEvent {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub event_definition: Option<BpmnJsonEventDefinition>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonServiceTask {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub implementation: Option<String>,
pub operation_ref: Option<String>,
#[serde(default)]
pub io_mapping: BpmnJsonIoMapping,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonUserTask {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub assignment: Option<BpmnJsonAssignment>,
pub form_key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonScriptTask {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub script_format: Option<String>,
pub script: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonManualTask {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonExclusiveGateway {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub default_flow: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonParallelGateway {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonInclusiveGateway {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub default_flow: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonSequenceFlow {
#[serde(flatten)]
pub base: BpmnJsonElementBase,
pub source_ref: String,
pub target_ref: String,
pub condition_expression: Option<BpmnJsonConditionExpression>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum BpmnJsonEventDefinition {
Message {
message_ref: Option<String>,
},
Timer {
time_definition: Option<String>,
},
Signal {
signal_ref: Option<String>,
},
Error {
error_ref: Option<String>,
},
Escalation {
escalation_ref: Option<String>,
},
Cancel,
Compensation {
activity_ref: Option<String>,
},
Conditional {
condition: Option<BpmnJsonConditionExpression>,
},
Link {
name: Option<String>,
},
Terminate,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonConditionExpression {
pub language: Option<String>,
pub body: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonIoMapping {
#[serde(default)]
pub input_parameters: Vec<BpmnJsonIoParameter>,
#[serde(default)]
pub output_parameters: Vec<BpmnJsonIoParameter>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonIoParameter {
pub name: String,
pub source: Option<String>,
pub target: Option<String>,
pub value: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonAssignment {
pub assignment_type: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BpmnJsonVariable {
pub name: String,
pub variable_type: Option<String>,
pub default_value: Option<serde_json::Value>,
}