aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorTeddy Wing2016-04-22 09:29:10 -0400
committerTeddy Wing2016-04-22 09:32:34 -0400
commit01c3824b59289d8a70ae962de310e5f79c7a92ec (patch)
treeafa18ab20f6611c04e31244a35345816bd04cac2 /src/main.rs
parent622dbe1cf22472c4b72867a7d34b289afaba5160 (diff)
downloadmutt-alias-auto-add-01c3824b59289d8a70ae962de310e5f79c7a92ec.tar.bz2
Get the full integration working for real
Rename `handle_alias` to `write_alias` and implement the function. This function integrates all our steps together and writes our new alias if we have one. Alter our `main` function to remove some of the old code. Don't convert STDIN to a vector. That was naïve. Instead iterate over its lines directly. Handle all our errors with either a "no news is good news" or a panic.
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs
index cba6d9e..547bae7 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -63,7 +63,12 @@ impl Alias {
}
}
-fn handle_alias(s: &str) {
+fn write_alias(from: String) -> Result<(), AliasSearchError> {
+ let mut alias = Alias::new(&from);
+ let similar_aliases = try!(find_alias_in_file(&alias, "./testaliases"));
+ alias.update_alias_id(similar_aliases);
+ try!(alias.write_to_file("./testaliases"));
+ Ok(())
}
#[derive(Debug)]
@@ -128,17 +133,15 @@ fn find_alias_in_file(alias: &Alias, file: &str) -> Result<Vec<String>, AliasSea
fn main() {
let stdin = io::stdin();
- let input: Vec<String> = stdin.lock().lines().map(|line| line.unwrap()).collect();
- for line in &input {
+ for line in stdin.lock().lines() {
+ let line = line.unwrap();
if line.starts_with("From: ") {
- println!("!!!!!!!! {}", line);
- // run matcher function
- handle_alias(line);
+ match write_alias(line) {
+ Ok(_) => return,
+ Err(AliasSearchError::NotFound) | Err(AliasSearchError::EmailExists) => return,
+ Err(e) => panic!(e),
+ };
}
}
-
- for l in &input {
- println!("{}", l);
- }
}