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