fix: Adjust filter trait and implementations for mutable boxed I/O
Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
@@ -17,12 +17,12 @@ impl GrepFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for GrepFilter {
|
impl FilterPlugin for GrepFilter {
|
||||||
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 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() {
|
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!(&mut *writer, "{}", line)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ impl HeadBytesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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 {
|
if self.remaining == 0 {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
@@ -23,11 +23,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 = (&mut *reader).read(&mut buffer[..to_read])?;
|
||||||
if bytes_read == 0 {
|
if bytes_read == 0 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
writer.write_all(&buffer[..bytes_read])?;
|
(&mut *writer).write_all(&buffer[..bytes_read])?;
|
||||||
self.remaining -= bytes_read;
|
self.remaining -= bytes_read;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -47,15 +47,15 @@ impl HeadLinesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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 {
|
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(&mut *reader);
|
||||||
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!(&mut *writer, "{}", line)?;
|
||||||
self.remaining -= 1;
|
self.remaining -= 1;
|
||||||
if self.remaining == 0 {
|
if self.remaining == 0 {
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -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, 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 {
|
pub struct FilterChain {
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ impl SkipBytesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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
|
// Skip bytes in chunks
|
||||||
if self.remaining > 0 {
|
if self.remaining > 0 {
|
||||||
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 = (&mut *reader).read(&mut buffer[..to_read])?;
|
||||||
if bytes_read == 0 {
|
if bytes_read == 0 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -48,14 +48,14 @@ impl SkipLinesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for SkipLinesFilter {
|
impl FilterPlugin for SkipLinesFilter {
|
||||||
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 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() {
|
for line in buf_reader.by_ref().lines() {
|
||||||
let line = line?;
|
let line = line?;
|
||||||
if self.remaining > 0 {
|
if self.remaining > 0 {
|
||||||
self.remaining -= 1;
|
self.remaining -= 1;
|
||||||
} else {
|
} else {
|
||||||
writeln!(writer, "{}", line)?;
|
writeln!(&mut *writer, "{}", line)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ impl StripAnsiFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for StripAnsiFilter {
|
impl FilterPlugin for StripAnsiFilter {
|
||||||
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 ansi_writer = Writer::new(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,10 +18,10 @@ impl TailBytesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for 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];
|
let mut temp_buffer = vec![0; PIPESIZE];
|
||||||
loop {
|
loop {
|
||||||
let bytes_read = reader.read(&mut temp_buffer)?;
|
let bytes_read = (&mut *reader).read(&mut temp_buffer)?;
|
||||||
if bytes_read == 0 {
|
if bytes_read == 0 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ impl FilterPlugin for TailBytesFilter {
|
|||||||
|
|
||||||
// Write the buffered data at the end
|
// Write the buffered data at the end
|
||||||
let result: Vec<u8> = self.buffer.iter().cloned().collect();
|
let result: Vec<u8> = self.buffer.iter().cloned().collect();
|
||||||
writer.write_all(&result)?;
|
(&mut *writer).write_all(&result)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -57,8 +57,8 @@ impl TailLinesFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl FilterPlugin for TailLinesFilter {
|
impl FilterPlugin for TailLinesFilter {
|
||||||
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 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() {
|
for line in buf_reader.by_ref().lines() {
|
||||||
let line = line?;
|
let line = line?;
|
||||||
if self.lines.len() == self.count {
|
if self.lines.len() == self.count {
|
||||||
@@ -69,7 +69,7 @@ impl FilterPlugin for TailLinesFilter {
|
|||||||
|
|
||||||
// Write the buffered lines
|
// Write the buffered lines
|
||||||
for line in &self.lines {
|
for line in &self.lines {
|
||||||
writeln!(writer, "{}", line)?;
|
writeln!(&mut *writer, "{}", line)?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user