diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..13fdb04 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,18 @@ +use anyhow::Result; + +pub fn find_matches(content: &str, pattern: &str, mut writer: impl std::io::Write) -> Result<()> { + for line in content.lines() { + if line.contains(pattern) { + writeln!(writer, "{}", line)?; + } + } + Ok(()) +} + +#[test] +fn find_a_match() -> Result<(), Box> { + let mut result = Vec::new(); + find_matches("lorem ipsum\ndolar sit amet", "lorem", &mut result)?; + assert_eq!(result, b"lorem ipsum\n"); + Ok(()) +} diff --git a/src/main.rs b/src/main.rs index 1c67f06..1bf8715 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,12 +14,10 @@ fn main() -> Result<()> { info!("starting up"); let args = Cli::parse(); - // let content = std::fs::read_to_string(&args.path).expect("Could not read file."); - let content = std::fs::read_to_string(&args.path) .with_context(|| format!("could not read file `{}`.", args.path.display()))?; - find_matches( + grrs::find_matches( content.as_str(), args.pattern.as_str(), &mut std::io::stdout(), @@ -28,23 +26,6 @@ fn main() -> Result<()> { Ok(()) } -fn find_matches(content: &str, pattern: &str, mut writer: impl std::io::Write) -> Result<()> { - for line in content.lines() { - if line.contains(pattern) { - writeln!(writer, "{}", line)?; - } - } - Ok(()) -} - -#[test] -fn find_a_match() -> Result<(), Box> { - let mut result = Vec::new(); - find_matches("lorem ipsum\ndolar sit amet", "lorem", &mut result)?; - assert_eq!(result, b"lorem ipsum\n"); - Ok(()) -} - #[allow(dead_code)] fn answer() -> i32 { return 42;