hey-sdk 0.30.0

Rust client for the HEY API, generated from a Smithy model of the API
Documentation
// Generated by hey-sdk-generator from openapi.json and behavior-model.json. DO NOT EDIT.

#![allow(clippy::too_many_arguments)]

use crate::client::Client;
use crate::error::Error;
use crate::generated::routes;
use crate::generated::types::*;
use crate::pagination::Page;

/// Optional query parameters for `AdvancedSearch`.
#[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 }
    }

    /// The client this service sends through.
    pub fn client(&self) -> &'a Client {
        self.client
    }

    /// Get the options the advanced search refine form offers.
    ///
    /// Advanced search: message matches grouped by topic as the search page shows them —
    /// the topic, its posting id, and the matching entries as summaries (no bodies; read a
    /// message with GetMessage). Refinements are the same query parameters the page uses.
    /// The next page, if any, is a Link header.
    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
    }

    /// The advanced search refine form's options: boxes, date ranges, labels and attachment kinds.
    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
    }
}