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