use crate::{ client::Client, core::{ changes::{ChangesRequest, ChangesResponse}, get::GetRequest, query::{Comparator, Filter, QueryRequest, QueryResponse}, query_changes::{QueryChangesRequest, QueryChangesResponse}, request::{Arguments, Request}, response::{EmailSubmissionGetResponse, EmailSubmissionSetResponse}, set::{SetObject, SetRequest}, }, Get, Method, Set, URI, }; use super::{Address, EmailSubmission, Property, UndoStatus}; impl Client { pub async fn email_submission_create( &mut self, email_id: impl Into, identity_id: impl Into, ) -> crate::Result> { let mut request = self.build(); let id = request .set_email_submission() .create() .email_id(email_id) .identity_id(identity_id) .create_id() .unwrap(); request .send_single::() .await? .created(&id) } pub async fn email_submission_create_envelope( &mut self, email_id: impl Into, identity_id: impl Into, mail_from: U, rcpt_to: T, ) -> crate::Result> where T: IntoIterator, U: Into
, { let mut request = self.build(); let id = request .set_email_submission() .create() .email_id(email_id) .identity_id(identity_id) .envelope(mail_from, rcpt_to) .create_id() .unwrap(); request .send_single::() .await? .created(&id) } pub async fn email_submission_change_status( &mut self, id: &str, undo_status: UndoStatus, ) -> crate::Result> { let mut request = self.build(); request .set_email_submission() .update(id) .undo_status(undo_status); request .send_single::() .await? .updated(id) } pub async fn email_submission_destroy(&mut self, id: &str) -> crate::Result<()> { let mut request = self.build(); request.set_email_submission().destroy([id]); request .send_single::() .await? .destroyed(id) } pub async fn email_submission_get( &mut self, id: &str, properties: Option>, ) -> crate::Result> { let mut request = self.build(); let get_request = request.get_email_submission().ids([id]); 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 email_submission_query( &mut self, filter: Option>>, sort: Option>>, ) -> crate::Result { let mut request = self.build(); let query_request = request.query_email_submission(); if let Some(filter) = filter { query_request.filter(filter); } if let Some(sort) = sort { query_request.sort(sort.into_iter()); } request.send_single::().await } pub async fn email_submission_changes( &mut self, since_state: impl Into, max_changes: usize, ) -> crate::Result>> { let mut request = self.build(); request .changes_email_submission(since_state) .max_changes(max_changes); request.send_single().await } } impl Request<'_> { pub fn get_email_submission(&mut self) -> &mut GetRequest> { self.add_capability(URI::Submission); self.add_method_call( Method::GetEmailSubmission, Arguments::email_submission_get(self.params(Method::GetEmailSubmission)), ) .email_submission_get_mut() } pub async fn send_get_email_submission(self) -> crate::Result { self.send_single().await } pub fn changes_email_submission( &mut self, since_state: impl Into, ) -> &mut ChangesRequest { self.add_capability(URI::Submission); self.add_method_call( Method::ChangesEmailSubmission, Arguments::changes( self.params(Method::ChangesEmailSubmission), since_state.into(), ), ) .changes_mut() } pub async fn send_changes_email_submission( self, ) -> crate::Result>> { self.send_single().await } pub fn query_email_submission(&mut self) -> &mut QueryRequest> { self.add_capability(URI::Submission); self.add_method_call( Method::QueryEmailSubmission, Arguments::email_submission_query(self.params(Method::QueryEmailSubmission)), ) .email_submission_query_mut() } pub async fn send_query_email_submission(self) -> crate::Result { self.send_single().await } pub fn query_email_submission_changes( &mut self, since_query_state: impl Into, ) -> &mut QueryChangesRequest> { self.add_capability(URI::Submission); self.add_method_call( Method::QueryChangesEmailSubmission, Arguments::email_submission_query_changes( self.params(Method::QueryChangesEmailSubmission), since_query_state.into(), ), ) .email_submission_query_changes_mut() } pub async fn send_query_email_submission_changes(self) -> crate::Result { self.send_single().await } pub fn set_email_submission(&mut self) -> &mut SetRequest> { self.add_capability(URI::Submission); self.add_method_call( Method::SetEmailSubmission, Arguments::email_submission_set(self.params(Method::SetEmailSubmission)), ) .email_submission_set_mut() } pub async fn send_set_email_submission(self) -> crate::Result { self.send_single().await } }