refactor: update filter plugins to use boxed reader/writer parameters

Co-authored-by: aider (openai/andrew/openrouter/sonoma-sky-alpha) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-09-12 11:56:11 -03:00
parent 0be54abe60
commit 9b85af439d
3 changed files with 13 additions and 24 deletions

View File

@@ -70,12 +70,12 @@ impl GrepFilter {
/// filter.filter(&mut input, &mut output)?; /// filter.filter(&mut input, &mut output)?;
/// ``` /// ```
impl FilterPlugin for GrepFilter { impl FilterPlugin for GrepFilter {
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<()> {
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() { for line in buf_reader.by_ref().lines() {
let line = line?; let line = line?;
if self.regex.is_match(&line) { if self.regex.is_match(&line) {
writeln!(writer, "{}", line)?; writeln!(writer.as_mut(), "{}", line)?;
} }
} }
Ok(()) Ok(())

View File

@@ -72,7 +72,7 @@ impl HeadBytesFilter {
/// // Input "Hello World" becomes "Hello" /// // Input "Hello World" becomes "Hello"
/// ``` /// ```
impl FilterPlugin for HeadBytesFilter { 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 { if self.remaining == 0 {
return Ok(()); return Ok(());
} }
@@ -80,11 +80,11 @@ impl FilterPlugin for HeadBytesFilter {
let mut buffer = vec![0; PIPESIZE]; let mut buffer = vec![0; PIPESIZE];
while self.remaining > 0 { while self.remaining > 0 {
let to_read = std::cmp::min(self.remaining, PIPESIZE); 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 { if bytes_read == 0 {
break; break;
} }
writer.write_all(&buffer[..bytes_read])?; writer.as_mut().write_all(&buffer[..bytes_read])?;
self.remaining -= bytes_read; self.remaining -= bytes_read;
} }
Ok(()) Ok(())
@@ -182,15 +182,15 @@ impl HeadLinesFilter {
/// // Input "Line1\nLine2\nLine3" becomes "Line1\nLine2\n" /// // Input "Line1\nLine2\nLine3" becomes "Line1\nLine2\n"
/// ``` /// ```
impl FilterPlugin for HeadLinesFilter { 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 { if self.remaining == 0 {
return Ok(()); 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() { for line in buf_reader.by_ref().lines() {
let line = line?; let line = line?;
writeln!(writer, "{}", line)?; writeln!(writer.as_mut(), "{}", line)?;
self.remaining -= 1; self.remaining -= 1;
if self.remaining == 0 { if self.remaining == 0 {
break; break;

View File

@@ -5,7 +5,9 @@ use std::path::PathBuf;
use std::str::FromStr; use std::str::FromStr;
use anyhow::anyhow; 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 /// Provides methods to read compressed item files either fully into memory
/// or as streaming readers. Supports various compression types via engines. /// or as streaming readers. Supports various compression types via engines.
@@ -17,19 +19,6 @@ use anyhow::anyhow;
/// let service = CompressionService::new(); /// let service = CompressionService::new();
/// let content = service.get_item_content(path, "gzip")?; /// 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 /// Provides methods to read compressed item files either fully into memory
/// or as streaming readers. Supports various compression types via engines. /// or as streaming readers. Supports various compression types via engines.
/// ///