1use crate::serde_helpers::double_option;
4
5use super::*;
6
7#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
8pub struct MetadataTemplate {
9 pub id: String,
10 pub r#type: MetadataTemplateType,
11 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub scope: Option<String>,
13 #[serde(
14 rename = "templateKey",
15 default,
16 skip_serializing_if = "Option::is_none"
17 )]
18 pub template_key: Option<String>,
19 #[serde(
20 rename = "displayName",
21 default,
22 skip_serializing_if = "Option::is_none"
23 )]
24 pub display_name: Option<String>,
25 #[serde(default, skip_serializing_if = "Option::is_none")]
26 pub hidden: Option<bool>,
27 #[serde(default, skip_serializing_if = "Option::is_none")]
28 pub fields: Option<Vec<MetadataTemplateFields>>,
29 #[serde(
30 rename = "copyInstanceOnItemCopy",
31 default,
32 skip_serializing_if = "Option::is_none"
33 )]
34 pub copy_instance_on_item_copy: Option<bool>,
35}
36
37#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
38pub struct MetadataTemplates {
39 #[serde(default, skip_serializing_if = "Option::is_none")]
40 pub limit: Option<i64>,
41 #[serde(
42 default,
43 skip_serializing_if = "Option::is_none",
44 deserialize_with = "double_option"
45 )]
46 pub next_marker: Option<Option<String>>,
47 #[serde(
48 default,
49 skip_serializing_if = "Option::is_none",
50 deserialize_with = "double_option"
51 )]
52 pub prev_marker: Option<Option<String>>,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub entries: Option<Vec<MetadataTemplate>>,
55}
56
57#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
58#[serde(transparent)]
59pub struct MetadataTemplateFieldsType(pub String);
60
61impl MetadataTemplateFieldsType {
62 pub const STRING: &'static str = "string";
63 pub const FLOAT: &'static str = "float";
64 pub const DATE: &'static str = "date";
65 pub const ENUM: &'static str = "enum";
66 pub const MULTISELECT: &'static str = "multiSelect";
67 pub const TAXONOMY: &'static str = "taxonomy";
68 pub const INTEGER: &'static str = "integer";
69}
70
71#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
72pub struct MetadataTemplateFieldsOptions {
73 pub key: String,
74 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub id: Option<String>,
76}
77
78#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
79pub struct FieldsOptionsRules {
80 #[serde(
81 rename = "multiSelect",
82 default,
83 skip_serializing_if = "Option::is_none"
84 )]
85 pub multi_select: Option<bool>,
86 #[serde(
87 rename = "selectableLevels",
88 default,
89 skip_serializing_if = "Option::is_none"
90 )]
91 pub selectable_levels: Option<Vec<i64>>,
92}
93
94#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
95pub struct MetadataTemplateFields {
96 pub r#type: MetadataTemplateFieldsType,
97 pub key: String,
98 #[serde(rename = "displayName")]
99 pub display_name: String,
100 #[serde(default, skip_serializing_if = "Option::is_none")]
101 pub description: Option<String>,
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub hidden: Option<bool>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub options: Option<Vec<MetadataTemplateFieldsOptions>>,
106 #[serde(
107 rename = "taxonomyKey",
108 default,
109 skip_serializing_if = "Option::is_none"
110 )]
111 pub taxonomy_key: Option<String>,
112 #[serde(
113 rename = "taxonomyId",
114 default,
115 skip_serializing_if = "Option::is_none"
116 )]
117 pub taxonomy_id: Option<String>,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
119 pub namespace: Option<String>,
120 #[serde(
121 rename = "optionsRules",
122 default,
123 skip_serializing_if = "Option::is_none"
124 )]
125 pub options_rules: Option<FieldsOptionsRules>,
126 #[serde(default, skip_serializing_if = "Option::is_none")]
127 pub id: Option<String>,
128}
129
130#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
131#[serde(transparent)]
132pub struct PutIdSchemaOp(pub String);
133
134impl PutIdSchemaOp {
135 pub const EDITTEMPLATE: &'static str = "editTemplate";
136 pub const ADDFIELD: &'static str = "addField";
137 pub const REORDERFIELDS: &'static str = "reorderFields";
138 pub const ADDENUMOPTION: &'static str = "addEnumOption";
139 pub const REORDERENUMOPTIONS: &'static str = "reorderEnumOptions";
140 pub const REORDERMULTISELECTOPTIONS: &'static str = "reorderMultiSelectOptions";
141 pub const ADDMULTISELECTOPTION: &'static str = "addMultiSelectOption";
142 pub const EDITFIELD: &'static str = "editField";
143 pub const REMOVEFIELD: &'static str = "removeField";
144 pub const EDITENUMOPTION: &'static str = "editEnumOption";
145 pub const REMOVEENUMOPTION: &'static str = "removeEnumOption";
146 pub const EDITMULTISELECTOPTION: &'static str = "editMultiSelectOption";
147 pub const REMOVEMULTISELECTOPTION: &'static str = "removeMultiSelectOption";
148}
149
150#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
151pub struct UpdateSchemaRequest {
152 pub op: PutIdSchemaOp,
153 #[serde(default, skip_serializing_if = "Option::is_none")]
154 pub data: Option<std::collections::HashMap<String, serde_json::Value>>,
155 #[serde(rename = "fieldKey", default, skip_serializing_if = "Option::is_none")]
156 pub field_key: Option<String>,
157 #[serde(rename = "fieldKeys", default, skip_serializing_if = "Option::is_none")]
158 pub field_keys: Option<Vec<String>>,
159 #[serde(
160 rename = "enumOptionKey",
161 default,
162 skip_serializing_if = "Option::is_none"
163 )]
164 pub enum_option_key: Option<String>,
165 #[serde(
166 rename = "enumOptionKeys",
167 default,
168 skip_serializing_if = "Option::is_none"
169 )]
170 pub enum_option_keys: Option<Vec<String>>,
171 #[serde(
172 rename = "multiSelectOptionKey",
173 default,
174 skip_serializing_if = "Option::is_none"
175 )]
176 pub multi_select_option_key: Option<String>,
177 #[serde(
178 rename = "multiSelectOptionKeys",
179 default,
180 skip_serializing_if = "Option::is_none"
181 )]
182 pub multi_select_option_keys: Option<Vec<String>>,
183}
184
185#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
186#[serde(transparent)]
187pub struct CreateSchemaRequestFieldsType(pub String);
188
189impl CreateSchemaRequestFieldsType {
190 pub const STRING: &'static str = "string";
191 pub const FLOAT: &'static str = "float";
192 pub const DATE: &'static str = "date";
193 pub const ENUM: &'static str = "enum";
194 pub const MULTISELECT: &'static str = "multiSelect";
195 pub const TAXONOMY: &'static str = "taxonomy";
196}
197
198#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
199pub struct PostSchemaFields {
200 pub r#type: CreateSchemaRequestFieldsType,
201 pub key: String,
202 #[serde(rename = "displayName")]
203 pub display_name: String,
204 #[serde(default, skip_serializing_if = "Option::is_none")]
205 pub description: Option<String>,
206 #[serde(default, skip_serializing_if = "Option::is_none")]
207 pub hidden: Option<bool>,
208 #[serde(default, skip_serializing_if = "Option::is_none")]
209 pub options: Option<Vec<FieldsOptions>>,
210 #[serde(
211 rename = "taxonomyKey",
212 default,
213 skip_serializing_if = "Option::is_none"
214 )]
215 pub taxonomy_key: Option<String>,
216 #[serde(
217 rename = "taxonomyId",
218 default,
219 skip_serializing_if = "Option::is_none"
220 )]
221 pub taxonomy_id: Option<String>,
222 #[serde(default, skip_serializing_if = "Option::is_none")]
223 pub namespace: Option<String>,
224 #[serde(
225 rename = "optionsRules",
226 default,
227 skip_serializing_if = "Option::is_none"
228 )]
229 pub options_rules: Option<FieldsOptionsRules>,
230}
231
232#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
233pub struct CreateSchemaRequest {
234 pub scope: String,
235 #[serde(
236 rename = "templateKey",
237 default,
238 skip_serializing_if = "Option::is_none"
239 )]
240 pub template_key: Option<String>,
241 #[serde(rename = "displayName")]
242 pub display_name: String,
243 #[serde(default, skip_serializing_if = "Option::is_none")]
244 pub hidden: Option<bool>,
245 #[serde(default, skip_serializing_if = "Option::is_none")]
246 pub fields: Option<Vec<PostSchemaFields>>,
247 #[serde(
248 rename = "copyInstanceOnItemCopy",
249 default,
250 skip_serializing_if = "Option::is_none"
251 )]
252 pub copy_instance_on_item_copy: Option<bool>,
253}