aldrin_core/
message.rs

1mod abort_function_call;
2mod add_bus_listener_filter;
3mod add_channel_capacity;
4mod bus_listener_current_finished;
5mod call_function;
6mod call_function2;
7mod call_function_reply;
8mod channel_end_claimed;
9mod channel_end_closed;
10mod claim_channel_end;
11mod claim_channel_end_reply;
12mod clear_bus_listener_filters;
13mod close_channel_end;
14mod close_channel_end_reply;
15mod connect;
16mod connect2;
17mod connect_reply;
18mod connect_reply2;
19mod create_bus_listener;
20mod create_bus_listener_reply;
21mod create_channel;
22mod create_channel_reply;
23mod create_object;
24mod create_object_reply;
25mod create_service;
26mod create_service2;
27mod create_service_reply;
28mod destroy_bus_listener;
29mod destroy_bus_listener_reply;
30mod destroy_object;
31mod destroy_object_reply;
32mod destroy_service;
33mod destroy_service_reply;
34mod emit_bus_event;
35mod emit_event;
36mod item_received;
37mod packetizer;
38mod query_introspection;
39mod query_introspection_reply;
40mod query_service_info;
41mod query_service_info_reply;
42mod query_service_version;
43mod query_service_version_reply;
44mod register_introspection;
45mod remove_bus_listener_filter;
46mod send_item;
47mod service_destroyed;
48mod shutdown;
49mod start_bus_listener;
50mod start_bus_listener_reply;
51mod stop_bus_listener;
52mod stop_bus_listener_reply;
53mod subscribe_all_events;
54mod subscribe_all_events_reply;
55mod subscribe_event;
56mod subscribe_event_reply;
57mod subscribe_service;
58mod subscribe_service_reply;
59mod sync;
60mod sync_reply;
61#[cfg(test)]
62mod test;
63mod unsubscribe_all_events;
64mod unsubscribe_all_events_reply;
65mod unsubscribe_event;
66mod unsubscribe_service;
67
68use crate::serialized_value::SerializedValueSlice;
69use bytes::BytesMut;
70use num_enum::{IntoPrimitive, TryFromPrimitive};
71
72pub use crate::message_deserializer::MessageDeserializeError;
73pub use crate::message_serializer::MessageSerializeError;
74pub use abort_function_call::AbortFunctionCall;
75pub use add_bus_listener_filter::AddBusListenerFilter;
76pub use add_channel_capacity::AddChannelCapacity;
77pub use bus_listener_current_finished::BusListenerCurrentFinished;
78pub use call_function::CallFunction;
79pub use call_function2::CallFunction2;
80pub use call_function_reply::{CallFunctionReply, CallFunctionResult};
81pub use channel_end_claimed::ChannelEndClaimed;
82pub use channel_end_closed::ChannelEndClosed;
83pub use claim_channel_end::ClaimChannelEnd;
84pub use claim_channel_end_reply::{ClaimChannelEndReply, ClaimChannelEndResult};
85pub use clear_bus_listener_filters::ClearBusListenerFilters;
86pub use close_channel_end::CloseChannelEnd;
87pub use close_channel_end_reply::{CloseChannelEndReply, CloseChannelEndResult};
88pub use connect::Connect;
89pub use connect2::{Connect2, ConnectData};
90pub use connect_reply::ConnectReply;
91pub use connect_reply2::{ConnectReply2, ConnectReplyData, ConnectResult};
92pub use create_bus_listener::CreateBusListener;
93pub use create_bus_listener_reply::CreateBusListenerReply;
94pub use create_channel::CreateChannel;
95pub use create_channel_reply::CreateChannelReply;
96pub use create_object::CreateObject;
97pub use create_object_reply::{CreateObjectReply, CreateObjectResult};
98pub use create_service::CreateService;
99pub use create_service2::CreateService2;
100pub use create_service_reply::{CreateServiceReply, CreateServiceResult};
101pub use destroy_bus_listener::DestroyBusListener;
102pub use destroy_bus_listener_reply::{DestroyBusListenerReply, DestroyBusListenerResult};
103pub use destroy_object::DestroyObject;
104pub use destroy_object_reply::{DestroyObjectReply, DestroyObjectResult};
105pub use destroy_service::DestroyService;
106pub use destroy_service_reply::{DestroyServiceReply, DestroyServiceResult};
107pub use emit_bus_event::EmitBusEvent;
108pub use emit_event::EmitEvent;
109pub use item_received::ItemReceived;
110pub use packetizer::Packetizer;
111pub use query_introspection::QueryIntrospection;
112pub use query_introspection_reply::{QueryIntrospectionReply, QueryIntrospectionResult};
113pub use query_service_info::QueryServiceInfo;
114pub use query_service_info_reply::{QueryServiceInfoReply, QueryServiceInfoResult};
115pub use query_service_version::QueryServiceVersion;
116pub use query_service_version_reply::{QueryServiceVersionReply, QueryServiceVersionResult};
117pub use register_introspection::RegisterIntrospection;
118pub use remove_bus_listener_filter::RemoveBusListenerFilter;
119pub use send_item::SendItem;
120pub use service_destroyed::ServiceDestroyed;
121pub use shutdown::Shutdown;
122pub use start_bus_listener::StartBusListener;
123pub use start_bus_listener_reply::{StartBusListenerReply, StartBusListenerResult};
124pub use stop_bus_listener::StopBusListener;
125pub use stop_bus_listener_reply::{StopBusListenerReply, StopBusListenerResult};
126pub use subscribe_all_events::SubscribeAllEvents;
127pub use subscribe_all_events_reply::{SubscribeAllEventsReply, SubscribeAllEventsResult};
128pub use subscribe_event::SubscribeEvent;
129pub use subscribe_event_reply::{SubscribeEventReply, SubscribeEventResult};
130pub use subscribe_service::SubscribeService;
131pub use subscribe_service_reply::{SubscribeServiceReply, SubscribeServiceResult};
132pub use sync::Sync;
133pub use sync_reply::SyncReply;
134pub use unsubscribe_all_events::UnsubscribeAllEvents;
135pub use unsubscribe_all_events_reply::{UnsubscribeAllEventsReply, UnsubscribeAllEventsResult};
136pub use unsubscribe_event::UnsubscribeEvent;
137pub use unsubscribe_service::UnsubscribeService;
138
139#[derive(Debug, Copy, Clone, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
140#[repr(u8)]
141pub enum MessageKind {
142    Connect = 0,
143    ConnectReply = 1,
144    Shutdown = 2,
145    CreateObject = 3,
146    CreateObjectReply = 4,
147    DestroyObject = 5,
148    DestroyObjectReply = 6,
149    CreateService = 7,
150    CreateServiceReply = 8,
151    DestroyService = 9,
152    DestroyServiceReply = 10,
153    CallFunction = 11,
154    CallFunctionReply = 12,
155    SubscribeEvent = 13,
156    SubscribeEventReply = 14,
157    UnsubscribeEvent = 15,
158    EmitEvent = 16,
159    QueryServiceVersion = 17,
160    QueryServiceVersionReply = 18,
161    CreateChannel = 19,
162    CreateChannelReply = 20,
163    CloseChannelEnd = 21,
164    CloseChannelEndReply = 22,
165    ChannelEndClosed = 23,
166    ClaimChannelEnd = 24,
167    ClaimChannelEndReply = 25,
168    ChannelEndClaimed = 26,
169    SendItem = 27,
170    ItemReceived = 28,
171    AddChannelCapacity = 29,
172    Sync = 30,
173    SyncReply = 31,
174    ServiceDestroyed = 32,
175    CreateBusListener = 33,
176    CreateBusListenerReply = 34,
177    DestroyBusListener = 35,
178    DestroyBusListenerReply = 36,
179    AddBusListenerFilter = 37,
180    RemoveBusListenerFilter = 38,
181    ClearBusListenerFilters = 39,
182    StartBusListener = 40,
183    StartBusListenerReply = 41,
184    StopBusListener = 42,
185    StopBusListenerReply = 43,
186    EmitBusEvent = 44,
187    BusListenerCurrentFinished = 45,
188    Connect2 = 46,
189    ConnectReply2 = 47,
190    AbortFunctionCall = 48,
191    RegisterIntrospection = 49,
192    QueryIntrospection = 50,
193    QueryIntrospectionReply = 51,
194    CreateService2 = 52,
195    QueryServiceInfo = 53,
196    QueryServiceInfoReply = 54,
197    SubscribeService = 55,
198    SubscribeServiceReply = 56,
199    UnsubscribeService = 57,
200    SubscribeAllEvents = 58,
201    SubscribeAllEventsReply = 59,
202    UnsubscribeAllEvents = 60,
203    UnsubscribeAllEventsReply = 61,
204    CallFunction2 = 62,
205}
206
207impl MessageKind {
208    pub fn has_value(self) -> bool {
209        match self {
210            Self::Connect
211            | Self::ConnectReply
212            | Self::CallFunction
213            | Self::CallFunctionReply
214            | Self::EmitEvent
215            | Self::SendItem
216            | Self::ItemReceived
217            | Self::Connect2
218            | Self::ConnectReply2
219            | Self::RegisterIntrospection
220            | Self::QueryIntrospectionReply
221            | Self::CreateService2
222            | Self::QueryServiceInfoReply
223            | Self::CallFunction2 => true,
224
225            Self::Shutdown
226            | Self::CreateObject
227            | Self::CreateObjectReply
228            | Self::DestroyObject
229            | Self::DestroyObjectReply
230            | Self::CreateService
231            | Self::CreateServiceReply
232            | Self::DestroyService
233            | Self::DestroyServiceReply
234            | Self::SubscribeEvent
235            | Self::SubscribeEventReply
236            | Self::UnsubscribeEvent
237            | Self::QueryServiceVersion
238            | Self::QueryServiceVersionReply
239            | Self::CreateChannel
240            | Self::CreateChannelReply
241            | Self::CloseChannelEnd
242            | Self::CloseChannelEndReply
243            | Self::ChannelEndClosed
244            | Self::ClaimChannelEnd
245            | Self::ClaimChannelEndReply
246            | Self::ChannelEndClaimed
247            | Self::AddChannelCapacity
248            | Self::Sync
249            | Self::SyncReply
250            | Self::ServiceDestroyed
251            | Self::CreateBusListener
252            | Self::CreateBusListenerReply
253            | Self::DestroyBusListener
254            | Self::DestroyBusListenerReply
255            | Self::AddBusListenerFilter
256            | Self::RemoveBusListenerFilter
257            | Self::ClearBusListenerFilters
258            | Self::StartBusListener
259            | Self::StartBusListenerReply
260            | Self::StopBusListener
261            | Self::StopBusListenerReply
262            | Self::EmitBusEvent
263            | Self::BusListenerCurrentFinished
264            | Self::AbortFunctionCall
265            | Self::QueryIntrospection
266            | Self::QueryServiceInfo
267            | Self::SubscribeService
268            | Self::SubscribeServiceReply
269            | Self::UnsubscribeService
270            | Self::SubscribeAllEvents
271            | Self::SubscribeAllEventsReply
272            | Self::UnsubscribeAllEvents
273            | Self::UnsubscribeAllEventsReply => false,
274        }
275    }
276}
277
278mod message_ops {
279    pub trait Sealed {}
280}
281
282pub trait MessageOps: Sized + message_ops::Sealed {
283    fn kind(&self) -> MessageKind;
284    fn serialize_message(self) -> Result<BytesMut, MessageSerializeError>;
285    fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError>;
286    fn value(&self) -> Option<&SerializedValueSlice>;
287}
288
289#[derive(Debug, Clone, PartialEq, Eq)]
290#[cfg_attr(feature = "fuzzing", derive(arbitrary::Arbitrary))]
291pub enum Message {
292    Connect(Connect),
293    ConnectReply(ConnectReply),
294    Shutdown(Shutdown),
295    CreateObject(CreateObject),
296    CreateObjectReply(CreateObjectReply),
297    DestroyObject(DestroyObject),
298    DestroyObjectReply(DestroyObjectReply),
299    CreateService(CreateService),
300    CreateServiceReply(CreateServiceReply),
301    DestroyService(DestroyService),
302    DestroyServiceReply(DestroyServiceReply),
303    CallFunction(CallFunction),
304    CallFunctionReply(CallFunctionReply),
305    SubscribeEvent(SubscribeEvent),
306    SubscribeEventReply(SubscribeEventReply),
307    UnsubscribeEvent(UnsubscribeEvent),
308    EmitEvent(EmitEvent),
309    QueryServiceVersion(QueryServiceVersion),
310    QueryServiceVersionReply(QueryServiceVersionReply),
311    CreateChannel(CreateChannel),
312    CreateChannelReply(CreateChannelReply),
313    CloseChannelEnd(CloseChannelEnd),
314    CloseChannelEndReply(CloseChannelEndReply),
315    ChannelEndClosed(ChannelEndClosed),
316    ClaimChannelEnd(ClaimChannelEnd),
317    ClaimChannelEndReply(ClaimChannelEndReply),
318    ChannelEndClaimed(ChannelEndClaimed),
319    SendItem(SendItem),
320    ItemReceived(ItemReceived),
321    AddChannelCapacity(AddChannelCapacity),
322    Sync(Sync),
323    SyncReply(SyncReply),
324    ServiceDestroyed(ServiceDestroyed),
325    CreateBusListener(CreateBusListener),
326    CreateBusListenerReply(CreateBusListenerReply),
327    DestroyBusListener(DestroyBusListener),
328    DestroyBusListenerReply(DestroyBusListenerReply),
329    AddBusListenerFilter(AddBusListenerFilter),
330    RemoveBusListenerFilter(RemoveBusListenerFilter),
331    ClearBusListenerFilters(ClearBusListenerFilters),
332    StartBusListener(StartBusListener),
333    StartBusListenerReply(StartBusListenerReply),
334    StopBusListener(StopBusListener),
335    StopBusListenerReply(StopBusListenerReply),
336    EmitBusEvent(EmitBusEvent),
337    BusListenerCurrentFinished(BusListenerCurrentFinished),
338    Connect2(Connect2),
339    ConnectReply2(ConnectReply2),
340    AbortFunctionCall(AbortFunctionCall),
341    RegisterIntrospection(RegisterIntrospection),
342    QueryIntrospection(QueryIntrospection),
343    QueryIntrospectionReply(QueryIntrospectionReply),
344    CreateService2(CreateService2),
345    QueryServiceInfo(QueryServiceInfo),
346    QueryServiceInfoReply(QueryServiceInfoReply),
347    SubscribeService(SubscribeService),
348    SubscribeServiceReply(SubscribeServiceReply),
349    UnsubscribeService(UnsubscribeService),
350    SubscribeAllEvents(SubscribeAllEvents),
351    SubscribeAllEventsReply(SubscribeAllEventsReply),
352    UnsubscribeAllEvents(UnsubscribeAllEvents),
353    UnsubscribeAllEventsReply(UnsubscribeAllEventsReply),
354    CallFunction2(CallFunction2),
355}
356
357impl MessageOps for Message {
358    fn kind(&self) -> MessageKind {
359        match self {
360            Self::Connect(_) => MessageKind::Connect,
361            Self::ConnectReply(_) => MessageKind::ConnectReply,
362            Self::Shutdown(_) => MessageKind::Shutdown,
363            Self::CreateObject(_) => MessageKind::CreateObject,
364            Self::CreateObjectReply(_) => MessageKind::CreateObjectReply,
365            Self::DestroyObject(_) => MessageKind::DestroyObject,
366            Self::DestroyObjectReply(_) => MessageKind::DestroyObjectReply,
367            Self::CreateService(_) => MessageKind::CreateService,
368            Self::CreateServiceReply(_) => MessageKind::CreateServiceReply,
369            Self::DestroyService(_) => MessageKind::DestroyService,
370            Self::DestroyServiceReply(_) => MessageKind::DestroyServiceReply,
371            Self::CallFunction(_) => MessageKind::CallFunction,
372            Self::CallFunctionReply(_) => MessageKind::CallFunctionReply,
373            Self::SubscribeEvent(_) => MessageKind::SubscribeEvent,
374            Self::SubscribeEventReply(_) => MessageKind::SubscribeEventReply,
375            Self::UnsubscribeEvent(_) => MessageKind::UnsubscribeEvent,
376            Self::EmitEvent(_) => MessageKind::EmitEvent,
377            Self::QueryServiceVersion(_) => MessageKind::QueryServiceVersion,
378            Self::QueryServiceVersionReply(_) => MessageKind::QueryServiceVersionReply,
379            Self::CreateChannel(_) => MessageKind::CreateChannel,
380            Self::CreateChannelReply(_) => MessageKind::CreateChannelReply,
381            Self::CloseChannelEnd(_) => MessageKind::CloseChannelEnd,
382            Self::CloseChannelEndReply(_) => MessageKind::CloseChannelEndReply,
383            Self::ChannelEndClosed(_) => MessageKind::ChannelEndClosed,
384            Self::ClaimChannelEnd(_) => MessageKind::ClaimChannelEnd,
385            Self::ClaimChannelEndReply(_) => MessageKind::ClaimChannelEndReply,
386            Self::ChannelEndClaimed(_) => MessageKind::ChannelEndClaimed,
387            Self::SendItem(_) => MessageKind::SendItem,
388            Self::ItemReceived(_) => MessageKind::ItemReceived,
389            Self::AddChannelCapacity(_) => MessageKind::AddChannelCapacity,
390            Self::Sync(_) => MessageKind::Sync,
391            Self::SyncReply(_) => MessageKind::SyncReply,
392            Self::ServiceDestroyed(_) => MessageKind::ServiceDestroyed,
393            Self::CreateBusListener(_) => MessageKind::CreateBusListener,
394            Self::CreateBusListenerReply(_) => MessageKind::CreateBusListenerReply,
395            Self::DestroyBusListener(_) => MessageKind::DestroyBusListener,
396            Self::DestroyBusListenerReply(_) => MessageKind::DestroyBusListenerReply,
397            Self::AddBusListenerFilter(_) => MessageKind::AddBusListenerFilter,
398            Self::RemoveBusListenerFilter(_) => MessageKind::RemoveBusListenerFilter,
399            Self::ClearBusListenerFilters(_) => MessageKind::ClearBusListenerFilters,
400            Self::StartBusListener(_) => MessageKind::StartBusListener,
401            Self::StartBusListenerReply(_) => MessageKind::StartBusListenerReply,
402            Self::StopBusListener(_) => MessageKind::StopBusListener,
403            Self::StopBusListenerReply(_) => MessageKind::StopBusListenerReply,
404            Self::EmitBusEvent(_) => MessageKind::EmitBusEvent,
405            Self::BusListenerCurrentFinished(_) => MessageKind::BusListenerCurrentFinished,
406            Self::Connect2(_) => MessageKind::Connect2,
407            Self::ConnectReply2(_) => MessageKind::ConnectReply2,
408            Self::AbortFunctionCall(_) => MessageKind::AbortFunctionCall,
409            Self::RegisterIntrospection(_) => MessageKind::RegisterIntrospection,
410            Self::QueryIntrospection(_) => MessageKind::QueryIntrospection,
411            Self::QueryIntrospectionReply(_) => MessageKind::QueryIntrospectionReply,
412            Self::CreateService2(_) => MessageKind::CreateService2,
413            Self::QueryServiceInfo(_) => MessageKind::QueryServiceInfo,
414            Self::QueryServiceInfoReply(_) => MessageKind::QueryServiceInfoReply,
415            Self::SubscribeService(_) => MessageKind::SubscribeService,
416            Self::SubscribeServiceReply(_) => MessageKind::SubscribeServiceReply,
417            Self::UnsubscribeService(_) => MessageKind::UnsubscribeService,
418            Self::SubscribeAllEvents(_) => MessageKind::SubscribeAllEvents,
419            Self::SubscribeAllEventsReply(_) => MessageKind::SubscribeAllEventsReply,
420            Self::UnsubscribeAllEvents(_) => MessageKind::UnsubscribeAllEvents,
421            Self::UnsubscribeAllEventsReply(_) => MessageKind::UnsubscribeAllEventsReply,
422            Self::CallFunction2(_) => MessageKind::CallFunction2,
423        }
424    }
425
426    fn serialize_message(self) -> Result<BytesMut, MessageSerializeError> {
427        match self {
428            Self::Connect(msg) => msg.serialize_message(),
429            Self::ConnectReply(msg) => msg.serialize_message(),
430            Self::Shutdown(msg) => msg.serialize_message(),
431            Self::CreateObject(msg) => msg.serialize_message(),
432            Self::CreateObjectReply(msg) => msg.serialize_message(),
433            Self::DestroyObject(msg) => msg.serialize_message(),
434            Self::DestroyObjectReply(msg) => msg.serialize_message(),
435            Self::CreateService(msg) => msg.serialize_message(),
436            Self::CreateServiceReply(msg) => msg.serialize_message(),
437            Self::DestroyService(msg) => msg.serialize_message(),
438            Self::DestroyServiceReply(msg) => msg.serialize_message(),
439            Self::CallFunction(msg) => msg.serialize_message(),
440            Self::CallFunctionReply(msg) => msg.serialize_message(),
441            Self::SubscribeEvent(msg) => msg.serialize_message(),
442            Self::SubscribeEventReply(msg) => msg.serialize_message(),
443            Self::UnsubscribeEvent(msg) => msg.serialize_message(),
444            Self::EmitEvent(msg) => msg.serialize_message(),
445            Self::QueryServiceVersion(msg) => msg.serialize_message(),
446            Self::QueryServiceVersionReply(msg) => msg.serialize_message(),
447            Self::CreateChannel(msg) => msg.serialize_message(),
448            Self::CreateChannelReply(msg) => msg.serialize_message(),
449            Self::CloseChannelEnd(msg) => msg.serialize_message(),
450            Self::CloseChannelEndReply(msg) => msg.serialize_message(),
451            Self::ChannelEndClosed(msg) => msg.serialize_message(),
452            Self::ClaimChannelEnd(msg) => msg.serialize_message(),
453            Self::ClaimChannelEndReply(msg) => msg.serialize_message(),
454            Self::ChannelEndClaimed(msg) => msg.serialize_message(),
455            Self::SendItem(msg) => msg.serialize_message(),
456            Self::ItemReceived(msg) => msg.serialize_message(),
457            Self::AddChannelCapacity(msg) => msg.serialize_message(),
458            Self::Sync(msg) => msg.serialize_message(),
459            Self::SyncReply(msg) => msg.serialize_message(),
460            Self::ServiceDestroyed(msg) => msg.serialize_message(),
461            Self::CreateBusListener(msg) => msg.serialize_message(),
462            Self::CreateBusListenerReply(msg) => msg.serialize_message(),
463            Self::DestroyBusListener(msg) => msg.serialize_message(),
464            Self::DestroyBusListenerReply(msg) => msg.serialize_message(),
465            Self::AddBusListenerFilter(msg) => msg.serialize_message(),
466            Self::RemoveBusListenerFilter(msg) => msg.serialize_message(),
467            Self::ClearBusListenerFilters(msg) => msg.serialize_message(),
468            Self::StartBusListener(msg) => msg.serialize_message(),
469            Self::StartBusListenerReply(msg) => msg.serialize_message(),
470            Self::StopBusListener(msg) => msg.serialize_message(),
471            Self::StopBusListenerReply(msg) => msg.serialize_message(),
472            Self::EmitBusEvent(msg) => msg.serialize_message(),
473            Self::BusListenerCurrentFinished(msg) => msg.serialize_message(),
474            Self::Connect2(msg) => msg.serialize_message(),
475            Self::ConnectReply2(msg) => msg.serialize_message(),
476            Self::AbortFunctionCall(msg) => msg.serialize_message(),
477            Self::RegisterIntrospection(msg) => msg.serialize_message(),
478            Self::QueryIntrospection(msg) => msg.serialize_message(),
479            Self::QueryIntrospectionReply(msg) => msg.serialize_message(),
480            Self::CreateService2(msg) => msg.serialize_message(),
481            Self::QueryServiceInfo(msg) => msg.serialize_message(),
482            Self::QueryServiceInfoReply(msg) => msg.serialize_message(),
483            Self::SubscribeService(msg) => msg.serialize_message(),
484            Self::SubscribeServiceReply(msg) => msg.serialize_message(),
485            Self::UnsubscribeService(msg) => msg.serialize_message(),
486            Self::SubscribeAllEvents(msg) => msg.serialize_message(),
487            Self::SubscribeAllEventsReply(msg) => msg.serialize_message(),
488            Self::UnsubscribeAllEvents(msg) => msg.serialize_message(),
489            Self::UnsubscribeAllEventsReply(msg) => msg.serialize_message(),
490            Self::CallFunction2(msg) => msg.serialize_message(),
491        }
492    }
493
494    fn deserialize_message(buf: BytesMut) -> Result<Self, MessageDeserializeError> {
495        if buf.len() < 5 {
496            return Err(MessageDeserializeError::UnexpectedEoi);
497        }
498
499        match buf[4]
500            .try_into()
501            .map_err(|_| MessageDeserializeError::InvalidSerialization)?
502        {
503            MessageKind::Connect => Connect::deserialize_message(buf).map(Self::Connect),
504            MessageKind::ConnectReply => {
505                ConnectReply::deserialize_message(buf).map(Self::ConnectReply)
506            }
507            MessageKind::Shutdown => Shutdown::deserialize_message(buf).map(Self::Shutdown),
508            MessageKind::CreateObject => {
509                CreateObject::deserialize_message(buf).map(Self::CreateObject)
510            }
511            MessageKind::CreateObjectReply => {
512                CreateObjectReply::deserialize_message(buf).map(Self::CreateObjectReply)
513            }
514            MessageKind::DestroyObject => {
515                DestroyObject::deserialize_message(buf).map(Self::DestroyObject)
516            }
517            MessageKind::DestroyObjectReply => {
518                DestroyObjectReply::deserialize_message(buf).map(Self::DestroyObjectReply)
519            }
520            MessageKind::CreateService => {
521                CreateService::deserialize_message(buf).map(Self::CreateService)
522            }
523            MessageKind::CreateServiceReply => {
524                CreateServiceReply::deserialize_message(buf).map(Self::CreateServiceReply)
525            }
526            MessageKind::DestroyService => {
527                DestroyService::deserialize_message(buf).map(Self::DestroyService)
528            }
529            MessageKind::DestroyServiceReply => {
530                DestroyServiceReply::deserialize_message(buf).map(Self::DestroyServiceReply)
531            }
532            MessageKind::CallFunction => {
533                CallFunction::deserialize_message(buf).map(Self::CallFunction)
534            }
535            MessageKind::CallFunctionReply => {
536                CallFunctionReply::deserialize_message(buf).map(Self::CallFunctionReply)
537            }
538            MessageKind::SubscribeEvent => {
539                SubscribeEvent::deserialize_message(buf).map(Self::SubscribeEvent)
540            }
541            MessageKind::SubscribeEventReply => {
542                SubscribeEventReply::deserialize_message(buf).map(Self::SubscribeEventReply)
543            }
544            MessageKind::UnsubscribeEvent => {
545                UnsubscribeEvent::deserialize_message(buf).map(Self::UnsubscribeEvent)
546            }
547            MessageKind::EmitEvent => EmitEvent::deserialize_message(buf).map(Self::EmitEvent),
548            MessageKind::QueryServiceVersion => {
549                QueryServiceVersion::deserialize_message(buf).map(Self::QueryServiceVersion)
550            }
551            MessageKind::QueryServiceVersionReply => {
552                QueryServiceVersionReply::deserialize_message(buf)
553                    .map(Self::QueryServiceVersionReply)
554            }
555            MessageKind::CreateChannel => {
556                CreateChannel::deserialize_message(buf).map(Self::CreateChannel)
557            }
558            MessageKind::CreateChannelReply => {
559                CreateChannelReply::deserialize_message(buf).map(Self::CreateChannelReply)
560            }
561            MessageKind::CloseChannelEnd => {
562                CloseChannelEnd::deserialize_message(buf).map(Self::CloseChannelEnd)
563            }
564            MessageKind::CloseChannelEndReply => {
565                CloseChannelEndReply::deserialize_message(buf).map(Self::CloseChannelEndReply)
566            }
567            MessageKind::ChannelEndClosed => {
568                ChannelEndClosed::deserialize_message(buf).map(Self::ChannelEndClosed)
569            }
570            MessageKind::ClaimChannelEnd => {
571                ClaimChannelEnd::deserialize_message(buf).map(Self::ClaimChannelEnd)
572            }
573            MessageKind::ClaimChannelEndReply => {
574                ClaimChannelEndReply::deserialize_message(buf).map(Self::ClaimChannelEndReply)
575            }
576            MessageKind::ChannelEndClaimed => {
577                ChannelEndClaimed::deserialize_message(buf).map(Self::ChannelEndClaimed)
578            }
579            MessageKind::SendItem => SendItem::deserialize_message(buf).map(Self::SendItem),
580            MessageKind::ItemReceived => {
581                ItemReceived::deserialize_message(buf).map(Self::ItemReceived)
582            }
583            MessageKind::AddChannelCapacity => {
584                AddChannelCapacity::deserialize_message(buf).map(Self::AddChannelCapacity)
585            }
586            MessageKind::Sync => Sync::deserialize_message(buf).map(Self::Sync),
587            MessageKind::SyncReply => SyncReply::deserialize_message(buf).map(Self::SyncReply),
588            MessageKind::ServiceDestroyed => {
589                ServiceDestroyed::deserialize_message(buf).map(Self::ServiceDestroyed)
590            }
591            MessageKind::CreateBusListener => {
592                CreateBusListener::deserialize_message(buf).map(Self::CreateBusListener)
593            }
594            MessageKind::CreateBusListenerReply => {
595                CreateBusListenerReply::deserialize_message(buf).map(Self::CreateBusListenerReply)
596            }
597            MessageKind::DestroyBusListener => {
598                DestroyBusListener::deserialize_message(buf).map(Self::DestroyBusListener)
599            }
600            MessageKind::DestroyBusListenerReply => {
601                DestroyBusListenerReply::deserialize_message(buf).map(Self::DestroyBusListenerReply)
602            }
603            MessageKind::AddBusListenerFilter => {
604                AddBusListenerFilter::deserialize_message(buf).map(Self::AddBusListenerFilter)
605            }
606            MessageKind::RemoveBusListenerFilter => {
607                RemoveBusListenerFilter::deserialize_message(buf).map(Self::RemoveBusListenerFilter)
608            }
609            MessageKind::ClearBusListenerFilters => {
610                ClearBusListenerFilters::deserialize_message(buf).map(Self::ClearBusListenerFilters)
611            }
612            MessageKind::StartBusListener => {
613                StartBusListener::deserialize_message(buf).map(Self::StartBusListener)
614            }
615            MessageKind::StartBusListenerReply => {
616                StartBusListenerReply::deserialize_message(buf).map(Self::StartBusListenerReply)
617            }
618            MessageKind::StopBusListener => {
619                StopBusListener::deserialize_message(buf).map(Self::StopBusListener)
620            }
621            MessageKind::StopBusListenerReply => {
622                StopBusListenerReply::deserialize_message(buf).map(Self::StopBusListenerReply)
623            }
624            MessageKind::EmitBusEvent => {
625                EmitBusEvent::deserialize_message(buf).map(Self::EmitBusEvent)
626            }
627            MessageKind::BusListenerCurrentFinished => {
628                BusListenerCurrentFinished::deserialize_message(buf)
629                    .map(Self::BusListenerCurrentFinished)
630            }
631            MessageKind::Connect2 => Connect2::deserialize_message(buf).map(Self::Connect2),
632            MessageKind::ConnectReply2 => {
633                ConnectReply2::deserialize_message(buf).map(Self::ConnectReply2)
634            }
635            MessageKind::AbortFunctionCall => {
636                AbortFunctionCall::deserialize_message(buf).map(Self::AbortFunctionCall)
637            }
638            MessageKind::RegisterIntrospection => {
639                RegisterIntrospection::deserialize_message(buf).map(Self::RegisterIntrospection)
640            }
641            MessageKind::QueryIntrospection => {
642                QueryIntrospection::deserialize_message(buf).map(Self::QueryIntrospection)
643            }
644            MessageKind::QueryIntrospectionReply => {
645                QueryIntrospectionReply::deserialize_message(buf).map(Self::QueryIntrospectionReply)
646            }
647            MessageKind::CreateService2 => {
648                CreateService2::deserialize_message(buf).map(Self::CreateService2)
649            }
650            MessageKind::QueryServiceInfo => {
651                QueryServiceInfo::deserialize_message(buf).map(Self::QueryServiceInfo)
652            }
653            MessageKind::QueryServiceInfoReply => {
654                QueryServiceInfoReply::deserialize_message(buf).map(Self::QueryServiceInfoReply)
655            }
656            MessageKind::SubscribeService => {
657                SubscribeService::deserialize_message(buf).map(Self::SubscribeService)
658            }
659            MessageKind::SubscribeServiceReply => {
660                SubscribeServiceReply::deserialize_message(buf).map(Self::SubscribeServiceReply)
661            }
662            MessageKind::UnsubscribeService => {
663                UnsubscribeService::deserialize_message(buf).map(Self::UnsubscribeService)
664            }
665            MessageKind::SubscribeAllEvents => {
666                SubscribeAllEvents::deserialize_message(buf).map(Self::SubscribeAllEvents)
667            }
668            MessageKind::SubscribeAllEventsReply => {
669                SubscribeAllEventsReply::deserialize_message(buf).map(Self::SubscribeAllEventsReply)
670            }
671            MessageKind::UnsubscribeAllEvents => {
672                UnsubscribeAllEvents::deserialize_message(buf).map(Self::UnsubscribeAllEvents)
673            }
674            MessageKind::UnsubscribeAllEventsReply => {
675                UnsubscribeAllEventsReply::deserialize_message(buf)
676                    .map(Self::UnsubscribeAllEventsReply)
677            }
678            MessageKind::CallFunction2 => {
679                CallFunction2::deserialize_message(buf).map(Self::CallFunction2)
680            }
681        }
682    }
683
684    fn value(&self) -> Option<&SerializedValueSlice> {
685        match self {
686            Self::Connect(msg) => msg.value(),
687            Self::ConnectReply(msg) => msg.value(),
688            Self::Shutdown(msg) => msg.value(),
689            Self::CreateObject(msg) => msg.value(),
690            Self::CreateObjectReply(msg) => msg.value(),
691            Self::DestroyObject(msg) => msg.value(),
692            Self::DestroyObjectReply(msg) => msg.value(),
693            Self::CreateService(msg) => msg.value(),
694            Self::CreateServiceReply(msg) => msg.value(),
695            Self::DestroyService(msg) => msg.value(),
696            Self::DestroyServiceReply(msg) => msg.value(),
697            Self::CallFunction(msg) => msg.value(),
698            Self::CallFunctionReply(msg) => msg.value(),
699            Self::SubscribeEvent(msg) => msg.value(),
700            Self::SubscribeEventReply(msg) => msg.value(),
701            Self::UnsubscribeEvent(msg) => msg.value(),
702            Self::EmitEvent(msg) => msg.value(),
703            Self::QueryServiceVersion(msg) => msg.value(),
704            Self::QueryServiceVersionReply(msg) => msg.value(),
705            Self::CreateChannel(msg) => msg.value(),
706            Self::CreateChannelReply(msg) => msg.value(),
707            Self::CloseChannelEnd(msg) => msg.value(),
708            Self::CloseChannelEndReply(msg) => msg.value(),
709            Self::ChannelEndClosed(msg) => msg.value(),
710            Self::ClaimChannelEnd(msg) => msg.value(),
711            Self::ClaimChannelEndReply(msg) => msg.value(),
712            Self::ChannelEndClaimed(msg) => msg.value(),
713            Self::SendItem(msg) => msg.value(),
714            Self::ItemReceived(msg) => msg.value(),
715            Self::AddChannelCapacity(msg) => msg.value(),
716            Self::Sync(msg) => msg.value(),
717            Self::SyncReply(msg) => msg.value(),
718            Self::ServiceDestroyed(msg) => msg.value(),
719            Self::CreateBusListener(msg) => msg.value(),
720            Self::CreateBusListenerReply(msg) => msg.value(),
721            Self::DestroyBusListener(msg) => msg.value(),
722            Self::DestroyBusListenerReply(msg) => msg.value(),
723            Self::AddBusListenerFilter(msg) => msg.value(),
724            Self::RemoveBusListenerFilter(msg) => msg.value(),
725            Self::ClearBusListenerFilters(msg) => msg.value(),
726            Self::StartBusListener(msg) => msg.value(),
727            Self::StartBusListenerReply(msg) => msg.value(),
728            Self::StopBusListener(msg) => msg.value(),
729            Self::StopBusListenerReply(msg) => msg.value(),
730            Self::EmitBusEvent(msg) => msg.value(),
731            Self::BusListenerCurrentFinished(msg) => msg.value(),
732            Self::Connect2(msg) => msg.value(),
733            Self::ConnectReply2(msg) => msg.value(),
734            Self::AbortFunctionCall(msg) => msg.value(),
735            Self::RegisterIntrospection(msg) => msg.value(),
736            Self::QueryIntrospection(msg) => msg.value(),
737            Self::QueryIntrospectionReply(msg) => msg.value(),
738            Self::CreateService2(msg) => msg.value(),
739            Self::QueryServiceInfo(msg) => msg.value(),
740            Self::QueryServiceInfoReply(msg) => msg.value(),
741            Self::SubscribeService(msg) => msg.value(),
742            Self::SubscribeServiceReply(msg) => msg.value(),
743            Self::UnsubscribeService(msg) => msg.value(),
744            Self::SubscribeAllEvents(msg) => msg.value(),
745            Self::SubscribeAllEventsReply(msg) => msg.value(),
746            Self::UnsubscribeAllEvents(msg) => msg.value(),
747            Self::UnsubscribeAllEventsReply(msg) => msg.value(),
748            Self::CallFunction2(msg) => msg.value(),
749        }
750    }
751}
752
753impl message_ops::Sealed for Message {}
754
755#[derive(Debug, Copy, Clone, PartialEq, Eq, IntoPrimitive, TryFromPrimitive)]
756#[repr(u8)]
757enum OptionKind {
758    None = 0,
759    Some = 1,
760}