use crate::{BufRead, ErrorType, Read, ReadReady};
impl ErrorType for &[u8] {
type Error = core::convert::Infallible;
}
impl Read for &[u8] {
#[inline]
fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> {
let amt = core::cmp::min(buf.len(), self.len());
let (a, b) = self.split_at(amt);
if amt == 1 {
buf[0] = a[0];
} else {
buf[..amt].copy_from_slice(a);
}
*self = b;
Ok(amt)
}
#[inline]
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), crate::ReadExactError<Self::Error>> {
if self.len() < buf.len() {
return Err(crate::ReadExactError::UnexpectedEof);
}
self.read(buf)?;
Ok(())
}
}
impl BufRead for &[u8] {
#[inline]
fn fill_buf(&mut self) -> Result<&[u8], Self::Error> {
Ok(*self)
}
#[inline]
fn consume(&mut self, amt: usize) {
*self = &self[amt..];
}
}
impl ReadReady for &[u8] {
#[inline]
fn read_ready(&mut self) -> Result<bool, Self::Error> {
Ok(true)
}
}