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