butterflow_models/
template.rs1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4use ts_rs::TS;
5
6use crate::runtime::Runtime;
7use crate::step::Step;
8
9#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
11pub struct TemplateInput {
12 pub name: String,
14
15 #[serde(default = "default_input_type")]
17 pub r#type: String,
18
19 #[serde(default)]
21 #[ts(optional, as = "Option<bool>")]
22 pub required: bool,
23
24 #[serde(default)]
26 pub description: Option<String>,
27
28 #[serde(default)]
30 pub default: Option<String>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
35pub struct TemplateOutput {
36 pub name: String,
38
39 pub value: String,
41
42 #[serde(default)]
44 pub description: Option<String>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, TS)]
49pub struct Template {
50 pub id: String,
52
53 pub name: String,
55
56 #[serde(default)]
58 #[ts(optional=nullable)]
59 pub description: Option<String>,
60
61 #[serde(default)]
63 #[ts(optional=nullable)]
64 pub runtime: Option<Runtime>,
65
66 #[serde(default)]
68 pub inputs: Vec<TemplateInput>,
69
70 pub steps: Vec<Step>,
72
73 #[serde(default)]
75 #[ts(optional, as = "Option<Vec<TemplateOutput>>")]
76 pub outputs: Vec<TemplateOutput>,
77
78 #[serde(default)]
80 #[ts(as = "Option<HashMap<String, String>>", optional)]
81 pub env: HashMap<String, String>,
82}
83
84fn default_input_type() -> String {
85 "string".to_string()
86}