/* * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL */ use super::query::Filter; use crate::{ method::query::FilterWrapper, object::email::EmailFilter, request::{ MaybeInvalid, deserialize::{DeserializeArguments, deserialize_request}, reference::{MaybeResultReference, ResultReference}, }, }; use serde::{Deserialize, Deserializer}; use types::id::Id; #[derive(Debug, Clone)] pub struct GetSearchSnippetRequest { pub account_id: Id, pub filter: Vec>, pub email_ids: MaybeResultReference>>, } #[derive(Debug, Clone, serde::Serialize)] pub struct GetSearchSnippetResponse { #[serde(rename = "accountId")] pub account_id: Id, #[serde(rename = "list")] pub list: Vec, #[serde(rename = "notFound")] pub not_found: Option>>, } #[derive(serde::Serialize, Clone, Debug)] pub struct SearchSnippet { #[serde(rename = "emailId")] pub email_id: Id, pub subject: Option, pub preview: Option, } impl<'de> DeserializeArguments<'de> for GetSearchSnippetRequest { fn deserialize_argument(&mut self, key: &str, map: &mut A) -> Result<(), A::Error> where A: serde::de::MapAccess<'de>, { hashify::fnc_map!(key.as_bytes(), b"accountId" => { self.account_id = crate::request::deserialize_account_id(map)?; }, b"filter" => { self.filter = map.next_value::>()?.0; }, b"emailIds" => { self.email_ids = MaybeResultReference::Value(map.next_value::>>()?); }, b"#emailIds" => { self.email_ids = MaybeResultReference::Reference(map.next_value::()?); }, _ => { let _ = map.next_value::()?; } ); Ok(()) } } impl<'de> Deserialize<'de> for GetSearchSnippetRequest { fn deserialize(deserializer: D) -> Result where D: Deserializer<'de>, { deserialize_request(deserializer) } } impl Default for GetSearchSnippetRequest { fn default() -> Self { Self { account_id: Id::default(), filter: Vec::new(), email_ids: MaybeResultReference::Value(Vec::new()), } } }