use std::{ fs::File, io::{BufRead, BufReader}, }; use anyhow::Context; use regex::Regex; pub fn read_lines( file_path: &str, ) -> anyhow::Result>, anyhow::Error> { if file_path.is_empty() { return Err(anyhow::anyhow!("File path cannot be empty")); } let file = File::open(file_path).with_context(|| format!("failed to open file: {file_path}"))?; let reader = BufReader::new(file); Ok(reader.lines()) } pub fn match_pattern( iter: impl Iterator>, pattern: &str, ) -> anyhow::Result, anyhow::Error> { let reg = Regex::new(pattern).with_context(|| format!("invalid regex: {:?}", pattern))?; let lines = iter.collect::>>()?; let matches = lines.into_iter().filter(|line| reg.is_match(line)).collect::>(); Ok(matches) }