1use crate::types::essential::Word;
2
3pub trait Read {
5 type Error: core::fmt::Debug + core::fmt::Display;
7
8 fn read(&mut self, buf: &mut [Word]) -> Result<usize, Self::Error>;
15}
16
17impl<T: Read> Read for &'_ mut T {
18 type Error = T::Error;
19 fn read(&mut self, buf: &mut [Word]) -> Result<usize, Self::Error> {
20 (*self).read(buf)
21 }
22}
23
24impl Read for &'_ [Word] {
25 type Error = core::convert::Infallible;
26 fn read(&mut self, buf: &mut [Word]) -> Result<usize, Self::Error> {
27 let amt = core::cmp::min(self.len(), buf.len());
28 let (a, b) = self.split_at(amt);
29 buf[..amt].copy_from_slice(a);
30 *self = b;
31 Ok(amt)
32 }
33}