From 9dbb5c37c273091d8cc6762a464392309413d0a0 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sat, 22 Sep 2018 23:40:24 +0000 Subject: [PATCH] Implement tokio_codec::Decoder for all message types. --- src/proto/codec.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) 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;