Skip to main content

opcua/core/
supported_message.rs

1// OPCUA for Rust
2// SPDX-License-Identifier: MPL-2.0
3// Copyright (C) 2017-2022 Adam Lock
4
5// This file was autogenerated by tools/schema/gen_supported_message.js
6// DO NOT EDIT THIS FILE
7#![allow(unused_attributes)]
8
9use std::io::{Read, Write};
10
11use crate::types::{
12    encoding::*, node_id::NodeId, node_ids::ObjectId, request_header::RequestHeader,
13    response_header::ResponseHeader, service_types::*,
14};
15
16pub use crate::core::comms::tcp_types::AcknowledgeMessage;
17
18/// This macro helps avoid tedious repetition as new messages are added
19/// The first form just handles the trailing comma after the last entry to save some pointless
20/// editing when new messages are added to the list.
21macro_rules! supported_messages_enum {
22    [ $( $x:ident, ) * ] => (supported_messages_enum![ $( $x ),* ];);
23    [ $( $x:ident ), * ] => {
24        #[derive(Debug, PartialEq, Clone)]
25        pub enum SupportedMessage {
26            /// An invalid request / response of some form
27            Invalid(ObjectId),
28            /// Acknowledge message
29            AcknowledgeMessage(Box<AcknowledgeMessage>),
30            /// Other messages
31            $( $x(Box<$x>), )*
32        }
33
34        impl BinaryEncoder <SupportedMessage> for SupportedMessage {
35            fn byte_len(&self) -> usize {
36                match self {
37                    SupportedMessage::Invalid(object_id) => {
38                        panic!("Unsupported message byte_len {:?}", object_id);
39                    },
40                    SupportedMessage::AcknowledgeMessage(value) => value.byte_len(),
41                    $( SupportedMessage::$x(value) => value.byte_len(), )*
42                }
43            }
44
45            fn encode<S: Write>(&self, stream: &mut S) -> EncodingResult<usize> {
46                match self {
47                    SupportedMessage::Invalid(object_id) => {
48                        panic!("Unsupported message encode {:?}", object_id);
49                    },
50                    SupportedMessage::AcknowledgeMessage(value) => value.encode(stream),
51                    $( SupportedMessage::$x(value) => value.encode(stream), )*
52                }
53            }
54
55            fn decode<S: Read>(_: &mut S, _: &DecodingOptions) -> EncodingResult<Self> {
56                // THIS WILL NOT DO ANYTHING
57                panic!("Cannot decode a stream to a supported message type");
58            }
59        }
60
61        impl Into<SupportedMessage> for AcknowledgeMessage{
62            fn into(self) -> SupportedMessage { SupportedMessage::AcknowledgeMessage(Box::new(self)) }
63        }
64
65        $(
66        impl Into<SupportedMessage> for $x {
67            fn into(self) -> SupportedMessage { SupportedMessage::$x(Box::new(self)) }
68        }
69        )*
70
71        impl SupportedMessage {
72            pub fn node_id(&self) -> NodeId {
73                match self {
74                    SupportedMessage::Invalid(object_id) => {
75                        panic!("Unsupported message invalid, node_id {:?}", object_id);
76                    },
77                    SupportedMessage::AcknowledgeMessage(value) => {
78                        panic!("Unsupported message node_id {:?}", value);
79                    },
80                    $( SupportedMessage::$x(value) => value.object_id().into(), )*
81                }
82            }
83        }
84    }
85}
86
87impl SupportedMessage {
88    pub fn request_handle(&self) -> u32 {
89        if self.is_request() {
90            self.request_header().request_handle
91        } else if self.is_response() {
92            self.response_header().request_handle
93        } else {
94            0
95        }
96    }
97
98    pub fn is_request(&self) -> bool {
99        match self {
100            SupportedMessage::OpenSecureChannelRequest(_) => true,
101            SupportedMessage::CloseSecureChannelRequest(_) => true,
102            SupportedMessage::GetEndpointsRequest(_) => true,
103            SupportedMessage::FindServersRequest(_) => true,
104            SupportedMessage::RegisterServerRequest(_) => true,
105            SupportedMessage::RegisterServer2Request(_) => true,
106            SupportedMessage::CreateSessionRequest(_) => true,
107            SupportedMessage::CloseSessionRequest(_) => true,
108            SupportedMessage::CancelRequest(_) => true,
109            SupportedMessage::ActivateSessionRequest(_) => true,
110            SupportedMessage::AddNodesRequest(_) => true,
111            SupportedMessage::AddReferencesRequest(_) => true,
112            SupportedMessage::DeleteNodesRequest(_) => true,
113            SupportedMessage::DeleteReferencesRequest(_) => true,
114            SupportedMessage::CreateMonitoredItemsRequest(_) => true,
115            SupportedMessage::ModifyMonitoredItemsRequest(_) => true,
116            SupportedMessage::DeleteMonitoredItemsRequest(_) => true,
117            SupportedMessage::SetMonitoringModeRequest(_) => true,
118            SupportedMessage::SetTriggeringRequest(_) => true,
119            SupportedMessage::CreateSubscriptionRequest(_) => true,
120            SupportedMessage::ModifySubscriptionRequest(_) => true,
121            SupportedMessage::DeleteSubscriptionsRequest(_) => true,
122            SupportedMessage::TransferSubscriptionsRequest(_) => true,
123            SupportedMessage::SetPublishingModeRequest(_) => true,
124            SupportedMessage::QueryFirstRequest(_) => true,
125            SupportedMessage::QueryNextRequest(_) => true,
126            SupportedMessage::BrowseRequest(_) => true,
127            SupportedMessage::BrowseNextRequest(_) => true,
128            SupportedMessage::PublishRequest(_) => true,
129            SupportedMessage::RepublishRequest(_) => true,
130            SupportedMessage::TranslateBrowsePathsToNodeIdsRequest(_) => true,
131            SupportedMessage::RegisterNodesRequest(_) => true,
132            SupportedMessage::UnregisterNodesRequest(_) => true,
133            SupportedMessage::ReadRequest(_) => true,
134            SupportedMessage::HistoryReadRequest(_) => true,
135            SupportedMessage::WriteRequest(_) => true,
136            SupportedMessage::HistoryUpdateRequest(_) => true,
137            SupportedMessage::CallRequest(_) => true,
138            _ => false,
139        }
140    }
141
142    pub fn request_header(&self) -> &RequestHeader {
143        match self {
144            SupportedMessage::OpenSecureChannelRequest(r) => &r.request_header,
145            SupportedMessage::CloseSecureChannelRequest(r) => &r.request_header,
146            SupportedMessage::GetEndpointsRequest(r) => &r.request_header,
147            SupportedMessage::FindServersRequest(r) => &r.request_header,
148            SupportedMessage::RegisterServerRequest(r) => &r.request_header,
149            SupportedMessage::RegisterServer2Request(r) => &r.request_header,
150            SupportedMessage::CreateSessionRequest(r) => &r.request_header,
151            SupportedMessage::CloseSessionRequest(r) => &r.request_header,
152            SupportedMessage::CancelRequest(r) => &r.request_header,
153            SupportedMessage::ActivateSessionRequest(r) => &r.request_header,
154            SupportedMessage::AddNodesRequest(r) => &r.request_header,
155            SupportedMessage::AddReferencesRequest(r) => &r.request_header,
156            SupportedMessage::DeleteNodesRequest(r) => &r.request_header,
157            SupportedMessage::DeleteReferencesRequest(r) => &r.request_header,
158            SupportedMessage::CreateMonitoredItemsRequest(r) => &r.request_header,
159            SupportedMessage::ModifyMonitoredItemsRequest(r) => &r.request_header,
160            SupportedMessage::DeleteMonitoredItemsRequest(r) => &r.request_header,
161            SupportedMessage::SetMonitoringModeRequest(r) => &r.request_header,
162            SupportedMessage::SetTriggeringRequest(r) => &r.request_header,
163            SupportedMessage::CreateSubscriptionRequest(r) => &r.request_header,
164            SupportedMessage::ModifySubscriptionRequest(r) => &r.request_header,
165            SupportedMessage::DeleteSubscriptionsRequest(r) => &r.request_header,
166            SupportedMessage::TransferSubscriptionsRequest(r) => &r.request_header,
167            SupportedMessage::SetPublishingModeRequest(r) => &r.request_header,
168            SupportedMessage::QueryFirstRequest(r) => &r.request_header,
169            SupportedMessage::QueryNextRequest(r) => &r.request_header,
170            SupportedMessage::BrowseRequest(r) => &r.request_header,
171            SupportedMessage::BrowseNextRequest(r) => &r.request_header,
172            SupportedMessage::PublishRequest(r) => &r.request_header,
173            SupportedMessage::RepublishRequest(r) => &r.request_header,
174            SupportedMessage::TranslateBrowsePathsToNodeIdsRequest(r) => &r.request_header,
175            SupportedMessage::RegisterNodesRequest(r) => &r.request_header,
176            SupportedMessage::UnregisterNodesRequest(r) => &r.request_header,
177            SupportedMessage::ReadRequest(r) => &r.request_header,
178            SupportedMessage::HistoryReadRequest(r) => &r.request_header,
179            SupportedMessage::WriteRequest(r) => &r.request_header,
180            SupportedMessage::HistoryUpdateRequest(r) => &r.request_header,
181            SupportedMessage::CallRequest(r) => &r.request_header,
182            _ => panic!(),
183        }
184    }
185
186    pub fn is_response(&self) -> bool {
187        match self {
188            SupportedMessage::ServiceFault(_) => true,
189            SupportedMessage::OpenSecureChannelResponse(_) => true,
190            SupportedMessage::CloseSecureChannelResponse(_) => true,
191            SupportedMessage::GetEndpointsResponse(_) => true,
192            SupportedMessage::FindServersResponse(_) => true,
193            SupportedMessage::RegisterServerResponse(_) => true,
194            SupportedMessage::RegisterServer2Response(_) => true,
195            SupportedMessage::CreateSessionResponse(_) => true,
196            SupportedMessage::CloseSessionResponse(_) => true,
197            SupportedMessage::CancelResponse(_) => true,
198            SupportedMessage::ActivateSessionResponse(_) => true,
199            SupportedMessage::AddNodesResponse(_) => true,
200            SupportedMessage::AddReferencesResponse(_) => true,
201            SupportedMessage::DeleteNodesResponse(_) => true,
202            SupportedMessage::DeleteReferencesResponse(_) => true,
203            SupportedMessage::CreateMonitoredItemsResponse(_) => true,
204            SupportedMessage::ModifyMonitoredItemsResponse(_) => true,
205            SupportedMessage::DeleteMonitoredItemsResponse(_) => true,
206            SupportedMessage::SetMonitoringModeResponse(_) => true,
207            SupportedMessage::SetTriggeringResponse(_) => true,
208            SupportedMessage::CreateSubscriptionResponse(_) => true,
209            SupportedMessage::ModifySubscriptionResponse(_) => true,
210            SupportedMessage::DeleteSubscriptionsResponse(_) => true,
211            SupportedMessage::TransferSubscriptionsResponse(_) => true,
212            SupportedMessage::SetPublishingModeResponse(_) => true,
213            SupportedMessage::QueryFirstResponse(_) => true,
214            SupportedMessage::QueryNextResponse(_) => true,
215            SupportedMessage::BrowseResponse(_) => true,
216            SupportedMessage::BrowseNextResponse(_) => true,
217            SupportedMessage::PublishResponse(_) => true,
218            SupportedMessage::RepublishResponse(_) => true,
219            SupportedMessage::TranslateBrowsePathsToNodeIdsResponse(_) => true,
220            SupportedMessage::RegisterNodesResponse(_) => true,
221            SupportedMessage::UnregisterNodesResponse(_) => true,
222            SupportedMessage::ReadResponse(_) => true,
223            SupportedMessage::HistoryReadResponse(_) => true,
224            SupportedMessage::WriteResponse(_) => true,
225            SupportedMessage::HistoryUpdateResponse(_) => true,
226            SupportedMessage::CallResponse(_) => true,
227            _ => false,
228        }
229    }
230
231    pub fn response_header(&self) -> &ResponseHeader {
232        match self {
233            SupportedMessage::ServiceFault(r) => &r.response_header,
234            SupportedMessage::OpenSecureChannelResponse(r) => &r.response_header,
235            SupportedMessage::CloseSecureChannelResponse(r) => &r.response_header,
236            SupportedMessage::GetEndpointsResponse(r) => &r.response_header,
237            SupportedMessage::FindServersResponse(r) => &r.response_header,
238            SupportedMessage::RegisterServerResponse(r) => &r.response_header,
239            SupportedMessage::RegisterServer2Response(r) => &r.response_header,
240            SupportedMessage::CreateSessionResponse(r) => &r.response_header,
241            SupportedMessage::CloseSessionResponse(r) => &r.response_header,
242            SupportedMessage::CancelResponse(r) => &r.response_header,
243            SupportedMessage::ActivateSessionResponse(r) => &r.response_header,
244            SupportedMessage::AddNodesResponse(r) => &r.response_header,
245            SupportedMessage::AddReferencesResponse(r) => &r.response_header,
246            SupportedMessage::DeleteNodesResponse(r) => &r.response_header,
247            SupportedMessage::DeleteReferencesResponse(r) => &r.response_header,
248            SupportedMessage::CreateMonitoredItemsResponse(r) => &r.response_header,
249            SupportedMessage::ModifyMonitoredItemsResponse(r) => &r.response_header,
250            SupportedMessage::DeleteMonitoredItemsResponse(r) => &r.response_header,
251            SupportedMessage::SetMonitoringModeResponse(r) => &r.response_header,
252            SupportedMessage::SetTriggeringResponse(r) => &r.response_header,
253            SupportedMessage::CreateSubscriptionResponse(r) => &r.response_header,
254            SupportedMessage::ModifySubscriptionResponse(r) => &r.response_header,
255            SupportedMessage::DeleteSubscriptionsResponse(r) => &r.response_header,
256            SupportedMessage::TransferSubscriptionsResponse(r) => &r.response_header,
257            SupportedMessage::SetPublishingModeResponse(r) => &r.response_header,
258            SupportedMessage::QueryFirstResponse(r) => &r.response_header,
259            SupportedMessage::QueryNextResponse(r) => &r.response_header,
260            SupportedMessage::BrowseResponse(r) => &r.response_header,
261            SupportedMessage::BrowseNextResponse(r) => &r.response_header,
262            SupportedMessage::PublishResponse(r) => &r.response_header,
263            SupportedMessage::RepublishResponse(r) => &r.response_header,
264            SupportedMessage::TranslateBrowsePathsToNodeIdsResponse(r) => &r.response_header,
265            SupportedMessage::RegisterNodesResponse(r) => &r.response_header,
266            SupportedMessage::UnregisterNodesResponse(r) => &r.response_header,
267            SupportedMessage::ReadResponse(r) => &r.response_header,
268            SupportedMessage::HistoryReadResponse(r) => &r.response_header,
269            SupportedMessage::WriteResponse(r) => &r.response_header,
270            SupportedMessage::HistoryUpdateResponse(r) => &r.response_header,
271            SupportedMessage::CallResponse(r) => &r.response_header,
272            _ => panic!(),
273        }
274    }
275
276    pub fn decode_by_object_id<S: Read>(
277        stream: &mut S,
278        object_id: ObjectId,
279        decoding_options: &DecodingOptions,
280    ) -> EncodingResult<Self> {
281        trace!("decoding object_id {:?}", object_id);
282        let decoded_message = match object_id {
283            ObjectId::ServiceFault_Encoding_DefaultBinary => {
284                ServiceFault::decode(stream, decoding_options)?.into()
285            }
286            ObjectId::OpenSecureChannelRequest_Encoding_DefaultBinary => {
287                OpenSecureChannelRequest::decode(stream, decoding_options)?.into()
288            }
289            ObjectId::OpenSecureChannelResponse_Encoding_DefaultBinary => {
290                OpenSecureChannelResponse::decode(stream, decoding_options)?.into()
291            }
292            ObjectId::CloseSecureChannelRequest_Encoding_DefaultBinary => {
293                CloseSecureChannelRequest::decode(stream, decoding_options)?.into()
294            }
295            ObjectId::CloseSecureChannelResponse_Encoding_DefaultBinary => {
296                CloseSecureChannelResponse::decode(stream, decoding_options)?.into()
297            }
298            ObjectId::GetEndpointsRequest_Encoding_DefaultBinary => {
299                GetEndpointsRequest::decode(stream, decoding_options)?.into()
300            }
301            ObjectId::GetEndpointsResponse_Encoding_DefaultBinary => {
302                GetEndpointsResponse::decode(stream, decoding_options)?.into()
303            }
304            ObjectId::FindServersRequest_Encoding_DefaultBinary => {
305                FindServersRequest::decode(stream, decoding_options)?.into()
306            }
307            ObjectId::FindServersResponse_Encoding_DefaultBinary => {
308                FindServersResponse::decode(stream, decoding_options)?.into()
309            }
310            ObjectId::RegisterServerRequest_Encoding_DefaultBinary => {
311                RegisterServerRequest::decode(stream, decoding_options)?.into()
312            }
313            ObjectId::RegisterServerResponse_Encoding_DefaultBinary => {
314                RegisterServerResponse::decode(stream, decoding_options)?.into()
315            }
316            ObjectId::RegisterServer2Request_Encoding_DefaultBinary => {
317                RegisterServer2Request::decode(stream, decoding_options)?.into()
318            }
319            ObjectId::RegisterServer2Response_Encoding_DefaultBinary => {
320                RegisterServer2Response::decode(stream, decoding_options)?.into()
321            }
322            ObjectId::CreateSessionRequest_Encoding_DefaultBinary => {
323                CreateSessionRequest::decode(stream, decoding_options)?.into()
324            }
325            ObjectId::CreateSessionResponse_Encoding_DefaultBinary => {
326                CreateSessionResponse::decode(stream, decoding_options)?.into()
327            }
328            ObjectId::CloseSessionRequest_Encoding_DefaultBinary => {
329                CloseSessionRequest::decode(stream, decoding_options)?.into()
330            }
331            ObjectId::CloseSessionResponse_Encoding_DefaultBinary => {
332                CloseSessionResponse::decode(stream, decoding_options)?.into()
333            }
334            ObjectId::CancelRequest_Encoding_DefaultBinary => {
335                CancelRequest::decode(stream, decoding_options)?.into()
336            }
337            ObjectId::CancelResponse_Encoding_DefaultBinary => {
338                CancelResponse::decode(stream, decoding_options)?.into()
339            }
340            ObjectId::ActivateSessionRequest_Encoding_DefaultBinary => {
341                ActivateSessionRequest::decode(stream, decoding_options)?.into()
342            }
343            ObjectId::ActivateSessionResponse_Encoding_DefaultBinary => {
344                ActivateSessionResponse::decode(stream, decoding_options)?.into()
345            }
346            ObjectId::AddNodesRequest_Encoding_DefaultBinary => {
347                AddNodesRequest::decode(stream, decoding_options)?.into()
348            }
349            ObjectId::AddNodesResponse_Encoding_DefaultBinary => {
350                AddNodesResponse::decode(stream, decoding_options)?.into()
351            }
352            ObjectId::AddReferencesRequest_Encoding_DefaultBinary => {
353                AddReferencesRequest::decode(stream, decoding_options)?.into()
354            }
355            ObjectId::AddReferencesResponse_Encoding_DefaultBinary => {
356                AddReferencesResponse::decode(stream, decoding_options)?.into()
357            }
358            ObjectId::DeleteNodesRequest_Encoding_DefaultBinary => {
359                DeleteNodesRequest::decode(stream, decoding_options)?.into()
360            }
361            ObjectId::DeleteNodesResponse_Encoding_DefaultBinary => {
362                DeleteNodesResponse::decode(stream, decoding_options)?.into()
363            }
364            ObjectId::DeleteReferencesRequest_Encoding_DefaultBinary => {
365                DeleteReferencesRequest::decode(stream, decoding_options)?.into()
366            }
367            ObjectId::DeleteReferencesResponse_Encoding_DefaultBinary => {
368                DeleteReferencesResponse::decode(stream, decoding_options)?.into()
369            }
370            ObjectId::CreateMonitoredItemsRequest_Encoding_DefaultBinary => {
371                CreateMonitoredItemsRequest::decode(stream, decoding_options)?.into()
372            }
373            ObjectId::CreateMonitoredItemsResponse_Encoding_DefaultBinary => {
374                CreateMonitoredItemsResponse::decode(stream, decoding_options)?.into()
375            }
376            ObjectId::ModifyMonitoredItemsRequest_Encoding_DefaultBinary => {
377                ModifyMonitoredItemsRequest::decode(stream, decoding_options)?.into()
378            }
379            ObjectId::ModifyMonitoredItemsResponse_Encoding_DefaultBinary => {
380                ModifyMonitoredItemsResponse::decode(stream, decoding_options)?.into()
381            }
382            ObjectId::DeleteMonitoredItemsRequest_Encoding_DefaultBinary => {
383                DeleteMonitoredItemsRequest::decode(stream, decoding_options)?.into()
384            }
385            ObjectId::DeleteMonitoredItemsResponse_Encoding_DefaultBinary => {
386                DeleteMonitoredItemsResponse::decode(stream, decoding_options)?.into()
387            }
388            ObjectId::SetMonitoringModeRequest_Encoding_DefaultBinary => {
389                SetMonitoringModeRequest::decode(stream, decoding_options)?.into()
390            }
391            ObjectId::SetMonitoringModeResponse_Encoding_DefaultBinary => {
392                SetMonitoringModeResponse::decode(stream, decoding_options)?.into()
393            }
394            ObjectId::SetTriggeringRequest_Encoding_DefaultBinary => {
395                SetTriggeringRequest::decode(stream, decoding_options)?.into()
396            }
397            ObjectId::SetTriggeringResponse_Encoding_DefaultBinary => {
398                SetTriggeringResponse::decode(stream, decoding_options)?.into()
399            }
400            ObjectId::CreateSubscriptionRequest_Encoding_DefaultBinary => {
401                CreateSubscriptionRequest::decode(stream, decoding_options)?.into()
402            }
403            ObjectId::CreateSubscriptionResponse_Encoding_DefaultBinary => {
404                CreateSubscriptionResponse::decode(stream, decoding_options)?.into()
405            }
406            ObjectId::ModifySubscriptionRequest_Encoding_DefaultBinary => {
407                ModifySubscriptionRequest::decode(stream, decoding_options)?.into()
408            }
409            ObjectId::ModifySubscriptionResponse_Encoding_DefaultBinary => {
410                ModifySubscriptionResponse::decode(stream, decoding_options)?.into()
411            }
412            ObjectId::DeleteSubscriptionsRequest_Encoding_DefaultBinary => {
413                DeleteSubscriptionsRequest::decode(stream, decoding_options)?.into()
414            }
415            ObjectId::DeleteSubscriptionsResponse_Encoding_DefaultBinary => {
416                DeleteSubscriptionsResponse::decode(stream, decoding_options)?.into()
417            }
418            ObjectId::TransferSubscriptionsRequest_Encoding_DefaultBinary => {
419                TransferSubscriptionsRequest::decode(stream, decoding_options)?.into()
420            }
421            ObjectId::TransferSubscriptionsResponse_Encoding_DefaultBinary => {
422                TransferSubscriptionsResponse::decode(stream, decoding_options)?.into()
423            }
424            ObjectId::SetPublishingModeRequest_Encoding_DefaultBinary => {
425                SetPublishingModeRequest::decode(stream, decoding_options)?.into()
426            }
427            ObjectId::SetPublishingModeResponse_Encoding_DefaultBinary => {
428                SetPublishingModeResponse::decode(stream, decoding_options)?.into()
429            }
430            ObjectId::QueryFirstRequest_Encoding_DefaultBinary => {
431                QueryFirstRequest::decode(stream, decoding_options)?.into()
432            }
433            ObjectId::QueryFirstResponse_Encoding_DefaultBinary => {
434                QueryFirstResponse::decode(stream, decoding_options)?.into()
435            }
436            ObjectId::QueryNextRequest_Encoding_DefaultBinary => {
437                QueryNextRequest::decode(stream, decoding_options)?.into()
438            }
439            ObjectId::QueryNextResponse_Encoding_DefaultBinary => {
440                QueryNextResponse::decode(stream, decoding_options)?.into()
441            }
442            ObjectId::BrowseRequest_Encoding_DefaultBinary => {
443                BrowseRequest::decode(stream, decoding_options)?.into()
444            }
445            ObjectId::BrowseResponse_Encoding_DefaultBinary => {
446                BrowseResponse::decode(stream, decoding_options)?.into()
447            }
448            ObjectId::BrowseNextRequest_Encoding_DefaultBinary => {
449                BrowseNextRequest::decode(stream, decoding_options)?.into()
450            }
451            ObjectId::BrowseNextResponse_Encoding_DefaultBinary => {
452                BrowseNextResponse::decode(stream, decoding_options)?.into()
453            }
454            ObjectId::PublishRequest_Encoding_DefaultBinary => {
455                PublishRequest::decode(stream, decoding_options)?.into()
456            }
457            ObjectId::PublishResponse_Encoding_DefaultBinary => {
458                PublishResponse::decode(stream, decoding_options)?.into()
459            }
460            ObjectId::RepublishRequest_Encoding_DefaultBinary => {
461                RepublishRequest::decode(stream, decoding_options)?.into()
462            }
463            ObjectId::RepublishResponse_Encoding_DefaultBinary => {
464                RepublishResponse::decode(stream, decoding_options)?.into()
465            }
466            ObjectId::TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary => {
467                TranslateBrowsePathsToNodeIdsRequest::decode(stream, decoding_options)?.into()
468            }
469            ObjectId::TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary => {
470                TranslateBrowsePathsToNodeIdsResponse::decode(stream, decoding_options)?.into()
471            }
472            ObjectId::RegisterNodesRequest_Encoding_DefaultBinary => {
473                RegisterNodesRequest::decode(stream, decoding_options)?.into()
474            }
475            ObjectId::RegisterNodesResponse_Encoding_DefaultBinary => {
476                RegisterNodesResponse::decode(stream, decoding_options)?.into()
477            }
478            ObjectId::UnregisterNodesRequest_Encoding_DefaultBinary => {
479                UnregisterNodesRequest::decode(stream, decoding_options)?.into()
480            }
481            ObjectId::UnregisterNodesResponse_Encoding_DefaultBinary => {
482                UnregisterNodesResponse::decode(stream, decoding_options)?.into()
483            }
484            ObjectId::ReadRequest_Encoding_DefaultBinary => {
485                ReadRequest::decode(stream, decoding_options)?.into()
486            }
487            ObjectId::ReadResponse_Encoding_DefaultBinary => {
488                ReadResponse::decode(stream, decoding_options)?.into()
489            }
490            ObjectId::HistoryReadRequest_Encoding_DefaultBinary => {
491                HistoryReadRequest::decode(stream, decoding_options)?.into()
492            }
493            ObjectId::HistoryReadResponse_Encoding_DefaultBinary => {
494                HistoryReadResponse::decode(stream, decoding_options)?.into()
495            }
496            ObjectId::WriteRequest_Encoding_DefaultBinary => {
497                WriteRequest::decode(stream, decoding_options)?.into()
498            }
499            ObjectId::WriteResponse_Encoding_DefaultBinary => {
500                WriteResponse::decode(stream, decoding_options)?.into()
501            }
502            ObjectId::HistoryUpdateRequest_Encoding_DefaultBinary => {
503                HistoryUpdateRequest::decode(stream, decoding_options)?.into()
504            }
505            ObjectId::HistoryUpdateResponse_Encoding_DefaultBinary => {
506                HistoryUpdateResponse::decode(stream, decoding_options)?.into()
507            }
508            ObjectId::CallRequest_Encoding_DefaultBinary => {
509                CallRequest::decode(stream, decoding_options)?.into()
510            }
511            ObjectId::CallResponse_Encoding_DefaultBinary => {
512                CallResponse::decode(stream, decoding_options)?.into()
513            }
514            _ => {
515                debug!("decoding unsupported for object id {:?}", object_id);
516                SupportedMessage::Invalid(object_id)
517            }
518        };
519        Ok(decoded_message)
520    }
521}
522
523// These are all the messages handled into and out of streams by the OPCUA server / client code
524supported_messages_enum![
525    ServiceFault,
526    OpenSecureChannelRequest,
527    OpenSecureChannelResponse,
528    CloseSecureChannelRequest,
529    CloseSecureChannelResponse,
530    GetEndpointsRequest,
531    GetEndpointsResponse,
532    FindServersRequest,
533    FindServersResponse,
534    RegisterServerRequest,
535    RegisterServerResponse,
536    RegisterServer2Request,
537    RegisterServer2Response,
538    CreateSessionRequest,
539    CreateSessionResponse,
540    CloseSessionRequest,
541    CloseSessionResponse,
542    CancelRequest,
543    CancelResponse,
544    ActivateSessionRequest,
545    ActivateSessionResponse,
546    AddNodesRequest,
547    AddNodesResponse,
548    AddReferencesRequest,
549    AddReferencesResponse,
550    DeleteNodesRequest,
551    DeleteNodesResponse,
552    DeleteReferencesRequest,
553    DeleteReferencesResponse,
554    CreateMonitoredItemsRequest,
555    CreateMonitoredItemsResponse,
556    ModifyMonitoredItemsRequest,
557    ModifyMonitoredItemsResponse,
558    DeleteMonitoredItemsRequest,
559    DeleteMonitoredItemsResponse,
560    SetMonitoringModeRequest,
561    SetMonitoringModeResponse,
562    SetTriggeringRequest,
563    SetTriggeringResponse,
564    CreateSubscriptionRequest,
565    CreateSubscriptionResponse,
566    ModifySubscriptionRequest,
567    ModifySubscriptionResponse,
568    DeleteSubscriptionsRequest,
569    DeleteSubscriptionsResponse,
570    TransferSubscriptionsRequest,
571    TransferSubscriptionsResponse,
572    SetPublishingModeRequest,
573    SetPublishingModeResponse,
574    QueryFirstRequest,
575    QueryFirstResponse,
576    QueryNextRequest,
577    QueryNextResponse,
578    BrowseRequest,
579    BrowseResponse,
580    BrowseNextRequest,
581    BrowseNextResponse,
582    PublishRequest,
583    PublishResponse,
584    RepublishRequest,
585    RepublishResponse,
586    TranslateBrowsePathsToNodeIdsRequest,
587    TranslateBrowsePathsToNodeIdsResponse,
588    RegisterNodesRequest,
589    RegisterNodesResponse,
590    UnregisterNodesRequest,
591    UnregisterNodesResponse,
592    ReadRequest,
593    ReadResponse,
594    HistoryReadRequest,
595    HistoryReadResponse,
596    WriteRequest,
597    WriteResponse,
598    HistoryUpdateRequest,
599    HistoryUpdateResponse,
600    CallRequest,
601    CallResponse,
602];