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