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
122 #[serde(skip_serializing_if = "Option::is_none")]
124 pub group: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub suffix: Option<String>,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub control: Option<String>,
130 #[serde(skip_serializing_if = "Option::is_none")]
131 pub accept: Option<Vec<String>>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub presets: Option<Vec<PresetEntry>>,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 pub inverted: Option<bool>,
137}
138
139#[allow(dead_code)]
141fn default_true() -> bool {
142 true
143}
144
145impl Default for ParameterDef {
146 fn default() -> Self {
147 Self {
148 name: String::default(),
149 label: String::default(),
150 description: String::default(),
151 param_type: ParameterType::default(),
152 default: None,
153 constraints: None,
154 placeholder: None,
155 visible_when: None,
156 required_when: None,
157 surfaceable: true,
158 group: None,
159 suffix: None,
160 control: None,
161 accept: None,
162 presets: None,
163 inverted: None,
164 }
165 }
166}