Skip to main content

box_open_sdk/models/schemas/
app_item_associations.rs

1// Code generated by box-gantry 0.1.0 (spec 3fb3510fe12f2f80) for Box API 2024.0. DO NOT EDIT.
2
3use crate::serde_helpers::double_option;
4
5use super::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum AppItemAssociatedItem {
9    File(FileBase),
10    Folder(FolderBase),
11    WebLink(WebLinkBase),
12    /// An unrecognized discriminator, retained verbatim (open union).
13    Unknown(serde_json::Value),
14}
15
16impl Default for AppItemAssociatedItem {
17    fn default() -> Self {
18        Self::Unknown(Default::default())
19    }
20}
21
22impl serde::Serialize for AppItemAssociatedItem {
23    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
24        match self {
25            Self::File(inner) => inner.serialize(serializer),
26            Self::Folder(inner) => inner.serialize(serializer),
27            Self::WebLink(inner) => inner.serialize(serializer),
28            Self::Unknown(inner) => inner.serialize(serializer),
29        }
30    }
31}
32
33impl<'de> serde::Deserialize<'de> for AppItemAssociatedItem {
34    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
35        let value = serde_json::Value::deserialize(deserializer)?;
36        let tag = value
37            .get("type")
38            .and_then(serde_json::Value::as_str)
39            .map(str::to_owned);
40        match tag.as_deref() {
41            Some("file") => Ok(Self::File(
42                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
43            )),
44            Some("folder") => Ok(Self::Folder(
45                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
46            )),
47            Some("web_link") => Ok(Self::WebLink(
48                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
49            )),
50            _ => Ok(Self::Unknown(value)),
51        }
52    }
53}
54
55#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
56pub struct AppItemAssociation {
57    pub id: String,
58    pub r#type: AppItemAssociationType,
59    pub app_item: AppItem,
60    pub item: AppItemAssociatedItem,
61}
62
63#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
64pub struct AppItemAssociations {
65    #[serde(default, skip_serializing_if = "Option::is_none")]
66    pub limit: Option<i64>,
67    #[serde(
68        default,
69        skip_serializing_if = "Option::is_none",
70        deserialize_with = "double_option"
71    )]
72    pub next_marker: Option<Option<String>>,
73    #[serde(
74        default,
75        skip_serializing_if = "Option::is_none",
76        deserialize_with = "double_option"
77    )]
78    pub prev_marker: Option<Option<String>>,
79    #[serde(default, skip_serializing_if = "Option::is_none")]
80    pub entries: Option<Vec<AppItemAssociation>>,
81}
82
83#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
84pub struct FolderBase {
85    pub id: String,
86    #[serde(
87        default,
88        skip_serializing_if = "Option::is_none",
89        deserialize_with = "double_option"
90    )]
91    pub etag: Option<Option<String>>,
92    pub r#type: FolderType,
93}
94
95#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
96pub struct WebLinkBase {
97    pub id: String,
98    pub r#type: TrashWebLinkType,
99    #[serde(default, skip_serializing_if = "Option::is_none")]
100    pub etag: Option<String>,
101}
102
103#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
104#[serde(transparent)]
105pub struct AppItemAssociationType(pub String);
106
107impl AppItemAssociationType {
108    pub const APP_ITEM_ASSOCIATION: &'static str = "app_item_association";
109}