Skip to main content

fiberplane_models/providers/schema/
query_schema.rs

1use super::fields::*;
2#[cfg(feature = "fp-bindgen")]
3use fp_bindgen::prelude::Serializable;
4use serde::{Deserialize, Serialize};
5
6/// Defines the fields that should be included in the query data.
7///
8/// Query data is encoded as "application/x-www-form-urlencoded", unless a
9/// `File` field is present in the schema, in which case "multipart/form-data"
10/// may be used.
11pub type QuerySchema = Vec<QueryField>;
12
13#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
14#[cfg_attr(
15    feature = "fp-bindgen",
16    derive(Serializable),
17    fp(rust_module = "fiberplane_models::providers")
18)]
19#[non_exhaustive]
20#[serde(tag = "type", rename_all = "snake_case")]
21pub enum QueryField {
22    Array(ArrayField),
23    Checkbox(CheckboxField),
24    DateTimeRange(DateTimeRangeField),
25    File(FileField),
26    Label(LabelField),
27    Integer(IntegerField),
28    Select(SelectField),
29    Text(TextField),
30}
31
32impl From<CheckboxField> for QueryField {
33    fn from(field: CheckboxField) -> Self {
34        Self::Checkbox(field)
35    }
36}
37
38impl From<DateTimeRangeField> for QueryField {
39    fn from(field: DateTimeRangeField) -> Self {
40        Self::DateTimeRange(field)
41    }
42}
43
44impl From<FileField> for QueryField {
45    fn from(field: FileField) -> Self {
46        Self::File(field)
47    }
48}
49
50impl From<LabelField> for QueryField {
51    fn from(field: LabelField) -> Self {
52        Self::Label(field)
53    }
54}
55
56impl From<IntegerField> for QueryField {
57    fn from(field: IntegerField) -> Self {
58        Self::Integer(field)
59    }
60}
61
62impl From<SelectField> for QueryField {
63    fn from(field: SelectField) -> Self {
64        Self::Select(field)
65    }
66}
67
68impl From<TextField> for QueryField {
69    fn from(field: TextField) -> Self {
70        Self::Text(field)
71    }
72}
73
74impl From<ArrayField> for QueryField {
75    fn from(field: ArrayField) -> Self {
76        Self::Array(field)
77    }
78}