summaryrefslogtreecommitdiff
path: root/minigrep
diff options
context:
space:
mode:
Diffstat (limited to 'minigrep')
-rw-r--r--minigrep/Cargo.lock4
-rw-r--r--minigrep/Cargo.toml8
-rw-r--r--minigrep/src/lib.rs96
-rw-r--r--minigrep/src/main.rs17
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);
- }
-}
-