From cbca3bd0d86be20a50e78d1115d8ba8bb0a3854a Mon Sep 17 00:00:00 2001 From: Manuel Thalmann <m@nuth.ch> Date: Wed, 26 Mar 2025 00:07:44 +0100 Subject: [PATCH] Initialize configuration using iterators --- minigrep/src/lib.rs | 20 ++++++++++++++------ minigrep/src/main.rs | 4 +--- 2 files changed, 15 insertions(+), 9 deletions(-) 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); });