From 9b85af439d735e2c68925f1dd052ba1cfc05e273 Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Fri, 12 Sep 2025 11:56:11 -0300 Subject: [PATCH] refactor: update filter plugins to use boxed reader/writer parameters Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) --- src/filter_plugin/grep.rs | 8 ++++---- src/filter_plugin/head.rs | 12 ++++++------ src/services/compression_service.rs | 17 +++-------------- 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/filter_plugin/grep.rs b/src/filter_plugin/grep.rs index 8bdfda3..cc38415 100644 --- a/src/filter_plugin/grep.rs +++ b/src/filter_plugin/grep.rs @@ -70,12 +70,12 @@ impl GrepFilter { /// filter.filter(&mut input, &mut output)?; /// ``` impl FilterPlugin for GrepFilter { - fn filter(&mut self, reader: &mut dyn Read, writer: &mut dyn Write) -> Result<()> { - let mut buf_reader = std::io::BufReader::new(reader); + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> { + let mut buf_reader = std::io::BufReader::new(reader.as_mut()); for line in buf_reader.by_ref().lines() { let line = line?; if self.regex.is_match(&line) { - writeln!(writer, "{}", line)?; + writeln!(writer.as_mut(), "{}", line)?; } } Ok(()) @@ -124,4 +124,4 @@ impl FilterPlugin for GrepFilter { } ] } -} \ No newline at end of file +} diff --git a/src/filter_plugin/head.rs b/src/filter_plugin/head.rs index 68a61fe..ec2ce6d 100644 --- a/src/filter_plugin/head.rs +++ b/src/filter_plugin/head.rs @@ -72,7 +72,7 @@ impl HeadBytesFilter { /// // Input "Hello World" becomes "Hello" /// ``` impl FilterPlugin for HeadBytesFilter { - fn filter(&mut self, reader: &mut dyn Read, writer: &mut dyn Write) -> Result<()> { + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> { if self.remaining == 0 { return Ok(()); } @@ -80,11 +80,11 @@ impl FilterPlugin for HeadBytesFilter { let mut buffer = vec![0; PIPESIZE]; while self.remaining > 0 { let to_read = std::cmp::min(self.remaining, PIPESIZE); - let bytes_read = reader.read(&mut buffer[..to_read])?; + let bytes_read = reader.as_mut().read(&mut buffer[..to_read])?; if bytes_read == 0 { break; } - writer.write_all(&buffer[..bytes_read])?; + writer.as_mut().write_all(&buffer[..bytes_read])?; self.remaining -= bytes_read; } Ok(()) @@ -182,15 +182,15 @@ impl HeadLinesFilter { /// // Input "Line1\nLine2\nLine3" becomes "Line1\nLine2\n" /// ``` impl FilterPlugin for HeadLinesFilter { - fn filter(&mut self, reader: &mut dyn Read, writer: &mut dyn Write) -> Result<()> { + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> { if self.remaining == 0 { return Ok(()); } - let mut buf_reader = std::io::BufReader::new(reader); + let mut buf_reader = std::io::BufReader::new(reader.as_mut()); for line in buf_reader.by_ref().lines() { let line = line?; - writeln!(writer, "{}", line)?; + writeln!(writer.as_mut(), "{}", line)?; self.remaining -= 1; if self.remaining == 0 { break; diff --git a/src/services/compression_service.rs b/src/services/compression_service.rs index b604fa9..78163ca 100644 --- a/src/services/compression_service.rs +++ b/src/services/compression_service.rs @@ -5,7 +5,9 @@ use std::path::PathBuf; use std::str::FromStr; use anyhow::anyhow; -//// Service for handling compression and decompression of item content. +pub struct CompressionService; + +/// Service for handling compression and decompression of item content. /// /// Provides methods to read compressed item files either fully into memory /// or as streaming readers. Supports various compression types via engines. @@ -17,19 +19,6 @@ use anyhow::anyhow; /// let service = CompressionService::new(); /// let content = service.get_item_content(path, "gzip")?; /// ``` -pub struct CompressionService; - -/// Service for handling compression and decompression of item content. -/// -/// Provides methods to read compressed item files either fully into memory -/// or as streaming readers. Supports various compression types via engines. -/// -/// # Examples -/// -pub struct CompressionService; - -/// Service for handling compression and decompression of item content. -/// /// Provides methods to read compressed item files either fully into memory /// or as streaming readers. Supports various compression types via engines. ///