wakflo_form/formschema/
common_type.rs

1use serde::{Deserialize, Serialize};
2
3/// # FumeFieldTypes
4///
5/// Enum for current schema status. Defaults to idle
6#[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/// # FumeFieldStringFormat
67///
68/// Enum for current schema status. Defaults to idle
69#[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/// # FumeFieldNumberFormat
102///
103/// Enum for current schema status. Defaults to idle
104#[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/// # FumeFieldDateTimeFormat
141///
142/// Enum for current schema status. Defaults to idle
143#[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/// # FumeFieldDateTimeFormat
188///
189/// Enum for current schema status. Defaults to idle
190#[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/// # FumeSchemaSelectionMode
231///
232/// Enum for current schema status. Defaults to idle
233#[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    /// default input value
260    pub message: Option<String>,
261    /// type of validation
262    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    /// key to access data
290    pub id: Option<String>,
291    /// key to access data
292    pub field: String,
293    /// form field label
294    pub label: String,
295    /// form field placeholder
296    pub placeholder: Option<String>,
297    /// form field placeholder
298    pub description: String,
299    /// form field hint
300    pub hint: Option<String>,
301    /// defaultValue input value
302    pub default_value: Option<T>,
303    /// mark field as required
304    pub required: Option<bool>,
305    /// mark field as required
306    pub disabled: Option<bool>,
307    /// mark field as nullable
308    pub nullable: Option<bool>,
309    /// mark field as hidden
310    pub hidden: Option<bool>,
311    /// field validations, can control validation
312    pub validations: Option<Vec<FumeFieldValidation>>,
313    /// field condition, can control visibility and not validation
314    pub conditions: Option<serde_json::Value>,
315    /// custom component for rendering
316    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}