Optimised args with iterator and search functions with iterator
This commit is contained in:
parent
ffac6a0f03
commit
0055b3553d
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>minigrep</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
Jai Sri Ram
|
Jai Sri Ram
|
||||||
Jai Hanuman
|
Jai Hanuman
|
||||||
Ram ka Mandir ban raha hai
|
Ram ka Mandir ban raha hai
|
||||||
Hanuman Ram Bhakt hai
|
Hanuman ram Bhakt hai
|
||||||
|
|
|
||||||
57
src/lib.rs
57
src/lib.rs
|
|
@ -8,25 +8,34 @@ pub struct Configs {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Configs {
|
impl Configs {
|
||||||
pub fn new(args: &Vec<String>) -> Result<Configs, &'static str> {
|
pub fn new(args: &mut std::env::Args) -> Result<Configs, &'static str> {
|
||||||
if args.len() < 3 {
|
if args.len() < 3 {
|
||||||
return Err("\
|
return Err("\
|
||||||
minigrep [pattern] [filename] case
|
minigrep [pattern] [filename] case
|
||||||
adding \"case\" is optional to enable case sensitive grep");
|
adding \"case\" is optional to enable case sensitive grep");
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut is_sensitive = false;
|
args.next();
|
||||||
|
|
||||||
if let Some(o) = args.get(3) {
|
let pattern = match args.next() {
|
||||||
if o == "case" {
|
Some(arg) => arg,
|
||||||
is_sensitive = true;
|
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 {
|
Ok(Configs {
|
||||||
pattern: args[1].clone(),
|
pattern,
|
||||||
filename: args[2].clone(),
|
filename,
|
||||||
is_case_sensitive: is_sensitive,
|
is_case_sensitive,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -44,27 +53,19 @@ pub fn run(conf: Configs) -> Result<(), Box<dyn Error>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn search_case_sensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
|
pub fn search_case_sensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
|
||||||
let mut vec: Vec<&'a str> = vec![];
|
contents.lines()
|
||||||
|
.filter(
|
||||||
for line in contents.lines() {
|
|lin| lin
|
||||||
if line.contains(pattern) {
|
.contains(&pattern))
|
||||||
vec.push(line);
|
.collect()
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vec
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn search_case_insensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
|
pub fn search_case_insensitive<'a>(pattern: &str, contents: &'a str) -> Vec<&'a str> {
|
||||||
let mut vec: Vec<&'a str> = vec![];
|
contents.lines()
|
||||||
let pattern = pattern.to_lowercase();
|
.filter(
|
||||||
|
|lin| lin.to_lowercase()
|
||||||
for line in contents.lines() {
|
.contains(&pattern.to_lowercase()))
|
||||||
if line.to_lowercase().contains(&pattern) {
|
.collect()
|
||||||
vec.push(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
vec
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_output(out: Vec<&str>) {
|
pub fn print_output(out: Vec<&str>) {
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,15 @@ use std::env;
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = 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);
|
eprintln!("{}", err);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
if let Err(e) = minigrep::run(conf) {
|
if let Err(e) = minigrep::run(conf) {
|
||||||
eprintln!("Error: {}", e);
|
eprintln!("Error: {}", e);
|
||||||
process::exit(0);
|
process::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue