use std::sync::RwLock; #[derive(Clone)] pub enum BufferChunk { StdOut(String), StdErr(String), } pub struct IoBuffer { buffer: Vec, } impl IoBuffer { const fn new() -> Self { Self { buffer: Vec::new(), } } pub fn get(&self) -> Vec { self.buffer.clone() } pub fn print(&mut self, value: S) where S: std::string::ToString { self.buffer.push(BufferChunk::StdOut(value.to_string())) } pub fn error(&mut self, value: S) where S: std::string::ToString { self.buffer.push(BufferChunk::StdErr(value.to_string())) } } static STDOUT_BUFFER: RwLock = RwLock::new(IoBuffer::new()); pub fn iobuffer() -> &'static RwLock { &STDOUT_BUFFER }