refactor: Update FilterPlugin methods to use boxed Read/Write traits

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 16:26:13 -03:00
parent 4a1c3f6c92
commit 1cc1ccf15e
3 changed files with 14 additions and 13 deletions

View File

@@ -15,7 +15,7 @@ impl HeadBytesFilter {
} }
impl FilterPlugin for HeadBytesFilter { impl FilterPlugin for HeadBytesFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> 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(());
} }
@@ -47,13 +47,13 @@ impl HeadLinesFilter {
} }
impl FilterPlugin for HeadLinesFilter { impl FilterPlugin for HeadLinesFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> 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 buf_reader = std::io::BufReader::new(reader); let mut buf_reader = std::io::BufReader::new(reader);
for line in buf_reader.lines() { for line in buf_reader.by_ref().lines() {
let line = line?; let line = line?;
writeln!(writer, "{}", line)?; writeln!(writer, "{}", line)?;
self.remaining -= 1; self.remaining -= 1;

View File

@@ -15,7 +15,7 @@ impl SkipBytesFilter {
} }
impl FilterPlugin for SkipBytesFilter { impl FilterPlugin for SkipBytesFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> 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];
@@ -30,7 +30,8 @@ impl FilterPlugin for SkipBytesFilter {
} }
// Copy the remaining data using io::copy for efficiency // Copy the remaining data using io::copy for efficiency
std::io::copy(reader, writer) std::io::copy(&mut *reader, &mut *writer)?;
Ok(())
} }
} }
@@ -47,9 +48,9 @@ impl SkipLinesFilter {
} }
impl FilterPlugin for SkipLinesFilter { impl FilterPlugin for SkipLinesFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> Result<()> { fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
let buf_reader = std::io::BufReader::new(reader); let mut buf_reader = std::io::BufReader::new(reader);
for line in buf_reader.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;

View File

@@ -18,7 +18,7 @@ impl TailBytesFilter {
} }
impl FilterPlugin for TailBytesFilter { impl FilterPlugin for TailBytesFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> 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 = reader.read(&mut temp_buffer)?;
@@ -57,9 +57,9 @@ impl TailLinesFilter {
} }
impl FilterPlugin for TailLinesFilter { impl FilterPlugin for TailLinesFilter {
fn filter<R: Read, W: Write>(&mut self, reader: &mut R, writer: &mut W) -> Result<()> { fn filter(&mut self, reader: Box<&mut dyn Read>, writer: Box<&mut dyn Write>) -> Result<()> {
let buf_reader = std::io::BufReader::new(reader); let mut buf_reader = std::io::BufReader::new(reader);
for line in buf_reader.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 {
self.lines.pop_front(); self.lines.pop_front();