use crate::traits::{Byteable, Reader};
pub struct ByteReader<'a> {
pub bytes: &'a [u8],
pub pos: usize,
}
impl<'a> ByteReader<'a> {
pub fn new(bytes: &'a [u8]) -> Self {
ByteReader {
bytes,
pos: 0,
}
}
}
impl Reader for ByteReader<'_> {
fn read_u8(&mut self) -> Option<u8> {
if self.pos + 1 <= self.bytes.len() {
let value = self.bytes[self.pos];
self.pos += 1;
Some(value)
} else {
None
}
}
fn read<T: Byteable>(&mut self) -> Option<T> {
T::from_bytes(self)
}
fn remaining(&self) -> usize {
self.bytes.len() - self.pos
}
fn reset(&mut self) {
self.pos = 0;
}
fn skip(&mut self, len: usize) -> bool {
if self.pos + len <= self.bytes.len() {
self.pos += len;
true
} else {
false
}
}
}