1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::io::{Read, Write};

pub struct ByteBuffer {
    pub inner: Vec<u8>,
}

impl Write for ByteBuffer {
    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
        for x in buf {
            self.inner.push(x.clone());
        }
        Ok(buf.len())
    }

    fn flush(&mut self) -> std::io::Result<()> {
        Ok(())
    }
}

impl Read for ByteBuffer {
    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
        let mut idx = 0;
        for x in &self.inner {
            if idx < buf.len() {
                buf[idx] = x.clone();
            } else {
                break;
            }
            idx += 1;
        }
        Ok(idx)
    }
}