aoe2_probe/io/
source.rs

1pub struct Source {
2    len: usize,
3    pub raw: Vec<u8>,
4    pub pos: usize,
5}
6
7impl Source {
8    pub fn new(buffer: Vec<u8>) -> Self {
9        Source {
10            len: buffer.len(),
11            pos: 0,
12            raw: buffer,
13        }
14    }
15
16    pub fn get_vec(&mut self, expect: usize) -> Result<Vec<u8>, String> {
17        if expect + self.pos > self.len + 1 {
18            return Err(String::from("Request too many data!"));
19        }
20
21        let mut buffer = Vec::with_capacity(expect);
22
23        let from = &self.raw[self.pos..(self.pos + expect)];
24
25        buffer.extend_from_slice(from);
26        self.pos += expect;
27
28        Ok(buffer)
29    }
30
31    pub fn get_rest_vec(&mut self) -> Vec<u8> {
32        let rest = self.raw[self.pos..].to_vec();
33        self.pos = self.len + 1;
34        rest
35    }
36}