diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/main.rs b/src/main.rs index 0004cc4..91545bf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ use std::path::Path; #[cfg(test)] mod tests; +#[derive(Clone)] struct Alias { alias: String, name: String, @@ -77,9 +78,13 @@ impl Alias { } } - fn write_to_file<P: AsRef<Path>>(&self, file: P) -> Result<(), io::Error> { + fn write_to_file<P: AsRef<Path>>(&mut self, file: P) -> Result<(), AliasSearchError> { + let similar_aliases = try!(self.find_in_file(&file)); + self.update_alias_id(similar_aliases); + let mut f = try!(OpenOptions::new().append(true).open(file)); try!(f.write_all(format!("{}\n", self.to_string()).as_bytes())); + Ok(()) } @@ -90,14 +95,6 @@ impl Alias { } } -fn write_alias<P: AsRef<Path>>(from: String, file: P) -> Result<(), AliasSearchError> { - let mut alias = Alias::new(&from); - let similar_aliases = try!(alias.find_in_file(&file)); - alias.update_alias_id(similar_aliases); - try!(alias.write_to_file(&file)); - Ok(()) -} - #[derive(Debug)] enum AliasSearchError { NotFound, @@ -182,7 +179,8 @@ fn main() { println!("{}", line); if line.starts_with("From: ") { - match write_alias(line, &file) { + let mut alias = Alias::new(&line); + match alias.write_to_file(&file) { Ok(_) => continue, Err(e @ AliasSearchError::NotFound) | Err(e @ AliasSearchError::EmailExists) => io::stderr().write(e.to_string().as_bytes()).ok(), |
