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, PartialEq)]
pub enum AiAgentAllowedEntity {
    User(UserBase),
    Group(GroupBase),
    /// An unrecognized discriminator, retained verbatim (open union).
    Unknown(serde_json::Value),
}

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

impl serde::Serialize for AiAgentAllowedEntity {
    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 AiAgentAllowedEntity {
    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 AiMultipleAgentResponse {
    #[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>>,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub prev_marker: Option<Option<String>>,
    pub entries: Vec<AiSingleAgentResponseFull>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiSingleAgentResponseFull {
    pub id: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub r#type: Option<AiSingleAgentResponseType>,
    pub origin: String,
    pub name: String,
    pub access_state: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_by: Option<UserBase>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub created_at: Option<chrono::DateTime<chrono::Utc>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub modified_by: Option<UserBase>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub modified_at: Option<chrono::DateTime<chrono::Utc>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub icon_reference: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allowed_entities: Option<Vec<AiAgentAllowedEntity>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ask: Option<AiStudioAgentAskResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub text_gen: Option<AiStudioAgentTextGenResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub extract: Option<AiStudioAgentExtractResponse>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentAsk {
    pub r#type: AiAgentAskType,
    pub access_state: String,
    pub description: String,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub custom_instructions: Option<Option<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub suggested_questions: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub long_text: Option<AiStudioAgentLongTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_text: Option<AiStudioAgentBasicTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_image: Option<AiStudioAgentBasicTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub spreadsheet: Option<AiStudioAgentSpreadsheetTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub long_text_multi: Option<AiStudioAgentLongTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_text_multi: Option<AiStudioAgentBasicTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_image_multi: Option<AiStudioAgentBasicTextTool>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentAskResponse {
    pub r#type: AiAgentAskType,
    pub access_state: String,
    pub description: String,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub custom_instructions: Option<Option<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub suggested_questions: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub long_text: Option<AiStudioAgentLongTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_text: Option<AiStudioAgentBasicTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_image: Option<AiStudioAgentBasicTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub spreadsheet: Option<AiStudioAgentSpreadsheetToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub long_text_multi: Option<AiStudioAgentLongTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_text_multi: Option<AiStudioAgentBasicTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_image_multi: Option<AiStudioAgentBasicTextToolResponse>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicGenTool {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_message: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prompt_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_custom_instructions_included: Option<bool>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicGenToolResponse {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_message: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prompt_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub content_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_custom_instructions_included: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub warnings: Option<Vec<String>>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicTextTool {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_message: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prompt_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_custom_instructions_included: Option<bool>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentBasicTextToolResponse {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_message: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prompt_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_custom_instructions_included: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub warnings: Option<Vec<String>>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentExtract {
    pub r#type: AiAgentExtractType,
    pub access_state: String,
    pub description: String,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub custom_instructions: Option<Option<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub long_text: Option<AiStudioAgentLongTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_text: Option<AiStudioAgentBasicTextTool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_image: Option<AiStudioAgentBasicTextTool>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentExtractResponse {
    pub r#type: AiAgentExtractType,
    pub access_state: String,
    pub description: String,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub custom_instructions: Option<Option<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub long_text: Option<AiStudioAgentLongTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_text: Option<AiStudioAgentBasicTextToolResponse>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_image: Option<AiStudioAgentBasicTextToolResponse>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentLongTextTool {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_message: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prompt_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_custom_instructions_included: Option<bool>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentLongTextToolResponse {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub system_message: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prompt_template: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub embeddings: Option<AiAgentBasicGenToolEmbeddings>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub is_custom_instructions_included: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub warnings: Option<Vec<String>>,
}

pub type AiStudioAgentSpreadsheetTool = AiAgentSpreadsheetTool;

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentSpreadsheetToolResponse {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub model: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub num_tokens_for_completion: Option<i64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub llm_endpoint_params: Option<AiLlmEndpointParams>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub warnings: Option<Vec<String>>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentTextGen {
    pub r#type: AiAgentTextGenType,
    pub access_state: String,
    pub description: String,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub custom_instructions: Option<Option<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub suggested_questions: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_gen: Option<AiStudioAgentBasicGenTool>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct AiStudioAgentTextGenResponse {
    pub r#type: AiAgentTextGenType,
    pub access_state: String,
    pub description: String,
    #[serde(
        default,
        skip_serializing_if = "Option::is_none",
        deserialize_with = "double_option"
    )]
    pub custom_instructions: Option<Option<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub suggested_questions: Option<Vec<String>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub basic_gen: Option<AiStudioAgentBasicGenToolResponse>,
}

#[derive(Clone, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct CreateAiAgent {
    pub r#type: AiSingleAgentResponseType,
    pub name: String,
    pub access_state: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub icon_reference: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub allowed_entities: Option<Vec<AiAgentAllowedEntity>>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ask: Option<AiStudioAgentAsk>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub text_gen: Option<AiStudioAgentTextGen>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub extract: Option<AiStudioAgentExtract>,
}

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

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

impl AiSingleAgentResponseType {
    pub const AI_AGENT: &'static str = "ai_agent";
}