From 8df2057ee47473a4bc3e9809bdea81449ec981e2 Mon Sep 17 00:00:00 2001 From: Mauro D Date: Wed, 1 Jun 2022 15:20:36 +0000 Subject: [PATCH] Use of associated types + Identity and EmailSubmission helpers. --- src/email_submission/mod.rs | 2 +- src/email_submission/set.rs | 44 +++++++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/email_submission/mod.rs b/src/email_submission/mod.rs index 325c3b6..8535a0a 100644 --- a/src/email_submission/mod.rs +++ b/src/email_submission/mod.rs @@ -17,7 +17,7 @@ use crate::{ #[derive(Debug, Clone, Serialize, Default)] pub struct SetArguments { #[serde(rename = "onSuccessUpdateEmail")] - on_success_update_email: Option>, + on_success_update_email: Option>>, #[serde(rename = "onSuccessDestroyEmail")] on_success_destroy_email: Option>, } diff --git a/src/email_submission/set.rs b/src/email_submission/set.rs index bbfe113..125ad4a 100644 --- a/src/email_submission/set.rs +++ b/src/email_submission/set.rs @@ -1,8 +1,8 @@ use std::collections::HashMap; -use crate::{core::set::SetObject, Get, Set}; +use crate::{core::set::SetObject, email::Email, Get, Set}; -use super::{Address, EmailSubmission, Envelope, UndoStatus}; +use super::{Address, EmailSubmission, Envelope, SetArguments, UndoStatus}; impl EmailSubmission { pub fn identity_id(&mut self, identity_id: impl Into) -> &mut Self { @@ -32,7 +32,7 @@ impl EmailSubmission { } impl SetObject for EmailSubmission { - type SetArguments = (); + type SetArguments = SetArguments; fn new(_create_id: Option) -> Self { EmailSubmission { @@ -57,7 +57,7 @@ impl SetObject for EmailSubmission { } impl SetObject for EmailSubmission { - type SetArguments = (); + type SetArguments = SetArguments; fn new(_create_id: Option) -> Self { unimplemented!() @@ -142,3 +142,39 @@ impl From> for Address { } } } + +impl SetArguments { + pub fn on_success_update_email(&mut self, id: impl Into) -> &mut Email { + self.on_success_update_email_(format!("#{}", id.into())) + } + + pub fn on_success_update_email_id(&mut self, id: impl Into) -> &mut Email { + self.on_success_update_email_(id) + } + + fn on_success_update_email_(&mut self, id: impl Into) -> &mut Email { + let id = id.into(); + self.on_success_update_email + .get_or_insert_with(HashMap::new) + .insert(id.clone(), Email::new(None)); + self.on_success_update_email + .as_mut() + .unwrap() + .get_mut(&id) + .unwrap() + } + + pub fn on_success_destroy_email(&mut self, id: impl Into) -> &mut Self { + self.on_success_destroy_email + .get_or_insert_with(Vec::new) + .push(format!("#{}", id.into())); + self + } + + pub fn on_success_destroy_email_id(&mut self, id: impl Into) -> &mut Self { + self.on_success_destroy_email + .get_or_insert_with(Vec::new) + .push(id.into()); + self + } +}