aldrin_core/message/
shutdown.rs1use 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;
7
8#[derive(Debug, Copy, Clone, PartialEq, Eq)]
9#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
10pub struct Shutdown;
11
12impl MessageOps for Shutdown {
13 fn kind(&self) -> MessageKind {
14 MessageKind::Shutdown
15 }
16
17 fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
18 MessageSerializer::without_value(MessageKind::Shutdown).finish()
19 }
20
21 fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
22 MessageWithoutValueDeserializer::new(buf, MessageKind::Shutdown)?.finish()?;
23 Ok(Self)
24 }
25
26 fn value(&self) -> Option<&SerializedValueSlice> {
27 None
28 }
29}
30
31impl Sealed for Shutdown {}
32
33impl From<Shutdown> for Message {
34 fn from(msg: Shutdown) -> Self {
35 Self::Shutdown(msg)
36 }
37}
38
39#[cfg(test)]
40mod test {
41 use super::super::test::{assert_deserialize_eq, assert_serialize_eq};
42 use super::super::Message;
43 use super::Shutdown;
44
45 #[test]
46 fn shutdown() {
47 let serialized = [5, 0, 0, 0, 2];
48
49 let msg = Shutdown;
50 assert_serialize_eq(&msg, serialized);
51 assert_deserialize_eq(&msg, serialized);
52
53 let msg = Message::Shutdown(msg);
54 assert_serialize_eq(&msg, serialized);
55 assert_deserialize_eq(&msg, serialized);
56 }
57}