From 4645cb31ee875ee1a4d6c0750f2be73b2113e413 Mon Sep 17 00:00:00 2001 From: Jay Robson Date: Sat, 3 May 2025 21:30:39 +1000 Subject: [PATCH] made counter.rs --- src/counter.rs | 22 ++++++++++++++++++++++ src/main.rs | 19 ++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 src/counter.rs diff --git a/src/counter.rs b/src/counter.rs new file mode 100644 index 0000000..a7c95e2 --- /dev/null +++ b/src/counter.rs @@ -0,0 +1,22 @@ +use crate::{ballot::Ballot, header::Header}; + + +#[derive(Debug)] +pub struct Counter { + pub header: Header, + pub ballots: Vec, +} + +impl Counter { + pub fn new(mut csv: quick_csv::Csv) -> Result> { + let header = Header::parse(csv.next().ok_or("csv header missing")??)?; + let ballots = Ballot::parse_rows(csv, &header)?; + + Ok(Counter { + header, + ballots, + }) + } + +} + diff --git a/src/main.rs b/src/main.rs index 5ee8940..8615295 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,13 @@ use std::env; use ballot::{Ballot, BallotType}; +use counter::Counter; use header::Header; pub mod candidate; -mod ballot; -mod header; +pub mod ballot; +pub mod header; +mod counter; fn main() { let csv_path = { @@ -16,18 +18,17 @@ fn main() { } args[1].clone() }; - let mut csv = quick_csv::Csv::from_file(csv_path).unwrap().flexible(true); - let header = Header::parse(csv.next().unwrap().unwrap()).unwrap(); - let ballots = Ballot::parse_rows(csv, &header).unwrap(); + let csv = quick_csv::Csv::from_file(csv_path).unwrap().flexible(true); + let counter = Counter::new(csv).unwrap(); - println!("Parties: {}", header.parties.len()); - println!("Candidates: {}", header.candidates.len()); + println!("Parties: {}", counter.header.parties.len()); + println!("Candidates: {}", counter.header.candidates.len()); - let total = ballots.len() as u32; + let total = counter.ballots.len() as u32; let mut total_atl = 0u32; let mut total_btl = 0u32; - for ballot in ballots.iter() { + for ballot in counter.ballots.iter() { *match ballot.ty { BallotType::Party => &mut total_atl, BallotType::Candidate => &mut total_btl,