aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2016-04-18 16:32:39 -0400
committerTeddy Wing2016-04-18 16:32:39 -0400
commitda46c5ac7fe737018750dbd5beda389cd13dd123 (patch)
treea63e13a63d262c549c7abd8274d2115c24d7fbeb /src
parent9240db56a7202b238b7880da9c82b1e73089f02e (diff)
parente6b919bd86f4f3a07aae8625b2d4c53d34cfaae3 (diff)
downloadmutt-alias-auto-add-da46c5ac7fe737018750dbd5beda389cd13dd123.tar.bz2
Merge branch 'create-Alias-type'
Diffstat (limited to 'src')
-rw-r--r--src/main.rs46
-rw-r--r--src/tests.rs22
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()
);
}