1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//! A commandline tool that greps a string in a file.
//! Case-sensitive search can be enabled by setting ENV var CASE_SENSITIVE=true; defaults to false.
//! # Usage:
//! ```bash
//! minigrep string filename
//! ```

use std::error::Error;
use std::fs;

pub mod config;
use config::Config;

mod search;
use search::{search_case_insensitive, search_case_sensitive};

#[cfg(test)]
mod tests;

pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
    let contents = fs::read_to_string(config.filename)?;

    let results = match config.case_sensitive {
        true => search_case_sensitive(&config.query, &contents),
        false => search_case_insensitive(&config.query, &contents),
    };

    for line in results {
        println!("{}", line);
    }

    Ok(())
}