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