aldrin_core/message/
abort_function_call.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 AbortFunctionCall {
11    pub serial: u32,
12}
13
14impl MessageOps for AbortFunctionCall {
15    fn kind(&self) -> MessageKind {
16        MessageKind::AbortFunctionCall
17    }
18
19    fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
20        let mut serializer = MessageSerializer::without_value(MessageKind::AbortFunctionCall);
21
22        serializer.put_varint_u32_le(self.serial);
23
24        serializer.finish()
25    }
26
27    fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
28        let mut deserializer =
29            MessageWithoutValueDeserializer::new(buf, MessageKind::AbortFunctionCall)?;
30
31        let serial = deserializer.try_get_varint_u32_le()?;
32
33        deserializer.finish()?;
34        Ok(Self { serial })
35    }
36
37    fn value(&self) -> Option<&SerializedValueSlice> {
38        None
39    }
40}
41
42impl Sealed for AbortFunctionCall {}
43
44impl From<AbortFunctionCall> for Message {
45    fn from(msg: AbortFunctionCall) -> Self {
46        Self::AbortFunctionCall(msg)
47    }
48}
49
50#[cfg(test)]
51mod test {
52    use super::super::test::{assert_deserialize_eq, assert_serialize_eq};
53    use super::super::Message;
54    use super::AbortFunctionCall;
55
56    #[test]
57    fn sync() {
58        let serialized = [6, 0, 0, 0, 48, 1];
59
60        let msg = AbortFunctionCall { serial: 1 };
61        assert_serialize_eq(&msg, serialized);
62        assert_deserialize_eq(&msg, serialized);
63
64        let msg = Message::AbortFunctionCall(msg);
65        assert_serialize_eq(&msg, serialized);
66        assert_deserialize_eq(&msg, serialized);
67    }
68}