diff --git a/src/filter_plugin/strip_ansi.rs b/src/filter_plugin/strip_ansi.rs index 8aa6dc7..14dc113 100644 --- a/src/filter_plugin/strip_ansi.rs +++ b/src/filter_plugin/strip_ansi.rs @@ -1,5 +1,5 @@ use std::io::{Result, Read, Write}; -use strip_ansi_escapes::strip as strip_ansi_escapes; +use strip_ansi_escapes::Writer; use crate::common::PIPESIZE; use super::FilterPlugin; @@ -15,18 +15,16 @@ impl StripAnsiFilter { impl FilterPlugin for StripAnsiFilter { fn filter(&mut self, reader: &mut R, writer: &mut W) -> Result<()> { let mut buffer = vec![0; PIPESIZE]; - let mut processed_data = Vec::new(); + let mut ansi_writer = Writer::new(writer); loop { let bytes_read = reader.read(&mut buffer)?; if bytes_read == 0 { break; } - processed_data.extend_from_slice(&buffer[..bytes_read]); + ansi_writer.write_all(&buffer[..bytes_read])?; } - - let stripped = strip_ansi_escapes(&processed_data); - writer.write_all(&stripped)?; + ansi_writer.flush()?; Ok(()) } }