bytebuilder 0.3.0

A simple binary serializer/deserializer
Documentation
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
        }
    }
}