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