karyon_net/codec/
bytes_codec.rs1use 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}