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 super::*;

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldList {
    pub id: String,
    pub r#type: String,
    pub name: String,
    pub enterprise: EnterpriseReference,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub created_at: chrono::DateTime<chrono::Utc>,
    pub updated_at: chrono::DateTime<chrono::Utc>,
    pub content: ShieldListContent,
}

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

#[derive(Clone, Debug, PartialEq)]
pub enum ShieldListContent {
    Country(ShieldListContentCountry),
    Domain(ShieldListContentDomain),
    Email(ShieldListContentEmail),
    Ip(ShieldListContentIp),
    Integration(ShieldListContentIntegration),
    /// An unrecognized discriminator, retained verbatim (open union).
    Unknown(serde_json::Value),
}

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

impl serde::Serialize for ShieldListContent {
    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
        match self {
            Self::Country(inner) => inner.serialize(serializer),
            Self::Domain(inner) => inner.serialize(serializer),
            Self::Email(inner) => inner.serialize(serializer),
            Self::Ip(inner) => inner.serialize(serializer),
            Self::Integration(inner) => inner.serialize(serializer),
            Self::Unknown(inner) => inner.serialize(serializer),
        }
    }
}

impl<'de> serde::Deserialize<'de> for ShieldListContent {
    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("country") => Ok(Self::Country(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("domain") => Ok(Self::Domain(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("email") => Ok(Self::Email(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("ip") => Ok(Self::Ip(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("integration") => Ok(Self::Integration(
                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 ShieldListContentCountry {
    pub r#type: ShieldListContentCountryType,
    pub country_codes: Vec<String>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldListContentDomain {
    pub r#type: ShieldListContentDomainType,
    pub domains: Vec<String>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldListContentEmail {
    pub r#type: ShieldListContentEmailType,
    pub email_addresses: Vec<String>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldListContentIntegration {
    pub r#type: ShieldListContentIntegrationType,
    pub integrations: Vec<ShieldListContentIntegrationIntegrations>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldListContentIp {
    pub r#type: ShieldListContentIpType,
    pub ip_addresses: Vec<String>,
}

#[derive(Clone, Debug, PartialEq)]
pub enum ShieldListContentRequest {
    Country(ShieldListContentCountry),
    Domain(ShieldListContentDomain),
    Email(ShieldListContentEmail),
    Ip(ShieldListContentIp),
    /// An unrecognized discriminator, retained verbatim (open union).
    Unknown(serde_json::Value),
}

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

impl serde::Serialize for ShieldListContentRequest {
    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
        match self {
            Self::Country(inner) => inner.serialize(serializer),
            Self::Domain(inner) => inner.serialize(serializer),
            Self::Email(inner) => inner.serialize(serializer),
            Self::Ip(inner) => inner.serialize(serializer),
            Self::Unknown(inner) => inner.serialize(serializer),
        }
    }
}

impl<'de> serde::Deserialize<'de> for ShieldListContentRequest {
    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("country") => Ok(Self::Country(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("domain") => Ok(Self::Domain(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("email") => Ok(Self::Email(
                serde_json::from_value(value).map_err(serde::de::Error::custom)?,
            )),
            Some("ip") => Ok(Self::Ip(
                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 ShieldLists {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub entries: Option<Vec<ShieldListMini>>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldListsCreate {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub content: ShieldListContentRequest,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct ShieldListsUpdate {
    pub name: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    pub content: ShieldListContentRequest,
}

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

impl ShieldListMiniType {
    pub const SHIELD_LIST: &'static str = "shield_list";
}

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

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

impl ShieldListContentCountryType {
    pub const COUNTRY: &'static str = "country";
}

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

impl ShieldListContentDomainType {
    pub const DOMAIN: &'static str = "domain";
}

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

impl ShieldListContentEmailType {
    pub const EMAIL: &'static str = "email";
}

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

impl ShieldListContentIntegrationType {
    pub const INTEGRATION: &'static str = "integration";
}

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

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

impl ShieldListContentIpType {
    pub const IP: &'static str = "ip";
}