1use super::*;
4
5#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
6pub struct MetadataFieldFilterDateRange {
7 #[serde(default, skip_serializing_if = "Option::is_none")]
8 pub lt: Option<chrono::DateTime<chrono::Utc>>,
9 #[serde(default, skip_serializing_if = "Option::is_none")]
10 pub gt: Option<chrono::DateTime<chrono::Utc>>,
11}
12
13#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
14pub struct MetadataFieldFilterFloatRange {
15 #[serde(default, skip_serializing_if = "Option::is_none")]
16 pub lt: Option<f64>,
17 #[serde(default, skip_serializing_if = "Option::is_none")]
18 pub gt: Option<f64>,
19}
20
21#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
22pub struct MetadataFilter {
23 #[serde(default, skip_serializing_if = "Option::is_none")]
24 pub scope: Option<MetadataFilterScope>,
25 #[serde(
26 rename = "templateKey",
27 default,
28 skip_serializing_if = "Option::is_none"
29 )]
30 pub template_key: Option<String>,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
32 pub filters: Option<std::collections::HashMap<String, MetadataFilterValue>>,
33}
34
35#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
36#[serde(transparent)]
37pub struct MetadataFilterValue(pub serde_json::Value);
38
39#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
40pub struct MetadataQuery {
41 pub from: String,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
43 pub query: Option<String>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub query_params: Option<std::collections::HashMap<String, serde_json::Value>>,
46 pub ancestor_folder_id: String,
47 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub order_by: Option<Vec<MetadataQueryOrderBy>>,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
50 pub limit: Option<i64>,
51 #[serde(default, skip_serializing_if = "Option::is_none")]
52 pub marker: Option<String>,
53 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub fields: Option<Vec<String>>,
55}
56
57#[derive(Clone, Debug, PartialEq)]
58pub enum MetadataQueryResultItem {
59 File(FileFull),
60 Folder(FolderFull),
61 Unknown(serde_json::Value),
63}
64
65impl Default for MetadataQueryResultItem {
66 fn default() -> Self {
67 Self::Unknown(Default::default())
68 }
69}
70
71impl serde::Serialize for MetadataQueryResultItem {
72 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
73 match self {
74 Self::File(inner) => inner.serialize(serializer),
75 Self::Folder(inner) => inner.serialize(serializer),
76 Self::Unknown(inner) => inner.serialize(serializer),
77 }
78 }
79}
80
81impl<'de> serde::Deserialize<'de> for MetadataQueryResultItem {
82 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
83 let value = serde_json::Value::deserialize(deserializer)?;
84 let tag = value
85 .get("type")
86 .and_then(serde_json::Value::as_str)
87 .map(str::to_owned);
88 match tag.as_deref() {
89 Some("file") => Ok(Self::File(
90 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
91 )),
92 Some("folder") => Ok(Self::Folder(
93 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
94 )),
95 _ => Ok(Self::Unknown(value)),
96 }
97 }
98}
99
100#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
101pub struct MetadataQueryResults {
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub entries: Option<Vec<MetadataQueryResultItem>>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub limit: Option<i64>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub next_marker: Option<String>,
108}
109
110#[derive(Clone, Debug, PartialEq)]
111pub enum SearchResultItem {
112 File(FileFull),
113 Folder(FolderFull),
114 WebLink(WebLink),
115 Unknown(serde_json::Value),
117}
118
119impl Default for SearchResultItem {
120 fn default() -> Self {
121 Self::Unknown(Default::default())
122 }
123}
124
125impl serde::Serialize for SearchResultItem {
126 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
127 match self {
128 Self::File(inner) => inner.serialize(serializer),
129 Self::Folder(inner) => inner.serialize(serializer),
130 Self::WebLink(inner) => inner.serialize(serializer),
131 Self::Unknown(inner) => inner.serialize(serializer),
132 }
133 }
134}
135
136impl<'de> serde::Deserialize<'de> for SearchResultItem {
137 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
138 let value = serde_json::Value::deserialize(deserializer)?;
139 let tag = value
140 .get("type")
141 .and_then(serde_json::Value::as_str)
142 .map(str::to_owned);
143 match tag.as_deref() {
144 Some("file") => Ok(Self::File(
145 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
146 )),
147 Some("folder") => Ok(Self::Folder(
148 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
149 )),
150 Some("web_link") => Ok(Self::WebLink(
151 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
152 )),
153 _ => Ok(Self::Unknown(value)),
154 }
155 }
156}
157
158#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
159pub struct SearchResults {
160 #[serde(default, skip_serializing_if = "Option::is_none")]
161 pub total_count: Option<i64>,
162 #[serde(default, skip_serializing_if = "Option::is_none")]
163 pub limit: Option<i64>,
164 #[serde(default, skip_serializing_if = "Option::is_none")]
165 pub offset: Option<i64>,
166 pub r#type: SearchResultsType,
167 #[serde(default, skip_serializing_if = "Option::is_none")]
168 pub entries: Option<Vec<SearchResultItem>>,
169}
170
171#[derive(Clone, Debug, PartialEq)]
172pub enum SearchResultsResponse {
173 SearchResultsItems(SearchResults),
174 SearchResultsWithSharedLinks(SearchResultsWithSharedLinks),
175 Unknown(serde_json::Value),
177}
178
179impl Default for SearchResultsResponse {
180 fn default() -> Self {
181 Self::Unknown(Default::default())
182 }
183}
184
185impl serde::Serialize for SearchResultsResponse {
186 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
187 match self {
188 Self::SearchResultsItems(inner) => inner.serialize(serializer),
189 Self::SearchResultsWithSharedLinks(inner) => inner.serialize(serializer),
190 Self::Unknown(inner) => inner.serialize(serializer),
191 }
192 }
193}
194
195impl<'de> serde::Deserialize<'de> for SearchResultsResponse {
196 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
197 let value = serde_json::Value::deserialize(deserializer)?;
198 let tag = value
199 .get("type")
200 .and_then(serde_json::Value::as_str)
201 .map(str::to_owned);
202 match tag.as_deref() {
203 Some("search_results_items") => Ok(Self::SearchResultsItems(
204 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
205 )),
206 Some("search_results_with_shared_links") => Ok(Self::SearchResultsWithSharedLinks(
207 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
208 )),
209 _ => Ok(Self::Unknown(value)),
210 }
211 }
212}
213
214#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
215pub struct SearchResultsWithSharedLinks {
216 #[serde(default, skip_serializing_if = "Option::is_none")]
217 pub total_count: Option<i64>,
218 #[serde(default, skip_serializing_if = "Option::is_none")]
219 pub limit: Option<i64>,
220 #[serde(default, skip_serializing_if = "Option::is_none")]
221 pub offset: Option<i64>,
222 pub r#type: SearchResultsWithSharedLinksType,
223 #[serde(default, skip_serializing_if = "Option::is_none")]
224 pub entries: Option<Vec<SearchResultWithSharedLink>>,
225}
226
227#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
228pub struct SearchResultWithSharedLink {
229 #[serde(default, skip_serializing_if = "Option::is_none")]
230 pub accessible_via_shared_link: Option<String>,
231 #[serde(default, skip_serializing_if = "Option::is_none")]
232 pub item: Option<SearchResultWithSharedLinkItem>,
233 #[serde(default, skip_serializing_if = "Option::is_none")]
234 pub r#type: Option<String>,
235}
236
237#[derive(Clone, Debug, PartialEq)]
238pub enum SearchResultWithSharedLinkItem {
239 File(FileFull),
240 Folder(FolderFull),
241 WebLink(WebLink),
242 Unknown(serde_json::Value),
244}
245
246impl Default for SearchResultWithSharedLinkItem {
247 fn default() -> Self {
248 Self::Unknown(Default::default())
249 }
250}
251
252impl serde::Serialize for SearchResultWithSharedLinkItem {
253 fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
254 match self {
255 Self::File(inner) => inner.serialize(serializer),
256 Self::Folder(inner) => inner.serialize(serializer),
257 Self::WebLink(inner) => inner.serialize(serializer),
258 Self::Unknown(inner) => inner.serialize(serializer),
259 }
260 }
261}
262
263impl<'de> serde::Deserialize<'de> for SearchResultWithSharedLinkItem {
264 fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
265 let value = serde_json::Value::deserialize(deserializer)?;
266 let tag = value
267 .get("type")
268 .and_then(serde_json::Value::as_str)
269 .map(str::to_owned);
270 match tag.as_deref() {
271 Some("file") => Ok(Self::File(
272 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
273 )),
274 Some("folder") => Ok(Self::Folder(
275 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
276 )),
277 Some("web_link") => Ok(Self::WebLink(
278 serde_json::from_value(value).map_err(serde::de::Error::custom)?,
279 )),
280 _ => Ok(Self::Unknown(value)),
281 }
282 }
283}
284
285#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
286#[serde(transparent)]
287pub struct MetadataFilterScope(pub String);
288
289impl MetadataFilterScope {
290 pub const GLOBAL: &'static str = "global";
291 pub const ENTERPRISE: &'static str = "enterprise";
292 pub const ENTERPRISE_ENTERPRISE_ID: &'static str = "enterprise_{enterprise_id}";
293}
294
295#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
296#[serde(transparent)]
297pub struct OrderByDirection(pub String);
298
299impl OrderByDirection {
300 pub const ASC: &'static str = "ASC";
301 pub const DESC: &'static str = "DESC";
302 pub const ASC_2: &'static str = "asc";
303 pub const DESC_2: &'static str = "desc";
304}
305
306#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
307pub struct MetadataQueryOrderBy {
308 #[serde(default, skip_serializing_if = "Option::is_none")]
309 pub field_key: Option<String>,
310 #[serde(default, skip_serializing_if = "Option::is_none")]
311 pub direction: Option<OrderByDirection>,
312}
313
314#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
315#[serde(transparent)]
316pub struct SearchResultsType(pub String);
317
318impl SearchResultsType {
319 pub const SEARCH_RESULTS_ITEMS: &'static str = "search_results_items";
320}
321
322#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
323#[serde(transparent)]
324pub struct SearchResultsWithSharedLinksType(pub String);
325
326impl SearchResultsWithSharedLinksType {
327 pub const SEARCH_RESULTS_WITH_SHARED_LINKS: &'static str = "search_results_with_shared_links";
328}
329
330#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
331#[serde(transparent)]
332pub struct GetScope(pub String);
333
334impl GetScope {
335 pub const USER_CONTENT: &'static str = "user_content";
336 pub const ENTERPRISE_CONTENT: &'static str = "enterprise_content";
337}
338
339#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
340#[serde(transparent)]
341pub struct GetContentTypes(pub String);
342
343impl GetContentTypes {
344 pub const NAME: &'static str = "name";
345 pub const DESCRIPTION: &'static str = "description";
346 pub const FILE_CONTENT: &'static str = "file_content";
347 pub const COMMENTS: &'static str = "comments";
348 pub const TAGS: &'static str = "tags";
349}
350
351#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
352#[serde(transparent)]
353pub struct GetType(pub String);
354
355impl GetType {
356 pub const FILE: &'static str = "file";
357 pub const FOLDER: &'static str = "folder";
358 pub const WEB_LINK: &'static str = "web_link";
359}
360
361#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
362#[serde(transparent)]
363pub struct GetTrashContent(pub String);
364
365impl GetTrashContent {
366 pub const NON_TRASHED_ONLY: &'static str = "non_trashed_only";
367 pub const TRASHED_ONLY: &'static str = "trashed_only";
368 pub const ALL_ITEMS: &'static str = "all_items";
369}
370
371#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
372#[serde(transparent)]
373pub struct GetSort(pub String);
374
375impl GetSort {
376 pub const MODIFIED_AT: &'static str = "modified_at";
377 pub const RELEVANCE: &'static str = "relevance";
378}