#![allow(missing_docs, unreachable_pub, clippy::all, clippy::pedantic)]
use crate::client::Client;
use crate::error::Error;
use crate::generated::routes;
use crate::generated::types::*;
use crate::pagination::Page;
#[derive(Debug, Clone, Default, PartialEq)]
pub struct AdvancedSearchParams {
pub q: Option<String>,
pub page: Option<String>,
pub refine_from: Option<String>,
pub refine_to: Option<String>,
pub refine_subject: Option<String>,
pub refine_exact_phrase: Option<String>,
pub refine_required: Option<String>,
pub refine_any: Option<String>,
pub refine_none: Option<String>,
pub refine_date: Option<String>,
pub refine_in: Option<String>,
pub refine_label: Option<String>,
pub refine_attachment: Option<String>,
}
pub struct Search<'a> {
client: &'a Client,
}
impl<'a> Search<'a> {
pub(crate) fn new(client: &'a Client) -> Self {
Self { client }
}
pub fn client(&self) -> &'a Client {
self.client
}
pub async fn advanced(
&self,
params: &AdvancedSearchParams,
) -> Result<Page<AdvancedSearchResponseContent>, Error> {
let mut operation = self.client.operation(&routes::ADVANCED_SEARCH, &[]);
operation.query_optional("q", params.q.as_ref());
operation.query_optional("page", params.page.as_ref());
operation.query_optional("refine[from]", params.refine_from.as_ref());
operation.query_optional("refine[to]", params.refine_to.as_ref());
operation.query_optional("refine[subject]", params.refine_subject.as_ref());
operation.query_optional("refine[exact_phrase]", params.refine_exact_phrase.as_ref());
operation.query_optional("refine[required]", params.refine_required.as_ref());
operation.query_optional("refine[any]", params.refine_any.as_ref());
operation.query_optional("refine[none]", params.refine_none.as_ref());
operation.query_optional("refine[date]", params.refine_date.as_ref());
operation.query_optional("refine[in]", params.refine_in.as_ref());
operation.query_optional("refine[label]", params.refine_label.as_ref());
operation.query_optional("refine[attachment]", params.refine_attachment.as_ref());
self.client.send_page(operation).await
}
pub async fn get_advanced_filters(
&self,
) -> Result<GetAdvancedSearchFiltersResponseContent, Error> {
let operation = self
.client
.operation(&routes::GET_ADVANCED_SEARCH_FILTERS, &[]);
self.client.send(operation).await
}
}