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