use std::error::Error; use std::io; use std::process; // This lets us write `#[derive(Deserialize)]`. use serde::Deserialize; // We don't need to derive `Debug` (which doesn't require Serde), but it's a // good habit to do it for all your types. // // Notice that the field names in this struct are NOT in the same order as // the fields in the CSV data! #[derive(Debug, Deserialize)] #[serde(rename_all = "PascalCase")] struct Record { latitude: f64, longitude: f64, population: Option, city: String, state: String, } fn run() -> Result<(), Box> { let mut rdr = csv::Reader::from_reader(io::stdin()); for result in rdr.deserialize() { let record: Record = result?; println!("{:?}", record); // Try this if you don't like each record smushed on one line: // println!("{:#?}", record); } Ok(()) } fn main() { if let Err(err) = run() { println!("{}", err); process::exit(1); } }