1#![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#[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 #[doc(hidden)]
64 pub __source_breaking: fidl::marker::SourceBreaking,
65}
66
67impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Protocols {}
68
69#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
70pub struct DriverMarker;
71
72impl fidl::endpoints::ProtocolMarker for DriverMarker {
73 type Proxy = DriverProxy;
74 type RequestStream = DriverRequestStream;
75 #[cfg(target_os = "fuchsia")]
76 type SynchronousProxy = DriverSynchronousProxy;
77
78 const DEBUG_NAME: &'static str = "(anonymous) Driver";
79}
80
81pub trait DriverProxyInterface: Send + Sync {
82 fn r#get_protocols(&self, protocols: Protocols) -> Result<(), fidl::Error>;
83}
84#[derive(Debug)]
85#[cfg(target_os = "fuchsia")]
86pub struct DriverSynchronousProxy {
87 client: fidl::client::sync::Client,
88}
89
90#[cfg(target_os = "fuchsia")]
91impl fidl::endpoints::SynchronousProxy for DriverSynchronousProxy {
92 type Proxy = DriverProxy;
93 type Protocol = DriverMarker;
94
95 fn from_channel(inner: fidl::Channel) -> Self {
96 Self::new(inner)
97 }
98
99 fn into_channel(self) -> fidl::Channel {
100 self.client.into_channel()
101 }
102
103 fn as_channel(&self) -> &fidl::Channel {
104 self.client.as_channel()
105 }
106}
107
108#[cfg(target_os = "fuchsia")]
109impl DriverSynchronousProxy {
110 pub fn new(channel: fidl::Channel) -> Self {
111 let protocol_name = <DriverMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
112 Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
113 }
114
115 pub fn into_channel(self) -> fidl::Channel {
116 self.client.into_channel()
117 }
118
119 pub fn wait_for_event(
122 &self,
123 deadline: zx::MonotonicInstant,
124 ) -> Result<DriverEvent, fidl::Error> {
125 DriverEvent::decode(self.client.wait_for_event(deadline)?)
126 }
127
128 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::Handle {
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 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 pub fn take_event_stream(&self) -> DriverEventStream {
196 DriverEventStream { event_receiver: self.client.take_event_receiver() }
197 }
198
199 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 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
265pub 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 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#[derive(Debug)]
364pub enum DriverRequest {
365 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 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 fidl::endpoints::ControlHandle for DriverControlHandle {
394 fn shutdown(&self) {
395 self.inner.shutdown()
396 }
397 fn shutdown_with_epitaph(&self, status: zx_status::Status) {
398 self.inner.shutdown_with_epitaph(status)
399 }
400
401 fn is_closed(&self) -> bool {
402 self.inner.channel().is_closed()
403 }
404 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
405 self.inner.channel().on_closed()
406 }
407
408 #[cfg(target_os = "fuchsia")]
409 fn signal_peer(
410 &self,
411 clear_mask: zx::Signals,
412 set_mask: zx::Signals,
413 ) -> Result<(), zx_status::Status> {
414 use fidl::Peered;
415 self.inner.channel().signal_peer(clear_mask, set_mask)
416 }
417}
418
419impl DriverControlHandle {}
420
421#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
422pub struct RegisterMarker;
423
424impl fidl::endpoints::ProtocolMarker for RegisterMarker {
425 type Proxy = RegisterProxy;
426 type RequestStream = RegisterRequestStream;
427 #[cfg(target_os = "fuchsia")]
428 type SynchronousProxy = RegisterSynchronousProxy;
429
430 const DEBUG_NAME: &'static str = "fuchsia.lowpan.driver.Register";
431}
432impl fidl::endpoints::DiscoverableProtocolMarker for RegisterMarker {}
433
434pub trait RegisterProxyInterface: Send + Sync {
435 fn r#register_device(
436 &self,
437 name: &str,
438 driver: fidl::endpoints::ClientEnd<DriverMarker>,
439 ) -> Result<(), fidl::Error>;
440}
441#[derive(Debug)]
442#[cfg(target_os = "fuchsia")]
443pub struct RegisterSynchronousProxy {
444 client: fidl::client::sync::Client,
445}
446
447#[cfg(target_os = "fuchsia")]
448impl fidl::endpoints::SynchronousProxy for RegisterSynchronousProxy {
449 type Proxy = RegisterProxy;
450 type Protocol = RegisterMarker;
451
452 fn from_channel(inner: fidl::Channel) -> Self {
453 Self::new(inner)
454 }
455
456 fn into_channel(self) -> fidl::Channel {
457 self.client.into_channel()
458 }
459
460 fn as_channel(&self) -> &fidl::Channel {
461 self.client.as_channel()
462 }
463}
464
465#[cfg(target_os = "fuchsia")]
466impl RegisterSynchronousProxy {
467 pub fn new(channel: fidl::Channel) -> Self {
468 let protocol_name = <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
469 Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
470 }
471
472 pub fn into_channel(self) -> fidl::Channel {
473 self.client.into_channel()
474 }
475
476 pub fn wait_for_event(
479 &self,
480 deadline: zx::MonotonicInstant,
481 ) -> Result<RegisterEvent, fidl::Error> {
482 RegisterEvent::decode(self.client.wait_for_event(deadline)?)
483 }
484
485 pub fn r#register_device(
488 &self,
489 mut name: &str,
490 mut driver: fidl::endpoints::ClientEnd<DriverMarker>,
491 ) -> Result<(), fidl::Error> {
492 self.client.send::<RegisterRegisterDeviceRequest>(
493 (name, driver),
494 0x19280d20cfdd62e6,
495 fidl::encoding::DynamicFlags::empty(),
496 )
497 }
498}
499
500#[cfg(target_os = "fuchsia")]
501impl From<RegisterSynchronousProxy> for zx::Handle {
502 fn from(value: RegisterSynchronousProxy) -> Self {
503 value.into_channel().into()
504 }
505}
506
507#[cfg(target_os = "fuchsia")]
508impl From<fidl::Channel> for RegisterSynchronousProxy {
509 fn from(value: fidl::Channel) -> Self {
510 Self::new(value)
511 }
512}
513
514#[cfg(target_os = "fuchsia")]
515impl fidl::endpoints::FromClient for RegisterSynchronousProxy {
516 type Protocol = RegisterMarker;
517
518 fn from_client(value: fidl::endpoints::ClientEnd<RegisterMarker>) -> Self {
519 Self::new(value.into_channel())
520 }
521}
522
523#[derive(Debug, Clone)]
524pub struct RegisterProxy {
525 client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
526}
527
528impl fidl::endpoints::Proxy for RegisterProxy {
529 type Protocol = RegisterMarker;
530
531 fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
532 Self::new(inner)
533 }
534
535 fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
536 self.client.into_channel().map_err(|client| Self { client })
537 }
538
539 fn as_channel(&self) -> &::fidl::AsyncChannel {
540 self.client.as_channel()
541 }
542}
543
544impl RegisterProxy {
545 pub fn new(channel: ::fidl::AsyncChannel) -> Self {
547 let protocol_name = <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
548 Self { client: fidl::client::Client::new(channel, protocol_name) }
549 }
550
551 pub fn take_event_stream(&self) -> RegisterEventStream {
557 RegisterEventStream { event_receiver: self.client.take_event_receiver() }
558 }
559
560 pub fn r#register_device(
563 &self,
564 mut name: &str,
565 mut driver: fidl::endpoints::ClientEnd<DriverMarker>,
566 ) -> Result<(), fidl::Error> {
567 RegisterProxyInterface::r#register_device(self, name, driver)
568 }
569}
570
571impl RegisterProxyInterface for RegisterProxy {
572 fn r#register_device(
573 &self,
574 mut name: &str,
575 mut driver: fidl::endpoints::ClientEnd<DriverMarker>,
576 ) -> Result<(), fidl::Error> {
577 self.client.send::<RegisterRegisterDeviceRequest>(
578 (name, driver),
579 0x19280d20cfdd62e6,
580 fidl::encoding::DynamicFlags::empty(),
581 )
582 }
583}
584
585pub struct RegisterEventStream {
586 event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
587}
588
589impl std::marker::Unpin for RegisterEventStream {}
590
591impl futures::stream::FusedStream for RegisterEventStream {
592 fn is_terminated(&self) -> bool {
593 self.event_receiver.is_terminated()
594 }
595}
596
597impl futures::Stream for RegisterEventStream {
598 type Item = Result<RegisterEvent, fidl::Error>;
599
600 fn poll_next(
601 mut self: std::pin::Pin<&mut Self>,
602 cx: &mut std::task::Context<'_>,
603 ) -> std::task::Poll<Option<Self::Item>> {
604 match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
605 &mut self.event_receiver,
606 cx
607 )?) {
608 Some(buf) => std::task::Poll::Ready(Some(RegisterEvent::decode(buf))),
609 None => std::task::Poll::Ready(None),
610 }
611 }
612}
613
614#[derive(Debug)]
615pub enum RegisterEvent {}
616
617impl RegisterEvent {
618 fn decode(
620 mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
621 ) -> Result<RegisterEvent, fidl::Error> {
622 let (bytes, _handles) = buf.split_mut();
623 let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
624 debug_assert_eq!(tx_header.tx_id, 0);
625 match tx_header.ordinal {
626 _ => Err(fidl::Error::UnknownOrdinal {
627 ordinal: tx_header.ordinal,
628 protocol_name: <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
629 }),
630 }
631 }
632}
633
634pub struct RegisterRequestStream {
636 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
637 is_terminated: bool,
638}
639
640impl std::marker::Unpin for RegisterRequestStream {}
641
642impl futures::stream::FusedStream for RegisterRequestStream {
643 fn is_terminated(&self) -> bool {
644 self.is_terminated
645 }
646}
647
648impl fidl::endpoints::RequestStream for RegisterRequestStream {
649 type Protocol = RegisterMarker;
650 type ControlHandle = RegisterControlHandle;
651
652 fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
653 Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
654 }
655
656 fn control_handle(&self) -> Self::ControlHandle {
657 RegisterControlHandle { inner: self.inner.clone() }
658 }
659
660 fn into_inner(
661 self,
662 ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
663 {
664 (self.inner, self.is_terminated)
665 }
666
667 fn from_inner(
668 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
669 is_terminated: bool,
670 ) -> Self {
671 Self { inner, is_terminated }
672 }
673}
674
675impl futures::Stream for RegisterRequestStream {
676 type Item = Result<RegisterRequest, fidl::Error>;
677
678 fn poll_next(
679 mut self: std::pin::Pin<&mut Self>,
680 cx: &mut std::task::Context<'_>,
681 ) -> std::task::Poll<Option<Self::Item>> {
682 let this = &mut *self;
683 if this.inner.check_shutdown(cx) {
684 this.is_terminated = true;
685 return std::task::Poll::Ready(None);
686 }
687 if this.is_terminated {
688 panic!("polled RegisterRequestStream after completion");
689 }
690 fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
691 |bytes, handles| {
692 match this.inner.channel().read_etc(cx, bytes, handles) {
693 std::task::Poll::Ready(Ok(())) => {}
694 std::task::Poll::Pending => return std::task::Poll::Pending,
695 std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
696 this.is_terminated = true;
697 return std::task::Poll::Ready(None);
698 }
699 std::task::Poll::Ready(Err(e)) => {
700 return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
701 e.into(),
702 ))))
703 }
704 }
705
706 let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
708
709 std::task::Poll::Ready(Some(match header.ordinal {
710 0x19280d20cfdd62e6 => {
711 header.validate_request_tx_id(fidl::MethodType::OneWay)?;
712 let mut req = fidl::new_empty!(
713 RegisterRegisterDeviceRequest,
714 fidl::encoding::DefaultFuchsiaResourceDialect
715 );
716 fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<RegisterRegisterDeviceRequest>(&header, _body_bytes, handles, &mut req)?;
717 let control_handle = RegisterControlHandle { inner: this.inner.clone() };
718 Ok(RegisterRequest::RegisterDevice {
719 name: req.name,
720 driver: req.driver,
721
722 control_handle,
723 })
724 }
725 _ => Err(fidl::Error::UnknownOrdinal {
726 ordinal: header.ordinal,
727 protocol_name:
728 <RegisterMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
729 }),
730 }))
731 },
732 )
733 }
734}
735
736#[derive(Debug)]
739pub enum RegisterRequest {
740 RegisterDevice {
743 name: String,
744 driver: fidl::endpoints::ClientEnd<DriverMarker>,
745 control_handle: RegisterControlHandle,
746 },
747}
748
749impl RegisterRequest {
750 #[allow(irrefutable_let_patterns)]
751 pub fn into_register_device(
752 self,
753 ) -> Option<(String, fidl::endpoints::ClientEnd<DriverMarker>, RegisterControlHandle)> {
754 if let RegisterRequest::RegisterDevice { name, driver, control_handle } = self {
755 Some((name, driver, control_handle))
756 } else {
757 None
758 }
759 }
760
761 pub fn method_name(&self) -> &'static str {
763 match *self {
764 RegisterRequest::RegisterDevice { .. } => "register_device",
765 }
766 }
767}
768
769#[derive(Debug, Clone)]
770pub struct RegisterControlHandle {
771 inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
772}
773
774impl fidl::endpoints::ControlHandle for RegisterControlHandle {
775 fn shutdown(&self) {
776 self.inner.shutdown()
777 }
778 fn shutdown_with_epitaph(&self, status: zx_status::Status) {
779 self.inner.shutdown_with_epitaph(status)
780 }
781
782 fn is_closed(&self) -> bool {
783 self.inner.channel().is_closed()
784 }
785 fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
786 self.inner.channel().on_closed()
787 }
788
789 #[cfg(target_os = "fuchsia")]
790 fn signal_peer(
791 &self,
792 clear_mask: zx::Signals,
793 set_mask: zx::Signals,
794 ) -> Result<(), zx_status::Status> {
795 use fidl::Peered;
796 self.inner.channel().signal_peer(clear_mask, set_mask)
797 }
798}
799
800impl RegisterControlHandle {}
801
802mod internal {
803 use super::*;
804
805 impl fidl::encoding::ResourceTypeMarker for DriverGetProtocolsRequest {
806 type Borrowed<'a> = &'a mut Self;
807 fn take_or_borrow<'a>(
808 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
809 ) -> Self::Borrowed<'a> {
810 value
811 }
812 }
813
814 unsafe impl fidl::encoding::TypeMarker for DriverGetProtocolsRequest {
815 type Owned = Self;
816
817 #[inline(always)]
818 fn inline_align(_context: fidl::encoding::Context) -> usize {
819 8
820 }
821
822 #[inline(always)]
823 fn inline_size(_context: fidl::encoding::Context) -> usize {
824 16
825 }
826 }
827
828 unsafe impl
829 fidl::encoding::Encode<
830 DriverGetProtocolsRequest,
831 fidl::encoding::DefaultFuchsiaResourceDialect,
832 > for &mut DriverGetProtocolsRequest
833 {
834 #[inline]
835 unsafe fn encode(
836 self,
837 encoder: &mut fidl::encoding::Encoder<
838 '_,
839 fidl::encoding::DefaultFuchsiaResourceDialect,
840 >,
841 offset: usize,
842 _depth: fidl::encoding::Depth,
843 ) -> fidl::Result<()> {
844 encoder.debug_check_bounds::<DriverGetProtocolsRequest>(offset);
845 fidl::encoding::Encode::<
847 DriverGetProtocolsRequest,
848 fidl::encoding::DefaultFuchsiaResourceDialect,
849 >::encode(
850 (<Protocols as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
851 &mut self.protocols,
852 ),),
853 encoder,
854 offset,
855 _depth,
856 )
857 }
858 }
859 unsafe impl<T0: fidl::encoding::Encode<Protocols, fidl::encoding::DefaultFuchsiaResourceDialect>>
860 fidl::encoding::Encode<
861 DriverGetProtocolsRequest,
862 fidl::encoding::DefaultFuchsiaResourceDialect,
863 > for (T0,)
864 {
865 #[inline]
866 unsafe fn encode(
867 self,
868 encoder: &mut fidl::encoding::Encoder<
869 '_,
870 fidl::encoding::DefaultFuchsiaResourceDialect,
871 >,
872 offset: usize,
873 depth: fidl::encoding::Depth,
874 ) -> fidl::Result<()> {
875 encoder.debug_check_bounds::<DriverGetProtocolsRequest>(offset);
876 self.0.encode(encoder, offset + 0, depth)?;
880 Ok(())
881 }
882 }
883
884 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
885 for DriverGetProtocolsRequest
886 {
887 #[inline(always)]
888 fn new_empty() -> Self {
889 Self {
890 protocols: fidl::new_empty!(
891 Protocols,
892 fidl::encoding::DefaultFuchsiaResourceDialect
893 ),
894 }
895 }
896
897 #[inline]
898 unsafe fn decode(
899 &mut self,
900 decoder: &mut fidl::encoding::Decoder<
901 '_,
902 fidl::encoding::DefaultFuchsiaResourceDialect,
903 >,
904 offset: usize,
905 _depth: fidl::encoding::Depth,
906 ) -> fidl::Result<()> {
907 decoder.debug_check_bounds::<Self>(offset);
908 fidl::decode!(
910 Protocols,
911 fidl::encoding::DefaultFuchsiaResourceDialect,
912 &mut self.protocols,
913 decoder,
914 offset + 0,
915 _depth
916 )?;
917 Ok(())
918 }
919 }
920
921 impl fidl::encoding::ResourceTypeMarker for RegisterRegisterDeviceRequest {
922 type Borrowed<'a> = &'a mut Self;
923 fn take_or_borrow<'a>(
924 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
925 ) -> Self::Borrowed<'a> {
926 value
927 }
928 }
929
930 unsafe impl fidl::encoding::TypeMarker for RegisterRegisterDeviceRequest {
931 type Owned = Self;
932
933 #[inline(always)]
934 fn inline_align(_context: fidl::encoding::Context) -> usize {
935 8
936 }
937
938 #[inline(always)]
939 fn inline_size(_context: fidl::encoding::Context) -> usize {
940 24
941 }
942 }
943
944 unsafe impl
945 fidl::encoding::Encode<
946 RegisterRegisterDeviceRequest,
947 fidl::encoding::DefaultFuchsiaResourceDialect,
948 > for &mut RegisterRegisterDeviceRequest
949 {
950 #[inline]
951 unsafe fn encode(
952 self,
953 encoder: &mut fidl::encoding::Encoder<
954 '_,
955 fidl::encoding::DefaultFuchsiaResourceDialect,
956 >,
957 offset: usize,
958 _depth: fidl::encoding::Depth,
959 ) -> fidl::Result<()> {
960 encoder.debug_check_bounds::<RegisterRegisterDeviceRequest>(offset);
961 fidl::encoding::Encode::<RegisterRegisterDeviceRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
963 (
964 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
965 <fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.driver),
966 ),
967 encoder, offset, _depth
968 )
969 }
970 }
971 unsafe impl<
972 T0: fidl::encoding::Encode<
973 fidl::encoding::BoundedString<32>,
974 fidl::encoding::DefaultFuchsiaResourceDialect,
975 >,
976 T1: fidl::encoding::Encode<
977 fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>>,
978 fidl::encoding::DefaultFuchsiaResourceDialect,
979 >,
980 >
981 fidl::encoding::Encode<
982 RegisterRegisterDeviceRequest,
983 fidl::encoding::DefaultFuchsiaResourceDialect,
984 > for (T0, T1)
985 {
986 #[inline]
987 unsafe fn encode(
988 self,
989 encoder: &mut fidl::encoding::Encoder<
990 '_,
991 fidl::encoding::DefaultFuchsiaResourceDialect,
992 >,
993 offset: usize,
994 depth: fidl::encoding::Depth,
995 ) -> fidl::Result<()> {
996 encoder.debug_check_bounds::<RegisterRegisterDeviceRequest>(offset);
997 unsafe {
1000 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1001 (ptr as *mut u64).write_unaligned(0);
1002 }
1003 self.0.encode(encoder, offset + 0, depth)?;
1005 self.1.encode(encoder, offset + 16, depth)?;
1006 Ok(())
1007 }
1008 }
1009
1010 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
1011 for RegisterRegisterDeviceRequest
1012 {
1013 #[inline(always)]
1014 fn new_empty() -> Self {
1015 Self {
1016 name: fidl::new_empty!(
1017 fidl::encoding::BoundedString<32>,
1018 fidl::encoding::DefaultFuchsiaResourceDialect
1019 ),
1020 driver: fidl::new_empty!(
1021 fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>>,
1022 fidl::encoding::DefaultFuchsiaResourceDialect
1023 ),
1024 }
1025 }
1026
1027 #[inline]
1028 unsafe fn decode(
1029 &mut self,
1030 decoder: &mut fidl::encoding::Decoder<
1031 '_,
1032 fidl::encoding::DefaultFuchsiaResourceDialect,
1033 >,
1034 offset: usize,
1035 _depth: fidl::encoding::Depth,
1036 ) -> fidl::Result<()> {
1037 decoder.debug_check_bounds::<Self>(offset);
1038 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1040 let padval = unsafe { (ptr as *const u64).read_unaligned() };
1041 let mask = 0xffffffff00000000u64;
1042 let maskedval = padval & mask;
1043 if maskedval != 0 {
1044 return Err(fidl::Error::NonZeroPadding {
1045 padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1046 });
1047 }
1048 fidl::decode!(
1049 fidl::encoding::BoundedString<32>,
1050 fidl::encoding::DefaultFuchsiaResourceDialect,
1051 &mut self.name,
1052 decoder,
1053 offset + 0,
1054 _depth
1055 )?;
1056 fidl::decode!(
1057 fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<DriverMarker>>,
1058 fidl::encoding::DefaultFuchsiaResourceDialect,
1059 &mut self.driver,
1060 decoder,
1061 offset + 16,
1062 _depth
1063 )?;
1064 Ok(())
1065 }
1066 }
1067
1068 impl Protocols {
1069 #[inline(always)]
1070 fn max_ordinal_present(&self) -> u64 {
1071 if let Some(_) = self.capabilities {
1072 return 15;
1073 }
1074 if let Some(_) = self.thread_feature {
1075 return 14;
1076 }
1077 if let Some(_) = self.telemetry_provider {
1078 return 13;
1079 }
1080 if let Some(_) = self.meshcop {
1081 return 12;
1082 }
1083 if let Some(_) = self.experimental_device_extra {
1084 return 11;
1085 }
1086 if let Some(_) = self.experimental_device {
1087 return 10;
1088 }
1089 if let Some(_) = self.energy_scan {
1090 return 9;
1091 }
1092 if let Some(_) = self.thread_dataset {
1093 return 8;
1094 }
1095 if let Some(_) = self.thread_legacy_joining {
1096 return 7;
1097 }
1098 if let Some(_) = self.counters {
1099 return 6;
1100 }
1101 if let Some(_) = self.device_route_extra {
1102 return 5;
1103 }
1104 if let Some(_) = self.device_route {
1105 return 4;
1106 }
1107 if let Some(_) = self.device_test {
1108 return 3;
1109 }
1110 if let Some(_) = self.device_extra {
1111 return 2;
1112 }
1113 if let Some(_) = self.device {
1114 return 1;
1115 }
1116 0
1117 }
1118 }
1119
1120 impl fidl::encoding::ResourceTypeMarker for Protocols {
1121 type Borrowed<'a> = &'a mut Self;
1122 fn take_or_borrow<'a>(
1123 value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
1124 ) -> Self::Borrowed<'a> {
1125 value
1126 }
1127 }
1128
1129 unsafe impl fidl::encoding::TypeMarker for Protocols {
1130 type Owned = Self;
1131
1132 #[inline(always)]
1133 fn inline_align(_context: fidl::encoding::Context) -> usize {
1134 8
1135 }
1136
1137 #[inline(always)]
1138 fn inline_size(_context: fidl::encoding::Context) -> usize {
1139 16
1140 }
1141 }
1142
1143 unsafe impl fidl::encoding::Encode<Protocols, fidl::encoding::DefaultFuchsiaResourceDialect>
1144 for &mut Protocols
1145 {
1146 unsafe fn encode(
1147 self,
1148 encoder: &mut fidl::encoding::Encoder<
1149 '_,
1150 fidl::encoding::DefaultFuchsiaResourceDialect,
1151 >,
1152 offset: usize,
1153 mut depth: fidl::encoding::Depth,
1154 ) -> fidl::Result<()> {
1155 encoder.debug_check_bounds::<Protocols>(offset);
1156 let max_ordinal: u64 = self.max_ordinal_present();
1158 encoder.write_num(max_ordinal, offset);
1159 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1160 if max_ordinal == 0 {
1162 return Ok(());
1163 }
1164 depth.increment()?;
1165 let envelope_size = 8;
1166 let bytes_len = max_ordinal as usize * envelope_size;
1167 #[allow(unused_variables)]
1168 let offset = encoder.out_of_line_offset(bytes_len);
1169 let mut _prev_end_offset: usize = 0;
1170 if 1 > max_ordinal {
1171 return Ok(());
1172 }
1173
1174 let cur_offset: usize = (1 - 1) * envelope_size;
1177
1178 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1180
1181 fidl::encoding::encode_in_envelope_optional::<
1186 fidl::encoding::Endpoint<
1187 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1188 >,
1189 fidl::encoding::DefaultFuchsiaResourceDialect,
1190 >(
1191 self.device.as_mut().map(
1192 <fidl::encoding::Endpoint<
1193 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1194 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1195 ),
1196 encoder,
1197 offset + cur_offset,
1198 depth,
1199 )?;
1200
1201 _prev_end_offset = cur_offset + envelope_size;
1202 if 2 > max_ordinal {
1203 return Ok(());
1204 }
1205
1206 let cur_offset: usize = (2 - 1) * envelope_size;
1209
1210 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1212
1213 fidl::encoding::encode_in_envelope_optional::<
1218 fidl::encoding::Endpoint<
1219 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1220 >,
1221 fidl::encoding::DefaultFuchsiaResourceDialect,
1222 >(
1223 self.device_extra.as_mut().map(
1224 <fidl::encoding::Endpoint<
1225 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1226 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1227 ),
1228 encoder,
1229 offset + cur_offset,
1230 depth,
1231 )?;
1232
1233 _prev_end_offset = cur_offset + envelope_size;
1234 if 3 > max_ordinal {
1235 return Ok(());
1236 }
1237
1238 let cur_offset: usize = (3 - 1) * envelope_size;
1241
1242 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1244
1245 fidl::encoding::encode_in_envelope_optional::<
1250 fidl::encoding::Endpoint<
1251 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1252 >,
1253 fidl::encoding::DefaultFuchsiaResourceDialect,
1254 >(
1255 self.device_test.as_mut().map(
1256 <fidl::encoding::Endpoint<
1257 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1258 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1259 ),
1260 encoder,
1261 offset + cur_offset,
1262 depth,
1263 )?;
1264
1265 _prev_end_offset = cur_offset + envelope_size;
1266 if 4 > max_ordinal {
1267 return Ok(());
1268 }
1269
1270 let cur_offset: usize = (4 - 1) * envelope_size;
1273
1274 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1276
1277 fidl::encoding::encode_in_envelope_optional::<
1282 fidl::encoding::Endpoint<
1283 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceRouteMarker>,
1284 >,
1285 fidl::encoding::DefaultFuchsiaResourceDialect,
1286 >(
1287 self.device_route.as_mut().map(
1288 <fidl::encoding::Endpoint<
1289 fidl::endpoints::ServerEnd<
1290 fidl_fuchsia_lowpan_experimental::DeviceRouteMarker,
1291 >,
1292 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1293 ),
1294 encoder,
1295 offset + cur_offset,
1296 depth,
1297 )?;
1298
1299 _prev_end_offset = cur_offset + envelope_size;
1300 if 5 > max_ordinal {
1301 return Ok(());
1302 }
1303
1304 let cur_offset: usize = (5 - 1) * envelope_size;
1307
1308 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1310
1311 fidl::encoding::encode_in_envelope_optional::<
1316 fidl::encoding::Endpoint<
1317 fidl::endpoints::ServerEnd<
1318 fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
1319 >,
1320 >,
1321 fidl::encoding::DefaultFuchsiaResourceDialect,
1322 >(
1323 self.device_route_extra.as_mut().map(
1324 <fidl::encoding::Endpoint<
1325 fidl::endpoints::ServerEnd<
1326 fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
1327 >,
1328 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1329 ),
1330 encoder,
1331 offset + cur_offset,
1332 depth,
1333 )?;
1334
1335 _prev_end_offset = cur_offset + envelope_size;
1336 if 6 > max_ordinal {
1337 return Ok(());
1338 }
1339
1340 let cur_offset: usize = (6 - 1) * envelope_size;
1343
1344 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1346
1347 fidl::encoding::encode_in_envelope_optional::<
1352 fidl::encoding::Endpoint<
1353 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
1354 >,
1355 fidl::encoding::DefaultFuchsiaResourceDialect,
1356 >(
1357 self.counters.as_mut().map(
1358 <fidl::encoding::Endpoint<
1359 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
1360 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1361 ),
1362 encoder,
1363 offset + cur_offset,
1364 depth,
1365 )?;
1366
1367 _prev_end_offset = cur_offset + envelope_size;
1368 if 7 > max_ordinal {
1369 return Ok(());
1370 }
1371
1372 let cur_offset: usize = (7 - 1) * envelope_size;
1375
1376 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1378
1379 fidl::encoding::encode_in_envelope_optional::<
1384 fidl::encoding::Endpoint<
1385 fidl::endpoints::ServerEnd<
1386 fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
1387 >,
1388 >,
1389 fidl::encoding::DefaultFuchsiaResourceDialect,
1390 >(
1391 self.thread_legacy_joining.as_mut().map(
1392 <fidl::encoding::Endpoint<
1393 fidl::endpoints::ServerEnd<
1394 fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
1395 >,
1396 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1397 ),
1398 encoder,
1399 offset + cur_offset,
1400 depth,
1401 )?;
1402
1403 _prev_end_offset = cur_offset + envelope_size;
1404 if 8 > max_ordinal {
1405 return Ok(());
1406 }
1407
1408 let cur_offset: usize = (8 - 1) * envelope_size;
1411
1412 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1414
1415 fidl::encoding::encode_in_envelope_optional::<
1420 fidl::encoding::Endpoint<
1421 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
1422 >,
1423 fidl::encoding::DefaultFuchsiaResourceDialect,
1424 >(
1425 self.thread_dataset.as_mut().map(
1426 <fidl::encoding::Endpoint<
1427 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
1428 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1429 ),
1430 encoder,
1431 offset + cur_offset,
1432 depth,
1433 )?;
1434
1435 _prev_end_offset = cur_offset + envelope_size;
1436 if 9 > max_ordinal {
1437 return Ok(());
1438 }
1439
1440 let cur_offset: usize = (9 - 1) * envelope_size;
1443
1444 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1446
1447 fidl::encoding::encode_in_envelope_optional::<
1452 fidl::encoding::Endpoint<
1453 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
1454 >,
1455 fidl::encoding::DefaultFuchsiaResourceDialect,
1456 >(
1457 self.energy_scan.as_mut().map(
1458 <fidl::encoding::Endpoint<
1459 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
1460 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1461 ),
1462 encoder,
1463 offset + cur_offset,
1464 depth,
1465 )?;
1466
1467 _prev_end_offset = cur_offset + envelope_size;
1468 if 10 > max_ordinal {
1469 return Ok(());
1470 }
1471
1472 let cur_offset: usize = (10 - 1) * envelope_size;
1475
1476 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1478
1479 fidl::encoding::encode_in_envelope_optional::<
1484 fidl::encoding::Endpoint<
1485 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
1486 >,
1487 fidl::encoding::DefaultFuchsiaResourceDialect,
1488 >(
1489 self.experimental_device.as_mut().map(
1490 <fidl::encoding::Endpoint<
1491 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
1492 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1493 ),
1494 encoder,
1495 offset + cur_offset,
1496 depth,
1497 )?;
1498
1499 _prev_end_offset = cur_offset + envelope_size;
1500 if 11 > max_ordinal {
1501 return Ok(());
1502 }
1503
1504 let cur_offset: usize = (11 - 1) * envelope_size;
1507
1508 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1510
1511 fidl::encoding::encode_in_envelope_optional::<
1516 fidl::encoding::Endpoint<
1517 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceExtraMarker>,
1518 >,
1519 fidl::encoding::DefaultFuchsiaResourceDialect,
1520 >(
1521 self.experimental_device_extra.as_mut().map(
1522 <fidl::encoding::Endpoint<
1523 fidl::endpoints::ServerEnd<
1524 fidl_fuchsia_lowpan_experimental::DeviceExtraMarker,
1525 >,
1526 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1527 ),
1528 encoder,
1529 offset + cur_offset,
1530 depth,
1531 )?;
1532
1533 _prev_end_offset = cur_offset + envelope_size;
1534 if 12 > max_ordinal {
1535 return Ok(());
1536 }
1537
1538 let cur_offset: usize = (12 - 1) * envelope_size;
1541
1542 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1544
1545 fidl::encoding::encode_in_envelope_optional::<
1550 fidl::encoding::Endpoint<
1551 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
1552 >,
1553 fidl::encoding::DefaultFuchsiaResourceDialect,
1554 >(
1555 self.meshcop.as_mut().map(
1556 <fidl::encoding::Endpoint<
1557 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
1558 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1559 ),
1560 encoder,
1561 offset + cur_offset,
1562 depth,
1563 )?;
1564
1565 _prev_end_offset = cur_offset + envelope_size;
1566 if 13 > max_ordinal {
1567 return Ok(());
1568 }
1569
1570 let cur_offset: usize = (13 - 1) * envelope_size;
1573
1574 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1576
1577 fidl::encoding::encode_in_envelope_optional::<
1582 fidl::encoding::Endpoint<
1583 fidl::endpoints::ServerEnd<
1584 fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
1585 >,
1586 >,
1587 fidl::encoding::DefaultFuchsiaResourceDialect,
1588 >(
1589 self.telemetry_provider.as_mut().map(
1590 <fidl::encoding::Endpoint<
1591 fidl::endpoints::ServerEnd<
1592 fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
1593 >,
1594 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1595 ),
1596 encoder,
1597 offset + cur_offset,
1598 depth,
1599 )?;
1600
1601 _prev_end_offset = cur_offset + envelope_size;
1602 if 14 > max_ordinal {
1603 return Ok(());
1604 }
1605
1606 let cur_offset: usize = (14 - 1) * envelope_size;
1609
1610 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1612
1613 fidl::encoding::encode_in_envelope_optional::<
1618 fidl::encoding::Endpoint<
1619 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
1620 >,
1621 fidl::encoding::DefaultFuchsiaResourceDialect,
1622 >(
1623 self.thread_feature.as_mut().map(
1624 <fidl::encoding::Endpoint<
1625 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
1626 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1627 ),
1628 encoder,
1629 offset + cur_offset,
1630 depth,
1631 )?;
1632
1633 _prev_end_offset = cur_offset + envelope_size;
1634 if 15 > max_ordinal {
1635 return Ok(());
1636 }
1637
1638 let cur_offset: usize = (15 - 1) * envelope_size;
1641
1642 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1644
1645 fidl::encoding::encode_in_envelope_optional::<
1650 fidl::encoding::Endpoint<
1651 fidl::endpoints::ServerEnd<
1652 fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
1653 >,
1654 >,
1655 fidl::encoding::DefaultFuchsiaResourceDialect,
1656 >(
1657 self.capabilities.as_mut().map(
1658 <fidl::encoding::Endpoint<
1659 fidl::endpoints::ServerEnd<
1660 fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
1661 >,
1662 > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
1663 ),
1664 encoder,
1665 offset + cur_offset,
1666 depth,
1667 )?;
1668
1669 _prev_end_offset = cur_offset + envelope_size;
1670
1671 Ok(())
1672 }
1673 }
1674
1675 impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Protocols {
1676 #[inline(always)]
1677 fn new_empty() -> Self {
1678 Self::default()
1679 }
1680
1681 unsafe fn decode(
1682 &mut self,
1683 decoder: &mut fidl::encoding::Decoder<
1684 '_,
1685 fidl::encoding::DefaultFuchsiaResourceDialect,
1686 >,
1687 offset: usize,
1688 mut depth: fidl::encoding::Depth,
1689 ) -> fidl::Result<()> {
1690 decoder.debug_check_bounds::<Self>(offset);
1691 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1692 None => return Err(fidl::Error::NotNullable),
1693 Some(len) => len,
1694 };
1695 if len == 0 {
1697 return Ok(());
1698 };
1699 depth.increment()?;
1700 let envelope_size = 8;
1701 let bytes_len = len * envelope_size;
1702 let offset = decoder.out_of_line_offset(bytes_len)?;
1703 let mut _next_ordinal_to_read = 0;
1705 let mut next_offset = offset;
1706 let end_offset = offset + bytes_len;
1707 _next_ordinal_to_read += 1;
1708 if next_offset >= end_offset {
1709 return Ok(());
1710 }
1711
1712 while _next_ordinal_to_read < 1 {
1714 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1715 _next_ordinal_to_read += 1;
1716 next_offset += envelope_size;
1717 }
1718
1719 let next_out_of_line = decoder.next_out_of_line();
1720 let handles_before = decoder.remaining_handles();
1721 if let Some((inlined, num_bytes, num_handles)) =
1722 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1723 {
1724 let member_inline_size = <fidl::encoding::Endpoint<
1725 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1726 > as fidl::encoding::TypeMarker>::inline_size(
1727 decoder.context
1728 );
1729 if inlined != (member_inline_size <= 4) {
1730 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1731 }
1732 let inner_offset;
1733 let mut inner_depth = depth.clone();
1734 if inlined {
1735 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1736 inner_offset = next_offset;
1737 } else {
1738 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1739 inner_depth.increment()?;
1740 }
1741 let val_ref = self.device.get_or_insert_with(|| {
1742 fidl::new_empty!(
1743 fidl::encoding::Endpoint<
1744 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1745 >,
1746 fidl::encoding::DefaultFuchsiaResourceDialect
1747 )
1748 });
1749 fidl::decode!(
1750 fidl::encoding::Endpoint<
1751 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceMarker>,
1752 >,
1753 fidl::encoding::DefaultFuchsiaResourceDialect,
1754 val_ref,
1755 decoder,
1756 inner_offset,
1757 inner_depth
1758 )?;
1759 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1760 {
1761 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1762 }
1763 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1764 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1765 }
1766 }
1767
1768 next_offset += envelope_size;
1769 _next_ordinal_to_read += 1;
1770 if next_offset >= end_offset {
1771 return Ok(());
1772 }
1773
1774 while _next_ordinal_to_read < 2 {
1776 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1777 _next_ordinal_to_read += 1;
1778 next_offset += envelope_size;
1779 }
1780
1781 let next_out_of_line = decoder.next_out_of_line();
1782 let handles_before = decoder.remaining_handles();
1783 if let Some((inlined, num_bytes, num_handles)) =
1784 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1785 {
1786 let member_inline_size = <fidl::encoding::Endpoint<
1787 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1788 > as fidl::encoding::TypeMarker>::inline_size(
1789 decoder.context
1790 );
1791 if inlined != (member_inline_size <= 4) {
1792 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1793 }
1794 let inner_offset;
1795 let mut inner_depth = depth.clone();
1796 if inlined {
1797 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1798 inner_offset = next_offset;
1799 } else {
1800 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1801 inner_depth.increment()?;
1802 }
1803 let val_ref = self.device_extra.get_or_insert_with(|| {
1804 fidl::new_empty!(
1805 fidl::encoding::Endpoint<
1806 fidl::endpoints::ServerEnd<
1807 fidl_fuchsia_lowpan_device::DeviceExtraMarker,
1808 >,
1809 >,
1810 fidl::encoding::DefaultFuchsiaResourceDialect
1811 )
1812 });
1813 fidl::decode!(
1814 fidl::encoding::Endpoint<
1815 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::DeviceExtraMarker>,
1816 >,
1817 fidl::encoding::DefaultFuchsiaResourceDialect,
1818 val_ref,
1819 decoder,
1820 inner_offset,
1821 inner_depth
1822 )?;
1823 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1824 {
1825 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1826 }
1827 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1828 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1829 }
1830 }
1831
1832 next_offset += envelope_size;
1833 _next_ordinal_to_read += 1;
1834 if next_offset >= end_offset {
1835 return Ok(());
1836 }
1837
1838 while _next_ordinal_to_read < 3 {
1840 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1841 _next_ordinal_to_read += 1;
1842 next_offset += envelope_size;
1843 }
1844
1845 let next_out_of_line = decoder.next_out_of_line();
1846 let handles_before = decoder.remaining_handles();
1847 if let Some((inlined, num_bytes, num_handles)) =
1848 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1849 {
1850 let member_inline_size = <fidl::encoding::Endpoint<
1851 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1852 > as fidl::encoding::TypeMarker>::inline_size(
1853 decoder.context
1854 );
1855 if inlined != (member_inline_size <= 4) {
1856 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1857 }
1858 let inner_offset;
1859 let mut inner_depth = depth.clone();
1860 if inlined {
1861 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1862 inner_offset = next_offset;
1863 } else {
1864 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1865 inner_depth.increment()?;
1866 }
1867 let val_ref = self.device_test.get_or_insert_with(|| {
1868 fidl::new_empty!(
1869 fidl::encoding::Endpoint<
1870 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1871 >,
1872 fidl::encoding::DefaultFuchsiaResourceDialect
1873 )
1874 });
1875 fidl::decode!(
1876 fidl::encoding::Endpoint<
1877 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_test::DeviceTestMarker>,
1878 >,
1879 fidl::encoding::DefaultFuchsiaResourceDialect,
1880 val_ref,
1881 decoder,
1882 inner_offset,
1883 inner_depth
1884 )?;
1885 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1886 {
1887 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1888 }
1889 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1890 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1891 }
1892 }
1893
1894 next_offset += envelope_size;
1895 _next_ordinal_to_read += 1;
1896 if next_offset >= end_offset {
1897 return Ok(());
1898 }
1899
1900 while _next_ordinal_to_read < 4 {
1902 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1903 _next_ordinal_to_read += 1;
1904 next_offset += envelope_size;
1905 }
1906
1907 let next_out_of_line = decoder.next_out_of_line();
1908 let handles_before = decoder.remaining_handles();
1909 if let Some((inlined, num_bytes, num_handles)) =
1910 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1911 {
1912 let member_inline_size = <fidl::encoding::Endpoint<
1913 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceRouteMarker>,
1914 > as fidl::encoding::TypeMarker>::inline_size(
1915 decoder.context
1916 );
1917 if inlined != (member_inline_size <= 4) {
1918 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1919 }
1920 let inner_offset;
1921 let mut inner_depth = depth.clone();
1922 if inlined {
1923 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1924 inner_offset = next_offset;
1925 } else {
1926 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1927 inner_depth.increment()?;
1928 }
1929 let val_ref = self.device_route.get_or_insert_with(|| {
1930 fidl::new_empty!(
1931 fidl::encoding::Endpoint<
1932 fidl::endpoints::ServerEnd<
1933 fidl_fuchsia_lowpan_experimental::DeviceRouteMarker,
1934 >,
1935 >,
1936 fidl::encoding::DefaultFuchsiaResourceDialect
1937 )
1938 });
1939 fidl::decode!(
1940 fidl::encoding::Endpoint<
1941 fidl::endpoints::ServerEnd<
1942 fidl_fuchsia_lowpan_experimental::DeviceRouteMarker,
1943 >,
1944 >,
1945 fidl::encoding::DefaultFuchsiaResourceDialect,
1946 val_ref,
1947 decoder,
1948 inner_offset,
1949 inner_depth
1950 )?;
1951 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1952 {
1953 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1954 }
1955 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1956 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1957 }
1958 }
1959
1960 next_offset += envelope_size;
1961 _next_ordinal_to_read += 1;
1962 if next_offset >= end_offset {
1963 return Ok(());
1964 }
1965
1966 while _next_ordinal_to_read < 5 {
1968 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1969 _next_ordinal_to_read += 1;
1970 next_offset += envelope_size;
1971 }
1972
1973 let next_out_of_line = decoder.next_out_of_line();
1974 let handles_before = decoder.remaining_handles();
1975 if let Some((inlined, num_bytes, num_handles)) =
1976 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1977 {
1978 let member_inline_size = <fidl::encoding::Endpoint<
1979 fidl::endpoints::ServerEnd<
1980 fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
1981 >,
1982 > as fidl::encoding::TypeMarker>::inline_size(
1983 decoder.context
1984 );
1985 if inlined != (member_inline_size <= 4) {
1986 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1987 }
1988 let inner_offset;
1989 let mut inner_depth = depth.clone();
1990 if inlined {
1991 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1992 inner_offset = next_offset;
1993 } else {
1994 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1995 inner_depth.increment()?;
1996 }
1997 let val_ref = self.device_route_extra.get_or_insert_with(|| {
1998 fidl::new_empty!(
1999 fidl::encoding::Endpoint<
2000 fidl::endpoints::ServerEnd<
2001 fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
2002 >,
2003 >,
2004 fidl::encoding::DefaultFuchsiaResourceDialect
2005 )
2006 });
2007 fidl::decode!(
2008 fidl::encoding::Endpoint<
2009 fidl::endpoints::ServerEnd<
2010 fidl_fuchsia_lowpan_experimental::DeviceRouteExtraMarker,
2011 >,
2012 >,
2013 fidl::encoding::DefaultFuchsiaResourceDialect,
2014 val_ref,
2015 decoder,
2016 inner_offset,
2017 inner_depth
2018 )?;
2019 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2020 {
2021 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2022 }
2023 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2024 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2025 }
2026 }
2027
2028 next_offset += envelope_size;
2029 _next_ordinal_to_read += 1;
2030 if next_offset >= end_offset {
2031 return Ok(());
2032 }
2033
2034 while _next_ordinal_to_read < 6 {
2036 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2037 _next_ordinal_to_read += 1;
2038 next_offset += envelope_size;
2039 }
2040
2041 let next_out_of_line = decoder.next_out_of_line();
2042 let handles_before = decoder.remaining_handles();
2043 if let Some((inlined, num_bytes, num_handles)) =
2044 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2045 {
2046 let member_inline_size = <fidl::encoding::Endpoint<
2047 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
2048 > as fidl::encoding::TypeMarker>::inline_size(
2049 decoder.context
2050 );
2051 if inlined != (member_inline_size <= 4) {
2052 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2053 }
2054 let inner_offset;
2055 let mut inner_depth = depth.clone();
2056 if inlined {
2057 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2058 inner_offset = next_offset;
2059 } else {
2060 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2061 inner_depth.increment()?;
2062 }
2063 let val_ref = self.counters.get_or_insert_with(|| {
2064 fidl::new_empty!(
2065 fidl::encoding::Endpoint<
2066 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
2067 >,
2068 fidl::encoding::DefaultFuchsiaResourceDialect
2069 )
2070 });
2071 fidl::decode!(
2072 fidl::encoding::Endpoint<
2073 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::CountersMarker>,
2074 >,
2075 fidl::encoding::DefaultFuchsiaResourceDialect,
2076 val_ref,
2077 decoder,
2078 inner_offset,
2079 inner_depth
2080 )?;
2081 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2082 {
2083 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2084 }
2085 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2086 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2087 }
2088 }
2089
2090 next_offset += envelope_size;
2091 _next_ordinal_to_read += 1;
2092 if next_offset >= end_offset {
2093 return Ok(());
2094 }
2095
2096 while _next_ordinal_to_read < 7 {
2098 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2099 _next_ordinal_to_read += 1;
2100 next_offset += envelope_size;
2101 }
2102
2103 let next_out_of_line = decoder.next_out_of_line();
2104 let handles_before = decoder.remaining_handles();
2105 if let Some((inlined, num_bytes, num_handles)) =
2106 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2107 {
2108 let member_inline_size = <fidl::encoding::Endpoint<
2109 fidl::endpoints::ServerEnd<
2110 fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
2111 >,
2112 > as fidl::encoding::TypeMarker>::inline_size(
2113 decoder.context
2114 );
2115 if inlined != (member_inline_size <= 4) {
2116 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2117 }
2118 let inner_offset;
2119 let mut inner_depth = depth.clone();
2120 if inlined {
2121 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2122 inner_offset = next_offset;
2123 } else {
2124 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2125 inner_depth.increment()?;
2126 }
2127 let val_ref = self.thread_legacy_joining.get_or_insert_with(|| {
2128 fidl::new_empty!(
2129 fidl::encoding::Endpoint<
2130 fidl::endpoints::ServerEnd<
2131 fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
2132 >,
2133 >,
2134 fidl::encoding::DefaultFuchsiaResourceDialect
2135 )
2136 });
2137 fidl::decode!(
2138 fidl::encoding::Endpoint<
2139 fidl::endpoints::ServerEnd<
2140 fidl_fuchsia_lowpan_experimental::LegacyJoiningMarker,
2141 >,
2142 >,
2143 fidl::encoding::DefaultFuchsiaResourceDialect,
2144 val_ref,
2145 decoder,
2146 inner_offset,
2147 inner_depth
2148 )?;
2149 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2150 {
2151 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2152 }
2153 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2154 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2155 }
2156 }
2157
2158 next_offset += envelope_size;
2159 _next_ordinal_to_read += 1;
2160 if next_offset >= end_offset {
2161 return Ok(());
2162 }
2163
2164 while _next_ordinal_to_read < 8 {
2166 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2167 _next_ordinal_to_read += 1;
2168 next_offset += envelope_size;
2169 }
2170
2171 let next_out_of_line = decoder.next_out_of_line();
2172 let handles_before = decoder.remaining_handles();
2173 if let Some((inlined, num_bytes, num_handles)) =
2174 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2175 {
2176 let member_inline_size = <fidl::encoding::Endpoint<
2177 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
2178 > as fidl::encoding::TypeMarker>::inline_size(
2179 decoder.context
2180 );
2181 if inlined != (member_inline_size <= 4) {
2182 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2183 }
2184 let inner_offset;
2185 let mut inner_depth = depth.clone();
2186 if inlined {
2187 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2188 inner_offset = next_offset;
2189 } else {
2190 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2191 inner_depth.increment()?;
2192 }
2193 let val_ref = self.thread_dataset.get_or_insert_with(|| {
2194 fidl::new_empty!(
2195 fidl::encoding::Endpoint<
2196 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
2197 >,
2198 fidl::encoding::DefaultFuchsiaResourceDialect
2199 )
2200 });
2201 fidl::decode!(
2202 fidl::encoding::Endpoint<
2203 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::DatasetMarker>,
2204 >,
2205 fidl::encoding::DefaultFuchsiaResourceDialect,
2206 val_ref,
2207 decoder,
2208 inner_offset,
2209 inner_depth
2210 )?;
2211 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2212 {
2213 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2214 }
2215 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2216 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2217 }
2218 }
2219
2220 next_offset += envelope_size;
2221 _next_ordinal_to_read += 1;
2222 if next_offset >= end_offset {
2223 return Ok(());
2224 }
2225
2226 while _next_ordinal_to_read < 9 {
2228 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2229 _next_ordinal_to_read += 1;
2230 next_offset += envelope_size;
2231 }
2232
2233 let next_out_of_line = decoder.next_out_of_line();
2234 let handles_before = decoder.remaining_handles();
2235 if let Some((inlined, num_bytes, num_handles)) =
2236 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2237 {
2238 let member_inline_size = <fidl::encoding::Endpoint<
2239 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
2240 > as fidl::encoding::TypeMarker>::inline_size(
2241 decoder.context
2242 );
2243 if inlined != (member_inline_size <= 4) {
2244 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2245 }
2246 let inner_offset;
2247 let mut inner_depth = depth.clone();
2248 if inlined {
2249 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2250 inner_offset = next_offset;
2251 } else {
2252 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2253 inner_depth.increment()?;
2254 }
2255 let val_ref = self.energy_scan.get_or_insert_with(|| {
2256 fidl::new_empty!(
2257 fidl::encoding::Endpoint<
2258 fidl::endpoints::ServerEnd<
2259 fidl_fuchsia_lowpan_device::EnergyScanMarker,
2260 >,
2261 >,
2262 fidl::encoding::DefaultFuchsiaResourceDialect
2263 )
2264 });
2265 fidl::decode!(
2266 fidl::encoding::Endpoint<
2267 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_device::EnergyScanMarker>,
2268 >,
2269 fidl::encoding::DefaultFuchsiaResourceDialect,
2270 val_ref,
2271 decoder,
2272 inner_offset,
2273 inner_depth
2274 )?;
2275 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2276 {
2277 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2278 }
2279 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2280 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2281 }
2282 }
2283
2284 next_offset += envelope_size;
2285 _next_ordinal_to_read += 1;
2286 if next_offset >= end_offset {
2287 return Ok(());
2288 }
2289
2290 while _next_ordinal_to_read < 10 {
2292 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2293 _next_ordinal_to_read += 1;
2294 next_offset += envelope_size;
2295 }
2296
2297 let next_out_of_line = decoder.next_out_of_line();
2298 let handles_before = decoder.remaining_handles();
2299 if let Some((inlined, num_bytes, num_handles)) =
2300 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2301 {
2302 let member_inline_size = <fidl::encoding::Endpoint<
2303 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
2304 > as fidl::encoding::TypeMarker>::inline_size(
2305 decoder.context
2306 );
2307 if inlined != (member_inline_size <= 4) {
2308 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2309 }
2310 let inner_offset;
2311 let mut inner_depth = depth.clone();
2312 if inlined {
2313 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2314 inner_offset = next_offset;
2315 } else {
2316 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2317 inner_depth.increment()?;
2318 }
2319 let val_ref = self.experimental_device.get_or_insert_with(|| {
2320 fidl::new_empty!(
2321 fidl::encoding::Endpoint<
2322 fidl::endpoints::ServerEnd<
2323 fidl_fuchsia_lowpan_experimental::DeviceMarker,
2324 >,
2325 >,
2326 fidl::encoding::DefaultFuchsiaResourceDialect
2327 )
2328 });
2329 fidl::decode!(
2330 fidl::encoding::Endpoint<
2331 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceMarker>,
2332 >,
2333 fidl::encoding::DefaultFuchsiaResourceDialect,
2334 val_ref,
2335 decoder,
2336 inner_offset,
2337 inner_depth
2338 )?;
2339 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2340 {
2341 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2342 }
2343 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2344 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2345 }
2346 }
2347
2348 next_offset += envelope_size;
2349 _next_ordinal_to_read += 1;
2350 if next_offset >= end_offset {
2351 return Ok(());
2352 }
2353
2354 while _next_ordinal_to_read < 11 {
2356 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2357 _next_ordinal_to_read += 1;
2358 next_offset += envelope_size;
2359 }
2360
2361 let next_out_of_line = decoder.next_out_of_line();
2362 let handles_before = decoder.remaining_handles();
2363 if let Some((inlined, num_bytes, num_handles)) =
2364 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2365 {
2366 let member_inline_size = <fidl::encoding::Endpoint<
2367 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_experimental::DeviceExtraMarker>,
2368 > as fidl::encoding::TypeMarker>::inline_size(
2369 decoder.context
2370 );
2371 if inlined != (member_inline_size <= 4) {
2372 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2373 }
2374 let inner_offset;
2375 let mut inner_depth = depth.clone();
2376 if inlined {
2377 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2378 inner_offset = next_offset;
2379 } else {
2380 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2381 inner_depth.increment()?;
2382 }
2383 let val_ref = self.experimental_device_extra.get_or_insert_with(|| {
2384 fidl::new_empty!(
2385 fidl::encoding::Endpoint<
2386 fidl::endpoints::ServerEnd<
2387 fidl_fuchsia_lowpan_experimental::DeviceExtraMarker,
2388 >,
2389 >,
2390 fidl::encoding::DefaultFuchsiaResourceDialect
2391 )
2392 });
2393 fidl::decode!(
2394 fidl::encoding::Endpoint<
2395 fidl::endpoints::ServerEnd<
2396 fidl_fuchsia_lowpan_experimental::DeviceExtraMarker,
2397 >,
2398 >,
2399 fidl::encoding::DefaultFuchsiaResourceDialect,
2400 val_ref,
2401 decoder,
2402 inner_offset,
2403 inner_depth
2404 )?;
2405 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2406 {
2407 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2408 }
2409 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2410 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2411 }
2412 }
2413
2414 next_offset += envelope_size;
2415 _next_ordinal_to_read += 1;
2416 if next_offset >= end_offset {
2417 return Ok(());
2418 }
2419
2420 while _next_ordinal_to_read < 12 {
2422 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2423 _next_ordinal_to_read += 1;
2424 next_offset += envelope_size;
2425 }
2426
2427 let next_out_of_line = decoder.next_out_of_line();
2428 let handles_before = decoder.remaining_handles();
2429 if let Some((inlined, num_bytes, num_handles)) =
2430 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2431 {
2432 let member_inline_size = <fidl::encoding::Endpoint<
2433 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
2434 > as fidl::encoding::TypeMarker>::inline_size(
2435 decoder.context
2436 );
2437 if inlined != (member_inline_size <= 4) {
2438 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2439 }
2440 let inner_offset;
2441 let mut inner_depth = depth.clone();
2442 if inlined {
2443 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2444 inner_offset = next_offset;
2445 } else {
2446 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2447 inner_depth.increment()?;
2448 }
2449 let val_ref = self.meshcop.get_or_insert_with(|| {
2450 fidl::new_empty!(
2451 fidl::encoding::Endpoint<
2452 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
2453 >,
2454 fidl::encoding::DefaultFuchsiaResourceDialect
2455 )
2456 });
2457 fidl::decode!(
2458 fidl::encoding::Endpoint<
2459 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::MeshcopMarker>,
2460 >,
2461 fidl::encoding::DefaultFuchsiaResourceDialect,
2462 val_ref,
2463 decoder,
2464 inner_offset,
2465 inner_depth
2466 )?;
2467 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2468 {
2469 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2470 }
2471 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2472 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2473 }
2474 }
2475
2476 next_offset += envelope_size;
2477 _next_ordinal_to_read += 1;
2478 if next_offset >= end_offset {
2479 return Ok(());
2480 }
2481
2482 while _next_ordinal_to_read < 13 {
2484 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2485 _next_ordinal_to_read += 1;
2486 next_offset += envelope_size;
2487 }
2488
2489 let next_out_of_line = decoder.next_out_of_line();
2490 let handles_before = decoder.remaining_handles();
2491 if let Some((inlined, num_bytes, num_handles)) =
2492 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2493 {
2494 let member_inline_size = <fidl::encoding::Endpoint<
2495 fidl::endpoints::ServerEnd<
2496 fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
2497 >,
2498 > as fidl::encoding::TypeMarker>::inline_size(
2499 decoder.context
2500 );
2501 if inlined != (member_inline_size <= 4) {
2502 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2503 }
2504 let inner_offset;
2505 let mut inner_depth = depth.clone();
2506 if inlined {
2507 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2508 inner_offset = next_offset;
2509 } else {
2510 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2511 inner_depth.increment()?;
2512 }
2513 let val_ref = self.telemetry_provider.get_or_insert_with(|| {
2514 fidl::new_empty!(
2515 fidl::encoding::Endpoint<
2516 fidl::endpoints::ServerEnd<
2517 fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
2518 >,
2519 >,
2520 fidl::encoding::DefaultFuchsiaResourceDialect
2521 )
2522 });
2523 fidl::decode!(
2524 fidl::encoding::Endpoint<
2525 fidl::endpoints::ServerEnd<
2526 fidl_fuchsia_lowpan_experimental::TelemetryProviderMarker,
2527 >,
2528 >,
2529 fidl::encoding::DefaultFuchsiaResourceDialect,
2530 val_ref,
2531 decoder,
2532 inner_offset,
2533 inner_depth
2534 )?;
2535 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2536 {
2537 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2538 }
2539 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2540 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2541 }
2542 }
2543
2544 next_offset += envelope_size;
2545 _next_ordinal_to_read += 1;
2546 if next_offset >= end_offset {
2547 return Ok(());
2548 }
2549
2550 while _next_ordinal_to_read < 14 {
2552 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2553 _next_ordinal_to_read += 1;
2554 next_offset += envelope_size;
2555 }
2556
2557 let next_out_of_line = decoder.next_out_of_line();
2558 let handles_before = decoder.remaining_handles();
2559 if let Some((inlined, num_bytes, num_handles)) =
2560 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2561 {
2562 let member_inline_size = <fidl::encoding::Endpoint<
2563 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
2564 > as fidl::encoding::TypeMarker>::inline_size(
2565 decoder.context
2566 );
2567 if inlined != (member_inline_size <= 4) {
2568 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2569 }
2570 let inner_offset;
2571 let mut inner_depth = depth.clone();
2572 if inlined {
2573 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2574 inner_offset = next_offset;
2575 } else {
2576 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2577 inner_depth.increment()?;
2578 }
2579 let val_ref = self.thread_feature.get_or_insert_with(|| {
2580 fidl::new_empty!(
2581 fidl::encoding::Endpoint<
2582 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
2583 >,
2584 fidl::encoding::DefaultFuchsiaResourceDialect
2585 )
2586 });
2587 fidl::decode!(
2588 fidl::encoding::Endpoint<
2589 fidl::endpoints::ServerEnd<fidl_fuchsia_lowpan_thread::FeatureMarker>,
2590 >,
2591 fidl::encoding::DefaultFuchsiaResourceDialect,
2592 val_ref,
2593 decoder,
2594 inner_offset,
2595 inner_depth
2596 )?;
2597 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2598 {
2599 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2600 }
2601 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2602 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2603 }
2604 }
2605
2606 next_offset += envelope_size;
2607 _next_ordinal_to_read += 1;
2608 if next_offset >= end_offset {
2609 return Ok(());
2610 }
2611
2612 while _next_ordinal_to_read < 15 {
2614 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2615 _next_ordinal_to_read += 1;
2616 next_offset += envelope_size;
2617 }
2618
2619 let next_out_of_line = decoder.next_out_of_line();
2620 let handles_before = decoder.remaining_handles();
2621 if let Some((inlined, num_bytes, num_handles)) =
2622 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2623 {
2624 let member_inline_size = <fidl::encoding::Endpoint<
2625 fidl::endpoints::ServerEnd<
2626 fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
2627 >,
2628 > as fidl::encoding::TypeMarker>::inline_size(
2629 decoder.context
2630 );
2631 if inlined != (member_inline_size <= 4) {
2632 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2633 }
2634 let inner_offset;
2635 let mut inner_depth = depth.clone();
2636 if inlined {
2637 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2638 inner_offset = next_offset;
2639 } else {
2640 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2641 inner_depth.increment()?;
2642 }
2643 let val_ref = self.capabilities.get_or_insert_with(|| {
2644 fidl::new_empty!(
2645 fidl::encoding::Endpoint<
2646 fidl::endpoints::ServerEnd<
2647 fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
2648 >,
2649 >,
2650 fidl::encoding::DefaultFuchsiaResourceDialect
2651 )
2652 });
2653 fidl::decode!(
2654 fidl::encoding::Endpoint<
2655 fidl::endpoints::ServerEnd<
2656 fidl_fuchsia_lowpan_thread::ThreadCapabilitiesMarker,
2657 >,
2658 >,
2659 fidl::encoding::DefaultFuchsiaResourceDialect,
2660 val_ref,
2661 decoder,
2662 inner_offset,
2663 inner_depth
2664 )?;
2665 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2666 {
2667 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2668 }
2669 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2670 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2671 }
2672 }
2673
2674 next_offset += envelope_size;
2675
2676 while next_offset < end_offset {
2678 _next_ordinal_to_read += 1;
2679 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2680 next_offset += envelope_size;
2681 }
2682
2683 Ok(())
2684 }
2685 }
2686}