karyon_net/codec/
bytes_codec.rs1use crate::{codec::Codec, ByteBuffer, Error, Result};
2
3const MAX_BUFFER_SIZE: usize = 4 * 1024 * 1024; #[derive(Clone)]
6pub struct BytesCodec {
7 max_size: usize,
8}
9
10impl Default for BytesCodec {
11 fn default() -> Self {
12 Self {
13 max_size: MAX_BUFFER_SIZE,
14 }
15 }
16}
17
18impl BytesCodec {
19 pub fn new(max_size: usize) -> Self {
20 Self { max_size }
21 }
22}
23
24impl Codec<ByteBuffer> for BytesCodec {
25 type Message = Vec<u8>;
26 type Error = Error;
27
28 fn encode(&self, src: &Vec<u8>, dst: &mut ByteBuffer) -> Result<usize> {
29 if src.len() > self.max_size {
30 return Err(Error::BufferFull(format!(
31 "Buffer size {} exceeds maximum {}",
32 src.len(),
33 self.max_size
34 )));
35 }
36
37 dst.extend_from_slice(src);
38 Ok(src.len())
39 }
40
41 fn decode(&self, src: &mut ByteBuffer) -> Result<Option<(usize, Vec<u8>)>> {
42 if src.len() > self.max_size {
43 return Err(Error::BufferFull(format!(
44 "Buffer size {} exceeds maximum {}",
45 src.len(),
46 self.max_size
47 )));
48 }
49
50 if src.is_empty() {
51 Ok(None)
52 } else {
53 Ok(Some((src.len(), src.as_ref().to_vec())))
54 }
55 }
56}