Skip to main content

acktor/codec/
ipc_message.rs

1use bytes::{Bytes, BytesMut};
2
3use acktor_ipc_proto::message::IpcMessage;
4
5use super::error::{DecodeError, EncodeError};
6use super::{Decode, DecodeContext, Encode, EncodeContext};
7
8impl Encode for IpcMessage {
9    #[inline]
10    fn encoded_len(&self) -> usize {
11        prost::Message::encoded_len(self)
12    }
13
14    #[inline]
15    fn encode(
16        &self,
17        buf: &mut BytesMut,
18        _ctx: Option<&dyn EncodeContext>,
19    ) -> Result<(), EncodeError> {
20        prost::Message::encode(self, buf).map_err(Into::into)
21    }
22}
23
24impl Decode for IpcMessage {
25    #[inline]
26    fn decode(buf: Bytes, _ctx: Option<&dyn DecodeContext>) -> Result<Self, DecodeError> {
27        prost::Message::decode(buf).map_err(Into::into)
28    }
29}
30
31#[cfg(test)]
32mod tests {
33    use acktor_ipc_proto::message::ActorMessage;
34
35    use pretty_assertions::assert_eq;
36
37    use super::*;
38
39    #[test]
40    fn test_ipc_message() -> anyhow::Result<()> {
41        let value =
42            IpcMessage::actor_message(ActorMessage::send(1, 2, Bytes::from_static(b"hello"), 3));
43
44        let buf = value.encode_to_bytes(None)?;
45        let decoded = IpcMessage::decode(buf, None)?;
46        assert_eq!(value, decoded);
47
48        Ok(())
49    }
50}