use crate::formatter::Formatter;
use crate::layer::Tree;
use crate::processor::Processor;
use std::io::Write;
use tracing_subscriber::fmt::MakeWriter;
pub struct BlockingProcessor<F, W> {
formatter: F,
make_writer: W,
}
impl<F, W> BlockingProcessor<F, W>
where
F: 'static + Formatter,
W: 'static + for<'a> MakeWriter<'a>,
{
pub fn new(formatter: F, make_writer: W) -> Self {
BlockingProcessor {
formatter,
make_writer,
}
}
}
impl<F, W> Processor for BlockingProcessor<F, W>
where
F: 'static + Formatter,
W: 'static + for<'a> MakeWriter<'a>,
{
fn process(&self, tree: Tree) {
let mut buf = Vec::with_capacity(0);
#[allow(clippy::expect_used)]
{
self.formatter
.fmt(tree, &mut buf)
.expect("formatting failed");
self.make_writer
.make_writer()
.write_all(&buf[..])
.expect("writing failed");
}
}
}