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
pub trait InputStream { fn read(&mut self, length: usize) -> &[u8]; fn len(&self) -> usize; } pub struct ByteArrayInputStream<'a> { index: usize, bytes: &'a [u8], } impl ByteArrayInputStream<'_> { pub fn new(b: &[u8]) -> ByteArrayInputStream { ByteArrayInputStream { index: 0, bytes: b, } } } impl InputStream for ByteArrayInputStream<'_> { fn read(&mut self, length: usize) -> &[u8] { let i = self.index; self.index = self.bytes.len().min(self.index + length); return &self.bytes[i..self.index]; } fn len(&self) -> usize { return self.bytes.len() - self.index; } }