diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/src/main.rs b/src/main.rs index 75e74ac..0004cc4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,6 +53,30 @@ impl Alias { } } + fn find_in_file<P: AsRef<Path>>(&self, file: P) -> Result<Vec<String>, AliasSearchError> { + let mut matches = Vec::new(); + let f = try!(File::open(file)); + let file = BufReader::new(&f); + for line in file.lines() { + let line = try!(line); + let split: Vec<&str> = line.split_whitespace().collect(); + + if line.contains(&self.email) { + return Err(AliasSearchError::EmailExists) + } + + if split[1].starts_with(&self.alias) { + matches.push(split[1].to_owned()); + } + } + + if matches.is_empty() { + Err(AliasSearchError::NotFound) + } else { + Ok(matches) + } + } + fn write_to_file<P: AsRef<Path>>(&self, file: P) -> Result<(), io::Error> { let mut f = try!(OpenOptions::new().append(true).open(file)); try!(f.write_all(format!("{}\n", self.to_string()).as_bytes())); @@ -68,7 +92,7 @@ impl Alias { 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, &file)); + let similar_aliases = try!(alias.find_in_file(&file)); alias.update_alias_id(similar_aliases); try!(alias.write_to_file(&file)); Ok(()) @@ -134,30 +158,6 @@ impl PartialEq<AliasSearchError> for 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); - for line in file.lines() { - let line = try!(line); - let split: Vec<&str> = line.split_whitespace().collect(); - - if line.contains(&alias.email) { - return Err(AliasSearchError::EmailExists) - } - - if split[1].starts_with(&alias.alias) { - matches.push(split[1].to_owned()); - } - } - - if matches.is_empty() { - Err(AliasSearchError::NotFound) - } else { - Ok(matches) - } -} - fn print_usage(program: &str) { println!("Usage: {} FILE", program); } |
