Skip to main content

box_open_sdk/models/schemas/
hub_document.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
5#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
6pub struct HubCalloutBoxTextBlock {
7    pub id: String,
8    #[serde(
9        default,
10        skip_serializing_if = "Option::is_none",
11        deserialize_with = "double_option"
12    )]
13    pub parent_id: Option<Option<String>>,
14    pub r#type: HubCalloutBoxTextBlockType,
15    pub fragment: String,
16}
17
18#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
19pub struct HubDividerBlock {
20    pub id: String,
21    #[serde(
22        default,
23        skip_serializing_if = "Option::is_none",
24        deserialize_with = "double_option"
25    )]
26    pub parent_id: Option<Option<String>>,
27    pub r#type: HubDividerBlockType,
28}
29
30#[derive(Clone, Debug, PartialEq)]
31pub enum HubDocumentBlockEntry {
32    Paragraph(HubParagraphTextBlock),
33    SectionTitle(HubSectionTitleTextBlock),
34    CalloutBox(HubCalloutBoxTextBlock),
35    ItemList(HubItemListBlock),
36    Divider(HubDividerBlock),
37    /// An unrecognized discriminator, retained verbatim (open union).
38    Unknown(serde_json::Value),
39}
40
41impl Default for HubDocumentBlockEntry {
42    fn default() -> Self {
43        Self::Unknown(Default::default())
44    }
45}
46
47impl serde::Serialize for HubDocumentBlockEntry {
48    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
49        match self {
50            Self::Paragraph(inner) => inner.serialize(serializer),
51            Self::SectionTitle(inner) => inner.serialize(serializer),
52            Self::CalloutBox(inner) => inner.serialize(serializer),
53            Self::ItemList(inner) => inner.serialize(serializer),
54            Self::Divider(inner) => inner.serialize(serializer),
55            Self::Unknown(inner) => inner.serialize(serializer),
56        }
57    }
58}
59
60impl<'de> serde::Deserialize<'de> for HubDocumentBlockEntry {
61    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
62        let value = serde_json::Value::deserialize(deserializer)?;
63        let tag = value
64            .get("type")
65            .and_then(serde_json::Value::as_str)
66            .map(str::to_owned);
67        match tag.as_deref() {
68            Some("paragraph") => Ok(Self::Paragraph(
69                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
70            )),
71            Some("section_title") => Ok(Self::SectionTitle(
72                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
73            )),
74            Some("callout_box") => Ok(Self::CalloutBox(
75                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
76            )),
77            Some("item_list") => Ok(Self::ItemList(
78                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
79            )),
80            Some("divider") => Ok(Self::Divider(
81                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
82            )),
83            _ => Ok(Self::Unknown(value)),
84        }
85    }
86}
87
88#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
89pub struct HubDocumentBlocks {
90    pub entries: Vec<HubDocumentBlockEntry>,
91    pub r#type: HubDocumentBlocksType,
92    #[serde(default, skip_serializing_if = "Option::is_none")]
93    pub limit: Option<i64>,
94    #[serde(
95        default,
96        skip_serializing_if = "Option::is_none",
97        deserialize_with = "double_option"
98    )]
99    pub next_marker: Option<Option<String>>,
100}
101
102#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
103pub struct HubDocumentPage {
104    pub id: String,
105    pub r#type: String,
106    #[serde(
107        default,
108        skip_serializing_if = "Option::is_none",
109        deserialize_with = "double_option"
110    )]
111    pub parent_id: Option<Option<String>>,
112    pub title_fragment: String,
113}
114
115#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
116pub struct HubDocumentPages {
117    pub entries: Vec<HubDocumentPage>,
118    pub r#type: HubDocumentPagesType,
119    #[serde(default, skip_serializing_if = "Option::is_none")]
120    pub limit: Option<i64>,
121    #[serde(
122        default,
123        skip_serializing_if = "Option::is_none",
124        deserialize_with = "double_option"
125    )]
126    pub next_marker: Option<Option<String>>,
127}
128
129#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
130pub struct HubItemListBlock {
131    pub id: String,
132    #[serde(
133        default,
134        skip_serializing_if = "Option::is_none",
135        deserialize_with = "double_option"
136    )]
137    pub parent_id: Option<Option<String>>,
138    pub r#type: HubItemListBlockType,
139}
140
141#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
142pub struct HubParagraphTextBlock {
143    pub id: String,
144    #[serde(
145        default,
146        skip_serializing_if = "Option::is_none",
147        deserialize_with = "double_option"
148    )]
149    pub parent_id: Option<Option<String>>,
150    pub r#type: HubParagraphTextBlockType,
151    pub fragment: String,
152}
153
154#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
155pub struct HubSectionTitleTextBlock {
156    pub id: String,
157    #[serde(
158        default,
159        skip_serializing_if = "Option::is_none",
160        deserialize_with = "double_option"
161    )]
162    pub parent_id: Option<Option<String>>,
163    pub r#type: HubSectionTitleTextBlockType,
164    pub fragment: String,
165}
166
167#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
168#[serde(transparent)]
169pub struct HubCalloutBoxTextBlockType(pub String);
170
171impl HubCalloutBoxTextBlockType {
172    pub const CALLOUT_BOX: &'static str = "callout_box";
173}
174
175#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
176#[serde(transparent)]
177pub struct HubDividerBlockType(pub String);
178
179impl HubDividerBlockType {
180    pub const DIVIDER: &'static str = "divider";
181}
182
183#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
184#[serde(transparent)]
185pub struct HubDocumentBlocksType(pub String);
186
187impl HubDocumentBlocksType {
188    pub const DOCUMENT_BLOCKS: &'static str = "document_blocks";
189}
190
191#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
192#[serde(transparent)]
193pub struct HubDocumentPagesType(pub String);
194
195impl HubDocumentPagesType {
196    pub const DOCUMENT_PAGES: &'static str = "document_pages";
197}
198
199#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
200#[serde(transparent)]
201pub struct HubItemListBlockType(pub String);
202
203impl HubItemListBlockType {
204    pub const ITEM_LIST: &'static str = "item_list";
205}
206
207#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
208#[serde(transparent)]
209pub struct HubParagraphTextBlockType(pub String);
210
211impl HubParagraphTextBlockType {
212    pub const PARAGRAPH: &'static str = "paragraph";
213}
214
215#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
216#[serde(transparent)]
217pub struct HubSectionTitleTextBlockType(pub String);
218
219impl HubSectionTitleTextBlockType {
220    pub const SECTION_TITLE: &'static str = "section_title";
221}