Skip to main content

box_open_sdk/models/schemas/
recent_items.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, Default, PartialEq, serde::Deserialize, serde::Serialize)]
8pub struct RecentItem {
9    #[serde(default, skip_serializing_if = "Option::is_none")]
10    pub r#type: Option<String>,
11    #[serde(default, skip_serializing_if = "Option::is_none")]
12    pub item: Option<RecentItemResource>,
13    #[serde(default, skip_serializing_if = "Option::is_none")]
14    pub interaction_type: Option<RecentItemInteractionType>,
15    #[serde(default, skip_serializing_if = "Option::is_none")]
16    pub interacted_at: Option<chrono::DateTime<chrono::Utc>>,
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub interaction_shared_link: Option<String>,
19}
20
21#[derive(Clone, Debug, PartialEq)]
22pub enum RecentItemResource {
23    File(FileFull),
24    Folder(FolderFull),
25    WebLink(WebLink),
26    /// An unrecognized discriminator, retained verbatim (open union).
27    Unknown(serde_json::Value),
28}
29
30impl Default for RecentItemResource {
31    fn default() -> Self {
32        Self::Unknown(Default::default())
33    }
34}
35
36impl serde::Serialize for RecentItemResource {
37    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
38        match self {
39            Self::File(inner) => inner.serialize(serializer),
40            Self::Folder(inner) => inner.serialize(serializer),
41            Self::WebLink(inner) => inner.serialize(serializer),
42            Self::Unknown(inner) => inner.serialize(serializer),
43        }
44    }
45}
46
47impl<'de> serde::Deserialize<'de> for RecentItemResource {
48    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
49        let value = serde_json::Value::deserialize(deserializer)?;
50        let tag = value
51            .get("type")
52            .and_then(serde_json::Value::as_str)
53            .map(str::to_owned);
54        match tag.as_deref() {
55            Some("file") => Ok(Self::File(
56                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
57            )),
58            Some("folder") => Ok(Self::Folder(
59                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
60            )),
61            Some("web_link") => Ok(Self::WebLink(
62                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
63            )),
64            _ => Ok(Self::Unknown(value)),
65        }
66    }
67}
68
69#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
70pub struct RecentItems {
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub limit: Option<i64>,
73    #[serde(
74        default,
75        skip_serializing_if = "Option::is_none",
76        deserialize_with = "double_option"
77    )]
78    pub next_marker: Option<Option<String>>,
79    #[serde(
80        default,
81        skip_serializing_if = "Option::is_none",
82        deserialize_with = "double_option"
83    )]
84    pub prev_marker: Option<Option<String>>,
85    #[serde(default, skip_serializing_if = "Option::is_none")]
86    pub entries: Option<Vec<RecentItem>>,
87}
88
89#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
90#[serde(transparent)]
91pub struct RecentItemInteractionType(pub String);
92
93impl RecentItemInteractionType {
94    pub const ITEM_PREVIEW: &'static str = "item_preview";
95    pub const ITEM_UPLOAD: &'static str = "item_upload";
96    pub const ITEM_COMMENT: &'static str = "item_comment";
97    pub const ITEM_OPEN: &'static str = "item_open";
98    pub const ITEM_MODIFY: &'static str = "item_modify";
99}