asynchronous_codec/
decoder.rs
1use super::framed_write::FramedWrite2;
2use super::fuse::Fuse;
3use bytes::BytesMut;
4use std::io::Error;
5
6pub trait Decoder {
8 type Item;
10 type Error: From<Error>;
12
13 fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error>;
15
16 fn decode_eof(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
22 self.decode(src)
23 }
24}
25
26impl<T, U: Decoder> Decoder for Fuse<T, U> {
27 type Item = U::Item;
28 type Error = U::Error;
29
30 fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
31 self.u.decode(src)
32 }
33
34 fn decode_eof(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
35 self.u.decode_eof(src)
36 }
37}
38
39impl<T: Decoder> Decoder for FramedWrite2<T> {
40 type Item = T::Item;
41 type Error = T::Error;
42
43 fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
44 self.inner.decode(src)
45 }
46
47 fn decode_eof(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
48 self.inner.decode_eof(src)
49 }
50}