1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use std::collections::BTreeMap;
4
5fn default_parameters() -> Value {
6 Value::Object(Default::default())
7}
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct FlowDoc {
11 pub id: String,
12 #[serde(default)]
13 pub title: Option<String>,
14 #[serde(default)]
15 pub description: Option<String>,
16 #[serde(rename = "type")]
17 pub flow_type: String,
18 #[serde(default)]
19 pub start: Option<String>,
20 #[serde(default = "default_parameters")]
21 pub parameters: Value,
22 pub nodes: BTreeMap<String, Node>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, Default)]
26pub struct Node {
27 #[serde(skip_serializing, skip_deserializing, default)]
28 pub component: String,
29 #[serde(skip_serializing, skip_deserializing, default)]
30 pub payload: Value,
31 #[serde(default)]
32 pub routing: Vec<Route>,
33 #[serde(flatten, default)]
34 pub raw: BTreeMap<String, Value>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, Default)]
38pub struct Route {
39 #[serde(default)]
40 pub to: Option<String>,
41 #[serde(default)]
42 pub out: Option<bool>,
43}