1use karyon_core::util::{decode, encode, encode_into_slice};
2
3use karyon_net::codec::{ByteBuffer, Codec, Decoder, Encoder, LengthCodec};
4
5use crate::{
6 message::{NetMsg, RefreshMsg},
7 Error, Result,
8};
9
10#[derive(Clone)]
11pub struct NetMsgCodec {
12 inner_codec: LengthCodec,
13}
14
15impl NetMsgCodec {
16 pub fn new() -> Self {
17 Self {
18 inner_codec: LengthCodec {},
19 }
20 }
21}
22
23impl Codec for NetMsgCodec {
24 type Message = NetMsg;
25 type Error = Error;
26}
27
28impl Encoder for NetMsgCodec {
29 type EnMessage = NetMsg;
30 type EnError = Error;
31 fn encode(&self, src: &Self::EnMessage, dst: &mut ByteBuffer) -> Result<usize> {
32 let src = encode(src)?;
33 Ok(self.inner_codec.encode(&src, dst)?)
34 }
35}
36
37impl Decoder for NetMsgCodec {
38 type DeMessage = NetMsg;
39 type DeError = Error;
40 fn decode(&self, src: &mut ByteBuffer) -> Result<Option<(usize, Self::DeMessage)>> {
41 match self.inner_codec.decode(src)? {
42 Some((n, s)) => {
43 let (m, _) = decode::<Self::DeMessage>(&s)?;
44 Ok(Some((n, m)))
45 }
46 None => Ok(None),
47 }
48 }
49}
50
51#[derive(Clone)]
52pub struct RefreshMsgCodec {}
53
54impl Codec for RefreshMsgCodec {
55 type Message = RefreshMsg;
56 type Error = Error;
57}
58
59impl Encoder for RefreshMsgCodec {
60 type EnMessage = RefreshMsg;
61 type EnError = Error;
62 fn encode(&self, src: &Self::EnMessage, dst: &mut ByteBuffer) -> Result<usize> {
63 let n = encode_into_slice(src, dst.as_mut())?;
64 Ok(n)
65 }
66}
67
68impl Decoder for RefreshMsgCodec {
69 type DeMessage = RefreshMsg;
70 type DeError = Error;
71 fn decode(&self, src: &mut ByteBuffer) -> Result<Option<(usize, Self::DeMessage)>> {
72 let (m, n) = decode::<Self::DeMessage>(src.as_ref())?;
73 Ok(Some((n, m)))
74 }
75}