Use of associated types + Identity and EmailSubmission helpers.

main
Mauro D 2022-06-01 15:20:36 +00:00
parent 70df0e341c
commit 8df2057ee4
2 changed files with 41 additions and 5 deletions

View File

@ -17,7 +17,7 @@ use crate::{
#[derive(Debug, Clone, Serialize, Default)]
pub struct SetArguments {
#[serde(rename = "onSuccessUpdateEmail")]
on_success_update_email: Option<HashMap<String, Email>>,
on_success_update_email: Option<HashMap<String, Email<Set>>>,
#[serde(rename = "onSuccessDestroyEmail")]
on_success_destroy_email: Option<Vec<String>>,
}

View File

@ -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<Set> {
pub fn identity_id(&mut self, identity_id: impl Into<String>) -> &mut Self {
@ -32,7 +32,7 @@ impl EmailSubmission<Set> {
}
impl SetObject for EmailSubmission<Set> {
type SetArguments = ();
type SetArguments = SetArguments;
fn new(_create_id: Option<usize>) -> Self {
EmailSubmission {
@ -57,7 +57,7 @@ impl SetObject for EmailSubmission<Set> {
}
impl SetObject for EmailSubmission<Get> {
type SetArguments = ();
type SetArguments = SetArguments;
fn new(_create_id: Option<usize>) -> Self {
unimplemented!()
@ -142,3 +142,39 @@ impl From<Address<Get>> for Address<Set> {
}
}
}
impl SetArguments {
pub fn on_success_update_email(&mut self, id: impl Into<String>) -> &mut Email<Set> {
self.on_success_update_email_(format!("#{}", id.into()))
}
pub fn on_success_update_email_id(&mut self, id: impl Into<String>) -> &mut Email<Set> {
self.on_success_update_email_(id)
}
fn on_success_update_email_(&mut self, id: impl Into<String>) -> &mut Email<Set> {
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<String>) -> &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<String>) -> &mut Self {
self.on_success_destroy_email
.get_or_insert_with(Vec::new)
.push(id.into());
self
}
}