From 47cad8fd1725398502785464ba7996ff5bab9beb Mon Sep 17 00:00:00 2001 From: Mauro D Date: Wed, 24 Aug 2022 13:47:22 +0000 Subject: [PATCH] Reference support in ChangesRequest. --- src/client.rs | 10 ++++++---- src/core/changes.rs | 20 +++++++++++++++++++- src/core/get.rs | 13 +++++++++++++ src/mailbox/mod.rs | 2 +- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/client.rs b/src/client.rs index f3affb2..e003292 100644 --- a/src/client.rs +++ b/src/client.rs @@ -112,6 +112,7 @@ impl ClientBuilder { let trusted_hosts = Arc::new(self.trusted_hosts); let trusted_hosts_ = trusted_hosts.clone(); + let session_url = format!("{}/.well-known/jmap", url); let session: Session = serde_json::from_slice( &Client::handle_error( reqwest::Client::builder() @@ -132,7 +133,7 @@ impl ClientBuilder { })) .default_headers(headers.clone()) .build()? - .get(url) + .get(&session_url) .send() .await?, ) @@ -159,7 +160,7 @@ impl ClientBuilder { event_source_url: URLPart::parse(session.event_source_url())?, api_url: session.api_url().to_string(), session: parking_lot::Mutex::new(Arc::new(session)), - session_url: url.to_string(), + session_url, session_updated: true.into(), trusted_hosts, #[cfg(feature = "websockets")] @@ -191,6 +192,7 @@ impl ClientBuilder { let trusted_hosts = Arc::new(self.trusted_hosts); let trusted_hosts_ = trusted_hosts.clone(); + let session_url = format!("{}/.well-known/jmap", url); let session: Session = serde_json::from_slice( &Client::handle_error( reqwest::blocking::Client::builder() @@ -211,7 +213,7 @@ impl ClientBuilder { })) .default_headers(headers.clone()) .build()? - .get(url) + .get(&session_url) .send() ?, )? @@ -236,7 +238,7 @@ impl ClientBuilder { event_source_url: URLPart::parse(session.event_source_url())?, api_url: session.api_url().to_string(), session: parking_lot::Mutex::new(Arc::new(session)), - session_url: url.to_string(), + session_url, session_updated: true.into(), trusted_hosts, #[cfg(feature = "websockets")] diff --git a/src/core/changes.rs b/src/core/changes.rs index 5bbf892..58a5ea1 100644 --- a/src/core/changes.rs +++ b/src/core/changes.rs @@ -1,6 +1,8 @@ use serde::{Deserialize, Serialize}; -use super::{Object, RequestParams}; +use crate::Method; + +use super::{request::ResultReference, Object, RequestParams}; pub trait ChangesObject: Object { type ChangesResponse; @@ -8,6 +10,9 @@ pub trait ChangesObject: Object { #[derive(Debug, Clone, Serialize)] pub struct ChangesRequest { + #[serde(skip)] + method: (Method, usize), + #[serde(rename = "accountId")] account_id: String, @@ -46,6 +51,7 @@ pub struct ChangesResponse { impl ChangesRequest { pub fn new(params: RequestParams, since_state: String) -> Self { ChangesRequest { + method: (params.method, params.call_id), account_id: params.account_id, since_state, max_changes: None, @@ -61,6 +67,18 @@ impl ChangesRequest { self.max_changes = Some(max_changes); self } + + pub fn created_reference(&self) -> ResultReference { + ResultReference::new(self.method.0, self.method.1, "/created") + } + + pub fn updated_reference(&self) -> ResultReference { + ResultReference::new(self.method.0, self.method.1, "/updated") + } + + pub fn updated_properties_reference(&self) -> ResultReference { + ResultReference::new(self.method.0, self.method.1, "/updatedProperties") + } } impl ChangesResponse { diff --git a/src/core/get.rs b/src/core/get.rs index 84f202a..e38d7d7 100644 --- a/src/core/get.rs +++ b/src/core/get.rs @@ -28,6 +28,11 @@ pub struct GetRequest { #[serde(skip_serializing_if = "Option::is_none")] properties: Option>, + #[serde(rename = "#properties")] + #[serde(skip_deserializing)] + #[serde(skip_serializing_if = "Option::is_none")] + properties_ref: Option, + #[serde(flatten)] arguments: O::GetArguments, } @@ -57,6 +62,7 @@ impl GetRequest { ids: None, ids_ref: None, properties: None, + properties_ref: None, arguments: O::GetArguments::default(), } } @@ -86,6 +92,13 @@ impl GetRequest { pub fn properties(&mut self, properties: impl IntoIterator) -> &mut Self { self.properties = Some(properties.into_iter().collect()); + self.properties_ref = None; + self + } + + pub fn properties_ref(&mut self, reference: ResultReference) -> &mut Self { + self.properties_ref = Some(reference); + self.properties = None; self } diff --git a/src/mailbox/mod.rs b/src/mailbox/mod.rs index 90b4033..5e1e4ae 100644 --- a/src/mailbox/mod.rs +++ b/src/mailbox/mod.rs @@ -131,7 +131,7 @@ impl Default for Role { } } -#[derive(Debug, Clone, Serialize, Deserialize)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct MailboxRights { #[serde(rename = "mayReadItems")] may_read_items: bool,