use std::sync::{Arc, Mutex};
#[derive(Clone, Default)]
pub struct LogBuf(Arc<Mutex<Vec<u8>>>);
impl LogBuf {
pub fn contents(&self) -> String {
String::from_utf8(self.0.lock().unwrap().clone()).unwrap()
}
}
impl std::io::Write for LogBuf {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.0.lock().unwrap().extend_from_slice(buf);
Ok(buf.len())
}
fn flush(&mut self) -> std::io::Result<()> {
Ok(())
}
}
impl<'a> tracing_subscriber::fmt::MakeWriter<'a> for LogBuf {
type Writer = LogBuf;
fn make_writer(&'a self) -> Self::Writer {
self.clone()
}
}