use std::io::Write;
pub struct DefaultWriter {
imp: Box<dyn std::io::Write>,
}
impl DefaultWriter {
pub fn new(inplace: bool, input_file: &str) -> Self {
DefaultWriter {
imp: if inplace {
Box::new(std::fs::File::create(input_file).expect("Failed to open file"))
} else {
Box::new(std::io::stdout())
},
}
}
}
impl Write for DefaultWriter {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
let buf = String::from_utf8(buf.to_vec()).unwrap();
let buf = buf.replace("\r", "");
if buf.is_empty() {
return Ok(0);
}
self.imp.write(buf.as_ref())
}
fn flush(&mut self) -> std::io::Result<()> {
self.imp.flush()
}
fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> {
let buf = String::from_utf8(buf.to_vec()).unwrap();
let buf = buf.replace("\r", "");
if !buf.is_empty() {
let _ = self.imp.write(buf.as_ref());
}
return Ok(());
}
}