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:
@@ -17,7 +17,7 @@ impl GrepFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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);
|
let mut buf_reader = std::io::BufReader::new(&mut *reader);
|
||||||
for line in buf_reader.by_ref().lines() {
|
for line in buf_reader.by_ref().lines() {
|
||||||
let line = line?;
|
let line = line?;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ impl HeadBytesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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 {
|
if self.remaining == 0 {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
@@ -47,7 +47,7 @@ impl HeadLinesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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 {
|
if self.remaining == 0 {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ pub mod strip_ansi;
|
|||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|
||||||
pub trait FilterPlugin: Send {
|
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 {
|
pub struct FilterChain {
|
||||||
@@ -44,16 +44,16 @@ impl FilterChain {
|
|||||||
for i in 0..plugins_len {
|
for i in 0..plugins_len {
|
||||||
// Create a cursor for the current data
|
// Create a cursor for the current data
|
||||||
let mut cursor = std::io::Cursor::new(¤t_data);
|
let mut cursor = std::io::Cursor::new(¤t_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
|
// For the last plugin, write directly to the output writer
|
||||||
if i == plugins_len - 1 {
|
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)?;
|
self.plugins[i].filter(input, output)?;
|
||||||
} else {
|
} else {
|
||||||
// For intermediate plugins, write to a buffer
|
// For intermediate plugins, write to a buffer
|
||||||
let mut output = Vec::new();
|
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)?;
|
self.plugins[i].filter(input, output_ref)?;
|
||||||
current_data = output;
|
current_data = output;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ impl SkipBytesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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
|
// Skip bytes in chunks
|
||||||
if self.remaining > 0 {
|
if self.remaining > 0 {
|
||||||
let mut buffer = vec![0; PIPESIZE];
|
let mut buffer = vec![0; PIPESIZE];
|
||||||
@@ -48,7 +48,7 @@ impl SkipLinesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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);
|
let mut buf_reader = std::io::BufReader::new(&mut *reader);
|
||||||
for line in buf_reader.by_ref().lines() {
|
for line in buf_reader.by_ref().lines() {
|
||||||
let line = line?;
|
let line = line?;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ impl StripAnsiFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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);
|
let mut ansi_writer = Writer::new(&mut *writer);
|
||||||
std::io::copy(&mut *reader, &mut ansi_writer)?;
|
std::io::copy(&mut *reader, &mut ansi_writer)?;
|
||||||
ansi_writer.flush()
|
ansi_writer.flush()
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ impl TailBytesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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];
|
let mut temp_buffer = vec![0; PIPESIZE];
|
||||||
loop {
|
loop {
|
||||||
let bytes_read = (&mut *reader).read(&mut temp_buffer)?;
|
let bytes_read = (&mut *reader).read(&mut temp_buffer)?;
|
||||||
@@ -57,7 +57,7 @@ impl TailLinesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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);
|
let mut buf_reader = std::io::BufReader::new(&mut *reader);
|
||||||
for line in buf_reader.by_ref().lines() {
|
for line in buf_reader.by_ref().lines() {
|
||||||
let line = line?;
|
let line = line?;
|
||||||
|
|||||||
Reference in New Issue
Block a user