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 channel: Option<fidl_fuchsia_wlan_ieee80211__common::WlanChannel>,
295    pub tx_rate_500kbps: Option<u32>,
296    pub rssi_dbm: Option<i8>,
297    pub snr_db: Option<i8>,
298    #[doc(hidden)]
299    pub __source_breaking: fidl::marker::SourceBreaking,
300}
301
302impl fidl::Persistable for ConnectionSignalReport {}
303
304#[derive(Clone, Debug, Default, PartialEq)]
305pub struct ConnectionStats {
306    /// ID of the current connection. Used by WLAN telemetry to determine whether
307    /// the current counters and the previous counters belong to the same connection.
308    /// If the counters belong to two different connections, telemetry will not diff
309    /// between them as it assumes that the driver/firmware has reset the counter
310    /// in between.
311    ///
312    /// The driver should set a new connection ID after a successful connection,
313    /// reconnection, or roaming attempt, as it's expected that the connection-
314    /// related counters would reset on a new connection.
315    pub connection_id: Option<u8>,
316    pub driver_specific_counters: Option<Vec<UnnamedCounter>>,
317    pub driver_specific_gauges: Option<Vec<UnnamedGauge>>,
318    pub rx_unicast_total: Option<u64>,
319    pub rx_unicast_drop: Option<u64>,
320    pub rx_multicast: Option<u64>,
321    pub tx_total: Option<u64>,
322    pub tx_drop: Option<u64>,
323    #[doc(hidden)]
324    pub __source_breaking: fidl::marker::SourceBreaking,
325}
326
327impl fidl::Persistable for ConnectionStats {}
328
329#[derive(Clone, Debug, Default, PartialEq)]
330pub struct IfaceHistogramStats {
331    /// Noise floor histogram(s).
332    pub noise_floor_histograms: Option<Vec<NoiseFloorHistogram>>,
333    /// Received signal strength indicator (RSSI) histogram(s).
334    pub rssi_histograms: Option<Vec<RssiHistogram>>,
335    /// Received rate index histogram(s).
336    pub rx_rate_index_histograms: Option<Vec<RxRateIndexHistogram>>,
337    /// Signal to noise ratio (SNR) histogram(s).
338    pub snr_histograms: Option<Vec<SnrHistogram>>,
339    #[doc(hidden)]
340    pub __source_breaking: fidl::marker::SourceBreaking,
341}
342
343impl fidl::Persistable for IfaceHistogramStats {}
344
345#[derive(Clone, Debug, Default, PartialEq)]
346pub struct IfaceStats {
347    /// Stats related to the current connection. May not be set if the client is not connected.
348    pub connection_stats: Option<ConnectionStats>,
349    pub driver_specific_counters: Option<Vec<UnnamedCounter>>,
350    pub driver_specific_gauges: Option<Vec<UnnamedGauge>>,
351    #[doc(hidden)]
352    pub __source_breaking: fidl::marker::SourceBreaking,
353}
354
355impl fidl::Persistable for IfaceStats {}
356
357/// Config to associate a driver-specific counter ID with a counter name that is
358/// to be used in Inspect.
359#[derive(Clone, Debug, Default, PartialEq)]
360pub struct InspectCounterConfig {
361    pub counter_id: Option<u16>,
362    pub counter_name: Option<String>,
363    #[doc(hidden)]
364    pub __source_breaking: fidl::marker::SourceBreaking,
365}
366
367impl fidl::Persistable for InspectCounterConfig {}
368
369/// Config to associate a driver-specific gauge ID with a gauge name that is
370/// to be used in Inspect.
371#[derive(Clone, Debug, Default, PartialEq)]
372pub struct InspectGaugeConfig {
373    pub gauge_id: Option<u16>,
374    pub gauge_name: Option<String>,
375    /// An Inspect time series would be created per statistic.
376    pub statistics: Option<Vec<GaugeStatistic>>,
377    #[doc(hidden)]
378    pub __source_breaking: fidl::marker::SourceBreaking,
379}
380
381impl fidl::Persistable for InspectGaugeConfig {}
382
383#[derive(Clone, Debug, Default, PartialEq)]
384pub struct SignalReport {
385    /// Signal report related to the current connection.
386    /// May not be set if the client is not connected.
387    pub connection_signal_report: Option<ConnectionSignalReport>,
388    #[doc(hidden)]
389    pub __source_breaking: fidl::marker::SourceBreaking,
390}
391
392impl fidl::Persistable for SignalReport {}
393
394#[derive(Clone, Debug, Default, PartialEq)]
395pub struct TelemetrySupport {
396    /// Specifies counters that should be logged into Inspect time series
397    pub inspect_counter_configs: Option<Vec<InspectCounterConfig>>,
398    /// Specifies gauges that should be logged into Inspect time series
399    pub inspect_gauge_configs: Option<Vec<InspectGaugeConfig>>,
400    #[doc(hidden)]
401    pub __source_breaking: fidl::marker::SourceBreaking,
402}
403
404impl fidl::Persistable for TelemetrySupport {}
405
406mod internal {
407    use super::*;
408    unsafe impl fidl::encoding::TypeMarker for AntennaFreq {
409        type Owned = Self;
410
411        #[inline(always)]
412        fn inline_align(_context: fidl::encoding::Context) -> usize {
413            std::mem::align_of::<u8>()
414        }
415
416        #[inline(always)]
417        fn inline_size(_context: fidl::encoding::Context) -> usize {
418            std::mem::size_of::<u8>()
419        }
420
421        #[inline(always)]
422        fn encode_is_copy() -> bool {
423            true
424        }
425
426        #[inline(always)]
427        fn decode_is_copy() -> bool {
428            false
429        }
430    }
431
432    impl fidl::encoding::ValueTypeMarker for AntennaFreq {
433        type Borrowed<'a> = Self;
434        #[inline(always)]
435        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
436            *value
437        }
438    }
439
440    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for AntennaFreq {
441        #[inline]
442        unsafe fn encode(
443            self,
444            encoder: &mut fidl::encoding::Encoder<'_, D>,
445            offset: usize,
446            _depth: fidl::encoding::Depth,
447        ) -> fidl::Result<()> {
448            encoder.debug_check_bounds::<Self>(offset);
449            encoder.write_num(self.into_primitive(), offset);
450            Ok(())
451        }
452    }
453
454    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AntennaFreq {
455        #[inline(always)]
456        fn new_empty() -> Self {
457            Self::Antenna2G
458        }
459
460        #[inline]
461        unsafe fn decode(
462            &mut self,
463            decoder: &mut fidl::encoding::Decoder<'_, D>,
464            offset: usize,
465            _depth: fidl::encoding::Depth,
466        ) -> fidl::Result<()> {
467            decoder.debug_check_bounds::<Self>(offset);
468            let prim = decoder.read_num::<u8>(offset);
469
470            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
471            Ok(())
472        }
473    }
474    unsafe impl fidl::encoding::TypeMarker for GaugeStatistic {
475        type Owned = Self;
476
477        #[inline(always)]
478        fn inline_align(_context: fidl::encoding::Context) -> usize {
479            std::mem::align_of::<u8>()
480        }
481
482        #[inline(always)]
483        fn inline_size(_context: fidl::encoding::Context) -> usize {
484            std::mem::size_of::<u8>()
485        }
486
487        #[inline(always)]
488        fn encode_is_copy() -> bool {
489            false
490        }
491
492        #[inline(always)]
493        fn decode_is_copy() -> bool {
494            false
495        }
496    }
497
498    impl fidl::encoding::ValueTypeMarker for GaugeStatistic {
499        type Borrowed<'a> = Self;
500        #[inline(always)]
501        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
502            *value
503        }
504    }
505
506    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GaugeStatistic {
507        #[inline]
508        unsafe fn encode(
509            self,
510            encoder: &mut fidl::encoding::Encoder<'_, D>,
511            offset: usize,
512            _depth: fidl::encoding::Depth,
513        ) -> fidl::Result<()> {
514            encoder.debug_check_bounds::<Self>(offset);
515            encoder.write_num(self.into_primitive(), offset);
516            Ok(())
517        }
518    }
519
520    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GaugeStatistic {
521        #[inline(always)]
522        fn new_empty() -> Self {
523            Self::unknown()
524        }
525
526        #[inline]
527        unsafe fn decode(
528            &mut self,
529            decoder: &mut fidl::encoding::Decoder<'_, D>,
530            offset: usize,
531            _depth: fidl::encoding::Depth,
532        ) -> fidl::Result<()> {
533            decoder.debug_check_bounds::<Self>(offset);
534            let prim = decoder.read_num::<u8>(offset);
535
536            *self = Self::from_primitive_allow_unknown(prim);
537            Ok(())
538        }
539    }
540    unsafe impl fidl::encoding::TypeMarker for HistScope {
541        type Owned = Self;
542
543        #[inline(always)]
544        fn inline_align(_context: fidl::encoding::Context) -> usize {
545            std::mem::align_of::<u8>()
546        }
547
548        #[inline(always)]
549        fn inline_size(_context: fidl::encoding::Context) -> usize {
550            std::mem::size_of::<u8>()
551        }
552
553        #[inline(always)]
554        fn encode_is_copy() -> bool {
555            true
556        }
557
558        #[inline(always)]
559        fn decode_is_copy() -> bool {
560            false
561        }
562    }
563
564    impl fidl::encoding::ValueTypeMarker for HistScope {
565        type Borrowed<'a> = Self;
566        #[inline(always)]
567        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
568            *value
569        }
570    }
571
572    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HistScope {
573        #[inline]
574        unsafe fn encode(
575            self,
576            encoder: &mut fidl::encoding::Encoder<'_, D>,
577            offset: usize,
578            _depth: fidl::encoding::Depth,
579        ) -> fidl::Result<()> {
580            encoder.debug_check_bounds::<Self>(offset);
581            encoder.write_num(self.into_primitive(), offset);
582            Ok(())
583        }
584    }
585
586    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HistScope {
587        #[inline(always)]
588        fn new_empty() -> Self {
589            Self::Station
590        }
591
592        #[inline]
593        unsafe fn decode(
594            &mut self,
595            decoder: &mut fidl::encoding::Decoder<'_, D>,
596            offset: usize,
597            _depth: fidl::encoding::Depth,
598        ) -> fidl::Result<()> {
599            decoder.debug_check_bounds::<Self>(offset);
600            let prim = decoder.read_num::<u8>(offset);
601
602            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
603            Ok(())
604        }
605    }
606
607    impl fidl::encoding::ValueTypeMarker for AntennaId {
608        type Borrowed<'a> = &'a Self;
609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
610            value
611        }
612    }
613
614    unsafe impl fidl::encoding::TypeMarker for AntennaId {
615        type Owned = Self;
616
617        #[inline(always)]
618        fn inline_align(_context: fidl::encoding::Context) -> usize {
619            1
620        }
621
622        #[inline(always)]
623        fn inline_size(_context: fidl::encoding::Context) -> usize {
624            2
625        }
626    }
627
628    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AntennaId, D>
629        for &AntennaId
630    {
631        #[inline]
632        unsafe fn encode(
633            self,
634            encoder: &mut fidl::encoding::Encoder<'_, D>,
635            offset: usize,
636            _depth: fidl::encoding::Depth,
637        ) -> fidl::Result<()> {
638            encoder.debug_check_bounds::<AntennaId>(offset);
639            // Delegate to tuple encoding.
640            fidl::encoding::Encode::<AntennaId, D>::encode(
641                (
642                    <AntennaFreq as fidl::encoding::ValueTypeMarker>::borrow(&self.freq),
643                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.index),
644                ),
645                encoder,
646                offset,
647                _depth,
648            )
649        }
650    }
651    unsafe impl<
652        D: fidl::encoding::ResourceDialect,
653        T0: fidl::encoding::Encode<AntennaFreq, D>,
654        T1: fidl::encoding::Encode<u8, D>,
655    > fidl::encoding::Encode<AntennaId, D> for (T0, T1)
656    {
657        #[inline]
658        unsafe fn encode(
659            self,
660            encoder: &mut fidl::encoding::Encoder<'_, D>,
661            offset: usize,
662            depth: fidl::encoding::Depth,
663        ) -> fidl::Result<()> {
664            encoder.debug_check_bounds::<AntennaId>(offset);
665            // Zero out padding regions. There's no need to apply masks
666            // because the unmasked parts will be overwritten by fields.
667            // Write the fields.
668            self.0.encode(encoder, offset + 0, depth)?;
669            self.1.encode(encoder, offset + 1, depth)?;
670            Ok(())
671        }
672    }
673
674    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AntennaId {
675        #[inline(always)]
676        fn new_empty() -> Self {
677            Self { freq: fidl::new_empty!(AntennaFreq, D), index: fidl::new_empty!(u8, D) }
678        }
679
680        #[inline]
681        unsafe fn decode(
682            &mut self,
683            decoder: &mut fidl::encoding::Decoder<'_, D>,
684            offset: usize,
685            _depth: fidl::encoding::Depth,
686        ) -> fidl::Result<()> {
687            decoder.debug_check_bounds::<Self>(offset);
688            // Verify that padding bytes are zero.
689            fidl::decode!(AntennaFreq, D, &mut self.freq, decoder, offset + 0, _depth)?;
690            fidl::decode!(u8, D, &mut self.index, decoder, offset + 1, _depth)?;
691            Ok(())
692        }
693    }
694
695    impl fidl::encoding::ValueTypeMarker for HistBucket {
696        type Borrowed<'a> = &'a Self;
697        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
698            value
699        }
700    }
701
702    unsafe impl fidl::encoding::TypeMarker for HistBucket {
703        type Owned = Self;
704
705        #[inline(always)]
706        fn inline_align(_context: fidl::encoding::Context) -> usize {
707            8
708        }
709
710        #[inline(always)]
711        fn inline_size(_context: fidl::encoding::Context) -> usize {
712            16
713        }
714    }
715
716    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HistBucket, D>
717        for &HistBucket
718    {
719        #[inline]
720        unsafe fn encode(
721            self,
722            encoder: &mut fidl::encoding::Encoder<'_, D>,
723            offset: usize,
724            _depth: fidl::encoding::Depth,
725        ) -> fidl::Result<()> {
726            encoder.debug_check_bounds::<HistBucket>(offset);
727            unsafe {
728                // Copy the object into the buffer.
729                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
730                (buf_ptr as *mut HistBucket).write_unaligned((self as *const HistBucket).read());
731                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
732                // done second because the memcpy will write garbage to these bytes.
733                let padding_ptr = buf_ptr.offset(0) as *mut u64;
734                let padding_mask = 0xffffffffffff0000u64;
735                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
736            }
737            Ok(())
738        }
739    }
740    unsafe impl<
741        D: fidl::encoding::ResourceDialect,
742        T0: fidl::encoding::Encode<u16, D>,
743        T1: fidl::encoding::Encode<u64, D>,
744    > fidl::encoding::Encode<HistBucket, D> for (T0, T1)
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            // Zero out padding regions. There's no need to apply masks
755            // because the unmasked parts will be overwritten by fields.
756            unsafe {
757                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
758                (ptr as *mut u64).write_unaligned(0);
759            }
760            // Write the fields.
761            self.0.encode(encoder, offset + 0, depth)?;
762            self.1.encode(encoder, offset + 8, depth)?;
763            Ok(())
764        }
765    }
766
767    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HistBucket {
768        #[inline(always)]
769        fn new_empty() -> Self {
770            Self { bucket_index: fidl::new_empty!(u16, D), num_samples: fidl::new_empty!(u64, D) }
771        }
772
773        #[inline]
774        unsafe fn decode(
775            &mut self,
776            decoder: &mut fidl::encoding::Decoder<'_, D>,
777            offset: usize,
778            _depth: fidl::encoding::Depth,
779        ) -> fidl::Result<()> {
780            decoder.debug_check_bounds::<Self>(offset);
781            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
782            // Verify that padding bytes are zero.
783            let ptr = unsafe { buf_ptr.offset(0) };
784            let padval = unsafe { (ptr as *const u64).read_unaligned() };
785            let mask = 0xffffffffffff0000u64;
786            let maskedval = padval & mask;
787            if maskedval != 0 {
788                return Err(fidl::Error::NonZeroPadding {
789                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
790                });
791            }
792            // Copy from the buffer into the object.
793            unsafe {
794                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
795            }
796            Ok(())
797        }
798    }
799
800    impl fidl::encoding::ValueTypeMarker for NoiseFloorHistogram {
801        type Borrowed<'a> = &'a Self;
802        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
803            value
804        }
805    }
806
807    unsafe impl fidl::encoding::TypeMarker for NoiseFloorHistogram {
808        type Owned = Self;
809
810        #[inline(always)]
811        fn inline_align(_context: fidl::encoding::Context) -> usize {
812            8
813        }
814
815        #[inline(always)]
816        fn inline_size(_context: fidl::encoding::Context) -> usize {
817            40
818        }
819    }
820
821    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NoiseFloorHistogram, D>
822        for &NoiseFloorHistogram
823    {
824        #[inline]
825        unsafe fn encode(
826            self,
827            encoder: &mut fidl::encoding::Encoder<'_, D>,
828            offset: usize,
829            _depth: fidl::encoding::Depth,
830        ) -> fidl::Result<()> {
831            encoder.debug_check_bounds::<NoiseFloorHistogram>(offset);
832            // Delegate to tuple encoding.
833            fidl::encoding::Encode::<NoiseFloorHistogram, D>::encode(
834                (
835                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
836                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
837                    <fidl::encoding::Vector<HistBucket, 255> as fidl::encoding::ValueTypeMarker>::borrow(&self.noise_floor_samples),
838                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
839                ),
840                encoder, offset, _depth
841            )
842        }
843    }
844    unsafe impl<
845        D: fidl::encoding::ResourceDialect,
846        T0: fidl::encoding::Encode<HistScope, D>,
847        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
848        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 255>, D>,
849        T3: fidl::encoding::Encode<u64, D>,
850    > fidl::encoding::Encode<NoiseFloorHistogram, D> for (T0, T1, T2, T3)
851    {
852        #[inline]
853        unsafe fn encode(
854            self,
855            encoder: &mut fidl::encoding::Encoder<'_, D>,
856            offset: usize,
857            depth: fidl::encoding::Depth,
858        ) -> fidl::Result<()> {
859            encoder.debug_check_bounds::<NoiseFloorHistogram>(offset);
860            // Zero out padding regions. There's no need to apply masks
861            // because the unmasked parts will be overwritten by fields.
862            unsafe {
863                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
864                (ptr as *mut u64).write_unaligned(0);
865            }
866            // Write the fields.
867            self.0.encode(encoder, offset + 0, depth)?;
868            self.1.encode(encoder, offset + 8, depth)?;
869            self.2.encode(encoder, offset + 16, depth)?;
870            self.3.encode(encoder, offset + 32, depth)?;
871            Ok(())
872        }
873    }
874
875    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NoiseFloorHistogram {
876        #[inline(always)]
877        fn new_empty() -> Self {
878            Self {
879                hist_scope: fidl::new_empty!(HistScope, D),
880                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
881                noise_floor_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 255>, D),
882                invalid_samples: fidl::new_empty!(u64, D),
883            }
884        }
885
886        #[inline]
887        unsafe fn decode(
888            &mut self,
889            decoder: &mut fidl::encoding::Decoder<'_, D>,
890            offset: usize,
891            _depth: fidl::encoding::Depth,
892        ) -> fidl::Result<()> {
893            decoder.debug_check_bounds::<Self>(offset);
894            // Verify that padding bytes are zero.
895            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
896            let padval = unsafe { (ptr as *const u64).read_unaligned() };
897            let mask = 0xffffffffffffff00u64;
898            let maskedval = padval & mask;
899            if maskedval != 0 {
900                return Err(fidl::Error::NonZeroPadding {
901                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
902                });
903            }
904            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
905            fidl::decode!(
906                fidl::encoding::Boxed<AntennaId>,
907                D,
908                &mut self.antenna_id,
909                decoder,
910                offset + 8,
911                _depth
912            )?;
913            fidl::decode!(fidl::encoding::Vector<HistBucket, 255>, D, &mut self.noise_floor_samples, decoder, offset + 16, _depth)?;
914            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
915            Ok(())
916        }
917    }
918
919    impl fidl::encoding::ValueTypeMarker for RssiHistogram {
920        type Borrowed<'a> = &'a Self;
921        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
922            value
923        }
924    }
925
926    unsafe impl fidl::encoding::TypeMarker for RssiHistogram {
927        type Owned = Self;
928
929        #[inline(always)]
930        fn inline_align(_context: fidl::encoding::Context) -> usize {
931            8
932        }
933
934        #[inline(always)]
935        fn inline_size(_context: fidl::encoding::Context) -> usize {
936            40
937        }
938    }
939
940    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RssiHistogram, D>
941        for &RssiHistogram
942    {
943        #[inline]
944        unsafe fn encode(
945            self,
946            encoder: &mut fidl::encoding::Encoder<'_, D>,
947            offset: usize,
948            _depth: fidl::encoding::Depth,
949        ) -> fidl::Result<()> {
950            encoder.debug_check_bounds::<RssiHistogram>(offset);
951            // Delegate to tuple encoding.
952            fidl::encoding::Encode::<RssiHistogram, D>::encode(
953                (
954                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
955                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
956                    <fidl::encoding::Vector<HistBucket, 255> as fidl::encoding::ValueTypeMarker>::borrow(&self.rssi_samples),
957                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
958                ),
959                encoder, offset, _depth
960            )
961        }
962    }
963    unsafe impl<
964        D: fidl::encoding::ResourceDialect,
965        T0: fidl::encoding::Encode<HistScope, D>,
966        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
967        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 255>, D>,
968        T3: fidl::encoding::Encode<u64, D>,
969    > fidl::encoding::Encode<RssiHistogram, D> for (T0, T1, T2, T3)
970    {
971        #[inline]
972        unsafe fn encode(
973            self,
974            encoder: &mut fidl::encoding::Encoder<'_, D>,
975            offset: usize,
976            depth: fidl::encoding::Depth,
977        ) -> fidl::Result<()> {
978            encoder.debug_check_bounds::<RssiHistogram>(offset);
979            // Zero out padding regions. There's no need to apply masks
980            // because the unmasked parts will be overwritten by fields.
981            unsafe {
982                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
983                (ptr as *mut u64).write_unaligned(0);
984            }
985            // Write the fields.
986            self.0.encode(encoder, offset + 0, depth)?;
987            self.1.encode(encoder, offset + 8, depth)?;
988            self.2.encode(encoder, offset + 16, depth)?;
989            self.3.encode(encoder, offset + 32, depth)?;
990            Ok(())
991        }
992    }
993
994    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RssiHistogram {
995        #[inline(always)]
996        fn new_empty() -> Self {
997            Self {
998                hist_scope: fidl::new_empty!(HistScope, D),
999                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
1000                rssi_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 255>, D),
1001                invalid_samples: fidl::new_empty!(u64, D),
1002            }
1003        }
1004
1005        #[inline]
1006        unsafe fn decode(
1007            &mut self,
1008            decoder: &mut fidl::encoding::Decoder<'_, D>,
1009            offset: usize,
1010            _depth: fidl::encoding::Depth,
1011        ) -> fidl::Result<()> {
1012            decoder.debug_check_bounds::<Self>(offset);
1013            // Verify that padding bytes are zero.
1014            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1015            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1016            let mask = 0xffffffffffffff00u64;
1017            let maskedval = padval & mask;
1018            if maskedval != 0 {
1019                return Err(fidl::Error::NonZeroPadding {
1020                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1021                });
1022            }
1023            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
1024            fidl::decode!(
1025                fidl::encoding::Boxed<AntennaId>,
1026                D,
1027                &mut self.antenna_id,
1028                decoder,
1029                offset + 8,
1030                _depth
1031            )?;
1032            fidl::decode!(fidl::encoding::Vector<HistBucket, 255>, D, &mut self.rssi_samples, decoder, offset + 16, _depth)?;
1033            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
1034            Ok(())
1035        }
1036    }
1037
1038    impl fidl::encoding::ValueTypeMarker for RxRateIndexHistogram {
1039        type Borrowed<'a> = &'a Self;
1040        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1041            value
1042        }
1043    }
1044
1045    unsafe impl fidl::encoding::TypeMarker for RxRateIndexHistogram {
1046        type Owned = Self;
1047
1048        #[inline(always)]
1049        fn inline_align(_context: fidl::encoding::Context) -> usize {
1050            8
1051        }
1052
1053        #[inline(always)]
1054        fn inline_size(_context: fidl::encoding::Context) -> usize {
1055            40
1056        }
1057    }
1058
1059    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RxRateIndexHistogram, D>
1060        for &RxRateIndexHistogram
1061    {
1062        #[inline]
1063        unsafe fn encode(
1064            self,
1065            encoder: &mut fidl::encoding::Encoder<'_, D>,
1066            offset: usize,
1067            _depth: fidl::encoding::Depth,
1068        ) -> fidl::Result<()> {
1069            encoder.debug_check_bounds::<RxRateIndexHistogram>(offset);
1070            // Delegate to tuple encoding.
1071            fidl::encoding::Encode::<RxRateIndexHistogram, D>::encode(
1072                (
1073                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
1074                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
1075                    <fidl::encoding::Vector<HistBucket, 196> as fidl::encoding::ValueTypeMarker>::borrow(&self.rx_rate_index_samples),
1076                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
1077                ),
1078                encoder, offset, _depth
1079            )
1080        }
1081    }
1082    unsafe impl<
1083        D: fidl::encoding::ResourceDialect,
1084        T0: fidl::encoding::Encode<HistScope, D>,
1085        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
1086        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 196>, D>,
1087        T3: fidl::encoding::Encode<u64, D>,
1088    > fidl::encoding::Encode<RxRateIndexHistogram, D> for (T0, T1, T2, T3)
1089    {
1090        #[inline]
1091        unsafe fn encode(
1092            self,
1093            encoder: &mut fidl::encoding::Encoder<'_, D>,
1094            offset: usize,
1095            depth: fidl::encoding::Depth,
1096        ) -> fidl::Result<()> {
1097            encoder.debug_check_bounds::<RxRateIndexHistogram>(offset);
1098            // Zero out padding regions. There's no need to apply masks
1099            // because the unmasked parts will be overwritten by fields.
1100            unsafe {
1101                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1102                (ptr as *mut u64).write_unaligned(0);
1103            }
1104            // Write the fields.
1105            self.0.encode(encoder, offset + 0, depth)?;
1106            self.1.encode(encoder, offset + 8, depth)?;
1107            self.2.encode(encoder, offset + 16, depth)?;
1108            self.3.encode(encoder, offset + 32, depth)?;
1109            Ok(())
1110        }
1111    }
1112
1113    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RxRateIndexHistogram {
1114        #[inline(always)]
1115        fn new_empty() -> Self {
1116            Self {
1117                hist_scope: fidl::new_empty!(HistScope, D),
1118                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
1119                rx_rate_index_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 196>, D),
1120                invalid_samples: fidl::new_empty!(u64, D),
1121            }
1122        }
1123
1124        #[inline]
1125        unsafe fn decode(
1126            &mut self,
1127            decoder: &mut fidl::encoding::Decoder<'_, D>,
1128            offset: usize,
1129            _depth: fidl::encoding::Depth,
1130        ) -> fidl::Result<()> {
1131            decoder.debug_check_bounds::<Self>(offset);
1132            // Verify that padding bytes are zero.
1133            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1134            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1135            let mask = 0xffffffffffffff00u64;
1136            let maskedval = padval & mask;
1137            if maskedval != 0 {
1138                return Err(fidl::Error::NonZeroPadding {
1139                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1140                });
1141            }
1142            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
1143            fidl::decode!(
1144                fidl::encoding::Boxed<AntennaId>,
1145                D,
1146                &mut self.antenna_id,
1147                decoder,
1148                offset + 8,
1149                _depth
1150            )?;
1151            fidl::decode!(fidl::encoding::Vector<HistBucket, 196>, D, &mut self.rx_rate_index_samples, decoder, offset + 16, _depth)?;
1152            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
1153            Ok(())
1154        }
1155    }
1156
1157    impl fidl::encoding::ValueTypeMarker for SnrHistogram {
1158        type Borrowed<'a> = &'a Self;
1159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1160            value
1161        }
1162    }
1163
1164    unsafe impl fidl::encoding::TypeMarker for SnrHistogram {
1165        type Owned = Self;
1166
1167        #[inline(always)]
1168        fn inline_align(_context: fidl::encoding::Context) -> usize {
1169            8
1170        }
1171
1172        #[inline(always)]
1173        fn inline_size(_context: fidl::encoding::Context) -> usize {
1174            40
1175        }
1176    }
1177
1178    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SnrHistogram, D>
1179        for &SnrHistogram
1180    {
1181        #[inline]
1182        unsafe fn encode(
1183            self,
1184            encoder: &mut fidl::encoding::Encoder<'_, D>,
1185            offset: usize,
1186            _depth: fidl::encoding::Depth,
1187        ) -> fidl::Result<()> {
1188            encoder.debug_check_bounds::<SnrHistogram>(offset);
1189            // Delegate to tuple encoding.
1190            fidl::encoding::Encode::<SnrHistogram, D>::encode(
1191                (
1192                    <HistScope as fidl::encoding::ValueTypeMarker>::borrow(&self.hist_scope),
1193                    <fidl::encoding::Boxed<AntennaId> as fidl::encoding::ValueTypeMarker>::borrow(&self.antenna_id),
1194                    <fidl::encoding::Vector<HistBucket, 256> as fidl::encoding::ValueTypeMarker>::borrow(&self.snr_samples),
1195                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.invalid_samples),
1196                ),
1197                encoder, offset, _depth
1198            )
1199        }
1200    }
1201    unsafe impl<
1202        D: fidl::encoding::ResourceDialect,
1203        T0: fidl::encoding::Encode<HistScope, D>,
1204        T1: fidl::encoding::Encode<fidl::encoding::Boxed<AntennaId>, D>,
1205        T2: fidl::encoding::Encode<fidl::encoding::Vector<HistBucket, 256>, D>,
1206        T3: fidl::encoding::Encode<u64, D>,
1207    > fidl::encoding::Encode<SnrHistogram, D> for (T0, T1, T2, T3)
1208    {
1209        #[inline]
1210        unsafe fn encode(
1211            self,
1212            encoder: &mut fidl::encoding::Encoder<'_, D>,
1213            offset: usize,
1214            depth: fidl::encoding::Depth,
1215        ) -> fidl::Result<()> {
1216            encoder.debug_check_bounds::<SnrHistogram>(offset);
1217            // Zero out padding regions. There's no need to apply masks
1218            // because the unmasked parts will be overwritten by fields.
1219            unsafe {
1220                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1221                (ptr as *mut u64).write_unaligned(0);
1222            }
1223            // Write the fields.
1224            self.0.encode(encoder, offset + 0, depth)?;
1225            self.1.encode(encoder, offset + 8, depth)?;
1226            self.2.encode(encoder, offset + 16, depth)?;
1227            self.3.encode(encoder, offset + 32, depth)?;
1228            Ok(())
1229        }
1230    }
1231
1232    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SnrHistogram {
1233        #[inline(always)]
1234        fn new_empty() -> Self {
1235            Self {
1236                hist_scope: fidl::new_empty!(HistScope, D),
1237                antenna_id: fidl::new_empty!(fidl::encoding::Boxed<AntennaId>, D),
1238                snr_samples: fidl::new_empty!(fidl::encoding::Vector<HistBucket, 256>, D),
1239                invalid_samples: fidl::new_empty!(u64, D),
1240            }
1241        }
1242
1243        #[inline]
1244        unsafe fn decode(
1245            &mut self,
1246            decoder: &mut fidl::encoding::Decoder<'_, D>,
1247            offset: usize,
1248            _depth: fidl::encoding::Depth,
1249        ) -> fidl::Result<()> {
1250            decoder.debug_check_bounds::<Self>(offset);
1251            // Verify that padding bytes are zero.
1252            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1253            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1254            let mask = 0xffffffffffffff00u64;
1255            let maskedval = padval & mask;
1256            if maskedval != 0 {
1257                return Err(fidl::Error::NonZeroPadding {
1258                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1259                });
1260            }
1261            fidl::decode!(HistScope, D, &mut self.hist_scope, decoder, offset + 0, _depth)?;
1262            fidl::decode!(
1263                fidl::encoding::Boxed<AntennaId>,
1264                D,
1265                &mut self.antenna_id,
1266                decoder,
1267                offset + 8,
1268                _depth
1269            )?;
1270            fidl::decode!(fidl::encoding::Vector<HistBucket, 256>, D, &mut self.snr_samples, decoder, offset + 16, _depth)?;
1271            fidl::decode!(u64, D, &mut self.invalid_samples, decoder, offset + 32, _depth)?;
1272            Ok(())
1273        }
1274    }
1275
1276    impl fidl::encoding::ValueTypeMarker for UnnamedCounter {
1277        type Borrowed<'a> = &'a Self;
1278        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1279            value
1280        }
1281    }
1282
1283    unsafe impl fidl::encoding::TypeMarker for UnnamedCounter {
1284        type Owned = Self;
1285
1286        #[inline(always)]
1287        fn inline_align(_context: fidl::encoding::Context) -> usize {
1288            8
1289        }
1290
1291        #[inline(always)]
1292        fn inline_size(_context: fidl::encoding::Context) -> usize {
1293            16
1294        }
1295    }
1296
1297    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UnnamedCounter, D>
1298        for &UnnamedCounter
1299    {
1300        #[inline]
1301        unsafe fn encode(
1302            self,
1303            encoder: &mut fidl::encoding::Encoder<'_, D>,
1304            offset: usize,
1305            _depth: fidl::encoding::Depth,
1306        ) -> fidl::Result<()> {
1307            encoder.debug_check_bounds::<UnnamedCounter>(offset);
1308            unsafe {
1309                // Copy the object into the buffer.
1310                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1311                (buf_ptr as *mut UnnamedCounter)
1312                    .write_unaligned((self as *const UnnamedCounter).read());
1313                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1314                // done second because the memcpy will write garbage to these bytes.
1315                let padding_ptr = buf_ptr.offset(0) as *mut u64;
1316                let padding_mask = 0xffffffffffff0000u64;
1317                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1318            }
1319            Ok(())
1320        }
1321    }
1322    unsafe impl<
1323        D: fidl::encoding::ResourceDialect,
1324        T0: fidl::encoding::Encode<u16, D>,
1325        T1: fidl::encoding::Encode<u64, D>,
1326    > fidl::encoding::Encode<UnnamedCounter, D> for (T0, T1)
1327    {
1328        #[inline]
1329        unsafe fn encode(
1330            self,
1331            encoder: &mut fidl::encoding::Encoder<'_, D>,
1332            offset: usize,
1333            depth: fidl::encoding::Depth,
1334        ) -> fidl::Result<()> {
1335            encoder.debug_check_bounds::<UnnamedCounter>(offset);
1336            // Zero out padding regions. There's no need to apply masks
1337            // because the unmasked parts will be overwritten by fields.
1338            unsafe {
1339                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1340                (ptr as *mut u64).write_unaligned(0);
1341            }
1342            // Write the fields.
1343            self.0.encode(encoder, offset + 0, depth)?;
1344            self.1.encode(encoder, offset + 8, depth)?;
1345            Ok(())
1346        }
1347    }
1348
1349    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UnnamedCounter {
1350        #[inline(always)]
1351        fn new_empty() -> Self {
1352            Self { id: fidl::new_empty!(u16, D), count: fidl::new_empty!(u64, D) }
1353        }
1354
1355        #[inline]
1356        unsafe fn decode(
1357            &mut self,
1358            decoder: &mut fidl::encoding::Decoder<'_, D>,
1359            offset: usize,
1360            _depth: fidl::encoding::Depth,
1361        ) -> fidl::Result<()> {
1362            decoder.debug_check_bounds::<Self>(offset);
1363            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1364            // Verify that padding bytes are zero.
1365            let ptr = unsafe { buf_ptr.offset(0) };
1366            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1367            let mask = 0xffffffffffff0000u64;
1368            let maskedval = padval & mask;
1369            if maskedval != 0 {
1370                return Err(fidl::Error::NonZeroPadding {
1371                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1372                });
1373            }
1374            // Copy from the buffer into the object.
1375            unsafe {
1376                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1377            }
1378            Ok(())
1379        }
1380    }
1381
1382    impl fidl::encoding::ValueTypeMarker for UnnamedGauge {
1383        type Borrowed<'a> = &'a Self;
1384        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1385            value
1386        }
1387    }
1388
1389    unsafe impl fidl::encoding::TypeMarker for UnnamedGauge {
1390        type Owned = Self;
1391
1392        #[inline(always)]
1393        fn inline_align(_context: fidl::encoding::Context) -> usize {
1394            8
1395        }
1396
1397        #[inline(always)]
1398        fn inline_size(_context: fidl::encoding::Context) -> usize {
1399            16
1400        }
1401    }
1402
1403    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<UnnamedGauge, D>
1404        for &UnnamedGauge
1405    {
1406        #[inline]
1407        unsafe fn encode(
1408            self,
1409            encoder: &mut fidl::encoding::Encoder<'_, D>,
1410            offset: usize,
1411            _depth: fidl::encoding::Depth,
1412        ) -> fidl::Result<()> {
1413            encoder.debug_check_bounds::<UnnamedGauge>(offset);
1414            unsafe {
1415                // Copy the object into the buffer.
1416                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1417                (buf_ptr as *mut UnnamedGauge)
1418                    .write_unaligned((self as *const UnnamedGauge).read());
1419                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1420                // done second because the memcpy will write garbage to these bytes.
1421                let padding_ptr = buf_ptr.offset(0) as *mut u64;
1422                let padding_mask = 0xffffffffffff0000u64;
1423                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1424            }
1425            Ok(())
1426        }
1427    }
1428    unsafe impl<
1429        D: fidl::encoding::ResourceDialect,
1430        T0: fidl::encoding::Encode<u16, D>,
1431        T1: fidl::encoding::Encode<i64, D>,
1432    > fidl::encoding::Encode<UnnamedGauge, D> for (T0, T1)
1433    {
1434        #[inline]
1435        unsafe fn encode(
1436            self,
1437            encoder: &mut fidl::encoding::Encoder<'_, D>,
1438            offset: usize,
1439            depth: fidl::encoding::Depth,
1440        ) -> fidl::Result<()> {
1441            encoder.debug_check_bounds::<UnnamedGauge>(offset);
1442            // Zero out padding regions. There's no need to apply masks
1443            // because the unmasked parts will be overwritten by fields.
1444            unsafe {
1445                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1446                (ptr as *mut u64).write_unaligned(0);
1447            }
1448            // Write the fields.
1449            self.0.encode(encoder, offset + 0, depth)?;
1450            self.1.encode(encoder, offset + 8, depth)?;
1451            Ok(())
1452        }
1453    }
1454
1455    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for UnnamedGauge {
1456        #[inline(always)]
1457        fn new_empty() -> Self {
1458            Self { id: fidl::new_empty!(u16, D), value: fidl::new_empty!(i64, D) }
1459        }
1460
1461        #[inline]
1462        unsafe fn decode(
1463            &mut self,
1464            decoder: &mut fidl::encoding::Decoder<'_, D>,
1465            offset: usize,
1466            _depth: fidl::encoding::Depth,
1467        ) -> fidl::Result<()> {
1468            decoder.debug_check_bounds::<Self>(offset);
1469            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1470            // Verify that padding bytes are zero.
1471            let ptr = unsafe { buf_ptr.offset(0) };
1472            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1473            let mask = 0xffffffffffff0000u64;
1474            let maskedval = padval & mask;
1475            if maskedval != 0 {
1476                return Err(fidl::Error::NonZeroPadding {
1477                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1478                });
1479            }
1480            // Copy from the buffer into the object.
1481            unsafe {
1482                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1483            }
1484            Ok(())
1485        }
1486    }
1487
1488    impl ConnectionSignalReport {
1489        #[inline(always)]
1490        fn max_ordinal_present(&self) -> u64 {
1491            if let Some(_) = self.snr_db {
1492                return 4;
1493            }
1494            if let Some(_) = self.rssi_dbm {
1495                return 3;
1496            }
1497            if let Some(_) = self.tx_rate_500kbps {
1498                return 2;
1499            }
1500            if let Some(_) = self.channel {
1501                return 1;
1502            }
1503            0
1504        }
1505    }
1506
1507    impl fidl::encoding::ValueTypeMarker for ConnectionSignalReport {
1508        type Borrowed<'a> = &'a Self;
1509        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1510            value
1511        }
1512    }
1513
1514    unsafe impl fidl::encoding::TypeMarker for ConnectionSignalReport {
1515        type Owned = Self;
1516
1517        #[inline(always)]
1518        fn inline_align(_context: fidl::encoding::Context) -> usize {
1519            8
1520        }
1521
1522        #[inline(always)]
1523        fn inline_size(_context: fidl::encoding::Context) -> usize {
1524            16
1525        }
1526    }
1527
1528    unsafe impl<D: fidl::encoding::ResourceDialect>
1529        fidl::encoding::Encode<ConnectionSignalReport, D> for &ConnectionSignalReport
1530    {
1531        unsafe fn encode(
1532            self,
1533            encoder: &mut fidl::encoding::Encoder<'_, D>,
1534            offset: usize,
1535            mut depth: fidl::encoding::Depth,
1536        ) -> fidl::Result<()> {
1537            encoder.debug_check_bounds::<ConnectionSignalReport>(offset);
1538            // Vector header
1539            let max_ordinal: u64 = self.max_ordinal_present();
1540            encoder.write_num(max_ordinal, offset);
1541            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1542            // Calling encoder.out_of_line_offset(0) is not allowed.
1543            if max_ordinal == 0 {
1544                return Ok(());
1545            }
1546            depth.increment()?;
1547            let envelope_size = 8;
1548            let bytes_len = max_ordinal as usize * envelope_size;
1549            #[allow(unused_variables)]
1550            let offset = encoder.out_of_line_offset(bytes_len);
1551            let mut _prev_end_offset: usize = 0;
1552            if 1 > max_ordinal {
1553                return Ok(());
1554            }
1555
1556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1557            // are envelope_size bytes.
1558            let cur_offset: usize = (1 - 1) * envelope_size;
1559
1560            // Zero reserved fields.
1561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1562
1563            // Safety:
1564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1566            //   envelope_size bytes, there is always sufficient room.
1567            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_ieee80211__common::WlanChannel, D>(
1568            self.channel.as_ref().map(<fidl_fuchsia_wlan_ieee80211__common::WlanChannel as fidl::encoding::ValueTypeMarker>::borrow),
1569            encoder, offset + cur_offset, depth
1570        )?;
1571
1572            _prev_end_offset = cur_offset + envelope_size;
1573            if 2 > max_ordinal {
1574                return Ok(());
1575            }
1576
1577            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1578            // are envelope_size bytes.
1579            let cur_offset: usize = (2 - 1) * envelope_size;
1580
1581            // Zero reserved fields.
1582            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1583
1584            // Safety:
1585            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1586            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1587            //   envelope_size bytes, there is always sufficient room.
1588            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1589                self.tx_rate_500kbps.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1590                encoder,
1591                offset + cur_offset,
1592                depth,
1593            )?;
1594
1595            _prev_end_offset = cur_offset + envelope_size;
1596            if 3 > max_ordinal {
1597                return Ok(());
1598            }
1599
1600            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1601            // are envelope_size bytes.
1602            let cur_offset: usize = (3 - 1) * envelope_size;
1603
1604            // Zero reserved fields.
1605            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1606
1607            // Safety:
1608            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1609            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1610            //   envelope_size bytes, there is always sufficient room.
1611            fidl::encoding::encode_in_envelope_optional::<i8, D>(
1612                self.rssi_dbm.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
1613                encoder,
1614                offset + cur_offset,
1615                depth,
1616            )?;
1617
1618            _prev_end_offset = cur_offset + envelope_size;
1619            if 4 > max_ordinal {
1620                return Ok(());
1621            }
1622
1623            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1624            // are envelope_size bytes.
1625            let cur_offset: usize = (4 - 1) * envelope_size;
1626
1627            // Zero reserved fields.
1628            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1629
1630            // Safety:
1631            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1632            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1633            //   envelope_size bytes, there is always sufficient room.
1634            fidl::encoding::encode_in_envelope_optional::<i8, D>(
1635                self.snr_db.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
1636                encoder,
1637                offset + cur_offset,
1638                depth,
1639            )?;
1640
1641            _prev_end_offset = cur_offset + envelope_size;
1642
1643            Ok(())
1644        }
1645    }
1646
1647    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1648        for ConnectionSignalReport
1649    {
1650        #[inline(always)]
1651        fn new_empty() -> Self {
1652            Self::default()
1653        }
1654
1655        unsafe fn decode(
1656            &mut self,
1657            decoder: &mut fidl::encoding::Decoder<'_, D>,
1658            offset: usize,
1659            mut depth: fidl::encoding::Depth,
1660        ) -> fidl::Result<()> {
1661            decoder.debug_check_bounds::<Self>(offset);
1662            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1663                None => return Err(fidl::Error::NotNullable),
1664                Some(len) => len,
1665            };
1666            // Calling decoder.out_of_line_offset(0) is not allowed.
1667            if len == 0 {
1668                return Ok(());
1669            };
1670            depth.increment()?;
1671            let envelope_size = 8;
1672            let bytes_len = len * envelope_size;
1673            let offset = decoder.out_of_line_offset(bytes_len)?;
1674            // Decode the envelope for each type.
1675            let mut _next_ordinal_to_read = 0;
1676            let mut next_offset = offset;
1677            let end_offset = offset + bytes_len;
1678            _next_ordinal_to_read += 1;
1679            if next_offset >= end_offset {
1680                return Ok(());
1681            }
1682
1683            // Decode unknown envelopes for gaps in ordinals.
1684            while _next_ordinal_to_read < 1 {
1685                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1686                _next_ordinal_to_read += 1;
1687                next_offset += envelope_size;
1688            }
1689
1690            let next_out_of_line = decoder.next_out_of_line();
1691            let handles_before = decoder.remaining_handles();
1692            if let Some((inlined, num_bytes, num_handles)) =
1693                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1694            {
1695                let member_inline_size = <fidl_fuchsia_wlan_ieee80211__common::WlanChannel as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1696                if inlined != (member_inline_size <= 4) {
1697                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1698                }
1699                let inner_offset;
1700                let mut inner_depth = depth.clone();
1701                if inlined {
1702                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1703                    inner_offset = next_offset;
1704                } else {
1705                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1706                    inner_depth.increment()?;
1707                }
1708                let val_ref = self.channel.get_or_insert_with(|| {
1709                    fidl::new_empty!(fidl_fuchsia_wlan_ieee80211__common::WlanChannel, D)
1710                });
1711                fidl::decode!(
1712                    fidl_fuchsia_wlan_ieee80211__common::WlanChannel,
1713                    D,
1714                    val_ref,
1715                    decoder,
1716                    inner_offset,
1717                    inner_depth
1718                )?;
1719                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1720                {
1721                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1722                }
1723                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1724                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1725                }
1726            }
1727
1728            next_offset += envelope_size;
1729            _next_ordinal_to_read += 1;
1730            if next_offset >= end_offset {
1731                return Ok(());
1732            }
1733
1734            // Decode unknown envelopes for gaps in ordinals.
1735            while _next_ordinal_to_read < 2 {
1736                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1737                _next_ordinal_to_read += 1;
1738                next_offset += envelope_size;
1739            }
1740
1741            let next_out_of_line = decoder.next_out_of_line();
1742            let handles_before = decoder.remaining_handles();
1743            if let Some((inlined, num_bytes, num_handles)) =
1744                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1745            {
1746                let member_inline_size =
1747                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1748                if inlined != (member_inline_size <= 4) {
1749                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1750                }
1751                let inner_offset;
1752                let mut inner_depth = depth.clone();
1753                if inlined {
1754                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1755                    inner_offset = next_offset;
1756                } else {
1757                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1758                    inner_depth.increment()?;
1759                }
1760                let val_ref = self.tx_rate_500kbps.get_or_insert_with(|| fidl::new_empty!(u32, D));
1761                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1762                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1763                {
1764                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1765                }
1766                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1767                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1768                }
1769            }
1770
1771            next_offset += envelope_size;
1772            _next_ordinal_to_read += 1;
1773            if next_offset >= end_offset {
1774                return Ok(());
1775            }
1776
1777            // Decode unknown envelopes for gaps in ordinals.
1778            while _next_ordinal_to_read < 3 {
1779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1780                _next_ordinal_to_read += 1;
1781                next_offset += envelope_size;
1782            }
1783
1784            let next_out_of_line = decoder.next_out_of_line();
1785            let handles_before = decoder.remaining_handles();
1786            if let Some((inlined, num_bytes, num_handles)) =
1787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1788            {
1789                let member_inline_size =
1790                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1791                if inlined != (member_inline_size <= 4) {
1792                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1793                }
1794                let inner_offset;
1795                let mut inner_depth = depth.clone();
1796                if inlined {
1797                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1798                    inner_offset = next_offset;
1799                } else {
1800                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1801                    inner_depth.increment()?;
1802                }
1803                let val_ref = self.rssi_dbm.get_or_insert_with(|| fidl::new_empty!(i8, D));
1804                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
1805                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1806                {
1807                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1808                }
1809                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1810                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1811                }
1812            }
1813
1814            next_offset += envelope_size;
1815            _next_ordinal_to_read += 1;
1816            if next_offset >= end_offset {
1817                return Ok(());
1818            }
1819
1820            // Decode unknown envelopes for gaps in ordinals.
1821            while _next_ordinal_to_read < 4 {
1822                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1823                _next_ordinal_to_read += 1;
1824                next_offset += envelope_size;
1825            }
1826
1827            let next_out_of_line = decoder.next_out_of_line();
1828            let handles_before = decoder.remaining_handles();
1829            if let Some((inlined, num_bytes, num_handles)) =
1830                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1831            {
1832                let member_inline_size =
1833                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1834                if inlined != (member_inline_size <= 4) {
1835                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1836                }
1837                let inner_offset;
1838                let mut inner_depth = depth.clone();
1839                if inlined {
1840                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1841                    inner_offset = next_offset;
1842                } else {
1843                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1844                    inner_depth.increment()?;
1845                }
1846                let val_ref = self.snr_db.get_or_insert_with(|| fidl::new_empty!(i8, D));
1847                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
1848                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1849                {
1850                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1851                }
1852                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1853                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1854                }
1855            }
1856
1857            next_offset += envelope_size;
1858
1859            // Decode the remaining unknown envelopes.
1860            while next_offset < end_offset {
1861                _next_ordinal_to_read += 1;
1862                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1863                next_offset += envelope_size;
1864            }
1865
1866            Ok(())
1867        }
1868    }
1869
1870    impl ConnectionStats {
1871        #[inline(always)]
1872        fn max_ordinal_present(&self) -> u64 {
1873            if let Some(_) = self.tx_drop {
1874                return 8;
1875            }
1876            if let Some(_) = self.tx_total {
1877                return 7;
1878            }
1879            if let Some(_) = self.rx_multicast {
1880                return 6;
1881            }
1882            if let Some(_) = self.rx_unicast_drop {
1883                return 5;
1884            }
1885            if let Some(_) = self.rx_unicast_total {
1886                return 4;
1887            }
1888            if let Some(_) = self.driver_specific_gauges {
1889                return 3;
1890            }
1891            if let Some(_) = self.driver_specific_counters {
1892                return 2;
1893            }
1894            if let Some(_) = self.connection_id {
1895                return 1;
1896            }
1897            0
1898        }
1899    }
1900
1901    impl fidl::encoding::ValueTypeMarker for ConnectionStats {
1902        type Borrowed<'a> = &'a Self;
1903        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1904            value
1905        }
1906    }
1907
1908    unsafe impl fidl::encoding::TypeMarker for ConnectionStats {
1909        type Owned = Self;
1910
1911        #[inline(always)]
1912        fn inline_align(_context: fidl::encoding::Context) -> usize {
1913            8
1914        }
1915
1916        #[inline(always)]
1917        fn inline_size(_context: fidl::encoding::Context) -> usize {
1918            16
1919        }
1920    }
1921
1922    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConnectionStats, D>
1923        for &ConnectionStats
1924    {
1925        unsafe fn encode(
1926            self,
1927            encoder: &mut fidl::encoding::Encoder<'_, D>,
1928            offset: usize,
1929            mut depth: fidl::encoding::Depth,
1930        ) -> fidl::Result<()> {
1931            encoder.debug_check_bounds::<ConnectionStats>(offset);
1932            // Vector header
1933            let max_ordinal: u64 = self.max_ordinal_present();
1934            encoder.write_num(max_ordinal, offset);
1935            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1936            // Calling encoder.out_of_line_offset(0) is not allowed.
1937            if max_ordinal == 0 {
1938                return Ok(());
1939            }
1940            depth.increment()?;
1941            let envelope_size = 8;
1942            let bytes_len = max_ordinal as usize * envelope_size;
1943            #[allow(unused_variables)]
1944            let offset = encoder.out_of_line_offset(bytes_len);
1945            let mut _prev_end_offset: usize = 0;
1946            if 1 > max_ordinal {
1947                return Ok(());
1948            }
1949
1950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1951            // are envelope_size bytes.
1952            let cur_offset: usize = (1 - 1) * envelope_size;
1953
1954            // Zero reserved fields.
1955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1956
1957            // Safety:
1958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1960            //   envelope_size bytes, there is always sufficient room.
1961            fidl::encoding::encode_in_envelope_optional::<u8, D>(
1962                self.connection_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
1963                encoder,
1964                offset + cur_offset,
1965                depth,
1966            )?;
1967
1968            _prev_end_offset = cur_offset + envelope_size;
1969            if 2 > max_ordinal {
1970                return Ok(());
1971            }
1972
1973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1974            // are envelope_size bytes.
1975            let cur_offset: usize = (2 - 1) * envelope_size;
1976
1977            // Zero reserved fields.
1978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1979
1980            // Safety:
1981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1983            //   envelope_size bytes, there is always sufficient room.
1984            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedCounter, 127>, D>(
1985            self.driver_specific_counters.as_ref().map(<fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::ValueTypeMarker>::borrow),
1986            encoder, offset + cur_offset, depth
1987        )?;
1988
1989            _prev_end_offset = cur_offset + envelope_size;
1990            if 3 > max_ordinal {
1991                return Ok(());
1992            }
1993
1994            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1995            // are envelope_size bytes.
1996            let cur_offset: usize = (3 - 1) * envelope_size;
1997
1998            // Zero reserved fields.
1999            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2000
2001            // Safety:
2002            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2003            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2004            //   envelope_size bytes, there is always sufficient room.
2005            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedGauge, 127>, D>(
2006            self.driver_specific_gauges.as_ref().map(<fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::ValueTypeMarker>::borrow),
2007            encoder, offset + cur_offset, depth
2008        )?;
2009
2010            _prev_end_offset = cur_offset + envelope_size;
2011            if 4 > max_ordinal {
2012                return Ok(());
2013            }
2014
2015            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2016            // are envelope_size bytes.
2017            let cur_offset: usize = (4 - 1) * envelope_size;
2018
2019            // Zero reserved fields.
2020            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2021
2022            // Safety:
2023            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2024            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2025            //   envelope_size bytes, there is always sufficient room.
2026            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2027                self.rx_unicast_total
2028                    .as_ref()
2029                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2030                encoder,
2031                offset + cur_offset,
2032                depth,
2033            )?;
2034
2035            _prev_end_offset = cur_offset + envelope_size;
2036            if 5 > max_ordinal {
2037                return Ok(());
2038            }
2039
2040            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2041            // are envelope_size bytes.
2042            let cur_offset: usize = (5 - 1) * envelope_size;
2043
2044            // Zero reserved fields.
2045            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2046
2047            // Safety:
2048            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2049            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2050            //   envelope_size bytes, there is always sufficient room.
2051            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2052                self.rx_unicast_drop.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2053                encoder,
2054                offset + cur_offset,
2055                depth,
2056            )?;
2057
2058            _prev_end_offset = cur_offset + envelope_size;
2059            if 6 > max_ordinal {
2060                return Ok(());
2061            }
2062
2063            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2064            // are envelope_size bytes.
2065            let cur_offset: usize = (6 - 1) * envelope_size;
2066
2067            // Zero reserved fields.
2068            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2069
2070            // Safety:
2071            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2072            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2073            //   envelope_size bytes, there is always sufficient room.
2074            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2075                self.rx_multicast.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2076                encoder,
2077                offset + cur_offset,
2078                depth,
2079            )?;
2080
2081            _prev_end_offset = cur_offset + envelope_size;
2082            if 7 > max_ordinal {
2083                return Ok(());
2084            }
2085
2086            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2087            // are envelope_size bytes.
2088            let cur_offset: usize = (7 - 1) * envelope_size;
2089
2090            // Zero reserved fields.
2091            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2092
2093            // Safety:
2094            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2095            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2096            //   envelope_size bytes, there is always sufficient room.
2097            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2098                self.tx_total.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2099                encoder,
2100                offset + cur_offset,
2101                depth,
2102            )?;
2103
2104            _prev_end_offset = cur_offset + envelope_size;
2105            if 8 > max_ordinal {
2106                return Ok(());
2107            }
2108
2109            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2110            // are envelope_size bytes.
2111            let cur_offset: usize = (8 - 1) * envelope_size;
2112
2113            // Zero reserved fields.
2114            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2115
2116            // Safety:
2117            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2118            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2119            //   envelope_size bytes, there is always sufficient room.
2120            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2121                self.tx_drop.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2122                encoder,
2123                offset + cur_offset,
2124                depth,
2125            )?;
2126
2127            _prev_end_offset = cur_offset + envelope_size;
2128
2129            Ok(())
2130        }
2131    }
2132
2133    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectionStats {
2134        #[inline(always)]
2135        fn new_empty() -> Self {
2136            Self::default()
2137        }
2138
2139        unsafe fn decode(
2140            &mut self,
2141            decoder: &mut fidl::encoding::Decoder<'_, D>,
2142            offset: usize,
2143            mut depth: fidl::encoding::Depth,
2144        ) -> fidl::Result<()> {
2145            decoder.debug_check_bounds::<Self>(offset);
2146            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2147                None => return Err(fidl::Error::NotNullable),
2148                Some(len) => len,
2149            };
2150            // Calling decoder.out_of_line_offset(0) is not allowed.
2151            if len == 0 {
2152                return Ok(());
2153            };
2154            depth.increment()?;
2155            let envelope_size = 8;
2156            let bytes_len = len * envelope_size;
2157            let offset = decoder.out_of_line_offset(bytes_len)?;
2158            // Decode the envelope for each type.
2159            let mut _next_ordinal_to_read = 0;
2160            let mut next_offset = offset;
2161            let end_offset = offset + bytes_len;
2162            _next_ordinal_to_read += 1;
2163            if next_offset >= end_offset {
2164                return Ok(());
2165            }
2166
2167            // Decode unknown envelopes for gaps in ordinals.
2168            while _next_ordinal_to_read < 1 {
2169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2170                _next_ordinal_to_read += 1;
2171                next_offset += envelope_size;
2172            }
2173
2174            let next_out_of_line = decoder.next_out_of_line();
2175            let handles_before = decoder.remaining_handles();
2176            if let Some((inlined, num_bytes, num_handles)) =
2177                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2178            {
2179                let member_inline_size =
2180                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2181                if inlined != (member_inline_size <= 4) {
2182                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2183                }
2184                let inner_offset;
2185                let mut inner_depth = depth.clone();
2186                if inlined {
2187                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2188                    inner_offset = next_offset;
2189                } else {
2190                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2191                    inner_depth.increment()?;
2192                }
2193                let val_ref = self.connection_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
2194                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2195                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2196                {
2197                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2198                }
2199                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2200                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2201                }
2202            }
2203
2204            next_offset += envelope_size;
2205            _next_ordinal_to_read += 1;
2206            if next_offset >= end_offset {
2207                return Ok(());
2208            }
2209
2210            // Decode unknown envelopes for gaps in ordinals.
2211            while _next_ordinal_to_read < 2 {
2212                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2213                _next_ordinal_to_read += 1;
2214                next_offset += envelope_size;
2215            }
2216
2217            let next_out_of_line = decoder.next_out_of_line();
2218            let handles_before = decoder.remaining_handles();
2219            if let Some((inlined, num_bytes, num_handles)) =
2220                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2221            {
2222                let member_inline_size = <fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2223                if inlined != (member_inline_size <= 4) {
2224                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2225                }
2226                let inner_offset;
2227                let mut inner_depth = depth.clone();
2228                if inlined {
2229                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2230                    inner_offset = next_offset;
2231                } else {
2232                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2233                    inner_depth.increment()?;
2234                }
2235                let val_ref = self.driver_specific_counters.get_or_insert_with(
2236                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedCounter, 127>, D),
2237                );
2238                fidl::decode!(fidl::encoding::Vector<UnnamedCounter, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
2239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2240                {
2241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2242                }
2243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2245                }
2246            }
2247
2248            next_offset += envelope_size;
2249            _next_ordinal_to_read += 1;
2250            if next_offset >= end_offset {
2251                return Ok(());
2252            }
2253
2254            // Decode unknown envelopes for gaps in ordinals.
2255            while _next_ordinal_to_read < 3 {
2256                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2257                _next_ordinal_to_read += 1;
2258                next_offset += envelope_size;
2259            }
2260
2261            let next_out_of_line = decoder.next_out_of_line();
2262            let handles_before = decoder.remaining_handles();
2263            if let Some((inlined, num_bytes, num_handles)) =
2264                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2265            {
2266                let member_inline_size = <fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2267                if inlined != (member_inline_size <= 4) {
2268                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2269                }
2270                let inner_offset;
2271                let mut inner_depth = depth.clone();
2272                if inlined {
2273                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2274                    inner_offset = next_offset;
2275                } else {
2276                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2277                    inner_depth.increment()?;
2278                }
2279                let val_ref = self.driver_specific_gauges.get_or_insert_with(
2280                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedGauge, 127>, D),
2281                );
2282                fidl::decode!(fidl::encoding::Vector<UnnamedGauge, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
2283                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2284                {
2285                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2286                }
2287                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2288                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2289                }
2290            }
2291
2292            next_offset += envelope_size;
2293            _next_ordinal_to_read += 1;
2294            if next_offset >= end_offset {
2295                return Ok(());
2296            }
2297
2298            // Decode unknown envelopes for gaps in ordinals.
2299            while _next_ordinal_to_read < 4 {
2300                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2301                _next_ordinal_to_read += 1;
2302                next_offset += envelope_size;
2303            }
2304
2305            let next_out_of_line = decoder.next_out_of_line();
2306            let handles_before = decoder.remaining_handles();
2307            if let Some((inlined, num_bytes, num_handles)) =
2308                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2309            {
2310                let member_inline_size =
2311                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2312                if inlined != (member_inline_size <= 4) {
2313                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2314                }
2315                let inner_offset;
2316                let mut inner_depth = depth.clone();
2317                if inlined {
2318                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2319                    inner_offset = next_offset;
2320                } else {
2321                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2322                    inner_depth.increment()?;
2323                }
2324                let val_ref = self.rx_unicast_total.get_or_insert_with(|| fidl::new_empty!(u64, D));
2325                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2326                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2327                {
2328                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2329                }
2330                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2331                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2332                }
2333            }
2334
2335            next_offset += envelope_size;
2336            _next_ordinal_to_read += 1;
2337            if next_offset >= end_offset {
2338                return Ok(());
2339            }
2340
2341            // Decode unknown envelopes for gaps in ordinals.
2342            while _next_ordinal_to_read < 5 {
2343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2344                _next_ordinal_to_read += 1;
2345                next_offset += envelope_size;
2346            }
2347
2348            let next_out_of_line = decoder.next_out_of_line();
2349            let handles_before = decoder.remaining_handles();
2350            if let Some((inlined, num_bytes, num_handles)) =
2351                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2352            {
2353                let member_inline_size =
2354                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2355                if inlined != (member_inline_size <= 4) {
2356                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2357                }
2358                let inner_offset;
2359                let mut inner_depth = depth.clone();
2360                if inlined {
2361                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2362                    inner_offset = next_offset;
2363                } else {
2364                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2365                    inner_depth.increment()?;
2366                }
2367                let val_ref = self.rx_unicast_drop.get_or_insert_with(|| fidl::new_empty!(u64, D));
2368                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2369                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2370                {
2371                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2372                }
2373                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2374                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2375                }
2376            }
2377
2378            next_offset += envelope_size;
2379            _next_ordinal_to_read += 1;
2380            if next_offset >= end_offset {
2381                return Ok(());
2382            }
2383
2384            // Decode unknown envelopes for gaps in ordinals.
2385            while _next_ordinal_to_read < 6 {
2386                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2387                _next_ordinal_to_read += 1;
2388                next_offset += envelope_size;
2389            }
2390
2391            let next_out_of_line = decoder.next_out_of_line();
2392            let handles_before = decoder.remaining_handles();
2393            if let Some((inlined, num_bytes, num_handles)) =
2394                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2395            {
2396                let member_inline_size =
2397                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2398                if inlined != (member_inline_size <= 4) {
2399                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2400                }
2401                let inner_offset;
2402                let mut inner_depth = depth.clone();
2403                if inlined {
2404                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2405                    inner_offset = next_offset;
2406                } else {
2407                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2408                    inner_depth.increment()?;
2409                }
2410                let val_ref = self.rx_multicast.get_or_insert_with(|| fidl::new_empty!(u64, D));
2411                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2413                {
2414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2415                }
2416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2418                }
2419            }
2420
2421            next_offset += envelope_size;
2422            _next_ordinal_to_read += 1;
2423            if next_offset >= end_offset {
2424                return Ok(());
2425            }
2426
2427            // Decode unknown envelopes for gaps in ordinals.
2428            while _next_ordinal_to_read < 7 {
2429                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2430                _next_ordinal_to_read += 1;
2431                next_offset += envelope_size;
2432            }
2433
2434            let next_out_of_line = decoder.next_out_of_line();
2435            let handles_before = decoder.remaining_handles();
2436            if let Some((inlined, num_bytes, num_handles)) =
2437                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2438            {
2439                let member_inline_size =
2440                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2441                if inlined != (member_inline_size <= 4) {
2442                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2443                }
2444                let inner_offset;
2445                let mut inner_depth = depth.clone();
2446                if inlined {
2447                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2448                    inner_offset = next_offset;
2449                } else {
2450                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2451                    inner_depth.increment()?;
2452                }
2453                let val_ref = self.tx_total.get_or_insert_with(|| fidl::new_empty!(u64, D));
2454                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2455                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2456                {
2457                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2458                }
2459                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2460                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2461                }
2462            }
2463
2464            next_offset += envelope_size;
2465            _next_ordinal_to_read += 1;
2466            if next_offset >= end_offset {
2467                return Ok(());
2468            }
2469
2470            // Decode unknown envelopes for gaps in ordinals.
2471            while _next_ordinal_to_read < 8 {
2472                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2473                _next_ordinal_to_read += 1;
2474                next_offset += envelope_size;
2475            }
2476
2477            let next_out_of_line = decoder.next_out_of_line();
2478            let handles_before = decoder.remaining_handles();
2479            if let Some((inlined, num_bytes, num_handles)) =
2480                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2481            {
2482                let member_inline_size =
2483                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2484                if inlined != (member_inline_size <= 4) {
2485                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2486                }
2487                let inner_offset;
2488                let mut inner_depth = depth.clone();
2489                if inlined {
2490                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2491                    inner_offset = next_offset;
2492                } else {
2493                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2494                    inner_depth.increment()?;
2495                }
2496                let val_ref = self.tx_drop.get_or_insert_with(|| fidl::new_empty!(u64, D));
2497                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2498                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2499                {
2500                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2501                }
2502                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2503                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2504                }
2505            }
2506
2507            next_offset += envelope_size;
2508
2509            // Decode the remaining unknown envelopes.
2510            while next_offset < end_offset {
2511                _next_ordinal_to_read += 1;
2512                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2513                next_offset += envelope_size;
2514            }
2515
2516            Ok(())
2517        }
2518    }
2519
2520    impl IfaceHistogramStats {
2521        #[inline(always)]
2522        fn max_ordinal_present(&self) -> u64 {
2523            if let Some(_) = self.snr_histograms {
2524                return 4;
2525            }
2526            if let Some(_) = self.rx_rate_index_histograms {
2527                return 3;
2528            }
2529            if let Some(_) = self.rssi_histograms {
2530                return 2;
2531            }
2532            if let Some(_) = self.noise_floor_histograms {
2533                return 1;
2534            }
2535            0
2536        }
2537    }
2538
2539    impl fidl::encoding::ValueTypeMarker for IfaceHistogramStats {
2540        type Borrowed<'a> = &'a Self;
2541        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2542            value
2543        }
2544    }
2545
2546    unsafe impl fidl::encoding::TypeMarker for IfaceHistogramStats {
2547        type Owned = Self;
2548
2549        #[inline(always)]
2550        fn inline_align(_context: fidl::encoding::Context) -> usize {
2551            8
2552        }
2553
2554        #[inline(always)]
2555        fn inline_size(_context: fidl::encoding::Context) -> usize {
2556            16
2557        }
2558    }
2559
2560    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IfaceHistogramStats, D>
2561        for &IfaceHistogramStats
2562    {
2563        unsafe fn encode(
2564            self,
2565            encoder: &mut fidl::encoding::Encoder<'_, D>,
2566            offset: usize,
2567            mut depth: fidl::encoding::Depth,
2568        ) -> fidl::Result<()> {
2569            encoder.debug_check_bounds::<IfaceHistogramStats>(offset);
2570            // Vector header
2571            let max_ordinal: u64 = self.max_ordinal_present();
2572            encoder.write_num(max_ordinal, offset);
2573            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2574            // Calling encoder.out_of_line_offset(0) is not allowed.
2575            if max_ordinal == 0 {
2576                return Ok(());
2577            }
2578            depth.increment()?;
2579            let envelope_size = 8;
2580            let bytes_len = max_ordinal as usize * envelope_size;
2581            #[allow(unused_variables)]
2582            let offset = encoder.out_of_line_offset(bytes_len);
2583            let mut _prev_end_offset: usize = 0;
2584            if 1 > max_ordinal {
2585                return Ok(());
2586            }
2587
2588            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2589            // are envelope_size bytes.
2590            let cur_offset: usize = (1 - 1) * envelope_size;
2591
2592            // Zero reserved fields.
2593            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2594
2595            // Safety:
2596            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2597            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2598            //   envelope_size bytes, there is always sufficient room.
2599            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NoiseFloorHistogram, 8>, D>(
2600            self.noise_floor_histograms.as_ref().map(<fidl::encoding::Vector<NoiseFloorHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2601            encoder, offset + cur_offset, depth
2602        )?;
2603
2604            _prev_end_offset = cur_offset + envelope_size;
2605            if 2 > max_ordinal {
2606                return Ok(());
2607            }
2608
2609            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2610            // are envelope_size bytes.
2611            let cur_offset: usize = (2 - 1) * envelope_size;
2612
2613            // Zero reserved fields.
2614            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2615
2616            // Safety:
2617            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2618            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2619            //   envelope_size bytes, there is always sufficient room.
2620            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RssiHistogram, 8>, D>(
2621            self.rssi_histograms.as_ref().map(<fidl::encoding::Vector<RssiHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2622            encoder, offset + cur_offset, depth
2623        )?;
2624
2625            _prev_end_offset = cur_offset + envelope_size;
2626            if 3 > max_ordinal {
2627                return Ok(());
2628            }
2629
2630            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2631            // are envelope_size bytes.
2632            let cur_offset: usize = (3 - 1) * envelope_size;
2633
2634            // Zero reserved fields.
2635            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2636
2637            // Safety:
2638            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2639            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2640            //   envelope_size bytes, there is always sufficient room.
2641            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RxRateIndexHistogram, 8>, D>(
2642            self.rx_rate_index_histograms.as_ref().map(<fidl::encoding::Vector<RxRateIndexHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2643            encoder, offset + cur_offset, depth
2644        )?;
2645
2646            _prev_end_offset = cur_offset + envelope_size;
2647            if 4 > max_ordinal {
2648                return Ok(());
2649            }
2650
2651            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2652            // are envelope_size bytes.
2653            let cur_offset: usize = (4 - 1) * envelope_size;
2654
2655            // Zero reserved fields.
2656            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2657
2658            // Safety:
2659            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2660            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2661            //   envelope_size bytes, there is always sufficient room.
2662            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SnrHistogram, 8>, D>(
2663            self.snr_histograms.as_ref().map(<fidl::encoding::Vector<SnrHistogram, 8> as fidl::encoding::ValueTypeMarker>::borrow),
2664            encoder, offset + cur_offset, depth
2665        )?;
2666
2667            _prev_end_offset = cur_offset + envelope_size;
2668
2669            Ok(())
2670        }
2671    }
2672
2673    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IfaceHistogramStats {
2674        #[inline(always)]
2675        fn new_empty() -> Self {
2676            Self::default()
2677        }
2678
2679        unsafe fn decode(
2680            &mut self,
2681            decoder: &mut fidl::encoding::Decoder<'_, D>,
2682            offset: usize,
2683            mut depth: fidl::encoding::Depth,
2684        ) -> fidl::Result<()> {
2685            decoder.debug_check_bounds::<Self>(offset);
2686            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2687                None => return Err(fidl::Error::NotNullable),
2688                Some(len) => len,
2689            };
2690            // Calling decoder.out_of_line_offset(0) is not allowed.
2691            if len == 0 {
2692                return Ok(());
2693            };
2694            depth.increment()?;
2695            let envelope_size = 8;
2696            let bytes_len = len * envelope_size;
2697            let offset = decoder.out_of_line_offset(bytes_len)?;
2698            // Decode the envelope for each type.
2699            let mut _next_ordinal_to_read = 0;
2700            let mut next_offset = offset;
2701            let end_offset = offset + bytes_len;
2702            _next_ordinal_to_read += 1;
2703            if next_offset >= end_offset {
2704                return Ok(());
2705            }
2706
2707            // Decode unknown envelopes for gaps in ordinals.
2708            while _next_ordinal_to_read < 1 {
2709                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2710                _next_ordinal_to_read += 1;
2711                next_offset += envelope_size;
2712            }
2713
2714            let next_out_of_line = decoder.next_out_of_line();
2715            let handles_before = decoder.remaining_handles();
2716            if let Some((inlined, num_bytes, num_handles)) =
2717                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2718            {
2719                let member_inline_size = <fidl::encoding::Vector<NoiseFloorHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2720                if inlined != (member_inline_size <= 4) {
2721                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2722                }
2723                let inner_offset;
2724                let mut inner_depth = depth.clone();
2725                if inlined {
2726                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2727                    inner_offset = next_offset;
2728                } else {
2729                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2730                    inner_depth.increment()?;
2731                }
2732                let val_ref = self.noise_floor_histograms.get_or_insert_with(
2733                    || fidl::new_empty!(fidl::encoding::Vector<NoiseFloorHistogram, 8>, D),
2734                );
2735                fidl::decode!(fidl::encoding::Vector<NoiseFloorHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
2736                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2737                {
2738                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2739                }
2740                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2741                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2742                }
2743            }
2744
2745            next_offset += envelope_size;
2746            _next_ordinal_to_read += 1;
2747            if next_offset >= end_offset {
2748                return Ok(());
2749            }
2750
2751            // Decode unknown envelopes for gaps in ordinals.
2752            while _next_ordinal_to_read < 2 {
2753                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2754                _next_ordinal_to_read += 1;
2755                next_offset += envelope_size;
2756            }
2757
2758            let next_out_of_line = decoder.next_out_of_line();
2759            let handles_before = decoder.remaining_handles();
2760            if let Some((inlined, num_bytes, num_handles)) =
2761                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2762            {
2763                let member_inline_size = <fidl::encoding::Vector<RssiHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2764                if inlined != (member_inline_size <= 4) {
2765                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2766                }
2767                let inner_offset;
2768                let mut inner_depth = depth.clone();
2769                if inlined {
2770                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2771                    inner_offset = next_offset;
2772                } else {
2773                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2774                    inner_depth.increment()?;
2775                }
2776                let val_ref = self.rssi_histograms.get_or_insert_with(
2777                    || fidl::new_empty!(fidl::encoding::Vector<RssiHistogram, 8>, D),
2778                );
2779                fidl::decode!(fidl::encoding::Vector<RssiHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
2780                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2781                {
2782                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2783                }
2784                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2785                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2786                }
2787            }
2788
2789            next_offset += envelope_size;
2790            _next_ordinal_to_read += 1;
2791            if next_offset >= end_offset {
2792                return Ok(());
2793            }
2794
2795            // Decode unknown envelopes for gaps in ordinals.
2796            while _next_ordinal_to_read < 3 {
2797                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2798                _next_ordinal_to_read += 1;
2799                next_offset += envelope_size;
2800            }
2801
2802            let next_out_of_line = decoder.next_out_of_line();
2803            let handles_before = decoder.remaining_handles();
2804            if let Some((inlined, num_bytes, num_handles)) =
2805                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2806            {
2807                let member_inline_size = <fidl::encoding::Vector<RxRateIndexHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2808                if inlined != (member_inline_size <= 4) {
2809                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2810                }
2811                let inner_offset;
2812                let mut inner_depth = depth.clone();
2813                if inlined {
2814                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2815                    inner_offset = next_offset;
2816                } else {
2817                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2818                    inner_depth.increment()?;
2819                }
2820                let val_ref = self.rx_rate_index_histograms.get_or_insert_with(
2821                    || fidl::new_empty!(fidl::encoding::Vector<RxRateIndexHistogram, 8>, D),
2822                );
2823                fidl::decode!(fidl::encoding::Vector<RxRateIndexHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
2824                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2825                {
2826                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2827                }
2828                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2829                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2830                }
2831            }
2832
2833            next_offset += envelope_size;
2834            _next_ordinal_to_read += 1;
2835            if next_offset >= end_offset {
2836                return Ok(());
2837            }
2838
2839            // Decode unknown envelopes for gaps in ordinals.
2840            while _next_ordinal_to_read < 4 {
2841                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2842                _next_ordinal_to_read += 1;
2843                next_offset += envelope_size;
2844            }
2845
2846            let next_out_of_line = decoder.next_out_of_line();
2847            let handles_before = decoder.remaining_handles();
2848            if let Some((inlined, num_bytes, num_handles)) =
2849                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2850            {
2851                let member_inline_size = <fidl::encoding::Vector<SnrHistogram, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2852                if inlined != (member_inline_size <= 4) {
2853                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2854                }
2855                let inner_offset;
2856                let mut inner_depth = depth.clone();
2857                if inlined {
2858                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2859                    inner_offset = next_offset;
2860                } else {
2861                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2862                    inner_depth.increment()?;
2863                }
2864                let val_ref = self.snr_histograms.get_or_insert_with(
2865                    || fidl::new_empty!(fidl::encoding::Vector<SnrHistogram, 8>, D),
2866                );
2867                fidl::decode!(fidl::encoding::Vector<SnrHistogram, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
2868                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2869                {
2870                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2871                }
2872                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2873                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2874                }
2875            }
2876
2877            next_offset += envelope_size;
2878
2879            // Decode the remaining unknown envelopes.
2880            while next_offset < end_offset {
2881                _next_ordinal_to_read += 1;
2882                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2883                next_offset += envelope_size;
2884            }
2885
2886            Ok(())
2887        }
2888    }
2889
2890    impl IfaceStats {
2891        #[inline(always)]
2892        fn max_ordinal_present(&self) -> u64 {
2893            if let Some(_) = self.driver_specific_gauges {
2894                return 3;
2895            }
2896            if let Some(_) = self.driver_specific_counters {
2897                return 2;
2898            }
2899            if let Some(_) = self.connection_stats {
2900                return 1;
2901            }
2902            0
2903        }
2904    }
2905
2906    impl fidl::encoding::ValueTypeMarker for IfaceStats {
2907        type Borrowed<'a> = &'a Self;
2908        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2909            value
2910        }
2911    }
2912
2913    unsafe impl fidl::encoding::TypeMarker for IfaceStats {
2914        type Owned = Self;
2915
2916        #[inline(always)]
2917        fn inline_align(_context: fidl::encoding::Context) -> usize {
2918            8
2919        }
2920
2921        #[inline(always)]
2922        fn inline_size(_context: fidl::encoding::Context) -> usize {
2923            16
2924        }
2925    }
2926
2927    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IfaceStats, D>
2928        for &IfaceStats
2929    {
2930        unsafe fn encode(
2931            self,
2932            encoder: &mut fidl::encoding::Encoder<'_, D>,
2933            offset: usize,
2934            mut depth: fidl::encoding::Depth,
2935        ) -> fidl::Result<()> {
2936            encoder.debug_check_bounds::<IfaceStats>(offset);
2937            // Vector header
2938            let max_ordinal: u64 = self.max_ordinal_present();
2939            encoder.write_num(max_ordinal, offset);
2940            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2941            // Calling encoder.out_of_line_offset(0) is not allowed.
2942            if max_ordinal == 0 {
2943                return Ok(());
2944            }
2945            depth.increment()?;
2946            let envelope_size = 8;
2947            let bytes_len = max_ordinal as usize * envelope_size;
2948            #[allow(unused_variables)]
2949            let offset = encoder.out_of_line_offset(bytes_len);
2950            let mut _prev_end_offset: usize = 0;
2951            if 1 > max_ordinal {
2952                return Ok(());
2953            }
2954
2955            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2956            // are envelope_size bytes.
2957            let cur_offset: usize = (1 - 1) * envelope_size;
2958
2959            // Zero reserved fields.
2960            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2961
2962            // Safety:
2963            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2964            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2965            //   envelope_size bytes, there is always sufficient room.
2966            fidl::encoding::encode_in_envelope_optional::<ConnectionStats, D>(
2967                self.connection_stats
2968                    .as_ref()
2969                    .map(<ConnectionStats as fidl::encoding::ValueTypeMarker>::borrow),
2970                encoder,
2971                offset + cur_offset,
2972                depth,
2973            )?;
2974
2975            _prev_end_offset = cur_offset + envelope_size;
2976            if 2 > max_ordinal {
2977                return Ok(());
2978            }
2979
2980            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2981            // are envelope_size bytes.
2982            let cur_offset: usize = (2 - 1) * envelope_size;
2983
2984            // Zero reserved fields.
2985            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2986
2987            // Safety:
2988            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2989            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2990            //   envelope_size bytes, there is always sufficient room.
2991            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedCounter, 127>, D>(
2992            self.driver_specific_counters.as_ref().map(<fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::ValueTypeMarker>::borrow),
2993            encoder, offset + cur_offset, depth
2994        )?;
2995
2996            _prev_end_offset = cur_offset + envelope_size;
2997            if 3 > max_ordinal {
2998                return Ok(());
2999            }
3000
3001            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3002            // are envelope_size bytes.
3003            let cur_offset: usize = (3 - 1) * envelope_size;
3004
3005            // Zero reserved fields.
3006            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3007
3008            // Safety:
3009            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3010            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3011            //   envelope_size bytes, there is always sufficient room.
3012            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<UnnamedGauge, 127>, D>(
3013            self.driver_specific_gauges.as_ref().map(<fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::ValueTypeMarker>::borrow),
3014            encoder, offset + cur_offset, depth
3015        )?;
3016
3017            _prev_end_offset = cur_offset + envelope_size;
3018
3019            Ok(())
3020        }
3021    }
3022
3023    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IfaceStats {
3024        #[inline(always)]
3025        fn new_empty() -> Self {
3026            Self::default()
3027        }
3028
3029        unsafe fn decode(
3030            &mut self,
3031            decoder: &mut fidl::encoding::Decoder<'_, D>,
3032            offset: usize,
3033            mut depth: fidl::encoding::Depth,
3034        ) -> fidl::Result<()> {
3035            decoder.debug_check_bounds::<Self>(offset);
3036            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3037                None => return Err(fidl::Error::NotNullable),
3038                Some(len) => len,
3039            };
3040            // Calling decoder.out_of_line_offset(0) is not allowed.
3041            if len == 0 {
3042                return Ok(());
3043            };
3044            depth.increment()?;
3045            let envelope_size = 8;
3046            let bytes_len = len * envelope_size;
3047            let offset = decoder.out_of_line_offset(bytes_len)?;
3048            // Decode the envelope for each type.
3049            let mut _next_ordinal_to_read = 0;
3050            let mut next_offset = offset;
3051            let end_offset = offset + bytes_len;
3052            _next_ordinal_to_read += 1;
3053            if next_offset >= end_offset {
3054                return Ok(());
3055            }
3056
3057            // Decode unknown envelopes for gaps in ordinals.
3058            while _next_ordinal_to_read < 1 {
3059                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3060                _next_ordinal_to_read += 1;
3061                next_offset += envelope_size;
3062            }
3063
3064            let next_out_of_line = decoder.next_out_of_line();
3065            let handles_before = decoder.remaining_handles();
3066            if let Some((inlined, num_bytes, num_handles)) =
3067                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3068            {
3069                let member_inline_size =
3070                    <ConnectionStats as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3071                if inlined != (member_inline_size <= 4) {
3072                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3073                }
3074                let inner_offset;
3075                let mut inner_depth = depth.clone();
3076                if inlined {
3077                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3078                    inner_offset = next_offset;
3079                } else {
3080                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3081                    inner_depth.increment()?;
3082                }
3083                let val_ref = self
3084                    .connection_stats
3085                    .get_or_insert_with(|| fidl::new_empty!(ConnectionStats, D));
3086                fidl::decode!(ConnectionStats, D, val_ref, decoder, inner_offset, inner_depth)?;
3087                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3088                {
3089                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3090                }
3091                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3092                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3093                }
3094            }
3095
3096            next_offset += envelope_size;
3097            _next_ordinal_to_read += 1;
3098            if next_offset >= end_offset {
3099                return Ok(());
3100            }
3101
3102            // Decode unknown envelopes for gaps in ordinals.
3103            while _next_ordinal_to_read < 2 {
3104                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3105                _next_ordinal_to_read += 1;
3106                next_offset += envelope_size;
3107            }
3108
3109            let next_out_of_line = decoder.next_out_of_line();
3110            let handles_before = decoder.remaining_handles();
3111            if let Some((inlined, num_bytes, num_handles)) =
3112                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3113            {
3114                let member_inline_size = <fidl::encoding::Vector<UnnamedCounter, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3115                if inlined != (member_inline_size <= 4) {
3116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3117                }
3118                let inner_offset;
3119                let mut inner_depth = depth.clone();
3120                if inlined {
3121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3122                    inner_offset = next_offset;
3123                } else {
3124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3125                    inner_depth.increment()?;
3126                }
3127                let val_ref = self.driver_specific_counters.get_or_insert_with(
3128                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedCounter, 127>, D),
3129                );
3130                fidl::decode!(fidl::encoding::Vector<UnnamedCounter, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
3131                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3132                {
3133                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3134                }
3135                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3136                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3137                }
3138            }
3139
3140            next_offset += envelope_size;
3141            _next_ordinal_to_read += 1;
3142            if next_offset >= end_offset {
3143                return Ok(());
3144            }
3145
3146            // Decode unknown envelopes for gaps in ordinals.
3147            while _next_ordinal_to_read < 3 {
3148                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3149                _next_ordinal_to_read += 1;
3150                next_offset += envelope_size;
3151            }
3152
3153            let next_out_of_line = decoder.next_out_of_line();
3154            let handles_before = decoder.remaining_handles();
3155            if let Some((inlined, num_bytes, num_handles)) =
3156                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3157            {
3158                let member_inline_size = <fidl::encoding::Vector<UnnamedGauge, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3159                if inlined != (member_inline_size <= 4) {
3160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3161                }
3162                let inner_offset;
3163                let mut inner_depth = depth.clone();
3164                if inlined {
3165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3166                    inner_offset = next_offset;
3167                } else {
3168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3169                    inner_depth.increment()?;
3170                }
3171                let val_ref = self.driver_specific_gauges.get_or_insert_with(
3172                    || fidl::new_empty!(fidl::encoding::Vector<UnnamedGauge, 127>, D),
3173                );
3174                fidl::decode!(fidl::encoding::Vector<UnnamedGauge, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
3175                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3176                {
3177                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3178                }
3179                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3180                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3181                }
3182            }
3183
3184            next_offset += envelope_size;
3185
3186            // Decode the remaining unknown envelopes.
3187            while next_offset < end_offset {
3188                _next_ordinal_to_read += 1;
3189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3190                next_offset += envelope_size;
3191            }
3192
3193            Ok(())
3194        }
3195    }
3196
3197    impl InspectCounterConfig {
3198        #[inline(always)]
3199        fn max_ordinal_present(&self) -> u64 {
3200            if let Some(_) = self.counter_name {
3201                return 2;
3202            }
3203            if let Some(_) = self.counter_id {
3204                return 1;
3205            }
3206            0
3207        }
3208    }
3209
3210    impl fidl::encoding::ValueTypeMarker for InspectCounterConfig {
3211        type Borrowed<'a> = &'a Self;
3212        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3213            value
3214        }
3215    }
3216
3217    unsafe impl fidl::encoding::TypeMarker for InspectCounterConfig {
3218        type Owned = Self;
3219
3220        #[inline(always)]
3221        fn inline_align(_context: fidl::encoding::Context) -> usize {
3222            8
3223        }
3224
3225        #[inline(always)]
3226        fn inline_size(_context: fidl::encoding::Context) -> usize {
3227            16
3228        }
3229    }
3230
3231    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<InspectCounterConfig, D>
3232        for &InspectCounterConfig
3233    {
3234        unsafe fn encode(
3235            self,
3236            encoder: &mut fidl::encoding::Encoder<'_, D>,
3237            offset: usize,
3238            mut depth: fidl::encoding::Depth,
3239        ) -> fidl::Result<()> {
3240            encoder.debug_check_bounds::<InspectCounterConfig>(offset);
3241            // Vector header
3242            let max_ordinal: u64 = self.max_ordinal_present();
3243            encoder.write_num(max_ordinal, offset);
3244            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3245            // Calling encoder.out_of_line_offset(0) is not allowed.
3246            if max_ordinal == 0 {
3247                return Ok(());
3248            }
3249            depth.increment()?;
3250            let envelope_size = 8;
3251            let bytes_len = max_ordinal as usize * envelope_size;
3252            #[allow(unused_variables)]
3253            let offset = encoder.out_of_line_offset(bytes_len);
3254            let mut _prev_end_offset: usize = 0;
3255            if 1 > max_ordinal {
3256                return Ok(());
3257            }
3258
3259            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3260            // are envelope_size bytes.
3261            let cur_offset: usize = (1 - 1) * envelope_size;
3262
3263            // Zero reserved fields.
3264            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3265
3266            // Safety:
3267            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3268            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3269            //   envelope_size bytes, there is always sufficient room.
3270            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3271                self.counter_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3272                encoder,
3273                offset + cur_offset,
3274                depth,
3275            )?;
3276
3277            _prev_end_offset = cur_offset + envelope_size;
3278            if 2 > max_ordinal {
3279                return Ok(());
3280            }
3281
3282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3283            // are envelope_size bytes.
3284            let cur_offset: usize = (2 - 1) * envelope_size;
3285
3286            // Zero reserved fields.
3287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3288
3289            // Safety:
3290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3292            //   envelope_size bytes, there is always sufficient room.
3293            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<127>, D>(
3294                self.counter_name.as_ref().map(
3295                    <fidl::encoding::BoundedString<127> as fidl::encoding::ValueTypeMarker>::borrow,
3296                ),
3297                encoder,
3298                offset + cur_offset,
3299                depth,
3300            )?;
3301
3302            _prev_end_offset = cur_offset + envelope_size;
3303
3304            Ok(())
3305        }
3306    }
3307
3308    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for InspectCounterConfig {
3309        #[inline(always)]
3310        fn new_empty() -> Self {
3311            Self::default()
3312        }
3313
3314        unsafe fn decode(
3315            &mut self,
3316            decoder: &mut fidl::encoding::Decoder<'_, D>,
3317            offset: usize,
3318            mut depth: fidl::encoding::Depth,
3319        ) -> fidl::Result<()> {
3320            decoder.debug_check_bounds::<Self>(offset);
3321            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3322                None => return Err(fidl::Error::NotNullable),
3323                Some(len) => len,
3324            };
3325            // Calling decoder.out_of_line_offset(0) is not allowed.
3326            if len == 0 {
3327                return Ok(());
3328            };
3329            depth.increment()?;
3330            let envelope_size = 8;
3331            let bytes_len = len * envelope_size;
3332            let offset = decoder.out_of_line_offset(bytes_len)?;
3333            // Decode the envelope for each type.
3334            let mut _next_ordinal_to_read = 0;
3335            let mut next_offset = offset;
3336            let end_offset = offset + bytes_len;
3337            _next_ordinal_to_read += 1;
3338            if next_offset >= end_offset {
3339                return Ok(());
3340            }
3341
3342            // Decode unknown envelopes for gaps in ordinals.
3343            while _next_ordinal_to_read < 1 {
3344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3345                _next_ordinal_to_read += 1;
3346                next_offset += envelope_size;
3347            }
3348
3349            let next_out_of_line = decoder.next_out_of_line();
3350            let handles_before = decoder.remaining_handles();
3351            if let Some((inlined, num_bytes, num_handles)) =
3352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3353            {
3354                let member_inline_size =
3355                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3356                if inlined != (member_inline_size <= 4) {
3357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3358                }
3359                let inner_offset;
3360                let mut inner_depth = depth.clone();
3361                if inlined {
3362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3363                    inner_offset = next_offset;
3364                } else {
3365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3366                    inner_depth.increment()?;
3367                }
3368                let val_ref = self.counter_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
3369                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3370                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3371                {
3372                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3373                }
3374                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3375                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3376                }
3377            }
3378
3379            next_offset += envelope_size;
3380            _next_ordinal_to_read += 1;
3381            if next_offset >= end_offset {
3382                return Ok(());
3383            }
3384
3385            // Decode unknown envelopes for gaps in ordinals.
3386            while _next_ordinal_to_read < 2 {
3387                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3388                _next_ordinal_to_read += 1;
3389                next_offset += envelope_size;
3390            }
3391
3392            let next_out_of_line = decoder.next_out_of_line();
3393            let handles_before = decoder.remaining_handles();
3394            if let Some((inlined, num_bytes, num_handles)) =
3395                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3396            {
3397                let member_inline_size =
3398                    <fidl::encoding::BoundedString<127> as fidl::encoding::TypeMarker>::inline_size(
3399                        decoder.context,
3400                    );
3401                if inlined != (member_inline_size <= 4) {
3402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3403                }
3404                let inner_offset;
3405                let mut inner_depth = depth.clone();
3406                if inlined {
3407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3408                    inner_offset = next_offset;
3409                } else {
3410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3411                    inner_depth.increment()?;
3412                }
3413                let val_ref = self
3414                    .counter_name
3415                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<127>, D));
3416                fidl::decode!(
3417                    fidl::encoding::BoundedString<127>,
3418                    D,
3419                    val_ref,
3420                    decoder,
3421                    inner_offset,
3422                    inner_depth
3423                )?;
3424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3425                {
3426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3427                }
3428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3430                }
3431            }
3432
3433            next_offset += envelope_size;
3434
3435            // Decode the remaining unknown envelopes.
3436            while next_offset < end_offset {
3437                _next_ordinal_to_read += 1;
3438                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3439                next_offset += envelope_size;
3440            }
3441
3442            Ok(())
3443        }
3444    }
3445
3446    impl InspectGaugeConfig {
3447        #[inline(always)]
3448        fn max_ordinal_present(&self) -> u64 {
3449            if let Some(_) = self.statistics {
3450                return 3;
3451            }
3452            if let Some(_) = self.gauge_name {
3453                return 2;
3454            }
3455            if let Some(_) = self.gauge_id {
3456                return 1;
3457            }
3458            0
3459        }
3460    }
3461
3462    impl fidl::encoding::ValueTypeMarker for InspectGaugeConfig {
3463        type Borrowed<'a> = &'a Self;
3464        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3465            value
3466        }
3467    }
3468
3469    unsafe impl fidl::encoding::TypeMarker for InspectGaugeConfig {
3470        type Owned = Self;
3471
3472        #[inline(always)]
3473        fn inline_align(_context: fidl::encoding::Context) -> usize {
3474            8
3475        }
3476
3477        #[inline(always)]
3478        fn inline_size(_context: fidl::encoding::Context) -> usize {
3479            16
3480        }
3481    }
3482
3483    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<InspectGaugeConfig, D>
3484        for &InspectGaugeConfig
3485    {
3486        unsafe fn encode(
3487            self,
3488            encoder: &mut fidl::encoding::Encoder<'_, D>,
3489            offset: usize,
3490            mut depth: fidl::encoding::Depth,
3491        ) -> fidl::Result<()> {
3492            encoder.debug_check_bounds::<InspectGaugeConfig>(offset);
3493            // Vector header
3494            let max_ordinal: u64 = self.max_ordinal_present();
3495            encoder.write_num(max_ordinal, offset);
3496            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3497            // Calling encoder.out_of_line_offset(0) is not allowed.
3498            if max_ordinal == 0 {
3499                return Ok(());
3500            }
3501            depth.increment()?;
3502            let envelope_size = 8;
3503            let bytes_len = max_ordinal as usize * envelope_size;
3504            #[allow(unused_variables)]
3505            let offset = encoder.out_of_line_offset(bytes_len);
3506            let mut _prev_end_offset: usize = 0;
3507            if 1 > max_ordinal {
3508                return Ok(());
3509            }
3510
3511            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3512            // are envelope_size bytes.
3513            let cur_offset: usize = (1 - 1) * envelope_size;
3514
3515            // Zero reserved fields.
3516            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3517
3518            // Safety:
3519            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3520            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3521            //   envelope_size bytes, there is always sufficient room.
3522            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3523                self.gauge_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3524                encoder,
3525                offset + cur_offset,
3526                depth,
3527            )?;
3528
3529            _prev_end_offset = cur_offset + envelope_size;
3530            if 2 > max_ordinal {
3531                return Ok(());
3532            }
3533
3534            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3535            // are envelope_size bytes.
3536            let cur_offset: usize = (2 - 1) * envelope_size;
3537
3538            // Zero reserved fields.
3539            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3540
3541            // Safety:
3542            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3543            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3544            //   envelope_size bytes, there is always sufficient room.
3545            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<127>, D>(
3546                self.gauge_name.as_ref().map(
3547                    <fidl::encoding::BoundedString<127> as fidl::encoding::ValueTypeMarker>::borrow,
3548                ),
3549                encoder,
3550                offset + cur_offset,
3551                depth,
3552            )?;
3553
3554            _prev_end_offset = cur_offset + envelope_size;
3555            if 3 > max_ordinal {
3556                return Ok(());
3557            }
3558
3559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3560            // are envelope_size bytes.
3561            let cur_offset: usize = (3 - 1) * envelope_size;
3562
3563            // Zero reserved fields.
3564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3565
3566            // Safety:
3567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3569            //   envelope_size bytes, there is always sufficient room.
3570            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<GaugeStatistic, 5>, D>(
3571            self.statistics.as_ref().map(<fidl::encoding::Vector<GaugeStatistic, 5> as fidl::encoding::ValueTypeMarker>::borrow),
3572            encoder, offset + cur_offset, depth
3573        )?;
3574
3575            _prev_end_offset = cur_offset + envelope_size;
3576
3577            Ok(())
3578        }
3579    }
3580
3581    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for InspectGaugeConfig {
3582        #[inline(always)]
3583        fn new_empty() -> Self {
3584            Self::default()
3585        }
3586
3587        unsafe fn decode(
3588            &mut self,
3589            decoder: &mut fidl::encoding::Decoder<'_, D>,
3590            offset: usize,
3591            mut depth: fidl::encoding::Depth,
3592        ) -> fidl::Result<()> {
3593            decoder.debug_check_bounds::<Self>(offset);
3594            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3595                None => return Err(fidl::Error::NotNullable),
3596                Some(len) => len,
3597            };
3598            // Calling decoder.out_of_line_offset(0) is not allowed.
3599            if len == 0 {
3600                return Ok(());
3601            };
3602            depth.increment()?;
3603            let envelope_size = 8;
3604            let bytes_len = len * envelope_size;
3605            let offset = decoder.out_of_line_offset(bytes_len)?;
3606            // Decode the envelope for each type.
3607            let mut _next_ordinal_to_read = 0;
3608            let mut next_offset = offset;
3609            let end_offset = offset + bytes_len;
3610            _next_ordinal_to_read += 1;
3611            if next_offset >= end_offset {
3612                return Ok(());
3613            }
3614
3615            // Decode unknown envelopes for gaps in ordinals.
3616            while _next_ordinal_to_read < 1 {
3617                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3618                _next_ordinal_to_read += 1;
3619                next_offset += envelope_size;
3620            }
3621
3622            let next_out_of_line = decoder.next_out_of_line();
3623            let handles_before = decoder.remaining_handles();
3624            if let Some((inlined, num_bytes, num_handles)) =
3625                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3626            {
3627                let member_inline_size =
3628                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3629                if inlined != (member_inline_size <= 4) {
3630                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3631                }
3632                let inner_offset;
3633                let mut inner_depth = depth.clone();
3634                if inlined {
3635                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3636                    inner_offset = next_offset;
3637                } else {
3638                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3639                    inner_depth.increment()?;
3640                }
3641                let val_ref = self.gauge_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
3642                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3643                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3644                {
3645                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3646                }
3647                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3648                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3649                }
3650            }
3651
3652            next_offset += envelope_size;
3653            _next_ordinal_to_read += 1;
3654            if next_offset >= end_offset {
3655                return Ok(());
3656            }
3657
3658            // Decode unknown envelopes for gaps in ordinals.
3659            while _next_ordinal_to_read < 2 {
3660                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3661                _next_ordinal_to_read += 1;
3662                next_offset += envelope_size;
3663            }
3664
3665            let next_out_of_line = decoder.next_out_of_line();
3666            let handles_before = decoder.remaining_handles();
3667            if let Some((inlined, num_bytes, num_handles)) =
3668                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3669            {
3670                let member_inline_size =
3671                    <fidl::encoding::BoundedString<127> as fidl::encoding::TypeMarker>::inline_size(
3672                        decoder.context,
3673                    );
3674                if inlined != (member_inline_size <= 4) {
3675                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3676                }
3677                let inner_offset;
3678                let mut inner_depth = depth.clone();
3679                if inlined {
3680                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3681                    inner_offset = next_offset;
3682                } else {
3683                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3684                    inner_depth.increment()?;
3685                }
3686                let val_ref = self
3687                    .gauge_name
3688                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<127>, D));
3689                fidl::decode!(
3690                    fidl::encoding::BoundedString<127>,
3691                    D,
3692                    val_ref,
3693                    decoder,
3694                    inner_offset,
3695                    inner_depth
3696                )?;
3697                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3698                {
3699                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3700                }
3701                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3702                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3703                }
3704            }
3705
3706            next_offset += envelope_size;
3707            _next_ordinal_to_read += 1;
3708            if next_offset >= end_offset {
3709                return Ok(());
3710            }
3711
3712            // Decode unknown envelopes for gaps in ordinals.
3713            while _next_ordinal_to_read < 3 {
3714                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3715                _next_ordinal_to_read += 1;
3716                next_offset += envelope_size;
3717            }
3718
3719            let next_out_of_line = decoder.next_out_of_line();
3720            let handles_before = decoder.remaining_handles();
3721            if let Some((inlined, num_bytes, num_handles)) =
3722                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3723            {
3724                let member_inline_size = <fidl::encoding::Vector<GaugeStatistic, 5> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3725                if inlined != (member_inline_size <= 4) {
3726                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3727                }
3728                let inner_offset;
3729                let mut inner_depth = depth.clone();
3730                if inlined {
3731                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3732                    inner_offset = next_offset;
3733                } else {
3734                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3735                    inner_depth.increment()?;
3736                }
3737                let val_ref = self.statistics.get_or_insert_with(
3738                    || fidl::new_empty!(fidl::encoding::Vector<GaugeStatistic, 5>, D),
3739                );
3740                fidl::decode!(fidl::encoding::Vector<GaugeStatistic, 5>, D, val_ref, decoder, inner_offset, inner_depth)?;
3741                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3742                {
3743                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3744                }
3745                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3746                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3747                }
3748            }
3749
3750            next_offset += envelope_size;
3751
3752            // Decode the remaining unknown envelopes.
3753            while next_offset < end_offset {
3754                _next_ordinal_to_read += 1;
3755                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3756                next_offset += envelope_size;
3757            }
3758
3759            Ok(())
3760        }
3761    }
3762
3763    impl SignalReport {
3764        #[inline(always)]
3765        fn max_ordinal_present(&self) -> u64 {
3766            if let Some(_) = self.connection_signal_report {
3767                return 1;
3768            }
3769            0
3770        }
3771    }
3772
3773    impl fidl::encoding::ValueTypeMarker for SignalReport {
3774        type Borrowed<'a> = &'a Self;
3775        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3776            value
3777        }
3778    }
3779
3780    unsafe impl fidl::encoding::TypeMarker for SignalReport {
3781        type Owned = Self;
3782
3783        #[inline(always)]
3784        fn inline_align(_context: fidl::encoding::Context) -> usize {
3785            8
3786        }
3787
3788        #[inline(always)]
3789        fn inline_size(_context: fidl::encoding::Context) -> usize {
3790            16
3791        }
3792    }
3793
3794    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SignalReport, D>
3795        for &SignalReport
3796    {
3797        unsafe fn encode(
3798            self,
3799            encoder: &mut fidl::encoding::Encoder<'_, D>,
3800            offset: usize,
3801            mut depth: fidl::encoding::Depth,
3802        ) -> fidl::Result<()> {
3803            encoder.debug_check_bounds::<SignalReport>(offset);
3804            // Vector header
3805            let max_ordinal: u64 = self.max_ordinal_present();
3806            encoder.write_num(max_ordinal, offset);
3807            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3808            // Calling encoder.out_of_line_offset(0) is not allowed.
3809            if max_ordinal == 0 {
3810                return Ok(());
3811            }
3812            depth.increment()?;
3813            let envelope_size = 8;
3814            let bytes_len = max_ordinal as usize * envelope_size;
3815            #[allow(unused_variables)]
3816            let offset = encoder.out_of_line_offset(bytes_len);
3817            let mut _prev_end_offset: usize = 0;
3818            if 1 > max_ordinal {
3819                return Ok(());
3820            }
3821
3822            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3823            // are envelope_size bytes.
3824            let cur_offset: usize = (1 - 1) * envelope_size;
3825
3826            // Zero reserved fields.
3827            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3828
3829            // Safety:
3830            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3831            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3832            //   envelope_size bytes, there is always sufficient room.
3833            fidl::encoding::encode_in_envelope_optional::<ConnectionSignalReport, D>(
3834                self.connection_signal_report
3835                    .as_ref()
3836                    .map(<ConnectionSignalReport as fidl::encoding::ValueTypeMarker>::borrow),
3837                encoder,
3838                offset + cur_offset,
3839                depth,
3840            )?;
3841
3842            _prev_end_offset = cur_offset + envelope_size;
3843
3844            Ok(())
3845        }
3846    }
3847
3848    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SignalReport {
3849        #[inline(always)]
3850        fn new_empty() -> Self {
3851            Self::default()
3852        }
3853
3854        unsafe fn decode(
3855            &mut self,
3856            decoder: &mut fidl::encoding::Decoder<'_, D>,
3857            offset: usize,
3858            mut depth: fidl::encoding::Depth,
3859        ) -> fidl::Result<()> {
3860            decoder.debug_check_bounds::<Self>(offset);
3861            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3862                None => return Err(fidl::Error::NotNullable),
3863                Some(len) => len,
3864            };
3865            // Calling decoder.out_of_line_offset(0) is not allowed.
3866            if len == 0 {
3867                return Ok(());
3868            };
3869            depth.increment()?;
3870            let envelope_size = 8;
3871            let bytes_len = len * envelope_size;
3872            let offset = decoder.out_of_line_offset(bytes_len)?;
3873            // Decode the envelope for each type.
3874            let mut _next_ordinal_to_read = 0;
3875            let mut next_offset = offset;
3876            let end_offset = offset + bytes_len;
3877            _next_ordinal_to_read += 1;
3878            if next_offset >= end_offset {
3879                return Ok(());
3880            }
3881
3882            // Decode unknown envelopes for gaps in ordinals.
3883            while _next_ordinal_to_read < 1 {
3884                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3885                _next_ordinal_to_read += 1;
3886                next_offset += envelope_size;
3887            }
3888
3889            let next_out_of_line = decoder.next_out_of_line();
3890            let handles_before = decoder.remaining_handles();
3891            if let Some((inlined, num_bytes, num_handles)) =
3892                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3893            {
3894                let member_inline_size =
3895                    <ConnectionSignalReport as fidl::encoding::TypeMarker>::inline_size(
3896                        decoder.context,
3897                    );
3898                if inlined != (member_inline_size <= 4) {
3899                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3900                }
3901                let inner_offset;
3902                let mut inner_depth = depth.clone();
3903                if inlined {
3904                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3905                    inner_offset = next_offset;
3906                } else {
3907                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3908                    inner_depth.increment()?;
3909                }
3910                let val_ref = self
3911                    .connection_signal_report
3912                    .get_or_insert_with(|| fidl::new_empty!(ConnectionSignalReport, D));
3913                fidl::decode!(
3914                    ConnectionSignalReport,
3915                    D,
3916                    val_ref,
3917                    decoder,
3918                    inner_offset,
3919                    inner_depth
3920                )?;
3921                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3922                {
3923                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3924                }
3925                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3926                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3927                }
3928            }
3929
3930            next_offset += envelope_size;
3931
3932            // Decode the remaining unknown envelopes.
3933            while next_offset < end_offset {
3934                _next_ordinal_to_read += 1;
3935                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3936                next_offset += envelope_size;
3937            }
3938
3939            Ok(())
3940        }
3941    }
3942
3943    impl TelemetrySupport {
3944        #[inline(always)]
3945        fn max_ordinal_present(&self) -> u64 {
3946            if let Some(_) = self.inspect_gauge_configs {
3947                return 2;
3948            }
3949            if let Some(_) = self.inspect_counter_configs {
3950                return 1;
3951            }
3952            0
3953        }
3954    }
3955
3956    impl fidl::encoding::ValueTypeMarker for TelemetrySupport {
3957        type Borrowed<'a> = &'a Self;
3958        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3959            value
3960        }
3961    }
3962
3963    unsafe impl fidl::encoding::TypeMarker for TelemetrySupport {
3964        type Owned = Self;
3965
3966        #[inline(always)]
3967        fn inline_align(_context: fidl::encoding::Context) -> usize {
3968            8
3969        }
3970
3971        #[inline(always)]
3972        fn inline_size(_context: fidl::encoding::Context) -> usize {
3973            16
3974        }
3975    }
3976
3977    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TelemetrySupport, D>
3978        for &TelemetrySupport
3979    {
3980        unsafe fn encode(
3981            self,
3982            encoder: &mut fidl::encoding::Encoder<'_, D>,
3983            offset: usize,
3984            mut depth: fidl::encoding::Depth,
3985        ) -> fidl::Result<()> {
3986            encoder.debug_check_bounds::<TelemetrySupport>(offset);
3987            // Vector header
3988            let max_ordinal: u64 = self.max_ordinal_present();
3989            encoder.write_num(max_ordinal, offset);
3990            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3991            // Calling encoder.out_of_line_offset(0) is not allowed.
3992            if max_ordinal == 0 {
3993                return Ok(());
3994            }
3995            depth.increment()?;
3996            let envelope_size = 8;
3997            let bytes_len = max_ordinal as usize * envelope_size;
3998            #[allow(unused_variables)]
3999            let offset = encoder.out_of_line_offset(bytes_len);
4000            let mut _prev_end_offset: usize = 0;
4001            if 1 > max_ordinal {
4002                return Ok(());
4003            }
4004
4005            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4006            // are envelope_size bytes.
4007            let cur_offset: usize = (1 - 1) * envelope_size;
4008
4009            // Zero reserved fields.
4010            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4011
4012            // Safety:
4013            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4014            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4015            //   envelope_size bytes, there is always sufficient room.
4016            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<InspectCounterConfig, 127>, D>(
4017            self.inspect_counter_configs.as_ref().map(<fidl::encoding::Vector<InspectCounterConfig, 127> as fidl::encoding::ValueTypeMarker>::borrow),
4018            encoder, offset + cur_offset, depth
4019        )?;
4020
4021            _prev_end_offset = cur_offset + envelope_size;
4022            if 2 > max_ordinal {
4023                return Ok(());
4024            }
4025
4026            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4027            // are envelope_size bytes.
4028            let cur_offset: usize = (2 - 1) * envelope_size;
4029
4030            // Zero reserved fields.
4031            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4032
4033            // Safety:
4034            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4035            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4036            //   envelope_size bytes, there is always sufficient room.
4037            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<InspectGaugeConfig, 127>, D>(
4038            self.inspect_gauge_configs.as_ref().map(<fidl::encoding::Vector<InspectGaugeConfig, 127> as fidl::encoding::ValueTypeMarker>::borrow),
4039            encoder, offset + cur_offset, depth
4040        )?;
4041
4042            _prev_end_offset = cur_offset + envelope_size;
4043
4044            Ok(())
4045        }
4046    }
4047
4048    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TelemetrySupport {
4049        #[inline(always)]
4050        fn new_empty() -> Self {
4051            Self::default()
4052        }
4053
4054        unsafe fn decode(
4055            &mut self,
4056            decoder: &mut fidl::encoding::Decoder<'_, D>,
4057            offset: usize,
4058            mut depth: fidl::encoding::Depth,
4059        ) -> fidl::Result<()> {
4060            decoder.debug_check_bounds::<Self>(offset);
4061            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4062                None => return Err(fidl::Error::NotNullable),
4063                Some(len) => len,
4064            };
4065            // Calling decoder.out_of_line_offset(0) is not allowed.
4066            if len == 0 {
4067                return Ok(());
4068            };
4069            depth.increment()?;
4070            let envelope_size = 8;
4071            let bytes_len = len * envelope_size;
4072            let offset = decoder.out_of_line_offset(bytes_len)?;
4073            // Decode the envelope for each type.
4074            let mut _next_ordinal_to_read = 0;
4075            let mut next_offset = offset;
4076            let end_offset = offset + bytes_len;
4077            _next_ordinal_to_read += 1;
4078            if next_offset >= end_offset {
4079                return Ok(());
4080            }
4081
4082            // Decode unknown envelopes for gaps in ordinals.
4083            while _next_ordinal_to_read < 1 {
4084                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4085                _next_ordinal_to_read += 1;
4086                next_offset += envelope_size;
4087            }
4088
4089            let next_out_of_line = decoder.next_out_of_line();
4090            let handles_before = decoder.remaining_handles();
4091            if let Some((inlined, num_bytes, num_handles)) =
4092                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4093            {
4094                let member_inline_size = <fidl::encoding::Vector<InspectCounterConfig, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4095                if inlined != (member_inline_size <= 4) {
4096                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4097                }
4098                let inner_offset;
4099                let mut inner_depth = depth.clone();
4100                if inlined {
4101                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4102                    inner_offset = next_offset;
4103                } else {
4104                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4105                    inner_depth.increment()?;
4106                }
4107                let val_ref = self.inspect_counter_configs.get_or_insert_with(
4108                    || fidl::new_empty!(fidl::encoding::Vector<InspectCounterConfig, 127>, D),
4109                );
4110                fidl::decode!(fidl::encoding::Vector<InspectCounterConfig, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
4111                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4112                {
4113                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4114                }
4115                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4116                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4117                }
4118            }
4119
4120            next_offset += envelope_size;
4121            _next_ordinal_to_read += 1;
4122            if next_offset >= end_offset {
4123                return Ok(());
4124            }
4125
4126            // Decode unknown envelopes for gaps in ordinals.
4127            while _next_ordinal_to_read < 2 {
4128                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4129                _next_ordinal_to_read += 1;
4130                next_offset += envelope_size;
4131            }
4132
4133            let next_out_of_line = decoder.next_out_of_line();
4134            let handles_before = decoder.remaining_handles();
4135            if let Some((inlined, num_bytes, num_handles)) =
4136                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4137            {
4138                let member_inline_size = <fidl::encoding::Vector<InspectGaugeConfig, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4139                if inlined != (member_inline_size <= 4) {
4140                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4141                }
4142                let inner_offset;
4143                let mut inner_depth = depth.clone();
4144                if inlined {
4145                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4146                    inner_offset = next_offset;
4147                } else {
4148                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4149                    inner_depth.increment()?;
4150                }
4151                let val_ref = self.inspect_gauge_configs.get_or_insert_with(
4152                    || fidl::new_empty!(fidl::encoding::Vector<InspectGaugeConfig, 127>, D),
4153                );
4154                fidl::decode!(fidl::encoding::Vector<InspectGaugeConfig, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
4155                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4156                {
4157                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4158                }
4159                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4160                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4161                }
4162            }
4163
4164            next_offset += envelope_size;
4165
4166            // Decode the remaining unknown envelopes.
4167            while next_offset < end_offset {
4168                _next_ordinal_to_read += 1;
4169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4170                next_offset += envelope_size;
4171            }
4172
4173            Ok(())
4174        }
4175    }
4176}