diff options
| author | Teddy Wing | 2016-04-18 16:32:39 -0400 |
|---|---|---|
| committer | Teddy Wing | 2016-04-18 16:32:39 -0400 |
| commit | da46c5ac7fe737018750dbd5beda389cd13dd123 (patch) | |
| tree | a63e13a63d262c549c7abd8274d2115c24d7fbeb /src | |
| parent | 9240db56a7202b238b7880da9c82b1e73089f02e (diff) | |
| parent | e6b919bd86f4f3a07aae8625b2d4c53d34cfaae3 (diff) | |
| download | mutt-alias-auto-add-da46c5ac7fe737018750dbd5beda389cd13dd123.tar.bz2 | |
Merge branch 'create-Alias-type'
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 46 | ||||
| -rw-r--r-- | src/tests.rs | 22 |
2 files changed, 57 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 5e02b38..49c30d3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,52 @@ use std::io::{self, BufRead}; #[cfg(test)] mod tests; +struct Alias { + alias: String, + name: String, + email: String, +} + +impl Alias { + fn new(email: &str) -> Alias { + let mut split: Vec<&str> = email.split_whitespace().collect(); + + // Remove "From: " + split.remove(0); + + let mut alias = String::new(); + let mut name = String::new(); + let mut email = String::new(); + + if split.len() == 1 { + alias = split[0].to_lowercase().to_string(); + email = split[0].to_string(); + } else if split.len() == 2 { + alias = split[0].to_lowercase().to_string(); + name = split[0].to_string(); + email = split[1].to_string(); + } else if split.len() > 2 { + alias = format!("{}-{}", split[split.len() - 2], split[0]).to_lowercase().to_string(); + name = split[0..(split.len() - 1)].join(" "); + email = split[split.len() - 1].to_string(); + } + + alias = alias.replace(',', ""); + alias = alias.replace('\'', ""); + alias = alias.replace('"', ""); + + Alias { alias: alias, name: name, email: email } + } + + fn to_string(&self) -> String { + if self.name.is_empty() { + format!("alias {} {}", self.alias, self.email) + } else { + format!("alias {} {} {}", self.alias, self.name, self.email) + } + } +} + fn handle_alias(s: &str) { let alias = build_alias(s); } diff --git a/src/tests.rs b/src/tests.rs index 2e43d35..c12bab1 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,41 +1,41 @@ -use super::build_alias; +use super::Alias; #[test] -fn build_alias_with_only_email() { +fn new_alias_with_only_email() { assert_eq!( "alias producer@765pro.ductions producer@765pro.ductions", - build_alias("From: producer@765pro.ductions") + Alias::new("From: producer@765pro.ductions").to_string() ); } #[test] -fn build_alias_with_1_name() { +fn new_alias_with_1_name() { assert_eq!( "alias decim Decim <decim@quindecim.jp>", - build_alias("From: Decim <decim@quindecim.jp>") + Alias::new("From: Decim <decim@quindecim.jp>").to_string() ); } #[test] -fn build_alias_with_2_names() { +fn new_alias_with_2_names() { assert_eq!( "alias farnsworth-hubert Hubert Farnsworth <professor@planetexpress.com>", - build_alias("From: Hubert Farnsworth <professor@planetexpress.com>") + Alias::new("From: Hubert Farnsworth <professor@planetexpress.com>").to_string() ); } #[test] -fn build_alias_with_3_names() { +fn new_alias_with_3_names() { assert_eq!( "alias lab-harvard Harvard Innovation Lab <noreply@eventbrite.com>", - build_alias("From: Harvard Innovation Lab <noreply@eventbrite.com>") + Alias::new("From: Harvard Innovation Lab <noreply@eventbrite.com>").to_string() ); } #[test] -fn build_alias_with_special_characters() { +fn new_alias_with_special_characters() { assert_eq!( "alias celty-ostrulson \"O'Strulson, Celty\" <celty@dollars.co>", - build_alias("From: \"O'Strulson, Celty\" <celty@dollars.co>") + Alias::new("From: \"O'Strulson, Celty\" <celty@dollars.co>").to_string() ); } |
