diff --git a/src/blob/upload.rs b/src/blob/upload.rs index d887941..84ba009 100644 --- a/src/blob/upload.rs +++ b/src/blob/upload.rs @@ -27,7 +27,7 @@ impl Client { blob: Vec, content_type: Option<&str>, ) -> crate::Result { - let account_id = account_id.unwrap_or(self.default_account_id()); + let account_id = account_id.unwrap_or_else(|| self.default_account_id()); let mut upload_url = String::with_capacity(self.session().upload_url().len() + account_id.len()); diff --git a/src/core/changes.rs b/src/core/changes.rs index 7e4cf51..5bbf892 100644 --- a/src/core/changes.rs +++ b/src/core/changes.rs @@ -92,14 +92,26 @@ impl ChangesResponse { &self.created } + pub fn take_created(&mut self) -> Vec { + std::mem::take(&mut self.created) + } + pub fn updated(&self) -> &[String] { &self.updated } + pub fn take_updated(&mut self) -> Vec { + std::mem::take(&mut self.updated) + } + pub fn destroyed(&self) -> &[String] { &self.destroyed } + pub fn take_destroyed(&mut self) -> Vec { + std::mem::take(&mut self.destroyed) + } + pub fn arguments(&self) -> &O::ChangesResponse { &self.arguments } diff --git a/src/email/helpers.rs b/src/email/helpers.rs index af341cd..d200a6d 100644 --- a/src/email/helpers.rs +++ b/src/email/helpers.rs @@ -162,10 +162,13 @@ impl Client { pub async fn email_changes( &self, since_state: impl Into, - max_changes: usize, + max_changes: Option, ) -> crate::Result>> { let mut request = self.build(); - request.changes_email(since_state).max_changes(max_changes); + let changes_request = request.changes_email(since_state); + if let Some(max_changes) = max_changes { + changes_request.max_changes(max_changes); + } request.send_single().await } diff --git a/src/email/query.rs b/src/email/query.rs index 0560223..cf701b4 100644 --- a/src/email/query.rs +++ b/src/email/query.rs @@ -95,7 +95,7 @@ pub enum Filter { value: Vec, }, - // Stalwart specific + // Non-standard Id { #[serde(rename = "id")] value: Vec, @@ -121,8 +121,6 @@ pub enum Comparator { From, #[serde(rename = "to")] To, - #[serde(rename = "cc")] - Cc, #[serde(rename = "subject")] Subject, #[serde(rename = "sentAt")] @@ -133,6 +131,10 @@ pub enum Comparator { AllInThreadHaveKeyword { keyword: String }, #[serde(rename = "someInThreadHaveKeyword")] SomeInThreadHaveKeyword { keyword: String }, + + // Non-standard + #[serde(rename = "cc")] + Cc, } impl Filter { diff --git a/src/event_source/stream.rs b/src/event_source/stream.rs index 0187b6e..7c5f0be 100644 --- a/src/event_source/stream.rs +++ b/src/event_source/stream.rs @@ -1,4 +1,4 @@ -use std::{pin::Pin, time::Duration}; +use std::time::Duration; use crate::{client::Client, core::session::URLPart, event_source::parser::EventParser, TypeState}; use futures_util::{Stream, StreamExt}; @@ -13,7 +13,7 @@ impl Client { close_after_state: bool, ping: Option, last_event_id: Option<&str>, - ) -> crate::Result>>>> { + ) -> crate::Result> + Unpin> { let mut event_source_url = String::with_capacity(self.session().event_source_url().len()); for part in self.event_source_url() {