use std::cmp::min;
use super::*;
#[derive(Debug)]
pub struct SliceDeserializer<'a> {
slice: &'a [u8],
pos: usize,
}
impl<'a> From<&'a [u8]> for SliceDeserializer<'a> {
fn from(value: &'a [u8]) -> Self {
SliceDeserializer {
slice: value,
pos: 0,
}
}
}
impl Deserializer for SliceDeserializer<'_> {
fn read_n(&mut self, n: usize) -> &[u8] {
let (slice_l, slice_r) = self.slice.split_at(min(n, self.slice.len()));
self.slice = slice_r;
self.pos += slice_l.len();
slice_l
}
fn read_all(&mut self) -> &[u8] {
let slice_l = self.slice;
self.slice = &[];
self.pos += slice_l.len();
slice_l
}
fn tell(&self) -> usize {
self.pos
}
}