fix: Make reader and writer mutable in FilterPlugin and implementations

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-09-02 17:01:51 -03:00
parent f527dfc83b
commit 5232e7d866
6 changed files with 12 additions and 12 deletions

View File

@@ -17,7 +17,7 @@ impl GrepFilter {
}
impl FilterPlugin for GrepFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
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(&mut *reader);
for line in buf_reader.by_ref().lines() {
let line = line?;

View File

@@ -15,7 +15,7 @@ impl HeadBytesFilter {
}
impl FilterPlugin for HeadBytesFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> {
if self.remaining == 0 {
return Ok(());
}
@@ -47,7 +47,7 @@ impl HeadLinesFilter {
}
impl FilterPlugin for HeadLinesFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> {
if self.remaining == 0 {
return Ok(());
}

View File

@@ -8,7 +8,7 @@ pub mod strip_ansi;
pub mod utils;
pub trait FilterPlugin: Send {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()>;
fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()>;
}
pub struct FilterChain {
@@ -44,16 +44,16 @@ impl FilterChain {
for i in 0..plugins_len {
// Create a cursor for the current data
let mut cursor = std::io::Cursor::new(&current_data);
let mut input: Box<&mut dyn Read> = Box::new(&mut cursor);
let input: Box<&mut dyn Read> = Box::new(&mut cursor);
// For the last plugin, write directly to the output writer
if i == plugins_len - 1 {
let mut output: Box<&mut dyn Write> = Box::new(writer);
let output: Box<&mut dyn Write> = Box::new(writer);
self.plugins[i].filter(input, output)?;
} else {
// For intermediate plugins, write to a buffer
let mut output = Vec::new();
let mut output_ref: Box<&mut dyn Write> = Box::new(&mut output);
let output_ref: Box<&mut dyn Write> = Box::new(&mut output);
self.plugins[i].filter(input, output_ref)?;
current_data = output;
}

View File

@@ -15,7 +15,7 @@ impl SkipBytesFilter {
}
impl FilterPlugin for SkipBytesFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> {
// Skip bytes in chunks
if self.remaining > 0 {
let mut buffer = vec![0; PIPESIZE];
@@ -48,7 +48,7 @@ impl SkipLinesFilter {
}
impl FilterPlugin for SkipLinesFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
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(&mut *reader);
for line in buf_reader.by_ref().lines() {
let line = line?;

View File

@@ -11,7 +11,7 @@ impl StripAnsiFilter {
}
impl FilterPlugin for StripAnsiFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut 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()

View File

@@ -18,7 +18,7 @@ impl TailBytesFilter {
}
impl FilterPlugin for TailBytesFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
fn filter(&mut self, mut reader: Box<&mut dyn Read>, mut writer: Box<&mut dyn Write>) -> Result<()> {
let mut temp_buffer = vec![0; PIPESIZE];
loop {
let bytes_read = (&mut *reader).read(&mut temp_buffer)?;
@@ -57,7 +57,7 @@ impl TailLinesFilter {
}
impl FilterPlugin for TailLinesFilter {
fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
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(&mut *reader);
for line in buf_reader.by_ref().lines() {
let line = line?;