use std::env; use std::fs; use std::process; // ANCHOR: here use std::error::Error; // --snip-- // ANCHOR_END: here fn main() { let args: Vec = env::args().collect(); let config = Config::new(&args).unwrap_or_else(|err| { println!("Problem parsing arguments: {}", err); process::exit(1); }); println!("Searching for {}", config.query); println!("In file {}", config.filename); run(config); } // ANCHOR: here fn run(config: Config) -> Result<(), Box> { let contents = fs::read_to_string(config.filename)?; println!("With text:\n{}", contents); Ok(()) } // ANCHOR_END: here struct Config { query: String, filename: String, } impl Config { fn new(args: &[String]) -> Result { if args.len() < 3 { return Err("not enough arguments"); } let query = args[1].clone(); let filename = args[2].clone(); Ok(Config { query, filename }) } }