summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2020-05-02 13:42:27 +0200
committerMatthias Beyer <mail@beyermatthias.de>2020-06-01 14:02:08 +0200
commit83ea1aa1912c7c0b90ebf3c65bfada87f9a4acd4 (patch)
tree56217598e9c82ac9a6e1169ebba3d84cf8235c7b
parent9e3bfc5421ed454cdbb623ec7f12ec1f1b901126 (diff)
Make to-field parsing available for all recipient-fields
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--bin/domain/imag-mail/src/new.rs59
1 files changed, 31 insertions, 28 deletions
diff --git a/bin/domain/imag-mail/src/new.rs b/bin/domain/imag-mail/src/new.rs
index 4c769a1d..3a6abcc9 100644
--- a/bin/domain/imag-mail/src/new.rs
+++ b/bin/domain/imag-mail/src/new.rs
@@ -149,27 +149,44 @@ fn mk_processed_template(rt: &Runtime, scmd: &ArgMatches, config: &MailConfig) -
})
}));
- { // parse "to" data, whether it is StoreId or String, also set to_name and has_to_name if there is a name present for the "to" data
- let to = scmd
- .value_of("to")
- .map(String::from)
- .ok_or_else(|| {
- err_msg("Missing value for field field: 'to'")
- })?;
+ fn parse_recipient_data(scmd: &ArgMatches,
+ hb_data: &mut BTreeMap<String, HandlebarsData>,
+ primary_field: &str,
+ fail_if_absent: bool,
+ name_field: &str,
+ has_field: &str)
+ -> Result<()>
+ {
+ let to = match scmd.value_of(primary_field).map(String::from) {
+ Some(to) => to,
+ None => if fail_if_absent {
+ return Err(format_err!("Missing value for field field: '{}'", primary_field))
+ } else {
+ return Ok(())
+ },
+ };
// Assume it is string for now
// TODO: Check whether `to` is a StoreId (here)
let (addr, _) = email_format::rfc5322::types::NameAddr::parse(to.as_bytes())?;
- if let Some(display_name) = addr.display_name {
- hb_data.insert(String::from("to_name"), HandlebarsData::Str(format!("{}", display_name)));
- hb_data.insert(String::from("has_to_name"), HandlebarsData::Bool(true));
+ let has_field_val = if let Some(display_name) = addr.display_name {
+ hb_data.insert(String::from(name_field), HandlebarsData::Str(format!("{}", display_name)));
+ true
} else {
- hb_data.insert(String::from("has_to_name"), HandlebarsData::Bool(false));
- }
+ false
+ };
- hb_data.insert(String::from("to"), HandlebarsData::Str(to));
- }
+ hb_data.insert(String::from(has_field), HandlebarsData::Bool(has_field_val));
+ hb_data.insert(String::from(primary_field), HandlebarsData::Str(to));
+ Ok(())
+ };
+
+
+ // parse "to" data, whether it is StoreId or String, also set to_name and has_to_name if there is a name present for the "to" data
+ parse_recipient_data(&scmd, &mut hb_data, "to", true, "to_name", "has_to_name")?;
+ parse_recipient_data(&scmd, &mut hb_data, "cc", false, "cc_name", "has_cc_name")?;
+ parse_recipient_data(&scmd, &mut hb_data, "bcc", false, "bcc_name", "has_bcc_name")?;
if let Some(in_reply_to) = scmd.value_of("in-reply-to").map(String::from) {
hb_data.insert(String::from("is_in_reply_to") , HandlebarsData::Bool(true));
@@ -178,20 +195,6 @@ fn mk_processed_template(rt: &Runtime, scmd: &ArgMatches, config: &MailConfig) -
hb_data.insert(String::from("is_in_reply_to") , HandlebarsData::Bool(false));
}
- if let Some(cc) = scmd.value_of("cc").map(String::from) {
- hb_data.insert(String::from("has_cc") , HandlebarsData::Bool(true));
- hb_data.insert(String::from("cc") , HandlebarsData::Str(cc));
- } else {
- hb_data.insert(String::from("has_cc") , HandlebarsData::Bool(false));
- }
-
- if let Some(bcc) = scmd.value_of("bcc").map(String::from) {
- hb_data.insert(String::from("has_bcc") , HandlebarsData::Bool(true));
- hb_data.insert(String::from("bcc") , HandlebarsData::Str(bcc));
- } else {
- hb_data.insert(String::from("has_bcc") , HandlebarsData::Bool(false));
- }
-
hb_data.insert(String::from("subject"), HandlebarsData::Str({
scmd.value_of("subject")
.map(String::from)