1#[derive(Debug)]
2pub struct Buffer {
3 pub size: Option<usize>,
4 pub position: u64,
5 pub max_end_position: Option<u64>,
6 pub buffer: Vec<u8>,
7}
8
9impl Buffer {
10 pub fn create() -> Buffer {
11 Buffer {
12 size: None,
13 position: 0,
14 max_end_position: None,
15 buffer: Vec::new(),
16 }
17 }
18
19 pub fn get_cached_size(&self) -> usize {
20 self.buffer.len()
21 }
22
23 pub fn get_data(&mut self, buf: &mut [u8]) -> bool {
24 if buf.len() > self.buffer.len() {
25 return false;
26 }
27 let next_data = self.buffer.split_off(buf.len());
28 buf.clone_from_slice(&self.buffer);
29 self.buffer = next_data;
30
31 debug!("left #{:?}", self.buffer.len());
32 true
33 }
34
35 pub fn append_data(&mut self, full_data: &[u8]) {
36 self.buffer.extend_from_slice(full_data);
37 }
38
39 pub fn reset(&mut self) {
40 self.buffer = vec![];
41 self.position = 0;
42 }
43}