cbor_lite/
io.rs

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}