pub trait DecodeError {
type Error;
}
impl<D> DecodeError for &mut D
where
D: DecodeError,
{
type Error = D::Error;
}
pub trait Decoder<'buf>: DecodeError {
type Item;
fn decode(&mut self, src: &'buf mut [u8]) -> Result<Option<(Self::Item, usize)>, Self::Error>;
fn decode_eof(
&mut self,
src: &'buf mut [u8],
) -> Result<Option<(Self::Item, usize)>, Self::Error> {
self.decode(src)
}
}
impl<'buf, D> Decoder<'buf> for &mut D
where
D: Decoder<'buf>,
{
type Item = D::Item;
fn decode(&mut self, src: &'buf mut [u8]) -> Result<Option<(Self::Item, usize)>, Self::Error> {
(*self).decode(src)
}
fn decode_eof(
&mut self,
src: &'buf mut [u8],
) -> Result<Option<(Self::Item, usize)>, Self::Error> {
(*self).decode_eof(src)
}
}