From f527dfc83b3a624f753b30251ee839d996fe86ce Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Tue, 2 Sep 2025 16:33:53 -0300 Subject: [PATCH] fix: Adjust filter trait and implementations for mutable boxed I/O Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/filter_plugin/grep.rs | 6 +++--- src/filter_plugin/head.rs | 12 ++++++------ src/filter_plugin/mod.rs | 2 +- src/filter_plugin/skip.rs | 10 +++++----- src/filter_plugin/strip_ansi.rs | 4 ++-- src/filter_plugin/tail.rs | 12 ++++++------ 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/filter_plugin/grep.rs b/src/filter_plugin/grep.rs index b7e3fe1..d06594a 100644 --- a/src/filter_plugin/grep.rs +++ b/src/filter_plugin/grep.rs @@ -17,12 +17,12 @@ impl GrepFilter { } impl FilterPlugin for GrepFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&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(&mut *reader); for line in buf_reader.by_ref().lines() { let line = line?; if self.regex.is_match(&line) { - writeln!(writer, "{}", line)?; + writeln!(&mut *writer, "{}", line)?; } } Ok(()) diff --git a/src/filter_plugin/head.rs b/src/filter_plugin/head.rs index 4be6f2b..b07f58e 100644 --- a/src/filter_plugin/head.rs +++ b/src/filter_plugin/head.rs @@ -15,7 +15,7 @@ impl HeadBytesFilter { } impl FilterPlugin for HeadBytesFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&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(()); } @@ -23,11 +23,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 = (&mut *reader).read(&mut buffer[..to_read])?; if bytes_read == 0 { break; } - writer.write_all(&buffer[..bytes_read])?; + (&mut *writer).write_all(&buffer[..bytes_read])?; self.remaining -= bytes_read; } Ok(()) @@ -47,15 +47,15 @@ impl HeadLinesFilter { } impl FilterPlugin for HeadLinesFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&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(&mut *reader); for line in buf_reader.by_ref().lines() { let line = line?; - writeln!(writer, "{}", line)?; + writeln!(&mut *writer, "{}", line)?; self.remaining -= 1; if self.remaining == 0 { break; diff --git a/src/filter_plugin/mod.rs b/src/filter_plugin/mod.rs index 6ec4efa..e021beb 100644 --- a/src/filter_plugin/mod.rs +++ b/src/filter_plugin/mod.rs @@ -8,7 +8,7 @@ pub mod strip_ansi; pub mod utils; pub trait FilterPlugin: Send { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()>; + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()>; } pub struct FilterChain { diff --git a/src/filter_plugin/skip.rs b/src/filter_plugin/skip.rs index 07c2b2f..efd02d6 100644 --- a/src/filter_plugin/skip.rs +++ b/src/filter_plugin/skip.rs @@ -15,13 +15,13 @@ impl SkipBytesFilter { } impl FilterPlugin for SkipBytesFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> { + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> { // Skip bytes in chunks if self.remaining > 0 { 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 = (&mut *reader).read(&mut buffer[..to_read])?; if bytes_read == 0 { break; } @@ -48,14 +48,14 @@ impl SkipLinesFilter { } impl FilterPlugin for SkipLinesFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&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(&mut *reader); for line in buf_reader.by_ref().lines() { let line = line?; if self.remaining > 0 { self.remaining -= 1; } else { - writeln!(writer, "{}", line)?; + writeln!(&mut *writer, "{}", line)?; } } Ok(()) diff --git a/src/filter_plugin/strip_ansi.rs b/src/filter_plugin/strip_ansi.rs index ee3e763..e295d81 100644 --- a/src/filter_plugin/strip_ansi.rs +++ b/src/filter_plugin/strip_ansi.rs @@ -11,8 +11,8 @@ impl StripAnsiFilter { } impl FilterPlugin for StripAnsiFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> { - let mut ansi_writer = Writer::new(writer); + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> { + let mut ansi_writer = Writer::new(&mut *writer); std::io::copy(&mut *reader, &mut ansi_writer)?; ansi_writer.flush() } diff --git a/src/filter_plugin/tail.rs b/src/filter_plugin/tail.rs index d46823c..cafb903 100644 --- a/src/filter_plugin/tail.rs +++ b/src/filter_plugin/tail.rs @@ -18,10 +18,10 @@ impl TailBytesFilter { } impl FilterPlugin for TailBytesFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> { + fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> { let mut temp_buffer = vec![0; PIPESIZE]; loop { - let bytes_read = reader.read(&mut temp_buffer)?; + let bytes_read = (&mut *reader).read(&mut temp_buffer)?; if bytes_read == 0 { break; } @@ -37,7 +37,7 @@ impl FilterPlugin for TailBytesFilter { // Write the buffered data at the end let result: Vec = self.buffer.iter().cloned().collect(); - writer.write_all(&result)?; + (&mut *writer).write_all(&result)?; Ok(()) } } @@ -57,8 +57,8 @@ impl TailLinesFilter { } impl FilterPlugin for TailLinesFilter { - fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&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(&mut *reader); for line in buf_reader.by_ref().lines() { let line = line?; if self.lines.len() == self.count { @@ -69,7 +69,7 @@ impl FilterPlugin for TailLinesFilter { // Write the buffered lines for line in &self.lines { - writeln!(writer, "{}", line)?; + writeln!(&mut *writer, "{}", line)?; } Ok(()) }