blob: 8c8b5f234d740b1b023b7bed3ee76083f162bb05 [file] [log] [blame]
Jakub Koturc72d7202020-12-21 17:28:15 +01001use std::error::Error;
2use std::io;
3use std::process;
4
5use serde::Deserialize;
6
7#[derive(Debug, Deserialize)]
8#[serde(rename_all = "PascalCase")]
9struct Record<'a> {
10 country: &'a [u8],
11 city: &'a [u8],
12 accent_city: &'a [u8],
13 region: &'a [u8],
14 population: Option<u64>,
15 latitude: f64,
16 longitude: f64,
17}
18
19fn run() -> Result<u64, Box<dyn Error>> {
20 let mut rdr = csv::Reader::from_reader(io::stdin());
21 let mut raw_record = csv::ByteRecord::new();
22 let headers = rdr.byte_headers()?.clone();
23
24 let mut count = 0;
25 while rdr.read_byte_record(&mut raw_record)? {
26 let record: Record = raw_record.deserialize(Some(&headers))?;
27 if record.country == b"us" && record.region == b"MA" {
28 count += 1;
29 }
30 }
31 Ok(count)
32}
33
34fn main() {
35 match run() {
36 Ok(count) => {
37 println!("{}", count);
38 }
39 Err(err) => {
40 println!("{}", err);
41 process::exit(1);
42 }
43 }
44}