minigrep_wzx/
lib.rs

1use std::{env::Args, error::Error, fs};
2
3#[derive(Debug)]
4pub struct Config {
5    pub query: String,
6    pub filename: String,
7}
8impl Config {
9    pub fn new(mut args: Args) -> Result<Config, &'static str> {
10        if args.len() < 3 {
11            return Err("参数不能小于三个");
12        }
13        args.next();
14        let query = match args.next() {
15            Some(_query) => _query,
16            None => return Err("没有获取到查询的参数"),
17        };
18        let filename = match args.next() {
19            Some(_query) => _query,
20            None => return Err("没有获取到文件"),
21        };
22        Ok(Config { query, filename })
23    }
24}
25///在文件里面查询包含关键字的行
26/// # 列子
27/// ```
28/// let content = ""
29/// ```
30pub fn search<'a>(query: &str, content: &'a str) -> Vec<&'a str> {
31    content
32        .lines()
33        .filter(|line| line.contains(query))
34        .collect()
35}
36pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
37    let content = fs::read_to_string(config.filename)?;
38    for line in search(&config.query, &content) {
39        println!("{}", line)
40    }
41    Ok(())
42}