1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use indicatif::ProgressBar;
#[allow(unused_imports)]
use std::io::{BufRead, BufReader};
#[allow(unused_imports)]
use stringreader::StringReader;

pub fn find_matches(reader: impl BufRead, pattern: &str, pb: &ProgressBar) -> Vec<String> {
    let mut output = Vec::new();

    for line in reader.lines() {
        let line = line.expect("");

        pb.inc(1);

        if line.contains(pattern) {
            output.push(line);
        }
    }
    output
}

#[test]
fn find_a_match() {
    let reader = BufReader::new(StringReader::new("terry\nperry\nberry\nyes"));
    let pb = ProgressBar::new(100);
    let result = find_matches(reader, "erry", &pb).join("\n");
    assert_eq!(result, "terry\nperry\nberry");
}