fidl_fuchsia_lowpan_driver/
fidl_fuchsia_lowpan_driver.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_lowpan_driver__common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14#[derive(Debug, PartialEq)]
15pub struct DriverGetProtocolsRequest {
16    pub protocols: Protocols,
17}
18
19impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for DriverGetProtocolsRequest {}
20
21#[derive(Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
22pub struct RegisterRegisterDeviceRequest {
23    pub name: String,
24    pub driver: fidl::endpoints::ClientEnd<DriverMarker>,
25}
26
27impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect>
28    for RegisterRegisterDeviceRequest
29{
30}
31
32/// Table of protocol requests that is passed into `Driver.GetProtocols()`.
33#[derive(Debug, Default, PartialEq)]
34pub struct Protocols {
35    pub device: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>>,
36    pub device_extra:
37        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>>,
38    pub device_test: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>>,
39    pub device_route:
40        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceRouteMarker>>,
41    pub device_route_extra: Option<
42        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker>,
43    >,
44    pub counters: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>>,
45    pub thread_legacy_joining:
46        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker>>,
47    pub thread_dataset:
48        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>>,
49    pub energy_scan:
50        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>>,
51    pub experimental_device:
52        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>>,
53    pub experimental_device_extra:
54        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceExtraMarker>>,
55    pub meshcop: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>>,
56    pub telemetry_provider: Option<
57        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker>,
58    >,
59    pub thread_feature:
60        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>>,
61    pub capabilities:
62        Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker>>,
63    pub epskc: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::EpskcMarker>>,
64    #[doc(hidden)]
65    pub __source_breaking: fidl::marker::SourceBreaking,
66}
67
68impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Protocols {}
69
70#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
71pub struct DriverMarker;
72
73impl fidl::endpoints::ProtocolMarker for DriverMarker {
74    type Proxy = DriverProxy;
75    type RequestStream = DriverRequestStream;
76    #[cfg(target_os = "fuchsia")]
77    type SynchronousProxy = DriverSynchronousProxy;
78
79    const DEBUG_NAME: &'static str = "(anonymous) Driver";
80}
81
82pub trait DriverProxyInterface: Send + Sync {
83    fn r#get_protocols(&self, protocols: Protocols) -> Result<(), fidl::Error>;
84}
85#[derive(Debug)]
86#[cfg(target_os = "fuchsia")]
87pub struct DriverSynchronousProxy {
88    client: fidl::client::sync::Client,
89}
90
91#[cfg(target_os = "fuchsia")]
92impl fidl::endpoints::SynchronousProxy for DriverSynchronousProxy {
93    type Proxy = DriverProxy;
94    type Protocol = DriverMarker;
95
96    fn from_channel(inner: fidl::Channel) -> Self {
97        Self::new(inner)
98    }
99
100    fn into_channel(self) -> fidl::Channel {
101        self.client.into_channel()
102    }
103
104    fn as_channel(&self) -> &fidl::Channel {
105        self.client.as_channel()
106    }
107}
108
109#[cfg(target_os = "fuchsia")]
110impl DriverSynchronousProxy {
111    pub fn new(channel: fidl::Channel) -> Self {
112        let protocol_name = <DriverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
113        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
114    }
115
116    pub fn into_channel(self) -> fidl::Channel {
117        self.client.into_channel()
118    }
119
120    /// Waits until an event arrives and returns it. It is safe for other
121    /// threads to make concurrent requests while waiting for an event.
122    pub fn wait_for_event(
123        &self,
124        deadline: zx::MonotonicInstant,
125    ) -> Result<DriverEvent, fidl::Error> {
126        DriverEvent::decode(self.client.wait_for_event(deadline)?)
127    }
128
129    /// Request protocols to control this device.
130    /// Unsupported protocols are closed.
131    pub fn r#get_protocols(&self, mut protocols: Protocols) -> Result<(), fidl::Error> {
132        self.client.send::<DriverGetProtocolsRequest>(
133            (&mut protocols,),
134            0x165f5b09fcc7bc85,
135            fidl::encoding::DynamicFlags::empty(),
136        )
137    }
138}
139
140#[cfg(target_os = "fuchsia")]
141impl From<DriverSynchronousProxy> for zx::Handle {
142    fn from(value: DriverSynchronousProxy) -> Self {
143        value.into_channel().into()
144    }
145}
146
147#[cfg(target_os = "fuchsia")]
148impl From<fidl::Channel> for DriverSynchronousProxy {
149    fn from(value: fidl::Channel) -> Self {
150        Self::new(value)
151    }
152}
153
154#[cfg(target_os = "fuchsia")]
155impl fidl::endpoints::FromClient for DriverSynchronousProxy {
156    type Protocol = DriverMarker;
157
158    fn from_client(value: fidl::endpoints::ClientEnd<DriverMarker>) -> Self {
159        Self::new(value.into_channel())
160    }
161}
162
163#[derive(Debug, Clone)]
164pub struct DriverProxy {
165    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
166}
167
168impl fidl::endpoints::Proxy for DriverProxy {
169    type Protocol = DriverMarker;
170
171    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
172        Self::new(inner)
173    }
174
175    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
176        self.client.into_channel().map_err(|client| Self { client })
177    }
178
179    fn as_channel(&self) -> &::fidl::AsyncChannel {
180        self.client.as_channel()
181    }
182}
183
184impl DriverProxy {
185    /// Create a new Proxy for fuchsia.lowpan.driver/Driver.
186    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
187        let protocol_name = <DriverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
188        Self { client: fidl::client::Client::new(channel, protocol_name) }
189    }
190
191    /// Get a Stream of events from the remote end of the protocol.
192    ///
193    /// # Panics
194    ///
195    /// Panics if the event stream was already taken.
196    pub fn take_event_stream(&self) -> DriverEventStream {
197        DriverEventStream { event_receiver: self.client.take_event_receiver() }
198    }
199
200    /// Request protocols to control this device.
201    /// Unsupported protocols are closed.
202    pub fn r#get_protocols(&self, mut protocols: Protocols) -> Result<(), fidl::Error> {
203        DriverProxyInterface::r#get_protocols(self, protocols)
204    }
205}
206
207impl DriverProxyInterface for DriverProxy {
208    fn r#get_protocols(&self, mut protocols: Protocols) -> Result<(), fidl::Error> {
209        self.client.send::<DriverGetProtocolsRequest>(
210            (&mut protocols,),
211            0x165f5b09fcc7bc85,
212            fidl::encoding::DynamicFlags::empty(),
213        )
214    }
215}
216
217pub struct DriverEventStream {
218    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
219}
220
221impl std::marker::Unpin for DriverEventStream {}
222
223impl futures::stream::FusedStream for DriverEventStream {
224    fn is_terminated(&self) -> bool {
225        self.event_receiver.is_terminated()
226    }
227}
228
229impl futures::Stream for DriverEventStream {
230    type Item = Result<DriverEvent, fidl::Error>;
231
232    fn poll_next(
233        mut self: std::pin::Pin<&mut Self>,
234        cx: &mut std::task::Context<'_>,
235    ) -> std::task::Poll<Option<Self::Item>> {
236        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
237            &mut self.event_receiver,
238            cx
239        )?) {
240            Some(buf) => std::task::Poll::Ready(Some(DriverEvent::decode(buf))),
241            None => std::task::Poll::Ready(None),
242        }
243    }
244}
245
246#[derive(Debug)]
247pub enum DriverEvent {}
248
249impl DriverEvent {
250    /// Decodes a message buffer as a [`DriverEvent`].
251    fn decode(
252        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
253    ) -> Result<DriverEvent, fidl::Error> {
254        let (bytes, _handles) = buf.split_mut();
255        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
256        debug_assert_eq!(tx_header.tx_id, 0);
257        match tx_header.ordinal {
258            _ => Err(fidl::Error::UnknownOrdinal {
259                ordinal: tx_header.ordinal,
260                protocol_name: <DriverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
261            }),
262        }
263    }
264}
265
266/// A Stream of incoming requests for fuchsia.lowpan.driver/Driver.
267pub struct DriverRequestStream {
268    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
269    is_terminated: bool,
270}
271
272impl std::marker::Unpin for DriverRequestStream {}
273
274impl futures::stream::FusedStream for DriverRequestStream {
275    fn is_terminated(&self) -> bool {
276        self.is_terminated
277    }
278}
279
280impl fidl::endpoints::RequestStream for DriverRequestStream {
281    type Protocol = DriverMarker;
282    type ControlHandle = DriverControlHandle;
283
284    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
285        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
286    }
287
288    fn control_handle(&self) -> Self::ControlHandle {
289        DriverControlHandle { inner: self.inner.clone() }
290    }
291
292    fn into_inner(
293        self,
294    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
295    {
296        (self.inner, self.is_terminated)
297    }
298
299    fn from_inner(
300        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
301        is_terminated: bool,
302    ) -> Self {
303        Self { inner, is_terminated }
304    }
305}
306
307impl futures::Stream for DriverRequestStream {
308    type Item = Result<DriverRequest, fidl::Error>;
309
310    fn poll_next(
311        mut self: std::pin::Pin<&mut Self>,
312        cx: &mut std::task::Context<'_>,
313    ) -> std::task::Poll<Option<Self::Item>> {
314        let this = &mut *self;
315        if this.inner.check_shutdown(cx) {
316            this.is_terminated = true;
317            return std::task::Poll::Ready(None);
318        }
319        if this.is_terminated {
320            panic!("polled DriverRequestStream after completion");
321        }
322        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
323            |bytes, handles| {
324                match this.inner.channel().read_etc(cx, bytes, handles) {
325                    std::task::Poll::Ready(Ok(())) => {}
326                    std::task::Poll::Pending => return std::task::Poll::Pending,
327                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
328                        this.is_terminated = true;
329                        return std::task::Poll::Ready(None);
330                    }
331                    std::task::Poll::Ready(Err(e)) => {
332                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
333                            e.into(),
334                        ))));
335                    }
336                }
337
338                // A message has been received from the channel
339                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
340
341                std::task::Poll::Ready(Some(match header.ordinal {
342                    0x165f5b09fcc7bc85 => {
343                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
344                        let mut req = fidl::new_empty!(
345                            DriverGetProtocolsRequest,
346                            fidl::encoding::DefaultFuchsiaResourceDialect
347                        );
348                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DriverGetProtocolsRequest>(&header, _body_bytes, handles, &mut req)?;
349                        let control_handle = DriverControlHandle { inner: this.inner.clone() };
350                        Ok(DriverRequest::GetProtocols { protocols: req.protocols, control_handle })
351                    }
352                    _ => Err(fidl::Error::UnknownOrdinal {
353                        ordinal: header.ordinal,
354                        protocol_name:
355                            <DriverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
356                    }),
357                }))
358            },
359        )
360    }
361}
362
363/// Protocol representing a LoWPAN driver instance.
364#[derive(Debug)]
365pub enum DriverRequest {
366    /// Request protocols to control this device.
367    /// Unsupported protocols are closed.
368    GetProtocols { protocols: Protocols, control_handle: DriverControlHandle },
369}
370
371impl DriverRequest {
372    #[allow(irrefutable_let_patterns)]
373    pub fn into_get_protocols(self) -> Option<(Protocols, DriverControlHandle)> {
374        if let DriverRequest::GetProtocols { protocols, control_handle } = self {
375            Some((protocols, control_handle))
376        } else {
377            None
378        }
379    }
380
381    /// Name of the method defined in FIDL
382    pub fn method_name(&self) -> &'static str {
383        match *self {
384            DriverRequest::GetProtocols { .. } => "get_protocols",
385        }
386    }
387}
388
389#[derive(Debug, Clone)]
390pub struct DriverControlHandle {
391    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
392}
393
394impl fidl::endpoints::ControlHandle for DriverControlHandle {
395    fn shutdown(&self) {
396        self.inner.shutdown()
397    }
398    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
399        self.inner.shutdown_with_epitaph(status)
400    }
401
402    fn is_closed(&self) -> bool {
403        self.inner.channel().is_closed()
404    }
405    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
406        self.inner.channel().on_closed()
407    }
408
409    #[cfg(target_os = "fuchsia")]
410    fn signal_peer(
411        &self,
412        clear_mask: zx::Signals,
413        set_mask: zx::Signals,
414    ) -> Result<(), zx_status::Status> {
415        use fidl::Peered;
416        self.inner.channel().signal_peer(clear_mask, set_mask)
417    }
418}
419
420impl DriverControlHandle {}
421
422#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
423pub struct RegisterMarker;
424
425impl fidl::endpoints::ProtocolMarker for RegisterMarker {
426    type Proxy = RegisterProxy;
427    type RequestStream = RegisterRequestStream;
428    #[cfg(target_os = "fuchsia")]
429    type SynchronousProxy = RegisterSynchronousProxy;
430
431    const DEBUG_NAME: &'static str = "fuchsia.lowpan.driver.Register";
432}
433impl fidl::endpoints::DiscoverableProtocolMarker for RegisterMarker {}
434
435pub trait RegisterProxyInterface: Send + Sync {
436    fn r#register_device(
437        &self,
438        name: &str,
439        driver: fidl::endpoints::ClientEnd<DriverMarker>,
440    ) -> Result<(), fidl::Error>;
441}
442#[derive(Debug)]
443#[cfg(target_os = "fuchsia")]
444pub struct RegisterSynchronousProxy {
445    client: fidl::client::sync::Client,
446}
447
448#[cfg(target_os = "fuchsia")]
449impl fidl::endpoints::SynchronousProxy for RegisterSynchronousProxy {
450    type Proxy = RegisterProxy;
451    type Protocol = RegisterMarker;
452
453    fn from_channel(inner: fidl::Channel) -> Self {
454        Self::new(inner)
455    }
456
457    fn into_channel(self) -> fidl::Channel {
458        self.client.into_channel()
459    }
460
461    fn as_channel(&self) -> &fidl::Channel {
462        self.client.as_channel()
463    }
464}
465
466#[cfg(target_os = "fuchsia")]
467impl RegisterSynchronousProxy {
468    pub fn new(channel: fidl::Channel) -> Self {
469        let protocol_name = <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
470        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
471    }
472
473    pub fn into_channel(self) -> fidl::Channel {
474        self.client.into_channel()
475    }
476
477    /// Waits until an event arrives and returns it. It is safe for other
478    /// threads to make concurrent requests while waiting for an event.
479    pub fn wait_for_event(
480        &self,
481        deadline: zx::MonotonicInstant,
482    ) -> Result<RegisterEvent, fidl::Error> {
483        RegisterEvent::decode(self.client.wait_for_event(deadline)?)
484    }
485
486    /// Registers the given LoWPAN device with the LoWPAN Service
487    /// using the given interface name.
488    pub fn r#register_device(
489        &self,
490        mut name: &str,
491        mut driver: fidl::endpoints::ClientEnd<DriverMarker>,
492    ) -> Result<(), fidl::Error> {
493        self.client.send::<RegisterRegisterDeviceRequest>(
494            (name, driver),
495            0x19280d20cfdd62e6,
496            fidl::encoding::DynamicFlags::empty(),
497        )
498    }
499}
500
501#[cfg(target_os = "fuchsia")]
502impl From<RegisterSynchronousProxy> for zx::Handle {
503    fn from(value: RegisterSynchronousProxy) -> Self {
504        value.into_channel().into()
505    }
506}
507
508#[cfg(target_os = "fuchsia")]
509impl From<fidl::Channel> for RegisterSynchronousProxy {
510    fn from(value: fidl::Channel) -> Self {
511        Self::new(value)
512    }
513}
514
515#[cfg(target_os = "fuchsia")]
516impl fidl::endpoints::FromClient for RegisterSynchronousProxy {
517    type Protocol = RegisterMarker;
518
519    fn from_client(value: fidl::endpoints::ClientEnd<RegisterMarker>) -> Self {
520        Self::new(value.into_channel())
521    }
522}
523
524#[derive(Debug, Clone)]
525pub struct RegisterProxy {
526    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
527}
528
529impl fidl::endpoints::Proxy for RegisterProxy {
530    type Protocol = RegisterMarker;
531
532    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
533        Self::new(inner)
534    }
535
536    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
537        self.client.into_channel().map_err(|client| Self { client })
538    }
539
540    fn as_channel(&self) -> &::fidl::AsyncChannel {
541        self.client.as_channel()
542    }
543}
544
545impl RegisterProxy {
546    /// Create a new Proxy for fuchsia.lowpan.driver/Register.
547    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
548        let protocol_name = <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
549        Self { client: fidl::client::Client::new(channel, protocol_name) }
550    }
551
552    /// Get a Stream of events from the remote end of the protocol.
553    ///
554    /// # Panics
555    ///
556    /// Panics if the event stream was already taken.
557    pub fn take_event_stream(&self) -> RegisterEventStream {
558        RegisterEventStream { event_receiver: self.client.take_event_receiver() }
559    }
560
561    /// Registers the given LoWPAN device with the LoWPAN Service
562    /// using the given interface name.
563    pub fn r#register_device(
564        &self,
565        mut name: &str,
566        mut driver: fidl::endpoints::ClientEnd<DriverMarker>,
567    ) -> Result<(), fidl::Error> {
568        RegisterProxyInterface::r#register_device(self, name, driver)
569    }
570}
571
572impl RegisterProxyInterface for RegisterProxy {
573    fn r#register_device(
574        &self,
575        mut name: &str,
576        mut driver: fidl::endpoints::ClientEnd<DriverMarker>,
577    ) -> Result<(), fidl::Error> {
578        self.client.send::<RegisterRegisterDeviceRequest>(
579            (name, driver),
580            0x19280d20cfdd62e6,
581            fidl::encoding::DynamicFlags::empty(),
582        )
583    }
584}
585
586pub struct RegisterEventStream {
587    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
588}
589
590impl std::marker::Unpin for RegisterEventStream {}
591
592impl futures::stream::FusedStream for RegisterEventStream {
593    fn is_terminated(&self) -> bool {
594        self.event_receiver.is_terminated()
595    }
596}
597
598impl futures::Stream for RegisterEventStream {
599    type Item = Result<RegisterEvent, fidl::Error>;
600
601    fn poll_next(
602        mut self: std::pin::Pin<&mut Self>,
603        cx: &mut std::task::Context<'_>,
604    ) -> std::task::Poll<Option<Self::Item>> {
605        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
606            &mut self.event_receiver,
607            cx
608        )?) {
609            Some(buf) => std::task::Poll::Ready(Some(RegisterEvent::decode(buf))),
610            None => std::task::Poll::Ready(None),
611        }
612    }
613}
614
615#[derive(Debug)]
616pub enum RegisterEvent {}
617
618impl RegisterEvent {
619    /// Decodes a message buffer as a [`RegisterEvent`].
620    fn decode(
621        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
622    ) -> Result<RegisterEvent, fidl::Error> {
623        let (bytes, _handles) = buf.split_mut();
624        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
625        debug_assert_eq!(tx_header.tx_id, 0);
626        match tx_header.ordinal {
627            _ => Err(fidl::Error::UnknownOrdinal {
628                ordinal: tx_header.ordinal,
629                protocol_name: <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
630            }),
631        }
632    }
633}
634
635/// A Stream of incoming requests for fuchsia.lowpan.driver/Register.
636pub struct RegisterRequestStream {
637    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
638    is_terminated: bool,
639}
640
641impl std::marker::Unpin for RegisterRequestStream {}
642
643impl futures::stream::FusedStream for RegisterRequestStream {
644    fn is_terminated(&self) -> bool {
645        self.is_terminated
646    }
647}
648
649impl fidl::endpoints::RequestStream for RegisterRequestStream {
650    type Protocol = RegisterMarker;
651    type ControlHandle = RegisterControlHandle;
652
653    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
654        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
655    }
656
657    fn control_handle(&self) -> Self::ControlHandle {
658        RegisterControlHandle { inner: self.inner.clone() }
659    }
660
661    fn into_inner(
662        self,
663    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
664    {
665        (self.inner, self.is_terminated)
666    }
667
668    fn from_inner(
669        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
670        is_terminated: bool,
671    ) -> Self {
672        Self { inner, is_terminated }
673    }
674}
675
676impl futures::Stream for RegisterRequestStream {
677    type Item = Result<RegisterRequest, fidl::Error>;
678
679    fn poll_next(
680        mut self: std::pin::Pin<&mut Self>,
681        cx: &mut std::task::Context<'_>,
682    ) -> std::task::Poll<Option<Self::Item>> {
683        let this = &mut *self;
684        if this.inner.check_shutdown(cx) {
685            this.is_terminated = true;
686            return std::task::Poll::Ready(None);
687        }
688        if this.is_terminated {
689            panic!("polled RegisterRequestStream after completion");
690        }
691        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
692            |bytes, handles| {
693                match this.inner.channel().read_etc(cx, bytes, handles) {
694                    std::task::Poll::Ready(Ok(())) => {}
695                    std::task::Poll::Pending => return std::task::Poll::Pending,
696                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
697                        this.is_terminated = true;
698                        return std::task::Poll::Ready(None);
699                    }
700                    std::task::Poll::Ready(Err(e)) => {
701                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
702                            e.into(),
703                        ))));
704                    }
705                }
706
707                // A message has been received from the channel
708                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
709
710                std::task::Poll::Ready(Some(match header.ordinal {
711                    0x19280d20cfdd62e6 => {
712                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
713                        let mut req = fidl::new_empty!(
714                            RegisterRegisterDeviceRequest,
715                            fidl::encoding::DefaultFuchsiaResourceDialect
716                        );
717                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<RegisterRegisterDeviceRequest>(&header, _body_bytes, handles, &mut req)?;
718                        let control_handle = RegisterControlHandle { inner: this.inner.clone() };
719                        Ok(RegisterRequest::RegisterDevice {
720                            name: req.name,
721                            driver: req.driver,
722
723                            control_handle,
724                        })
725                    }
726                    _ => Err(fidl::Error::UnknownOrdinal {
727                        ordinal: header.ordinal,
728                        protocol_name:
729                            <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
730                    }),
731                }))
732            },
733        )
734    }
735}
736
737/// Protocol for registering LoWPAN interfaces and their
738/// associated control protocols with the LoWPAN service.
739#[derive(Debug)]
740pub enum RegisterRequest {
741    /// Registers the given LoWPAN device with the LoWPAN Service
742    /// using the given interface name.
743    RegisterDevice {
744        name: String,
745        driver: fidl::endpoints::ClientEnd<DriverMarker>,
746        control_handle: RegisterControlHandle,
747    },
748}
749
750impl RegisterRequest {
751    #[allow(irrefutable_let_patterns)]
752    pub fn into_register_device(
753        self,
754    ) -> Option<(String, fidl::endpoints::ClientEnd<DriverMarker>, RegisterControlHandle)> {
755        if let RegisterRequest::RegisterDevice { name, driver, control_handle } = self {
756            Some((name, driver, control_handle))
757        } else {
758            None
759        }
760    }
761
762    /// Name of the method defined in FIDL
763    pub fn method_name(&self) -> &'static str {
764        match *self {
765            RegisterRequest::RegisterDevice { .. } => "register_device",
766        }
767    }
768}
769
770#[derive(Debug, Clone)]
771pub struct RegisterControlHandle {
772    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
773}
774
775impl fidl::endpoints::ControlHandle for RegisterControlHandle {
776    fn shutdown(&self) {
777        self.inner.shutdown()
778    }
779    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
780        self.inner.shutdown_with_epitaph(status)
781    }
782
783    fn is_closed(&self) -> bool {
784        self.inner.channel().is_closed()
785    }
786    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
787        self.inner.channel().on_closed()
788    }
789
790    #[cfg(target_os = "fuchsia")]
791    fn signal_peer(
792        &self,
793        clear_mask: zx::Signals,
794        set_mask: zx::Signals,
795    ) -> Result<(), zx_status::Status> {
796        use fidl::Peered;
797        self.inner.channel().signal_peer(clear_mask, set_mask)
798    }
799}
800
801impl RegisterControlHandle {}
802
803mod internal {
804    use super::*;
805
806    impl fidl::encoding::ResourceTypeMarker for DriverGetProtocolsRequest {
807        type Borrowed<'a> = &'a mut Self;
808        fn take_or_borrow<'a>(
809            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
810        ) -> Self::Borrowed<'a> {
811            value
812        }
813    }
814
815    unsafe impl fidl::encoding::TypeMarker for DriverGetProtocolsRequest {
816        type Owned = Self;
817
818        #[inline(always)]
819        fn inline_align(_context: fidl::encoding::Context) -> usize {
820            8
821        }
822
823        #[inline(always)]
824        fn inline_size(_context: fidl::encoding::Context) -> usize {
825            16
826        }
827    }
828
829    unsafe impl
830        fidl::encoding::Encode<
831            DriverGetProtocolsRequest,
832            fidl::encoding::DefaultFuchsiaResourceDialect,
833        > for &mut DriverGetProtocolsRequest
834    {
835        #[inline]
836        unsafe fn encode(
837            self,
838            encoder: &mut fidl::encoding::Encoder<
839                '_,
840                fidl::encoding::DefaultFuchsiaResourceDialect,
841            >,
842            offset: usize,
843            _depth: fidl::encoding::Depth,
844        ) -> fidl::Result<()> {
845            encoder.debug_check_bounds::<DriverGetProtocolsRequest>(offset);
846            // Delegate to tuple encoding.
847            fidl::encoding::Encode::<
848                DriverGetProtocolsRequest,
849                fidl::encoding::DefaultFuchsiaResourceDialect,
850            >::encode(
851                (<Protocols as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
852                    &mut self.protocols,
853                ),),
854                encoder,
855                offset,
856                _depth,
857            )
858        }
859    }
860    unsafe impl<
861        T0: fidl::encoding::Encode<Protocols, fidl::encoding::DefaultFuchsiaResourceDialect>,
862    >
863        fidl::encoding::Encode<
864            DriverGetProtocolsRequest,
865            fidl::encoding::DefaultFuchsiaResourceDialect,
866        > for (T0,)
867    {
868        #[inline]
869        unsafe fn encode(
870            self,
871            encoder: &mut fidl::encoding::Encoder<
872                '_,
873                fidl::encoding::DefaultFuchsiaResourceDialect,
874            >,
875            offset: usize,
876            depth: fidl::encoding::Depth,
877        ) -> fidl::Result<()> {
878            encoder.debug_check_bounds::<DriverGetProtocolsRequest>(offset);
879            // Zero out padding regions. There's no need to apply masks
880            // because the unmasked parts will be overwritten by fields.
881            // Write the fields.
882            self.0.encode(encoder, offset + 0, depth)?;
883            Ok(())
884        }
885    }
886
887    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
888        for DriverGetProtocolsRequest
889    {
890        #[inline(always)]
891        fn new_empty() -> Self {
892            Self {
893                protocols: fidl::new_empty!(
894                    Protocols,
895                    fidl::encoding::DefaultFuchsiaResourceDialect
896                ),
897            }
898        }
899
900        #[inline]
901        unsafe fn decode(
902            &mut self,
903            decoder: &mut fidl::encoding::Decoder<
904                '_,
905                fidl::encoding::DefaultFuchsiaResourceDialect,
906            >,
907            offset: usize,
908            _depth: fidl::encoding::Depth,
909        ) -> fidl::Result<()> {
910            decoder.debug_check_bounds::<Self>(offset);
911            // Verify that padding bytes are zero.
912            fidl::decode!(
913                Protocols,
914                fidl::encoding::DefaultFuchsiaResourceDialect,
915                &mut self.protocols,
916                decoder,
917                offset + 0,
918                _depth
919            )?;
920            Ok(())
921        }
922    }
923
924    impl fidl::encoding::ResourceTypeMarker for RegisterRegisterDeviceRequest {
925        type Borrowed<'a> = &'a mut Self;
926        fn take_or_borrow<'a>(
927            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
928        ) -> Self::Borrowed<'a> {
929            value
930        }
931    }
932
933    unsafe impl fidl::encoding::TypeMarker for RegisterRegisterDeviceRequest {
934        type Owned = Self;
935
936        #[inline(always)]
937        fn inline_align(_context: fidl::encoding::Context) -> usize {
938            8
939        }
940
941        #[inline(always)]
942        fn inline_size(_context: fidl::encoding::Context) -> usize {
943            24
944        }
945    }
946
947    unsafe impl
948        fidl::encoding::Encode<
949            RegisterRegisterDeviceRequest,
950            fidl::encoding::DefaultFuchsiaResourceDialect,
951        > for &mut RegisterRegisterDeviceRequest
952    {
953        #[inline]
954        unsafe fn encode(
955            self,
956            encoder: &mut fidl::encoding::Encoder<
957                '_,
958                fidl::encoding::DefaultFuchsiaResourceDialect,
959            >,
960            offset: usize,
961            _depth: fidl::encoding::Depth,
962        ) -> fidl::Result<()> {
963            encoder.debug_check_bounds::<RegisterRegisterDeviceRequest>(offset);
964            // Delegate to tuple encoding.
965            fidl::encoding::Encode::<RegisterRegisterDeviceRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
966                (
967                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
968                    <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.driver),
969                ),
970                encoder, offset, _depth
971            )
972        }
973    }
974    unsafe impl<
975        T0: fidl::encoding::Encode<
976                fidl::encoding::BoundedString<32>,
977                fidl::encoding::DefaultFuchsiaResourceDialect,
978            >,
979        T1: fidl::encoding::Encode<
980                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>>,
981                fidl::encoding::DefaultFuchsiaResourceDialect,
982            >,
983    >
984        fidl::encoding::Encode<
985            RegisterRegisterDeviceRequest,
986            fidl::encoding::DefaultFuchsiaResourceDialect,
987        > for (T0, T1)
988    {
989        #[inline]
990        unsafe fn encode(
991            self,
992            encoder: &mut fidl::encoding::Encoder<
993                '_,
994                fidl::encoding::DefaultFuchsiaResourceDialect,
995            >,
996            offset: usize,
997            depth: fidl::encoding::Depth,
998        ) -> fidl::Result<()> {
999            encoder.debug_check_bounds::<RegisterRegisterDeviceRequest>(offset);
1000            // Zero out padding regions. There's no need to apply masks
1001            // because the unmasked parts will be overwritten by fields.
1002            unsafe {
1003                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1004                (ptr as *mut u64).write_unaligned(0);
1005            }
1006            // Write the fields.
1007            self.0.encode(encoder, offset + 0, depth)?;
1008            self.1.encode(encoder, offset + 16, depth)?;
1009            Ok(())
1010        }
1011    }
1012
1013    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1014        for RegisterRegisterDeviceRequest
1015    {
1016        #[inline(always)]
1017        fn new_empty() -> Self {
1018            Self {
1019                name: fidl::new_empty!(
1020                    fidl::encoding::BoundedString<32>,
1021                    fidl::encoding::DefaultFuchsiaResourceDialect
1022                ),
1023                driver: fidl::new_empty!(
1024                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>>,
1025                    fidl::encoding::DefaultFuchsiaResourceDialect
1026                ),
1027            }
1028        }
1029
1030        #[inline]
1031        unsafe fn decode(
1032            &mut self,
1033            decoder: &mut fidl::encoding::Decoder<
1034                '_,
1035                fidl::encoding::DefaultFuchsiaResourceDialect,
1036            >,
1037            offset: usize,
1038            _depth: fidl::encoding::Depth,
1039        ) -> fidl::Result<()> {
1040            decoder.debug_check_bounds::<Self>(offset);
1041            // Verify that padding bytes are zero.
1042            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1043            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1044            let mask = 0xffffffff00000000u64;
1045            let maskedval = padval & mask;
1046            if maskedval != 0 {
1047                return Err(fidl::Error::NonZeroPadding {
1048                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1049                });
1050            }
1051            fidl::decode!(
1052                fidl::encoding::BoundedString<32>,
1053                fidl::encoding::DefaultFuchsiaResourceDialect,
1054                &mut self.name,
1055                decoder,
1056                offset + 0,
1057                _depth
1058            )?;
1059            fidl::decode!(
1060                fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>>,
1061                fidl::encoding::DefaultFuchsiaResourceDialect,
1062                &mut self.driver,
1063                decoder,
1064                offset + 16,
1065                _depth
1066            )?;
1067            Ok(())
1068        }
1069    }
1070
1071    impl Protocols {
1072        #[inline(always)]
1073        fn max_ordinal_present(&self) -> u64 {
1074            if let Some(_) = self.epskc {
1075                return 16;
1076            }
1077            if let Some(_) = self.capabilities {
1078                return 15;
1079            }
1080            if let Some(_) = self.thread_feature {
1081                return 14;
1082            }
1083            if let Some(_) = self.telemetry_provider {
1084                return 13;
1085            }
1086            if let Some(_) = self.meshcop {
1087                return 12;
1088            }
1089            if let Some(_) = self.experimental_device_extra {
1090                return 11;
1091            }
1092            if let Some(_) = self.experimental_device {
1093                return 10;
1094            }
1095            if let Some(_) = self.energy_scan {
1096                return 9;
1097            }
1098            if let Some(_) = self.thread_dataset {
1099                return 8;
1100            }
1101            if let Some(_) = self.thread_legacy_joining {
1102                return 7;
1103            }
1104            if let Some(_) = self.counters {
1105                return 6;
1106            }
1107            if let Some(_) = self.device_route_extra {
1108                return 5;
1109            }
1110            if let Some(_) = self.device_route {
1111                return 4;
1112            }
1113            if let Some(_) = self.device_test {
1114                return 3;
1115            }
1116            if let Some(_) = self.device_extra {
1117                return 2;
1118            }
1119            if let Some(_) = self.device {
1120                return 1;
1121            }
1122            0
1123        }
1124    }
1125
1126    impl fidl::encoding::ResourceTypeMarker for Protocols {
1127        type Borrowed<'a> = &'a mut Self;
1128        fn take_or_borrow<'a>(
1129            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1130        ) -> Self::Borrowed<'a> {
1131            value
1132        }
1133    }
1134
1135    unsafe impl fidl::encoding::TypeMarker for Protocols {
1136        type Owned = Self;
1137
1138        #[inline(always)]
1139        fn inline_align(_context: fidl::encoding::Context) -> usize {
1140            8
1141        }
1142
1143        #[inline(always)]
1144        fn inline_size(_context: fidl::encoding::Context) -> usize {
1145            16
1146        }
1147    }
1148
1149    unsafe impl fidl::encoding::Encode<Protocols, fidl::encoding::DefaultFuchsiaResourceDialect>
1150        for &mut Protocols
1151    {
1152        unsafe fn encode(
1153            self,
1154            encoder: &mut fidl::encoding::Encoder<
1155                '_,
1156                fidl::encoding::DefaultFuchsiaResourceDialect,
1157            >,
1158            offset: usize,
1159            mut depth: fidl::encoding::Depth,
1160        ) -> fidl::Result<()> {
1161            encoder.debug_check_bounds::<Protocols>(offset);
1162            // Vector header
1163            let max_ordinal: u64 = self.max_ordinal_present();
1164            encoder.write_num(max_ordinal, offset);
1165            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1166            // Calling encoder.out_of_line_offset(0) is not allowed.
1167            if max_ordinal == 0 {
1168                return Ok(());
1169            }
1170            depth.increment()?;
1171            let envelope_size = 8;
1172            let bytes_len = max_ordinal as usize * envelope_size;
1173            #[allow(unused_variables)]
1174            let offset = encoder.out_of_line_offset(bytes_len);
1175            let mut _prev_end_offset: usize = 0;
1176            if 1 > max_ordinal {
1177                return Ok(());
1178            }
1179
1180            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1181            // are envelope_size bytes.
1182            let cur_offset: usize = (1 - 1) * envelope_size;
1183
1184            // Zero reserved fields.
1185            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1186
1187            // Safety:
1188            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1189            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1190            //   envelope_size bytes, there is always sufficient room.
1191            fidl::encoding::encode_in_envelope_optional::<
1192                fidl::encoding::Endpoint<
1193                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1194                >,
1195                fidl::encoding::DefaultFuchsiaResourceDialect,
1196            >(
1197                self.device.as_mut().map(
1198                    <fidl::encoding::Endpoint<
1199                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1200                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1201                ),
1202                encoder,
1203                offset + cur_offset,
1204                depth,
1205            )?;
1206
1207            _prev_end_offset = cur_offset + envelope_size;
1208            if 2 > max_ordinal {
1209                return Ok(());
1210            }
1211
1212            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1213            // are envelope_size bytes.
1214            let cur_offset: usize = (2 - 1) * envelope_size;
1215
1216            // Zero reserved fields.
1217            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1218
1219            // Safety:
1220            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1221            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1222            //   envelope_size bytes, there is always sufficient room.
1223            fidl::encoding::encode_in_envelope_optional::<
1224                fidl::encoding::Endpoint<
1225                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1226                >,
1227                fidl::encoding::DefaultFuchsiaResourceDialect,
1228            >(
1229                self.device_extra.as_mut().map(
1230                    <fidl::encoding::Endpoint<
1231                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1232                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1233                ),
1234                encoder,
1235                offset + cur_offset,
1236                depth,
1237            )?;
1238
1239            _prev_end_offset = cur_offset + envelope_size;
1240            if 3 > max_ordinal {
1241                return Ok(());
1242            }
1243
1244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1245            // are envelope_size bytes.
1246            let cur_offset: usize = (3 - 1) * envelope_size;
1247
1248            // Zero reserved fields.
1249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1250
1251            // Safety:
1252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1254            //   envelope_size bytes, there is always sufficient room.
1255            fidl::encoding::encode_in_envelope_optional::<
1256                fidl::encoding::Endpoint<
1257                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1258                >,
1259                fidl::encoding::DefaultFuchsiaResourceDialect,
1260            >(
1261                self.device_test.as_mut().map(
1262                    <fidl::encoding::Endpoint<
1263                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1264                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1265                ),
1266                encoder,
1267                offset + cur_offset,
1268                depth,
1269            )?;
1270
1271            _prev_end_offset = cur_offset + envelope_size;
1272            if 4 > max_ordinal {
1273                return Ok(());
1274            }
1275
1276            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1277            // are envelope_size bytes.
1278            let cur_offset: usize = (4 - 1) * envelope_size;
1279
1280            // Zero reserved fields.
1281            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1282
1283            // Safety:
1284            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1285            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1286            //   envelope_size bytes, there is always sufficient room.
1287            fidl::encoding::encode_in_envelope_optional::<
1288                fidl::encoding::Endpoint<
1289                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceRouteMarker>,
1290                >,
1291                fidl::encoding::DefaultFuchsiaResourceDialect,
1292            >(
1293                self.device_route.as_mut().map(
1294                    <fidl::encoding::Endpoint<
1295                        fidl::endpoints::ServerEnd<
1296                            fidl_fuchsia_lowpan_experimental::DeviceRouteMarker,
1297                        >,
1298                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1299                ),
1300                encoder,
1301                offset + cur_offset,
1302                depth,
1303            )?;
1304
1305            _prev_end_offset = cur_offset + envelope_size;
1306            if 5 > max_ordinal {
1307                return Ok(());
1308            }
1309
1310            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1311            // are envelope_size bytes.
1312            let cur_offset: usize = (5 - 1) * envelope_size;
1313
1314            // Zero reserved fields.
1315            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1316
1317            // Safety:
1318            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1319            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1320            //   envelope_size bytes, there is always sufficient room.
1321            fidl::encoding::encode_in_envelope_optional::<
1322                fidl::encoding::Endpoint<
1323                    fidl::endpoints::ServerEnd<
1324                        fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
1325                    >,
1326                >,
1327                fidl::encoding::DefaultFuchsiaResourceDialect,
1328            >(
1329                self.device_route_extra.as_mut().map(
1330                    <fidl::encoding::Endpoint<
1331                        fidl::endpoints::ServerEnd<
1332                            fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
1333                        >,
1334                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1335                ),
1336                encoder,
1337                offset + cur_offset,
1338                depth,
1339            )?;
1340
1341            _prev_end_offset = cur_offset + envelope_size;
1342            if 6 > max_ordinal {
1343                return Ok(());
1344            }
1345
1346            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1347            // are envelope_size bytes.
1348            let cur_offset: usize = (6 - 1) * envelope_size;
1349
1350            // Zero reserved fields.
1351            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1352
1353            // Safety:
1354            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1355            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1356            //   envelope_size bytes, there is always sufficient room.
1357            fidl::encoding::encode_in_envelope_optional::<
1358                fidl::encoding::Endpoint<
1359                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
1360                >,
1361                fidl::encoding::DefaultFuchsiaResourceDialect,
1362            >(
1363                self.counters.as_mut().map(
1364                    <fidl::encoding::Endpoint<
1365                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
1366                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1367                ),
1368                encoder,
1369                offset + cur_offset,
1370                depth,
1371            )?;
1372
1373            _prev_end_offset = cur_offset + envelope_size;
1374            if 7 > max_ordinal {
1375                return Ok(());
1376            }
1377
1378            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1379            // are envelope_size bytes.
1380            let cur_offset: usize = (7 - 1) * envelope_size;
1381
1382            // Zero reserved fields.
1383            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1384
1385            // Safety:
1386            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1387            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1388            //   envelope_size bytes, there is always sufficient room.
1389            fidl::encoding::encode_in_envelope_optional::<
1390                fidl::encoding::Endpoint<
1391                    fidl::endpoints::ServerEnd<
1392                        fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
1393                    >,
1394                >,
1395                fidl::encoding::DefaultFuchsiaResourceDialect,
1396            >(
1397                self.thread_legacy_joining.as_mut().map(
1398                    <fidl::encoding::Endpoint<
1399                        fidl::endpoints::ServerEnd<
1400                            fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
1401                        >,
1402                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1403                ),
1404                encoder,
1405                offset + cur_offset,
1406                depth,
1407            )?;
1408
1409            _prev_end_offset = cur_offset + envelope_size;
1410            if 8 > max_ordinal {
1411                return Ok(());
1412            }
1413
1414            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1415            // are envelope_size bytes.
1416            let cur_offset: usize = (8 - 1) * envelope_size;
1417
1418            // Zero reserved fields.
1419            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1420
1421            // Safety:
1422            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1423            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1424            //   envelope_size bytes, there is always sufficient room.
1425            fidl::encoding::encode_in_envelope_optional::<
1426                fidl::encoding::Endpoint<
1427                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
1428                >,
1429                fidl::encoding::DefaultFuchsiaResourceDialect,
1430            >(
1431                self.thread_dataset.as_mut().map(
1432                    <fidl::encoding::Endpoint<
1433                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
1434                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1435                ),
1436                encoder,
1437                offset + cur_offset,
1438                depth,
1439            )?;
1440
1441            _prev_end_offset = cur_offset + envelope_size;
1442            if 9 > max_ordinal {
1443                return Ok(());
1444            }
1445
1446            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1447            // are envelope_size bytes.
1448            let cur_offset: usize = (9 - 1) * envelope_size;
1449
1450            // Zero reserved fields.
1451            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1452
1453            // Safety:
1454            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1455            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1456            //   envelope_size bytes, there is always sufficient room.
1457            fidl::encoding::encode_in_envelope_optional::<
1458                fidl::encoding::Endpoint<
1459                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
1460                >,
1461                fidl::encoding::DefaultFuchsiaResourceDialect,
1462            >(
1463                self.energy_scan.as_mut().map(
1464                    <fidl::encoding::Endpoint<
1465                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
1466                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1467                ),
1468                encoder,
1469                offset + cur_offset,
1470                depth,
1471            )?;
1472
1473            _prev_end_offset = cur_offset + envelope_size;
1474            if 10 > max_ordinal {
1475                return Ok(());
1476            }
1477
1478            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1479            // are envelope_size bytes.
1480            let cur_offset: usize = (10 - 1) * envelope_size;
1481
1482            // Zero reserved fields.
1483            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1484
1485            // Safety:
1486            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1487            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1488            //   envelope_size bytes, there is always sufficient room.
1489            fidl::encoding::encode_in_envelope_optional::<
1490                fidl::encoding::Endpoint<
1491                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
1492                >,
1493                fidl::encoding::DefaultFuchsiaResourceDialect,
1494            >(
1495                self.experimental_device.as_mut().map(
1496                    <fidl::encoding::Endpoint<
1497                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
1498                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1499                ),
1500                encoder,
1501                offset + cur_offset,
1502                depth,
1503            )?;
1504
1505            _prev_end_offset = cur_offset + envelope_size;
1506            if 11 > max_ordinal {
1507                return Ok(());
1508            }
1509
1510            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1511            // are envelope_size bytes.
1512            let cur_offset: usize = (11 - 1) * envelope_size;
1513
1514            // Zero reserved fields.
1515            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1516
1517            // Safety:
1518            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1519            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1520            //   envelope_size bytes, there is always sufficient room.
1521            fidl::encoding::encode_in_envelope_optional::<
1522                fidl::encoding::Endpoint<
1523                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceExtraMarker>,
1524                >,
1525                fidl::encoding::DefaultFuchsiaResourceDialect,
1526            >(
1527                self.experimental_device_extra.as_mut().map(
1528                    <fidl::encoding::Endpoint<
1529                        fidl::endpoints::ServerEnd<
1530                            fidl_fuchsia_lowpan_experimental::DeviceExtraMarker,
1531                        >,
1532                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1533                ),
1534                encoder,
1535                offset + cur_offset,
1536                depth,
1537            )?;
1538
1539            _prev_end_offset = cur_offset + envelope_size;
1540            if 12 > max_ordinal {
1541                return Ok(());
1542            }
1543
1544            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1545            // are envelope_size bytes.
1546            let cur_offset: usize = (12 - 1) * envelope_size;
1547
1548            // Zero reserved fields.
1549            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1550
1551            // Safety:
1552            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1553            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1554            //   envelope_size bytes, there is always sufficient room.
1555            fidl::encoding::encode_in_envelope_optional::<
1556                fidl::encoding::Endpoint<
1557                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
1558                >,
1559                fidl::encoding::DefaultFuchsiaResourceDialect,
1560            >(
1561                self.meshcop.as_mut().map(
1562                    <fidl::encoding::Endpoint<
1563                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
1564                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1565                ),
1566                encoder,
1567                offset + cur_offset,
1568                depth,
1569            )?;
1570
1571            _prev_end_offset = cur_offset + envelope_size;
1572            if 13 > max_ordinal {
1573                return Ok(());
1574            }
1575
1576            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1577            // are envelope_size bytes.
1578            let cur_offset: usize = (13 - 1) * envelope_size;
1579
1580            // Zero reserved fields.
1581            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1582
1583            // Safety:
1584            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1585            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1586            //   envelope_size bytes, there is always sufficient room.
1587            fidl::encoding::encode_in_envelope_optional::<
1588                fidl::encoding::Endpoint<
1589                    fidl::endpoints::ServerEnd<
1590                        fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
1591                    >,
1592                >,
1593                fidl::encoding::DefaultFuchsiaResourceDialect,
1594            >(
1595                self.telemetry_provider.as_mut().map(
1596                    <fidl::encoding::Endpoint<
1597                        fidl::endpoints::ServerEnd<
1598                            fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
1599                        >,
1600                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1601                ),
1602                encoder,
1603                offset + cur_offset,
1604                depth,
1605            )?;
1606
1607            _prev_end_offset = cur_offset + envelope_size;
1608            if 14 > max_ordinal {
1609                return Ok(());
1610            }
1611
1612            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1613            // are envelope_size bytes.
1614            let cur_offset: usize = (14 - 1) * envelope_size;
1615
1616            // Zero reserved fields.
1617            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1618
1619            // Safety:
1620            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1621            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1622            //   envelope_size bytes, there is always sufficient room.
1623            fidl::encoding::encode_in_envelope_optional::<
1624                fidl::encoding::Endpoint<
1625                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
1626                >,
1627                fidl::encoding::DefaultFuchsiaResourceDialect,
1628            >(
1629                self.thread_feature.as_mut().map(
1630                    <fidl::encoding::Endpoint<
1631                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
1632                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1633                ),
1634                encoder,
1635                offset + cur_offset,
1636                depth,
1637            )?;
1638
1639            _prev_end_offset = cur_offset + envelope_size;
1640            if 15 > max_ordinal {
1641                return Ok(());
1642            }
1643
1644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1645            // are envelope_size bytes.
1646            let cur_offset: usize = (15 - 1) * envelope_size;
1647
1648            // Zero reserved fields.
1649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1650
1651            // Safety:
1652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1654            //   envelope_size bytes, there is always sufficient room.
1655            fidl::encoding::encode_in_envelope_optional::<
1656                fidl::encoding::Endpoint<
1657                    fidl::endpoints::ServerEnd<
1658                        fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
1659                    >,
1660                >,
1661                fidl::encoding::DefaultFuchsiaResourceDialect,
1662            >(
1663                self.capabilities.as_mut().map(
1664                    <fidl::encoding::Endpoint<
1665                        fidl::endpoints::ServerEnd<
1666                            fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
1667                        >,
1668                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1669                ),
1670                encoder,
1671                offset + cur_offset,
1672                depth,
1673            )?;
1674
1675            _prev_end_offset = cur_offset + envelope_size;
1676            if 16 > max_ordinal {
1677                return Ok(());
1678            }
1679
1680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1681            // are envelope_size bytes.
1682            let cur_offset: usize = (16 - 1) * envelope_size;
1683
1684            // Zero reserved fields.
1685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1686
1687            // Safety:
1688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1690            //   envelope_size bytes, there is always sufficient room.
1691            fidl::encoding::encode_in_envelope_optional::<
1692                fidl::encoding::Endpoint<
1693                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::EpskcMarker>,
1694                >,
1695                fidl::encoding::DefaultFuchsiaResourceDialect,
1696            >(
1697                self.epskc.as_mut().map(
1698                    <fidl::encoding::Endpoint<
1699                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::EpskcMarker>,
1700                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1701                ),
1702                encoder,
1703                offset + cur_offset,
1704                depth,
1705            )?;
1706
1707            _prev_end_offset = cur_offset + envelope_size;
1708
1709            Ok(())
1710        }
1711    }
1712
1713    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Protocols {
1714        #[inline(always)]
1715        fn new_empty() -> Self {
1716            Self::default()
1717        }
1718
1719        unsafe fn decode(
1720            &mut self,
1721            decoder: &mut fidl::encoding::Decoder<
1722                '_,
1723                fidl::encoding::DefaultFuchsiaResourceDialect,
1724            >,
1725            offset: usize,
1726            mut depth: fidl::encoding::Depth,
1727        ) -> fidl::Result<()> {
1728            decoder.debug_check_bounds::<Self>(offset);
1729            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1730                None => return Err(fidl::Error::NotNullable),
1731                Some(len) => len,
1732            };
1733            // Calling decoder.out_of_line_offset(0) is not allowed.
1734            if len == 0 {
1735                return Ok(());
1736            };
1737            depth.increment()?;
1738            let envelope_size = 8;
1739            let bytes_len = len * envelope_size;
1740            let offset = decoder.out_of_line_offset(bytes_len)?;
1741            // Decode the envelope for each type.
1742            let mut _next_ordinal_to_read = 0;
1743            let mut next_offset = offset;
1744            let end_offset = offset + bytes_len;
1745            _next_ordinal_to_read += 1;
1746            if next_offset >= end_offset {
1747                return Ok(());
1748            }
1749
1750            // Decode unknown envelopes for gaps in ordinals.
1751            while _next_ordinal_to_read < 1 {
1752                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1753                _next_ordinal_to_read += 1;
1754                next_offset += envelope_size;
1755            }
1756
1757            let next_out_of_line = decoder.next_out_of_line();
1758            let handles_before = decoder.remaining_handles();
1759            if let Some((inlined, num_bytes, num_handles)) =
1760                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1761            {
1762                let member_inline_size = <fidl::encoding::Endpoint<
1763                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1764                > as fidl::encoding::TypeMarker>::inline_size(
1765                    decoder.context
1766                );
1767                if inlined != (member_inline_size <= 4) {
1768                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1769                }
1770                let inner_offset;
1771                let mut inner_depth = depth.clone();
1772                if inlined {
1773                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1774                    inner_offset = next_offset;
1775                } else {
1776                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1777                    inner_depth.increment()?;
1778                }
1779                let val_ref = self.device.get_or_insert_with(|| {
1780                    fidl::new_empty!(
1781                        fidl::encoding::Endpoint<
1782                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1783                        >,
1784                        fidl::encoding::DefaultFuchsiaResourceDialect
1785                    )
1786                });
1787                fidl::decode!(
1788                    fidl::encoding::Endpoint<
1789                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1790                    >,
1791                    fidl::encoding::DefaultFuchsiaResourceDialect,
1792                    val_ref,
1793                    decoder,
1794                    inner_offset,
1795                    inner_depth
1796                )?;
1797                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1798                {
1799                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1800                }
1801                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1802                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1803                }
1804            }
1805
1806            next_offset += envelope_size;
1807            _next_ordinal_to_read += 1;
1808            if next_offset >= end_offset {
1809                return Ok(());
1810            }
1811
1812            // Decode unknown envelopes for gaps in ordinals.
1813            while _next_ordinal_to_read < 2 {
1814                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1815                _next_ordinal_to_read += 1;
1816                next_offset += envelope_size;
1817            }
1818
1819            let next_out_of_line = decoder.next_out_of_line();
1820            let handles_before = decoder.remaining_handles();
1821            if let Some((inlined, num_bytes, num_handles)) =
1822                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1823            {
1824                let member_inline_size = <fidl::encoding::Endpoint<
1825                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1826                > as fidl::encoding::TypeMarker>::inline_size(
1827                    decoder.context
1828                );
1829                if inlined != (member_inline_size <= 4) {
1830                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1831                }
1832                let inner_offset;
1833                let mut inner_depth = depth.clone();
1834                if inlined {
1835                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1836                    inner_offset = next_offset;
1837                } else {
1838                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1839                    inner_depth.increment()?;
1840                }
1841                let val_ref = self.device_extra.get_or_insert_with(|| {
1842                    fidl::new_empty!(
1843                        fidl::encoding::Endpoint<
1844                            fidl::endpoints::ServerEnd<
1845                                fidl_fuchsia_lowpan_device::DeviceExtraMarker,
1846                            >,
1847                        >,
1848                        fidl::encoding::DefaultFuchsiaResourceDialect
1849                    )
1850                });
1851                fidl::decode!(
1852                    fidl::encoding::Endpoint<
1853                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1854                    >,
1855                    fidl::encoding::DefaultFuchsiaResourceDialect,
1856                    val_ref,
1857                    decoder,
1858                    inner_offset,
1859                    inner_depth
1860                )?;
1861                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1862                {
1863                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1864                }
1865                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1866                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1867                }
1868            }
1869
1870            next_offset += envelope_size;
1871            _next_ordinal_to_read += 1;
1872            if next_offset >= end_offset {
1873                return Ok(());
1874            }
1875
1876            // Decode unknown envelopes for gaps in ordinals.
1877            while _next_ordinal_to_read < 3 {
1878                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1879                _next_ordinal_to_read += 1;
1880                next_offset += envelope_size;
1881            }
1882
1883            let next_out_of_line = decoder.next_out_of_line();
1884            let handles_before = decoder.remaining_handles();
1885            if let Some((inlined, num_bytes, num_handles)) =
1886                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1887            {
1888                let member_inline_size = <fidl::encoding::Endpoint<
1889                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1890                > as fidl::encoding::TypeMarker>::inline_size(
1891                    decoder.context
1892                );
1893                if inlined != (member_inline_size <= 4) {
1894                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1895                }
1896                let inner_offset;
1897                let mut inner_depth = depth.clone();
1898                if inlined {
1899                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1900                    inner_offset = next_offset;
1901                } else {
1902                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1903                    inner_depth.increment()?;
1904                }
1905                let val_ref = self.device_test.get_or_insert_with(|| {
1906                    fidl::new_empty!(
1907                        fidl::encoding::Endpoint<
1908                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1909                        >,
1910                        fidl::encoding::DefaultFuchsiaResourceDialect
1911                    )
1912                });
1913                fidl::decode!(
1914                    fidl::encoding::Endpoint<
1915                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1916                    >,
1917                    fidl::encoding::DefaultFuchsiaResourceDialect,
1918                    val_ref,
1919                    decoder,
1920                    inner_offset,
1921                    inner_depth
1922                )?;
1923                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1924                {
1925                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1926                }
1927                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1928                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1929                }
1930            }
1931
1932            next_offset += envelope_size;
1933            _next_ordinal_to_read += 1;
1934            if next_offset >= end_offset {
1935                return Ok(());
1936            }
1937
1938            // Decode unknown envelopes for gaps in ordinals.
1939            while _next_ordinal_to_read < 4 {
1940                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1941                _next_ordinal_to_read += 1;
1942                next_offset += envelope_size;
1943            }
1944
1945            let next_out_of_line = decoder.next_out_of_line();
1946            let handles_before = decoder.remaining_handles();
1947            if let Some((inlined, num_bytes, num_handles)) =
1948                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1949            {
1950                let member_inline_size = <fidl::encoding::Endpoint<
1951                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceRouteMarker>,
1952                > as fidl::encoding::TypeMarker>::inline_size(
1953                    decoder.context
1954                );
1955                if inlined != (member_inline_size <= 4) {
1956                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1957                }
1958                let inner_offset;
1959                let mut inner_depth = depth.clone();
1960                if inlined {
1961                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1962                    inner_offset = next_offset;
1963                } else {
1964                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1965                    inner_depth.increment()?;
1966                }
1967                let val_ref = self.device_route.get_or_insert_with(|| {
1968                    fidl::new_empty!(
1969                        fidl::encoding::Endpoint<
1970                            fidl::endpoints::ServerEnd<
1971                                fidl_fuchsia_lowpan_experimental::DeviceRouteMarker,
1972                            >,
1973                        >,
1974                        fidl::encoding::DefaultFuchsiaResourceDialect
1975                    )
1976                });
1977                fidl::decode!(
1978                    fidl::encoding::Endpoint<
1979                        fidl::endpoints::ServerEnd<
1980                            fidl_fuchsia_lowpan_experimental::DeviceRouteMarker,
1981                        >,
1982                    >,
1983                    fidl::encoding::DefaultFuchsiaResourceDialect,
1984                    val_ref,
1985                    decoder,
1986                    inner_offset,
1987                    inner_depth
1988                )?;
1989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1990                {
1991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1992                }
1993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1995                }
1996            }
1997
1998            next_offset += envelope_size;
1999            _next_ordinal_to_read += 1;
2000            if next_offset >= end_offset {
2001                return Ok(());
2002            }
2003
2004            // Decode unknown envelopes for gaps in ordinals.
2005            while _next_ordinal_to_read < 5 {
2006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2007                _next_ordinal_to_read += 1;
2008                next_offset += envelope_size;
2009            }
2010
2011            let next_out_of_line = decoder.next_out_of_line();
2012            let handles_before = decoder.remaining_handles();
2013            if let Some((inlined, num_bytes, num_handles)) =
2014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2015            {
2016                let member_inline_size = <fidl::encoding::Endpoint<
2017                    fidl::endpoints::ServerEnd<
2018                        fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
2019                    >,
2020                > as fidl::encoding::TypeMarker>::inline_size(
2021                    decoder.context
2022                );
2023                if inlined != (member_inline_size <= 4) {
2024                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2025                }
2026                let inner_offset;
2027                let mut inner_depth = depth.clone();
2028                if inlined {
2029                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2030                    inner_offset = next_offset;
2031                } else {
2032                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2033                    inner_depth.increment()?;
2034                }
2035                let val_ref = self.device_route_extra.get_or_insert_with(|| {
2036                    fidl::new_empty!(
2037                        fidl::encoding::Endpoint<
2038                            fidl::endpoints::ServerEnd<
2039                                fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
2040                            >,
2041                        >,
2042                        fidl::encoding::DefaultFuchsiaResourceDialect
2043                    )
2044                });
2045                fidl::decode!(
2046                    fidl::encoding::Endpoint<
2047                        fidl::endpoints::ServerEnd<
2048                            fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
2049                        >,
2050                    >,
2051                    fidl::encoding::DefaultFuchsiaResourceDialect,
2052                    val_ref,
2053                    decoder,
2054                    inner_offset,
2055                    inner_depth
2056                )?;
2057                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2058                {
2059                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2060                }
2061                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2062                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2063                }
2064            }
2065
2066            next_offset += envelope_size;
2067            _next_ordinal_to_read += 1;
2068            if next_offset >= end_offset {
2069                return Ok(());
2070            }
2071
2072            // Decode unknown envelopes for gaps in ordinals.
2073            while _next_ordinal_to_read < 6 {
2074                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2075                _next_ordinal_to_read += 1;
2076                next_offset += envelope_size;
2077            }
2078
2079            let next_out_of_line = decoder.next_out_of_line();
2080            let handles_before = decoder.remaining_handles();
2081            if let Some((inlined, num_bytes, num_handles)) =
2082                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2083            {
2084                let member_inline_size = <fidl::encoding::Endpoint<
2085                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
2086                > as fidl::encoding::TypeMarker>::inline_size(
2087                    decoder.context
2088                );
2089                if inlined != (member_inline_size <= 4) {
2090                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2091                }
2092                let inner_offset;
2093                let mut inner_depth = depth.clone();
2094                if inlined {
2095                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2096                    inner_offset = next_offset;
2097                } else {
2098                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2099                    inner_depth.increment()?;
2100                }
2101                let val_ref = self.counters.get_or_insert_with(|| {
2102                    fidl::new_empty!(
2103                        fidl::encoding::Endpoint<
2104                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
2105                        >,
2106                        fidl::encoding::DefaultFuchsiaResourceDialect
2107                    )
2108                });
2109                fidl::decode!(
2110                    fidl::encoding::Endpoint<
2111                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
2112                    >,
2113                    fidl::encoding::DefaultFuchsiaResourceDialect,
2114                    val_ref,
2115                    decoder,
2116                    inner_offset,
2117                    inner_depth
2118                )?;
2119                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2120                {
2121                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2122                }
2123                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2124                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2125                }
2126            }
2127
2128            next_offset += envelope_size;
2129            _next_ordinal_to_read += 1;
2130            if next_offset >= end_offset {
2131                return Ok(());
2132            }
2133
2134            // Decode unknown envelopes for gaps in ordinals.
2135            while _next_ordinal_to_read < 7 {
2136                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2137                _next_ordinal_to_read += 1;
2138                next_offset += envelope_size;
2139            }
2140
2141            let next_out_of_line = decoder.next_out_of_line();
2142            let handles_before = decoder.remaining_handles();
2143            if let Some((inlined, num_bytes, num_handles)) =
2144                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2145            {
2146                let member_inline_size = <fidl::encoding::Endpoint<
2147                    fidl::endpoints::ServerEnd<
2148                        fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
2149                    >,
2150                > as fidl::encoding::TypeMarker>::inline_size(
2151                    decoder.context
2152                );
2153                if inlined != (member_inline_size <= 4) {
2154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2155                }
2156                let inner_offset;
2157                let mut inner_depth = depth.clone();
2158                if inlined {
2159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2160                    inner_offset = next_offset;
2161                } else {
2162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2163                    inner_depth.increment()?;
2164                }
2165                let val_ref = self.thread_legacy_joining.get_or_insert_with(|| {
2166                    fidl::new_empty!(
2167                        fidl::encoding::Endpoint<
2168                            fidl::endpoints::ServerEnd<
2169                                fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
2170                            >,
2171                        >,
2172                        fidl::encoding::DefaultFuchsiaResourceDialect
2173                    )
2174                });
2175                fidl::decode!(
2176                    fidl::encoding::Endpoint<
2177                        fidl::endpoints::ServerEnd<
2178                            fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
2179                        >,
2180                    >,
2181                    fidl::encoding::DefaultFuchsiaResourceDialect,
2182                    val_ref,
2183                    decoder,
2184                    inner_offset,
2185                    inner_depth
2186                )?;
2187                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2188                {
2189                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2190                }
2191                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2192                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2193                }
2194            }
2195
2196            next_offset += envelope_size;
2197            _next_ordinal_to_read += 1;
2198            if next_offset >= end_offset {
2199                return Ok(());
2200            }
2201
2202            // Decode unknown envelopes for gaps in ordinals.
2203            while _next_ordinal_to_read < 8 {
2204                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2205                _next_ordinal_to_read += 1;
2206                next_offset += envelope_size;
2207            }
2208
2209            let next_out_of_line = decoder.next_out_of_line();
2210            let handles_before = decoder.remaining_handles();
2211            if let Some((inlined, num_bytes, num_handles)) =
2212                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2213            {
2214                let member_inline_size = <fidl::encoding::Endpoint<
2215                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
2216                > as fidl::encoding::TypeMarker>::inline_size(
2217                    decoder.context
2218                );
2219                if inlined != (member_inline_size <= 4) {
2220                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2221                }
2222                let inner_offset;
2223                let mut inner_depth = depth.clone();
2224                if inlined {
2225                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2226                    inner_offset = next_offset;
2227                } else {
2228                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2229                    inner_depth.increment()?;
2230                }
2231                let val_ref = self.thread_dataset.get_or_insert_with(|| {
2232                    fidl::new_empty!(
2233                        fidl::encoding::Endpoint<
2234                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
2235                        >,
2236                        fidl::encoding::DefaultFuchsiaResourceDialect
2237                    )
2238                });
2239                fidl::decode!(
2240                    fidl::encoding::Endpoint<
2241                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
2242                    >,
2243                    fidl::encoding::DefaultFuchsiaResourceDialect,
2244                    val_ref,
2245                    decoder,
2246                    inner_offset,
2247                    inner_depth
2248                )?;
2249                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2250                {
2251                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2252                }
2253                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2254                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2255                }
2256            }
2257
2258            next_offset += envelope_size;
2259            _next_ordinal_to_read += 1;
2260            if next_offset >= end_offset {
2261                return Ok(());
2262            }
2263
2264            // Decode unknown envelopes for gaps in ordinals.
2265            while _next_ordinal_to_read < 9 {
2266                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2267                _next_ordinal_to_read += 1;
2268                next_offset += envelope_size;
2269            }
2270
2271            let next_out_of_line = decoder.next_out_of_line();
2272            let handles_before = decoder.remaining_handles();
2273            if let Some((inlined, num_bytes, num_handles)) =
2274                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2275            {
2276                let member_inline_size = <fidl::encoding::Endpoint<
2277                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
2278                > as fidl::encoding::TypeMarker>::inline_size(
2279                    decoder.context
2280                );
2281                if inlined != (member_inline_size <= 4) {
2282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2283                }
2284                let inner_offset;
2285                let mut inner_depth = depth.clone();
2286                if inlined {
2287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2288                    inner_offset = next_offset;
2289                } else {
2290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2291                    inner_depth.increment()?;
2292                }
2293                let val_ref = self.energy_scan.get_or_insert_with(|| {
2294                    fidl::new_empty!(
2295                        fidl::encoding::Endpoint<
2296                            fidl::endpoints::ServerEnd<
2297                                fidl_fuchsia_lowpan_device::EnergyScanMarker,
2298                            >,
2299                        >,
2300                        fidl::encoding::DefaultFuchsiaResourceDialect
2301                    )
2302                });
2303                fidl::decode!(
2304                    fidl::encoding::Endpoint<
2305                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
2306                    >,
2307                    fidl::encoding::DefaultFuchsiaResourceDialect,
2308                    val_ref,
2309                    decoder,
2310                    inner_offset,
2311                    inner_depth
2312                )?;
2313                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2314                {
2315                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2316                }
2317                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2318                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2319                }
2320            }
2321
2322            next_offset += envelope_size;
2323            _next_ordinal_to_read += 1;
2324            if next_offset >= end_offset {
2325                return Ok(());
2326            }
2327
2328            // Decode unknown envelopes for gaps in ordinals.
2329            while _next_ordinal_to_read < 10 {
2330                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2331                _next_ordinal_to_read += 1;
2332                next_offset += envelope_size;
2333            }
2334
2335            let next_out_of_line = decoder.next_out_of_line();
2336            let handles_before = decoder.remaining_handles();
2337            if let Some((inlined, num_bytes, num_handles)) =
2338                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2339            {
2340                let member_inline_size = <fidl::encoding::Endpoint<
2341                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
2342                > as fidl::encoding::TypeMarker>::inline_size(
2343                    decoder.context
2344                );
2345                if inlined != (member_inline_size <= 4) {
2346                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2347                }
2348                let inner_offset;
2349                let mut inner_depth = depth.clone();
2350                if inlined {
2351                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2352                    inner_offset = next_offset;
2353                } else {
2354                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2355                    inner_depth.increment()?;
2356                }
2357                let val_ref = self.experimental_device.get_or_insert_with(|| {
2358                    fidl::new_empty!(
2359                        fidl::encoding::Endpoint<
2360                            fidl::endpoints::ServerEnd<
2361                                fidl_fuchsia_lowpan_experimental::DeviceMarker,
2362                            >,
2363                        >,
2364                        fidl::encoding::DefaultFuchsiaResourceDialect
2365                    )
2366                });
2367                fidl::decode!(
2368                    fidl::encoding::Endpoint<
2369                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
2370                    >,
2371                    fidl::encoding::DefaultFuchsiaResourceDialect,
2372                    val_ref,
2373                    decoder,
2374                    inner_offset,
2375                    inner_depth
2376                )?;
2377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2378                {
2379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2380                }
2381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2383                }
2384            }
2385
2386            next_offset += envelope_size;
2387            _next_ordinal_to_read += 1;
2388            if next_offset >= end_offset {
2389                return Ok(());
2390            }
2391
2392            // Decode unknown envelopes for gaps in ordinals.
2393            while _next_ordinal_to_read < 11 {
2394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2395                _next_ordinal_to_read += 1;
2396                next_offset += envelope_size;
2397            }
2398
2399            let next_out_of_line = decoder.next_out_of_line();
2400            let handles_before = decoder.remaining_handles();
2401            if let Some((inlined, num_bytes, num_handles)) =
2402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2403            {
2404                let member_inline_size = <fidl::encoding::Endpoint<
2405                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceExtraMarker>,
2406                > as fidl::encoding::TypeMarker>::inline_size(
2407                    decoder.context
2408                );
2409                if inlined != (member_inline_size <= 4) {
2410                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2411                }
2412                let inner_offset;
2413                let mut inner_depth = depth.clone();
2414                if inlined {
2415                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2416                    inner_offset = next_offset;
2417                } else {
2418                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2419                    inner_depth.increment()?;
2420                }
2421                let val_ref = self.experimental_device_extra.get_or_insert_with(|| {
2422                    fidl::new_empty!(
2423                        fidl::encoding::Endpoint<
2424                            fidl::endpoints::ServerEnd<
2425                                fidl_fuchsia_lowpan_experimental::DeviceExtraMarker,
2426                            >,
2427                        >,
2428                        fidl::encoding::DefaultFuchsiaResourceDialect
2429                    )
2430                });
2431                fidl::decode!(
2432                    fidl::encoding::Endpoint<
2433                        fidl::endpoints::ServerEnd<
2434                            fidl_fuchsia_lowpan_experimental::DeviceExtraMarker,
2435                        >,
2436                    >,
2437                    fidl::encoding::DefaultFuchsiaResourceDialect,
2438                    val_ref,
2439                    decoder,
2440                    inner_offset,
2441                    inner_depth
2442                )?;
2443                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2444                {
2445                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2446                }
2447                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2448                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2449                }
2450            }
2451
2452            next_offset += envelope_size;
2453            _next_ordinal_to_read += 1;
2454            if next_offset >= end_offset {
2455                return Ok(());
2456            }
2457
2458            // Decode unknown envelopes for gaps in ordinals.
2459            while _next_ordinal_to_read < 12 {
2460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2461                _next_ordinal_to_read += 1;
2462                next_offset += envelope_size;
2463            }
2464
2465            let next_out_of_line = decoder.next_out_of_line();
2466            let handles_before = decoder.remaining_handles();
2467            if let Some((inlined, num_bytes, num_handles)) =
2468                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2469            {
2470                let member_inline_size = <fidl::encoding::Endpoint<
2471                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
2472                > as fidl::encoding::TypeMarker>::inline_size(
2473                    decoder.context
2474                );
2475                if inlined != (member_inline_size <= 4) {
2476                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2477                }
2478                let inner_offset;
2479                let mut inner_depth = depth.clone();
2480                if inlined {
2481                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2482                    inner_offset = next_offset;
2483                } else {
2484                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2485                    inner_depth.increment()?;
2486                }
2487                let val_ref = self.meshcop.get_or_insert_with(|| {
2488                    fidl::new_empty!(
2489                        fidl::encoding::Endpoint<
2490                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
2491                        >,
2492                        fidl::encoding::DefaultFuchsiaResourceDialect
2493                    )
2494                });
2495                fidl::decode!(
2496                    fidl::encoding::Endpoint<
2497                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
2498                    >,
2499                    fidl::encoding::DefaultFuchsiaResourceDialect,
2500                    val_ref,
2501                    decoder,
2502                    inner_offset,
2503                    inner_depth
2504                )?;
2505                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2506                {
2507                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2508                }
2509                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2510                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2511                }
2512            }
2513
2514            next_offset += envelope_size;
2515            _next_ordinal_to_read += 1;
2516            if next_offset >= end_offset {
2517                return Ok(());
2518            }
2519
2520            // Decode unknown envelopes for gaps in ordinals.
2521            while _next_ordinal_to_read < 13 {
2522                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2523                _next_ordinal_to_read += 1;
2524                next_offset += envelope_size;
2525            }
2526
2527            let next_out_of_line = decoder.next_out_of_line();
2528            let handles_before = decoder.remaining_handles();
2529            if let Some((inlined, num_bytes, num_handles)) =
2530                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2531            {
2532                let member_inline_size = <fidl::encoding::Endpoint<
2533                    fidl::endpoints::ServerEnd<
2534                        fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
2535                    >,
2536                > as fidl::encoding::TypeMarker>::inline_size(
2537                    decoder.context
2538                );
2539                if inlined != (member_inline_size <= 4) {
2540                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2541                }
2542                let inner_offset;
2543                let mut inner_depth = depth.clone();
2544                if inlined {
2545                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2546                    inner_offset = next_offset;
2547                } else {
2548                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2549                    inner_depth.increment()?;
2550                }
2551                let val_ref = self.telemetry_provider.get_or_insert_with(|| {
2552                    fidl::new_empty!(
2553                        fidl::encoding::Endpoint<
2554                            fidl::endpoints::ServerEnd<
2555                                fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
2556                            >,
2557                        >,
2558                        fidl::encoding::DefaultFuchsiaResourceDialect
2559                    )
2560                });
2561                fidl::decode!(
2562                    fidl::encoding::Endpoint<
2563                        fidl::endpoints::ServerEnd<
2564                            fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
2565                        >,
2566                    >,
2567                    fidl::encoding::DefaultFuchsiaResourceDialect,
2568                    val_ref,
2569                    decoder,
2570                    inner_offset,
2571                    inner_depth
2572                )?;
2573                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2574                {
2575                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2576                }
2577                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2578                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2579                }
2580            }
2581
2582            next_offset += envelope_size;
2583            _next_ordinal_to_read += 1;
2584            if next_offset >= end_offset {
2585                return Ok(());
2586            }
2587
2588            // Decode unknown envelopes for gaps in ordinals.
2589            while _next_ordinal_to_read < 14 {
2590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2591                _next_ordinal_to_read += 1;
2592                next_offset += envelope_size;
2593            }
2594
2595            let next_out_of_line = decoder.next_out_of_line();
2596            let handles_before = decoder.remaining_handles();
2597            if let Some((inlined, num_bytes, num_handles)) =
2598                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2599            {
2600                let member_inline_size = <fidl::encoding::Endpoint<
2601                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
2602                > as fidl::encoding::TypeMarker>::inline_size(
2603                    decoder.context
2604                );
2605                if inlined != (member_inline_size <= 4) {
2606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2607                }
2608                let inner_offset;
2609                let mut inner_depth = depth.clone();
2610                if inlined {
2611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2612                    inner_offset = next_offset;
2613                } else {
2614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2615                    inner_depth.increment()?;
2616                }
2617                let val_ref = self.thread_feature.get_or_insert_with(|| {
2618                    fidl::new_empty!(
2619                        fidl::encoding::Endpoint<
2620                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
2621                        >,
2622                        fidl::encoding::DefaultFuchsiaResourceDialect
2623                    )
2624                });
2625                fidl::decode!(
2626                    fidl::encoding::Endpoint<
2627                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
2628                    >,
2629                    fidl::encoding::DefaultFuchsiaResourceDialect,
2630                    val_ref,
2631                    decoder,
2632                    inner_offset,
2633                    inner_depth
2634                )?;
2635                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2636                {
2637                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2638                }
2639                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2640                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2641                }
2642            }
2643
2644            next_offset += envelope_size;
2645            _next_ordinal_to_read += 1;
2646            if next_offset >= end_offset {
2647                return Ok(());
2648            }
2649
2650            // Decode unknown envelopes for gaps in ordinals.
2651            while _next_ordinal_to_read < 15 {
2652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2653                _next_ordinal_to_read += 1;
2654                next_offset += envelope_size;
2655            }
2656
2657            let next_out_of_line = decoder.next_out_of_line();
2658            let handles_before = decoder.remaining_handles();
2659            if let Some((inlined, num_bytes, num_handles)) =
2660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2661            {
2662                let member_inline_size = <fidl::encoding::Endpoint<
2663                    fidl::endpoints::ServerEnd<
2664                        fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
2665                    >,
2666                > as fidl::encoding::TypeMarker>::inline_size(
2667                    decoder.context
2668                );
2669                if inlined != (member_inline_size <= 4) {
2670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2671                }
2672                let inner_offset;
2673                let mut inner_depth = depth.clone();
2674                if inlined {
2675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2676                    inner_offset = next_offset;
2677                } else {
2678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2679                    inner_depth.increment()?;
2680                }
2681                let val_ref = self.capabilities.get_or_insert_with(|| {
2682                    fidl::new_empty!(
2683                        fidl::encoding::Endpoint<
2684                            fidl::endpoints::ServerEnd<
2685                                fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
2686                            >,
2687                        >,
2688                        fidl::encoding::DefaultFuchsiaResourceDialect
2689                    )
2690                });
2691                fidl::decode!(
2692                    fidl::encoding::Endpoint<
2693                        fidl::endpoints::ServerEnd<
2694                            fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
2695                        >,
2696                    >,
2697                    fidl::encoding::DefaultFuchsiaResourceDialect,
2698                    val_ref,
2699                    decoder,
2700                    inner_offset,
2701                    inner_depth
2702                )?;
2703                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2704                {
2705                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2706                }
2707                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2708                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2709                }
2710            }
2711
2712            next_offset += envelope_size;
2713            _next_ordinal_to_read += 1;
2714            if next_offset >= end_offset {
2715                return Ok(());
2716            }
2717
2718            // Decode unknown envelopes for gaps in ordinals.
2719            while _next_ordinal_to_read < 16 {
2720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2721                _next_ordinal_to_read += 1;
2722                next_offset += envelope_size;
2723            }
2724
2725            let next_out_of_line = decoder.next_out_of_line();
2726            let handles_before = decoder.remaining_handles();
2727            if let Some((inlined, num_bytes, num_handles)) =
2728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2729            {
2730                let member_inline_size = <fidl::encoding::Endpoint<
2731                    fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::EpskcMarker>,
2732                > as fidl::encoding::TypeMarker>::inline_size(
2733                    decoder.context
2734                );
2735                if inlined != (member_inline_size <= 4) {
2736                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2737                }
2738                let inner_offset;
2739                let mut inner_depth = depth.clone();
2740                if inlined {
2741                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2742                    inner_offset = next_offset;
2743                } else {
2744                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2745                    inner_depth.increment()?;
2746                }
2747                let val_ref = self.epskc.get_or_insert_with(|| {
2748                    fidl::new_empty!(
2749                        fidl::encoding::Endpoint<
2750                            fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::EpskcMarker>,
2751                        >,
2752                        fidl::encoding::DefaultFuchsiaResourceDialect
2753                    )
2754                });
2755                fidl::decode!(
2756                    fidl::encoding::Endpoint<
2757                        fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::EpskcMarker>,
2758                    >,
2759                    fidl::encoding::DefaultFuchsiaResourceDialect,
2760                    val_ref,
2761                    decoder,
2762                    inner_offset,
2763                    inner_depth
2764                )?;
2765                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2766                {
2767                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2768                }
2769                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2770                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2771                }
2772            }
2773
2774            next_offset += envelope_size;
2775
2776            // Decode the remaining unknown envelopes.
2777            while next_offset < end_offset {
2778                _next_ordinal_to_read += 1;
2779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2780                next_offset += envelope_size;
2781            }
2782
2783            Ok(())
2784        }
2785    }
2786}