aldrin_core/message/
unsubscribe_all_events_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;
7use num_enum::{IntoPrimitive, TryFromPrimitive};
8
9#[derive(Debug, Copy, Clone, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
10#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
11#[repr(u8)]
12pub enum UnsubscribeAllEventsResult {
13 Ok = 0,
14 InvalidService = 1,
15 NotSupported = 2,
16}
17
18#[derive(Debug, Copy, Clone, PartialEq, Eq)]
19#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
20pub struct UnsubscribeAllEventsReply {
21 pub serial: u32,
22 pub result: UnsubscribeAllEventsResult,
23}
24
25impl MessageOps for UnsubscribeAllEventsReply {
26 fn kind(&self) -> MessageKind {
27 MessageKind::UnsubscribeAllEventsReply
28 }
29
30 fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
31 let mut serializer =
32 MessageSerializer::without_value(MessageKind::UnsubscribeAllEventsReply);
33
34 serializer.put_varint_u32_le(self.serial);
35 serializer.put_discriminant_u8(self.result);
36
37 serializer.finish()
38 }
39
40 fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
41 let mut deserializer =
42 MessageWithoutValueDeserializer::new(buf, MessageKind::UnsubscribeAllEventsReply)?;
43
44 let serial = deserializer.try_get_varint_u32_le()?;
45 let result = deserializer.try_get_discriminant_u8()?;
46
47 deserializer.finish()?;
48 Ok(Self { serial, result })
49 }
50
51 fn value(&self) -> Option<&SerializedValueSlice> {
52 None
53 }
54}
55
56impl Sealed for UnsubscribeAllEventsReply {}
57
58impl From<UnsubscribeAllEventsReply> for Message {
59 fn from(msg: UnsubscribeAllEventsReply) -> Self {
60 Self::UnsubscribeAllEventsReply(msg)
61 }
62}
63
64#[cfg(test)]
65mod test {
66 use super::super::test::{assert_deserialize_eq, assert_serialize_eq};
67 use super::super::Message;
68 use super::{UnsubscribeAllEventsReply, UnsubscribeAllEventsResult};
69
70 #[test]
71 fn ok() {
72 let serialized = [7, 0, 0, 0, 61, 1, 0];
73
74 let msg = UnsubscribeAllEventsReply {
75 serial: 1,
76 result: UnsubscribeAllEventsResult::Ok,
77 };
78 assert_serialize_eq(&msg, serialized);
79 assert_deserialize_eq(&msg, serialized);
80
81 let msg = Message::UnsubscribeAllEventsReply(msg);
82 assert_serialize_eq(&msg, serialized);
83 assert_deserialize_eq(&msg, serialized);
84 }
85
86 #[test]
87 fn invalid_service() {
88 let serialized = [7, 0, 0, 0, 61, 1, 1];
89
90 let msg = UnsubscribeAllEventsReply {
91 serial: 1,
92 result: UnsubscribeAllEventsResult::InvalidService,
93 };
94 assert_serialize_eq(&msg, serialized);
95 assert_deserialize_eq(&msg, serialized);
96
97 let msg = Message::UnsubscribeAllEventsReply(msg);
98 assert_serialize_eq(&msg, serialized);
99 assert_deserialize_eq(&msg, serialized);
100 }
101
102 #[test]
103 fn not_supported() {
104 let serialized = [7, 0, 0, 0, 61, 1, 2];
105
106 let msg = UnsubscribeAllEventsReply {
107 serial: 1,
108 result: UnsubscribeAllEventsResult::NotSupported,
109 };
110 assert_serialize_eq(&msg, serialized);
111 assert_deserialize_eq(&msg, serialized);
112
113 let msg = Message::UnsubscribeAllEventsReply(msg);
114 assert_serialize_eq(&msg, serialized);
115 assert_deserialize_eq(&msg, serialized);
116 }
117}