fidl_fuchsia_lowpan_test_common/
fidl_fuchsia_lowpan_test_common.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::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Maximum number of addresses that can be in the address filter list.
12pub const MAX_FILTERED: u16 = 100;
13
14pub const MAX_NEIGHBORS: u32 = 1024;
15
16/// Describes the address filtering mode of the interface.
17#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
18#[repr(i32)]
19pub enum MacAddressFilterMode {
20    /// Address filtering is disabled. All packets that are
21    /// received are processed normally.
22    Disabled = 0,
23    /// Only packets that have addresses matching an address
24    /// in the filter list will be allowed to be processed.
25    /// All other packets are dropped as if they were never
26    /// received.
27    ///
28    /// Additionally, if an RSSI value was associated
29    /// with an item, that value will be substituted for internal
30    /// routing considerations.
31    Allow = 1,
32    /// All packets from addresses in the filter list will be
33    /// dropped.
34    Deny = 2,
35}
36
37impl MacAddressFilterMode {
38    #[inline]
39    pub fn from_primitive(prim: i32) -> Option<Self> {
40        match prim {
41            0 => Some(Self::Disabled),
42            1 => Some(Self::Allow),
43            2 => Some(Self::Deny),
44            _ => None,
45        }
46    }
47
48    #[inline]
49    pub const fn into_primitive(self) -> i32 {
50        self as i32
51    }
52}
53
54#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
55#[repr(C)]
56pub struct DeviceTestGetCurrentChannelResponse {
57    pub channel_index: u16,
58}
59
60impl fidl::Persistable for DeviceTestGetCurrentChannelResponse {}
61
62#[derive(Clone, Debug, PartialEq)]
63pub struct DeviceTestGetCurrentMacAddressResponse {
64    pub address: fidl_fuchsia_lowpan::MacAddress,
65}
66
67impl fidl::Persistable for DeviceTestGetCurrentMacAddressResponse {}
68
69#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
70#[repr(C)]
71pub struct DeviceTestGetCurrentRssiResponse {
72    pub rssi: i8,
73}
74
75impl fidl::Persistable for DeviceTestGetCurrentRssiResponse {}
76
77#[derive(Clone, Debug, PartialEq)]
78pub struct DeviceTestGetFactoryMacAddressResponse {
79    pub address: fidl_fuchsia_lowpan::MacAddress,
80}
81
82impl fidl::Persistable for DeviceTestGetFactoryMacAddressResponse {}
83
84#[derive(Clone, Debug, PartialEq)]
85pub struct DeviceTestGetMacAddressFilterSettingsResponse {
86    pub settings: MacAddressFilterSettings,
87}
88
89impl fidl::Persistable for DeviceTestGetMacAddressFilterSettingsResponse {}
90
91#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
92pub struct DeviceTestGetNcpVersionResponse {
93    pub version: String,
94}
95
96impl fidl::Persistable for DeviceTestGetNcpVersionResponse {}
97
98#[derive(Clone, Debug, PartialEq)]
99pub struct DeviceTestGetNeighborTableResponse {
100    pub neighbor_table: Vec<NeighborInfo>,
101}
102
103impl fidl::Persistable for DeviceTestGetNeighborTableResponse {}
104
105#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
106#[repr(C)]
107pub struct DeviceTestGetPartitionIdResponse {
108    pub pid: u32,
109}
110
111impl fidl::Persistable for DeviceTestGetPartitionIdResponse {}
112
113#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
114#[repr(C)]
115pub struct DeviceTestGetThreadRloc16Response {
116    pub rloc: u16,
117}
118
119impl fidl::Persistable for DeviceTestGetThreadRloc16Response {}
120
121#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
122#[repr(C)]
123pub struct DeviceTestGetThreadRouterIdResponse {
124    pub router_id: u8,
125}
126
127impl fidl::Persistable for DeviceTestGetThreadRouterIdResponse {}
128
129#[derive(Clone, Debug, PartialEq)]
130pub struct DeviceTestReplaceMacAddressFilterSettingsRequest {
131    pub settings: MacAddressFilterSettings,
132}
133
134impl fidl::Persistable for DeviceTestReplaceMacAddressFilterSettingsRequest {}
135
136/// An item in the MAC filter list.
137#[derive(Clone, Debug, Default, PartialEq)]
138pub struct MacAddressFilterItem {
139    /// The MAC address of the item. This field is required.
140    pub mac_address: Option<fidl_fuchsia_lowpan::MacAddress>,
141    /// Replacement RSSI value for packets received from this address.
142    ///
143    /// This field is ignored unless the mode is set to `MacAddressFilterMode::ALLOW`.
144    ///
145    /// This value is substituted for all received packets. This can affect
146    /// what the mesh topology ultimately looks like.
147    pub rssi: Option<i8>,
148    #[doc(hidden)]
149    pub __source_breaking: fidl::marker::SourceBreaking,
150}
151
152impl fidl::Persistable for MacAddressFilterItem {}
153
154#[derive(Clone, Debug, Default, PartialEq)]
155pub struct MacAddressFilterSettings {
156    /// Address filter mode.
157    ///
158    /// This field is required. If this field is absent when passed to
159    /// `ReplaceMacAddressFilterSettings`, the channel will be closed with
160    /// the epitaph `ZX_ERR_INVALID_ARGUMENT`.
161    pub mode: Option<MacAddressFilterMode>,
162    /// Addresses to be filtered.
163    ///
164    /// If this field is absent it is assumed to be empty.
165    pub items: Option<Vec<MacAddressFilterItem>>,
166    #[doc(hidden)]
167    pub __source_breaking: fidl::marker::SourceBreaking,
168}
169
170impl fidl::Persistable for MacAddressFilterSettings {}
171
172/// Neighbor Table Entry
173///
174/// All fields are optional except for `mac_address`.
175///
176/// See also:
177///   * https://openthread.io/reference/struct/ot-neighbor-info
178///   * https://openthread.io/reference/struct/ot-child-info
179///   * https://github.com/openthread/wpantund/blob/8db2a71c9597e08949dfc38d8c10f830e3de565c/third_party/openthread/src/ncp/spinel.h#L2356-L2373
180#[derive(Clone, Debug, Default, PartialEq)]
181pub struct NeighborInfo {
182    /// The MAC address of the neighbor.
183    ///
184    /// Note that this is the only field guaranteed to be present.
185    pub mac_address: Option<fidl_fuchsia_lowpan::MacAddress>,
186    /// 802.15.4 short address of neighbor.
187    ///
188    /// On Thread networks, this is also the RLOC16.
189    pub short_address: Option<u16>,
190    /// The age of this entry in the neighbor table.
191    ///
192    /// Describes when this neighbor was last seen.
193    /// Resolution is roughly +/- 1sec.
194    pub age: Option<i64>,
195    /// True if this neighbor is considered a child and is thus
196    /// entirely dependent on this device for routing.
197    ///
198    /// If absent, assumed to be false.
199    pub is_child: Option<bool>,
200    /// The number of link (non-management) frames received from this neighbor.
201    pub link_frame_count: Option<u32>,
202    /// The number of management (MLE, etc) frames received from this neighbor.
203    pub mgmt_frame_count: Option<u32>,
204    /// RSSI of the most recent packet received from the neighbor.
205    pub last_rssi_in: Option<i32>,
206    /// Average/typical RSSI of packets received from the neighbor.
207    pub avg_rssi_in: Option<i8>,
208    /// LQI of the most recent packet received from the neighbor.
209    ///
210    /// Value is between 1 and 255, with 1 being the worst possible
211    /// link quality (any worse and it would not have been decoded)
212    /// and 255 being perfect reception. All values in between
213    /// are a roughly linear (but not well defined) extrapolation
214    /// between these two extremes.
215    ///
216    /// Zero values must not be encoded, but if encountered should be
217    /// interpreted as if the LQI field were absent.
218    ///
219    /// In 802.15.4 networks, LQI is typically determined by the number of
220    /// "chip errors" when decoding the packets.
221    pub lqi_in: Option<u8>,
222    /// Thread Mode TLV. Only present on Thread networks.
223    ///
224    /// Defined by section 4.5.2 of the Thread 1.1.1 specification ("Mode TLV").
225    pub thread_mode: Option<u8>,
226    /// Frame error rate.
227    ///
228    /// `0xffff` indicates 100%, `0x0000` indicates 0%.
229    pub frame_error_rate: Option<u16>,
230    /// IPv6 message error rate.
231    ///
232    /// `0xffff` indicates 100%, `0x0000` indicates 0%.
233    pub ipv6_error_rate: Option<u16>,
234    /// True if the child is CSL synced.
235    ///
236    /// CSL is Coordinated Sampled Listening, a mechanism for sleepy devices
237    /// to perform indirect TX.
238    pub child_is_csl_synced: Option<bool>,
239    /// True if the child is restoring state.
240    pub child_is_state_restoring: Option<bool>,
241    /// Version of NetData that the neighbor has.
242    pub net_data_version: Option<u8>,
243    /// Number of messages queued for the neighbor.
244    pub queued_messages: Option<u16>,
245    /// MLE version for the neighbor.
246    pub thread_mle_version: Option<u8>,
247    #[doc(hidden)]
248    pub __source_breaking: fidl::marker::SourceBreaking,
249}
250
251impl fidl::Persistable for NeighborInfo {}
252
253mod internal {
254    use super::*;
255    unsafe impl fidl::encoding::TypeMarker for MacAddressFilterMode {
256        type Owned = Self;
257
258        #[inline(always)]
259        fn inline_align(_context: fidl::encoding::Context) -> usize {
260            std::mem::align_of::<i32>()
261        }
262
263        #[inline(always)]
264        fn inline_size(_context: fidl::encoding::Context) -> usize {
265            std::mem::size_of::<i32>()
266        }
267
268        #[inline(always)]
269        fn encode_is_copy() -> bool {
270            true
271        }
272
273        #[inline(always)]
274        fn decode_is_copy() -> bool {
275            false
276        }
277    }
278
279    impl fidl::encoding::ValueTypeMarker for MacAddressFilterMode {
280        type Borrowed<'a> = Self;
281        #[inline(always)]
282        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
283            *value
284        }
285    }
286
287    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
288        for MacAddressFilterMode
289    {
290        #[inline]
291        unsafe fn encode(
292            self,
293            encoder: &mut fidl::encoding::Encoder<'_, D>,
294            offset: usize,
295            _depth: fidl::encoding::Depth,
296        ) -> fidl::Result<()> {
297            encoder.debug_check_bounds::<Self>(offset);
298            encoder.write_num(self.into_primitive(), offset);
299            Ok(())
300        }
301    }
302
303    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MacAddressFilterMode {
304        #[inline(always)]
305        fn new_empty() -> Self {
306            Self::Disabled
307        }
308
309        #[inline]
310        unsafe fn decode(
311            &mut self,
312            decoder: &mut fidl::encoding::Decoder<'_, D>,
313            offset: usize,
314            _depth: fidl::encoding::Depth,
315        ) -> fidl::Result<()> {
316            decoder.debug_check_bounds::<Self>(offset);
317            let prim = decoder.read_num::<i32>(offset);
318
319            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
320            Ok(())
321        }
322    }
323
324    impl fidl::encoding::ValueTypeMarker for DeviceTestGetCurrentChannelResponse {
325        type Borrowed<'a> = &'a Self;
326        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
327            value
328        }
329    }
330
331    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetCurrentChannelResponse {
332        type Owned = Self;
333
334        #[inline(always)]
335        fn inline_align(_context: fidl::encoding::Context) -> usize {
336            2
337        }
338
339        #[inline(always)]
340        fn inline_size(_context: fidl::encoding::Context) -> usize {
341            2
342        }
343        #[inline(always)]
344        fn encode_is_copy() -> bool {
345            true
346        }
347
348        #[inline(always)]
349        fn decode_is_copy() -> bool {
350            true
351        }
352    }
353
354    unsafe impl<D: fidl::encoding::ResourceDialect>
355        fidl::encoding::Encode<DeviceTestGetCurrentChannelResponse, D>
356        for &DeviceTestGetCurrentChannelResponse
357    {
358        #[inline]
359        unsafe fn encode(
360            self,
361            encoder: &mut fidl::encoding::Encoder<'_, D>,
362            offset: usize,
363            _depth: fidl::encoding::Depth,
364        ) -> fidl::Result<()> {
365            encoder.debug_check_bounds::<DeviceTestGetCurrentChannelResponse>(offset);
366            unsafe {
367                // Copy the object into the buffer.
368                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
369                (buf_ptr as *mut DeviceTestGetCurrentChannelResponse)
370                    .write_unaligned((self as *const DeviceTestGetCurrentChannelResponse).read());
371                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
372                // done second because the memcpy will write garbage to these bytes.
373            }
374            Ok(())
375        }
376    }
377    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u16, D>>
378        fidl::encoding::Encode<DeviceTestGetCurrentChannelResponse, D> for (T0,)
379    {
380        #[inline]
381        unsafe fn encode(
382            self,
383            encoder: &mut fidl::encoding::Encoder<'_, D>,
384            offset: usize,
385            depth: fidl::encoding::Depth,
386        ) -> fidl::Result<()> {
387            encoder.debug_check_bounds::<DeviceTestGetCurrentChannelResponse>(offset);
388            // Zero out padding regions. There's no need to apply masks
389            // because the unmasked parts will be overwritten by fields.
390            // Write the fields.
391            self.0.encode(encoder, offset + 0, depth)?;
392            Ok(())
393        }
394    }
395
396    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
397        for DeviceTestGetCurrentChannelResponse
398    {
399        #[inline(always)]
400        fn new_empty() -> Self {
401            Self { channel_index: fidl::new_empty!(u16, D) }
402        }
403
404        #[inline]
405        unsafe fn decode(
406            &mut self,
407            decoder: &mut fidl::encoding::Decoder<'_, D>,
408            offset: usize,
409            _depth: fidl::encoding::Depth,
410        ) -> fidl::Result<()> {
411            decoder.debug_check_bounds::<Self>(offset);
412            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
413            // Verify that padding bytes are zero.
414            // Copy from the buffer into the object.
415            unsafe {
416                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 2);
417            }
418            Ok(())
419        }
420    }
421
422    impl fidl::encoding::ValueTypeMarker for DeviceTestGetCurrentMacAddressResponse {
423        type Borrowed<'a> = &'a Self;
424        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
425            value
426        }
427    }
428
429    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetCurrentMacAddressResponse {
430        type Owned = Self;
431
432        #[inline(always)]
433        fn inline_align(_context: fidl::encoding::Context) -> usize {
434            1
435        }
436
437        #[inline(always)]
438        fn inline_size(_context: fidl::encoding::Context) -> usize {
439            8
440        }
441    }
442
443    unsafe impl<D: fidl::encoding::ResourceDialect>
444        fidl::encoding::Encode<DeviceTestGetCurrentMacAddressResponse, D>
445        for &DeviceTestGetCurrentMacAddressResponse
446    {
447        #[inline]
448        unsafe fn encode(
449            self,
450            encoder: &mut fidl::encoding::Encoder<'_, D>,
451            offset: usize,
452            _depth: fidl::encoding::Depth,
453        ) -> fidl::Result<()> {
454            encoder.debug_check_bounds::<DeviceTestGetCurrentMacAddressResponse>(offset);
455            // Delegate to tuple encoding.
456            fidl::encoding::Encode::<DeviceTestGetCurrentMacAddressResponse, D>::encode(
457                (<fidl_fuchsia_lowpan::MacAddress as fidl::encoding::ValueTypeMarker>::borrow(
458                    &self.address,
459                ),),
460                encoder,
461                offset,
462                _depth,
463            )
464        }
465    }
466    unsafe impl<
467            D: fidl::encoding::ResourceDialect,
468            T0: fidl::encoding::Encode<fidl_fuchsia_lowpan::MacAddress, D>,
469        > fidl::encoding::Encode<DeviceTestGetCurrentMacAddressResponse, D> for (T0,)
470    {
471        #[inline]
472        unsafe fn encode(
473            self,
474            encoder: &mut fidl::encoding::Encoder<'_, D>,
475            offset: usize,
476            depth: fidl::encoding::Depth,
477        ) -> fidl::Result<()> {
478            encoder.debug_check_bounds::<DeviceTestGetCurrentMacAddressResponse>(offset);
479            // Zero out padding regions. There's no need to apply masks
480            // because the unmasked parts will be overwritten by fields.
481            // Write the fields.
482            self.0.encode(encoder, offset + 0, depth)?;
483            Ok(())
484        }
485    }
486
487    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
488        for DeviceTestGetCurrentMacAddressResponse
489    {
490        #[inline(always)]
491        fn new_empty() -> Self {
492            Self { address: fidl::new_empty!(fidl_fuchsia_lowpan::MacAddress, D) }
493        }
494
495        #[inline]
496        unsafe fn decode(
497            &mut self,
498            decoder: &mut fidl::encoding::Decoder<'_, D>,
499            offset: usize,
500            _depth: fidl::encoding::Depth,
501        ) -> fidl::Result<()> {
502            decoder.debug_check_bounds::<Self>(offset);
503            // Verify that padding bytes are zero.
504            fidl::decode!(
505                fidl_fuchsia_lowpan::MacAddress,
506                D,
507                &mut self.address,
508                decoder,
509                offset + 0,
510                _depth
511            )?;
512            Ok(())
513        }
514    }
515
516    impl fidl::encoding::ValueTypeMarker for DeviceTestGetCurrentRssiResponse {
517        type Borrowed<'a> = &'a Self;
518        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
519            value
520        }
521    }
522
523    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetCurrentRssiResponse {
524        type Owned = Self;
525
526        #[inline(always)]
527        fn inline_align(_context: fidl::encoding::Context) -> usize {
528            1
529        }
530
531        #[inline(always)]
532        fn inline_size(_context: fidl::encoding::Context) -> usize {
533            1
534        }
535        #[inline(always)]
536        fn encode_is_copy() -> bool {
537            true
538        }
539
540        #[inline(always)]
541        fn decode_is_copy() -> bool {
542            true
543        }
544    }
545
546    unsafe impl<D: fidl::encoding::ResourceDialect>
547        fidl::encoding::Encode<DeviceTestGetCurrentRssiResponse, D>
548        for &DeviceTestGetCurrentRssiResponse
549    {
550        #[inline]
551        unsafe fn encode(
552            self,
553            encoder: &mut fidl::encoding::Encoder<'_, D>,
554            offset: usize,
555            _depth: fidl::encoding::Depth,
556        ) -> fidl::Result<()> {
557            encoder.debug_check_bounds::<DeviceTestGetCurrentRssiResponse>(offset);
558            unsafe {
559                // Copy the object into the buffer.
560                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
561                (buf_ptr as *mut DeviceTestGetCurrentRssiResponse)
562                    .write_unaligned((self as *const DeviceTestGetCurrentRssiResponse).read());
563                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
564                // done second because the memcpy will write garbage to these bytes.
565            }
566            Ok(())
567        }
568    }
569    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i8, D>>
570        fidl::encoding::Encode<DeviceTestGetCurrentRssiResponse, D> for (T0,)
571    {
572        #[inline]
573        unsafe fn encode(
574            self,
575            encoder: &mut fidl::encoding::Encoder<'_, D>,
576            offset: usize,
577            depth: fidl::encoding::Depth,
578        ) -> fidl::Result<()> {
579            encoder.debug_check_bounds::<DeviceTestGetCurrentRssiResponse>(offset);
580            // Zero out padding regions. There's no need to apply masks
581            // because the unmasked parts will be overwritten by fields.
582            // Write the fields.
583            self.0.encode(encoder, offset + 0, depth)?;
584            Ok(())
585        }
586    }
587
588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
589        for DeviceTestGetCurrentRssiResponse
590    {
591        #[inline(always)]
592        fn new_empty() -> Self {
593            Self { rssi: fidl::new_empty!(i8, D) }
594        }
595
596        #[inline]
597        unsafe fn decode(
598            &mut self,
599            decoder: &mut fidl::encoding::Decoder<'_, D>,
600            offset: usize,
601            _depth: fidl::encoding::Depth,
602        ) -> fidl::Result<()> {
603            decoder.debug_check_bounds::<Self>(offset);
604            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
605            // Verify that padding bytes are zero.
606            // Copy from the buffer into the object.
607            unsafe {
608                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 1);
609            }
610            Ok(())
611        }
612    }
613
614    impl fidl::encoding::ValueTypeMarker for DeviceTestGetFactoryMacAddressResponse {
615        type Borrowed<'a> = &'a Self;
616        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
617            value
618        }
619    }
620
621    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetFactoryMacAddressResponse {
622        type Owned = Self;
623
624        #[inline(always)]
625        fn inline_align(_context: fidl::encoding::Context) -> usize {
626            1
627        }
628
629        #[inline(always)]
630        fn inline_size(_context: fidl::encoding::Context) -> usize {
631            8
632        }
633    }
634
635    unsafe impl<D: fidl::encoding::ResourceDialect>
636        fidl::encoding::Encode<DeviceTestGetFactoryMacAddressResponse, D>
637        for &DeviceTestGetFactoryMacAddressResponse
638    {
639        #[inline]
640        unsafe fn encode(
641            self,
642            encoder: &mut fidl::encoding::Encoder<'_, D>,
643            offset: usize,
644            _depth: fidl::encoding::Depth,
645        ) -> fidl::Result<()> {
646            encoder.debug_check_bounds::<DeviceTestGetFactoryMacAddressResponse>(offset);
647            // Delegate to tuple encoding.
648            fidl::encoding::Encode::<DeviceTestGetFactoryMacAddressResponse, D>::encode(
649                (<fidl_fuchsia_lowpan::MacAddress as fidl::encoding::ValueTypeMarker>::borrow(
650                    &self.address,
651                ),),
652                encoder,
653                offset,
654                _depth,
655            )
656        }
657    }
658    unsafe impl<
659            D: fidl::encoding::ResourceDialect,
660            T0: fidl::encoding::Encode<fidl_fuchsia_lowpan::MacAddress, D>,
661        > fidl::encoding::Encode<DeviceTestGetFactoryMacAddressResponse, D> for (T0,)
662    {
663        #[inline]
664        unsafe fn encode(
665            self,
666            encoder: &mut fidl::encoding::Encoder<'_, D>,
667            offset: usize,
668            depth: fidl::encoding::Depth,
669        ) -> fidl::Result<()> {
670            encoder.debug_check_bounds::<DeviceTestGetFactoryMacAddressResponse>(offset);
671            // Zero out padding regions. There's no need to apply masks
672            // because the unmasked parts will be overwritten by fields.
673            // Write the fields.
674            self.0.encode(encoder, offset + 0, depth)?;
675            Ok(())
676        }
677    }
678
679    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
680        for DeviceTestGetFactoryMacAddressResponse
681    {
682        #[inline(always)]
683        fn new_empty() -> Self {
684            Self { address: fidl::new_empty!(fidl_fuchsia_lowpan::MacAddress, D) }
685        }
686
687        #[inline]
688        unsafe fn decode(
689            &mut self,
690            decoder: &mut fidl::encoding::Decoder<'_, D>,
691            offset: usize,
692            _depth: fidl::encoding::Depth,
693        ) -> fidl::Result<()> {
694            decoder.debug_check_bounds::<Self>(offset);
695            // Verify that padding bytes are zero.
696            fidl::decode!(
697                fidl_fuchsia_lowpan::MacAddress,
698                D,
699                &mut self.address,
700                decoder,
701                offset + 0,
702                _depth
703            )?;
704            Ok(())
705        }
706    }
707
708    impl fidl::encoding::ValueTypeMarker for DeviceTestGetMacAddressFilterSettingsResponse {
709        type Borrowed<'a> = &'a Self;
710        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
711            value
712        }
713    }
714
715    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetMacAddressFilterSettingsResponse {
716        type Owned = Self;
717
718        #[inline(always)]
719        fn inline_align(_context: fidl::encoding::Context) -> usize {
720            8
721        }
722
723        #[inline(always)]
724        fn inline_size(_context: fidl::encoding::Context) -> usize {
725            16
726        }
727    }
728
729    unsafe impl<D: fidl::encoding::ResourceDialect>
730        fidl::encoding::Encode<DeviceTestGetMacAddressFilterSettingsResponse, D>
731        for &DeviceTestGetMacAddressFilterSettingsResponse
732    {
733        #[inline]
734        unsafe fn encode(
735            self,
736            encoder: &mut fidl::encoding::Encoder<'_, D>,
737            offset: usize,
738            _depth: fidl::encoding::Depth,
739        ) -> fidl::Result<()> {
740            encoder.debug_check_bounds::<DeviceTestGetMacAddressFilterSettingsResponse>(offset);
741            // Delegate to tuple encoding.
742            fidl::encoding::Encode::<DeviceTestGetMacAddressFilterSettingsResponse, D>::encode(
743                (<MacAddressFilterSettings as fidl::encoding::ValueTypeMarker>::borrow(
744                    &self.settings,
745                ),),
746                encoder,
747                offset,
748                _depth,
749            )
750        }
751    }
752    unsafe impl<
753            D: fidl::encoding::ResourceDialect,
754            T0: fidl::encoding::Encode<MacAddressFilterSettings, D>,
755        > fidl::encoding::Encode<DeviceTestGetMacAddressFilterSettingsResponse, D> for (T0,)
756    {
757        #[inline]
758        unsafe fn encode(
759            self,
760            encoder: &mut fidl::encoding::Encoder<'_, D>,
761            offset: usize,
762            depth: fidl::encoding::Depth,
763        ) -> fidl::Result<()> {
764            encoder.debug_check_bounds::<DeviceTestGetMacAddressFilterSettingsResponse>(offset);
765            // Zero out padding regions. There's no need to apply masks
766            // because the unmasked parts will be overwritten by fields.
767            // Write the fields.
768            self.0.encode(encoder, offset + 0, depth)?;
769            Ok(())
770        }
771    }
772
773    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
774        for DeviceTestGetMacAddressFilterSettingsResponse
775    {
776        #[inline(always)]
777        fn new_empty() -> Self {
778            Self { settings: fidl::new_empty!(MacAddressFilterSettings, D) }
779        }
780
781        #[inline]
782        unsafe fn decode(
783            &mut self,
784            decoder: &mut fidl::encoding::Decoder<'_, D>,
785            offset: usize,
786            _depth: fidl::encoding::Depth,
787        ) -> fidl::Result<()> {
788            decoder.debug_check_bounds::<Self>(offset);
789            // Verify that padding bytes are zero.
790            fidl::decode!(
791                MacAddressFilterSettings,
792                D,
793                &mut self.settings,
794                decoder,
795                offset + 0,
796                _depth
797            )?;
798            Ok(())
799        }
800    }
801
802    impl fidl::encoding::ValueTypeMarker for DeviceTestGetNcpVersionResponse {
803        type Borrowed<'a> = &'a Self;
804        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
805            value
806        }
807    }
808
809    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetNcpVersionResponse {
810        type Owned = Self;
811
812        #[inline(always)]
813        fn inline_align(_context: fidl::encoding::Context) -> usize {
814            8
815        }
816
817        #[inline(always)]
818        fn inline_size(_context: fidl::encoding::Context) -> usize {
819            16
820        }
821    }
822
823    unsafe impl<D: fidl::encoding::ResourceDialect>
824        fidl::encoding::Encode<DeviceTestGetNcpVersionResponse, D>
825        for &DeviceTestGetNcpVersionResponse
826    {
827        #[inline]
828        unsafe fn encode(
829            self,
830            encoder: &mut fidl::encoding::Encoder<'_, D>,
831            offset: usize,
832            _depth: fidl::encoding::Depth,
833        ) -> fidl::Result<()> {
834            encoder.debug_check_bounds::<DeviceTestGetNcpVersionResponse>(offset);
835            // Delegate to tuple encoding.
836            fidl::encoding::Encode::<DeviceTestGetNcpVersionResponse, D>::encode(
837                (<fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
838                    &self.version,
839                ),),
840                encoder,
841                offset,
842                _depth,
843            )
844        }
845    }
846    unsafe impl<
847            D: fidl::encoding::ResourceDialect,
848            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
849        > fidl::encoding::Encode<DeviceTestGetNcpVersionResponse, D> for (T0,)
850    {
851        #[inline]
852        unsafe fn encode(
853            self,
854            encoder: &mut fidl::encoding::Encoder<'_, D>,
855            offset: usize,
856            depth: fidl::encoding::Depth,
857        ) -> fidl::Result<()> {
858            encoder.debug_check_bounds::<DeviceTestGetNcpVersionResponse>(offset);
859            // Zero out padding regions. There's no need to apply masks
860            // because the unmasked parts will be overwritten by fields.
861            // Write the fields.
862            self.0.encode(encoder, offset + 0, depth)?;
863            Ok(())
864        }
865    }
866
867    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
868        for DeviceTestGetNcpVersionResponse
869    {
870        #[inline(always)]
871        fn new_empty() -> Self {
872            Self { version: fidl::new_empty!(fidl::encoding::BoundedString<256>, D) }
873        }
874
875        #[inline]
876        unsafe fn decode(
877            &mut self,
878            decoder: &mut fidl::encoding::Decoder<'_, D>,
879            offset: usize,
880            _depth: fidl::encoding::Depth,
881        ) -> fidl::Result<()> {
882            decoder.debug_check_bounds::<Self>(offset);
883            // Verify that padding bytes are zero.
884            fidl::decode!(
885                fidl::encoding::BoundedString<256>,
886                D,
887                &mut self.version,
888                decoder,
889                offset + 0,
890                _depth
891            )?;
892            Ok(())
893        }
894    }
895
896    impl fidl::encoding::ValueTypeMarker for DeviceTestGetNeighborTableResponse {
897        type Borrowed<'a> = &'a Self;
898        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
899            value
900        }
901    }
902
903    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetNeighborTableResponse {
904        type Owned = Self;
905
906        #[inline(always)]
907        fn inline_align(_context: fidl::encoding::Context) -> usize {
908            8
909        }
910
911        #[inline(always)]
912        fn inline_size(_context: fidl::encoding::Context) -> usize {
913            16
914        }
915    }
916
917    unsafe impl<D: fidl::encoding::ResourceDialect>
918        fidl::encoding::Encode<DeviceTestGetNeighborTableResponse, D>
919        for &DeviceTestGetNeighborTableResponse
920    {
921        #[inline]
922        unsafe fn encode(
923            self,
924            encoder: &mut fidl::encoding::Encoder<'_, D>,
925            offset: usize,
926            _depth: fidl::encoding::Depth,
927        ) -> fidl::Result<()> {
928            encoder.debug_check_bounds::<DeviceTestGetNeighborTableResponse>(offset);
929            // Delegate to tuple encoding.
930            fidl::encoding::Encode::<DeviceTestGetNeighborTableResponse, D>::encode(
931                (
932                    <fidl::encoding::Vector<NeighborInfo, 1024> as fidl::encoding::ValueTypeMarker>::borrow(&self.neighbor_table),
933                ),
934                encoder, offset, _depth
935            )
936        }
937    }
938    unsafe impl<
939            D: fidl::encoding::ResourceDialect,
940            T0: fidl::encoding::Encode<fidl::encoding::Vector<NeighborInfo, 1024>, D>,
941        > fidl::encoding::Encode<DeviceTestGetNeighborTableResponse, D> for (T0,)
942    {
943        #[inline]
944        unsafe fn encode(
945            self,
946            encoder: &mut fidl::encoding::Encoder<'_, D>,
947            offset: usize,
948            depth: fidl::encoding::Depth,
949        ) -> fidl::Result<()> {
950            encoder.debug_check_bounds::<DeviceTestGetNeighborTableResponse>(offset);
951            // Zero out padding regions. There's no need to apply masks
952            // because the unmasked parts will be overwritten by fields.
953            // Write the fields.
954            self.0.encode(encoder, offset + 0, depth)?;
955            Ok(())
956        }
957    }
958
959    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
960        for DeviceTestGetNeighborTableResponse
961    {
962        #[inline(always)]
963        fn new_empty() -> Self {
964            Self { neighbor_table: fidl::new_empty!(fidl::encoding::Vector<NeighborInfo, 1024>, D) }
965        }
966
967        #[inline]
968        unsafe fn decode(
969            &mut self,
970            decoder: &mut fidl::encoding::Decoder<'_, D>,
971            offset: usize,
972            _depth: fidl::encoding::Depth,
973        ) -> fidl::Result<()> {
974            decoder.debug_check_bounds::<Self>(offset);
975            // Verify that padding bytes are zero.
976            fidl::decode!(fidl::encoding::Vector<NeighborInfo, 1024>, D, &mut self.neighbor_table, decoder, offset + 0, _depth)?;
977            Ok(())
978        }
979    }
980
981    impl fidl::encoding::ValueTypeMarker for DeviceTestGetPartitionIdResponse {
982        type Borrowed<'a> = &'a Self;
983        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
984            value
985        }
986    }
987
988    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetPartitionIdResponse {
989        type Owned = Self;
990
991        #[inline(always)]
992        fn inline_align(_context: fidl::encoding::Context) -> usize {
993            4
994        }
995
996        #[inline(always)]
997        fn inline_size(_context: fidl::encoding::Context) -> usize {
998            4
999        }
1000        #[inline(always)]
1001        fn encode_is_copy() -> bool {
1002            true
1003        }
1004
1005        #[inline(always)]
1006        fn decode_is_copy() -> bool {
1007            true
1008        }
1009    }
1010
1011    unsafe impl<D: fidl::encoding::ResourceDialect>
1012        fidl::encoding::Encode<DeviceTestGetPartitionIdResponse, D>
1013        for &DeviceTestGetPartitionIdResponse
1014    {
1015        #[inline]
1016        unsafe fn encode(
1017            self,
1018            encoder: &mut fidl::encoding::Encoder<'_, D>,
1019            offset: usize,
1020            _depth: fidl::encoding::Depth,
1021        ) -> fidl::Result<()> {
1022            encoder.debug_check_bounds::<DeviceTestGetPartitionIdResponse>(offset);
1023            unsafe {
1024                // Copy the object into the buffer.
1025                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1026                (buf_ptr as *mut DeviceTestGetPartitionIdResponse)
1027                    .write_unaligned((self as *const DeviceTestGetPartitionIdResponse).read());
1028                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1029                // done second because the memcpy will write garbage to these bytes.
1030            }
1031            Ok(())
1032        }
1033    }
1034    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1035        fidl::encoding::Encode<DeviceTestGetPartitionIdResponse, D> for (T0,)
1036    {
1037        #[inline]
1038        unsafe fn encode(
1039            self,
1040            encoder: &mut fidl::encoding::Encoder<'_, D>,
1041            offset: usize,
1042            depth: fidl::encoding::Depth,
1043        ) -> fidl::Result<()> {
1044            encoder.debug_check_bounds::<DeviceTestGetPartitionIdResponse>(offset);
1045            // Zero out padding regions. There's no need to apply masks
1046            // because the unmasked parts will be overwritten by fields.
1047            // Write the fields.
1048            self.0.encode(encoder, offset + 0, depth)?;
1049            Ok(())
1050        }
1051    }
1052
1053    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1054        for DeviceTestGetPartitionIdResponse
1055    {
1056        #[inline(always)]
1057        fn new_empty() -> Self {
1058            Self { pid: fidl::new_empty!(u32, D) }
1059        }
1060
1061        #[inline]
1062        unsafe fn decode(
1063            &mut self,
1064            decoder: &mut fidl::encoding::Decoder<'_, D>,
1065            offset: usize,
1066            _depth: fidl::encoding::Depth,
1067        ) -> fidl::Result<()> {
1068            decoder.debug_check_bounds::<Self>(offset);
1069            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1070            // Verify that padding bytes are zero.
1071            // Copy from the buffer into the object.
1072            unsafe {
1073                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1074            }
1075            Ok(())
1076        }
1077    }
1078
1079    impl fidl::encoding::ValueTypeMarker for DeviceTestGetThreadRloc16Response {
1080        type Borrowed<'a> = &'a Self;
1081        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1082            value
1083        }
1084    }
1085
1086    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetThreadRloc16Response {
1087        type Owned = Self;
1088
1089        #[inline(always)]
1090        fn inline_align(_context: fidl::encoding::Context) -> usize {
1091            2
1092        }
1093
1094        #[inline(always)]
1095        fn inline_size(_context: fidl::encoding::Context) -> usize {
1096            2
1097        }
1098        #[inline(always)]
1099        fn encode_is_copy() -> bool {
1100            true
1101        }
1102
1103        #[inline(always)]
1104        fn decode_is_copy() -> bool {
1105            true
1106        }
1107    }
1108
1109    unsafe impl<D: fidl::encoding::ResourceDialect>
1110        fidl::encoding::Encode<DeviceTestGetThreadRloc16Response, D>
1111        for &DeviceTestGetThreadRloc16Response
1112    {
1113        #[inline]
1114        unsafe fn encode(
1115            self,
1116            encoder: &mut fidl::encoding::Encoder<'_, D>,
1117            offset: usize,
1118            _depth: fidl::encoding::Depth,
1119        ) -> fidl::Result<()> {
1120            encoder.debug_check_bounds::<DeviceTestGetThreadRloc16Response>(offset);
1121            unsafe {
1122                // Copy the object into the buffer.
1123                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1124                (buf_ptr as *mut DeviceTestGetThreadRloc16Response)
1125                    .write_unaligned((self as *const DeviceTestGetThreadRloc16Response).read());
1126                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1127                // done second because the memcpy will write garbage to these bytes.
1128            }
1129            Ok(())
1130        }
1131    }
1132    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u16, D>>
1133        fidl::encoding::Encode<DeviceTestGetThreadRloc16Response, D> for (T0,)
1134    {
1135        #[inline]
1136        unsafe fn encode(
1137            self,
1138            encoder: &mut fidl::encoding::Encoder<'_, D>,
1139            offset: usize,
1140            depth: fidl::encoding::Depth,
1141        ) -> fidl::Result<()> {
1142            encoder.debug_check_bounds::<DeviceTestGetThreadRloc16Response>(offset);
1143            // Zero out padding regions. There's no need to apply masks
1144            // because the unmasked parts will be overwritten by fields.
1145            // Write the fields.
1146            self.0.encode(encoder, offset + 0, depth)?;
1147            Ok(())
1148        }
1149    }
1150
1151    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1152        for DeviceTestGetThreadRloc16Response
1153    {
1154        #[inline(always)]
1155        fn new_empty() -> Self {
1156            Self { rloc: fidl::new_empty!(u16, D) }
1157        }
1158
1159        #[inline]
1160        unsafe fn decode(
1161            &mut self,
1162            decoder: &mut fidl::encoding::Decoder<'_, D>,
1163            offset: usize,
1164            _depth: fidl::encoding::Depth,
1165        ) -> fidl::Result<()> {
1166            decoder.debug_check_bounds::<Self>(offset);
1167            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1168            // Verify that padding bytes are zero.
1169            // Copy from the buffer into the object.
1170            unsafe {
1171                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 2);
1172            }
1173            Ok(())
1174        }
1175    }
1176
1177    impl fidl::encoding::ValueTypeMarker for DeviceTestGetThreadRouterIdResponse {
1178        type Borrowed<'a> = &'a Self;
1179        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1180            value
1181        }
1182    }
1183
1184    unsafe impl fidl::encoding::TypeMarker for DeviceTestGetThreadRouterIdResponse {
1185        type Owned = Self;
1186
1187        #[inline(always)]
1188        fn inline_align(_context: fidl::encoding::Context) -> usize {
1189            1
1190        }
1191
1192        #[inline(always)]
1193        fn inline_size(_context: fidl::encoding::Context) -> usize {
1194            1
1195        }
1196        #[inline(always)]
1197        fn encode_is_copy() -> bool {
1198            true
1199        }
1200
1201        #[inline(always)]
1202        fn decode_is_copy() -> bool {
1203            true
1204        }
1205    }
1206
1207    unsafe impl<D: fidl::encoding::ResourceDialect>
1208        fidl::encoding::Encode<DeviceTestGetThreadRouterIdResponse, D>
1209        for &DeviceTestGetThreadRouterIdResponse
1210    {
1211        #[inline]
1212        unsafe fn encode(
1213            self,
1214            encoder: &mut fidl::encoding::Encoder<'_, D>,
1215            offset: usize,
1216            _depth: fidl::encoding::Depth,
1217        ) -> fidl::Result<()> {
1218            encoder.debug_check_bounds::<DeviceTestGetThreadRouterIdResponse>(offset);
1219            unsafe {
1220                // Copy the object into the buffer.
1221                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1222                (buf_ptr as *mut DeviceTestGetThreadRouterIdResponse)
1223                    .write_unaligned((self as *const DeviceTestGetThreadRouterIdResponse).read());
1224                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1225                // done second because the memcpy will write garbage to these bytes.
1226            }
1227            Ok(())
1228        }
1229    }
1230    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u8, D>>
1231        fidl::encoding::Encode<DeviceTestGetThreadRouterIdResponse, D> for (T0,)
1232    {
1233        #[inline]
1234        unsafe fn encode(
1235            self,
1236            encoder: &mut fidl::encoding::Encoder<'_, D>,
1237            offset: usize,
1238            depth: fidl::encoding::Depth,
1239        ) -> fidl::Result<()> {
1240            encoder.debug_check_bounds::<DeviceTestGetThreadRouterIdResponse>(offset);
1241            // Zero out padding regions. There's no need to apply masks
1242            // because the unmasked parts will be overwritten by fields.
1243            // Write the fields.
1244            self.0.encode(encoder, offset + 0, depth)?;
1245            Ok(())
1246        }
1247    }
1248
1249    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1250        for DeviceTestGetThreadRouterIdResponse
1251    {
1252        #[inline(always)]
1253        fn new_empty() -> Self {
1254            Self { router_id: fidl::new_empty!(u8, D) }
1255        }
1256
1257        #[inline]
1258        unsafe fn decode(
1259            &mut self,
1260            decoder: &mut fidl::encoding::Decoder<'_, D>,
1261            offset: usize,
1262            _depth: fidl::encoding::Depth,
1263        ) -> fidl::Result<()> {
1264            decoder.debug_check_bounds::<Self>(offset);
1265            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1266            // Verify that padding bytes are zero.
1267            // Copy from the buffer into the object.
1268            unsafe {
1269                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 1);
1270            }
1271            Ok(())
1272        }
1273    }
1274
1275    impl fidl::encoding::ValueTypeMarker for DeviceTestReplaceMacAddressFilterSettingsRequest {
1276        type Borrowed<'a> = &'a Self;
1277        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1278            value
1279        }
1280    }
1281
1282    unsafe impl fidl::encoding::TypeMarker for DeviceTestReplaceMacAddressFilterSettingsRequest {
1283        type Owned = Self;
1284
1285        #[inline(always)]
1286        fn inline_align(_context: fidl::encoding::Context) -> usize {
1287            8
1288        }
1289
1290        #[inline(always)]
1291        fn inline_size(_context: fidl::encoding::Context) -> usize {
1292            16
1293        }
1294    }
1295
1296    unsafe impl<D: fidl::encoding::ResourceDialect>
1297        fidl::encoding::Encode<DeviceTestReplaceMacAddressFilterSettingsRequest, D>
1298        for &DeviceTestReplaceMacAddressFilterSettingsRequest
1299    {
1300        #[inline]
1301        unsafe fn encode(
1302            self,
1303            encoder: &mut fidl::encoding::Encoder<'_, D>,
1304            offset: usize,
1305            _depth: fidl::encoding::Depth,
1306        ) -> fidl::Result<()> {
1307            encoder.debug_check_bounds::<DeviceTestReplaceMacAddressFilterSettingsRequest>(offset);
1308            // Delegate to tuple encoding.
1309            fidl::encoding::Encode::<DeviceTestReplaceMacAddressFilterSettingsRequest, D>::encode(
1310                (<MacAddressFilterSettings as fidl::encoding::ValueTypeMarker>::borrow(
1311                    &self.settings,
1312                ),),
1313                encoder,
1314                offset,
1315                _depth,
1316            )
1317        }
1318    }
1319    unsafe impl<
1320            D: fidl::encoding::ResourceDialect,
1321            T0: fidl::encoding::Encode<MacAddressFilterSettings, D>,
1322        > fidl::encoding::Encode<DeviceTestReplaceMacAddressFilterSettingsRequest, D> for (T0,)
1323    {
1324        #[inline]
1325        unsafe fn encode(
1326            self,
1327            encoder: &mut fidl::encoding::Encoder<'_, D>,
1328            offset: usize,
1329            depth: fidl::encoding::Depth,
1330        ) -> fidl::Result<()> {
1331            encoder.debug_check_bounds::<DeviceTestReplaceMacAddressFilterSettingsRequest>(offset);
1332            // Zero out padding regions. There's no need to apply masks
1333            // because the unmasked parts will be overwritten by fields.
1334            // Write the fields.
1335            self.0.encode(encoder, offset + 0, depth)?;
1336            Ok(())
1337        }
1338    }
1339
1340    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1341        for DeviceTestReplaceMacAddressFilterSettingsRequest
1342    {
1343        #[inline(always)]
1344        fn new_empty() -> Self {
1345            Self { settings: fidl::new_empty!(MacAddressFilterSettings, D) }
1346        }
1347
1348        #[inline]
1349        unsafe fn decode(
1350            &mut self,
1351            decoder: &mut fidl::encoding::Decoder<'_, D>,
1352            offset: usize,
1353            _depth: fidl::encoding::Depth,
1354        ) -> fidl::Result<()> {
1355            decoder.debug_check_bounds::<Self>(offset);
1356            // Verify that padding bytes are zero.
1357            fidl::decode!(
1358                MacAddressFilterSettings,
1359                D,
1360                &mut self.settings,
1361                decoder,
1362                offset + 0,
1363                _depth
1364            )?;
1365            Ok(())
1366        }
1367    }
1368
1369    impl MacAddressFilterItem {
1370        #[inline(always)]
1371        fn max_ordinal_present(&self) -> u64 {
1372            if let Some(_) = self.rssi {
1373                return 2;
1374            }
1375            if let Some(_) = self.mac_address {
1376                return 1;
1377            }
1378            0
1379        }
1380    }
1381
1382    impl fidl::encoding::ValueTypeMarker for MacAddressFilterItem {
1383        type Borrowed<'a> = &'a Self;
1384        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1385            value
1386        }
1387    }
1388
1389    unsafe impl fidl::encoding::TypeMarker for MacAddressFilterItem {
1390        type Owned = Self;
1391
1392        #[inline(always)]
1393        fn inline_align(_context: fidl::encoding::Context) -> usize {
1394            8
1395        }
1396
1397        #[inline(always)]
1398        fn inline_size(_context: fidl::encoding::Context) -> usize {
1399            16
1400        }
1401    }
1402
1403    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MacAddressFilterItem, D>
1404        for &MacAddressFilterItem
1405    {
1406        unsafe fn encode(
1407            self,
1408            encoder: &mut fidl::encoding::Encoder<'_, D>,
1409            offset: usize,
1410            mut depth: fidl::encoding::Depth,
1411        ) -> fidl::Result<()> {
1412            encoder.debug_check_bounds::<MacAddressFilterItem>(offset);
1413            // Vector header
1414            let max_ordinal: u64 = self.max_ordinal_present();
1415            encoder.write_num(max_ordinal, offset);
1416            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1417            // Calling encoder.out_of_line_offset(0) is not allowed.
1418            if max_ordinal == 0 {
1419                return Ok(());
1420            }
1421            depth.increment()?;
1422            let envelope_size = 8;
1423            let bytes_len = max_ordinal as usize * envelope_size;
1424            #[allow(unused_variables)]
1425            let offset = encoder.out_of_line_offset(bytes_len);
1426            let mut _prev_end_offset: usize = 0;
1427            if 1 > max_ordinal {
1428                return Ok(());
1429            }
1430
1431            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1432            // are envelope_size bytes.
1433            let cur_offset: usize = (1 - 1) * envelope_size;
1434
1435            // Zero reserved fields.
1436            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1437
1438            // Safety:
1439            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1440            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1441            //   envelope_size bytes, there is always sufficient room.
1442            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan::MacAddress, D>(
1443                self.mac_address.as_ref().map(
1444                    <fidl_fuchsia_lowpan::MacAddress as fidl::encoding::ValueTypeMarker>::borrow,
1445                ),
1446                encoder,
1447                offset + cur_offset,
1448                depth,
1449            )?;
1450
1451            _prev_end_offset = cur_offset + envelope_size;
1452            if 2 > max_ordinal {
1453                return Ok(());
1454            }
1455
1456            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1457            // are envelope_size bytes.
1458            let cur_offset: usize = (2 - 1) * envelope_size;
1459
1460            // Zero reserved fields.
1461            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1462
1463            // Safety:
1464            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1465            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1466            //   envelope_size bytes, there is always sufficient room.
1467            fidl::encoding::encode_in_envelope_optional::<i8, D>(
1468                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
1469                encoder,
1470                offset + cur_offset,
1471                depth,
1472            )?;
1473
1474            _prev_end_offset = cur_offset + envelope_size;
1475
1476            Ok(())
1477        }
1478    }
1479
1480    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MacAddressFilterItem {
1481        #[inline(always)]
1482        fn new_empty() -> Self {
1483            Self::default()
1484        }
1485
1486        unsafe fn decode(
1487            &mut self,
1488            decoder: &mut fidl::encoding::Decoder<'_, D>,
1489            offset: usize,
1490            mut depth: fidl::encoding::Depth,
1491        ) -> fidl::Result<()> {
1492            decoder.debug_check_bounds::<Self>(offset);
1493            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1494                None => return Err(fidl::Error::NotNullable),
1495                Some(len) => len,
1496            };
1497            // Calling decoder.out_of_line_offset(0) is not allowed.
1498            if len == 0 {
1499                return Ok(());
1500            };
1501            depth.increment()?;
1502            let envelope_size = 8;
1503            let bytes_len = len * envelope_size;
1504            let offset = decoder.out_of_line_offset(bytes_len)?;
1505            // Decode the envelope for each type.
1506            let mut _next_ordinal_to_read = 0;
1507            let mut next_offset = offset;
1508            let end_offset = offset + bytes_len;
1509            _next_ordinal_to_read += 1;
1510            if next_offset >= end_offset {
1511                return Ok(());
1512            }
1513
1514            // Decode unknown envelopes for gaps in ordinals.
1515            while _next_ordinal_to_read < 1 {
1516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1517                _next_ordinal_to_read += 1;
1518                next_offset += envelope_size;
1519            }
1520
1521            let next_out_of_line = decoder.next_out_of_line();
1522            let handles_before = decoder.remaining_handles();
1523            if let Some((inlined, num_bytes, num_handles)) =
1524                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1525            {
1526                let member_inline_size =
1527                    <fidl_fuchsia_lowpan::MacAddress as fidl::encoding::TypeMarker>::inline_size(
1528                        decoder.context,
1529                    );
1530                if inlined != (member_inline_size <= 4) {
1531                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1532                }
1533                let inner_offset;
1534                let mut inner_depth = depth.clone();
1535                if inlined {
1536                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1537                    inner_offset = next_offset;
1538                } else {
1539                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1540                    inner_depth.increment()?;
1541                }
1542                let val_ref = self
1543                    .mac_address
1544                    .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_lowpan::MacAddress, D));
1545                fidl::decode!(
1546                    fidl_fuchsia_lowpan::MacAddress,
1547                    D,
1548                    val_ref,
1549                    decoder,
1550                    inner_offset,
1551                    inner_depth
1552                )?;
1553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1554                {
1555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1556                }
1557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1559                }
1560            }
1561
1562            next_offset += envelope_size;
1563            _next_ordinal_to_read += 1;
1564            if next_offset >= end_offset {
1565                return Ok(());
1566            }
1567
1568            // Decode unknown envelopes for gaps in ordinals.
1569            while _next_ordinal_to_read < 2 {
1570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1571                _next_ordinal_to_read += 1;
1572                next_offset += envelope_size;
1573            }
1574
1575            let next_out_of_line = decoder.next_out_of_line();
1576            let handles_before = decoder.remaining_handles();
1577            if let Some((inlined, num_bytes, num_handles)) =
1578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1579            {
1580                let member_inline_size =
1581                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1582                if inlined != (member_inline_size <= 4) {
1583                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1584                }
1585                let inner_offset;
1586                let mut inner_depth = depth.clone();
1587                if inlined {
1588                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1589                    inner_offset = next_offset;
1590                } else {
1591                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1592                    inner_depth.increment()?;
1593                }
1594                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
1595                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
1596                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1597                {
1598                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1599                }
1600                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1601                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1602                }
1603            }
1604
1605            next_offset += envelope_size;
1606
1607            // Decode the remaining unknown envelopes.
1608            while next_offset < end_offset {
1609                _next_ordinal_to_read += 1;
1610                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1611                next_offset += envelope_size;
1612            }
1613
1614            Ok(())
1615        }
1616    }
1617
1618    impl MacAddressFilterSettings {
1619        #[inline(always)]
1620        fn max_ordinal_present(&self) -> u64 {
1621            if let Some(_) = self.items {
1622                return 2;
1623            }
1624            if let Some(_) = self.mode {
1625                return 1;
1626            }
1627            0
1628        }
1629    }
1630
1631    impl fidl::encoding::ValueTypeMarker for MacAddressFilterSettings {
1632        type Borrowed<'a> = &'a Self;
1633        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1634            value
1635        }
1636    }
1637
1638    unsafe impl fidl::encoding::TypeMarker for MacAddressFilterSettings {
1639        type Owned = Self;
1640
1641        #[inline(always)]
1642        fn inline_align(_context: fidl::encoding::Context) -> usize {
1643            8
1644        }
1645
1646        #[inline(always)]
1647        fn inline_size(_context: fidl::encoding::Context) -> usize {
1648            16
1649        }
1650    }
1651
1652    unsafe impl<D: fidl::encoding::ResourceDialect>
1653        fidl::encoding::Encode<MacAddressFilterSettings, D> for &MacAddressFilterSettings
1654    {
1655        unsafe fn encode(
1656            self,
1657            encoder: &mut fidl::encoding::Encoder<'_, D>,
1658            offset: usize,
1659            mut depth: fidl::encoding::Depth,
1660        ) -> fidl::Result<()> {
1661            encoder.debug_check_bounds::<MacAddressFilterSettings>(offset);
1662            // Vector header
1663            let max_ordinal: u64 = self.max_ordinal_present();
1664            encoder.write_num(max_ordinal, offset);
1665            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1666            // Calling encoder.out_of_line_offset(0) is not allowed.
1667            if max_ordinal == 0 {
1668                return Ok(());
1669            }
1670            depth.increment()?;
1671            let envelope_size = 8;
1672            let bytes_len = max_ordinal as usize * envelope_size;
1673            #[allow(unused_variables)]
1674            let offset = encoder.out_of_line_offset(bytes_len);
1675            let mut _prev_end_offset: usize = 0;
1676            if 1 > max_ordinal {
1677                return Ok(());
1678            }
1679
1680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1681            // are envelope_size bytes.
1682            let cur_offset: usize = (1 - 1) * envelope_size;
1683
1684            // Zero reserved fields.
1685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1686
1687            // Safety:
1688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1690            //   envelope_size bytes, there is always sufficient room.
1691            fidl::encoding::encode_in_envelope_optional::<MacAddressFilterMode, D>(
1692                self.mode
1693                    .as_ref()
1694                    .map(<MacAddressFilterMode as fidl::encoding::ValueTypeMarker>::borrow),
1695                encoder,
1696                offset + cur_offset,
1697                depth,
1698            )?;
1699
1700            _prev_end_offset = cur_offset + envelope_size;
1701            if 2 > max_ordinal {
1702                return Ok(());
1703            }
1704
1705            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1706            // are envelope_size bytes.
1707            let cur_offset: usize = (2 - 1) * envelope_size;
1708
1709            // Zero reserved fields.
1710            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1711
1712            // Safety:
1713            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1714            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1715            //   envelope_size bytes, there is always sufficient room.
1716            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<MacAddressFilterItem, 100>, D>(
1717            self.items.as_ref().map(<fidl::encoding::Vector<MacAddressFilterItem, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1718            encoder, offset + cur_offset, depth
1719        )?;
1720
1721            _prev_end_offset = cur_offset + envelope_size;
1722
1723            Ok(())
1724        }
1725    }
1726
1727    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1728        for MacAddressFilterSettings
1729    {
1730        #[inline(always)]
1731        fn new_empty() -> Self {
1732            Self::default()
1733        }
1734
1735        unsafe fn decode(
1736            &mut self,
1737            decoder: &mut fidl::encoding::Decoder<'_, D>,
1738            offset: usize,
1739            mut depth: fidl::encoding::Depth,
1740        ) -> fidl::Result<()> {
1741            decoder.debug_check_bounds::<Self>(offset);
1742            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1743                None => return Err(fidl::Error::NotNullable),
1744                Some(len) => len,
1745            };
1746            // Calling decoder.out_of_line_offset(0) is not allowed.
1747            if len == 0 {
1748                return Ok(());
1749            };
1750            depth.increment()?;
1751            let envelope_size = 8;
1752            let bytes_len = len * envelope_size;
1753            let offset = decoder.out_of_line_offset(bytes_len)?;
1754            // Decode the envelope for each type.
1755            let mut _next_ordinal_to_read = 0;
1756            let mut next_offset = offset;
1757            let end_offset = offset + bytes_len;
1758            _next_ordinal_to_read += 1;
1759            if next_offset >= end_offset {
1760                return Ok(());
1761            }
1762
1763            // Decode unknown envelopes for gaps in ordinals.
1764            while _next_ordinal_to_read < 1 {
1765                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1766                _next_ordinal_to_read += 1;
1767                next_offset += envelope_size;
1768            }
1769
1770            let next_out_of_line = decoder.next_out_of_line();
1771            let handles_before = decoder.remaining_handles();
1772            if let Some((inlined, num_bytes, num_handles)) =
1773                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1774            {
1775                let member_inline_size =
1776                    <MacAddressFilterMode 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 =
1792                    self.mode.get_or_insert_with(|| fidl::new_empty!(MacAddressFilterMode, D));
1793                fidl::decode!(
1794                    MacAddressFilterMode,
1795                    D,
1796                    val_ref,
1797                    decoder,
1798                    inner_offset,
1799                    inner_depth
1800                )?;
1801                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1802                {
1803                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1804                }
1805                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1806                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1807                }
1808            }
1809
1810            next_offset += envelope_size;
1811            _next_ordinal_to_read += 1;
1812            if next_offset >= end_offset {
1813                return Ok(());
1814            }
1815
1816            // Decode unknown envelopes for gaps in ordinals.
1817            while _next_ordinal_to_read < 2 {
1818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1819                _next_ordinal_to_read += 1;
1820                next_offset += envelope_size;
1821            }
1822
1823            let next_out_of_line = decoder.next_out_of_line();
1824            let handles_before = decoder.remaining_handles();
1825            if let Some((inlined, num_bytes, num_handles)) =
1826                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1827            {
1828                let member_inline_size = <fidl::encoding::Vector<MacAddressFilterItem, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1829                if inlined != (member_inline_size <= 4) {
1830                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1831                }
1832                let inner_offset;
1833                let mut inner_depth = depth.clone();
1834                if inlined {
1835                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1836                    inner_offset = next_offset;
1837                } else {
1838                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1839                    inner_depth.increment()?;
1840                }
1841                let val_ref = self.items.get_or_insert_with(
1842                    || fidl::new_empty!(fidl::encoding::Vector<MacAddressFilterItem, 100>, D),
1843                );
1844                fidl::decode!(fidl::encoding::Vector<MacAddressFilterItem, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1845                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1846                {
1847                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1848                }
1849                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1850                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1851                }
1852            }
1853
1854            next_offset += envelope_size;
1855
1856            // Decode the remaining unknown envelopes.
1857            while next_offset < end_offset {
1858                _next_ordinal_to_read += 1;
1859                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1860                next_offset += envelope_size;
1861            }
1862
1863            Ok(())
1864        }
1865    }
1866
1867    impl NeighborInfo {
1868        #[inline(always)]
1869        fn max_ordinal_present(&self) -> u64 {
1870            if let Some(_) = self.thread_mle_version {
1871                return 17;
1872            }
1873            if let Some(_) = self.queued_messages {
1874                return 16;
1875            }
1876            if let Some(_) = self.net_data_version {
1877                return 15;
1878            }
1879            if let Some(_) = self.child_is_state_restoring {
1880                return 14;
1881            }
1882            if let Some(_) = self.child_is_csl_synced {
1883                return 13;
1884            }
1885            if let Some(_) = self.ipv6_error_rate {
1886                return 12;
1887            }
1888            if let Some(_) = self.frame_error_rate {
1889                return 11;
1890            }
1891            if let Some(_) = self.thread_mode {
1892                return 10;
1893            }
1894            if let Some(_) = self.lqi_in {
1895                return 9;
1896            }
1897            if let Some(_) = self.avg_rssi_in {
1898                return 8;
1899            }
1900            if let Some(_) = self.last_rssi_in {
1901                return 7;
1902            }
1903            if let Some(_) = self.mgmt_frame_count {
1904                return 6;
1905            }
1906            if let Some(_) = self.link_frame_count {
1907                return 5;
1908            }
1909            if let Some(_) = self.is_child {
1910                return 4;
1911            }
1912            if let Some(_) = self.age {
1913                return 3;
1914            }
1915            if let Some(_) = self.short_address {
1916                return 2;
1917            }
1918            if let Some(_) = self.mac_address {
1919                return 1;
1920            }
1921            0
1922        }
1923    }
1924
1925    impl fidl::encoding::ValueTypeMarker for NeighborInfo {
1926        type Borrowed<'a> = &'a Self;
1927        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1928            value
1929        }
1930    }
1931
1932    unsafe impl fidl::encoding::TypeMarker for NeighborInfo {
1933        type Owned = Self;
1934
1935        #[inline(always)]
1936        fn inline_align(_context: fidl::encoding::Context) -> usize {
1937            8
1938        }
1939
1940        #[inline(always)]
1941        fn inline_size(_context: fidl::encoding::Context) -> usize {
1942            16
1943        }
1944    }
1945
1946    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NeighborInfo, D>
1947        for &NeighborInfo
1948    {
1949        unsafe fn encode(
1950            self,
1951            encoder: &mut fidl::encoding::Encoder<'_, D>,
1952            offset: usize,
1953            mut depth: fidl::encoding::Depth,
1954        ) -> fidl::Result<()> {
1955            encoder.debug_check_bounds::<NeighborInfo>(offset);
1956            // Vector header
1957            let max_ordinal: u64 = self.max_ordinal_present();
1958            encoder.write_num(max_ordinal, offset);
1959            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1960            // Calling encoder.out_of_line_offset(0) is not allowed.
1961            if max_ordinal == 0 {
1962                return Ok(());
1963            }
1964            depth.increment()?;
1965            let envelope_size = 8;
1966            let bytes_len = max_ordinal as usize * envelope_size;
1967            #[allow(unused_variables)]
1968            let offset = encoder.out_of_line_offset(bytes_len);
1969            let mut _prev_end_offset: usize = 0;
1970            if 1 > max_ordinal {
1971                return Ok(());
1972            }
1973
1974            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1975            // are envelope_size bytes.
1976            let cur_offset: usize = (1 - 1) * envelope_size;
1977
1978            // Zero reserved fields.
1979            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1980
1981            // Safety:
1982            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1983            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1984            //   envelope_size bytes, there is always sufficient room.
1985            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_lowpan::MacAddress, D>(
1986                self.mac_address.as_ref().map(
1987                    <fidl_fuchsia_lowpan::MacAddress as fidl::encoding::ValueTypeMarker>::borrow,
1988                ),
1989                encoder,
1990                offset + cur_offset,
1991                depth,
1992            )?;
1993
1994            _prev_end_offset = cur_offset + envelope_size;
1995            if 2 > max_ordinal {
1996                return Ok(());
1997            }
1998
1999            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2000            // are envelope_size bytes.
2001            let cur_offset: usize = (2 - 1) * envelope_size;
2002
2003            // Zero reserved fields.
2004            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2005
2006            // Safety:
2007            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2008            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2009            //   envelope_size bytes, there is always sufficient room.
2010            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2011                self.short_address.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2012                encoder,
2013                offset + cur_offset,
2014                depth,
2015            )?;
2016
2017            _prev_end_offset = cur_offset + envelope_size;
2018            if 3 > max_ordinal {
2019                return Ok(());
2020            }
2021
2022            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2023            // are envelope_size bytes.
2024            let cur_offset: usize = (3 - 1) * envelope_size;
2025
2026            // Zero reserved fields.
2027            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2028
2029            // Safety:
2030            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2031            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2032            //   envelope_size bytes, there is always sufficient room.
2033            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2034                self.age.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2035                encoder,
2036                offset + cur_offset,
2037                depth,
2038            )?;
2039
2040            _prev_end_offset = cur_offset + envelope_size;
2041            if 4 > max_ordinal {
2042                return Ok(());
2043            }
2044
2045            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2046            // are envelope_size bytes.
2047            let cur_offset: usize = (4 - 1) * envelope_size;
2048
2049            // Zero reserved fields.
2050            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2051
2052            // Safety:
2053            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2054            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2055            //   envelope_size bytes, there is always sufficient room.
2056            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2057                self.is_child.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2058                encoder,
2059                offset + cur_offset,
2060                depth,
2061            )?;
2062
2063            _prev_end_offset = cur_offset + envelope_size;
2064            if 5 > max_ordinal {
2065                return Ok(());
2066            }
2067
2068            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2069            // are envelope_size bytes.
2070            let cur_offset: usize = (5 - 1) * envelope_size;
2071
2072            // Zero reserved fields.
2073            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2074
2075            // Safety:
2076            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2077            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2078            //   envelope_size bytes, there is always sufficient room.
2079            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2080                self.link_frame_count
2081                    .as_ref()
2082                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2083                encoder,
2084                offset + cur_offset,
2085                depth,
2086            )?;
2087
2088            _prev_end_offset = cur_offset + envelope_size;
2089            if 6 > max_ordinal {
2090                return Ok(());
2091            }
2092
2093            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2094            // are envelope_size bytes.
2095            let cur_offset: usize = (6 - 1) * envelope_size;
2096
2097            // Zero reserved fields.
2098            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2099
2100            // Safety:
2101            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2102            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2103            //   envelope_size bytes, there is always sufficient room.
2104            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2105                self.mgmt_frame_count
2106                    .as_ref()
2107                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2108                encoder,
2109                offset + cur_offset,
2110                depth,
2111            )?;
2112
2113            _prev_end_offset = cur_offset + envelope_size;
2114            if 7 > max_ordinal {
2115                return Ok(());
2116            }
2117
2118            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2119            // are envelope_size bytes.
2120            let cur_offset: usize = (7 - 1) * envelope_size;
2121
2122            // Zero reserved fields.
2123            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2124
2125            // Safety:
2126            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2127            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2128            //   envelope_size bytes, there is always sufficient room.
2129            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2130                self.last_rssi_in.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2131                encoder,
2132                offset + cur_offset,
2133                depth,
2134            )?;
2135
2136            _prev_end_offset = cur_offset + envelope_size;
2137            if 8 > max_ordinal {
2138                return Ok(());
2139            }
2140
2141            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2142            // are envelope_size bytes.
2143            let cur_offset: usize = (8 - 1) * envelope_size;
2144
2145            // Zero reserved fields.
2146            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2147
2148            // Safety:
2149            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2150            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2151            //   envelope_size bytes, there is always sufficient room.
2152            fidl::encoding::encode_in_envelope_optional::<i8, D>(
2153                self.avg_rssi_in.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
2154                encoder,
2155                offset + cur_offset,
2156                depth,
2157            )?;
2158
2159            _prev_end_offset = cur_offset + envelope_size;
2160            if 9 > max_ordinal {
2161                return Ok(());
2162            }
2163
2164            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2165            // are envelope_size bytes.
2166            let cur_offset: usize = (9 - 1) * envelope_size;
2167
2168            // Zero reserved fields.
2169            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2170
2171            // Safety:
2172            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2173            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2174            //   envelope_size bytes, there is always sufficient room.
2175            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2176                self.lqi_in.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2177                encoder,
2178                offset + cur_offset,
2179                depth,
2180            )?;
2181
2182            _prev_end_offset = cur_offset + envelope_size;
2183            if 10 > max_ordinal {
2184                return Ok(());
2185            }
2186
2187            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2188            // are envelope_size bytes.
2189            let cur_offset: usize = (10 - 1) * envelope_size;
2190
2191            // Zero reserved fields.
2192            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2193
2194            // Safety:
2195            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2196            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2197            //   envelope_size bytes, there is always sufficient room.
2198            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2199                self.thread_mode.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2200                encoder,
2201                offset + cur_offset,
2202                depth,
2203            )?;
2204
2205            _prev_end_offset = cur_offset + envelope_size;
2206            if 11 > max_ordinal {
2207                return Ok(());
2208            }
2209
2210            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2211            // are envelope_size bytes.
2212            let cur_offset: usize = (11 - 1) * envelope_size;
2213
2214            // Zero reserved fields.
2215            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2216
2217            // Safety:
2218            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2219            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2220            //   envelope_size bytes, there is always sufficient room.
2221            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2222                self.frame_error_rate
2223                    .as_ref()
2224                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2225                encoder,
2226                offset + cur_offset,
2227                depth,
2228            )?;
2229
2230            _prev_end_offset = cur_offset + envelope_size;
2231            if 12 > max_ordinal {
2232                return Ok(());
2233            }
2234
2235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2236            // are envelope_size bytes.
2237            let cur_offset: usize = (12 - 1) * envelope_size;
2238
2239            // Zero reserved fields.
2240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2241
2242            // Safety:
2243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2245            //   envelope_size bytes, there is always sufficient room.
2246            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2247                self.ipv6_error_rate.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2248                encoder,
2249                offset + cur_offset,
2250                depth,
2251            )?;
2252
2253            _prev_end_offset = cur_offset + envelope_size;
2254            if 13 > max_ordinal {
2255                return Ok(());
2256            }
2257
2258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2259            // are envelope_size bytes.
2260            let cur_offset: usize = (13 - 1) * envelope_size;
2261
2262            // Zero reserved fields.
2263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2264
2265            // Safety:
2266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2268            //   envelope_size bytes, there is always sufficient room.
2269            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2270                self.child_is_csl_synced
2271                    .as_ref()
2272                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2273                encoder,
2274                offset + cur_offset,
2275                depth,
2276            )?;
2277
2278            _prev_end_offset = cur_offset + envelope_size;
2279            if 14 > max_ordinal {
2280                return Ok(());
2281            }
2282
2283            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2284            // are envelope_size bytes.
2285            let cur_offset: usize = (14 - 1) * envelope_size;
2286
2287            // Zero reserved fields.
2288            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2289
2290            // Safety:
2291            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2292            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2293            //   envelope_size bytes, there is always sufficient room.
2294            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2295                self.child_is_state_restoring
2296                    .as_ref()
2297                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2298                encoder,
2299                offset + cur_offset,
2300                depth,
2301            )?;
2302
2303            _prev_end_offset = cur_offset + envelope_size;
2304            if 15 > max_ordinal {
2305                return Ok(());
2306            }
2307
2308            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2309            // are envelope_size bytes.
2310            let cur_offset: usize = (15 - 1) * envelope_size;
2311
2312            // Zero reserved fields.
2313            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2314
2315            // Safety:
2316            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2317            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2318            //   envelope_size bytes, there is always sufficient room.
2319            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2320                self.net_data_version.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2321                encoder,
2322                offset + cur_offset,
2323                depth,
2324            )?;
2325
2326            _prev_end_offset = cur_offset + envelope_size;
2327            if 16 > max_ordinal {
2328                return Ok(());
2329            }
2330
2331            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2332            // are envelope_size bytes.
2333            let cur_offset: usize = (16 - 1) * envelope_size;
2334
2335            // Zero reserved fields.
2336            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2337
2338            // Safety:
2339            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2340            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2341            //   envelope_size bytes, there is always sufficient room.
2342            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2343                self.queued_messages.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2344                encoder,
2345                offset + cur_offset,
2346                depth,
2347            )?;
2348
2349            _prev_end_offset = cur_offset + envelope_size;
2350            if 17 > max_ordinal {
2351                return Ok(());
2352            }
2353
2354            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2355            // are envelope_size bytes.
2356            let cur_offset: usize = (17 - 1) * envelope_size;
2357
2358            // Zero reserved fields.
2359            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2360
2361            // Safety:
2362            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2363            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2364            //   envelope_size bytes, there is always sufficient room.
2365            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2366                self.thread_mle_version
2367                    .as_ref()
2368                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2369                encoder,
2370                offset + cur_offset,
2371                depth,
2372            )?;
2373
2374            _prev_end_offset = cur_offset + envelope_size;
2375
2376            Ok(())
2377        }
2378    }
2379
2380    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NeighborInfo {
2381        #[inline(always)]
2382        fn new_empty() -> Self {
2383            Self::default()
2384        }
2385
2386        unsafe fn decode(
2387            &mut self,
2388            decoder: &mut fidl::encoding::Decoder<'_, D>,
2389            offset: usize,
2390            mut depth: fidl::encoding::Depth,
2391        ) -> fidl::Result<()> {
2392            decoder.debug_check_bounds::<Self>(offset);
2393            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2394                None => return Err(fidl::Error::NotNullable),
2395                Some(len) => len,
2396            };
2397            // Calling decoder.out_of_line_offset(0) is not allowed.
2398            if len == 0 {
2399                return Ok(());
2400            };
2401            depth.increment()?;
2402            let envelope_size = 8;
2403            let bytes_len = len * envelope_size;
2404            let offset = decoder.out_of_line_offset(bytes_len)?;
2405            // Decode the envelope for each type.
2406            let mut _next_ordinal_to_read = 0;
2407            let mut next_offset = offset;
2408            let end_offset = offset + bytes_len;
2409            _next_ordinal_to_read += 1;
2410            if next_offset >= end_offset {
2411                return Ok(());
2412            }
2413
2414            // Decode unknown envelopes for gaps in ordinals.
2415            while _next_ordinal_to_read < 1 {
2416                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2417                _next_ordinal_to_read += 1;
2418                next_offset += envelope_size;
2419            }
2420
2421            let next_out_of_line = decoder.next_out_of_line();
2422            let handles_before = decoder.remaining_handles();
2423            if let Some((inlined, num_bytes, num_handles)) =
2424                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2425            {
2426                let member_inline_size =
2427                    <fidl_fuchsia_lowpan::MacAddress as fidl::encoding::TypeMarker>::inline_size(
2428                        decoder.context,
2429                    );
2430                if inlined != (member_inline_size <= 4) {
2431                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2432                }
2433                let inner_offset;
2434                let mut inner_depth = depth.clone();
2435                if inlined {
2436                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2437                    inner_offset = next_offset;
2438                } else {
2439                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2440                    inner_depth.increment()?;
2441                }
2442                let val_ref = self
2443                    .mac_address
2444                    .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_lowpan::MacAddress, D));
2445                fidl::decode!(
2446                    fidl_fuchsia_lowpan::MacAddress,
2447                    D,
2448                    val_ref,
2449                    decoder,
2450                    inner_offset,
2451                    inner_depth
2452                )?;
2453                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2454                {
2455                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2456                }
2457                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2458                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2459                }
2460            }
2461
2462            next_offset += envelope_size;
2463            _next_ordinal_to_read += 1;
2464            if next_offset >= end_offset {
2465                return Ok(());
2466            }
2467
2468            // Decode unknown envelopes for gaps in ordinals.
2469            while _next_ordinal_to_read < 2 {
2470                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2471                _next_ordinal_to_read += 1;
2472                next_offset += envelope_size;
2473            }
2474
2475            let next_out_of_line = decoder.next_out_of_line();
2476            let handles_before = decoder.remaining_handles();
2477            if let Some((inlined, num_bytes, num_handles)) =
2478                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2479            {
2480                let member_inline_size =
2481                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2482                if inlined != (member_inline_size <= 4) {
2483                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2484                }
2485                let inner_offset;
2486                let mut inner_depth = depth.clone();
2487                if inlined {
2488                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2489                    inner_offset = next_offset;
2490                } else {
2491                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2492                    inner_depth.increment()?;
2493                }
2494                let val_ref = self.short_address.get_or_insert_with(|| fidl::new_empty!(u16, D));
2495                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2496                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2497                {
2498                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2499                }
2500                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2501                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2502                }
2503            }
2504
2505            next_offset += envelope_size;
2506            _next_ordinal_to_read += 1;
2507            if next_offset >= end_offset {
2508                return Ok(());
2509            }
2510
2511            // Decode unknown envelopes for gaps in ordinals.
2512            while _next_ordinal_to_read < 3 {
2513                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2514                _next_ordinal_to_read += 1;
2515                next_offset += envelope_size;
2516            }
2517
2518            let next_out_of_line = decoder.next_out_of_line();
2519            let handles_before = decoder.remaining_handles();
2520            if let Some((inlined, num_bytes, num_handles)) =
2521                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2522            {
2523                let member_inline_size =
2524                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2525                if inlined != (member_inline_size <= 4) {
2526                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2527                }
2528                let inner_offset;
2529                let mut inner_depth = depth.clone();
2530                if inlined {
2531                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2532                    inner_offset = next_offset;
2533                } else {
2534                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2535                    inner_depth.increment()?;
2536                }
2537                let val_ref = self.age.get_or_insert_with(|| fidl::new_empty!(i64, D));
2538                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2539                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2540                {
2541                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2542                }
2543                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2544                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2545                }
2546            }
2547
2548            next_offset += envelope_size;
2549            _next_ordinal_to_read += 1;
2550            if next_offset >= end_offset {
2551                return Ok(());
2552            }
2553
2554            // Decode unknown envelopes for gaps in ordinals.
2555            while _next_ordinal_to_read < 4 {
2556                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2557                _next_ordinal_to_read += 1;
2558                next_offset += envelope_size;
2559            }
2560
2561            let next_out_of_line = decoder.next_out_of_line();
2562            let handles_before = decoder.remaining_handles();
2563            if let Some((inlined, num_bytes, num_handles)) =
2564                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2565            {
2566                let member_inline_size =
2567                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2568                if inlined != (member_inline_size <= 4) {
2569                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2570                }
2571                let inner_offset;
2572                let mut inner_depth = depth.clone();
2573                if inlined {
2574                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2575                    inner_offset = next_offset;
2576                } else {
2577                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2578                    inner_depth.increment()?;
2579                }
2580                let val_ref = self.is_child.get_or_insert_with(|| fidl::new_empty!(bool, D));
2581                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2582                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2583                {
2584                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2585                }
2586                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2587                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2588                }
2589            }
2590
2591            next_offset += envelope_size;
2592            _next_ordinal_to_read += 1;
2593            if next_offset >= end_offset {
2594                return Ok(());
2595            }
2596
2597            // Decode unknown envelopes for gaps in ordinals.
2598            while _next_ordinal_to_read < 5 {
2599                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2600                _next_ordinal_to_read += 1;
2601                next_offset += envelope_size;
2602            }
2603
2604            let next_out_of_line = decoder.next_out_of_line();
2605            let handles_before = decoder.remaining_handles();
2606            if let Some((inlined, num_bytes, num_handles)) =
2607                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2608            {
2609                let member_inline_size =
2610                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2611                if inlined != (member_inline_size <= 4) {
2612                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2613                }
2614                let inner_offset;
2615                let mut inner_depth = depth.clone();
2616                if inlined {
2617                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2618                    inner_offset = next_offset;
2619                } else {
2620                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2621                    inner_depth.increment()?;
2622                }
2623                let val_ref = self.link_frame_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
2624                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2625                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2626                {
2627                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2628                }
2629                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2630                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2631                }
2632            }
2633
2634            next_offset += envelope_size;
2635            _next_ordinal_to_read += 1;
2636            if next_offset >= end_offset {
2637                return Ok(());
2638            }
2639
2640            // Decode unknown envelopes for gaps in ordinals.
2641            while _next_ordinal_to_read < 6 {
2642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2643                _next_ordinal_to_read += 1;
2644                next_offset += envelope_size;
2645            }
2646
2647            let next_out_of_line = decoder.next_out_of_line();
2648            let handles_before = decoder.remaining_handles();
2649            if let Some((inlined, num_bytes, num_handles)) =
2650                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2651            {
2652                let member_inline_size =
2653                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2654                if inlined != (member_inline_size <= 4) {
2655                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2656                }
2657                let inner_offset;
2658                let mut inner_depth = depth.clone();
2659                if inlined {
2660                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2661                    inner_offset = next_offset;
2662                } else {
2663                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2664                    inner_depth.increment()?;
2665                }
2666                let val_ref = self.mgmt_frame_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
2667                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2668                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2669                {
2670                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2671                }
2672                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2673                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2674                }
2675            }
2676
2677            next_offset += envelope_size;
2678            _next_ordinal_to_read += 1;
2679            if next_offset >= end_offset {
2680                return Ok(());
2681            }
2682
2683            // Decode unknown envelopes for gaps in ordinals.
2684            while _next_ordinal_to_read < 7 {
2685                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2686                _next_ordinal_to_read += 1;
2687                next_offset += envelope_size;
2688            }
2689
2690            let next_out_of_line = decoder.next_out_of_line();
2691            let handles_before = decoder.remaining_handles();
2692            if let Some((inlined, num_bytes, num_handles)) =
2693                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2694            {
2695                let member_inline_size =
2696                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2697                if inlined != (member_inline_size <= 4) {
2698                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2699                }
2700                let inner_offset;
2701                let mut inner_depth = depth.clone();
2702                if inlined {
2703                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2704                    inner_offset = next_offset;
2705                } else {
2706                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2707                    inner_depth.increment()?;
2708                }
2709                let val_ref = self.last_rssi_in.get_or_insert_with(|| fidl::new_empty!(i32, D));
2710                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
2711                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2712                {
2713                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2714                }
2715                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2716                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2717                }
2718            }
2719
2720            next_offset += envelope_size;
2721            _next_ordinal_to_read += 1;
2722            if next_offset >= end_offset {
2723                return Ok(());
2724            }
2725
2726            // Decode unknown envelopes for gaps in ordinals.
2727            while _next_ordinal_to_read < 8 {
2728                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2729                _next_ordinal_to_read += 1;
2730                next_offset += envelope_size;
2731            }
2732
2733            let next_out_of_line = decoder.next_out_of_line();
2734            let handles_before = decoder.remaining_handles();
2735            if let Some((inlined, num_bytes, num_handles)) =
2736                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2737            {
2738                let member_inline_size =
2739                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2740                if inlined != (member_inline_size <= 4) {
2741                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2742                }
2743                let inner_offset;
2744                let mut inner_depth = depth.clone();
2745                if inlined {
2746                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2747                    inner_offset = next_offset;
2748                } else {
2749                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2750                    inner_depth.increment()?;
2751                }
2752                let val_ref = self.avg_rssi_in.get_or_insert_with(|| fidl::new_empty!(i8, D));
2753                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
2754                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2755                {
2756                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2757                }
2758                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2759                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2760                }
2761            }
2762
2763            next_offset += envelope_size;
2764            _next_ordinal_to_read += 1;
2765            if next_offset >= end_offset {
2766                return Ok(());
2767            }
2768
2769            // Decode unknown envelopes for gaps in ordinals.
2770            while _next_ordinal_to_read < 9 {
2771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2772                _next_ordinal_to_read += 1;
2773                next_offset += envelope_size;
2774            }
2775
2776            let next_out_of_line = decoder.next_out_of_line();
2777            let handles_before = decoder.remaining_handles();
2778            if let Some((inlined, num_bytes, num_handles)) =
2779                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2780            {
2781                let member_inline_size =
2782                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2783                if inlined != (member_inline_size <= 4) {
2784                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2785                }
2786                let inner_offset;
2787                let mut inner_depth = depth.clone();
2788                if inlined {
2789                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2790                    inner_offset = next_offset;
2791                } else {
2792                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2793                    inner_depth.increment()?;
2794                }
2795                let val_ref = self.lqi_in.get_or_insert_with(|| fidl::new_empty!(u8, D));
2796                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2797                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2798                {
2799                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2800                }
2801                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2802                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2803                }
2804            }
2805
2806            next_offset += envelope_size;
2807            _next_ordinal_to_read += 1;
2808            if next_offset >= end_offset {
2809                return Ok(());
2810            }
2811
2812            // Decode unknown envelopes for gaps in ordinals.
2813            while _next_ordinal_to_read < 10 {
2814                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2815                _next_ordinal_to_read += 1;
2816                next_offset += envelope_size;
2817            }
2818
2819            let next_out_of_line = decoder.next_out_of_line();
2820            let handles_before = decoder.remaining_handles();
2821            if let Some((inlined, num_bytes, num_handles)) =
2822                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2823            {
2824                let member_inline_size =
2825                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2826                if inlined != (member_inline_size <= 4) {
2827                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2828                }
2829                let inner_offset;
2830                let mut inner_depth = depth.clone();
2831                if inlined {
2832                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2833                    inner_offset = next_offset;
2834                } else {
2835                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2836                    inner_depth.increment()?;
2837                }
2838                let val_ref = self.thread_mode.get_or_insert_with(|| fidl::new_empty!(u8, D));
2839                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2840                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2841                {
2842                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2843                }
2844                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2845                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2846                }
2847            }
2848
2849            next_offset += envelope_size;
2850            _next_ordinal_to_read += 1;
2851            if next_offset >= end_offset {
2852                return Ok(());
2853            }
2854
2855            // Decode unknown envelopes for gaps in ordinals.
2856            while _next_ordinal_to_read < 11 {
2857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2858                _next_ordinal_to_read += 1;
2859                next_offset += envelope_size;
2860            }
2861
2862            let next_out_of_line = decoder.next_out_of_line();
2863            let handles_before = decoder.remaining_handles();
2864            if let Some((inlined, num_bytes, num_handles)) =
2865                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2866            {
2867                let member_inline_size =
2868                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2869                if inlined != (member_inline_size <= 4) {
2870                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2871                }
2872                let inner_offset;
2873                let mut inner_depth = depth.clone();
2874                if inlined {
2875                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2876                    inner_offset = next_offset;
2877                } else {
2878                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2879                    inner_depth.increment()?;
2880                }
2881                let val_ref = self.frame_error_rate.get_or_insert_with(|| fidl::new_empty!(u16, D));
2882                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2883                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2884                {
2885                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2886                }
2887                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2888                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2889                }
2890            }
2891
2892            next_offset += envelope_size;
2893            _next_ordinal_to_read += 1;
2894            if next_offset >= end_offset {
2895                return Ok(());
2896            }
2897
2898            // Decode unknown envelopes for gaps in ordinals.
2899            while _next_ordinal_to_read < 12 {
2900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2901                _next_ordinal_to_read += 1;
2902                next_offset += envelope_size;
2903            }
2904
2905            let next_out_of_line = decoder.next_out_of_line();
2906            let handles_before = decoder.remaining_handles();
2907            if let Some((inlined, num_bytes, num_handles)) =
2908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2909            {
2910                let member_inline_size =
2911                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2912                if inlined != (member_inline_size <= 4) {
2913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2914                }
2915                let inner_offset;
2916                let mut inner_depth = depth.clone();
2917                if inlined {
2918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2919                    inner_offset = next_offset;
2920                } else {
2921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2922                    inner_depth.increment()?;
2923                }
2924                let val_ref = self.ipv6_error_rate.get_or_insert_with(|| fidl::new_empty!(u16, D));
2925                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2926                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2927                {
2928                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2929                }
2930                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2931                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2932                }
2933            }
2934
2935            next_offset += envelope_size;
2936            _next_ordinal_to_read += 1;
2937            if next_offset >= end_offset {
2938                return Ok(());
2939            }
2940
2941            // Decode unknown envelopes for gaps in ordinals.
2942            while _next_ordinal_to_read < 13 {
2943                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2944                _next_ordinal_to_read += 1;
2945                next_offset += envelope_size;
2946            }
2947
2948            let next_out_of_line = decoder.next_out_of_line();
2949            let handles_before = decoder.remaining_handles();
2950            if let Some((inlined, num_bytes, num_handles)) =
2951                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2952            {
2953                let member_inline_size =
2954                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2955                if inlined != (member_inline_size <= 4) {
2956                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2957                }
2958                let inner_offset;
2959                let mut inner_depth = depth.clone();
2960                if inlined {
2961                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2962                    inner_offset = next_offset;
2963                } else {
2964                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2965                    inner_depth.increment()?;
2966                }
2967                let val_ref =
2968                    self.child_is_csl_synced.get_or_insert_with(|| fidl::new_empty!(bool, D));
2969                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2971                {
2972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2973                }
2974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2976                }
2977            }
2978
2979            next_offset += envelope_size;
2980            _next_ordinal_to_read += 1;
2981            if next_offset >= end_offset {
2982                return Ok(());
2983            }
2984
2985            // Decode unknown envelopes for gaps in ordinals.
2986            while _next_ordinal_to_read < 14 {
2987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2988                _next_ordinal_to_read += 1;
2989                next_offset += envelope_size;
2990            }
2991
2992            let next_out_of_line = decoder.next_out_of_line();
2993            let handles_before = decoder.remaining_handles();
2994            if let Some((inlined, num_bytes, num_handles)) =
2995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2996            {
2997                let member_inline_size =
2998                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2999                if inlined != (member_inline_size <= 4) {
3000                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3001                }
3002                let inner_offset;
3003                let mut inner_depth = depth.clone();
3004                if inlined {
3005                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3006                    inner_offset = next_offset;
3007                } else {
3008                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3009                    inner_depth.increment()?;
3010                }
3011                let val_ref =
3012                    self.child_is_state_restoring.get_or_insert_with(|| fidl::new_empty!(bool, D));
3013                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3014                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3015                {
3016                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3017                }
3018                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3019                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3020                }
3021            }
3022
3023            next_offset += envelope_size;
3024            _next_ordinal_to_read += 1;
3025            if next_offset >= end_offset {
3026                return Ok(());
3027            }
3028
3029            // Decode unknown envelopes for gaps in ordinals.
3030            while _next_ordinal_to_read < 15 {
3031                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3032                _next_ordinal_to_read += 1;
3033                next_offset += envelope_size;
3034            }
3035
3036            let next_out_of_line = decoder.next_out_of_line();
3037            let handles_before = decoder.remaining_handles();
3038            if let Some((inlined, num_bytes, num_handles)) =
3039                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3040            {
3041                let member_inline_size =
3042                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3043                if inlined != (member_inline_size <= 4) {
3044                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3045                }
3046                let inner_offset;
3047                let mut inner_depth = depth.clone();
3048                if inlined {
3049                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3050                    inner_offset = next_offset;
3051                } else {
3052                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3053                    inner_depth.increment()?;
3054                }
3055                let val_ref = self.net_data_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
3056                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3057                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3058                {
3059                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3060                }
3061                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3062                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3063                }
3064            }
3065
3066            next_offset += envelope_size;
3067            _next_ordinal_to_read += 1;
3068            if next_offset >= end_offset {
3069                return Ok(());
3070            }
3071
3072            // Decode unknown envelopes for gaps in ordinals.
3073            while _next_ordinal_to_read < 16 {
3074                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3075                _next_ordinal_to_read += 1;
3076                next_offset += envelope_size;
3077            }
3078
3079            let next_out_of_line = decoder.next_out_of_line();
3080            let handles_before = decoder.remaining_handles();
3081            if let Some((inlined, num_bytes, num_handles)) =
3082                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3083            {
3084                let member_inline_size =
3085                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3086                if inlined != (member_inline_size <= 4) {
3087                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3088                }
3089                let inner_offset;
3090                let mut inner_depth = depth.clone();
3091                if inlined {
3092                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3093                    inner_offset = next_offset;
3094                } else {
3095                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3096                    inner_depth.increment()?;
3097                }
3098                let val_ref = self.queued_messages.get_or_insert_with(|| fidl::new_empty!(u16, D));
3099                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3100                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3101                {
3102                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3103                }
3104                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3105                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3106                }
3107            }
3108
3109            next_offset += envelope_size;
3110            _next_ordinal_to_read += 1;
3111            if next_offset >= end_offset {
3112                return Ok(());
3113            }
3114
3115            // Decode unknown envelopes for gaps in ordinals.
3116            while _next_ordinal_to_read < 17 {
3117                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3118                _next_ordinal_to_read += 1;
3119                next_offset += envelope_size;
3120            }
3121
3122            let next_out_of_line = decoder.next_out_of_line();
3123            let handles_before = decoder.remaining_handles();
3124            if let Some((inlined, num_bytes, num_handles)) =
3125                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3126            {
3127                let member_inline_size =
3128                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3129                if inlined != (member_inline_size <= 4) {
3130                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3131                }
3132                let inner_offset;
3133                let mut inner_depth = depth.clone();
3134                if inlined {
3135                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3136                    inner_offset = next_offset;
3137                } else {
3138                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3139                    inner_depth.increment()?;
3140                }
3141                let val_ref =
3142                    self.thread_mle_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
3143                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3144                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3145                {
3146                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3147                }
3148                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3149                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3150                }
3151            }
3152
3153            next_offset += envelope_size;
3154
3155            // Decode the remaining unknown envelopes.
3156            while next_offset < end_offset {
3157                _next_ordinal_to_read += 1;
3158                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3159                next_offset += envelope_size;
3160            }
3161
3162            Ok(())
3163        }
3164    }
3165}