use crate::mem; #[derive(Copy, Clone)] pub struct IoSlice<'a>(&'a [u8]); impl<'a> IoSlice<'a> { #[inline] pub fn new(buf: &'a [u8]) -> IoSlice<'a> { IoSlice(buf) } #[inline] pub fn advance(&mut self, n: usize) { self.0 = &self.0[n..] } #[inline] pub fn as_slice(&self) -> &[u8] { self.0 } } pub struct IoSliceMut<'a>(&'a mut [u8]); impl<'a> IoSliceMut<'a> { #[inline] pub fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> { IoSliceMut(buf) } #[inline] pub fn advance(&mut self, n: usize) { let slice = mem::replace(&mut self.0, &mut []); let (_, remaining) = slice.split_at_mut(n); self.0 = remaining; } #[inline] pub fn as_slice(&self) -> &[u8] { self.0 } #[inline] pub fn as_mut_slice(&mut self) -> &mut [u8] { self.0 } } pub fn is_terminal(_: &T) -> bool { false }