karyon_net/codec/
bytes_codec.rs

1use crate::{
2    codec::{ByteBuffer, Codec, Decoder, Encoder},
3    Error, Result,
4};
5
6#[derive(Clone)]
7pub struct BytesCodec {}
8impl Codec for BytesCodec {
9    type Message = Vec<u8>;
10    type Error = Error;
11}
12
13impl Encoder for BytesCodec {
14    type EnMessage = Vec<u8>;
15    type EnError = Error;
16    fn encode(&self, src: &Self::EnMessage, dst: &mut ByteBuffer) -> Result<usize> {
17        dst.extend_from_slice(src);
18        Ok(src.len())
19    }
20}
21
22impl Decoder for BytesCodec {
23    type DeMessage = Vec<u8>;
24    type DeError = Error;
25    fn decode(&self, src: &mut ByteBuffer) -> Result<Option<(usize, Self::DeMessage)>> {
26        if src.is_empty() {
27            Ok(None)
28        } else {
29            Ok(Some((src.len(), src.as_ref().to_vec())))
30        }
31    }
32}