1use std::{io, io::Write};
2
3#[derive(Debug)]
4pub struct WriteBuffer(pub(super) Vec<u8>);
5
6impl Default for WriteBuffer {
7 fn default() -> Self {
8 Self(Vec::with_capacity(1024))
9 }
10}
11
12impl WriteBuffer {
13 pub fn buf(&self) -> &Vec<u8> {
14 let WriteBuffer(buf) = self;
15 buf
16 }
17
18 pub fn mbuf(&mut self) -> &mut Vec<u8> {
19 let WriteBuffer(buf) = self;
20 buf
21 }
22
23 pub fn clear(&mut self) {
24 self.mbuf().clear();
25 }
26
27 pub fn flush(&mut self) {
28 let _ = io::stdout().lock().write(self.buf().as_slice());
29 self.clear();
30 }
31
32 pub fn push(&mut self, byte: u8) {
33 {
34 let should_flush = {
35 let buf = self.buf();
36 buf.len() == buf.capacity()
37 };
38
39 if should_flush {
40 self.flush();
41 }
42 }
43
44 self.mbuf().push(byte);
45 }
46}