use crate::runtime::{self, Error};
#[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>>,
}
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)?)
}
}