1pub trait Writer {
2 fn write_byte(&mut self, byte: u8);
3 fn write_bytes(&mut self, bytes: Vec<u8>);
4}
5
6pub struct VecWriter<'a> {
7 pub output: &'a mut Vec<u8>
8}
9
10impl<'a> Writer for VecWriter<'a> {
11 fn write_byte(&mut self, byte: u8) {
12 self.write_bytes(vec![byte])
13 }
14
15 fn write_bytes(&mut self, mut bytes: Vec<u8>) {
16 self.output.append(&mut bytes)
17 }
18}
19
20pub trait Reader {
21 fn read_byte(&mut self) -> u8;
22 fn skip_byte(&mut self);
23 fn peek_byte(&mut self) -> u8;
24 fn read_n_bytes(&mut self, n: usize) -> Vec<u8>;
25}
26
27pub struct VecReader {
28 pub input: Vec<u8>
29}
30
31impl Reader for VecReader {
32 fn read_byte(&mut self) -> u8 {
33 match self.input.clone().split_first() {
34 Some((byte, rest)) => {
35 self.input = rest.to_vec();
36 *byte
37 }
38 None => 0
39 }
40 }
41
42 fn skip_byte(&mut self) {
43 let input = self.input.clone();
44 match input.split_first() {
45 Some((_, rest)) => {
46 self.input = rest.to_vec();
47 }
48 None => ()
49 };
50 }
51
52 fn peek_byte(&mut self) -> u8 {
53 match self.input.first() {
54 Some(byte) => *byte,
55 None => 0
56 }
57 }
58
59 fn read_n_bytes(&mut self, n: usize) -> Vec<u8> {
60 let input = self.input.clone();
61 let (bytes, rest) = input.split_at(n);
62 self.input = rest.to_vec();
63 bytes.to_vec()
64 }
65}