diff --git a/src/proto/codec.rs b/src/proto/codec.rs index 91f979a..7863430 100644 --- a/src/proto/codec.rs +++ b/src/proto/codec.rs @@ -4,7 +4,7 @@ use std::marker; use tokio_codec; use bytes::BytesMut; -use super::base_codec::{ProtoEncode, ProtoEncoder}; +use super::base_codec::{Decode, ProtoEncode, ProtoEncoder}; use super::server::{ServerRequest,ServerResponse}; use super::peer::Message; @@ -30,3 +30,21 @@ impl tokio_codec::Encoder for Encoder { pub type ServerRequestEncoder = Encoder; pub type ServerResponseEncoder = Encoder; pub type PeerMessageEncoder = Encoder; + +struct Decoder { + data: marker::PhantomData +} + +impl tokio_codec::Decoder for Decoder +where BytesMut: Decode { + type Item = T; + type Error = io::Error; + + fn decode(&mut self, src: &mut BytesMut) -> Result, Self::Error> { + Ok(Some(src.decode()?)) + } +} + +pub type ServerRequestDecoder = Decoder; +pub type ServerResponseDecoder = Decoder; +pub type PeerMessageDecoder = Decoder;