1use serde::{Deserialize, Serialize};
2
3#[derive(
7 PartialEq,
8 Eq,
9 Serialize,
10 Deserialize,
11 Clone,
12 Debug,
13 Default,
14 strum_macros::AsRefStr,
15 strum_macros::IntoStaticStr,
16 strum_macros::Display,
17 strum_macros::EnumString,
18)]
19pub enum FumeFieldTypes {
20 #[default]
21 #[serde(rename = "string")]
22 #[strum(serialize = "string")]
23 String,
24
25 #[serde(rename = "number")]
26 #[strum(serialize = "number")]
27 Number,
28
29 #[serde(rename = "select")]
30 #[strum(serialize = "select")]
31 Select,
32
33 #[serde(rename = "dropdown")]
34 #[strum(serialize = "dropdown")]
35 Dropdown,
36
37 #[serde(rename = "object")]
38 #[strum(serialize = "object")]
39 Object,
40
41 #[serde(rename = "array")]
42 #[strum(serialize = "array")]
43 Array,
44
45 #[serde(rename = "checkbox")]
46 #[strum(serialize = "checkbox")]
47 Checkbox,
48
49 #[serde(rename = "radio")]
50 #[strum(serialize = "radio")]
51 Radio,
52
53 #[serde(rename = "date")]
54 #[strum(serialize = "date")]
55 Date,
56
57 #[serde(rename = "datetime")]
58 #[strum(serialize = "datetime")]
59 Datetime,
60
61 #[serde(rename = "color")]
62 #[strum(serialize = "color")]
63 Color,
64}
65
66#[derive(
70 PartialEq,
71 Eq,
72 Serialize,
73 Deserialize,
74 Clone,
75 Debug,
76 Default,
77 strum_macros::AsRefStr,
78 strum_macros::IntoStaticStr,
79 strum_macros::Display,
80 strum_macros::EnumString,
81)]
82pub enum FumeFieldStringFormat {
83 #[default]
84 #[serde(rename = "ip")]
85 #[strum(serialize = "ip")]
86 Ip,
87
88 #[serde(rename = "uuid")]
89 #[strum(serialize = "uuid")]
90 Uuid,
91
92 #[serde(rename = "guid")]
93 #[strum(serialize = "guid")]
94 Guid,
95
96 #[serde(rename = "email")]
97 #[strum(serialize = "email")]
98 Email,
99}
100
101#[derive(
105 PartialEq,
106 Eq,
107 Serialize,
108 Deserialize,
109 Clone,
110 Debug,
111 Default,
112 strum_macros::AsRefStr,
113 strum_macros::IntoStaticStr,
114 strum_macros::Display,
115 strum_macros::EnumString,
116)]
117pub enum FumeFieldNumberFormat {
118 #[default]
119 #[serde(rename = "decimal")]
120 #[strum(serialize = "decimal")]
121 Decimal,
122
123 #[serde(rename = "float")]
124 #[strum(serialize = "float")]
125 Float,
126
127 #[serde(rename = "uint")]
128 #[strum(serialize = "uint")]
129 Uint,
130
131 #[serde(rename = "int")]
132 #[strum(serialize = "int")]
133 Int,
134
135 #[serde(rename = "currency")]
136 #[strum(serialize = "currency")]
137 Currency,
138}
139
140#[derive(
144 PartialEq,
145 Eq,
146 Serialize,
147 Deserialize,
148 Clone,
149 Debug,
150 Default,
151 strum_macros::AsRefStr,
152 strum_macros::IntoStaticStr,
153 strum_macros::Display,
154 strum_macros::EnumString,
155)]
156pub enum FumeFieldDateTimeFormat {
157 #[default]
158 #[serde(rename = "short")]
159 #[strum(serialize = "short")]
160 Short,
161
162 #[serde(rename = "long")]
163 #[strum(serialize = "long")]
164 Long,
165
166 #[serde(rename = "duration")]
167 #[strum(serialize = "duration")]
168 Duration,
169
170 #[serde(rename = "month")]
171 #[strum(serialize = "month")]
172 Month,
173
174 #[serde(rename = "year")]
175 #[strum(serialize = "year")]
176 Year,
177
178 #[serde(rename = "day")]
179 #[strum(serialize = "day")]
180 Day,
181
182 #[serde(rename = "week")]
183 #[strum(serialize = "week")]
184 Week,
185}
186
187#[derive(
191 PartialEq,
192 Eq,
193 Serialize,
194 Deserialize,
195 Clone,
196 Debug,
197 Default,
198 strum_macros::AsRefStr,
199 strum_macros::IntoStaticStr,
200 strum_macros::Display,
201 strum_macros::EnumString,
202)]
203pub enum ValidationTypes {
204 #[default]
205 #[serde(rename = "required")]
206 #[strum(serialize = "required")]
207 Required,
208
209 #[serde(rename = "min")]
210 #[strum(serialize = "min")]
211 Min,
212
213 #[serde(rename = "max")]
214 #[strum(serialize = "max")]
215 Max,
216
217 #[serde(rename = "maxLength")]
218 #[strum(serialize = "maxLength")]
219 MaxLength,
220
221 #[serde(rename = "minLength")]
222 #[strum(serialize = "minLength")]
223 MinLength,
224
225 #[serde(rename = "pattern")]
226 #[strum(serialize = "pattern")]
227 Pattern,
228}
229
230#[derive(
234 PartialEq,
235 Eq,
236 Serialize,
237 Deserialize,
238 Clone,
239 Debug,
240 Default,
241 strum_macros::AsRefStr,
242 strum_macros::IntoStaticStr,
243 strum_macros::Display,
244 strum_macros::EnumString,
245)]
246pub enum FumeSchemaSelectionMode {
247 #[default]
248 #[serde(rename = "single")]
249 #[strum(serialize = "single")]
250 Single,
251
252 #[serde(rename = "multiple")]
253 #[strum(serialize = "multiple")]
254 Multiple,
255}
256
257#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug, Default)]
258pub struct FumeFieldBaseValidation<V> {
259 pub message: Option<String>,
261 pub field_type: Option<ValidationTypes>,
263 pub value: Option<V>,
264}
265
266#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug)]
267#[serde(untagged)]
268pub enum FumeFieldValidation {
269 Required(FumeFieldBaseValidation<bool>),
270 Min(FumeFieldBaseValidation<i32>),
271 Max(FumeFieldBaseValidation<i32>),
272 MaxLength(FumeFieldBaseValidation<i32>),
273 MinLength(FumeFieldBaseValidation<i32>),
274 Pattern(FumeFieldBaseValidation<String>),
275}
276
277impl Default for FumeFieldValidation {
278 fn default() -> Self {
279 Self::Pattern(FumeFieldBaseValidation {
280 message: None,
281 field_type: None,
282 value: None,
283 })
284 }
285}
286
287#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug, Default)]
288pub struct FumeBaseSchema<T> {
289 pub id: Option<String>,
291 pub field: String,
293 pub label: String,
295 pub placeholder: Option<String>,
297 pub description: String,
299 pub hint: Option<String>,
301 pub default_value: Option<T>,
303 pub required: Option<bool>,
305 pub disabled: Option<bool>,
307 pub nullable: Option<bool>,
309 pub hidden: Option<bool>,
311 pub validations: Option<Vec<FumeFieldValidation>>,
313 pub conditions: Option<serde_json::Value>,
315 pub component: Option<String>,
317 #[serde(rename = "deprecated")]
318 pub deprecated: Option<bool>,
319 #[serde(rename = "readonly")]
320 pub readonly: Option<bool>,
321}
322
323#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug, Default)]
324pub struct FumeSchemaEnum<T> {
325 pub value: T,
326 pub label: String,
327}
328
329#[derive(PartialEq, Eq, Serialize, Deserialize, Clone, Debug)]
330#[serde(untagged)]
331pub enum FumeSchemaEnumType {
332 Object(FumeSchemaEnum<String>),
333 String(String),
334}
335
336impl Default for FumeSchemaEnumType {
337 fn default() -> Self {
338 FumeSchemaEnumType::String("".to_string())
339 }
340}