diff options
| author | Teddy Wing | 2016-04-18 16:37:33 -0400 | 
|---|---|---|
| committer | Teddy Wing | 2016-04-18 21:54:25 -0400 | 
| commit | 1f8cbcedc3f298f68750075bfdf7aae065d53e87 (patch) | |
| tree | 5e10dd440e6be9520ebe650b039cf744ba59604c /src | |
| parent | ad2d9e0e1fa965ef94fcbf6e239729008cc34ba2 (diff) | |
| parent | da46c5ac7fe737018750dbd5beda389cd13dd123 (diff) | |
| download | mutt-alias-auto-add-1f8cbcedc3f298f68750075bfdf7aae065d53e87.tar.bz2 | |
Merge branch 'master' into check-for-alias-in-file
Conflicts:
	src/tests.rs
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 1677e5c..e089752 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,52 @@ use std::path::Path;  #[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 712b41e..c884188 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,42 +1,42 @@ -use super::{build_alias, is_alias_in_file}; +use super::{Alias, is_alias_in_file};  #[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()      );  } | 
