1mod buffer;
2mod bytes_codec;
3mod length_codec;
4#[cfg(feature = "ws")]
5mod websocket;
6
7pub use buffer::{Buffer, ByteBuffer};
8pub use bytes_codec::BytesCodec;
9pub use length_codec::LengthCodec;
10
11#[cfg(feature = "ws")]
12pub use websocket::{WebSocketCodec, WebSocketDecoder, WebSocketEncoder};
13
14pub trait Codec:
15 Decoder<DeMessage = Self::Message, DeError = Self::Error>
16 + Encoder<EnMessage = Self::Message, EnError = Self::Error>
17 + Send
18 + Sync
19 + Unpin
20{
21 type Message: Send + Sync;
22 type Error;
23}
24
25pub trait Encoder {
26 type EnMessage;
27 type EnError: From<std::io::Error>;
28 fn encode(
29 &self,
30 src: &Self::EnMessage,
31 dst: &mut ByteBuffer,
32 ) -> std::result::Result<usize, Self::EnError>;
33}
34
35pub trait Decoder {
36 type DeMessage;
37 type DeError: From<std::io::Error>;
38 fn decode(
39 &self,
40 src: &mut ByteBuffer,
41 ) -> std::result::Result<Option<(usize, Self::DeMessage)>, Self::DeError>;
42}