use std::{env, error::Error, ffi::OsString, fs::File, process}; fn run() -> Result<(), Box> { let file_path = get_first_arg()?; let file = File::open(file_path)?; let mut rdr = csv::Reader::from_reader(file); for result in rdr.records() { let record = result?; println!("{:?}", record); } Ok(()) } /// Returns the first positional argument sent to this process. If there are no /// positional arguments, then this returns an error. fn get_first_arg() -> Result> { match env::args_os().nth(1) { None => Err(From::from("expected 1 argument, but got none")), Some(file_path) => Ok(file_path), } } fn main() { if let Err(err) = run() { println!("{}", err); process::exit(1); } }