butterflow_models/
workflow.rs1use chrono::{DateTime, Utc};
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::path::PathBuf;
6use uuid::Uuid;
7
8use crate::node::Node;
9use crate::state::StateSchema;
10use crate::template::Template;
11use ts_rs::TS;
12
13#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
15pub struct Workflow {
16 pub version: String,
18
19 #[serde(default)]
21 #[ts(optional=nullable)]
22 pub state: Option<WorkflowState>,
23
24 #[serde(default)]
27 #[ts(optional, as = "Option<Vec<Template>>")]
28 pub templates: Vec<Template>,
29
30 pub nodes: Vec<Node>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema, TS)]
36pub struct WorkflowState {
37 #[serde(default)]
39 pub schema: Vec<StateSchema>,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize, TS)]
44pub struct WorkflowRun {
45 pub id: Uuid,
47
48 pub workflow: Workflow,
50
51 pub status: WorkflowStatus,
53
54 pub params: HashMap<String, String>,
56
57 pub tasks: Vec<Uuid>,
59
60 pub started_at: DateTime<Utc>,
62
63 #[serde(default)]
65 #[ts(optional=nullable)]
66 pub ended_at: Option<DateTime<Utc>>,
67
68 #[ts(skip)]
71 #[serde(skip)]
72 pub bundle_path: Option<PathBuf>,
73}
74
75#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TS)]
77pub enum WorkflowStatus {
78 Pending,
80
81 Running,
83
84 Completed,
86
87 Failed,
89
90 AwaitingTrigger,
92
93 Canceled,
95}