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