use crate::{BufRead, ErrorType, Read}; impl ErrorType for &[u8] { type Error = core::convert::Infallible; } /// Read is implemented for `&[u8]` by copying from the slice. /// /// Note that reading updates the slice to point to the yet unread part. /// The slice will be empty when EOF is reached. impl Read for &[u8] { #[inline] fn read(&mut self, buf: &mut [u8]) -> Result { let amt = core::cmp::min(buf.len(), self.len()); let (a, b) = self.split_at(amt); // First check if the amount of bytes we want to read is small: // `copy_from_slice` will generally expand to a call to `memcpy`, and // for a single byte the overhead is significant. if amt == 1 { buf[0] = a[0]; } else { buf[..amt].copy_from_slice(a); } *self = b; Ok(amt) } } 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..]; } }