Initialize configuration using iterators
This commit is contained in:
parent
9cd6c7bdef
commit
cbca3bd0d8
2 changed files with 15 additions and 9 deletions
|
@ -8,13 +8,21 @@ pub struct Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
pub fn build(args: &[String]) -> Result<Config, &'static str> {
|
pub fn build(
|
||||||
if args.len() < 3 {
|
mut args: impl Iterator<Item = String>
|
||||||
return Err("not enough arguments");
|
) -> 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();
|
let ignore_case = env::var("IGNORE_CASE").is_ok();
|
||||||
|
|
||||||
Ok(Config {
|
Ok(Config {
|
||||||
|
|
|
@ -4,9 +4,7 @@ use std::process;
|
||||||
use minigrep::Config;
|
use minigrep::Config;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = env::args().collect();
|
let config = Config::build(env::args()).unwrap_or_else(|err| {
|
||||||
|
|
||||||
let config = Config::build(&args).unwrap_or_else(|err| {
|
|
||||||
eprintln!("Problem parsing arguments: {err}");
|
eprintln!("Problem parsing arguments: {err}");
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue