Skip to main content

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