Browse Source

Implement tokio_codec::Decoder for all message types.

wip
Titouan Rigoudy 7 years ago
parent
commit
9dbb5c37c2
1 changed files with 19 additions and 1 deletions
  1. +19
    -1
      src/proto/codec.rs

+ 19
- 1
src/proto/codec.rs View File

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

Loading…
Cancel
Save