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
29
30
31
use std::{io::{BufReader, BufRead, Write}, fs::File};
use anyhow::Result;
pub fn find_matches(reader: BufReader<File>, pattern: &str, mut writer: impl Write) -> Result<()> {
for line in reader.lines().flatten() {
if line.contains(pattern) {
writeln!(writer, "{}", line)?;
}
}
Ok(())
}
#[cfg(test)]
mod test {
use assert_fs::prelude::*;
use super::*;
#[test]
fn find_match() {
let tmpfile = assert_fs::NamedTempFile::new("temp").unwrap();
tmpfile.write_str("lorem ipsum\ndolor sit amet").unwrap();
let tmpfile_file = File::open(tmpfile.path()).unwrap();
let reader = BufReader::new(tmpfile_file);
let mut result = Vec::new();
find_matches(reader, "lorem", &mut result).unwrap();
assert_eq!(result, b"lorem ipsum\n");
}
}