|
|
@ -1,19 +1,23 @@ |
|
|
use std::io;
|
|
|
use std::io;
|
|
|
|
|
|
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::{ProtoEncode, ProtoEncoder};
|
|
|
use super::server::ServerRequest;
|
|
|
|
|
|
|
|
|
use super::server::{ServerRequest,ServerResponse};
|
|
|
|
|
|
use super::peer::Message;
|
|
|
|
|
|
|
|
|
/*===================================*
|
|
|
/*===================================*
|
|
|
* TOKIO CODEC TRAIT IMPLEMENTATIONS *
|
|
|
* TOKIO CODEC TRAIT IMPLEMENTATIONS *
|
|
|
*===================================*/
|
|
|
*===================================*/
|
|
|
|
|
|
|
|
|
struct ServerRequestEncoder;
|
|
|
|
|
|
|
|
|
struct Encoder<T> {
|
|
|
|
|
|
data: marker::PhantomData<T>
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
impl tokio_codec::Encoder for ServerRequestEncoder {
|
|
|
|
|
|
type Item = ServerRequest;
|
|
|
|
|
|
|
|
|
impl<T: ProtoEncode> tokio_codec::Encoder for Encoder<T> {
|
|
|
|
|
|
type Item = T;
|
|
|
type Error = io::Error;
|
|
|
type Error = io::Error;
|
|
|
|
|
|
|
|
|
fn encode(&mut self, item: Self::Item, dst: &mut BytesMut) -> Result<(), Self::Error> {
|
|
|
fn encode(&mut self, item: Self::Item, dst: &mut BytesMut) -> Result<(), Self::Error> {
|
|
|
@ -22,3 +26,7 @@ impl tokio_codec::Encoder for ServerRequestEncoder { |
|
|
Ok(())
|
|
|
Ok(())
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pub type ServerRequestEncoder = Encoder<ServerRequest>;
|
|
|
|
|
|
pub type ServerResponseEncoder = Encoder<ServerResponse>;
|
|
|
|
|
|
pub type PeerMessageEncoder = Encoder<Message>;
|