use jmap_types::Id;
impl super::SessionClient {
pub async fn search_snippet_get(
&self,
filter: serde_json::Value,
email_ids: Option<&[Id]>,
) -> Result<serde_json::Value, jmap_base_client::ClientError> {
let (api_url, account_id) = self.session_parts()?;
let mut args = serde_json::json!({
"accountId": account_id,
"filter": filter,
});
if let Some(eids) = email_ids {
args["emailIds"] =
serde_json::to_value(eids).expect("Id slice Serialize is infallible");
}
let req = super::build_request("SearchSnippet/get", args, super::USING_MAIL);
let resp = self.call_internal(api_url, &req).await?;
jmap_base_client::extract_response(&resp, super::CALL_ID)
}
}
#[cfg(test)]
mod tests {
use serde_json::json;
#[test]
fn search_snippet_response_deserializes() {
let list_json = json!([
{
"emailId": "e1",
"subject": "Hello <mark>world</mark>",
"preview": "This is a <mark>world</mark>-class message."
},
{
"emailId": "e2"
}
]);
let snippets: Vec<jmap_mail_types::SearchSnippet> =
serde_json::from_value(list_json).expect("must deserialize snippet list");
assert_eq!(snippets.len(), 2);
assert_eq!(snippets[0].email_id.as_ref(), "e1");
assert!(snippets[0].subject.is_some());
assert!(snippets[1].subject.is_none());
}
}