box-open-sdk 0.1.1

Generated Box API SDK for Rust (community, unofficial).
Documentation
// Code generated by box-gantry. DO NOT EDIT.

use crate::runtime::{self, Error};

/// Optional parameters for [`SearchManager::get`].
#[derive(Clone, Debug, Default)]
pub struct SearchGetOptions {
    pub query: Option<String>,
    pub scope: Option<crate::models::schemas::GetScope>,
    pub file_extensions: Option<Vec<String>>,
    pub created_at_range: Option<Vec<String>>,
    pub updated_at_range: Option<Vec<String>>,
    pub size_range: Option<Vec<i64>>,
    pub owner_user_ids: Option<Vec<String>>,
    pub recent_updater_user_ids: Option<Vec<String>>,
    pub ancestor_folder_ids: Option<Vec<String>>,
    pub content_types: Option<Vec<crate::models::schemas::GetContentTypes>>,
    pub r#type: Option<crate::models::schemas::GetType>,
    pub trash_content: Option<crate::models::schemas::GetTrashContent>,
    pub mdfilters: Option<Vec<crate::models::schemas::MetadataFilter>>,
    pub sort: Option<crate::models::schemas::GetSort>,
    pub direction: Option<crate::models::schemas::GetDirection>,
    pub limit: Option<i64>,
    pub include_recent_shared_links: Option<bool>,
    pub fields: Option<Vec<String>>,
    pub offset: Option<i64>,
    pub deleted_user_ids: Option<Vec<String>>,
    pub deleted_at_range: Option<Vec<String>>,
}

/// Operations for the "search" API area.
pub struct SearchManager {
    session: std::sync::Arc<runtime::Client>,
}

impl SearchManager {
    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
        Self { session }
    }

    pub async fn create_metadata_query_execute_read(
        &self,
        body: crate::models::schemas::MetadataQuery,
    ) -> Result<crate::models::schemas::MetadataQueryResults, Error> {
        let mut url = self.session.base_url("api");
        url.push_str("/metadata_queries");
        url.push_str("/execute_read");
        let mut req = self.session.new_request("POST", &url);
        let payload = serde_json::to_vec(&body)?;
        req = runtime::with_json_body(req, &payload);
        let resp = self.session.fetch(req).await?;
        let data = runtime::response_bytes(&resp)?;
        Ok(serde_json::from_slice(&data)?)
    }

    pub async fn get(
        &self,
        opts: Option<SearchGetOptions>,
    ) -> Result<crate::models::schemas::SearchResultsResponse, Error> {
        let mut url = self.session.base_url("api");
        url.push_str("/search");
        let mut req = self.session.new_request("GET", &url);
        let opts = opts.unwrap_or_default();
        if let Some(value) = opts.query {
            req = runtime::with_query(req, "query", &value);
        }
        if let Some(value) = opts.scope {
            req = runtime::with_query(req, "scope", &value.0);
        }
        if let Some(value) = opts.file_extensions {
            req = runtime::with_query(req, "file_extensions", &value.join(","));
        }
        if let Some(value) = opts.created_at_range {
            req = runtime::with_query(req, "created_at_range", &value.join(","));
        }
        if let Some(value) = opts.updated_at_range {
            req = runtime::with_query(req, "updated_at_range", &value.join(","));
        }
        if let Some(value) = opts.size_range {
            let arg = crate::internal::join(&value, |v| v.to_string());
            req = runtime::with_query(req, "size_range", &arg);
        }
        if let Some(value) = opts.owner_user_ids {
            req = runtime::with_query(req, "owner_user_ids", &value.join(","));
        }
        if let Some(value) = opts.recent_updater_user_ids {
            req = runtime::with_query(req, "recent_updater_user_ids", &value.join(","));
        }
        if let Some(value) = opts.ancestor_folder_ids {
            req = runtime::with_query(req, "ancestor_folder_ids", &value.join(","));
        }
        if let Some(value) = opts.content_types {
            let arg = crate::internal::join(&value, |v| v.0.clone());
            req = runtime::with_query(req, "content_types", &arg);
        }
        if let Some(value) = opts.r#type {
            req = runtime::with_query(req, "type", &value.0);
        }
        if let Some(value) = opts.trash_content {
            req = runtime::with_query(req, "trash_content", &value.0);
        }
        if let Some(value) = opts.mdfilters {
            let arg = serde_json::to_string(&value).unwrap_or_default();
            req = runtime::with_query(req, "mdfilters", &arg);
        }
        if let Some(value) = opts.sort {
            req = runtime::with_query(req, "sort", &value.0);
        }
        if let Some(value) = opts.direction {
            req = runtime::with_query(req, "direction", &value.0);
        }
        if let Some(value) = opts.limit {
            req = runtime::with_query(req, "limit", &value.to_string());
        }
        if let Some(value) = opts.include_recent_shared_links {
            req = runtime::with_query(req, "include_recent_shared_links", &value.to_string());
        }
        if let Some(value) = opts.fields {
            req = runtime::with_query(req, "fields", &value.join(","));
        }
        if let Some(value) = opts.offset {
            req = runtime::with_query(req, "offset", &value.to_string());
        }
        if let Some(value) = opts.deleted_user_ids {
            req = runtime::with_query(req, "deleted_user_ids", &value.join(","));
        }
        if let Some(value) = opts.deleted_at_range {
            req = runtime::with_query(req, "deleted_at_range", &value.join(","));
        }
        let resp = self.session.fetch(req).await?;
        let data = runtime::response_bytes(&resp)?;
        Ok(serde_json::from_slice(&data)?)
    }
}