lun/base/
write_buffer.rs

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}