Skip to main content

fidl_fuchsia_wlan_stats_common/
fidl_fuchsia_wlan_stats_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
11pub const GAUGE_STATISTIC_MAX_LENGTH: u8 = 5;
12
13pub const MAX_DRIVER_SPECIFIC_COUNTERS: u32 = 127;
14
15pub const MAX_DRIVER_SPECIFIC_GAUGES: u32 = 127;
16
17/// For each histogram type (e.g. RSSI), there can be multiple histograms up to this limit. For
18/// example, an interface might have 1 histogram for station-wide RSSI, but also 1 for each of the
19/// antennas used by the interface.
20pub const MAX_HISTOGRAMS_PER_TYPE: u8 = 8;
21
22/// All histograms have a fixed number of buckets. To save space, each histogram type
23/// uses a vector to hold only non-empty buckets (a sparse histogram), with these constants as the
24/// max size of each vector.
25/// Noise floor values range from -255 to -1 dBm.
26pub const MAX_NOISE_FLOOR_SAMPLES: u8 = 255;
27
28/// RSSI values range from -255 to -1 dBm.
29pub const MAX_RSSI_SAMPLES: u8 = 255;
30
31/// Size of RxRateIndexHistogram lookup table (see comments in RxRateIndexHistogram).
32pub const MAX_RX_RATE_INDEX_SAMPLES: u8 = 196;
33
34/// SNR values range from 0 to 255 dB.
35pub const MAX_SNR_SAMPLES: u16 = 256;
36
37pub const STAT_NAME_MAX_LENGTH: u8 = 127;
38
39/// Antenna frequency.
40#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
41#[repr(u8)]
42pub enum AntennaFreq {
43    /// 2.4 GHz.
44    Antenna2G = 1,
45    /// 5 GHz.
46    Antenna5G = 2,
47}
48
49impl AntennaFreq {
50    #[inline]
51    pub fn from_primitive(prim: u8) -> Option<Self> {
52        match prim {
53            1 => Some(Self::Antenna2G),
54            2 => Some(Self::Antenna5G),
55            _ => None,
56        }
57    }
58
59    #[inline]
60    pub const fn into_primitive(self) -> u8 {
61        self as u8
62    }
63}
64
65/// Statistics supported by the Gauge type.
66#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
67pub enum GaugeStatistic {
68    Min,
69    Max,
70    Sum,
71    Last,
72    Mean,
73    #[doc(hidden)]
74    __SourceBreaking {
75        unknown_ordinal: u8,
76    },
77}
78
79/// Pattern that matches an unknown `GaugeStatistic` member.
80#[macro_export]
81macro_rules! GaugeStatisticUnknown {
82    () => {
83        _
84    };
85}
86
87impl GaugeStatistic {
88    #[inline]
89    pub fn from_primitive(prim: u8) -> Option<Self> {
90        match prim {
91            1 => Some(Self::Min),
92            2 => Some(Self::Max),
93            3 => Some(Self::Sum),
94            4 => Some(Self::Last),
95            5 => Some(Self::Mean),
96            _ => None,
97        }
98    }
99
100    #[inline]
101    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
102        match prim {
103            1 => Self::Min,
104            2 => Self::Max,
105            3 => Self::Sum,
106            4 => Self::Last,
107            5 => Self::Mean,
108            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
109        }
110    }
111
112    #[inline]
113    pub fn unknown() -> Self {
114        Self::__SourceBreaking { unknown_ordinal: 0xff }
115    }
116
117    #[inline]
118    pub const fn into_primitive(self) -> u8 {
119        match self {
120            Self::Min => 1,
121            Self::Max => 2,
122            Self::Sum => 3,
123            Self::Last => 4,
124            Self::Mean => 5,
125            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
126        }
127    }
128
129    #[inline]
130    pub fn is_unknown(&self) -> bool {
131        match self {
132            Self::__SourceBreaking { unknown_ordinal: _ } => true,
133            _ => false,
134        }
135    }
136}
137
138/// The scope of the histogram, e.g. if the histogram contains data for the entire station, or has
139/// data for just a single antenna.
140#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
141#[repr(u8)]
142pub enum HistScope {
143    Station = 1,
144    PerAntenna = 2,
145}
146
147impl HistScope {
148    #[inline]
149    pub fn from_primitive(prim: u8) -> Option<Self> {
150        match prim {
151            1 => Some(Self::Station),
152            2 => Some(Self::PerAntenna),
153            _ => None,
154        }
155    }
156
157    #[inline]
158    pub const fn into_primitive(self) -> u8 {
159        self as u8
160    }
161}
162
163/// Identifier for antenna.
164#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
165pub struct AntennaId {
166    pub freq: AntennaFreq,
167    /// 0 indexed antenna number of freq.
168    pub index: u8,
169}
170
171impl fidl::Persistable for AntennaId {}
172
173/// Histogram bucket.
174#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
175#[repr(C)]
176pub struct HistBucket {
177    /// Index into a lookup table for each histogram type. The lookup table for each type is
178    /// described below in the comments for each type.
179    pub bucket_index: u16,
180    /// The count of samples in the bucket.
181    pub num_samples: u64,
182}
183
184impl fidl::Persistable for HistBucket {}
185
186/// Histogram for noise floor samples.
187#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
188pub struct NoiseFloorHistogram {
189    pub hist_scope: HistScope,
190    /// If hist_scope is PER_ANTENNA, antenna_id must be provided.
191    pub antenna_id: Option<Box<AntennaId>>,
192    /// Sparse histogram of noise floor of current channel in dBm. Each sample's bucket_index is an
193    /// index into this list of dBm values: [-255, -254, ... -1]. For example, if
194    /// noise_floor_samples contains a HistBucket with bucket_index = 165 and num_samples = 50, that
195    /// means there were 50 frames counted that had a noise floor of -90 dBm.
196    pub noise_floor_samples: Vec<HistBucket>,
197    /// Count of invalid samples encountered, if any.
198    pub invalid_samples: u64,
199}
200
201impl fidl::Persistable for NoiseFloorHistogram {}
202
203/// Histogram for received signal strength indicator (RSSI).
204#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
205pub struct RssiHistogram {
206    pub hist_scope: HistScope,
207    /// If hist_scope is PER_ANTENNA, antenna_id must be provided.
208    pub antenna_id: Option<Box<AntennaId>>,
209    /// Sparse histogram of RSSI of AP in dBm. Each sample's bucket_index is an index
210    /// into this list of dBm values: [-255, -254, ... -1]. For example, if rssi_samples
211    /// contains a HistBucket with bucket_index = 225 and num_samples = 50, that means
212    /// there were 50 frames counted that had a signal level of -30 dBm.
213    pub rssi_samples: Vec<HistBucket>,
214    /// Count of invalid samples encountered, if any.
215    pub invalid_samples: u64,
216}
217
218impl fidl::Persistable for RssiHistogram {}
219
220/// Histogram for received data rate.
221#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
222pub struct RxRateIndexHistogram {
223    pub hist_scope: HistScope,
224    /// If hist_scope is PER_ANTENNA, antenna_id must be provided.
225    pub antenna_id: Option<Box<AntennaId>>,
226    /// Sparse histogram of count of received frames for each rate. Each sample's bucket_index is an
227    /// index into this lookup table:
228    /// 0-3: B-MCS 0-3
229    /// 4-11: G-MCS 0-7
230    /// 12-27: N-MCS 0-15 (BW20)
231    /// 28-43: N-MCS 0-15 (BW40)
232    /// 44-59: N-MCS 0-15 (BW20:SGI)
233    /// 60-75: N-MCS 0-15 (BW40:SGI)
234    /// 76-85: AC-MCS 0-9 (VHT:BW20:NSS1)
235    /// 86-95: AC-MCS 0-9 (VHT:BW20:NSS2)
236    /// 96-105: AC-MCS 0-9 (VHT:BW40:NSS1)
237    /// 106-115: AC-MCS 0-9 (VHT:BW40:NSS2)
238    /// 116-125: AC-MCS 0-9 (VHT:BW80:NSS1)
239    /// 126-135: AC-MCS 0-9 (VHT:BW80:NSS2)
240    /// 136-145: AC-MCS 0-9 (VHT:BW20:NSS1:SGI)
241    /// 146-155: AC-MCS 0-9 (VHT:BW20:NSS2:SGI)
242    /// 156-165: AC-MCS 0-9 (VHT:BW40:NSS1:SGI)
243    /// 166-175: AC-MCS 0-9 (VHT:BW40:NSS2:SGI)
244    /// 176-185: AC-MCS 0-9 (VHT:BW80:NSS1:SGI)
245    /// 186-195: AC-MCS 0-9 (VHT:BW80:NSS2:SGI)
246    ///
247    /// For example, if rx_rate_index_samples contains a HistBucket with bucket_index = 75
248    /// and num_samples = 50, that means there were 50 frames counted that had a rate corresponding
249    /// to N-MCS 15 (BW40:SGI).
250    pub rx_rate_index_samples: Vec<HistBucket>,
251    /// Count of invalid samples encountered, if any.
252    pub invalid_samples: u64,
253}
254
255impl fidl::Persistable for RxRateIndexHistogram {}
256
257/// Histogram for signal to noise ratio (SNR).
258#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
259pub struct SnrHistogram {
260    pub hist_scope: HistScope,
261    /// If hist_scope is PER_ANTENNA, antenna_id must be provided.
262    pub antenna_id: Option<Box<AntennaId>>,
263    /// Sparse histogram of signal to noise ratio in dB. Each sample's bucket_index is an index
264    /// into this list of dB values: [0, 1, ... 255]. For example, if snr_samples contains a
265    /// HistBucket with value = 60 and num_samples = 50, that means there were 50 frames
266    /// counted that had a SNR of 60 dB.
267    pub snr_samples: Vec<HistBucket>,
268    /// Count of invalid samples encountered, if any.
269    pub invalid_samples: u64,
270}
271
272impl fidl::Persistable for SnrHistogram {}
273
274#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
275#[repr(C)]
276pub struct UnnamedCounter {
277    pub id: u16,
278    pub count: u64,
279}
280
281impl fidl::Persistable for UnnamedCounter {}
282
283#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
284#[repr(C)]
285pub struct UnnamedGauge {
286    pub id: u16,
287    pub value: i64,
288}
289
290impl fidl::Persistable for UnnamedGauge {}
291
292#[derive(Clone, Debug, Default, PartialEq)]
293pub struct ConnectionSignalReport {
294    pub primary: Option<fidl_fuchsia_wlan_ieee80211_common::ChannelNumber>,
295    pub tx_rate_500kbps: Option<u32>,
296    pub rssi_dbm: Option<i8>,
297    pub snr_db: Option<i8>,
298    pub bandwidth: Option<fidl_fuchsia_wlan_ieee80211_common::ChannelBandwidth>,
299    pub vht_secondary_80_channel: Option<fidl_fuchsia_wlan_ieee80211_common::ChannelNumber>,
300    #[doc(hidden)]
301    pub __source_breaking: fidl::marker::SourceBreaking,
302}
303
304impl fidl::Persistable for ConnectionSignalReport {}
305
306#[derive(Clone, Debug, Default, PartialEq)]
307pub struct ConnectionStats {
308    /// ID of the current connection. Used by WLAN telemetry to determine whether
309    /// the current counters and the previous counters belong to the same connection.
310    /// If the counters belong to two different connections, telemetry will not diff
311    /// between them as it assumes that the driver/firmware has reset the counter
312    /// in between.
313    ///
314    /// The driver should set a new connection ID after a successful connection,
315    /// reconnection, or roaming attempt, as it's expected that the connection-
316    /// related counters would reset on a new connection.
317    pub connection_id: Option<u8>,
318    pub driver_specific_counters: Option<Vec<UnnamedCounter>>,
319    pub driver_specific_gauges: Option<Vec<UnnamedGauge>>,
320    pub rx_unicast_total: Option<u64>,
321    pub rx_unicast_drop: Option<u64>,
322    pub rx_multicast: Option<u64>,
323    pub tx_total: Option<u64>,
324    pub tx_drop: Option<u64>,
325    pub wme: Option<WmePacketStats>,
326    #[doc(hidden)]
327    pub __source_breaking: fidl::marker::SourceBreaking,
328}
329
330impl fidl::Persistable for ConnectionStats {}
331
332#[derive(Clone, Debug, Default, PartialEq)]
333pub struct IfaceHistogramStats {
334    /// Noise floor histogram(s).
335    pub noise_floor_histograms: Option<Vec<NoiseFloorHistogram>>,
336    /// Received signal strength indicator (RSSI) histogram(s).
337    pub rssi_histograms: Option<Vec<RssiHistogram>>,
338    /// Received rate index histogram(s).
339    pub rx_rate_index_histograms: Option<Vec<RxRateIndexHistogram>>,
340    /// Signal to noise ratio (SNR) histogram(s).
341    pub snr_histograms: Option<Vec<SnrHistogram>>,
342    #[doc(hidden)]
343    pub __source_breaking: fidl::marker::SourceBreaking,
344}
345
346impl fidl::Persistable for IfaceHistogramStats {}
347
348#[derive(Clone, Debug, Default, PartialEq)]
349pub struct IfaceStats {
350    /// Stats related to the current connection. May not be set if the client is not connected.
351    pub connection_stats: Option<ConnectionStats>,
352    pub driver_specific_counters: Option<Vec<UnnamedCounter>>,
353    pub driver_specific_gauges: Option<Vec<UnnamedGauge>>,
354    #[doc(hidden)]
355    pub __source_breaking: fidl::marker::SourceBreaking,
356}
357
358impl fidl::Persistable for IfaceStats {}
359
360/// Config to associate a driver-specific counter ID with a counter name that is
361/// to be used in Inspect.
362#[derive(Clone, Debug, Default, PartialEq)]
363pub struct InspectCounterConfig {
364    pub counter_id: Option<u16>,
365    pub counter_name: Option<String>,
366    #[doc(hidden)]
367    pub __source_breaking: fidl::marker::SourceBreaking,
368}
369
370impl fidl::Persistable for InspectCounterConfig {}
371
372/// Config to associate a driver-specific gauge ID with a gauge name that is
373/// to be used in Inspect.
374#[derive(Clone, Debug, Default, PartialEq)]
375pub struct InspectGaugeConfig {
376    pub gauge_id: Option<u16>,
377    pub gauge_name: Option<String>,
378    /// An Inspect time series would be created per statistic.
379    pub statistics: Option<Vec<GaugeStatistic>>,
380    #[doc(hidden)]
381    pub __source_breaking: fidl::marker::SourceBreaking,
382}
383
384impl fidl::Persistable for InspectGaugeConfig {}
385
386#[derive(Clone, Debug, Default, PartialEq)]
387pub struct PacketStats {
388    pub rx: Option<u64>,
389    pub tx: Option<u64>,
390    pub tx_drop: Option<u64>,
391    pub tx_retries: Option<u64>,
392    #[doc(hidden)]
393    pub __source_breaking: fidl::marker::SourceBreaking,
394}
395
396impl fidl::Persistable for PacketStats {}
397
398#[derive(Clone, Debug, Default, PartialEq)]
399pub struct SignalReport {
400    /// Signal report related to the current connection.
401    /// May not be set if the client is not connected.
402    pub connection_signal_report: Option<ConnectionSignalReport>,
403    #[doc(hidden)]
404    pub __source_breaking: fidl::marker::SourceBreaking,
405}
406
407impl fidl::Persistable for SignalReport {}
408
409#[derive(Clone, Debug, Default, PartialEq)]
410pub struct TelemetrySupport {
411    /// Specifies counters that should be logged into Inspect time series
412    pub inspect_counter_configs: Option<Vec<InspectCounterConfig>>,
413    /// Specifies gauges that should be logged into Inspect time series
414    pub inspect_gauge_configs: Option<Vec<InspectGaugeConfig>>,
415    #[doc(hidden)]
416    pub __source_breaking: fidl::marker::SourceBreaking,
417}
418
419impl fidl::Persistable for TelemetrySupport {}
420
421#[derive(Clone, Debug, Default, PartialEq)]
422pub struct WmePacketStats {
423    pub be: Option<PacketStats>,
424    pub bk: Option<PacketStats>,
425    pub vi: Option<PacketStats>,
426    pub vo: Option<PacketStats>,
427    #[doc(hidden)]
428    pub __source_breaking: fidl::marker::SourceBreaking,
429}
430
431impl fidl::Persistable for WmePacketStats {}
432
433mod internal {
434    use super::*;
435    unsafe impl fidl::encoding::TypeMarker for AntennaFreq {
436        type Owned = Self;
437
438        #[inline(always)]
439        fn inline_align(_context: fidl::encoding::Context) -> usize {
440            std::mem::align_of::<u8>()
441        }
442
443        #[inline(always)]
444        fn inline_size(_context: fidl::encoding::Context) -> usize {
445            std::mem::size_of::<u8>()
446        }
447
448        #[inline(always)]
449        fn encode_is_copy() -> bool {
450            true
451        }
452
453        #[inline(always)]
454        fn decode_is_copy() -> bool {
455            false
456        }
457    }
458
459    impl fidl::encoding::ValueTypeMarker for AntennaFreq {
460        type Borrowed<'a> = Self;
461        #[inline(always)]
462        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
463            *value
464        }
465    }
466
467    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AntennaFreq {
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::<Self>(offset);
476            encoder.write_num(self.into_primitive(), offset);
477            Ok(())
478        }
479    }
480
481    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AntennaFreq {
482        #[inline(always)]
483        fn new_empty() -> Self {
484            Self::Antenna2G
485        }
486
487        #[inline]
488        unsafe fn decode(
489            &mut self,
490            decoder: &mut fidl::encoding::Decoder<'_, D>,
491            offset: usize,
492            _depth: fidl::encoding::Depth,
493        ) -> fidl::Result<()> {
494            decoder.debug_check_bounds::<Self>(offset);
495            let prim = decoder.read_num::<u8>(offset);
496
497            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
498            Ok(())
499        }
500    }
501    unsafe impl fidl::encoding::TypeMarker for GaugeStatistic {
502        type Owned = Self;
503
504        #[inline(always)]
505        fn inline_align(_context: fidl::encoding::Context) -> usize {
506            std::mem::align_of::<u8>()
507        }
508
509        #[inline(always)]
510        fn inline_size(_context: fidl::encoding::Context) -> usize {
511            std::mem::size_of::<u8>()
512        }
513
514        #[inline(always)]
515        fn encode_is_copy() -> bool {
516            false
517        }
518
519        #[inline(always)]
520        fn decode_is_copy() -> bool {
521            false
522        }
523    }
524
525    impl fidl::encoding::ValueTypeMarker for GaugeStatistic {
526        type Borrowed<'a> = Self;
527        #[inline(always)]
528        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
529            *value
530        }
531    }
532
533    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GaugeStatistic {
534        #[inline]
535        unsafe fn encode(
536            self,
537            encoder: &mut fidl::encoding::Encoder<'_, D>,
538            offset: usize,
539            _depth: fidl::encoding::Depth,
540        ) -> fidl::Result<()> {
541            encoder.debug_check_bounds::<Self>(offset);
542            encoder.write_num(self.into_primitive(), offset);
543            Ok(())
544        }
545    }
546
547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GaugeStatistic {
548        #[inline(always)]
549        fn new_empty() -> Self {
550            Self::unknown()
551        }
552
553        #[inline]
554        unsafe fn decode(
555            &mut self,
556            decoder: &mut fidl::encoding::Decoder<'_, D>,
557            offset: usize,
558            _depth: fidl::encoding::Depth,
559        ) -> fidl::Result<()> {
560            decoder.debug_check_bounds::<Self>(offset);
561            let prim = decoder.read_num::<u8>(offset);
562
563            *self = Self::from_primitive_allow_unknown(prim);
564            Ok(())
565        }
566    }
567    unsafe impl fidl::encoding::TypeMarker for HistScope {
568        type Owned = Self;
569
570        #[inline(always)]
571        fn inline_align(_context: fidl::encoding::Context) -> usize {
572            std::mem::align_of::<u8>()
573        }
574
575        #[inline(always)]
576        fn inline_size(_context: fidl::encoding::Context) -> usize {
577            std::mem::size_of::<u8>()
578        }
579
580        #[inline(always)]
581        fn encode_is_copy() -> bool {
582            true
583        }
584
585        #[inline(always)]
586        fn decode_is_copy() -> bool {
587            false
588        }
589    }
590
591    impl fidl::encoding::ValueTypeMarker for HistScope {
592        type Borrowed<'a> = Self;
593        #[inline(always)]
594        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
595            *value
596        }
597    }
598
599    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HistScope {
600        #[inline]
601        unsafe fn encode(
602            self,
603            encoder: &mut fidl::encoding::Encoder<'_, D>,
604            offset: usize,
605            _depth: fidl::encoding::Depth,
606        ) -> fidl::Result<()> {
607            encoder.debug_check_bounds::<Self>(offset);
608            encoder.write_num(self.into_primitive(), offset);
609            Ok(())
610        }
611    }
612
613    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HistScope {
614        #[inline(always)]
615        fn new_empty() -> Self {
616            Self::Station
617        }
618
619        #[inline]
620        unsafe fn decode(
621            &mut self,
622            decoder: &mut fidl::encoding::Decoder<'_, D>,
623            offset: usize,
624            _depth: fidl::encoding::Depth,
625        ) -> fidl::Result<()> {
626            decoder.debug_check_bounds::<Self>(offset);
627            let prim = decoder.read_num::<u8>(offset);
628
629            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
630            Ok(())
631        }
632    }
633
634    impl fidl::encoding::ValueTypeMarker for AntennaId {
635        type Borrowed<'a> = &'a Self;
636        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
637            value
638        }
639    }
640
641    unsafe impl fidl::encoding::TypeMarker for AntennaId {
642        type Owned = Self;
643
644        #[inline(always)]
645        fn inline_align(_context: fidl::encoding::Context) -> usize {
646            1
647        }
648
649        #[inline(always)]
650        fn inline_size(_context: fidl::encoding::Context) -> usize {
651            2
652        }
653    }
654
655    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AntennaId, D>
656        for &AntennaId
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::<AntennaId>(offset);
666            // Delegate to tuple encoding.
667            fidl::encoding::Encode::<AntennaId, D>::encode(
668                (
669                    <AntennaFreq as fidl::encoding::ValueTypeMarker>::borrow(&self.freq),
670                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.index),
671                ),
672                encoder,
673                offset,
674                _depth,
675            )
676        }
677    }
678    unsafe impl<
679        D: fidl::encoding::ResourceDialect,
680        T0: fidl::encoding::Encode<AntennaFreq, D>,
681        T1: fidl::encoding::Encode<u8, D>,
682    > fidl::encoding::Encode<AntennaId, D> for (T0, T1)
683    {
684        #[inline]
685        unsafe fn encode(
686            self,
687            encoder: &mut fidl::encoding::Encoder<'_, D>,
688            offset: usize,
689            depth: fidl::encoding::Depth,
690        ) -> fidl::Result<()> {
691            encoder.debug_check_bounds::<AntennaId>(offset);
692            // Zero out padding regions. There's no need to apply masks
693            // because the unmasked parts will be overwritten by fields.
694            // Write the fields.
695            self.0.encode(encoder, offset + 0, depth)?;
696            self.1.encode(encoder, offset + 1, depth)?;
697            Ok(())
698        }
699    }
700
701    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AntennaId {
702        #[inline(always)]
703        fn new_empty() -> Self {
704            Self { freq: fidl::new_empty!(AntennaFreq, D), index: fidl::new_empty!(u8, D) }
705        }
706
707        #[inline]
708        unsafe fn decode(
709            &mut self,
710            decoder: &mut fidl::encoding::Decoder<'_, D>,
711            offset: usize,
712            _depth: fidl::encoding::Depth,
713        ) -> fidl::Result<()> {
714            decoder.debug_check_bounds::<Self>(offset);
715            // Verify that padding bytes are zero.
716            fidl::decode!(AntennaFreq, D, &mut self.freq, decoder, offset + 0, _depth)?;
717            fidl::decode!(u8, D, &mut self.index, decoder, offset + 1, _depth)?;
718            Ok(())
719        }
720    }
721
722    impl fidl::encoding::ValueTypeMarker for HistBucket {
723        type Borrowed<'a> = &'a Self;
724        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
725            value
726        }
727    }
728
729    unsafe impl fidl::encoding::TypeMarker for HistBucket {
730        type Owned = Self;
731
732        #[inline(always)]
733        fn inline_align(_context: fidl::encoding::Context) -> usize {
734            8
735        }
736
737        #[inline(always)]
738        fn inline_size(_context: fidl::encoding::Context) -> usize {
739            16
740        }
741    }
742
743    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HistBucket, D>
744        for &HistBucket
745    {
746        #[inline]
747        unsafe fn encode(
748            self,
749            encoder: &mut fidl::encoding::Encoder<'_, D>,
750            offset: usize,
751            _depth: fidl::encoding::Depth,
752        ) -> fidl::Result<()> {
753            encoder.debug_check_bounds::<HistBucket>(offset);
754            unsafe {
755                // Copy the object into the buffer.
756                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
757                (buf_ptr as *mut HistBucket).write_unaligned((self as *const HistBucket).read());
758                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
759                // done second because the memcpy will write garbage to these bytes.
760                let padding_ptr = buf_ptr.offset(0) as *mut u64;
761                let padding_mask = 0xffffffffffff0000u64;
762                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
763            }
764            Ok(())
765        }
766    }
767    unsafe impl<
768        D: fidl::encoding::ResourceDialect,
769        T0: fidl::encoding::Encode<u16, D>,
770        T1: fidl::encoding::Encode<u64, D>,
771    > fidl::encoding::Encode<HistBucket, D> for (T0, T1)
772    {
773        #[inline]
774        unsafe fn encode(
775            self,
776            encoder: &mut fidl::encoding::Encoder<'_, D>,
777            offset: usize,
778            depth: fidl::encoding::Depth,
779        ) -> fidl::Result<()> {
780            encoder.debug_check_bounds::<HistBucket>(offset);
781            // Zero out padding regions. There's no need to apply masks
782            // because the unmasked parts will be overwritten by fields.
783            unsafe {
784                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
785                (ptr as *mut u64).write_unaligned(0);
786            }
787            // Write the fields.
788            self.0.encode(encoder, offset + 0, depth)?;
789            self.1.encode(encoder, offset + 8, depth)?;
790            Ok(())
791        }
792    }
793
794    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HistBucket {
795        #[inline(always)]
796        fn new_empty() -> Self {
797            Self { bucket_index: fidl::new_empty!(u16, D), num_samples: fidl::new_empty!(u64, D) }
798        }
799
800        #[inline]
801        unsafe fn decode(
802            &mut self,
803            decoder: &mut fidl::encoding::Decoder<'_, D>,
804            offset: usize,
805            _depth: fidl::encoding::Depth,
806        ) -> fidl::Result<()> {
807            decoder.debug_check_bounds::<Self>(offset);
808            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
809            // Verify that padding bytes are zero.
810            let ptr = unsafe { buf_ptr.offset(0) };
811            let padval = unsafe { (ptr as *const u64).read_unaligned() };
812            let mask = 0xffffffffffff0000u64;
813            let maskedval = padval & mask;
814            if maskedval != 0 {
815                return Err(fidl::Error::NonZeroPadding {
816                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
817                });
818            }
819            // Copy from the buffer into the object.
820            unsafe {
821                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
822            }
823            Ok(())
824        }
825    }
826
827    impl fidl::encoding::ValueTypeMarker for NoiseFloorHistogram {
828        type Borrowed<'a> = &'a Self;
829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
830            value
831        }
832    }
833
834    unsafe impl fidl::encoding::TypeMarker for NoiseFloorHistogram {
835        type Owned = Self;
836
837        #[inline(always)]
838        fn inline_align(_context: fidl::encoding::Context) -> usize {
839            8
840        }
841
842        #[inline(always)]
843        fn inline_size(_context: fidl::encoding::Context) -> usize {
844            40
845        }
846    }
847
848    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NoiseFloorHistogram, D>
849        for &NoiseFloorHistogram
850    {
851        #[inline]
852        unsafe fn encode(
853            self,
854            encoder: &mut fidl::encoding::Encoder<'_, D>,
855            offset: usize,
856            _depth: fidl::encoding::Depth,
857        ) -> fidl::Result<()> {
858            encoder.debug_check_bounds::<NoiseFloorHistogram>(offset);
859            // Delegate to tuple encoding.
860            fidl::encoding::Encode::<NoiseFloorHistogram, D>::encode(
861                (
862                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
863                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
864                    <fidl::encoding::Vector<HistBucket, 255> as fidl::encoding::ValueTypeMarker>::borrow(&self.noise_floor_samples),
865                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
866                ),
867                encoder, offset, _depth
868            )
869        }
870    }
871    unsafe impl<
872        D: fidl::encoding::ResourceDialect,
873        T0: fidl::encoding::Encode<HistScope, D>,
874        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
875        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 255>, D>,
876        T3: fidl::encoding::Encode<u64, D>,
877    > fidl::encoding::Encode<NoiseFloorHistogram, D> for (T0, T1, T2, T3)
878    {
879        #[inline]
880        unsafe fn encode(
881            self,
882            encoder: &mut fidl::encoding::Encoder<'_, D>,
883            offset: usize,
884            depth: fidl::encoding::Depth,
885        ) -> fidl::Result<()> {
886            encoder.debug_check_bounds::<NoiseFloorHistogram>(offset);
887            // Zero out padding regions. There's no need to apply masks
888            // because the unmasked parts will be overwritten by fields.
889            unsafe {
890                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
891                (ptr as *mut u64).write_unaligned(0);
892            }
893            // Write the fields.
894            self.0.encode(encoder, offset + 0, depth)?;
895            self.1.encode(encoder, offset + 8, depth)?;
896            self.2.encode(encoder, offset + 16, depth)?;
897            self.3.encode(encoder, offset + 32, depth)?;
898            Ok(())
899        }
900    }
901
902    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NoiseFloorHistogram {
903        #[inline(always)]
904        fn new_empty() -> Self {
905            Self {
906                hist_scope: fidl::new_empty!(HistScope, D),
907                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
908                noise_floor_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 255>, D),
909                invalid_samples: fidl::new_empty!(u64, D),
910            }
911        }
912
913        #[inline]
914        unsafe fn decode(
915            &mut self,
916            decoder: &mut fidl::encoding::Decoder<'_, D>,
917            offset: usize,
918            _depth: fidl::encoding::Depth,
919        ) -> fidl::Result<()> {
920            decoder.debug_check_bounds::<Self>(offset);
921            // Verify that padding bytes are zero.
922            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
923            let padval = unsafe { (ptr as *const u64).read_unaligned() };
924            let mask = 0xffffffffffffff00u64;
925            let maskedval = padval & mask;
926            if maskedval != 0 {
927                return Err(fidl::Error::NonZeroPadding {
928                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
929                });
930            }
931            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
932            fidl::decode!(
933                fidl::encoding::Boxed<AntennaId>,
934                D,
935                &mut self.antenna_id,
936                decoder,
937                offset + 8,
938                _depth
939            )?;
940            fidl::decode!(fidl::encoding::Vector<HistBucket, 255>, D, &mut self.noise_floor_samples, decoder, offset + 16, _depth)?;
941            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
942            Ok(())
943        }
944    }
945
946    impl fidl::encoding::ValueTypeMarker for RssiHistogram {
947        type Borrowed<'a> = &'a Self;
948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
949            value
950        }
951    }
952
953    unsafe impl fidl::encoding::TypeMarker for RssiHistogram {
954        type Owned = Self;
955
956        #[inline(always)]
957        fn inline_align(_context: fidl::encoding::Context) -> usize {
958            8
959        }
960
961        #[inline(always)]
962        fn inline_size(_context: fidl::encoding::Context) -> usize {
963            40
964        }
965    }
966
967    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RssiHistogram, D>
968        for &RssiHistogram
969    {
970        #[inline]
971        unsafe fn encode(
972            self,
973            encoder: &mut fidl::encoding::Encoder<'_, D>,
974            offset: usize,
975            _depth: fidl::encoding::Depth,
976        ) -> fidl::Result<()> {
977            encoder.debug_check_bounds::<RssiHistogram>(offset);
978            // Delegate to tuple encoding.
979            fidl::encoding::Encode::<RssiHistogram, D>::encode(
980                (
981                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
982                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
983                    <fidl::encoding::Vector<HistBucket, 255> as fidl::encoding::ValueTypeMarker>::borrow(&self.rssi_samples),
984                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
985                ),
986                encoder, offset, _depth
987            )
988        }
989    }
990    unsafe impl<
991        D: fidl::encoding::ResourceDialect,
992        T0: fidl::encoding::Encode<HistScope, D>,
993        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
994        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 255>, D>,
995        T3: fidl::encoding::Encode<u64, D>,
996    > fidl::encoding::Encode<RssiHistogram, D> for (T0, T1, T2, T3)
997    {
998        #[inline]
999        unsafe fn encode(
1000            self,
1001            encoder: &mut fidl::encoding::Encoder<'_, D>,
1002            offset: usize,
1003            depth: fidl::encoding::Depth,
1004        ) -> fidl::Result<()> {
1005            encoder.debug_check_bounds::<RssiHistogram>(offset);
1006            // Zero out padding regions. There's no need to apply masks
1007            // because the unmasked parts will be overwritten by fields.
1008            unsafe {
1009                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1010                (ptr as *mut u64).write_unaligned(0);
1011            }
1012            // Write the fields.
1013            self.0.encode(encoder, offset + 0, depth)?;
1014            self.1.encode(encoder, offset + 8, depth)?;
1015            self.2.encode(encoder, offset + 16, depth)?;
1016            self.3.encode(encoder, offset + 32, depth)?;
1017            Ok(())
1018        }
1019    }
1020
1021    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RssiHistogram {
1022        #[inline(always)]
1023        fn new_empty() -> Self {
1024            Self {
1025                hist_scope: fidl::new_empty!(HistScope, D),
1026                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
1027                rssi_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 255>, D),
1028                invalid_samples: fidl::new_empty!(u64, D),
1029            }
1030        }
1031
1032        #[inline]
1033        unsafe fn decode(
1034            &mut self,
1035            decoder: &mut fidl::encoding::Decoder<'_, D>,
1036            offset: usize,
1037            _depth: fidl::encoding::Depth,
1038        ) -> fidl::Result<()> {
1039            decoder.debug_check_bounds::<Self>(offset);
1040            // Verify that padding bytes are zero.
1041            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1042            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1043            let mask = 0xffffffffffffff00u64;
1044            let maskedval = padval & mask;
1045            if maskedval != 0 {
1046                return Err(fidl::Error::NonZeroPadding {
1047                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1048                });
1049            }
1050            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
1051            fidl::decode!(
1052                fidl::encoding::Boxed<AntennaId>,
1053                D,
1054                &mut self.antenna_id,
1055                decoder,
1056                offset + 8,
1057                _depth
1058            )?;
1059            fidl::decode!(fidl::encoding::Vector<HistBucket, 255>, D, &mut self.rssi_samples, decoder, offset + 16, _depth)?;
1060            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
1061            Ok(())
1062        }
1063    }
1064
1065    impl fidl::encoding::ValueTypeMarker for RxRateIndexHistogram {
1066        type Borrowed<'a> = &'a Self;
1067        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1068            value
1069        }
1070    }
1071
1072    unsafe impl fidl::encoding::TypeMarker for RxRateIndexHistogram {
1073        type Owned = Self;
1074
1075        #[inline(always)]
1076        fn inline_align(_context: fidl::encoding::Context) -> usize {
1077            8
1078        }
1079
1080        #[inline(always)]
1081        fn inline_size(_context: fidl::encoding::Context) -> usize {
1082            40
1083        }
1084    }
1085
1086    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RxRateIndexHistogram, D>
1087        for &RxRateIndexHistogram
1088    {
1089        #[inline]
1090        unsafe fn encode(
1091            self,
1092            encoder: &mut fidl::encoding::Encoder<'_, D>,
1093            offset: usize,
1094            _depth: fidl::encoding::Depth,
1095        ) -> fidl::Result<()> {
1096            encoder.debug_check_bounds::<RxRateIndexHistogram>(offset);
1097            // Delegate to tuple encoding.
1098            fidl::encoding::Encode::<RxRateIndexHistogram, D>::encode(
1099                (
1100                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
1101                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
1102                    <fidl::encoding::Vector<HistBucket, 196> as fidl::encoding::ValueTypeMarker>::borrow(&self.rx_rate_index_samples),
1103                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
1104                ),
1105                encoder, offset, _depth
1106            )
1107        }
1108    }
1109    unsafe impl<
1110        D: fidl::encoding::ResourceDialect,
1111        T0: fidl::encoding::Encode<HistScope, D>,
1112        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
1113        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 196>, D>,
1114        T3: fidl::encoding::Encode<u64, D>,
1115    > fidl::encoding::Encode<RxRateIndexHistogram, D> for (T0, T1, T2, T3)
1116    {
1117        #[inline]
1118        unsafe fn encode(
1119            self,
1120            encoder: &mut fidl::encoding::Encoder<'_, D>,
1121            offset: usize,
1122            depth: fidl::encoding::Depth,
1123        ) -> fidl::Result<()> {
1124            encoder.debug_check_bounds::<RxRateIndexHistogram>(offset);
1125            // Zero out padding regions. There's no need to apply masks
1126            // because the unmasked parts will be overwritten by fields.
1127            unsafe {
1128                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1129                (ptr as *mut u64).write_unaligned(0);
1130            }
1131            // Write the fields.
1132            self.0.encode(encoder, offset + 0, depth)?;
1133            self.1.encode(encoder, offset + 8, depth)?;
1134            self.2.encode(encoder, offset + 16, depth)?;
1135            self.3.encode(encoder, offset + 32, depth)?;
1136            Ok(())
1137        }
1138    }
1139
1140    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RxRateIndexHistogram {
1141        #[inline(always)]
1142        fn new_empty() -> Self {
1143            Self {
1144                hist_scope: fidl::new_empty!(HistScope, D),
1145                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
1146                rx_rate_index_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 196>, D),
1147                invalid_samples: fidl::new_empty!(u64, D),
1148            }
1149        }
1150
1151        #[inline]
1152        unsafe fn decode(
1153            &mut self,
1154            decoder: &mut fidl::encoding::Decoder<'_, D>,
1155            offset: usize,
1156            _depth: fidl::encoding::Depth,
1157        ) -> fidl::Result<()> {
1158            decoder.debug_check_bounds::<Self>(offset);
1159            // Verify that padding bytes are zero.
1160            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1161            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1162            let mask = 0xffffffffffffff00u64;
1163            let maskedval = padval & mask;
1164            if maskedval != 0 {
1165                return Err(fidl::Error::NonZeroPadding {
1166                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1167                });
1168            }
1169            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
1170            fidl::decode!(
1171                fidl::encoding::Boxed<AntennaId>,
1172                D,
1173                &mut self.antenna_id,
1174                decoder,
1175                offset + 8,
1176                _depth
1177            )?;
1178            fidl::decode!(fidl::encoding::Vector<HistBucket, 196>, D, &mut self.rx_rate_index_samples, decoder, offset + 16, _depth)?;
1179            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
1180            Ok(())
1181        }
1182    }
1183
1184    impl fidl::encoding::ValueTypeMarker for SnrHistogram {
1185        type Borrowed<'a> = &'a Self;
1186        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1187            value
1188        }
1189    }
1190
1191    unsafe impl fidl::encoding::TypeMarker for SnrHistogram {
1192        type Owned = Self;
1193
1194        #[inline(always)]
1195        fn inline_align(_context: fidl::encoding::Context) -> usize {
1196            8
1197        }
1198
1199        #[inline(always)]
1200        fn inline_size(_context: fidl::encoding::Context) -> usize {
1201            40
1202        }
1203    }
1204
1205    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SnrHistogram, D>
1206        for &SnrHistogram
1207    {
1208        #[inline]
1209        unsafe fn encode(
1210            self,
1211            encoder: &mut fidl::encoding::Encoder<'_, D>,
1212            offset: usize,
1213            _depth: fidl::encoding::Depth,
1214        ) -> fidl::Result<()> {
1215            encoder.debug_check_bounds::<SnrHistogram>(offset);
1216            // Delegate to tuple encoding.
1217            fidl::encoding::Encode::<SnrHistogram, D>::encode(
1218                (
1219                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
1220                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
1221                    <fidl::encoding::Vector<HistBucket, 256> as fidl::encoding::ValueTypeMarker>::borrow(&self.snr_samples),
1222                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
1223                ),
1224                encoder, offset, _depth
1225            )
1226        }
1227    }
1228    unsafe impl<
1229        D: fidl::encoding::ResourceDialect,
1230        T0: fidl::encoding::Encode<HistScope, D>,
1231        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
1232        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 256>, D>,
1233        T3: fidl::encoding::Encode<u64, D>,
1234    > fidl::encoding::Encode<SnrHistogram, D> for (T0, T1, T2, T3)
1235    {
1236        #[inline]
1237        unsafe fn encode(
1238            self,
1239            encoder: &mut fidl::encoding::Encoder<'_, D>,
1240            offset: usize,
1241            depth: fidl::encoding::Depth,
1242        ) -> fidl::Result<()> {
1243            encoder.debug_check_bounds::<SnrHistogram>(offset);
1244            // Zero out padding regions. There's no need to apply masks
1245            // because the unmasked parts will be overwritten by fields.
1246            unsafe {
1247                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1248                (ptr as *mut u64).write_unaligned(0);
1249            }
1250            // Write the fields.
1251            self.0.encode(encoder, offset + 0, depth)?;
1252            self.1.encode(encoder, offset + 8, depth)?;
1253            self.2.encode(encoder, offset + 16, depth)?;
1254            self.3.encode(encoder, offset + 32, depth)?;
1255            Ok(())
1256        }
1257    }
1258
1259    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SnrHistogram {
1260        #[inline(always)]
1261        fn new_empty() -> Self {
1262            Self {
1263                hist_scope: fidl::new_empty!(HistScope, D),
1264                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
1265                snr_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 256>, D),
1266                invalid_samples: fidl::new_empty!(u64, D),
1267            }
1268        }
1269
1270        #[inline]
1271        unsafe fn decode(
1272            &mut self,
1273            decoder: &mut fidl::encoding::Decoder<'_, D>,
1274            offset: usize,
1275            _depth: fidl::encoding::Depth,
1276        ) -> fidl::Result<()> {
1277            decoder.debug_check_bounds::<Self>(offset);
1278            // Verify that padding bytes are zero.
1279            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1280            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1281            let mask = 0xffffffffffffff00u64;
1282            let maskedval = padval & mask;
1283            if maskedval != 0 {
1284                return Err(fidl::Error::NonZeroPadding {
1285                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1286                });
1287            }
1288            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
1289            fidl::decode!(
1290                fidl::encoding::Boxed<AntennaId>,
1291                D,
1292                &mut self.antenna_id,
1293                decoder,
1294                offset + 8,
1295                _depth
1296            )?;
1297            fidl::decode!(fidl::encoding::Vector<HistBucket, 256>, D, &mut self.snr_samples, decoder, offset + 16, _depth)?;
1298            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
1299            Ok(())
1300        }
1301    }
1302
1303    impl fidl::encoding::ValueTypeMarker for UnnamedCounter {
1304        type Borrowed<'a> = &'a Self;
1305        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1306            value
1307        }
1308    }
1309
1310    unsafe impl fidl::encoding::TypeMarker for UnnamedCounter {
1311        type Owned = Self;
1312
1313        #[inline(always)]
1314        fn inline_align(_context: fidl::encoding::Context) -> usize {
1315            8
1316        }
1317
1318        #[inline(always)]
1319        fn inline_size(_context: fidl::encoding::Context) -> usize {
1320            16
1321        }
1322    }
1323
1324    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UnnamedCounter, D>
1325        for &UnnamedCounter
1326    {
1327        #[inline]
1328        unsafe fn encode(
1329            self,
1330            encoder: &mut fidl::encoding::Encoder<'_, D>,
1331            offset: usize,
1332            _depth: fidl::encoding::Depth,
1333        ) -> fidl::Result<()> {
1334            encoder.debug_check_bounds::<UnnamedCounter>(offset);
1335            unsafe {
1336                // Copy the object into the buffer.
1337                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1338                (buf_ptr as *mut UnnamedCounter)
1339                    .write_unaligned((self as *const UnnamedCounter).read());
1340                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1341                // done second because the memcpy will write garbage to these bytes.
1342                let padding_ptr = buf_ptr.offset(0) as *mut u64;
1343                let padding_mask = 0xffffffffffff0000u64;
1344                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1345            }
1346            Ok(())
1347        }
1348    }
1349    unsafe impl<
1350        D: fidl::encoding::ResourceDialect,
1351        T0: fidl::encoding::Encode<u16, D>,
1352        T1: fidl::encoding::Encode<u64, D>,
1353    > fidl::encoding::Encode<UnnamedCounter, D> for (T0, T1)
1354    {
1355        #[inline]
1356        unsafe fn encode(
1357            self,
1358            encoder: &mut fidl::encoding::Encoder<'_, D>,
1359            offset: usize,
1360            depth: fidl::encoding::Depth,
1361        ) -> fidl::Result<()> {
1362            encoder.debug_check_bounds::<UnnamedCounter>(offset);
1363            // Zero out padding regions. There's no need to apply masks
1364            // because the unmasked parts will be overwritten by fields.
1365            unsafe {
1366                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1367                (ptr as *mut u64).write_unaligned(0);
1368            }
1369            // Write the fields.
1370            self.0.encode(encoder, offset + 0, depth)?;
1371            self.1.encode(encoder, offset + 8, depth)?;
1372            Ok(())
1373        }
1374    }
1375
1376    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UnnamedCounter {
1377        #[inline(always)]
1378        fn new_empty() -> Self {
1379            Self { id: fidl::new_empty!(u16, D), count: fidl::new_empty!(u64, D) }
1380        }
1381
1382        #[inline]
1383        unsafe fn decode(
1384            &mut self,
1385            decoder: &mut fidl::encoding::Decoder<'_, D>,
1386            offset: usize,
1387            _depth: fidl::encoding::Depth,
1388        ) -> fidl::Result<()> {
1389            decoder.debug_check_bounds::<Self>(offset);
1390            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1391            // Verify that padding bytes are zero.
1392            let ptr = unsafe { buf_ptr.offset(0) };
1393            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1394            let mask = 0xffffffffffff0000u64;
1395            let maskedval = padval & mask;
1396            if maskedval != 0 {
1397                return Err(fidl::Error::NonZeroPadding {
1398                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1399                });
1400            }
1401            // Copy from the buffer into the object.
1402            unsafe {
1403                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1404            }
1405            Ok(())
1406        }
1407    }
1408
1409    impl fidl::encoding::ValueTypeMarker for UnnamedGauge {
1410        type Borrowed<'a> = &'a Self;
1411        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1412            value
1413        }
1414    }
1415
1416    unsafe impl fidl::encoding::TypeMarker for UnnamedGauge {
1417        type Owned = Self;
1418
1419        #[inline(always)]
1420        fn inline_align(_context: fidl::encoding::Context) -> usize {
1421            8
1422        }
1423
1424        #[inline(always)]
1425        fn inline_size(_context: fidl::encoding::Context) -> usize {
1426            16
1427        }
1428    }
1429
1430    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UnnamedGauge, D>
1431        for &UnnamedGauge
1432    {
1433        #[inline]
1434        unsafe fn encode(
1435            self,
1436            encoder: &mut fidl::encoding::Encoder<'_, D>,
1437            offset: usize,
1438            _depth: fidl::encoding::Depth,
1439        ) -> fidl::Result<()> {
1440            encoder.debug_check_bounds::<UnnamedGauge>(offset);
1441            unsafe {
1442                // Copy the object into the buffer.
1443                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1444                (buf_ptr as *mut UnnamedGauge)
1445                    .write_unaligned((self as *const UnnamedGauge).read());
1446                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1447                // done second because the memcpy will write garbage to these bytes.
1448                let padding_ptr = buf_ptr.offset(0) as *mut u64;
1449                let padding_mask = 0xffffffffffff0000u64;
1450                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1451            }
1452            Ok(())
1453        }
1454    }
1455    unsafe impl<
1456        D: fidl::encoding::ResourceDialect,
1457        T0: fidl::encoding::Encode<u16, D>,
1458        T1: fidl::encoding::Encode<i64, D>,
1459    > fidl::encoding::Encode<UnnamedGauge, D> for (T0, T1)
1460    {
1461        #[inline]
1462        unsafe fn encode(
1463            self,
1464            encoder: &mut fidl::encoding::Encoder<'_, D>,
1465            offset: usize,
1466            depth: fidl::encoding::Depth,
1467        ) -> fidl::Result<()> {
1468            encoder.debug_check_bounds::<UnnamedGauge>(offset);
1469            // Zero out padding regions. There's no need to apply masks
1470            // because the unmasked parts will be overwritten by fields.
1471            unsafe {
1472                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1473                (ptr as *mut u64).write_unaligned(0);
1474            }
1475            // Write the fields.
1476            self.0.encode(encoder, offset + 0, depth)?;
1477            self.1.encode(encoder, offset + 8, depth)?;
1478            Ok(())
1479        }
1480    }
1481
1482    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UnnamedGauge {
1483        #[inline(always)]
1484        fn new_empty() -> Self {
1485            Self { id: fidl::new_empty!(u16, D), value: fidl::new_empty!(i64, D) }
1486        }
1487
1488        #[inline]
1489        unsafe fn decode(
1490            &mut self,
1491            decoder: &mut fidl::encoding::Decoder<'_, D>,
1492            offset: usize,
1493            _depth: fidl::encoding::Depth,
1494        ) -> fidl::Result<()> {
1495            decoder.debug_check_bounds::<Self>(offset);
1496            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1497            // Verify that padding bytes are zero.
1498            let ptr = unsafe { buf_ptr.offset(0) };
1499            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1500            let mask = 0xffffffffffff0000u64;
1501            let maskedval = padval & mask;
1502            if maskedval != 0 {
1503                return Err(fidl::Error::NonZeroPadding {
1504                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1505                });
1506            }
1507            // Copy from the buffer into the object.
1508            unsafe {
1509                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1510            }
1511            Ok(())
1512        }
1513    }
1514
1515    impl ConnectionSignalReport {
1516        #[inline(always)]
1517        fn max_ordinal_present(&self) -> u64 {
1518            if let Some(_) = self.vht_secondary_80_channel {
1519                return 6;
1520            }
1521            if let Some(_) = self.bandwidth {
1522                return 5;
1523            }
1524            if let Some(_) = self.snr_db {
1525                return 4;
1526            }
1527            if let Some(_) = self.rssi_dbm {
1528                return 3;
1529            }
1530            if let Some(_) = self.tx_rate_500kbps {
1531                return 2;
1532            }
1533            if let Some(_) = self.primary {
1534                return 1;
1535            }
1536            0
1537        }
1538    }
1539
1540    impl fidl::encoding::ValueTypeMarker for ConnectionSignalReport {
1541        type Borrowed<'a> = &'a Self;
1542        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1543            value
1544        }
1545    }
1546
1547    unsafe impl fidl::encoding::TypeMarker for ConnectionSignalReport {
1548        type Owned = Self;
1549
1550        #[inline(always)]
1551        fn inline_align(_context: fidl::encoding::Context) -> usize {
1552            8
1553        }
1554
1555        #[inline(always)]
1556        fn inline_size(_context: fidl::encoding::Context) -> usize {
1557            16
1558        }
1559    }
1560
1561    unsafe impl<D: fidl::encoding::ResourceDialect>
1562        fidl::encoding::Encode<ConnectionSignalReport, D> for &ConnectionSignalReport
1563    {
1564        unsafe fn encode(
1565            self,
1566            encoder: &mut fidl::encoding::Encoder<'_, D>,
1567            offset: usize,
1568            mut depth: fidl::encoding::Depth,
1569        ) -> fidl::Result<()> {
1570            encoder.debug_check_bounds::<ConnectionSignalReport>(offset);
1571            // Vector header
1572            let max_ordinal: u64 = self.max_ordinal_present();
1573            encoder.write_num(max_ordinal, offset);
1574            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1575            // Calling encoder.out_of_line_offset(0) is not allowed.
1576            if max_ordinal == 0 {
1577                return Ok(());
1578            }
1579            depth.increment()?;
1580            let envelope_size = 8;
1581            let bytes_len = max_ordinal as usize * envelope_size;
1582            #[allow(unused_variables)]
1583            let offset = encoder.out_of_line_offset(bytes_len);
1584            let mut _prev_end_offset: usize = 0;
1585            if 1 > max_ordinal {
1586                return Ok(());
1587            }
1588
1589            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1590            // are envelope_size bytes.
1591            let cur_offset: usize = (1 - 1) * envelope_size;
1592
1593            // Zero reserved fields.
1594            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1595
1596            // Safety:
1597            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1598            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1599            //   envelope_size bytes, there is always sufficient room.
1600            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_ieee80211_common::ChannelNumber, D>(
1601            self.primary.as_ref().map(<fidl_fuchsia_wlan_ieee80211_common::ChannelNumber as fidl::encoding::ValueTypeMarker>::borrow),
1602            encoder, offset + cur_offset, depth
1603        )?;
1604
1605            _prev_end_offset = cur_offset + envelope_size;
1606            if 2 > max_ordinal {
1607                return Ok(());
1608            }
1609
1610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1611            // are envelope_size bytes.
1612            let cur_offset: usize = (2 - 1) * envelope_size;
1613
1614            // Zero reserved fields.
1615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1616
1617            // Safety:
1618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1620            //   envelope_size bytes, there is always sufficient room.
1621            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1622                self.tx_rate_500kbps.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1623                encoder,
1624                offset + cur_offset,
1625                depth,
1626            )?;
1627
1628            _prev_end_offset = cur_offset + envelope_size;
1629            if 3 > max_ordinal {
1630                return Ok(());
1631            }
1632
1633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1634            // are envelope_size bytes.
1635            let cur_offset: usize = (3 - 1) * envelope_size;
1636
1637            // Zero reserved fields.
1638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1639
1640            // Safety:
1641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1643            //   envelope_size bytes, there is always sufficient room.
1644            fidl::encoding::encode_in_envelope_optional::<i8, D>(
1645                self.rssi_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
1646                encoder,
1647                offset + cur_offset,
1648                depth,
1649            )?;
1650
1651            _prev_end_offset = cur_offset + envelope_size;
1652            if 4 > max_ordinal {
1653                return Ok(());
1654            }
1655
1656            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1657            // are envelope_size bytes.
1658            let cur_offset: usize = (4 - 1) * envelope_size;
1659
1660            // Zero reserved fields.
1661            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1662
1663            // Safety:
1664            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1665            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1666            //   envelope_size bytes, there is always sufficient room.
1667            fidl::encoding::encode_in_envelope_optional::<i8, D>(
1668                self.snr_db.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
1669                encoder,
1670                offset + cur_offset,
1671                depth,
1672            )?;
1673
1674            _prev_end_offset = cur_offset + envelope_size;
1675            if 5 > max_ordinal {
1676                return Ok(());
1677            }
1678
1679            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1680            // are envelope_size bytes.
1681            let cur_offset: usize = (5 - 1) * envelope_size;
1682
1683            // Zero reserved fields.
1684            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1685
1686            // Safety:
1687            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1688            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1689            //   envelope_size bytes, there is always sufficient room.
1690            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_ieee80211_common::ChannelBandwidth, D>(
1691            self.bandwidth.as_ref().map(<fidl_fuchsia_wlan_ieee80211_common::ChannelBandwidth as fidl::encoding::ValueTypeMarker>::borrow),
1692            encoder, offset + cur_offset, depth
1693        )?;
1694
1695            _prev_end_offset = cur_offset + envelope_size;
1696            if 6 > max_ordinal {
1697                return Ok(());
1698            }
1699
1700            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1701            // are envelope_size bytes.
1702            let cur_offset: usize = (6 - 1) * envelope_size;
1703
1704            // Zero reserved fields.
1705            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1706
1707            // Safety:
1708            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1709            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1710            //   envelope_size bytes, there is always sufficient room.
1711            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_ieee80211_common::ChannelNumber, D>(
1712            self.vht_secondary_80_channel.as_ref().map(<fidl_fuchsia_wlan_ieee80211_common::ChannelNumber as fidl::encoding::ValueTypeMarker>::borrow),
1713            encoder, offset + cur_offset, depth
1714        )?;
1715
1716            _prev_end_offset = cur_offset + envelope_size;
1717
1718            Ok(())
1719        }
1720    }
1721
1722    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1723        for ConnectionSignalReport
1724    {
1725        #[inline(always)]
1726        fn new_empty() -> Self {
1727            Self::default()
1728        }
1729
1730        unsafe fn decode(
1731            &mut self,
1732            decoder: &mut fidl::encoding::Decoder<'_, D>,
1733            offset: usize,
1734            mut depth: fidl::encoding::Depth,
1735        ) -> fidl::Result<()> {
1736            decoder.debug_check_bounds::<Self>(offset);
1737            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1738                None => return Err(fidl::Error::NotNullable),
1739                Some(len) => len,
1740            };
1741            // Calling decoder.out_of_line_offset(0) is not allowed.
1742            if len == 0 {
1743                return Ok(());
1744            };
1745            depth.increment()?;
1746            let envelope_size = 8;
1747            let bytes_len = len * envelope_size;
1748            let offset = decoder.out_of_line_offset(bytes_len)?;
1749            // Decode the envelope for each type.
1750            let mut _next_ordinal_to_read = 0;
1751            let mut next_offset = offset;
1752            let end_offset = offset + bytes_len;
1753            _next_ordinal_to_read += 1;
1754            if next_offset >= end_offset {
1755                return Ok(());
1756            }
1757
1758            // Decode unknown envelopes for gaps in ordinals.
1759            while _next_ordinal_to_read < 1 {
1760                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1761                _next_ordinal_to_read += 1;
1762                next_offset += envelope_size;
1763            }
1764
1765            let next_out_of_line = decoder.next_out_of_line();
1766            let handles_before = decoder.remaining_handles();
1767            if let Some((inlined, num_bytes, num_handles)) =
1768                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1769            {
1770                let member_inline_size = <fidl_fuchsia_wlan_ieee80211_common::ChannelNumber as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1771                if inlined != (member_inline_size <= 4) {
1772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1773                }
1774                let inner_offset;
1775                let mut inner_depth = depth.clone();
1776                if inlined {
1777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1778                    inner_offset = next_offset;
1779                } else {
1780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1781                    inner_depth.increment()?;
1782                }
1783                let val_ref = self.primary.get_or_insert_with(|| {
1784                    fidl::new_empty!(fidl_fuchsia_wlan_ieee80211_common::ChannelNumber, D)
1785                });
1786                fidl::decode!(
1787                    fidl_fuchsia_wlan_ieee80211_common::ChannelNumber,
1788                    D,
1789                    val_ref,
1790                    decoder,
1791                    inner_offset,
1792                    inner_depth
1793                )?;
1794                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1795                {
1796                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1797                }
1798                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1799                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1800                }
1801            }
1802
1803            next_offset += envelope_size;
1804            _next_ordinal_to_read += 1;
1805            if next_offset >= end_offset {
1806                return Ok(());
1807            }
1808
1809            // Decode unknown envelopes for gaps in ordinals.
1810            while _next_ordinal_to_read < 2 {
1811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1812                _next_ordinal_to_read += 1;
1813                next_offset += envelope_size;
1814            }
1815
1816            let next_out_of_line = decoder.next_out_of_line();
1817            let handles_before = decoder.remaining_handles();
1818            if let Some((inlined, num_bytes, num_handles)) =
1819                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1820            {
1821                let member_inline_size =
1822                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1823                if inlined != (member_inline_size <= 4) {
1824                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1825                }
1826                let inner_offset;
1827                let mut inner_depth = depth.clone();
1828                if inlined {
1829                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1830                    inner_offset = next_offset;
1831                } else {
1832                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1833                    inner_depth.increment()?;
1834                }
1835                let val_ref = self.tx_rate_500kbps.get_or_insert_with(|| fidl::new_empty!(u32, D));
1836                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1837                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1838                {
1839                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1840                }
1841                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1842                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1843                }
1844            }
1845
1846            next_offset += envelope_size;
1847            _next_ordinal_to_read += 1;
1848            if next_offset >= end_offset {
1849                return Ok(());
1850            }
1851
1852            // Decode unknown envelopes for gaps in ordinals.
1853            while _next_ordinal_to_read < 3 {
1854                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1855                _next_ordinal_to_read += 1;
1856                next_offset += envelope_size;
1857            }
1858
1859            let next_out_of_line = decoder.next_out_of_line();
1860            let handles_before = decoder.remaining_handles();
1861            if let Some((inlined, num_bytes, num_handles)) =
1862                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1863            {
1864                let member_inline_size =
1865                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1866                if inlined != (member_inline_size <= 4) {
1867                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1868                }
1869                let inner_offset;
1870                let mut inner_depth = depth.clone();
1871                if inlined {
1872                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1873                    inner_offset = next_offset;
1874                } else {
1875                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1876                    inner_depth.increment()?;
1877                }
1878                let val_ref = self.rssi_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
1879                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
1880                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1881                {
1882                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1883                }
1884                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1885                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1886                }
1887            }
1888
1889            next_offset += envelope_size;
1890            _next_ordinal_to_read += 1;
1891            if next_offset >= end_offset {
1892                return Ok(());
1893            }
1894
1895            // Decode unknown envelopes for gaps in ordinals.
1896            while _next_ordinal_to_read < 4 {
1897                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1898                _next_ordinal_to_read += 1;
1899                next_offset += envelope_size;
1900            }
1901
1902            let next_out_of_line = decoder.next_out_of_line();
1903            let handles_before = decoder.remaining_handles();
1904            if let Some((inlined, num_bytes, num_handles)) =
1905                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1906            {
1907                let member_inline_size =
1908                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1909                if inlined != (member_inline_size <= 4) {
1910                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1911                }
1912                let inner_offset;
1913                let mut inner_depth = depth.clone();
1914                if inlined {
1915                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1916                    inner_offset = next_offset;
1917                } else {
1918                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1919                    inner_depth.increment()?;
1920                }
1921                let val_ref = self.snr_db.get_or_insert_with(|| fidl::new_empty!(i8, D));
1922                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
1923                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1924                {
1925                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1926                }
1927                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1928                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1929                }
1930            }
1931
1932            next_offset += envelope_size;
1933            _next_ordinal_to_read += 1;
1934            if next_offset >= end_offset {
1935                return Ok(());
1936            }
1937
1938            // Decode unknown envelopes for gaps in ordinals.
1939            while _next_ordinal_to_read < 5 {
1940                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1941                _next_ordinal_to_read += 1;
1942                next_offset += envelope_size;
1943            }
1944
1945            let next_out_of_line = decoder.next_out_of_line();
1946            let handles_before = decoder.remaining_handles();
1947            if let Some((inlined, num_bytes, num_handles)) =
1948                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1949            {
1950                let member_inline_size = <fidl_fuchsia_wlan_ieee80211_common::ChannelBandwidth as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1951                if inlined != (member_inline_size <= 4) {
1952                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1953                }
1954                let inner_offset;
1955                let mut inner_depth = depth.clone();
1956                if inlined {
1957                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1958                    inner_offset = next_offset;
1959                } else {
1960                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1961                    inner_depth.increment()?;
1962                }
1963                let val_ref = self.bandwidth.get_or_insert_with(|| {
1964                    fidl::new_empty!(fidl_fuchsia_wlan_ieee80211_common::ChannelBandwidth, D)
1965                });
1966                fidl::decode!(
1967                    fidl_fuchsia_wlan_ieee80211_common::ChannelBandwidth,
1968                    D,
1969                    val_ref,
1970                    decoder,
1971                    inner_offset,
1972                    inner_depth
1973                )?;
1974                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1975                {
1976                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1977                }
1978                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1979                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1980                }
1981            }
1982
1983            next_offset += envelope_size;
1984            _next_ordinal_to_read += 1;
1985            if next_offset >= end_offset {
1986                return Ok(());
1987            }
1988
1989            // Decode unknown envelopes for gaps in ordinals.
1990            while _next_ordinal_to_read < 6 {
1991                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1992                _next_ordinal_to_read += 1;
1993                next_offset += envelope_size;
1994            }
1995
1996            let next_out_of_line = decoder.next_out_of_line();
1997            let handles_before = decoder.remaining_handles();
1998            if let Some((inlined, num_bytes, num_handles)) =
1999                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2000            {
2001                let member_inline_size = <fidl_fuchsia_wlan_ieee80211_common::ChannelNumber as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2002                if inlined != (member_inline_size <= 4) {
2003                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2004                }
2005                let inner_offset;
2006                let mut inner_depth = depth.clone();
2007                if inlined {
2008                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2009                    inner_offset = next_offset;
2010                } else {
2011                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2012                    inner_depth.increment()?;
2013                }
2014                let val_ref = self.vht_secondary_80_channel.get_or_insert_with(|| {
2015                    fidl::new_empty!(fidl_fuchsia_wlan_ieee80211_common::ChannelNumber, D)
2016                });
2017                fidl::decode!(
2018                    fidl_fuchsia_wlan_ieee80211_common::ChannelNumber,
2019                    D,
2020                    val_ref,
2021                    decoder,
2022                    inner_offset,
2023                    inner_depth
2024                )?;
2025                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2026                {
2027                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2028                }
2029                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2030                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2031                }
2032            }
2033
2034            next_offset += envelope_size;
2035
2036            // Decode the remaining unknown envelopes.
2037            while next_offset < end_offset {
2038                _next_ordinal_to_read += 1;
2039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2040                next_offset += envelope_size;
2041            }
2042
2043            Ok(())
2044        }
2045    }
2046
2047    impl ConnectionStats {
2048        #[inline(always)]
2049        fn max_ordinal_present(&self) -> u64 {
2050            if let Some(_) = self.wme {
2051                return 9;
2052            }
2053            if let Some(_) = self.tx_drop {
2054                return 8;
2055            }
2056            if let Some(_) = self.tx_total {
2057                return 7;
2058            }
2059            if let Some(_) = self.rx_multicast {
2060                return 6;
2061            }
2062            if let Some(_) = self.rx_unicast_drop {
2063                return 5;
2064            }
2065            if let Some(_) = self.rx_unicast_total {
2066                return 4;
2067            }
2068            if let Some(_) = self.driver_specific_gauges {
2069                return 3;
2070            }
2071            if let Some(_) = self.driver_specific_counters {
2072                return 2;
2073            }
2074            if let Some(_) = self.connection_id {
2075                return 1;
2076            }
2077            0
2078        }
2079    }
2080
2081    impl fidl::encoding::ValueTypeMarker for ConnectionStats {
2082        type Borrowed<'a> = &'a Self;
2083        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2084            value
2085        }
2086    }
2087
2088    unsafe impl fidl::encoding::TypeMarker for ConnectionStats {
2089        type Owned = Self;
2090
2091        #[inline(always)]
2092        fn inline_align(_context: fidl::encoding::Context) -> usize {
2093            8
2094        }
2095
2096        #[inline(always)]
2097        fn inline_size(_context: fidl::encoding::Context) -> usize {
2098            16
2099        }
2100    }
2101
2102    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConnectionStats, D>
2103        for &ConnectionStats
2104    {
2105        unsafe fn encode(
2106            self,
2107            encoder: &mut fidl::encoding::Encoder<'_, D>,
2108            offset: usize,
2109            mut depth: fidl::encoding::Depth,
2110        ) -> fidl::Result<()> {
2111            encoder.debug_check_bounds::<ConnectionStats>(offset);
2112            // Vector header
2113            let max_ordinal: u64 = self.max_ordinal_present();
2114            encoder.write_num(max_ordinal, offset);
2115            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2116            // Calling encoder.out_of_line_offset(0) is not allowed.
2117            if max_ordinal == 0 {
2118                return Ok(());
2119            }
2120            depth.increment()?;
2121            let envelope_size = 8;
2122            let bytes_len = max_ordinal as usize * envelope_size;
2123            #[allow(unused_variables)]
2124            let offset = encoder.out_of_line_offset(bytes_len);
2125            let mut _prev_end_offset: usize = 0;
2126            if 1 > max_ordinal {
2127                return Ok(());
2128            }
2129
2130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2131            // are envelope_size bytes.
2132            let cur_offset: usize = (1 - 1) * envelope_size;
2133
2134            // Zero reserved fields.
2135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2136
2137            // Safety:
2138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2140            //   envelope_size bytes, there is always sufficient room.
2141            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2142                self.connection_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2143                encoder,
2144                offset + cur_offset,
2145                depth,
2146            )?;
2147
2148            _prev_end_offset = cur_offset + envelope_size;
2149            if 2 > max_ordinal {
2150                return Ok(());
2151            }
2152
2153            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2154            // are envelope_size bytes.
2155            let cur_offset: usize = (2 - 1) * envelope_size;
2156
2157            // Zero reserved fields.
2158            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2159
2160            // Safety:
2161            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2162            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2163            //   envelope_size bytes, there is always sufficient room.
2164            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedCounter, 127>, D>(
2165            self.driver_specific_counters.as_ref().map(<fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::ValueTypeMarker>::borrow),
2166            encoder, offset + cur_offset, depth
2167        )?;
2168
2169            _prev_end_offset = cur_offset + envelope_size;
2170            if 3 > max_ordinal {
2171                return Ok(());
2172            }
2173
2174            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2175            // are envelope_size bytes.
2176            let cur_offset: usize = (3 - 1) * envelope_size;
2177
2178            // Zero reserved fields.
2179            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2180
2181            // Safety:
2182            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2183            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2184            //   envelope_size bytes, there is always sufficient room.
2185            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedGauge, 127>, D>(
2186            self.driver_specific_gauges.as_ref().map(<fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::ValueTypeMarker>::borrow),
2187            encoder, offset + cur_offset, depth
2188        )?;
2189
2190            _prev_end_offset = cur_offset + envelope_size;
2191            if 4 > max_ordinal {
2192                return Ok(());
2193            }
2194
2195            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2196            // are envelope_size bytes.
2197            let cur_offset: usize = (4 - 1) * envelope_size;
2198
2199            // Zero reserved fields.
2200            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2201
2202            // Safety:
2203            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2204            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2205            //   envelope_size bytes, there is always sufficient room.
2206            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2207                self.rx_unicast_total
2208                    .as_ref()
2209                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2210                encoder,
2211                offset + cur_offset,
2212                depth,
2213            )?;
2214
2215            _prev_end_offset = cur_offset + envelope_size;
2216            if 5 > max_ordinal {
2217                return Ok(());
2218            }
2219
2220            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2221            // are envelope_size bytes.
2222            let cur_offset: usize = (5 - 1) * envelope_size;
2223
2224            // Zero reserved fields.
2225            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2226
2227            // Safety:
2228            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2229            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2230            //   envelope_size bytes, there is always sufficient room.
2231            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2232                self.rx_unicast_drop.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2233                encoder,
2234                offset + cur_offset,
2235                depth,
2236            )?;
2237
2238            _prev_end_offset = cur_offset + envelope_size;
2239            if 6 > max_ordinal {
2240                return Ok(());
2241            }
2242
2243            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2244            // are envelope_size bytes.
2245            let cur_offset: usize = (6 - 1) * envelope_size;
2246
2247            // Zero reserved fields.
2248            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2249
2250            // Safety:
2251            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2252            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2253            //   envelope_size bytes, there is always sufficient room.
2254            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2255                self.rx_multicast.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2256                encoder,
2257                offset + cur_offset,
2258                depth,
2259            )?;
2260
2261            _prev_end_offset = cur_offset + envelope_size;
2262            if 7 > max_ordinal {
2263                return Ok(());
2264            }
2265
2266            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2267            // are envelope_size bytes.
2268            let cur_offset: usize = (7 - 1) * envelope_size;
2269
2270            // Zero reserved fields.
2271            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2272
2273            // Safety:
2274            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2275            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2276            //   envelope_size bytes, there is always sufficient room.
2277            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2278                self.tx_total.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2279                encoder,
2280                offset + cur_offset,
2281                depth,
2282            )?;
2283
2284            _prev_end_offset = cur_offset + envelope_size;
2285            if 8 > max_ordinal {
2286                return Ok(());
2287            }
2288
2289            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2290            // are envelope_size bytes.
2291            let cur_offset: usize = (8 - 1) * envelope_size;
2292
2293            // Zero reserved fields.
2294            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2295
2296            // Safety:
2297            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2298            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2299            //   envelope_size bytes, there is always sufficient room.
2300            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2301                self.tx_drop.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2302                encoder,
2303                offset + cur_offset,
2304                depth,
2305            )?;
2306
2307            _prev_end_offset = cur_offset + envelope_size;
2308            if 9 > max_ordinal {
2309                return Ok(());
2310            }
2311
2312            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2313            // are envelope_size bytes.
2314            let cur_offset: usize = (9 - 1) * envelope_size;
2315
2316            // Zero reserved fields.
2317            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2318
2319            // Safety:
2320            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2321            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2322            //   envelope_size bytes, there is always sufficient room.
2323            fidl::encoding::encode_in_envelope_optional::<WmePacketStats, D>(
2324                self.wme.as_ref().map(<WmePacketStats as fidl::encoding::ValueTypeMarker>::borrow),
2325                encoder,
2326                offset + cur_offset,
2327                depth,
2328            )?;
2329
2330            _prev_end_offset = cur_offset + envelope_size;
2331
2332            Ok(())
2333        }
2334    }
2335
2336    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectionStats {
2337        #[inline(always)]
2338        fn new_empty() -> Self {
2339            Self::default()
2340        }
2341
2342        unsafe fn decode(
2343            &mut self,
2344            decoder: &mut fidl::encoding::Decoder<'_, D>,
2345            offset: usize,
2346            mut depth: fidl::encoding::Depth,
2347        ) -> fidl::Result<()> {
2348            decoder.debug_check_bounds::<Self>(offset);
2349            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2350                None => return Err(fidl::Error::NotNullable),
2351                Some(len) => len,
2352            };
2353            // Calling decoder.out_of_line_offset(0) is not allowed.
2354            if len == 0 {
2355                return Ok(());
2356            };
2357            depth.increment()?;
2358            let envelope_size = 8;
2359            let bytes_len = len * envelope_size;
2360            let offset = decoder.out_of_line_offset(bytes_len)?;
2361            // Decode the envelope for each type.
2362            let mut _next_ordinal_to_read = 0;
2363            let mut next_offset = offset;
2364            let end_offset = offset + bytes_len;
2365            _next_ordinal_to_read += 1;
2366            if next_offset >= end_offset {
2367                return Ok(());
2368            }
2369
2370            // Decode unknown envelopes for gaps in ordinals.
2371            while _next_ordinal_to_read < 1 {
2372                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2373                _next_ordinal_to_read += 1;
2374                next_offset += envelope_size;
2375            }
2376
2377            let next_out_of_line = decoder.next_out_of_line();
2378            let handles_before = decoder.remaining_handles();
2379            if let Some((inlined, num_bytes, num_handles)) =
2380                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2381            {
2382                let member_inline_size =
2383                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2384                if inlined != (member_inline_size <= 4) {
2385                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2386                }
2387                let inner_offset;
2388                let mut inner_depth = depth.clone();
2389                if inlined {
2390                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2391                    inner_offset = next_offset;
2392                } else {
2393                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2394                    inner_depth.increment()?;
2395                }
2396                let val_ref = self.connection_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
2397                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2398                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2399                {
2400                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2401                }
2402                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2403                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2404                }
2405            }
2406
2407            next_offset += envelope_size;
2408            _next_ordinal_to_read += 1;
2409            if next_offset >= end_offset {
2410                return Ok(());
2411            }
2412
2413            // Decode unknown envelopes for gaps in ordinals.
2414            while _next_ordinal_to_read < 2 {
2415                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2416                _next_ordinal_to_read += 1;
2417                next_offset += envelope_size;
2418            }
2419
2420            let next_out_of_line = decoder.next_out_of_line();
2421            let handles_before = decoder.remaining_handles();
2422            if let Some((inlined, num_bytes, num_handles)) =
2423                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2424            {
2425                let member_inline_size = <fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2426                if inlined != (member_inline_size <= 4) {
2427                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2428                }
2429                let inner_offset;
2430                let mut inner_depth = depth.clone();
2431                if inlined {
2432                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2433                    inner_offset = next_offset;
2434                } else {
2435                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2436                    inner_depth.increment()?;
2437                }
2438                let val_ref = self.driver_specific_counters.get_or_insert_with(
2439                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedCounter, 127>, D),
2440                );
2441                fidl::decode!(fidl::encoding::Vector<UnnamedCounter, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
2442                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2443                {
2444                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2445                }
2446                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2447                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2448                }
2449            }
2450
2451            next_offset += envelope_size;
2452            _next_ordinal_to_read += 1;
2453            if next_offset >= end_offset {
2454                return Ok(());
2455            }
2456
2457            // Decode unknown envelopes for gaps in ordinals.
2458            while _next_ordinal_to_read < 3 {
2459                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2460                _next_ordinal_to_read += 1;
2461                next_offset += envelope_size;
2462            }
2463
2464            let next_out_of_line = decoder.next_out_of_line();
2465            let handles_before = decoder.remaining_handles();
2466            if let Some((inlined, num_bytes, num_handles)) =
2467                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2468            {
2469                let member_inline_size = <fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2470                if inlined != (member_inline_size <= 4) {
2471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2472                }
2473                let inner_offset;
2474                let mut inner_depth = depth.clone();
2475                if inlined {
2476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2477                    inner_offset = next_offset;
2478                } else {
2479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2480                    inner_depth.increment()?;
2481                }
2482                let val_ref = self.driver_specific_gauges.get_or_insert_with(
2483                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedGauge, 127>, D),
2484                );
2485                fidl::decode!(fidl::encoding::Vector<UnnamedGauge, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
2486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2487                {
2488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2489                }
2490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2492                }
2493            }
2494
2495            next_offset += envelope_size;
2496            _next_ordinal_to_read += 1;
2497            if next_offset >= end_offset {
2498                return Ok(());
2499            }
2500
2501            // Decode unknown envelopes for gaps in ordinals.
2502            while _next_ordinal_to_read < 4 {
2503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2504                _next_ordinal_to_read += 1;
2505                next_offset += envelope_size;
2506            }
2507
2508            let next_out_of_line = decoder.next_out_of_line();
2509            let handles_before = decoder.remaining_handles();
2510            if let Some((inlined, num_bytes, num_handles)) =
2511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2512            {
2513                let member_inline_size =
2514                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2515                if inlined != (member_inline_size <= 4) {
2516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2517                }
2518                let inner_offset;
2519                let mut inner_depth = depth.clone();
2520                if inlined {
2521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2522                    inner_offset = next_offset;
2523                } else {
2524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2525                    inner_depth.increment()?;
2526                }
2527                let val_ref = self.rx_unicast_total.get_or_insert_with(|| fidl::new_empty!(u64, D));
2528                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2530                {
2531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2532                }
2533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2535                }
2536            }
2537
2538            next_offset += envelope_size;
2539            _next_ordinal_to_read += 1;
2540            if next_offset >= end_offset {
2541                return Ok(());
2542            }
2543
2544            // Decode unknown envelopes for gaps in ordinals.
2545            while _next_ordinal_to_read < 5 {
2546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2547                _next_ordinal_to_read += 1;
2548                next_offset += envelope_size;
2549            }
2550
2551            let next_out_of_line = decoder.next_out_of_line();
2552            let handles_before = decoder.remaining_handles();
2553            if let Some((inlined, num_bytes, num_handles)) =
2554                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2555            {
2556                let member_inline_size =
2557                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2558                if inlined != (member_inline_size <= 4) {
2559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2560                }
2561                let inner_offset;
2562                let mut inner_depth = depth.clone();
2563                if inlined {
2564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2565                    inner_offset = next_offset;
2566                } else {
2567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2568                    inner_depth.increment()?;
2569                }
2570                let val_ref = self.rx_unicast_drop.get_or_insert_with(|| fidl::new_empty!(u64, D));
2571                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2572                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2573                {
2574                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2575                }
2576                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2577                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2578                }
2579            }
2580
2581            next_offset += envelope_size;
2582            _next_ordinal_to_read += 1;
2583            if next_offset >= end_offset {
2584                return Ok(());
2585            }
2586
2587            // Decode unknown envelopes for gaps in ordinals.
2588            while _next_ordinal_to_read < 6 {
2589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2590                _next_ordinal_to_read += 1;
2591                next_offset += envelope_size;
2592            }
2593
2594            let next_out_of_line = decoder.next_out_of_line();
2595            let handles_before = decoder.remaining_handles();
2596            if let Some((inlined, num_bytes, num_handles)) =
2597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2598            {
2599                let member_inline_size =
2600                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2601                if inlined != (member_inline_size <= 4) {
2602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2603                }
2604                let inner_offset;
2605                let mut inner_depth = depth.clone();
2606                if inlined {
2607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2608                    inner_offset = next_offset;
2609                } else {
2610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2611                    inner_depth.increment()?;
2612                }
2613                let val_ref = self.rx_multicast.get_or_insert_with(|| fidl::new_empty!(u64, D));
2614                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2615                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2616                {
2617                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2618                }
2619                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2620                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2621                }
2622            }
2623
2624            next_offset += envelope_size;
2625            _next_ordinal_to_read += 1;
2626            if next_offset >= end_offset {
2627                return Ok(());
2628            }
2629
2630            // Decode unknown envelopes for gaps in ordinals.
2631            while _next_ordinal_to_read < 7 {
2632                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2633                _next_ordinal_to_read += 1;
2634                next_offset += envelope_size;
2635            }
2636
2637            let next_out_of_line = decoder.next_out_of_line();
2638            let handles_before = decoder.remaining_handles();
2639            if let Some((inlined, num_bytes, num_handles)) =
2640                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2641            {
2642                let member_inline_size =
2643                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2644                if inlined != (member_inline_size <= 4) {
2645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2646                }
2647                let inner_offset;
2648                let mut inner_depth = depth.clone();
2649                if inlined {
2650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2651                    inner_offset = next_offset;
2652                } else {
2653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2654                    inner_depth.increment()?;
2655                }
2656                let val_ref = self.tx_total.get_or_insert_with(|| fidl::new_empty!(u64, D));
2657                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2658                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2659                {
2660                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2661                }
2662                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2663                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2664                }
2665            }
2666
2667            next_offset += envelope_size;
2668            _next_ordinal_to_read += 1;
2669            if next_offset >= end_offset {
2670                return Ok(());
2671            }
2672
2673            // Decode unknown envelopes for gaps in ordinals.
2674            while _next_ordinal_to_read < 8 {
2675                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2676                _next_ordinal_to_read += 1;
2677                next_offset += envelope_size;
2678            }
2679
2680            let next_out_of_line = decoder.next_out_of_line();
2681            let handles_before = decoder.remaining_handles();
2682            if let Some((inlined, num_bytes, num_handles)) =
2683                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2684            {
2685                let member_inline_size =
2686                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2687                if inlined != (member_inline_size <= 4) {
2688                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2689                }
2690                let inner_offset;
2691                let mut inner_depth = depth.clone();
2692                if inlined {
2693                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2694                    inner_offset = next_offset;
2695                } else {
2696                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2697                    inner_depth.increment()?;
2698                }
2699                let val_ref = self.tx_drop.get_or_insert_with(|| fidl::new_empty!(u64, D));
2700                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2702                {
2703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2704                }
2705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2707                }
2708            }
2709
2710            next_offset += envelope_size;
2711            _next_ordinal_to_read += 1;
2712            if next_offset >= end_offset {
2713                return Ok(());
2714            }
2715
2716            // Decode unknown envelopes for gaps in ordinals.
2717            while _next_ordinal_to_read < 9 {
2718                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2719                _next_ordinal_to_read += 1;
2720                next_offset += envelope_size;
2721            }
2722
2723            let next_out_of_line = decoder.next_out_of_line();
2724            let handles_before = decoder.remaining_handles();
2725            if let Some((inlined, num_bytes, num_handles)) =
2726                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2727            {
2728                let member_inline_size =
2729                    <WmePacketStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2730                if inlined != (member_inline_size <= 4) {
2731                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2732                }
2733                let inner_offset;
2734                let mut inner_depth = depth.clone();
2735                if inlined {
2736                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2737                    inner_offset = next_offset;
2738                } else {
2739                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2740                    inner_depth.increment()?;
2741                }
2742                let val_ref = self.wme.get_or_insert_with(|| fidl::new_empty!(WmePacketStats, D));
2743                fidl::decode!(WmePacketStats, D, val_ref, decoder, inner_offset, inner_depth)?;
2744                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2745                {
2746                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2747                }
2748                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2749                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2750                }
2751            }
2752
2753            next_offset += envelope_size;
2754
2755            // Decode the remaining unknown envelopes.
2756            while next_offset < end_offset {
2757                _next_ordinal_to_read += 1;
2758                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2759                next_offset += envelope_size;
2760            }
2761
2762            Ok(())
2763        }
2764    }
2765
2766    impl IfaceHistogramStats {
2767        #[inline(always)]
2768        fn max_ordinal_present(&self) -> u64 {
2769            if let Some(_) = self.snr_histograms {
2770                return 4;
2771            }
2772            if let Some(_) = self.rx_rate_index_histograms {
2773                return 3;
2774            }
2775            if let Some(_) = self.rssi_histograms {
2776                return 2;
2777            }
2778            if let Some(_) = self.noise_floor_histograms {
2779                return 1;
2780            }
2781            0
2782        }
2783    }
2784
2785    impl fidl::encoding::ValueTypeMarker for IfaceHistogramStats {
2786        type Borrowed<'a> = &'a Self;
2787        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2788            value
2789        }
2790    }
2791
2792    unsafe impl fidl::encoding::TypeMarker for IfaceHistogramStats {
2793        type Owned = Self;
2794
2795        #[inline(always)]
2796        fn inline_align(_context: fidl::encoding::Context) -> usize {
2797            8
2798        }
2799
2800        #[inline(always)]
2801        fn inline_size(_context: fidl::encoding::Context) -> usize {
2802            16
2803        }
2804    }
2805
2806    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IfaceHistogramStats, D>
2807        for &IfaceHistogramStats
2808    {
2809        unsafe fn encode(
2810            self,
2811            encoder: &mut fidl::encoding::Encoder<'_, D>,
2812            offset: usize,
2813            mut depth: fidl::encoding::Depth,
2814        ) -> fidl::Result<()> {
2815            encoder.debug_check_bounds::<IfaceHistogramStats>(offset);
2816            // Vector header
2817            let max_ordinal: u64 = self.max_ordinal_present();
2818            encoder.write_num(max_ordinal, offset);
2819            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2820            // Calling encoder.out_of_line_offset(0) is not allowed.
2821            if max_ordinal == 0 {
2822                return Ok(());
2823            }
2824            depth.increment()?;
2825            let envelope_size = 8;
2826            let bytes_len = max_ordinal as usize * envelope_size;
2827            #[allow(unused_variables)]
2828            let offset = encoder.out_of_line_offset(bytes_len);
2829            let mut _prev_end_offset: usize = 0;
2830            if 1 > max_ordinal {
2831                return Ok(());
2832            }
2833
2834            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2835            // are envelope_size bytes.
2836            let cur_offset: usize = (1 - 1) * envelope_size;
2837
2838            // Zero reserved fields.
2839            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2840
2841            // Safety:
2842            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2843            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2844            //   envelope_size bytes, there is always sufficient room.
2845            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NoiseFloorHistogram, 8>, D>(
2846            self.noise_floor_histograms.as_ref().map(<fidl::encoding::Vector<NoiseFloorHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2847            encoder, offset + cur_offset, depth
2848        )?;
2849
2850            _prev_end_offset = cur_offset + envelope_size;
2851            if 2 > max_ordinal {
2852                return Ok(());
2853            }
2854
2855            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2856            // are envelope_size bytes.
2857            let cur_offset: usize = (2 - 1) * envelope_size;
2858
2859            // Zero reserved fields.
2860            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2861
2862            // Safety:
2863            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2864            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2865            //   envelope_size bytes, there is always sufficient room.
2866            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RssiHistogram, 8>, D>(
2867            self.rssi_histograms.as_ref().map(<fidl::encoding::Vector<RssiHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2868            encoder, offset + cur_offset, depth
2869        )?;
2870
2871            _prev_end_offset = cur_offset + envelope_size;
2872            if 3 > max_ordinal {
2873                return Ok(());
2874            }
2875
2876            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2877            // are envelope_size bytes.
2878            let cur_offset: usize = (3 - 1) * envelope_size;
2879
2880            // Zero reserved fields.
2881            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2882
2883            // Safety:
2884            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2885            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2886            //   envelope_size bytes, there is always sufficient room.
2887            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RxRateIndexHistogram, 8>, D>(
2888            self.rx_rate_index_histograms.as_ref().map(<fidl::encoding::Vector<RxRateIndexHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2889            encoder, offset + cur_offset, depth
2890        )?;
2891
2892            _prev_end_offset = cur_offset + envelope_size;
2893            if 4 > max_ordinal {
2894                return Ok(());
2895            }
2896
2897            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2898            // are envelope_size bytes.
2899            let cur_offset: usize = (4 - 1) * envelope_size;
2900
2901            // Zero reserved fields.
2902            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2903
2904            // Safety:
2905            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2906            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2907            //   envelope_size bytes, there is always sufficient room.
2908            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SnrHistogram, 8>, D>(
2909            self.snr_histograms.as_ref().map(<fidl::encoding::Vector<SnrHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2910            encoder, offset + cur_offset, depth
2911        )?;
2912
2913            _prev_end_offset = cur_offset + envelope_size;
2914
2915            Ok(())
2916        }
2917    }
2918
2919    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IfaceHistogramStats {
2920        #[inline(always)]
2921        fn new_empty() -> Self {
2922            Self::default()
2923        }
2924
2925        unsafe fn decode(
2926            &mut self,
2927            decoder: &mut fidl::encoding::Decoder<'_, D>,
2928            offset: usize,
2929            mut depth: fidl::encoding::Depth,
2930        ) -> fidl::Result<()> {
2931            decoder.debug_check_bounds::<Self>(offset);
2932            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2933                None => return Err(fidl::Error::NotNullable),
2934                Some(len) => len,
2935            };
2936            // Calling decoder.out_of_line_offset(0) is not allowed.
2937            if len == 0 {
2938                return Ok(());
2939            };
2940            depth.increment()?;
2941            let envelope_size = 8;
2942            let bytes_len = len * envelope_size;
2943            let offset = decoder.out_of_line_offset(bytes_len)?;
2944            // Decode the envelope for each type.
2945            let mut _next_ordinal_to_read = 0;
2946            let mut next_offset = offset;
2947            let end_offset = offset + bytes_len;
2948            _next_ordinal_to_read += 1;
2949            if next_offset >= end_offset {
2950                return Ok(());
2951            }
2952
2953            // Decode unknown envelopes for gaps in ordinals.
2954            while _next_ordinal_to_read < 1 {
2955                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2956                _next_ordinal_to_read += 1;
2957                next_offset += envelope_size;
2958            }
2959
2960            let next_out_of_line = decoder.next_out_of_line();
2961            let handles_before = decoder.remaining_handles();
2962            if let Some((inlined, num_bytes, num_handles)) =
2963                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2964            {
2965                let member_inline_size = <fidl::encoding::Vector<NoiseFloorHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2966                if inlined != (member_inline_size <= 4) {
2967                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2968                }
2969                let inner_offset;
2970                let mut inner_depth = depth.clone();
2971                if inlined {
2972                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2973                    inner_offset = next_offset;
2974                } else {
2975                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2976                    inner_depth.increment()?;
2977                }
2978                let val_ref = self.noise_floor_histograms.get_or_insert_with(
2979                    || fidl::new_empty!(fidl::encoding::Vector<NoiseFloorHistogram, 8>, D),
2980                );
2981                fidl::decode!(fidl::encoding::Vector<NoiseFloorHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
2982                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2983                {
2984                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2985                }
2986                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2987                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2988                }
2989            }
2990
2991            next_offset += envelope_size;
2992            _next_ordinal_to_read += 1;
2993            if next_offset >= end_offset {
2994                return Ok(());
2995            }
2996
2997            // Decode unknown envelopes for gaps in ordinals.
2998            while _next_ordinal_to_read < 2 {
2999                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3000                _next_ordinal_to_read += 1;
3001                next_offset += envelope_size;
3002            }
3003
3004            let next_out_of_line = decoder.next_out_of_line();
3005            let handles_before = decoder.remaining_handles();
3006            if let Some((inlined, num_bytes, num_handles)) =
3007                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3008            {
3009                let member_inline_size = <fidl::encoding::Vector<RssiHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3010                if inlined != (member_inline_size <= 4) {
3011                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3012                }
3013                let inner_offset;
3014                let mut inner_depth = depth.clone();
3015                if inlined {
3016                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3017                    inner_offset = next_offset;
3018                } else {
3019                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3020                    inner_depth.increment()?;
3021                }
3022                let val_ref = self.rssi_histograms.get_or_insert_with(
3023                    || fidl::new_empty!(fidl::encoding::Vector<RssiHistogram, 8>, D),
3024                );
3025                fidl::decode!(fidl::encoding::Vector<RssiHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
3026                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3027                {
3028                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3029                }
3030                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3031                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3032                }
3033            }
3034
3035            next_offset += envelope_size;
3036            _next_ordinal_to_read += 1;
3037            if next_offset >= end_offset {
3038                return Ok(());
3039            }
3040
3041            // Decode unknown envelopes for gaps in ordinals.
3042            while _next_ordinal_to_read < 3 {
3043                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3044                _next_ordinal_to_read += 1;
3045                next_offset += envelope_size;
3046            }
3047
3048            let next_out_of_line = decoder.next_out_of_line();
3049            let handles_before = decoder.remaining_handles();
3050            if let Some((inlined, num_bytes, num_handles)) =
3051                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3052            {
3053                let member_inline_size = <fidl::encoding::Vector<RxRateIndexHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3054                if inlined != (member_inline_size <= 4) {
3055                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3056                }
3057                let inner_offset;
3058                let mut inner_depth = depth.clone();
3059                if inlined {
3060                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3061                    inner_offset = next_offset;
3062                } else {
3063                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3064                    inner_depth.increment()?;
3065                }
3066                let val_ref = self.rx_rate_index_histograms.get_or_insert_with(
3067                    || fidl::new_empty!(fidl::encoding::Vector<RxRateIndexHistogram, 8>, D),
3068                );
3069                fidl::decode!(fidl::encoding::Vector<RxRateIndexHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
3070                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3071                {
3072                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3073                }
3074                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3075                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3076                }
3077            }
3078
3079            next_offset += envelope_size;
3080            _next_ordinal_to_read += 1;
3081            if next_offset >= end_offset {
3082                return Ok(());
3083            }
3084
3085            // Decode unknown envelopes for gaps in ordinals.
3086            while _next_ordinal_to_read < 4 {
3087                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3088                _next_ordinal_to_read += 1;
3089                next_offset += envelope_size;
3090            }
3091
3092            let next_out_of_line = decoder.next_out_of_line();
3093            let handles_before = decoder.remaining_handles();
3094            if let Some((inlined, num_bytes, num_handles)) =
3095                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3096            {
3097                let member_inline_size = <fidl::encoding::Vector<SnrHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3098                if inlined != (member_inline_size <= 4) {
3099                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3100                }
3101                let inner_offset;
3102                let mut inner_depth = depth.clone();
3103                if inlined {
3104                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3105                    inner_offset = next_offset;
3106                } else {
3107                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3108                    inner_depth.increment()?;
3109                }
3110                let val_ref = self.snr_histograms.get_or_insert_with(
3111                    || fidl::new_empty!(fidl::encoding::Vector<SnrHistogram, 8>, D),
3112                );
3113                fidl::decode!(fidl::encoding::Vector<SnrHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
3114                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3115                {
3116                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3117                }
3118                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3119                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3120                }
3121            }
3122
3123            next_offset += envelope_size;
3124
3125            // Decode the remaining unknown envelopes.
3126            while next_offset < end_offset {
3127                _next_ordinal_to_read += 1;
3128                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3129                next_offset += envelope_size;
3130            }
3131
3132            Ok(())
3133        }
3134    }
3135
3136    impl IfaceStats {
3137        #[inline(always)]
3138        fn max_ordinal_present(&self) -> u64 {
3139            if let Some(_) = self.driver_specific_gauges {
3140                return 3;
3141            }
3142            if let Some(_) = self.driver_specific_counters {
3143                return 2;
3144            }
3145            if let Some(_) = self.connection_stats {
3146                return 1;
3147            }
3148            0
3149        }
3150    }
3151
3152    impl fidl::encoding::ValueTypeMarker for IfaceStats {
3153        type Borrowed<'a> = &'a Self;
3154        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3155            value
3156        }
3157    }
3158
3159    unsafe impl fidl::encoding::TypeMarker for IfaceStats {
3160        type Owned = Self;
3161
3162        #[inline(always)]
3163        fn inline_align(_context: fidl::encoding::Context) -> usize {
3164            8
3165        }
3166
3167        #[inline(always)]
3168        fn inline_size(_context: fidl::encoding::Context) -> usize {
3169            16
3170        }
3171    }
3172
3173    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IfaceStats, D>
3174        for &IfaceStats
3175    {
3176        unsafe fn encode(
3177            self,
3178            encoder: &mut fidl::encoding::Encoder<'_, D>,
3179            offset: usize,
3180            mut depth: fidl::encoding::Depth,
3181        ) -> fidl::Result<()> {
3182            encoder.debug_check_bounds::<IfaceStats>(offset);
3183            // Vector header
3184            let max_ordinal: u64 = self.max_ordinal_present();
3185            encoder.write_num(max_ordinal, offset);
3186            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3187            // Calling encoder.out_of_line_offset(0) is not allowed.
3188            if max_ordinal == 0 {
3189                return Ok(());
3190            }
3191            depth.increment()?;
3192            let envelope_size = 8;
3193            let bytes_len = max_ordinal as usize * envelope_size;
3194            #[allow(unused_variables)]
3195            let offset = encoder.out_of_line_offset(bytes_len);
3196            let mut _prev_end_offset: usize = 0;
3197            if 1 > max_ordinal {
3198                return Ok(());
3199            }
3200
3201            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3202            // are envelope_size bytes.
3203            let cur_offset: usize = (1 - 1) * envelope_size;
3204
3205            // Zero reserved fields.
3206            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3207
3208            // Safety:
3209            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3210            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3211            //   envelope_size bytes, there is always sufficient room.
3212            fidl::encoding::encode_in_envelope_optional::<ConnectionStats, D>(
3213                self.connection_stats
3214                    .as_ref()
3215                    .map(<ConnectionStats as fidl::encoding::ValueTypeMarker>::borrow),
3216                encoder,
3217                offset + cur_offset,
3218                depth,
3219            )?;
3220
3221            _prev_end_offset = cur_offset + envelope_size;
3222            if 2 > max_ordinal {
3223                return Ok(());
3224            }
3225
3226            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3227            // are envelope_size bytes.
3228            let cur_offset: usize = (2 - 1) * envelope_size;
3229
3230            // Zero reserved fields.
3231            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3232
3233            // Safety:
3234            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3235            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3236            //   envelope_size bytes, there is always sufficient room.
3237            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedCounter, 127>, D>(
3238            self.driver_specific_counters.as_ref().map(<fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::ValueTypeMarker>::borrow),
3239            encoder, offset + cur_offset, depth
3240        )?;
3241
3242            _prev_end_offset = cur_offset + envelope_size;
3243            if 3 > max_ordinal {
3244                return Ok(());
3245            }
3246
3247            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3248            // are envelope_size bytes.
3249            let cur_offset: usize = (3 - 1) * envelope_size;
3250
3251            // Zero reserved fields.
3252            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3253
3254            // Safety:
3255            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3256            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3257            //   envelope_size bytes, there is always sufficient room.
3258            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedGauge, 127>, D>(
3259            self.driver_specific_gauges.as_ref().map(<fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::ValueTypeMarker>::borrow),
3260            encoder, offset + cur_offset, depth
3261        )?;
3262
3263            _prev_end_offset = cur_offset + envelope_size;
3264
3265            Ok(())
3266        }
3267    }
3268
3269    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IfaceStats {
3270        #[inline(always)]
3271        fn new_empty() -> Self {
3272            Self::default()
3273        }
3274
3275        unsafe fn decode(
3276            &mut self,
3277            decoder: &mut fidl::encoding::Decoder<'_, D>,
3278            offset: usize,
3279            mut depth: fidl::encoding::Depth,
3280        ) -> fidl::Result<()> {
3281            decoder.debug_check_bounds::<Self>(offset);
3282            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3283                None => return Err(fidl::Error::NotNullable),
3284                Some(len) => len,
3285            };
3286            // Calling decoder.out_of_line_offset(0) is not allowed.
3287            if len == 0 {
3288                return Ok(());
3289            };
3290            depth.increment()?;
3291            let envelope_size = 8;
3292            let bytes_len = len * envelope_size;
3293            let offset = decoder.out_of_line_offset(bytes_len)?;
3294            // Decode the envelope for each type.
3295            let mut _next_ordinal_to_read = 0;
3296            let mut next_offset = offset;
3297            let end_offset = offset + bytes_len;
3298            _next_ordinal_to_read += 1;
3299            if next_offset >= end_offset {
3300                return Ok(());
3301            }
3302
3303            // Decode unknown envelopes for gaps in ordinals.
3304            while _next_ordinal_to_read < 1 {
3305                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3306                _next_ordinal_to_read += 1;
3307                next_offset += envelope_size;
3308            }
3309
3310            let next_out_of_line = decoder.next_out_of_line();
3311            let handles_before = decoder.remaining_handles();
3312            if let Some((inlined, num_bytes, num_handles)) =
3313                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3314            {
3315                let member_inline_size =
3316                    <ConnectionStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3317                if inlined != (member_inline_size <= 4) {
3318                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3319                }
3320                let inner_offset;
3321                let mut inner_depth = depth.clone();
3322                if inlined {
3323                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3324                    inner_offset = next_offset;
3325                } else {
3326                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3327                    inner_depth.increment()?;
3328                }
3329                let val_ref = self
3330                    .connection_stats
3331                    .get_or_insert_with(|| fidl::new_empty!(ConnectionStats, D));
3332                fidl::decode!(ConnectionStats, D, val_ref, decoder, inner_offset, inner_depth)?;
3333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3334                {
3335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3336                }
3337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3339                }
3340            }
3341
3342            next_offset += envelope_size;
3343            _next_ordinal_to_read += 1;
3344            if next_offset >= end_offset {
3345                return Ok(());
3346            }
3347
3348            // Decode unknown envelopes for gaps in ordinals.
3349            while _next_ordinal_to_read < 2 {
3350                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3351                _next_ordinal_to_read += 1;
3352                next_offset += envelope_size;
3353            }
3354
3355            let next_out_of_line = decoder.next_out_of_line();
3356            let handles_before = decoder.remaining_handles();
3357            if let Some((inlined, num_bytes, num_handles)) =
3358                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3359            {
3360                let member_inline_size = <fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3361                if inlined != (member_inline_size <= 4) {
3362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3363                }
3364                let inner_offset;
3365                let mut inner_depth = depth.clone();
3366                if inlined {
3367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3368                    inner_offset = next_offset;
3369                } else {
3370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3371                    inner_depth.increment()?;
3372                }
3373                let val_ref = self.driver_specific_counters.get_or_insert_with(
3374                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedCounter, 127>, D),
3375                );
3376                fidl::decode!(fidl::encoding::Vector<UnnamedCounter, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
3377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3378                {
3379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3380                }
3381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3383                }
3384            }
3385
3386            next_offset += envelope_size;
3387            _next_ordinal_to_read += 1;
3388            if next_offset >= end_offset {
3389                return Ok(());
3390            }
3391
3392            // Decode unknown envelopes for gaps in ordinals.
3393            while _next_ordinal_to_read < 3 {
3394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3395                _next_ordinal_to_read += 1;
3396                next_offset += envelope_size;
3397            }
3398
3399            let next_out_of_line = decoder.next_out_of_line();
3400            let handles_before = decoder.remaining_handles();
3401            if let Some((inlined, num_bytes, num_handles)) =
3402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3403            {
3404                let member_inline_size = <fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3405                if inlined != (member_inline_size <= 4) {
3406                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3407                }
3408                let inner_offset;
3409                let mut inner_depth = depth.clone();
3410                if inlined {
3411                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3412                    inner_offset = next_offset;
3413                } else {
3414                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3415                    inner_depth.increment()?;
3416                }
3417                let val_ref = self.driver_specific_gauges.get_or_insert_with(
3418                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedGauge, 127>, D),
3419                );
3420                fidl::decode!(fidl::encoding::Vector<UnnamedGauge, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
3421                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3422                {
3423                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3424                }
3425                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3426                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3427                }
3428            }
3429
3430            next_offset += envelope_size;
3431
3432            // Decode the remaining unknown envelopes.
3433            while next_offset < end_offset {
3434                _next_ordinal_to_read += 1;
3435                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3436                next_offset += envelope_size;
3437            }
3438
3439            Ok(())
3440        }
3441    }
3442
3443    impl InspectCounterConfig {
3444        #[inline(always)]
3445        fn max_ordinal_present(&self) -> u64 {
3446            if let Some(_) = self.counter_name {
3447                return 2;
3448            }
3449            if let Some(_) = self.counter_id {
3450                return 1;
3451            }
3452            0
3453        }
3454    }
3455
3456    impl fidl::encoding::ValueTypeMarker for InspectCounterConfig {
3457        type Borrowed<'a> = &'a Self;
3458        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3459            value
3460        }
3461    }
3462
3463    unsafe impl fidl::encoding::TypeMarker for InspectCounterConfig {
3464        type Owned = Self;
3465
3466        #[inline(always)]
3467        fn inline_align(_context: fidl::encoding::Context) -> usize {
3468            8
3469        }
3470
3471        #[inline(always)]
3472        fn inline_size(_context: fidl::encoding::Context) -> usize {
3473            16
3474        }
3475    }
3476
3477    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<InspectCounterConfig, D>
3478        for &InspectCounterConfig
3479    {
3480        unsafe fn encode(
3481            self,
3482            encoder: &mut fidl::encoding::Encoder<'_, D>,
3483            offset: usize,
3484            mut depth: fidl::encoding::Depth,
3485        ) -> fidl::Result<()> {
3486            encoder.debug_check_bounds::<InspectCounterConfig>(offset);
3487            // Vector header
3488            let max_ordinal: u64 = self.max_ordinal_present();
3489            encoder.write_num(max_ordinal, offset);
3490            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3491            // Calling encoder.out_of_line_offset(0) is not allowed.
3492            if max_ordinal == 0 {
3493                return Ok(());
3494            }
3495            depth.increment()?;
3496            let envelope_size = 8;
3497            let bytes_len = max_ordinal as usize * envelope_size;
3498            #[allow(unused_variables)]
3499            let offset = encoder.out_of_line_offset(bytes_len);
3500            let mut _prev_end_offset: usize = 0;
3501            if 1 > max_ordinal {
3502                return Ok(());
3503            }
3504
3505            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3506            // are envelope_size bytes.
3507            let cur_offset: usize = (1 - 1) * envelope_size;
3508
3509            // Zero reserved fields.
3510            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3511
3512            // Safety:
3513            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3514            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3515            //   envelope_size bytes, there is always sufficient room.
3516            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3517                self.counter_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3518                encoder,
3519                offset + cur_offset,
3520                depth,
3521            )?;
3522
3523            _prev_end_offset = cur_offset + envelope_size;
3524            if 2 > max_ordinal {
3525                return Ok(());
3526            }
3527
3528            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3529            // are envelope_size bytes.
3530            let cur_offset: usize = (2 - 1) * envelope_size;
3531
3532            // Zero reserved fields.
3533            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3534
3535            // Safety:
3536            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3537            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3538            //   envelope_size bytes, there is always sufficient room.
3539            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<127>, D>(
3540                self.counter_name.as_ref().map(
3541                    <fidl::encoding::BoundedString<127> as fidl::encoding::ValueTypeMarker>::borrow,
3542                ),
3543                encoder,
3544                offset + cur_offset,
3545                depth,
3546            )?;
3547
3548            _prev_end_offset = cur_offset + envelope_size;
3549
3550            Ok(())
3551        }
3552    }
3553
3554    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for InspectCounterConfig {
3555        #[inline(always)]
3556        fn new_empty() -> Self {
3557            Self::default()
3558        }
3559
3560        unsafe fn decode(
3561            &mut self,
3562            decoder: &mut fidl::encoding::Decoder<'_, D>,
3563            offset: usize,
3564            mut depth: fidl::encoding::Depth,
3565        ) -> fidl::Result<()> {
3566            decoder.debug_check_bounds::<Self>(offset);
3567            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3568                None => return Err(fidl::Error::NotNullable),
3569                Some(len) => len,
3570            };
3571            // Calling decoder.out_of_line_offset(0) is not allowed.
3572            if len == 0 {
3573                return Ok(());
3574            };
3575            depth.increment()?;
3576            let envelope_size = 8;
3577            let bytes_len = len * envelope_size;
3578            let offset = decoder.out_of_line_offset(bytes_len)?;
3579            // Decode the envelope for each type.
3580            let mut _next_ordinal_to_read = 0;
3581            let mut next_offset = offset;
3582            let end_offset = offset + bytes_len;
3583            _next_ordinal_to_read += 1;
3584            if next_offset >= end_offset {
3585                return Ok(());
3586            }
3587
3588            // Decode unknown envelopes for gaps in ordinals.
3589            while _next_ordinal_to_read < 1 {
3590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3591                _next_ordinal_to_read += 1;
3592                next_offset += envelope_size;
3593            }
3594
3595            let next_out_of_line = decoder.next_out_of_line();
3596            let handles_before = decoder.remaining_handles();
3597            if let Some((inlined, num_bytes, num_handles)) =
3598                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3599            {
3600                let member_inline_size =
3601                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3602                if inlined != (member_inline_size <= 4) {
3603                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3604                }
3605                let inner_offset;
3606                let mut inner_depth = depth.clone();
3607                if inlined {
3608                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3609                    inner_offset = next_offset;
3610                } else {
3611                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3612                    inner_depth.increment()?;
3613                }
3614                let val_ref = self.counter_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
3615                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3617                {
3618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3619                }
3620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3622                }
3623            }
3624
3625            next_offset += envelope_size;
3626            _next_ordinal_to_read += 1;
3627            if next_offset >= end_offset {
3628                return Ok(());
3629            }
3630
3631            // Decode unknown envelopes for gaps in ordinals.
3632            while _next_ordinal_to_read < 2 {
3633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3634                _next_ordinal_to_read += 1;
3635                next_offset += envelope_size;
3636            }
3637
3638            let next_out_of_line = decoder.next_out_of_line();
3639            let handles_before = decoder.remaining_handles();
3640            if let Some((inlined, num_bytes, num_handles)) =
3641                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3642            {
3643                let member_inline_size =
3644                    <fidl::encoding::BoundedString<127> as fidl::encoding::TypeMarker>::inline_size(
3645                        decoder.context,
3646                    );
3647                if inlined != (member_inline_size <= 4) {
3648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3649                }
3650                let inner_offset;
3651                let mut inner_depth = depth.clone();
3652                if inlined {
3653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3654                    inner_offset = next_offset;
3655                } else {
3656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3657                    inner_depth.increment()?;
3658                }
3659                let val_ref = self
3660                    .counter_name
3661                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<127>, D));
3662                fidl::decode!(
3663                    fidl::encoding::BoundedString<127>,
3664                    D,
3665                    val_ref,
3666                    decoder,
3667                    inner_offset,
3668                    inner_depth
3669                )?;
3670                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3671                {
3672                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3673                }
3674                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3675                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3676                }
3677            }
3678
3679            next_offset += envelope_size;
3680
3681            // Decode the remaining unknown envelopes.
3682            while next_offset < end_offset {
3683                _next_ordinal_to_read += 1;
3684                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3685                next_offset += envelope_size;
3686            }
3687
3688            Ok(())
3689        }
3690    }
3691
3692    impl InspectGaugeConfig {
3693        #[inline(always)]
3694        fn max_ordinal_present(&self) -> u64 {
3695            if let Some(_) = self.statistics {
3696                return 3;
3697            }
3698            if let Some(_) = self.gauge_name {
3699                return 2;
3700            }
3701            if let Some(_) = self.gauge_id {
3702                return 1;
3703            }
3704            0
3705        }
3706    }
3707
3708    impl fidl::encoding::ValueTypeMarker for InspectGaugeConfig {
3709        type Borrowed<'a> = &'a Self;
3710        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3711            value
3712        }
3713    }
3714
3715    unsafe impl fidl::encoding::TypeMarker for InspectGaugeConfig {
3716        type Owned = Self;
3717
3718        #[inline(always)]
3719        fn inline_align(_context: fidl::encoding::Context) -> usize {
3720            8
3721        }
3722
3723        #[inline(always)]
3724        fn inline_size(_context: fidl::encoding::Context) -> usize {
3725            16
3726        }
3727    }
3728
3729    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<InspectGaugeConfig, D>
3730        for &InspectGaugeConfig
3731    {
3732        unsafe fn encode(
3733            self,
3734            encoder: &mut fidl::encoding::Encoder<'_, D>,
3735            offset: usize,
3736            mut depth: fidl::encoding::Depth,
3737        ) -> fidl::Result<()> {
3738            encoder.debug_check_bounds::<InspectGaugeConfig>(offset);
3739            // Vector header
3740            let max_ordinal: u64 = self.max_ordinal_present();
3741            encoder.write_num(max_ordinal, offset);
3742            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3743            // Calling encoder.out_of_line_offset(0) is not allowed.
3744            if max_ordinal == 0 {
3745                return Ok(());
3746            }
3747            depth.increment()?;
3748            let envelope_size = 8;
3749            let bytes_len = max_ordinal as usize * envelope_size;
3750            #[allow(unused_variables)]
3751            let offset = encoder.out_of_line_offset(bytes_len);
3752            let mut _prev_end_offset: usize = 0;
3753            if 1 > max_ordinal {
3754                return Ok(());
3755            }
3756
3757            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3758            // are envelope_size bytes.
3759            let cur_offset: usize = (1 - 1) * envelope_size;
3760
3761            // Zero reserved fields.
3762            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3763
3764            // Safety:
3765            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3766            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3767            //   envelope_size bytes, there is always sufficient room.
3768            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3769                self.gauge_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3770                encoder,
3771                offset + cur_offset,
3772                depth,
3773            )?;
3774
3775            _prev_end_offset = cur_offset + envelope_size;
3776            if 2 > max_ordinal {
3777                return Ok(());
3778            }
3779
3780            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3781            // are envelope_size bytes.
3782            let cur_offset: usize = (2 - 1) * envelope_size;
3783
3784            // Zero reserved fields.
3785            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3786
3787            // Safety:
3788            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3789            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3790            //   envelope_size bytes, there is always sufficient room.
3791            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<127>, D>(
3792                self.gauge_name.as_ref().map(
3793                    <fidl::encoding::BoundedString<127> as fidl::encoding::ValueTypeMarker>::borrow,
3794                ),
3795                encoder,
3796                offset + cur_offset,
3797                depth,
3798            )?;
3799
3800            _prev_end_offset = cur_offset + envelope_size;
3801            if 3 > max_ordinal {
3802                return Ok(());
3803            }
3804
3805            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3806            // are envelope_size bytes.
3807            let cur_offset: usize = (3 - 1) * envelope_size;
3808
3809            // Zero reserved fields.
3810            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3811
3812            // Safety:
3813            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3814            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3815            //   envelope_size bytes, there is always sufficient room.
3816            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<GaugeStatistic, 5>, D>(
3817            self.statistics.as_ref().map(<fidl::encoding::Vector<GaugeStatistic, 5> as fidl::encoding::ValueTypeMarker>::borrow),
3818            encoder, offset + cur_offset, depth
3819        )?;
3820
3821            _prev_end_offset = cur_offset + envelope_size;
3822
3823            Ok(())
3824        }
3825    }
3826
3827    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for InspectGaugeConfig {
3828        #[inline(always)]
3829        fn new_empty() -> Self {
3830            Self::default()
3831        }
3832
3833        unsafe fn decode(
3834            &mut self,
3835            decoder: &mut fidl::encoding::Decoder<'_, D>,
3836            offset: usize,
3837            mut depth: fidl::encoding::Depth,
3838        ) -> fidl::Result<()> {
3839            decoder.debug_check_bounds::<Self>(offset);
3840            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3841                None => return Err(fidl::Error::NotNullable),
3842                Some(len) => len,
3843            };
3844            // Calling decoder.out_of_line_offset(0) is not allowed.
3845            if len == 0 {
3846                return Ok(());
3847            };
3848            depth.increment()?;
3849            let envelope_size = 8;
3850            let bytes_len = len * envelope_size;
3851            let offset = decoder.out_of_line_offset(bytes_len)?;
3852            // Decode the envelope for each type.
3853            let mut _next_ordinal_to_read = 0;
3854            let mut next_offset = offset;
3855            let end_offset = offset + bytes_len;
3856            _next_ordinal_to_read += 1;
3857            if next_offset >= end_offset {
3858                return Ok(());
3859            }
3860
3861            // Decode unknown envelopes for gaps in ordinals.
3862            while _next_ordinal_to_read < 1 {
3863                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3864                _next_ordinal_to_read += 1;
3865                next_offset += envelope_size;
3866            }
3867
3868            let next_out_of_line = decoder.next_out_of_line();
3869            let handles_before = decoder.remaining_handles();
3870            if let Some((inlined, num_bytes, num_handles)) =
3871                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3872            {
3873                let member_inline_size =
3874                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3875                if inlined != (member_inline_size <= 4) {
3876                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3877                }
3878                let inner_offset;
3879                let mut inner_depth = depth.clone();
3880                if inlined {
3881                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3882                    inner_offset = next_offset;
3883                } else {
3884                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3885                    inner_depth.increment()?;
3886                }
3887                let val_ref = self.gauge_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
3888                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3889                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3890                {
3891                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3892                }
3893                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3894                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3895                }
3896            }
3897
3898            next_offset += envelope_size;
3899            _next_ordinal_to_read += 1;
3900            if next_offset >= end_offset {
3901                return Ok(());
3902            }
3903
3904            // Decode unknown envelopes for gaps in ordinals.
3905            while _next_ordinal_to_read < 2 {
3906                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3907                _next_ordinal_to_read += 1;
3908                next_offset += envelope_size;
3909            }
3910
3911            let next_out_of_line = decoder.next_out_of_line();
3912            let handles_before = decoder.remaining_handles();
3913            if let Some((inlined, num_bytes, num_handles)) =
3914                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3915            {
3916                let member_inline_size =
3917                    <fidl::encoding::BoundedString<127> as fidl::encoding::TypeMarker>::inline_size(
3918                        decoder.context,
3919                    );
3920                if inlined != (member_inline_size <= 4) {
3921                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3922                }
3923                let inner_offset;
3924                let mut inner_depth = depth.clone();
3925                if inlined {
3926                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3927                    inner_offset = next_offset;
3928                } else {
3929                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3930                    inner_depth.increment()?;
3931                }
3932                let val_ref = self
3933                    .gauge_name
3934                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<127>, D));
3935                fidl::decode!(
3936                    fidl::encoding::BoundedString<127>,
3937                    D,
3938                    val_ref,
3939                    decoder,
3940                    inner_offset,
3941                    inner_depth
3942                )?;
3943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3944                {
3945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3946                }
3947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3949                }
3950            }
3951
3952            next_offset += envelope_size;
3953            _next_ordinal_to_read += 1;
3954            if next_offset >= end_offset {
3955                return Ok(());
3956            }
3957
3958            // Decode unknown envelopes for gaps in ordinals.
3959            while _next_ordinal_to_read < 3 {
3960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3961                _next_ordinal_to_read += 1;
3962                next_offset += envelope_size;
3963            }
3964
3965            let next_out_of_line = decoder.next_out_of_line();
3966            let handles_before = decoder.remaining_handles();
3967            if let Some((inlined, num_bytes, num_handles)) =
3968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3969            {
3970                let member_inline_size = <fidl::encoding::Vector<GaugeStatistic, 5> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3971                if inlined != (member_inline_size <= 4) {
3972                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3973                }
3974                let inner_offset;
3975                let mut inner_depth = depth.clone();
3976                if inlined {
3977                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3978                    inner_offset = next_offset;
3979                } else {
3980                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3981                    inner_depth.increment()?;
3982                }
3983                let val_ref = self.statistics.get_or_insert_with(
3984                    || fidl::new_empty!(fidl::encoding::Vector<GaugeStatistic, 5>, D),
3985                );
3986                fidl::decode!(fidl::encoding::Vector<GaugeStatistic, 5>, D, val_ref, decoder, inner_offset, inner_depth)?;
3987                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3988                {
3989                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3990                }
3991                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3992                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3993                }
3994            }
3995
3996            next_offset += envelope_size;
3997
3998            // Decode the remaining unknown envelopes.
3999            while next_offset < end_offset {
4000                _next_ordinal_to_read += 1;
4001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4002                next_offset += envelope_size;
4003            }
4004
4005            Ok(())
4006        }
4007    }
4008
4009    impl PacketStats {
4010        #[inline(always)]
4011        fn max_ordinal_present(&self) -> u64 {
4012            if let Some(_) = self.tx_retries {
4013                return 4;
4014            }
4015            if let Some(_) = self.tx_drop {
4016                return 3;
4017            }
4018            if let Some(_) = self.tx {
4019                return 2;
4020            }
4021            if let Some(_) = self.rx {
4022                return 1;
4023            }
4024            0
4025        }
4026    }
4027
4028    impl fidl::encoding::ValueTypeMarker for PacketStats {
4029        type Borrowed<'a> = &'a Self;
4030        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4031            value
4032        }
4033    }
4034
4035    unsafe impl fidl::encoding::TypeMarker for PacketStats {
4036        type Owned = Self;
4037
4038        #[inline(always)]
4039        fn inline_align(_context: fidl::encoding::Context) -> usize {
4040            8
4041        }
4042
4043        #[inline(always)]
4044        fn inline_size(_context: fidl::encoding::Context) -> usize {
4045            16
4046        }
4047    }
4048
4049    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PacketStats, D>
4050        for &PacketStats
4051    {
4052        unsafe fn encode(
4053            self,
4054            encoder: &mut fidl::encoding::Encoder<'_, D>,
4055            offset: usize,
4056            mut depth: fidl::encoding::Depth,
4057        ) -> fidl::Result<()> {
4058            encoder.debug_check_bounds::<PacketStats>(offset);
4059            // Vector header
4060            let max_ordinal: u64 = self.max_ordinal_present();
4061            encoder.write_num(max_ordinal, offset);
4062            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4063            // Calling encoder.out_of_line_offset(0) is not allowed.
4064            if max_ordinal == 0 {
4065                return Ok(());
4066            }
4067            depth.increment()?;
4068            let envelope_size = 8;
4069            let bytes_len = max_ordinal as usize * envelope_size;
4070            #[allow(unused_variables)]
4071            let offset = encoder.out_of_line_offset(bytes_len);
4072            let mut _prev_end_offset: usize = 0;
4073            if 1 > max_ordinal {
4074                return Ok(());
4075            }
4076
4077            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4078            // are envelope_size bytes.
4079            let cur_offset: usize = (1 - 1) * envelope_size;
4080
4081            // Zero reserved fields.
4082            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4083
4084            // Safety:
4085            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4086            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4087            //   envelope_size bytes, there is always sufficient room.
4088            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4089                self.rx.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4090                encoder,
4091                offset + cur_offset,
4092                depth,
4093            )?;
4094
4095            _prev_end_offset = cur_offset + envelope_size;
4096            if 2 > max_ordinal {
4097                return Ok(());
4098            }
4099
4100            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4101            // are envelope_size bytes.
4102            let cur_offset: usize = (2 - 1) * envelope_size;
4103
4104            // Zero reserved fields.
4105            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4106
4107            // Safety:
4108            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4109            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4110            //   envelope_size bytes, there is always sufficient room.
4111            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4112                self.tx.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4113                encoder,
4114                offset + cur_offset,
4115                depth,
4116            )?;
4117
4118            _prev_end_offset = cur_offset + envelope_size;
4119            if 3 > max_ordinal {
4120                return Ok(());
4121            }
4122
4123            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4124            // are envelope_size bytes.
4125            let cur_offset: usize = (3 - 1) * envelope_size;
4126
4127            // Zero reserved fields.
4128            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4129
4130            // Safety:
4131            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4132            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4133            //   envelope_size bytes, there is always sufficient room.
4134            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4135                self.tx_drop.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4136                encoder,
4137                offset + cur_offset,
4138                depth,
4139            )?;
4140
4141            _prev_end_offset = cur_offset + envelope_size;
4142            if 4 > max_ordinal {
4143                return Ok(());
4144            }
4145
4146            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4147            // are envelope_size bytes.
4148            let cur_offset: usize = (4 - 1) * envelope_size;
4149
4150            // Zero reserved fields.
4151            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4152
4153            // Safety:
4154            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4155            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4156            //   envelope_size bytes, there is always sufficient room.
4157            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4158                self.tx_retries.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4159                encoder,
4160                offset + cur_offset,
4161                depth,
4162            )?;
4163
4164            _prev_end_offset = cur_offset + envelope_size;
4165
4166            Ok(())
4167        }
4168    }
4169
4170    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PacketStats {
4171        #[inline(always)]
4172        fn new_empty() -> Self {
4173            Self::default()
4174        }
4175
4176        unsafe fn decode(
4177            &mut self,
4178            decoder: &mut fidl::encoding::Decoder<'_, D>,
4179            offset: usize,
4180            mut depth: fidl::encoding::Depth,
4181        ) -> fidl::Result<()> {
4182            decoder.debug_check_bounds::<Self>(offset);
4183            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4184                None => return Err(fidl::Error::NotNullable),
4185                Some(len) => len,
4186            };
4187            // Calling decoder.out_of_line_offset(0) is not allowed.
4188            if len == 0 {
4189                return Ok(());
4190            };
4191            depth.increment()?;
4192            let envelope_size = 8;
4193            let bytes_len = len * envelope_size;
4194            let offset = decoder.out_of_line_offset(bytes_len)?;
4195            // Decode the envelope for each type.
4196            let mut _next_ordinal_to_read = 0;
4197            let mut next_offset = offset;
4198            let end_offset = offset + bytes_len;
4199            _next_ordinal_to_read += 1;
4200            if next_offset >= end_offset {
4201                return Ok(());
4202            }
4203
4204            // Decode unknown envelopes for gaps in ordinals.
4205            while _next_ordinal_to_read < 1 {
4206                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4207                _next_ordinal_to_read += 1;
4208                next_offset += envelope_size;
4209            }
4210
4211            let next_out_of_line = decoder.next_out_of_line();
4212            let handles_before = decoder.remaining_handles();
4213            if let Some((inlined, num_bytes, num_handles)) =
4214                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4215            {
4216                let member_inline_size =
4217                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4218                if inlined != (member_inline_size <= 4) {
4219                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4220                }
4221                let inner_offset;
4222                let mut inner_depth = depth.clone();
4223                if inlined {
4224                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4225                    inner_offset = next_offset;
4226                } else {
4227                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4228                    inner_depth.increment()?;
4229                }
4230                let val_ref = self.rx.get_or_insert_with(|| fidl::new_empty!(u64, D));
4231                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4232                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4233                {
4234                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4235                }
4236                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4237                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4238                }
4239            }
4240
4241            next_offset += envelope_size;
4242            _next_ordinal_to_read += 1;
4243            if next_offset >= end_offset {
4244                return Ok(());
4245            }
4246
4247            // Decode unknown envelopes for gaps in ordinals.
4248            while _next_ordinal_to_read < 2 {
4249                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4250                _next_ordinal_to_read += 1;
4251                next_offset += envelope_size;
4252            }
4253
4254            let next_out_of_line = decoder.next_out_of_line();
4255            let handles_before = decoder.remaining_handles();
4256            if let Some((inlined, num_bytes, num_handles)) =
4257                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4258            {
4259                let member_inline_size =
4260                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4261                if inlined != (member_inline_size <= 4) {
4262                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4263                }
4264                let inner_offset;
4265                let mut inner_depth = depth.clone();
4266                if inlined {
4267                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4268                    inner_offset = next_offset;
4269                } else {
4270                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4271                    inner_depth.increment()?;
4272                }
4273                let val_ref = self.tx.get_or_insert_with(|| fidl::new_empty!(u64, D));
4274                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4275                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4276                {
4277                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4278                }
4279                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4280                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4281                }
4282            }
4283
4284            next_offset += envelope_size;
4285            _next_ordinal_to_read += 1;
4286            if next_offset >= end_offset {
4287                return Ok(());
4288            }
4289
4290            // Decode unknown envelopes for gaps in ordinals.
4291            while _next_ordinal_to_read < 3 {
4292                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4293                _next_ordinal_to_read += 1;
4294                next_offset += envelope_size;
4295            }
4296
4297            let next_out_of_line = decoder.next_out_of_line();
4298            let handles_before = decoder.remaining_handles();
4299            if let Some((inlined, num_bytes, num_handles)) =
4300                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4301            {
4302                let member_inline_size =
4303                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4304                if inlined != (member_inline_size <= 4) {
4305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4306                }
4307                let inner_offset;
4308                let mut inner_depth = depth.clone();
4309                if inlined {
4310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4311                    inner_offset = next_offset;
4312                } else {
4313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4314                    inner_depth.increment()?;
4315                }
4316                let val_ref = self.tx_drop.get_or_insert_with(|| fidl::new_empty!(u64, D));
4317                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4318                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4319                {
4320                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4321                }
4322                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4323                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4324                }
4325            }
4326
4327            next_offset += envelope_size;
4328            _next_ordinal_to_read += 1;
4329            if next_offset >= end_offset {
4330                return Ok(());
4331            }
4332
4333            // Decode unknown envelopes for gaps in ordinals.
4334            while _next_ordinal_to_read < 4 {
4335                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4336                _next_ordinal_to_read += 1;
4337                next_offset += envelope_size;
4338            }
4339
4340            let next_out_of_line = decoder.next_out_of_line();
4341            let handles_before = decoder.remaining_handles();
4342            if let Some((inlined, num_bytes, num_handles)) =
4343                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4344            {
4345                let member_inline_size =
4346                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4347                if inlined != (member_inline_size <= 4) {
4348                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4349                }
4350                let inner_offset;
4351                let mut inner_depth = depth.clone();
4352                if inlined {
4353                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4354                    inner_offset = next_offset;
4355                } else {
4356                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4357                    inner_depth.increment()?;
4358                }
4359                let val_ref = self.tx_retries.get_or_insert_with(|| fidl::new_empty!(u64, D));
4360                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4362                {
4363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4364                }
4365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4367                }
4368            }
4369
4370            next_offset += envelope_size;
4371
4372            // Decode the remaining unknown envelopes.
4373            while next_offset < end_offset {
4374                _next_ordinal_to_read += 1;
4375                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4376                next_offset += envelope_size;
4377            }
4378
4379            Ok(())
4380        }
4381    }
4382
4383    impl SignalReport {
4384        #[inline(always)]
4385        fn max_ordinal_present(&self) -> u64 {
4386            if let Some(_) = self.connection_signal_report {
4387                return 1;
4388            }
4389            0
4390        }
4391    }
4392
4393    impl fidl::encoding::ValueTypeMarker for SignalReport {
4394        type Borrowed<'a> = &'a Self;
4395        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4396            value
4397        }
4398    }
4399
4400    unsafe impl fidl::encoding::TypeMarker for SignalReport {
4401        type Owned = Self;
4402
4403        #[inline(always)]
4404        fn inline_align(_context: fidl::encoding::Context) -> usize {
4405            8
4406        }
4407
4408        #[inline(always)]
4409        fn inline_size(_context: fidl::encoding::Context) -> usize {
4410            16
4411        }
4412    }
4413
4414    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SignalReport, D>
4415        for &SignalReport
4416    {
4417        unsafe fn encode(
4418            self,
4419            encoder: &mut fidl::encoding::Encoder<'_, D>,
4420            offset: usize,
4421            mut depth: fidl::encoding::Depth,
4422        ) -> fidl::Result<()> {
4423            encoder.debug_check_bounds::<SignalReport>(offset);
4424            // Vector header
4425            let max_ordinal: u64 = self.max_ordinal_present();
4426            encoder.write_num(max_ordinal, offset);
4427            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4428            // Calling encoder.out_of_line_offset(0) is not allowed.
4429            if max_ordinal == 0 {
4430                return Ok(());
4431            }
4432            depth.increment()?;
4433            let envelope_size = 8;
4434            let bytes_len = max_ordinal as usize * envelope_size;
4435            #[allow(unused_variables)]
4436            let offset = encoder.out_of_line_offset(bytes_len);
4437            let mut _prev_end_offset: usize = 0;
4438            if 1 > max_ordinal {
4439                return Ok(());
4440            }
4441
4442            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4443            // are envelope_size bytes.
4444            let cur_offset: usize = (1 - 1) * envelope_size;
4445
4446            // Zero reserved fields.
4447            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4448
4449            // Safety:
4450            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4451            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4452            //   envelope_size bytes, there is always sufficient room.
4453            fidl::encoding::encode_in_envelope_optional::<ConnectionSignalReport, D>(
4454                self.connection_signal_report
4455                    .as_ref()
4456                    .map(<ConnectionSignalReport as fidl::encoding::ValueTypeMarker>::borrow),
4457                encoder,
4458                offset + cur_offset,
4459                depth,
4460            )?;
4461
4462            _prev_end_offset = cur_offset + envelope_size;
4463
4464            Ok(())
4465        }
4466    }
4467
4468    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SignalReport {
4469        #[inline(always)]
4470        fn new_empty() -> Self {
4471            Self::default()
4472        }
4473
4474        unsafe fn decode(
4475            &mut self,
4476            decoder: &mut fidl::encoding::Decoder<'_, D>,
4477            offset: usize,
4478            mut depth: fidl::encoding::Depth,
4479        ) -> fidl::Result<()> {
4480            decoder.debug_check_bounds::<Self>(offset);
4481            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4482                None => return Err(fidl::Error::NotNullable),
4483                Some(len) => len,
4484            };
4485            // Calling decoder.out_of_line_offset(0) is not allowed.
4486            if len == 0 {
4487                return Ok(());
4488            };
4489            depth.increment()?;
4490            let envelope_size = 8;
4491            let bytes_len = len * envelope_size;
4492            let offset = decoder.out_of_line_offset(bytes_len)?;
4493            // Decode the envelope for each type.
4494            let mut _next_ordinal_to_read = 0;
4495            let mut next_offset = offset;
4496            let end_offset = offset + bytes_len;
4497            _next_ordinal_to_read += 1;
4498            if next_offset >= end_offset {
4499                return Ok(());
4500            }
4501
4502            // Decode unknown envelopes for gaps in ordinals.
4503            while _next_ordinal_to_read < 1 {
4504                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4505                _next_ordinal_to_read += 1;
4506                next_offset += envelope_size;
4507            }
4508
4509            let next_out_of_line = decoder.next_out_of_line();
4510            let handles_before = decoder.remaining_handles();
4511            if let Some((inlined, num_bytes, num_handles)) =
4512                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4513            {
4514                let member_inline_size =
4515                    <ConnectionSignalReport as fidl::encoding::TypeMarker>::inline_size(
4516                        decoder.context,
4517                    );
4518                if inlined != (member_inline_size <= 4) {
4519                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4520                }
4521                let inner_offset;
4522                let mut inner_depth = depth.clone();
4523                if inlined {
4524                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4525                    inner_offset = next_offset;
4526                } else {
4527                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4528                    inner_depth.increment()?;
4529                }
4530                let val_ref = self
4531                    .connection_signal_report
4532                    .get_or_insert_with(|| fidl::new_empty!(ConnectionSignalReport, D));
4533                fidl::decode!(
4534                    ConnectionSignalReport,
4535                    D,
4536                    val_ref,
4537                    decoder,
4538                    inner_offset,
4539                    inner_depth
4540                )?;
4541                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4542                {
4543                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4544                }
4545                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4546                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4547                }
4548            }
4549
4550            next_offset += envelope_size;
4551
4552            // Decode the remaining unknown envelopes.
4553            while next_offset < end_offset {
4554                _next_ordinal_to_read += 1;
4555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4556                next_offset += envelope_size;
4557            }
4558
4559            Ok(())
4560        }
4561    }
4562
4563    impl TelemetrySupport {
4564        #[inline(always)]
4565        fn max_ordinal_present(&self) -> u64 {
4566            if let Some(_) = self.inspect_gauge_configs {
4567                return 2;
4568            }
4569            if let Some(_) = self.inspect_counter_configs {
4570                return 1;
4571            }
4572            0
4573        }
4574    }
4575
4576    impl fidl::encoding::ValueTypeMarker for TelemetrySupport {
4577        type Borrowed<'a> = &'a Self;
4578        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4579            value
4580        }
4581    }
4582
4583    unsafe impl fidl::encoding::TypeMarker for TelemetrySupport {
4584        type Owned = Self;
4585
4586        #[inline(always)]
4587        fn inline_align(_context: fidl::encoding::Context) -> usize {
4588            8
4589        }
4590
4591        #[inline(always)]
4592        fn inline_size(_context: fidl::encoding::Context) -> usize {
4593            16
4594        }
4595    }
4596
4597    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TelemetrySupport, D>
4598        for &TelemetrySupport
4599    {
4600        unsafe fn encode(
4601            self,
4602            encoder: &mut fidl::encoding::Encoder<'_, D>,
4603            offset: usize,
4604            mut depth: fidl::encoding::Depth,
4605        ) -> fidl::Result<()> {
4606            encoder.debug_check_bounds::<TelemetrySupport>(offset);
4607            // Vector header
4608            let max_ordinal: u64 = self.max_ordinal_present();
4609            encoder.write_num(max_ordinal, offset);
4610            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4611            // Calling encoder.out_of_line_offset(0) is not allowed.
4612            if max_ordinal == 0 {
4613                return Ok(());
4614            }
4615            depth.increment()?;
4616            let envelope_size = 8;
4617            let bytes_len = max_ordinal as usize * envelope_size;
4618            #[allow(unused_variables)]
4619            let offset = encoder.out_of_line_offset(bytes_len);
4620            let mut _prev_end_offset: usize = 0;
4621            if 1 > max_ordinal {
4622                return Ok(());
4623            }
4624
4625            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4626            // are envelope_size bytes.
4627            let cur_offset: usize = (1 - 1) * envelope_size;
4628
4629            // Zero reserved fields.
4630            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4631
4632            // Safety:
4633            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4634            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4635            //   envelope_size bytes, there is always sufficient room.
4636            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<InspectCounterConfig, 127>, D>(
4637            self.inspect_counter_configs.as_ref().map(<fidl::encoding::Vector<InspectCounterConfig, 127> as fidl::encoding::ValueTypeMarker>::borrow),
4638            encoder, offset + cur_offset, depth
4639        )?;
4640
4641            _prev_end_offset = cur_offset + envelope_size;
4642            if 2 > max_ordinal {
4643                return Ok(());
4644            }
4645
4646            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4647            // are envelope_size bytes.
4648            let cur_offset: usize = (2 - 1) * envelope_size;
4649
4650            // Zero reserved fields.
4651            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4652
4653            // Safety:
4654            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4655            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4656            //   envelope_size bytes, there is always sufficient room.
4657            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<InspectGaugeConfig, 127>, D>(
4658            self.inspect_gauge_configs.as_ref().map(<fidl::encoding::Vector<InspectGaugeConfig, 127> as fidl::encoding::ValueTypeMarker>::borrow),
4659            encoder, offset + cur_offset, depth
4660        )?;
4661
4662            _prev_end_offset = cur_offset + envelope_size;
4663
4664            Ok(())
4665        }
4666    }
4667
4668    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TelemetrySupport {
4669        #[inline(always)]
4670        fn new_empty() -> Self {
4671            Self::default()
4672        }
4673
4674        unsafe fn decode(
4675            &mut self,
4676            decoder: &mut fidl::encoding::Decoder<'_, D>,
4677            offset: usize,
4678            mut depth: fidl::encoding::Depth,
4679        ) -> fidl::Result<()> {
4680            decoder.debug_check_bounds::<Self>(offset);
4681            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4682                None => return Err(fidl::Error::NotNullable),
4683                Some(len) => len,
4684            };
4685            // Calling decoder.out_of_line_offset(0) is not allowed.
4686            if len == 0 {
4687                return Ok(());
4688            };
4689            depth.increment()?;
4690            let envelope_size = 8;
4691            let bytes_len = len * envelope_size;
4692            let offset = decoder.out_of_line_offset(bytes_len)?;
4693            // Decode the envelope for each type.
4694            let mut _next_ordinal_to_read = 0;
4695            let mut next_offset = offset;
4696            let end_offset = offset + bytes_len;
4697            _next_ordinal_to_read += 1;
4698            if next_offset >= end_offset {
4699                return Ok(());
4700            }
4701
4702            // Decode unknown envelopes for gaps in ordinals.
4703            while _next_ordinal_to_read < 1 {
4704                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4705                _next_ordinal_to_read += 1;
4706                next_offset += envelope_size;
4707            }
4708
4709            let next_out_of_line = decoder.next_out_of_line();
4710            let handles_before = decoder.remaining_handles();
4711            if let Some((inlined, num_bytes, num_handles)) =
4712                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4713            {
4714                let member_inline_size = <fidl::encoding::Vector<InspectCounterConfig, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4715                if inlined != (member_inline_size <= 4) {
4716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4717                }
4718                let inner_offset;
4719                let mut inner_depth = depth.clone();
4720                if inlined {
4721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4722                    inner_offset = next_offset;
4723                } else {
4724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4725                    inner_depth.increment()?;
4726                }
4727                let val_ref = self.inspect_counter_configs.get_or_insert_with(
4728                    || fidl::new_empty!(fidl::encoding::Vector<InspectCounterConfig, 127>, D),
4729                );
4730                fidl::decode!(fidl::encoding::Vector<InspectCounterConfig, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
4731                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4732                {
4733                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4734                }
4735                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4736                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4737                }
4738            }
4739
4740            next_offset += envelope_size;
4741            _next_ordinal_to_read += 1;
4742            if next_offset >= end_offset {
4743                return Ok(());
4744            }
4745
4746            // Decode unknown envelopes for gaps in ordinals.
4747            while _next_ordinal_to_read < 2 {
4748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4749                _next_ordinal_to_read += 1;
4750                next_offset += envelope_size;
4751            }
4752
4753            let next_out_of_line = decoder.next_out_of_line();
4754            let handles_before = decoder.remaining_handles();
4755            if let Some((inlined, num_bytes, num_handles)) =
4756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4757            {
4758                let member_inline_size = <fidl::encoding::Vector<InspectGaugeConfig, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4759                if inlined != (member_inline_size <= 4) {
4760                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4761                }
4762                let inner_offset;
4763                let mut inner_depth = depth.clone();
4764                if inlined {
4765                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4766                    inner_offset = next_offset;
4767                } else {
4768                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4769                    inner_depth.increment()?;
4770                }
4771                let val_ref = self.inspect_gauge_configs.get_or_insert_with(
4772                    || fidl::new_empty!(fidl::encoding::Vector<InspectGaugeConfig, 127>, D),
4773                );
4774                fidl::decode!(fidl::encoding::Vector<InspectGaugeConfig, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
4775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4776                {
4777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4778                }
4779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4781                }
4782            }
4783
4784            next_offset += envelope_size;
4785
4786            // Decode the remaining unknown envelopes.
4787            while next_offset < end_offset {
4788                _next_ordinal_to_read += 1;
4789                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4790                next_offset += envelope_size;
4791            }
4792
4793            Ok(())
4794        }
4795    }
4796
4797    impl WmePacketStats {
4798        #[inline(always)]
4799        fn max_ordinal_present(&self) -> u64 {
4800            if let Some(_) = self.vo {
4801                return 4;
4802            }
4803            if let Some(_) = self.vi {
4804                return 3;
4805            }
4806            if let Some(_) = self.bk {
4807                return 2;
4808            }
4809            if let Some(_) = self.be {
4810                return 1;
4811            }
4812            0
4813        }
4814    }
4815
4816    impl fidl::encoding::ValueTypeMarker for WmePacketStats {
4817        type Borrowed<'a> = &'a Self;
4818        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4819            value
4820        }
4821    }
4822
4823    unsafe impl fidl::encoding::TypeMarker for WmePacketStats {
4824        type Owned = Self;
4825
4826        #[inline(always)]
4827        fn inline_align(_context: fidl::encoding::Context) -> usize {
4828            8
4829        }
4830
4831        #[inline(always)]
4832        fn inline_size(_context: fidl::encoding::Context) -> usize {
4833            16
4834        }
4835    }
4836
4837    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WmePacketStats, D>
4838        for &WmePacketStats
4839    {
4840        unsafe fn encode(
4841            self,
4842            encoder: &mut fidl::encoding::Encoder<'_, D>,
4843            offset: usize,
4844            mut depth: fidl::encoding::Depth,
4845        ) -> fidl::Result<()> {
4846            encoder.debug_check_bounds::<WmePacketStats>(offset);
4847            // Vector header
4848            let max_ordinal: u64 = self.max_ordinal_present();
4849            encoder.write_num(max_ordinal, offset);
4850            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4851            // Calling encoder.out_of_line_offset(0) is not allowed.
4852            if max_ordinal == 0 {
4853                return Ok(());
4854            }
4855            depth.increment()?;
4856            let envelope_size = 8;
4857            let bytes_len = max_ordinal as usize * envelope_size;
4858            #[allow(unused_variables)]
4859            let offset = encoder.out_of_line_offset(bytes_len);
4860            let mut _prev_end_offset: usize = 0;
4861            if 1 > max_ordinal {
4862                return Ok(());
4863            }
4864
4865            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4866            // are envelope_size bytes.
4867            let cur_offset: usize = (1 - 1) * envelope_size;
4868
4869            // Zero reserved fields.
4870            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4871
4872            // Safety:
4873            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4874            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4875            //   envelope_size bytes, there is always sufficient room.
4876            fidl::encoding::encode_in_envelope_optional::<PacketStats, D>(
4877                self.be.as_ref().map(<PacketStats as fidl::encoding::ValueTypeMarker>::borrow),
4878                encoder,
4879                offset + cur_offset,
4880                depth,
4881            )?;
4882
4883            _prev_end_offset = cur_offset + envelope_size;
4884            if 2 > max_ordinal {
4885                return Ok(());
4886            }
4887
4888            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4889            // are envelope_size bytes.
4890            let cur_offset: usize = (2 - 1) * envelope_size;
4891
4892            // Zero reserved fields.
4893            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4894
4895            // Safety:
4896            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4897            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4898            //   envelope_size bytes, there is always sufficient room.
4899            fidl::encoding::encode_in_envelope_optional::<PacketStats, D>(
4900                self.bk.as_ref().map(<PacketStats as fidl::encoding::ValueTypeMarker>::borrow),
4901                encoder,
4902                offset + cur_offset,
4903                depth,
4904            )?;
4905
4906            _prev_end_offset = cur_offset + envelope_size;
4907            if 3 > max_ordinal {
4908                return Ok(());
4909            }
4910
4911            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4912            // are envelope_size bytes.
4913            let cur_offset: usize = (3 - 1) * envelope_size;
4914
4915            // Zero reserved fields.
4916            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4917
4918            // Safety:
4919            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4920            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4921            //   envelope_size bytes, there is always sufficient room.
4922            fidl::encoding::encode_in_envelope_optional::<PacketStats, D>(
4923                self.vi.as_ref().map(<PacketStats as fidl::encoding::ValueTypeMarker>::borrow),
4924                encoder,
4925                offset + cur_offset,
4926                depth,
4927            )?;
4928
4929            _prev_end_offset = cur_offset + envelope_size;
4930            if 4 > max_ordinal {
4931                return Ok(());
4932            }
4933
4934            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4935            // are envelope_size bytes.
4936            let cur_offset: usize = (4 - 1) * envelope_size;
4937
4938            // Zero reserved fields.
4939            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4940
4941            // Safety:
4942            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4943            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4944            //   envelope_size bytes, there is always sufficient room.
4945            fidl::encoding::encode_in_envelope_optional::<PacketStats, D>(
4946                self.vo.as_ref().map(<PacketStats as fidl::encoding::ValueTypeMarker>::borrow),
4947                encoder,
4948                offset + cur_offset,
4949                depth,
4950            )?;
4951
4952            _prev_end_offset = cur_offset + envelope_size;
4953
4954            Ok(())
4955        }
4956    }
4957
4958    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WmePacketStats {
4959        #[inline(always)]
4960        fn new_empty() -> Self {
4961            Self::default()
4962        }
4963
4964        unsafe fn decode(
4965            &mut self,
4966            decoder: &mut fidl::encoding::Decoder<'_, D>,
4967            offset: usize,
4968            mut depth: fidl::encoding::Depth,
4969        ) -> fidl::Result<()> {
4970            decoder.debug_check_bounds::<Self>(offset);
4971            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4972                None => return Err(fidl::Error::NotNullable),
4973                Some(len) => len,
4974            };
4975            // Calling decoder.out_of_line_offset(0) is not allowed.
4976            if len == 0 {
4977                return Ok(());
4978            };
4979            depth.increment()?;
4980            let envelope_size = 8;
4981            let bytes_len = len * envelope_size;
4982            let offset = decoder.out_of_line_offset(bytes_len)?;
4983            // Decode the envelope for each type.
4984            let mut _next_ordinal_to_read = 0;
4985            let mut next_offset = offset;
4986            let end_offset = offset + bytes_len;
4987            _next_ordinal_to_read += 1;
4988            if next_offset >= end_offset {
4989                return Ok(());
4990            }
4991
4992            // Decode unknown envelopes for gaps in ordinals.
4993            while _next_ordinal_to_read < 1 {
4994                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4995                _next_ordinal_to_read += 1;
4996                next_offset += envelope_size;
4997            }
4998
4999            let next_out_of_line = decoder.next_out_of_line();
5000            let handles_before = decoder.remaining_handles();
5001            if let Some((inlined, num_bytes, num_handles)) =
5002                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5003            {
5004                let member_inline_size =
5005                    <PacketStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5006                if inlined != (member_inline_size <= 4) {
5007                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5008                }
5009                let inner_offset;
5010                let mut inner_depth = depth.clone();
5011                if inlined {
5012                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5013                    inner_offset = next_offset;
5014                } else {
5015                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5016                    inner_depth.increment()?;
5017                }
5018                let val_ref = self.be.get_or_insert_with(|| fidl::new_empty!(PacketStats, D));
5019                fidl::decode!(PacketStats, D, val_ref, decoder, inner_offset, inner_depth)?;
5020                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5021                {
5022                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5023                }
5024                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5025                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5026                }
5027            }
5028
5029            next_offset += envelope_size;
5030            _next_ordinal_to_read += 1;
5031            if next_offset >= end_offset {
5032                return Ok(());
5033            }
5034
5035            // Decode unknown envelopes for gaps in ordinals.
5036            while _next_ordinal_to_read < 2 {
5037                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5038                _next_ordinal_to_read += 1;
5039                next_offset += envelope_size;
5040            }
5041
5042            let next_out_of_line = decoder.next_out_of_line();
5043            let handles_before = decoder.remaining_handles();
5044            if let Some((inlined, num_bytes, num_handles)) =
5045                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5046            {
5047                let member_inline_size =
5048                    <PacketStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5049                if inlined != (member_inline_size <= 4) {
5050                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5051                }
5052                let inner_offset;
5053                let mut inner_depth = depth.clone();
5054                if inlined {
5055                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5056                    inner_offset = next_offset;
5057                } else {
5058                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5059                    inner_depth.increment()?;
5060                }
5061                let val_ref = self.bk.get_or_insert_with(|| fidl::new_empty!(PacketStats, D));
5062                fidl::decode!(PacketStats, D, val_ref, decoder, inner_offset, inner_depth)?;
5063                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5064                {
5065                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5066                }
5067                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5068                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5069                }
5070            }
5071
5072            next_offset += envelope_size;
5073            _next_ordinal_to_read += 1;
5074            if next_offset >= end_offset {
5075                return Ok(());
5076            }
5077
5078            // Decode unknown envelopes for gaps in ordinals.
5079            while _next_ordinal_to_read < 3 {
5080                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5081                _next_ordinal_to_read += 1;
5082                next_offset += envelope_size;
5083            }
5084
5085            let next_out_of_line = decoder.next_out_of_line();
5086            let handles_before = decoder.remaining_handles();
5087            if let Some((inlined, num_bytes, num_handles)) =
5088                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5089            {
5090                let member_inline_size =
5091                    <PacketStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5092                if inlined != (member_inline_size <= 4) {
5093                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5094                }
5095                let inner_offset;
5096                let mut inner_depth = depth.clone();
5097                if inlined {
5098                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5099                    inner_offset = next_offset;
5100                } else {
5101                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5102                    inner_depth.increment()?;
5103                }
5104                let val_ref = self.vi.get_or_insert_with(|| fidl::new_empty!(PacketStats, D));
5105                fidl::decode!(PacketStats, D, val_ref, decoder, inner_offset, inner_depth)?;
5106                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5107                {
5108                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5109                }
5110                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5111                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5112                }
5113            }
5114
5115            next_offset += envelope_size;
5116            _next_ordinal_to_read += 1;
5117            if next_offset >= end_offset {
5118                return Ok(());
5119            }
5120
5121            // Decode unknown envelopes for gaps in ordinals.
5122            while _next_ordinal_to_read < 4 {
5123                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5124                _next_ordinal_to_read += 1;
5125                next_offset += envelope_size;
5126            }
5127
5128            let next_out_of_line = decoder.next_out_of_line();
5129            let handles_before = decoder.remaining_handles();
5130            if let Some((inlined, num_bytes, num_handles)) =
5131                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5132            {
5133                let member_inline_size =
5134                    <PacketStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5135                if inlined != (member_inline_size <= 4) {
5136                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5137                }
5138                let inner_offset;
5139                let mut inner_depth = depth.clone();
5140                if inlined {
5141                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5142                    inner_offset = next_offset;
5143                } else {
5144                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5145                    inner_depth.increment()?;
5146                }
5147                let val_ref = self.vo.get_or_insert_with(|| fidl::new_empty!(PacketStats, D));
5148                fidl::decode!(PacketStats, D, val_ref, decoder, inner_offset, inner_depth)?;
5149                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5150                {
5151                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5152                }
5153                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5154                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5155                }
5156            }
5157
5158            next_offset += envelope_size;
5159
5160            // Decode the remaining unknown envelopes.
5161            while next_offset < end_offset {
5162                _next_ordinal_to_read += 1;
5163                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5164                next_offset += envelope_size;
5165            }
5166
5167            Ok(())
5168        }
5169    }
5170}