acktor/codec/
ipc_message.rs1use 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}