minigrep_yuel/
lib.rs

1use std::error::Error;
2use std::fs;
3
4pub fn run(config:Config) ->Result<(),Box<dyn Error>>{
5    let contents = fs::read_to_string(config.filename)?;
6    for line in search(&config.query, &contents){
7        println!("results :{}",line)
8    }
9    Ok(())
10}
11
12pub struct Config{
13    pub query:String,
14    pub filename:String,
15}
16
17impl Config {
18    pub fn new(args:&[String]) ->Result<Config,&'static str> {
19        if args.len() <3 {
20            return Err("not enough argments")
21        }
22        let query = args[1].clone();
23        let filename = args[2].clone();
24        Ok(Config { query, filename})
25    } 
26}
27
28pub fn search<'a>(query: &str,contents:&'a str) -> Vec<&'a str>{
29
30    let mut results = Vec::new();
31
32    for line in contents.lines(){
33        if line.contains(query){
34            results.push(line);
35        }
36    }
37    results
38}
39
40#[cfg(test)]
41mod tests{
42    use super::*;
43
44    #[test]
45    fn one_result(){
46        let query = "safe,fast,ppp";
47        let contents = "\
48Rust 
49safe,fast,ppp
50fasdfd";
51        assert_eq!(vec!["safe,fast,ppp"],
52                    search(query,contents))
53    }
54}