diff options
| author | Teddy Wing | 2016-04-17 21:35:49 -0400 |
|---|---|---|
| committer | Teddy Wing | 2016-04-17 21:35:49 -0400 |
| commit | b182ea18dd664bc36e56601635ceb5ffdd67dc69 (patch) | |
| tree | f39618ef98d5e66e8692737fd95c095717093d9c /src/main.rs | |
| parent | 9240db56a7202b238b7880da9c82b1e73089f02e (diff) | |
| download | mutt-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.rs | 42 |
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); } |
