Skip to content

Commit c0771b2

Browse files
committed
Fixed !!!
1 parent b4dd82c commit c0771b2

File tree

2 files changed

+26
-56
lines changed

2 files changed

+26
-56
lines changed

src/lib.rs

Lines changed: 12 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,11 @@
1-
use std::env;
2-
use std::fmt::Result;
1+
use std::error::Error;
32
use std::fs;
43

5-
pub fn run(config: ()) -> Result {
4+
pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
65
let contents = fs::read_to_string(config.filename)?;
76

8-
let results = if config.case_sensitive {
9-
search(&config.query, &contents)
10-
} else {
11-
search_case_insensitive(&config.query, &contents)
12-
};
13-
14-
for line in results {
15-
println!("{}", line)
7+
for line in search(&config.query, &contents) {
8+
println!("{}", line);
169
}
1710

1811
Ok(())
@@ -21,20 +14,17 @@ pub fn run(config: ()) -> Result {
2114
pub struct Config {
2215
pub query: String,
2316
pub filename: String,
24-
pub case_sensitive: bool,
2517
}
2618

2719
impl Config {
28-
pub fn new(args: &[String]) -> Result {
20+
pub fn new(args: &[String]) -> Result<Config, &str> {
2921
if args.len() < 3 {
30-
return Err(core::fmt::Error::msg("Not enough arguments"));
22+
return Err("Not enough arguments");
3123
}
32-
let query: String = args[1].clone();
33-
let filename: String = args[2].clone();
34-
35-
let case_sensitive = env::var("CASE_INSENSITIVE").is_err();
24+
let query = args[1].clone();
25+
let filename = args[2].clone();
3626

37-
Ok(())
27+
Ok(Config { query, filename })
3828
}
3929
}
4030

@@ -50,47 +40,18 @@ pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
5040
results
5141
}
5242

53-
pub fn search_case_insensitive<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
54-
let query = query.to_lowercase();
55-
let mut results = Vec::new();
56-
57-
for line in contents.lines() {
58-
if line.to_lowercase().contains(&query) {
59-
results.push(line);
60-
}
61-
}
62-
63-
results
64-
}
65-
6643
#[cfg(test)]
6744
mod tests {
68-
use super::*;
45+
use super::search;
6946

7047
#[test]
71-
fn case_sensitive() {
48+
fn one_result() {
7249
let query = "duct";
7350
let contents = "\
7451
Rust:
7552
safe, fast, productive.
76-
Pick three.
77-
Duct tape.";
53+
Pick three.";
7854

7955
assert_eq!(vec!["safe, fast, productive."], search(query, contents));
8056
}
81-
82-
#[test]
83-
fn case_insensitive() {
84-
let query = "rUsT";
85-
let contents = "\
86-
Rust:
87-
safe, fast, productive.
88-
Pick three.
89-
Trust me.";
90-
91-
assert_eq!(
92-
vec!["Rust:", "Trust me."],
93-
search_case_insensitive(query, contents)
94-
)
95-
}
9657
}

src/main.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
use std::env;
2-
use std::fs;
2+
use std::process;
3+
4+
use searcher_txt::Config;
35

46
fn main() {
57
let args: Vec<String> = env::args().collect();
68

7-
let query = &args[1];
8-
let filename = &args[2];
9-
10-
let contents = fs::read_to_string(filename).expect("Error while reading the file");
9+
let config = Config::new(&args).unwrap_or_else(|err| {
10+
println!("Problem parsing arguments : {}", err);
11+
process::exit(1);
12+
});
1113

14+
println!("Searching for \"{}\"", config.query);
15+
println!("In file \"./{}\"", config.filename);
16+
println!("Lines that contain \"{}\" :", config.query);
1217

18+
if let Err(e) = searcher_txt::run(config) {
19+
println!("Application error : {}", e);
20+
process::exit(1);
21+
}
1322
}

0 commit comments

Comments
 (0)