diff --git a/minigrep/src/lib.rs b/minigrep/src/lib.rs index 10659e3..1092248 100644 --- a/minigrep/src/lib.rs +++ b/minigrep/src/lib.rs @@ -8,13 +8,21 @@ pub struct Config { } impl Config { - pub fn build(args: &[String]) -> Result<Config, &'static str> { - if args.len() < 3 { - return Err("not enough arguments"); - } + pub fn build( + mut args: impl Iterator<Item = String> + ) -> Result<Config, &'static str> { + args.next(); + + let query = match args.next() { + Some(arg) => arg, + None => return Err("Didn't get a query string"), + }; + + let file_path = match args.next() { + Some(arg) => arg, + None => return Err("Didn't get a file path"), + }; - let query = args[1].clone(); - let file_path = args[2].clone(); let ignore_case = env::var("IGNORE_CASE").is_ok(); Ok(Config { diff --git a/minigrep/src/main.rs b/minigrep/src/main.rs index 50d3fe8..9ac0225 100644 --- a/minigrep/src/main.rs +++ b/minigrep/src/main.rs @@ -4,9 +4,7 @@ use std::process; use minigrep::Config; fn main() { - let args: Vec<String> = env::args().collect(); - - let config = Config::build(&args).unwrap_or_else(|err| { + let config = Config::build(env::args()).unwrap_or_else(|err| { eprintln!("Problem parsing arguments: {err}"); process::exit(1); });