aldrin_core/message/
unsubscribe_all_events_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;
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}