bnto_core/metadata/
parameters.rs1use serde::Serialize;
8
9#[derive(Debug, Clone, Serialize, PartialEq)]
16#[serde(rename_all = "camelCase")]
17pub struct ParamConditionEntry {
18 pub param: String,
20 pub equals: String,
22}
23
24#[derive(Debug, Clone, Serialize, PartialEq)]
29#[serde(untagged)]
30pub enum ParamCondition {
31 Single(ParamConditionEntry),
33 Any(Vec<ParamConditionEntry>),
35}
36
37#[derive(Debug, Clone, Serialize, PartialEq)]
42#[serde(rename_all = "camelCase")]
43pub struct OptionEntry {
44 pub value: String,
46 pub label: String,
48}
49
50#[derive(Debug, Clone, Serialize, PartialEq, Default)]
54#[serde(tag = "type", rename_all = "camelCase")]
55pub enum ParameterType {
56 Number,
57 #[default]
58 String,
59 Boolean,
60 Enum {
62 options: Vec<OptionEntry>,
63 },
64 Object,
65 File {
67 accept: Vec<std::string::String>,
68 },
69}
70
71#[derive(Debug, Clone, Serialize, PartialEq)]
75#[serde(rename_all = "camelCase")]
76pub struct Constraints {
77 #[serde(skip_serializing_if = "Option::is_none")]
78 pub min: Option<f64>,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub max: Option<f64>,
81 pub required: bool,
82}
83
84#[derive(Debug, Clone, Serialize, PartialEq)]
88#[serde(rename_all = "camelCase")]
89pub struct PresetEntry {
90 pub value: serde_json::Value,
91 pub label: String,
92}
93
94#[derive(Debug, Clone, Serialize, PartialEq)]
99#[serde(rename_all = "camelCase")]
100pub struct ParameterDef {
101 pub name: std::string::String,
102 pub label: std::string::String,
103 pub description: std::string::String,
104 pub param_type: ParameterType,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub default: Option<serde_json::Value>,
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub constraints: Option<Constraints>,
110
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub placeholder: Option<String>,
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub visible_when: Option<ParamCondition>,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub required_when: Option<ParamCondition>,
118 #[serde(default = "default_true")]
120 pub surfaceable: bool,
121 #[serde(skip)]
127 pub run_option: bool,
128
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub group: Option<String>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub suffix: Option<String>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub control: Option<String>,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 pub accept: Option<Vec<String>>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub presets: Option<Vec<PresetEntry>>,
141 #[serde(skip_serializing_if = "Option::is_none")]
143 pub inverted: Option<bool>,
144}
145
146#[allow(dead_code)]
148fn default_true() -> bool {
149 true
150}
151
152impl Default for ParameterDef {
153 fn default() -> Self {
154 Self {
155 name: String::default(),
156 label: String::default(),
157 description: String::default(),
158 param_type: ParameterType::default(),
159 default: None,
160 constraints: None,
161 placeholder: None,
162 visible_when: None,
163 required_when: None,
164 surfaceable: true,
165 run_option: true,
166 group: None,
167 suffix: None,
168 control: None,
169 accept: None,
170 presets: None,
171 inverted: None,
172 }
173 }
174}