use crate::{BufRead, Read};
impl Read for &[u8] {
#[inline]
async 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)
}
async fn read_exact(
&mut self,
buf: &mut [u8],
) -> Result<(), embedded_io::ReadExactError<Self::Error>> {
if self.len() < buf.len() {
return Err(crate::ReadExactError::UnexpectedEof);
}
self.read(buf).await?;
Ok(())
}
}
impl BufRead for &[u8] {
#[inline]
async fn fill_buf(&mut self) -> Result<&[u8], Self::Error> {
Ok(*self)
}
#[inline]
fn consume(&mut self, amt: usize) {
*self = &self[amt..];
}
}