aldrin_core/message/
sync_reply.rs1use 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}