diff options
author | Adam Carpenter <53hornet@gmail.com> | 2019-03-27 15:32:37 -0400 |
---|---|---|
committer | Adam Carpenter <53hornet@gmail.com> | 2019-03-27 15:32:37 -0400 |
commit | 67cdcc2e12118becb823e20a40cc2687f2b8425a (patch) | |
tree | ed92c3234b89079e6d4cf36f5e80c5ffa79def48 /minigrep | |
parent | e25482fca375d318a39c3b54db396b0db6e0b263 (diff) | |
download | learning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.tar.xz learning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.zip |
Started Rust in Action MEAP.
Diffstat (limited to 'minigrep')
-rw-r--r-- | minigrep/Cargo.lock | 4 | ||||
-rw-r--r-- | minigrep/Cargo.toml | 8 | ||||
-rw-r--r-- | minigrep/src/lib.rs | 96 | ||||
-rw-r--r-- | minigrep/src/main.rs | 17 |
4 files changed, 0 insertions, 125 deletions
diff --git a/minigrep/Cargo.lock b/minigrep/Cargo.lock deleted file mode 100644 index 5b5afdd..0000000 --- a/minigrep/Cargo.lock +++ /dev/null @@ -1,4 +0,0 @@ -[[package]] -name = "minigrep" -version = "0.1.0" - diff --git a/minigrep/Cargo.toml b/minigrep/Cargo.toml deleted file mode 100644 index 09021c1..0000000 --- a/minigrep/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[package] -name = "minigrep" -version = "0.1.0" -authors = ["Adam Carpenter <53hornet@gmail.com>"] -edition = "2018" - -[dependencies] - diff --git a/minigrep/src/lib.rs b/minigrep/src/lib.rs deleted file mode 100644 index bb8b4d7..0000000 --- a/minigrep/src/lib.rs +++ /dev/null @@ -1,96 +0,0 @@ -use std::env; -use std::error::Error; -use std::fs; - -pub struct Config { - pub query: String, - pub filename: String, - pub case_sensitive: bool, -} - -impl Config { - - pub fn new(mut args: std::env::Args) -> Result<Config, &'static str> { - args.next(); - - let query = match args.next() { - Some(arg) => arg, - None => return Err("Didn't get a query string"), - }; - - let filename = match args.next() { - Some(arg) => arg, - None => return Err("Didn't get a filename"), - }; - - let case_sensitive = env::var("CASE_INSENSITIVE").is_err(); - - Ok(Config { query, filename, case_sensitive }) - } - -} - -pub fn run(config: Config) -> Result<(), Box<dyn Error>> { - let contents = fs::read_to_string(config.filename)?; - - let results = if config.case_sensitive { - search(&config.query, &contents) - } - else { - search_case_insensitive(&config.query, &contents) - }; - - for line in results { - println!("{}", line); - } - - Ok(()) -} - -fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { - contents.lines() - .filter(|line| line.contains(query)) - .collect() -} - -fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> Vec<&'a str> { - contents.lines() - .filter(|line| line.to_lowercase() - .contains(&query.to_lowercase())) - .collect() -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn case_sensitive() { - let query = "duct"; - let contents = "\ -Rust: -safe, fast, productive. -Pick three. -Duct tape."; - - assert_eq!( - vec!["safe, fast, productive."], - search(query, contents) - ); - } - - #[test] - fn case_insensitive() { - let query = "rUsT"; - let contents = "\ -Rust: -safe, fast, productive. -Pick three. -Trust me."; - - assert_eq!( - vec!["Rust:", "Trust me."], - search_case_insensitive(query, contents) - ); - } -} diff --git a/minigrep/src/main.rs b/minigrep/src/main.rs deleted file mode 100644 index c752da1..0000000 --- a/minigrep/src/main.rs +++ /dev/null @@ -1,17 +0,0 @@ -use std::process; -use std::env; - -use minigrep; -use minigrep::Config; - -fn main() { - let config = Config::new(env::args()).unwrap_or_else(|err| { - eprintln!("Problem parsing arguments: {}", err); - process::exit(1); - }); - if let Err(e) = minigrep::run(config) { - eprintln!("Application error: {}", e); - process::exit(1); - } -} - |