From b182ea18dd664bc36e56601635ceb5ffdd67dc69 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 17 Apr 2016 21:35:49 -0400 Subject: 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. --- src/main.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src') 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); } -- cgit v1.2.3