30 lines
619 B
Rust
30 lines
619 B
Rust
|
#[derive(Default)]
|
||
|
pub struct LoggerSink {
|
||
|
buffer: Vec<u8>,
|
||
|
}
|
||
|
|
||
|
impl std::io::Write for LoggerSink {
|
||
|
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
|
||
|
self.buffer.extend(buf.iter());
|
||
|
|
||
|
if self.buffer.ends_with(b"\n") {
|
||
|
self.flush()?;
|
||
|
}
|
||
|
|
||
|
Ok(buf.len())
|
||
|
}
|
||
|
|
||
|
fn flush(&mut self) -> std::io::Result<()> {
|
||
|
use std::str;
|
||
|
|
||
|
debug!(
|
||
|
"{}",
|
||
|
str::from_utf8(self.buffer.as_mut())
|
||
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidData, e))?
|
||
|
.trim()
|
||
|
);
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
}
|