From 452483b1b37753abd032ade3e3097503c824b910 Mon Sep 17 00:00:00 2001 From: Mohammad Kanaan Date: Mon, 27 Jul 2026 11:43:48 +0300 Subject: [PATCH] feat: implement an iterator to get the test with a test consumer --- src/main.rs | 8 +++++++- src/parser.rs | 27 +++++++++++++++++++++++++++ test.txt | 2 ++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/parser.rs create mode 100644 test.txt diff --git a/src/main.rs b/src/main.rs index 2f1140d..3befdee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ use clap::Parser; +mod parser; #[derive(Parser)] struct Cli { @@ -6,9 +7,14 @@ struct Cli { file_path: String, } -fn main() { +fn main() -> anyhow::Result<()> { let cli = Cli::parse(); + let lines_iter = parser::read_lines(&cli.file_path)?; + parser::consume_lines(lines_iter); + println!("Pattern: {}", cli.pattern); println!("File path: {}", cli.file_path); + + Ok(()) } diff --git a/src/parser.rs b/src/parser.rs new file mode 100644 index 0000000..9f00f16 --- /dev/null +++ b/src/parser.rs @@ -0,0 +1,27 @@ +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +use anyhow::Context; + +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 consume_lines(iter: impl Iterator>) { + for line in iter { + let line = line.unwrap_or("".into()); + println!("{line}"); + } +} diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..0c21a56 --- /dev/null +++ b/test.txt @@ -0,0 +1,2 @@ +hola +no