SieveScripts and VacationResponse implementation

This commit is contained in:
Mauro D
2023-05-19 15:16:48 +00:00
parent 4e4632571c
commit bc40256ac4
45 changed files with 2188 additions and 325 deletions

View File

@@ -28,7 +28,6 @@ pub enum RequestArguments {
PushSubscription,
SieveScript,
VacationResponse,
Principal,
}
#[derive(Debug, Clone, serde::Serialize)]
@@ -61,7 +60,6 @@ impl JsonObjectParser for GetRequest<RequestArguments> {
MethodObject::PushSubscription => RequestArguments::PushSubscription,
MethodObject::SieveScript => RequestArguments::SieveScript,
MethodObject::VacationResponse => RequestArguments::VacationResponse,
MethodObject::Principal => RequestArguments::Principal,
_ => {
return Err(Error::Method(MethodError::UnknownMethod(format!(
"{}/get",
@@ -125,7 +123,7 @@ impl RequestPropertyParser for RequestArguments {
impl GetRequest<RequestArguments> {
pub fn take_arguments(&mut self) -> RequestArguments {
std::mem::replace(&mut self.arguments, RequestArguments::Principal)
std::mem::replace(&mut self.arguments, RequestArguments::VacationResponse)
}
pub fn with_arguments<T>(self, arguments: T) -> GetRequest<T> {

View File

@@ -135,7 +135,6 @@ pub enum RequestArguments {
Mailbox(mailbox::QueryArguments),
EmailSubmission,
SieveScript,
Principal,
}
impl JsonObjectParser for QueryRequest<RequestArguments> {
@@ -149,7 +148,6 @@ impl JsonObjectParser for QueryRequest<RequestArguments> {
MethodObject::Mailbox => RequestArguments::Mailbox(Default::default()),
MethodObject::EmailSubmission => RequestArguments::EmailSubmission,
MethodObject::SieveScript => RequestArguments::SieveScript,
MethodObject::Principal => RequestArguments::Principal,
_ => {
return Err(Error::Method(MethodError::UnknownMethod(format!(
"{}/query",
@@ -714,7 +712,7 @@ impl Comparator {
impl QueryRequest<RequestArguments> {
pub fn take_arguments(&mut self) -> RequestArguments {
std::mem::replace(&mut self.arguments, RequestArguments::Principal)
std::mem::replace(&mut self.arguments, RequestArguments::SieveScript)
}
}

View File

@@ -47,7 +47,6 @@ pub enum RequestArguments {
PushSubscription,
SieveScript(sieve::SetArguments),
VacationResponse,
Principal,
}
#[derive(Debug, Clone, Default, serde::Serialize)]
@@ -108,7 +107,6 @@ impl JsonObjectParser for SetRequest<RequestArguments> {
MethodObject::PushSubscription => RequestArguments::PushSubscription,
MethodObject::VacationResponse => RequestArguments::VacationResponse,
MethodObject::SieveScript => RequestArguments::SieveScript(Default::default()),
MethodObject::Principal => RequestArguments::Principal,
_ => {
return Err(Error::Method(MethodError::UnknownMethod(format!(
"{}/set",
@@ -410,7 +408,7 @@ impl<T> SetRequest<T> {
impl SetRequest<RequestArguments> {
pub fn take_arguments(&mut self) -> RequestArguments {
std::mem::replace(&mut self.arguments, RequestArguments::Principal)
std::mem::replace(&mut self.arguments, RequestArguments::VacationResponse)
}
pub fn with_arguments<T>(self, arguments: T) -> SetRequest<T> {
@@ -500,6 +498,22 @@ impl SetResponse {
}
}
pub fn get_object_by_id(&mut self, id: Id) -> Option<&mut Object<Value>> {
if let Some(obj) = self.updated.get_mut(&id) {
if let Some(obj) = obj {
return Some(obj);
} else {
*obj = Some(Object::with_capacity(1));
return obj.as_mut().unwrap().into();
}
}
(&mut self.created)
.into_iter()
.map(|(_, obj)| obj)
.find(|obj| obj.properties.get(&Property::Id) == Some(&Value::Id(id)))
}
pub fn has_changes(&self) -> bool {
!self.created.is_empty() || !self.updated.is_empty() || !self.destroyed.is_empty()
}