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}