use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)] pub struct NodeId(pub String); #[derive(Debug, Clone, Serialize, Deserialize)] pub enum NodeKind { Start, End, Task, Decision, } impl Default for NodeKind { fn default() -> Self { Self::Task } } #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct NodeDef { pub id: NodeId, #[serde(default)] pub kind: NodeKind, #[serde(default)] pub name: String, #[serde(default)] pub task: Option, // 绑定的任务组件标识 } #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct LinkDef { pub from: NodeId, pub to: NodeId, #[serde(default)] pub condition: Option, // 条件脚本,返回 bool } #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct ChainDef { #[serde(default)] pub name: String, pub nodes: Vec, #[serde(default)] pub links: Vec, }