use alloc::sync::Arc;
use crate::cmdline::UseColor;
use crate::errors::{Error, Result};
pub(crate) struct ColorBuffer {
buffer_writer: Arc<termcolor::BufferWriter>,
pub(crate) color_buffer: termcolor::Buffer,
}
impl ColorBuffer {
pub(crate) fn for_stdout(use_color: UseColor) -> Self {
let buffer_writer = termcolor::BufferWriter::stdout(use_color.into());
let color_buffer = buffer_writer.buffer();
Self {
buffer_writer: Arc::new(buffer_writer),
color_buffer,
}
}
pub(crate) fn print(&self) -> Result<()> {
self.buffer_writer
.print(&self.color_buffer)
.map_err(|r| Error::from_io1(r, "print", "standard output stream"))?;
Ok(())
}
}
impl Clone for ColorBuffer {
fn clone(&self) -> Self {
Self {
buffer_writer: Arc::clone(&self.buffer_writer),
color_buffer: self.buffer_writer.buffer(),
}
}
}