karyon_net/codec/
mod.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
mod bytes_codec;
mod length_codec;
#[cfg(feature = "ws")]
mod websocket;

pub use bytes_codec::BytesCodec;
pub use length_codec::LengthCodec;

#[cfg(feature = "ws")]
pub use websocket::{WebSocketCodec, WebSocketDecoder, WebSocketEncoder};

pub trait Codec:
    Decoder<DeMessage = Self::Message, DeError = Self::Error>
    + Encoder<EnMessage = Self::Message, EnError = Self::Error>
    + Send
    + Sync
    + Unpin
{
    type Message: Send + Sync;
    type Error;
}

pub trait Encoder {
    type EnMessage;
    type EnError: From<std::io::Error>;
    fn encode(
        &self,
        src: &Self::EnMessage,
        dst: &mut [u8],
    ) -> std::result::Result<usize, Self::EnError>;
}

pub trait Decoder {
    type DeMessage;
    type DeError: From<std::io::Error>;
    fn decode(
        &self,
        src: &mut [u8],
    ) -> std::result::Result<Option<(usize, Self::DeMessage)>, Self::DeError>;
}