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 HubBase {
    pub id: String,
    pub r#type: HubType,
}

#[derive(Clone, Debug, PartialEq)]
pub enum HubAccessGrantee {
    User(HubCollaborationUser),
    Group(GroupMini),
    /// An unrecognized discriminator, retained verbatim (open union).
    Unknown(serde_json::Value),
}

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

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

impl<'de> serde::Deserialize<'de> for HubAccessGrantee {
    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("user") => Ok(Self::User(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("group") => Ok(Self::Group(
                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 HubCollaboration {
    pub id: String,
    pub r#type: HubCollaborationType,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hub: Option<HubBase>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub accessible_by: Option<HubAccessGrantee>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub status: Option<HubCollaborationStatus>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub acceptance_requirements_status: Option<HubCollaborationAcceptanceRequirementsStatus>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubCollaborationCreateRequest {
    pub hub: HubCollaborationCreateRequestHub,
    pub accessible_by: HubCollaborationCreateRequestAccessibleBy,
    pub role: String,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubCollaborations {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub entries: Option<Vec<HubCollaboration>>,
    #[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 HubCollaborationUpdateRequest {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub role: Option<String>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubCollaborationUser {
    pub id: String,
    pub r#type: HubCollaborationUserType,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub login: Option<String>,
}

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

impl HubCollaborationType {
    pub const HUB_COLLABORATION: &'static str = "hub_collaboration";
}

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

impl HubCollaborationStatus {
    pub const ACCEPTED: &'static str = "accepted";
    pub const PENDING: &'static str = "pending";
    pub const REJECTED: &'static str = "rejected";
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubCollaborationAcceptanceRequirementsStatus {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub terms_of_service_requirement: Option<AcceptanceRequirementsStatusTermsOfServiceRequirement>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub strong_password_requirement: Option<AcceptanceRequirementsStatusStrongPasswordRequirement>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub two_factor_authentication_requirement:
        Option<AcceptanceRequirementsStatusTwoFactorAuthenticationRequirement>,
}

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

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct HubCollaborationCreateRequestAccessibleBy {
    pub r#type: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub login: Option<String>,
}