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