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}