diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 25 | 
1 files changed, 20 insertions, 5 deletions
| diff --git a/src/main.rs b/src/main.rs index ae7bf17..75e74ac 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use std::env;  use std::error::{self, Error};  use std::io::{self, BufRead, BufReader, Write};  use std::fmt; @@ -65,11 +66,11 @@ impl Alias {      }  } -fn write_alias(from: String) -> Result<(), AliasSearchError> { +fn write_alias<P: AsRef<Path>>(from: String, file: P) -> Result<(), AliasSearchError> {      let mut alias = Alias::new(&from); -    let similar_aliases = try!(find_alias_in_file(&alias, "./testaliases")); +    let similar_aliases = try!(find_alias_in_file(&alias, &file));      alias.update_alias_id(similar_aliases); -    try!(alias.write_to_file("./testaliases")); +    try!(alias.write_to_file(&file));      Ok(())  } @@ -133,7 +134,7 @@ impl PartialEq<AliasSearchError> for AliasSearchError {      }  } -fn find_alias_in_file(alias: &Alias, file: &str) -> Result<Vec<String>, AliasSearchError> { +fn find_alias_in_file<P: AsRef<Path>>(alias: &Alias, file: P) -> Result<Vec<String>, AliasSearchError> {      let mut matches = Vec::new();      let f = try!(File::open(file));      let file = BufReader::new(&f); @@ -157,7 +158,21 @@ fn find_alias_in_file(alias: &Alias, file: &str) -> Result<Vec<String>, AliasSea      }  } +fn print_usage(program: &str) { +    println!("Usage: {} FILE", program); +} +  fn main() { +    let args: Vec<String> = env::args().collect(); +    let program = args[0].clone(); + +    let file = if args.len() > 1 { +        &args[1] +    } else { +        print_usage(&program); +        return; +    }; +      let stdin = io::stdin();      for line in stdin.lock().lines() { @@ -167,7 +182,7 @@ fn main() {          println!("{}", line);          if line.starts_with("From: ") { -            match write_alias(line) { +            match write_alias(line, &file) {                  Ok(_)  => continue,                  Err(e @ AliasSearchError::NotFound) | Err(e @ AliasSearchError::EmailExists) =>                      io::stderr().write(e.to_string().as_bytes()).ok(), | 
