From: Scott Worley Date: Sun, 7 Apr 2024 12:29:43 +0000 (-0700) Subject: Don't ignore errors while reading vote tally X-Git-Tag: v0.3.0~5 X-Git-Url: http://git.scottworley.com/voter/commitdiff_plain/8b8f8d1435e33c0f63fa0dfa940b3b582dc1cf90 Don't ignore errors while reading vote tally --- diff --git a/src/main.rs b/src/main.rs index fcb16c7..865fcb8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,28 +53,32 @@ fn get_voter(request: &cgi::Request) -> Result<&[u8], cgi::Response> { fn tally_votes(dir: &Path) -> std::io::Result>> { let mut tally: HashMap> = HashMap::new(); - if let Ok(vfile) = std::fs::File::open(dir.to_owned().join("votes")) { - for liner in std::io::BufReader::new(vfile).lines() { - let line = liner?; - if let Some((voter, datum)) = line.split_once(' ') { - if voter.len() == COOKIE_LENGTH { - if let Some((vote, candidate)) = datum.split_once(' ') { - if vote == "0" { - if let Some(entry) = tally.get_mut(candidate) { - entry.remove(voter); + match std::fs::File::open(dir.to_owned().join("votes")) { + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(tally), + Err(e) => Err(e), + Ok(vfile) => { + for liner in std::io::BufReader::new(vfile).lines() { + let line = liner?; + if let Some((voter, datum)) = line.split_once(' ') { + if voter.len() == COOKIE_LENGTH { + if let Some((vote, candidate)) = datum.split_once(' ') { + if vote == "0" { + if let Some(entry) = tally.get_mut(candidate) { + entry.remove(voter); + } + } else if vote == "1" { + tally + .entry(candidate.to_owned()) + .or_default() + .insert(voter.to_owned()); } - } else if vote == "1" { - tally - .entry(candidate.to_owned()) - .or_default() - .insert(voter.to_owned()); } } } } + Ok(tally) } } - Ok(tally) } fn valid_id_char(c: u8) -> bool {