use log::trace;
#[derive(Debug)]
pub struct Slicer<'de> {
input: &'de [u8],
input_index: usize,
}
impl<'de> Slicer<'de> {
pub fn new(input: &'de [u8]) -> Self {
Slicer {
input,
input_index: 0,
}
}
#[inline]
pub fn slice(&mut self, len: usize) -> Option<&'de [u8]> {
trace!("slice");
let slice = self.input.get(self.input_index..self.input_index + len);
if slice.is_some() {
self.input_index += len;
}
slice
}
#[inline]
pub fn slice_unchecked(&mut self, len: usize) -> &'de [u8] {
trace!("slice_unchecked");
let slice = &self.input[self.input_index..self.input_index + len];
self.input_index += len;
slice
}
#[inline]
pub fn slice_remainder(&mut self) -> &'de [u8] {
trace!("slice_remainder");
let slice = &self.input[self.input_index..];
self.reset();
slice
}
#[inline]
pub fn reset(&mut self) {
self.input_index = 0;
}
}