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