pub mod buffer;
pub mod prost;
pub mod serde_codec;
use std::io;
pub use self::buffer::{DecodeBuf, EncodeBuf};
use crate::status::Status;
pub trait Codec {
type Encode: Send + 'static;
type Decode: Send + 'static;
type Encoder: Encoder<Item = Self::Encode, Error = Status> + Send + 'static;
type Decoder: Decoder<Item = Self::Decode, Error = Status> + Send + 'static;
fn encoder(&mut self) -> Self::Encoder;
fn decoder(&mut self) -> Self::Decoder;
}
pub trait Encoder {
type Item;
type Error: From<io::Error>;
fn encode(&mut self, item: Self::Item, dst: &mut EncodeBuf<'_>) -> Result<(), Self::Error>;
}
pub trait Decoder {
type Item;
type Error: From<io::Error>;
fn decode(&mut self, src: &mut DecodeBuf<'_>) -> Result<Option<Self::Item>, Self::Error>;
}