diff --git a/src/email_submission/mod.rs b/src/email_submission/mod.rs index 8535a0a..a60590a 100644 --- a/src/email_submission/mod.rs +++ b/src/email_submission/mod.rs @@ -17,8 +17,10 @@ use crate::{ #[derive(Debug, Clone, Serialize, Default)] pub struct SetArguments { #[serde(rename = "onSuccessUpdateEmail")] + #[serde(skip_serializing_if = "Option::is_none")] on_success_update_email: Option>>, #[serde(rename = "onSuccessDestroyEmail")] + #[serde(skip_serializing_if = "Option::is_none")] on_success_destroy_email: Option>, } diff --git a/src/vacation_response/helpers.rs b/src/vacation_response/helpers.rs index c29e237..31a7032 100644 --- a/src/vacation_response/helpers.rs +++ b/src/vacation_response/helpers.rs @@ -1,14 +1,117 @@ use crate::{ + client::Client, core::{ get::GetRequest, request::{Arguments, Request}, response::{VacationResponseGetResponse, VacationResponseSetResponse}, - set::SetRequest, + set::{SetObject, SetRequest}, }, Method, Set, URI, }; -use super::VacationResponse; +use super::{Property, VacationResponse}; + +impl Client { + pub async fn vacation_response_create( + &mut self, + subject: impl Into, + text_body: Option>, + html_body: Option>, + ) -> crate::Result { + let mut request = self.build(); + let created_id = request + .set_vacation_response() + .create() + .is_enabled(true) + .subject(Some(subject)) + .text_body(text_body) + .html_body(html_body) + .create_id() + .unwrap(); + + request + .send_single::() + .await? + .created(&created_id) + } + + pub async fn vacation_response_enable( + &mut self, + subject: impl Into, + text_body: Option>, + html_body: Option>, + ) -> crate::Result> { + let mut request = self.build(); + request + .set_vacation_response() + .update("singleton") + .is_enabled(true) + .subject(Some(subject)) + .text_body(text_body) + .html_body(html_body); + + request + .send_single::() + .await? + .updated("singleton") + } + + pub async fn vacation_response_disable(&mut self) -> crate::Result> { + let mut request = self.build(); + request + .set_vacation_response() + .update("singleton") + .is_enabled(false); + + request + .send_single::() + .await? + .updated("singleton") + } + + pub async fn vacation_response_set_dates( + &mut self, + from_date: Option, + to_date: Option, + ) -> crate::Result> { + let mut request = self.build(); + request + .set_vacation_response() + .update("singleton") + .is_enabled(true) + .from_date(from_date) + .to_date(to_date); + + request + .send_single::() + .await? + .updated("singleton") + } + + pub async fn vacation_response_get( + &mut self, + properties: Option>, + ) -> crate::Result> { + let mut request = self.build(); + let get_request = request.get_vacation_response().ids(["singleton"]); + if let Some(properties) = properties { + get_request.properties(properties.into_iter()); + } + request + .send_single::() + .await + .map(|mut r| r.unwrap_list().pop()) + } + + pub async fn vacation_response_destroy(&mut self) -> crate::Result<()> { + let mut request = self.build(); + request.set_vacation_response().destroy(["singleton"]); + request + .send_single::() + .await? + .destroyed("singleton") + } +} impl Request<'_> { pub fn get_vacation_response(&mut self) -> &mut GetRequest> { diff --git a/src/vacation_response/set.rs b/src/vacation_response/set.rs index 9774cc0..ade1ca5 100644 --- a/src/vacation_response/set.rs +++ b/src/vacation_response/set.rs @@ -1,6 +1,5 @@ use crate::{ core::set::{from_timestamp, SetObject}, - email_submission::SetArguments, Get, Set, }; @@ -39,7 +38,7 @@ impl VacationResponse { } impl SetObject for VacationResponse { - type SetArguments = SetArguments; + type SetArguments = (); fn new(_create_id: Option) -> Self { VacationResponse { @@ -61,7 +60,7 @@ impl SetObject for VacationResponse { } impl SetObject for VacationResponse { - type SetArguments = SetArguments; + type SetArguments = (); fn new(_create_id: Option) -> Self { unimplemented!()