use std::io;
use tokio::sync::mpsc;
pub enum LogWriter {
Stdout(io::Stdout),
Sender(mpsc::Sender<Vec<u8>>),
}
impl LogWriter {
pub fn new(log_sender: &Option<mpsc::Sender<Vec<u8>>>) -> Self {
if let Some(sender) = log_sender { Self::Sender(sender.clone()) } else { Self::Stdout(io::stdout()) }
}
}
impl io::Write for LogWriter {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
match self {
Self::Stdout(stdout) => stdout.write(buf),
Self::Sender(sender) => {
let log = buf.to_vec();
let _ = sender.try_send(log);
Ok(buf.len())
}
}
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}