grrs_spitfire/
lib.rs

1use std::{io::{BufReader, BufRead, Write}, fs::File};
2
3use anyhow::Result;
4
5pub fn find_matches(reader: BufReader<File>, pattern: &str, mut writer: impl Write) -> Result<()> {
6    for line in reader.lines().flatten() {
7        if line.contains(pattern) {
8            writeln!(writer, "{}", line)?;
9        }
10    }
11    Ok(())
12}
13
14#[cfg(test)]
15mod test {
16    use assert_fs::prelude::*;
17    use super::*;
18
19    #[test]
20    fn find_match() {
21        let tmpfile = assert_fs::NamedTempFile::new("temp").unwrap();
22        tmpfile.write_str("lorem ipsum\ndolor sit amet").unwrap();
23
24        let tmpfile_file = File::open(tmpfile.path()).unwrap();
25
26        let reader = BufReader::new(tmpfile_file);
27        let mut result = Vec::new();
28        find_matches(reader, "lorem", &mut result).unwrap();
29        assert_eq!(result, b"lorem ipsum\n");
30    }
31}