1 use std::error::Error;
2 use std::io;
3 use std::process;
4
5 use serde::Deserialize;
6
7 // By default, struct field names are deserialized based on the position of
8 // a corresponding field in the CSV data's header record.
9 #[derive(Debug, Deserialize)]
10 struct Record {
11 city: String,
12 region: String,
13 country: String,
14 population: Option<u64>,
15 }
16
example() -> Result<(), Box<dyn Error>>17 fn example() -> Result<(), Box<dyn Error>> {
18 let mut rdr = csv::Reader::from_reader(io::stdin());
19 for result in rdr.deserialize() {
20 // Notice that we need to provide a type hint for automatic
21 // deserialization.
22 let record: Record = result?;
23 println!("{:?}", record);
24 }
25 Ok(())
26 }
27
main()28 fn main() {
29 if let Err(err) = example() {
30 println!("error running example: {}", err);
31 process::exit(1);
32 }
33 }
34