From 359fc2b0b7dd7a47a2ecc4250038e9a8fa72d131 Mon Sep 17 00:00:00 2001 From: Rowan Torbitzky-Lane Date: Mon, 31 Mar 2025 13:26:26 -0500 Subject: [PATCH] ch13.03 done --- ch12/minigrep/src/lib.rs | 54 +++++++++++++++++++++++++++++---------- ch12/minigrep/src/main.rs | 6 +++-- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/ch12/minigrep/src/lib.rs b/ch12/minigrep/src/lib.rs index f1d25b6..e948e62 100644 --- a/ch12/minigrep/src/lib.rs +++ b/ch12/minigrep/src/lib.rs @@ -34,15 +34,37 @@ impl Config { } } - pub fn build(args: &[String]) -> Result { - if args.len() < 3 { - return Err("not enough arguments"); - } + // pub fn build(args: &[String]) -> Result { + // if args.len() < 3 { + // return Err("not enough arguments"); + // } + + // Ok(Config { + // query: args[1].clone(), + // file_path: args[2].clone(), + // ignore_case: env::var("IGNORE_CASE").is_ok(), + // }) + // } + + pub fn build(mut args: impl Iterator) -> Result { + 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 ignore_case = env::var("IGNORE_CASE").is_ok(); Ok(Config { - query: args[1].clone(), - file_path: args[2].clone(), - ignore_case: env::var("IGNORE_CASE").is_ok(), + query, + file_path, + ignore_case, }) } } @@ -68,15 +90,19 @@ pub fn run(config: Config) -> Result<(), Box> { } pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { - let mut results = Vec::new(); + contents + .lines() + .filter(|line| line.contains(query)) + .collect() + // let mut results = Vec::new(); - for line in contents.lines() { - if line.contains(query) { - results.push(line); - } - } + // for line in contents.lines() { + // if line.contains(query) { + // results.push(line); + // } + // } - results + // results } pub fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { diff --git a/ch12/minigrep/src/main.rs b/ch12/minigrep/src/main.rs index 7d4a8c4..9c4b60d 100644 --- a/ch12/minigrep/src/main.rs +++ b/ch12/minigrep/src/main.rs @@ -20,8 +20,9 @@ use std::process; use minigrep::Config; +// The modifications for ch13 are added in this version fn main() { - let args: Vec = env::args().collect(); + // let args: Vec = env::args().collect(); // dbg!(args); // let config = Config::new(&args); @@ -29,7 +30,8 @@ fn main() { // unwrap_or_else passes an argument to a closure which is an // anonymous function // eprintln!() for output to stdout - let config = Config::build(&args).unwrap_or_else(|err| { + // 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); });