summaryrefslogtreecommitdiff
path: root/minigrep/src/lib.rs
diff options
context:
space:
mode:
authorAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
committerAdam Carpenter <53hornet@gmail.com>2019-03-27 15:32:37 -0400
commit67cdcc2e12118becb823e20a40cc2687f2b8425a (patch)
treeed92c3234b89079e6d4cf36f5e80c5ffa79def48 /minigrep/src/lib.rs
parente25482fca375d318a39c3b54db396b0db6e0b263 (diff)
downloadlearning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.tar.xz
learning-rust-67cdcc2e12118becb823e20a40cc2687f2b8425a.zip
Started Rust in Action MEAP.
Diffstat (limited to 'minigrep/src/lib.rs')
-rw-r--r--minigrep/src/lib.rs96
1 files changed, 0 insertions, 96 deletions
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)
- );
- }
-}