aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorTeddy Wing2016-04-17 21:35:49 -0400
committerTeddy Wing2016-04-17 21:35:49 -0400
commitb182ea18dd664bc36e56601635ceb5ffdd67dc69 (patch)
treef39618ef98d5e66e8692737fd95c095717093d9c /src/main.rs
parent9240db56a7202b238b7880da9c82b1e73089f02e (diff)
downloadmutt-alias-auto-add-b182ea18dd664bc36e56601635ceb5ffdd67dc69.tar.bz2
Add a new `Alias` struct and implementation
This allows us to represent an alias not just as a string, but as an entity where we can ask for and isolate different parts of the alias. This makes it more convenient to get just the "alias" part, or just the "email" part for example. Doing so is necessary for making accurate comparisons/searches to find out whether this email or alias already exists in our alias file. Two functions are implemented on this type. One, `to_string`, creates a Mutt alias line as a string. The other builds a new `Alias` object from a "From: " string, taking nearly the same steps as `build_alias` does. We'll want to transition `build_alias` to this `Alias::new` function, using the new one in the future.
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index 5e02b38..27b3e48 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -3,6 +3,48 @@ 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 {
+ format!("alias {} {} {}", self.alias, self.name, self.email)
+ }
+}
+
fn handle_alias(s: &str) {
let alias = build_alias(s);
}