diff --git a/.project b/.project
new file mode 100644
index 0000000..197bba1
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+
+
+ minigrep
+
+
+
+
+
+
+
+
diff --git a/file_to_match.txt b/file_to_match.txt
index 78b11ad..a98d406 100644
--- a/file_to_match.txt
+++ b/file_to_match.txt
@@ -1,4 +1,4 @@
Jai Sri Ram
Jai Hanuman
Ram ka Mandir ban raha hai
-Hanuman Ram Bhakt hai
+Hanuman ram Bhakt hai
diff --git a/src/lib.rs b/src/lib.rs
index 93c06ec..74ccac9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -8,25 +8,34 @@ pub struct Configs {
}
impl Configs {
- pub fn new(args: &Vec) -> Result {
+ pub fn new(args: &mut std::env::Args) -> Result {
if args.len() < 3 {
return Err("\
minigrep [pattern] [filename] case
adding \"case\" is optional to enable case sensitive grep");
}
-
- let mut is_sensitive = false;
-
- if let Some(o) = args.get(3) {
- if o == "case" {
- is_sensitive = true;
- }
- }
-
+
+ args.next();
+
+ let pattern = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Pattern Not got")
+ };
+
+ let filename = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Filenane Not got")
+ };
+
+ let is_case_sensitive = match args.next() {
+ Some(arg) => arg == "case",
+ None => false
+ };
+
Ok(Configs {
- pattern: args[1].clone(),
- filename: args[2].clone(),
- is_case_sensitive: is_sensitive,
+ pattern,
+ filename,
+ is_case_sensitive,
})
}
}
@@ -44,27 +53,19 @@ pub fn run(conf: Configs) -> Result<(), Box> {
}
pub fn search_case_sensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
- let mut vec: Vec<&'a str> = vec![];
-
- for line in contents.lines() {
- if line.contains(pattern) {
- vec.push(line);
- }
- }
-
- vec
+ contents.lines()
+ .filter(
+ |lin| lin
+ .contains(&pattern))
+ .collect()
}
pub fn search_case_insensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
- let mut vec: Vec<&'a str> = vec![];
- let pattern = pattern.to_lowercase();
-
- for line in contents.lines() {
- if line.to_lowercase().contains(&pattern) {
- vec.push(line);
- }
- }
- vec
+ contents.lines()
+ .filter(
+ |lin| lin.to_lowercase()
+ .contains(&pattern.to_lowercase()))
+ .collect()
}
pub fn print_output(out: Vec<&str>) {
diff --git a/src/main.rs b/src/main.rs
index ef1fe06..438ac82 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2,15 +2,15 @@ use std::env;
use std::process;
fn main() {
- let args: Vec = env::args().collect();
+ let mut args = env::args();
- let conf = minigrep::Configs::new(&args).unwrap_or_else(|err| {
+ let conf = minigrep::Configs::new(&mut args).unwrap_or_else(|err| {
eprintln!("{}", err);
process::exit(1);
});
if let Err(e) = minigrep::run(conf) {
eprintln!("Error: {}", e);
- process::exit(0);
+ process::exit(1);
}
}