#![allow(dead_code)] | |
use std::{error::Error, io, process}; | |
use serde::Deserialize; | |
#[derive(Debug, Deserialize)] | |
#[serde(rename_all = "PascalCase")] | |
struct Record { | |
country: String, | |
city: String, | |
accent_city: String, | |
region: String, | |
population: Option<u64>, | |
latitude: f64, | |
longitude: f64, | |
} | |
fn run() -> Result<u64, Box<dyn Error>> { | |
let mut rdr = csv::Reader::from_reader(io::stdin()); | |
let mut count = 0; | |
for result in rdr.deserialize() { | |
let record: Record = result?; | |
if record.country == "us" && record.region == "MA" { | |
count += 1; | |
} | |
} | |
Ok(count) | |
} | |
fn main() { | |
match run() { | |
Ok(count) => { | |
println!("{}", count); | |
} | |
Err(err) => { | |
println!("{}", err); | |
process::exit(1); | |
} | |
} | |
} |