1
2use std::io::{BufReader, BufRead};
3extern crate tempfile;
4#[cfg(test)]
5use tempfile::NamedTempFile;
6use std::fs::File;
7#[cfg(test)]
8use std::io::{Write};
9extern crate anyhow;
10use anyhow::{Context, Result};
11
12
13pub fn find_matches(reader: BufReader<File>, pattern: &str) -> Result<(), Box<dyn std::error::Error>>{
14 for line in reader.lines() {
15 let content = line.with_context(|| format!("Could not read file"))?;
16 if content.contains(&pattern) {
17 println!("{}", content);
18 }
19 }
20 Ok(())
21}
22
23
24#[test]
25fn test_find_matches() {
26 let input = "Hello, World!\nThis is a test\nAnother line";
27 let pattern = "test";
28
29 let mut temp_file = NamedTempFile::new().unwrap();
30 temp_file.write_all(input.as_bytes()).unwrap();
31
32 let file = temp_file.into_file();
33 let reader = BufReader::new(file);
34
35 find_matches(reader, pattern).unwrap();
36}