butterflow_models/
node.rs1use crate::runtime::Runtime;
2use crate::step::Step;
3use crate::strategy::Strategy;
4use crate::trigger::Trigger;
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8use ts_rs::TS;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)]
12#[serde(rename_all = "lowercase")]
13pub enum NodeType {
14 Automatic,
16
17 Manual,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
23pub struct Node {
24 pub id: String,
26
27 pub name: String,
29
30 #[serde(default)]
32 #[ts(optional=nullable)]
33 pub description: Option<String>,
34
35 #[serde(default = "default_node_type")]
37 pub r#type: NodeType,
38
39 #[serde(default)]
41 #[ts(optional, as = "Option<Vec<String>>")]
42 pub depends_on: Vec<String>,
43
44 #[serde(default)]
46 #[ts(optional=nullable)]
47 pub trigger: Option<Trigger>,
48
49 #[serde(default)]
51 #[ts(optional=nullable)]
52 pub strategy: Option<Strategy>,
53
54 #[serde(default)]
56 #[ts(optional=nullable)]
57 pub runtime: Option<Runtime>,
58
59 pub steps: Vec<Step>,
61
62 #[serde(default)]
64 #[ts(optional, as = "Option<HashMap<String, String>>")]
65 pub env: HashMap<String, String>,
66}
67
68fn default_node_type() -> NodeType {
69 NodeType::Automatic
70}