aldrin_core/message/
sync_reply.rs

1use super::message_ops::Sealed;
2use super::{Message, MessageKind, MessageOps};
3use crate::message_deserializer::{MessageDeserializeError, MessageWithoutValueDeserializer};
4use crate::message_serializer::{MessageSerializeError, MessageSerializer};
5use crate::serialized_value::SerializedValueSlice;
6use bytes::BytesMut;
7
8#[derive(Debug, Copy, Clone, PartialEq, Eq)]
9#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
10pub struct SyncReply {
11    pub serial: u32,
12}
13
14impl MessageOps for SyncReply {
15    fn kind(&self) -> MessageKind {
16        MessageKind::SyncReply
17    }
18
19    fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
20        let mut serializer = MessageSerializer::without_value(MessageKind::SyncReply);
21
22        serializer.put_varint_u32_le(self.serial);
23
24        serializer.finish()
25    }
26
27    fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
28        let mut deserializer = MessageWithoutValueDeserializer::new(buf, MessageKind::SyncReply)?;
29
30        let serial = deserializer.try_get_varint_u32_le()?;
31
32        deserializer.finish()?;
33        Ok(Self { serial })
34    }
35
36    fn value(&self) -> Option<&SerializedValueSlice> {
37        None
38    }
39}
40
41impl Sealed for SyncReply {}
42
43impl From<SyncReply> for Message {
44    fn from(msg: SyncReply) -> Self {
45        Self::SyncReply(msg)
46    }
47}
48
49#[cfg(test)]
50mod test {
51    use super::super::test::{assert_deserialize_eq, assert_serialize_eq};
52    use super::super::Message;
53    use super::SyncReply;
54
55    #[test]
56    fn sync_reply() {
57        let serialized = [6, 0, 0, 0, 31, 1];
58
59        let msg = SyncReply { serial: 1 };
60        assert_serialize_eq(&msg, serialized);
61        assert_deserialize_eq(&msg, serialized);
62
63        let msg = Message::SyncReply(msg);
64        assert_serialize_eq(&msg, serialized);
65        assert_deserialize_eq(&msg, serialized);
66    }
67}