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