aldrin_core/message/
channel_end_closed.rs1use super::message_ops::Sealed;
2use super::{Message, MessageKind, MessageOps};
3use crate::channel_end::ChannelEnd;
4use crate::ids::ChannelCookie;
5use crate::message_deserializer::{MessageDeserializeError, MessageWithoutValueDeserializer};
6use crate::message_serializer::{MessageSerializeError, MessageSerializer};
7use crate::serialized_value::SerializedValueSlice;
8use bytes::BytesMut;
9
10#[derive(Debug, Copy, Clone, PartialEq, Eq)]
11#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
12pub struct ChannelEndClosed {
13 pub cookie: ChannelCookie,
14 pub end: ChannelEnd,
15}
16
17impl MessageOps for ChannelEndClosed {
18 fn kind(&self) -> MessageKind {
19 MessageKind::ChannelEndClosed
20 }
21
22 fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
23 let mut serializer = MessageSerializer::without_value(MessageKind::ChannelEndClosed);
24
25 serializer.put_uuid(self.cookie.0);
26 serializer.put_discriminant_u8(self.end);
27
28 serializer.finish()
29 }
30
31 fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
32 let mut deserializer =
33 MessageWithoutValueDeserializer::new(buf, MessageKind::ChannelEndClosed)?;
34
35 let cookie = deserializer.try_get_uuid().map(ChannelCookie)?;
36 let end = deserializer.try_get_discriminant_u8()?;
37
38 deserializer.finish()?;
39 Ok(Self { cookie, end })
40 }
41
42 fn value(&self) -> Option<&SerializedValueSlice> {
43 None
44 }
45}
46
47impl Sealed for ChannelEndClosed {}
48
49impl From<ChannelEndClosed> for Message {
50 fn from(msg: ChannelEndClosed) -> Self {
51 Self::ChannelEndClosed(msg)
52 }
53}
54
55#[cfg(test)]
56mod test {
57 use super::super::test::{assert_deserialize_eq, assert_serialize_eq};
58 use super::super::Message;
59 use super::ChannelEndClosed;
60 use crate::channel_end::ChannelEnd;
61 use crate::ids::ChannelCookie;
62 use uuid::uuid;
63
64 #[test]
65 fn sender() {
66 let serialized = [
67 22, 0, 0, 0, 23, 0x89, 0xe6, 0x24, 0x38, 0x29, 0x91, 0x48, 0xf8, 0xae, 0x1d, 0x7a,
68 0xd9, 0xdd, 0xcd, 0x7e, 0x72, 0,
69 ];
70
71 let msg = ChannelEndClosed {
72 cookie: ChannelCookie(uuid!("89e62438-2991-48f8-ae1d-7ad9ddcd7e72")),
73 end: ChannelEnd::Sender,
74 };
75 assert_serialize_eq(&msg, serialized);
76 assert_deserialize_eq(&msg, serialized);
77
78 let msg = Message::ChannelEndClosed(msg);
79 assert_serialize_eq(&msg, serialized);
80 assert_deserialize_eq(&msg, serialized);
81 }
82
83 #[test]
84 fn receiver() {
85 let serialized = [
86 22, 0, 0, 0, 23, 0x89, 0xe6, 0x24, 0x38, 0x29, 0x91, 0x48, 0xf8, 0xae, 0x1d, 0x7a,
87 0xd9, 0xdd, 0xcd, 0x7e, 0x72, 1,
88 ];
89
90 let msg = ChannelEndClosed {
91 cookie: ChannelCookie(uuid!("89e62438-2991-48f8-ae1d-7ad9ddcd7e72")),
92 end: ChannelEnd::Receiver,
93 };
94 assert_serialize_eq(&msg, serialized);
95 assert_deserialize_eq(&msg, serialized);
96
97 let msg = Message::ChannelEndClosed(msg);
98 assert_serialize_eq(&msg, serialized);
99 assert_deserialize_eq(&msg, serialized);
100 }
101}