improve header.rs

This commit is contained in:
Jay Robson 2025-05-07 13:26:13 +10:00
parent 41c4833a2b
commit e403ab3b82
1 changed files with 8 additions and 12 deletions

View File

@ -12,36 +12,32 @@ pub struct Header {
impl Header { impl Header {
pub fn parse(row: quick_csv::Row, winners: usize) -> Result<Header, Box<dyn std::error::Error>> { pub fn parse(row: quick_csv::Row, winners: usize) -> Result<Header, Box<dyn std::error::Error>> {
let mut header = Header { let mut parties = Vec::<Party>::new();
parties: Vec::new(), let mut candidates = Vec::<Candidate>::new();
candidates: Vec::new(),
winners,
};
let mut parties_lookup = HashMap::<&str, usize>::new(); let mut parties_lookup = HashMap::<&str, usize>::new();
for col in row.columns()?.skip(6) { for col in row.columns()?.skip(6) {
let [party, name] = col.split(':').next_array().ok_or("Missing ':'")?; let [party, name] = col.split(':').next_array().ok_or("Missing ':'")?;
if party == "UG" { // independents if party == "UG" { // independents
header.candidates.push(Candidate { candidates.push(Candidate {
name: name.to_owned(), name: name.to_owned(),
party_id: None, party_id: None,
}); });
} }
else if let Some(party_id) = parties_lookup.get(party).copied() { else if let Some(party_id) = parties_lookup.get(party).copied() {
header.parties[party_id].member_ids.push(header.candidates.len()); parties[party_id].member_ids.push(candidates.len());
header.candidates.push(Candidate { candidates.push(Candidate {
name: name.to_owned(), name: name.to_owned(),
party_id: Some(party_id), party_id: Some(party_id),
}); });
} }
else { else {
parties_lookup.insert(party, header.parties.len()); parties_lookup.insert(party, parties.len());
header.parties.push(Party::new(name.to_owned())); parties.push(Party::new(name.to_owned()));
} }
} }
return Ok(Header { parties, candidates, winners });
Ok(header)
} }
pub fn get_candidate_name(&self, index: usize) -> CandidateName { pub fn get_candidate_name(&self, index: usize) -> CandidateName {
self.candidates[index].get_name(self) self.candidates[index].get_name(self)