aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs18
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(),