aldrin_core/message/
register_introspection.rs1use super::message_ops::Sealed;
2use super::{Message, MessageKind, MessageOps};
3use crate::error::{DeserializeError, SerializeError};
4use crate::ids::TypeId;
5use crate::message_deserializer::{MessageDeserializeError, MessageWithValueDeserializer};
6use crate::message_serializer::{MessageSerializeError, MessageSerializer};
7use crate::serialized_value::{SerializedValue, SerializedValueSlice};
8use bytes::BytesMut;
9use std::collections::HashSet;
10
11#[derive(Debug, Clone, PartialEq, Eq)]
12#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
13pub struct RegisterIntrospection {
14 pub value: SerializedValue,
15}
16
17impl RegisterIntrospection {
18 pub fn with_serialize_type_ids(type_ids: &HashSet<TypeId>) -> Result<Self, SerializeError> {
19 let value = SerializedValue::serialize(type_ids)?;
20 Ok(Self { value })
21 }
22
23 pub fn deserialize_type_ids(&self) -> Result<HashSet<TypeId>, DeserializeError> {
24 self.value.deserialize()
25 }
26}
27
28impl MessageOps for RegisterIntrospection {
29 fn kind(&self) -> MessageKind {
30 MessageKind::RegisterIntrospection
31 }
32
33 fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
34 MessageSerializer::with_value(self.value, MessageKind::RegisterIntrospection)?.finish()
35 }
36
37 fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
38 let value =
39 MessageWithValueDeserializer::new(buf, MessageKind::RegisterIntrospection)?.finish()?;
40
41 Ok(Self { value })
42 }
43
44 fn value(&self) -> Option<&SerializedValueSlice> {
45 Some(&self.value)
46 }
47}
48
49impl Sealed for RegisterIntrospection {}
50
51impl From<RegisterIntrospection> for Message {
52 fn from(msg: RegisterIntrospection) -> Self {
53 Self::RegisterIntrospection(msg)
54 }
55}
56
57#[cfg(test)]
58mod test {
59 use super::super::test::assert_serialize_eq;
60 use super::super::Message;
61 use super::RegisterIntrospection;
62 use crate::ids::TypeId;
63 use uuid::uuid;
64
65 #[test]
66 fn emit_event() {
67 let serialized = [
68 27, 0, 0, 0, 49, 18, 0, 0, 0, 38, 1, 0x02, 0x6c, 0x31, 0x42, 0x53, 0x0b, 0x4d, 0x65,
69 0x85, 0x0d, 0xa2, 0x97, 0xdc, 0xc2, 0xfe, 0xcb,
70 ];
71 let ids = Some(TypeId(uuid!("026c3142-530b-4d65-850d-a297dcc2fecb")))
72 .into_iter()
73 .collect();
74
75 let msg = RegisterIntrospection::with_serialize_type_ids(&ids).unwrap();
76 assert_serialize_eq(&msg, serialized);
77 assert_eq!(ids, msg.deserialize_type_ids().unwrap());
78
79 let msg = Message::RegisterIntrospection(msg);
80 assert_serialize_eq(&msg, serialized);
81 }
82}