box-open-sdk 0.4.1

Box API client for Rust (open source, community, punk rock) — typed models, async managers, and a reqwest runtime with retry, backoff, and token refresh.
Documentation
// Code generated by box-gantry 0.1.0 (spec 3fb3510fe12f2f80) for Box API 2024.0. DO NOT EDIT.

use crate::serde_helpers::double_option;

use super::*;

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubItem {
    pub id: String,
    pub r#type: HubItemType,
    pub name: String,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubItemOperation {
    pub action: HubItemOperationAction,
    pub item: HubItemReference,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub parent_id: Option<String>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubItemOperationResult {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub action: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub item: Option<HubItemReference>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub parent_id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub error: Option<String>,
}

#[derive(Clone, Debug, PartialEq)]
pub enum HubItemReference {
    File(FileReference),
    Folder(FolderReference),
    WebLink(WeblinkReference),
    /// An unrecognized discriminator, retained verbatim (open union).
    Unknown(serde_json::Value),
}

impl Default for HubItemReference {
    fn default() -> Self {
        Self::Unknown(Default::default())
    }
}

impl serde::Serialize for HubItemReference {
    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
        match self {
            Self::File(inner) => inner.serialize(serializer),
            Self::Folder(inner) => inner.serialize(serializer),
            Self::WebLink(inner) => inner.serialize(serializer),
            Self::Unknown(inner) => inner.serialize(serializer),
        }
    }
}

impl<'de> serde::Deserialize<'de> for HubItemReference {
    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
        let value = serde_json::Value::deserialize(deserializer)?;
        let tag = value
            .get("type")
            .and_then(serde_json::Value::as_str)
            .map(str::to_owned);
        match tag.as_deref() {
            Some("file") => Ok(Self::File(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("folder") => Ok(Self::Folder(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("web_link") => Ok(Self::WebLink(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            _ => Ok(Self::Unknown(value)),
        }
    }
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubItems {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub entries: Option<Vec<HubItem>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub limit: Option<i64>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub next_marker: Option<Option<String>>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubItemsManageRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub operations: Option<Vec<HubItemOperation>>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubItemsManageResponse {
    pub operations: Vec<HubItemOperationResult>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct WeblinkReference {
    pub r#type: WeblinkReferenceType,
    pub id: String,
}

#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct HubItemType(pub String);

impl HubItemType {
    pub const FILE: &'static str = "file";
    pub const FOLDER: &'static str = "folder";
    pub const WEB_LINK: &'static str = "web_link";
}

#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct HubItemOperationAction(pub String);

impl HubItemOperationAction {
    pub const ADD: &'static str = "add";
    pub const REMOVE: &'static str = "remove";
}

#[derive(Clone, Debug, Default, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
#[serde(transparent)]
pub struct WeblinkReferenceType(pub String);

impl WeblinkReferenceType {
    pub const WEB_LINK: &'static str = "web_link";
}