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}