fidl_fuchsia_wlan_common__common/
fidl_fuchsia_wlan_common__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// Corresponds to the Capability Information field defined by IEEE Std 802.11-2020, 9.4.1.4.
12/// This contains subfields that indicate support for requested or optional capabilities.
13///
14/// TODO(https://fxbug.dev/367315525) Consider making this a bitfield.
15pub type CapabilityInfo = u16;
16
17pub type WlanSoftmacHardwareCapability = u32;
18
19/// This constant defined the fixed length for arrays containing the capabilities
20/// for each band supported by a device driver.
21pub const MAX_BANDS: u8 = 16;
22
23/// This constant defines fixed length for arrays containing MAC roles supported by
24/// PHY entities.
25pub const MAX_SUPPORTED_MAC_ROLES: u8 = 16;
26
27/// This constant defines fixed length for arrays containing PHY types supported by
28/// PHY entities.
29pub const MAX_SUPPORTED_PHY_TYPES: u8 = 64;
30
31pub const WLAN_MAC_MAX_EXT_RATES: u32 = 255;
32
33/// Information defined only within a context of association
34/// Beware the subtle interpretation of each field: they are designed to
35/// reflect the parameters safe to use within an association
36/// Many parameters do not distinguish Rx capability from Tx capability.
37/// In those cases, a capability is commonly applied to both Rx and Tx.
38/// Some parameters are distinctively for Rx only, and some are Tx only.
39pub const WLAN_MAC_MAX_SUPP_RATES: u32 = 8;
40
41pub const WLAN_TX_RESULT_MAX_ENTRY: u32 = 8;
42
43pub const WLAN_TX_VECTOR_IDX_INVALID: u16 = 0;
44
45#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
46pub enum BssType {
47    Unknown,
48    Infrastructure,
49    Independent,
50    Mesh,
51    Personal,
52    #[doc(hidden)]
53    __SourceBreaking {
54        unknown_ordinal: u32,
55    },
56}
57
58/// Pattern that matches an unknown `BssType` member.
59#[macro_export]
60macro_rules! BssTypeUnknown {
61    () => {
62        _
63    };
64}
65
66impl BssType {
67    #[inline]
68    pub fn from_primitive(prim: u32) -> Option<Self> {
69        match prim {
70            0 => Some(Self::Unknown),
71            1 => Some(Self::Infrastructure),
72            2 => Some(Self::Independent),
73            3 => Some(Self::Mesh),
74            4 => Some(Self::Personal),
75            _ => None,
76        }
77    }
78
79    #[inline]
80    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
81        match prim {
82            0 => Self::Unknown,
83            1 => Self::Infrastructure,
84            2 => Self::Independent,
85            3 => Self::Mesh,
86            4 => Self::Personal,
87            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
88        }
89    }
90
91    #[inline]
92    pub fn unknown() -> Self {
93        Self::__SourceBreaking { unknown_ordinal: 0x0 }
94    }
95
96    #[inline]
97    pub const fn into_primitive(self) -> u32 {
98        match self {
99            Self::Unknown => 0,
100            Self::Infrastructure => 1,
101            Self::Independent => 2,
102            Self::Mesh => 3,
103            Self::Personal => 4,
104            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
105        }
106    }
107
108    #[inline]
109    pub fn is_unknown(&self) -> bool {
110        match self {
111            Self::__SourceBreaking { unknown_ordinal: _ } => true,
112            _ => false,
113        }
114    }
115}
116
117#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
118pub enum ChannelBandwidth {
119    Cbw20,
120    Cbw40,
121    Cbw40Below,
122    Cbw80,
123    Cbw160,
124    Cbw80P80,
125    #[doc(hidden)]
126    __SourceBreaking {
127        unknown_ordinal: u32,
128    },
129}
130
131/// Pattern that matches an unknown `ChannelBandwidth` member.
132#[macro_export]
133macro_rules! ChannelBandwidthUnknown {
134    () => {
135        _
136    };
137}
138
139impl ChannelBandwidth {
140    #[inline]
141    pub fn from_primitive(prim: u32) -> Option<Self> {
142        match prim {
143            1 => Some(Self::Cbw20),
144            2 => Some(Self::Cbw40),
145            3 => Some(Self::Cbw40Below),
146            4 => Some(Self::Cbw80),
147            5 => Some(Self::Cbw160),
148            6 => Some(Self::Cbw80P80),
149            _ => None,
150        }
151    }
152
153    #[inline]
154    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
155        match prim {
156            1 => Self::Cbw20,
157            2 => Self::Cbw40,
158            3 => Self::Cbw40Below,
159            4 => Self::Cbw80,
160            5 => Self::Cbw160,
161            6 => Self::Cbw80P80,
162            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
163        }
164    }
165
166    #[inline]
167    pub fn unknown() -> Self {
168        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
169    }
170
171    #[inline]
172    pub const fn into_primitive(self) -> u32 {
173        match self {
174            Self::Cbw20 => 1,
175            Self::Cbw40 => 2,
176            Self::Cbw40Below => 3,
177            Self::Cbw80 => 4,
178            Self::Cbw160 => 5,
179            Self::Cbw80P80 => 6,
180            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
181        }
182    }
183
184    #[inline]
185    pub fn is_unknown(&self) -> bool {
186        match self {
187            Self::__SourceBreaking { unknown_ordinal: _ } => true,
188            _ => false,
189        }
190    }
191}
192
193/// Indicates where data plane is implemented.
194#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
195pub enum DataPlaneType {
196    EthernetDevice,
197    GenericNetworkDevice,
198    #[doc(hidden)]
199    __SourceBreaking {
200        unknown_ordinal: u8,
201    },
202}
203
204/// Pattern that matches an unknown `DataPlaneType` member.
205#[macro_export]
206macro_rules! DataPlaneTypeUnknown {
207    () => {
208        _
209    };
210}
211
212impl DataPlaneType {
213    #[inline]
214    pub fn from_primitive(prim: u8) -> Option<Self> {
215        match prim {
216            1 => Some(Self::EthernetDevice),
217            2 => Some(Self::GenericNetworkDevice),
218            _ => None,
219        }
220    }
221
222    #[inline]
223    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
224        match prim {
225            1 => Self::EthernetDevice,
226            2 => Self::GenericNetworkDevice,
227            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
228        }
229    }
230
231    #[inline]
232    pub fn unknown() -> Self {
233        Self::__SourceBreaking { unknown_ordinal: 0xff }
234    }
235
236    #[inline]
237    pub const fn into_primitive(self) -> u8 {
238        match self {
239            Self::EthernetDevice => 1,
240            Self::GenericNetworkDevice => 2,
241            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
242        }
243    }
244
245    #[inline]
246    pub fn is_unknown(&self) -> bool {
247        match self {
248            Self::__SourceBreaking { unknown_ordinal: _ } => true,
249            _ => false,
250        }
251    }
252}
253
254/// HT and VHT guard interval.
255/// See IEEE 802.11-2016 Table 19-1 and Table 21-1.
256#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
257#[repr(u8)]
258pub enum GuardInterval {
259    LongGi = 1,
260    ShortGi = 2,
261}
262
263impl GuardInterval {
264    #[inline]
265    pub fn from_primitive(prim: u8) -> Option<Self> {
266        match prim {
267            1 => Some(Self::LongGi),
268            2 => Some(Self::ShortGi),
269            _ => None,
270        }
271    }
272
273    #[inline]
274    pub const fn into_primitive(self) -> u8 {
275        self as u8
276    }
277}
278
279/// Indicates where MAC layer is implemented.
280#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
281pub enum MacImplementationType {
282    Softmac,
283    Fullmac,
284    #[doc(hidden)]
285    __SourceBreaking {
286        unknown_ordinal: u8,
287    },
288}
289
290/// Pattern that matches an unknown `MacImplementationType` member.
291#[macro_export]
292macro_rules! MacImplementationTypeUnknown {
293    () => {
294        _
295    };
296}
297
298impl MacImplementationType {
299    #[inline]
300    pub fn from_primitive(prim: u8) -> Option<Self> {
301        match prim {
302            1 => Some(Self::Softmac),
303            2 => Some(Self::Fullmac),
304            _ => None,
305        }
306    }
307
308    #[inline]
309    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
310        match prim {
311            1 => Self::Softmac,
312            2 => Self::Fullmac,
313            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
314        }
315    }
316
317    #[inline]
318    pub fn unknown() -> Self {
319        Self::__SourceBreaking { unknown_ordinal: 0xff }
320    }
321
322    #[inline]
323    pub const fn into_primitive(self) -> u8 {
324        match self {
325            Self::Softmac => 1,
326            Self::Fullmac => 2,
327            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
328        }
329    }
330
331    #[inline]
332    pub fn is_unknown(&self) -> bool {
333        match self {
334            Self::__SourceBreaking { unknown_ordinal: _ } => true,
335            _ => false,
336        }
337    }
338}
339
340#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
341#[repr(u32)]
342pub enum PowerSaveType {
343    PsModeUltraLowPower = 0,
344    PsModeLowPower = 1,
345    PsModeBalanced = 2,
346    PsModePerformance = 3,
347}
348
349impl PowerSaveType {
350    #[inline]
351    pub fn from_primitive(prim: u32) -> Option<Self> {
352        match prim {
353            0 => Some(Self::PsModeUltraLowPower),
354            1 => Some(Self::PsModeLowPower),
355            2 => Some(Self::PsModeBalanced),
356            3 => Some(Self::PsModePerformance),
357            _ => None,
358        }
359    }
360
361    #[inline]
362    pub const fn into_primitive(self) -> u32 {
363        self as u32
364    }
365}
366
367#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
368#[repr(u32)]
369pub enum ScanType {
370    Active = 1,
371    Passive = 2,
372}
373
374impl ScanType {
375    #[inline]
376    pub fn from_primitive(prim: u32) -> Option<Self> {
377        match prim {
378            1 => Some(Self::Active),
379            2 => Some(Self::Passive),
380            _ => None,
381        }
382    }
383
384    #[inline]
385    pub const fn into_primitive(self) -> u32 {
386        self as u32
387    }
388}
389
390#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
391pub enum WlanKeyType {
392    Pairwise,
393    Group,
394    Igtk,
395    Peer,
396    #[doc(hidden)]
397    __SourceBreaking {
398        unknown_ordinal: u8,
399    },
400}
401
402/// Pattern that matches an unknown `WlanKeyType` member.
403#[macro_export]
404macro_rules! WlanKeyTypeUnknown {
405    () => {
406        _
407    };
408}
409
410impl WlanKeyType {
411    #[inline]
412    pub fn from_primitive(prim: u8) -> Option<Self> {
413        match prim {
414            1 => Some(Self::Pairwise),
415            2 => Some(Self::Group),
416            3 => Some(Self::Igtk),
417            4 => Some(Self::Peer),
418            _ => None,
419        }
420    }
421
422    #[inline]
423    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
424        match prim {
425            1 => Self::Pairwise,
426            2 => Self::Group,
427            3 => Self::Igtk,
428            4 => Self::Peer,
429            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
430        }
431    }
432
433    #[inline]
434    pub fn unknown() -> Self {
435        Self::__SourceBreaking { unknown_ordinal: 0xff }
436    }
437
438    #[inline]
439    pub const fn into_primitive(self) -> u8 {
440        match self {
441            Self::Pairwise => 1,
442            Self::Group => 2,
443            Self::Igtk => 3,
444            Self::Peer => 4,
445            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
446        }
447    }
448
449    #[inline]
450    pub fn is_unknown(&self) -> bool {
451        match self {
452            Self::__SourceBreaking { unknown_ordinal: _ } => true,
453            _ => false,
454        }
455    }
456}
457
458#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
459pub enum WlanMacRole {
460    Client,
461    Ap,
462    Mesh,
463    #[doc(hidden)]
464    __SourceBreaking {
465        unknown_ordinal: u32,
466    },
467}
468
469/// Pattern that matches an unknown `WlanMacRole` member.
470#[macro_export]
471macro_rules! WlanMacRoleUnknown {
472    () => {
473        _
474    };
475}
476
477impl WlanMacRole {
478    #[inline]
479    pub fn from_primitive(prim: u32) -> Option<Self> {
480        match prim {
481            1 => Some(Self::Client),
482            2 => Some(Self::Ap),
483            3 => Some(Self::Mesh),
484            _ => None,
485        }
486    }
487
488    #[inline]
489    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
490        match prim {
491            1 => Self::Client,
492            2 => Self::Ap,
493            3 => Self::Mesh,
494            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
495        }
496    }
497
498    #[inline]
499    pub fn unknown() -> Self {
500        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
501    }
502
503    #[inline]
504    pub const fn into_primitive(self) -> u32 {
505        match self {
506            Self::Client => 1,
507            Self::Ap => 2,
508            Self::Mesh => 3,
509            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
510        }
511    }
512
513    #[inline]
514    pub fn is_unknown(&self) -> bool {
515        match self {
516            Self::__SourceBreaking { unknown_ordinal: _ } => true,
517            _ => false,
518        }
519    }
520}
521
522/// PHY types supporting different MCS and payload data rates.
523/// Based off of dot11PHYType from IEEE 802.11-2016/2020 Annex C + Amendments
524#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
525pub enum WlanPhyType {
526    /// IEEE 802.11-2016 Clause 15:
527    ///     Direct Sequence Spread Spectrum
528    /// Supports 1, 2 Mbps.
529    Dsss,
530    /// IEEE 802.11-2016 Clause 16:
531    ///     High Rate DSSS
532    /// Supports 5.5, 11 Mbps.
533    /// Also referred to as ERP-CCK
534    Hr,
535    /// IEEE 802.11a/g or IEEE 802.11-2016 Clause 17:
536    ///     Orthogonal Frequency Division Multiplexing
537    /// Supports 6, 9, 12, 18, 24, 36, 48, and 54 Mbps.
538    Ofdm,
539    /// IEEE 802.11g or IEEE 802.11-2016 Clause 18:
540    ///     Extended Rate PHY
541    /// Supports 1, 2, 5.5, 11, 12, 24 Mbps + optionally 6, 54 Mbps.
542    /// Encompasses DSSS/HR/OFDM rates and modulation.
543    Erp,
544    /// IEEE 802.11n or IEEE 802.11-2016 Clause 19:
545    ///     High Throughput PHY
546    /// Supports rates up to 495 Mbps.
547    Ht,
548    /// 802.11ad or IEEE 802.11-2016 Clause 20:
549    ///     Directional Multi-Gigabit PHY
550    Dmg,
551    /// IEEE 802.11ac or IEEE 802.11-2016 Clause 21:
552    ///     Very High Throughput PHY
553    /// Supports rates up to 6.9 Gbps.
554    Vht,
555    /// IEEE 802.11af or IEEE 802.11-2016 Clause 22:
556    ///     Television Very High Throughput PHY
557    /// Supports rates of up to 568.9 Mbps in TV spectrum
558    Tvht,
559    /// IEEE 802.11ah or IEEE 802.11-2020 Clause 23:
560    ///     Sub 1-GHz PHY
561    S1G,
562    /// IEEE 802.11aj or IEEE 802.11-2020 Clause 24:
563    ///     China Directional Multi-Gigabit PHY
564    Cdmg,
565    /// IEEE 802.11aj or IEEE 802.11-2020 Clause 25:
566    ///     China Millimeter-wave Multi-Gigabit PHY
567    Cmmg,
568    /// IEEE 802.11ax: High Efficiency PHY
569    /// Supports rates of up to 9.6 Gbps (whew!)
570    He,
571    #[doc(hidden)]
572    __SourceBreaking { unknown_ordinal: u32 },
573}
574
575/// Pattern that matches an unknown `WlanPhyType` member.
576#[macro_export]
577macro_rules! WlanPhyTypeUnknown {
578    () => {
579        _
580    };
581}
582
583impl WlanPhyType {
584    #[inline]
585    pub fn from_primitive(prim: u32) -> Option<Self> {
586        match prim {
587            1 => Some(Self::Dsss),
588            2 => Some(Self::Hr),
589            3 => Some(Self::Ofdm),
590            4 => Some(Self::Erp),
591            5 => Some(Self::Ht),
592            6 => Some(Self::Dmg),
593            7 => Some(Self::Vht),
594            8 => Some(Self::Tvht),
595            9 => Some(Self::S1G),
596            10 => Some(Self::Cdmg),
597            11 => Some(Self::Cmmg),
598            12 => Some(Self::He),
599            _ => None,
600        }
601    }
602
603    #[inline]
604    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
605        match prim {
606            1 => Self::Dsss,
607            2 => Self::Hr,
608            3 => Self::Ofdm,
609            4 => Self::Erp,
610            5 => Self::Ht,
611            6 => Self::Dmg,
612            7 => Self::Vht,
613            8 => Self::Tvht,
614            9 => Self::S1G,
615            10 => Self::Cdmg,
616            11 => Self::Cmmg,
617            12 => Self::He,
618            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
619        }
620    }
621
622    #[inline]
623    pub fn unknown() -> Self {
624        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
625    }
626
627    #[inline]
628    pub const fn into_primitive(self) -> u32 {
629        match self {
630            Self::Dsss => 1,
631            Self::Hr => 2,
632            Self::Ofdm => 3,
633            Self::Erp => 4,
634            Self::Ht => 5,
635            Self::Dmg => 6,
636            Self::Vht => 7,
637            Self::Tvht => 8,
638            Self::S1G => 9,
639            Self::Cdmg => 10,
640            Self::Cmmg => 11,
641            Self::He => 12,
642            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
643        }
644    }
645
646    #[inline]
647    pub fn is_unknown(&self) -> bool {
648        match self {
649            Self::__SourceBreaking { unknown_ordinal: _ } => true,
650            _ => false,
651        }
652    }
653}
654
655#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
656#[repr(u8)]
657pub enum WlanProtection {
658    None = 0,
659    Rx = 1,
660    Tx = 2,
661    RxTx = 3,
662}
663
664impl WlanProtection {
665    #[inline]
666    pub fn from_primitive(prim: u8) -> Option<Self> {
667        match prim {
668            0 => Some(Self::None),
669            1 => Some(Self::Rx),
670            2 => Some(Self::Tx),
671            3 => Some(Self::RxTx),
672            _ => None,
673        }
674    }
675
676    #[inline]
677    pub const fn into_primitive(self) -> u8 {
678        self as u8
679    }
680}
681
682#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
683#[repr(u32)]
684pub enum WlanSoftmacHardwareCapabilityBit {
685    /// Short packet preamble.
686    ShortPreamble = 32,
687    /// Spectrum management.
688    SpectrumMgmt = 256,
689    Qos = 512,
690    /// Short slot times after packet collision.
691    ShortSlotTime = 1024,
692    /// Radio measurement.
693    RadioMsmt = 4096,
694    SimultaneousClientAp = 65536,
695}
696
697impl WlanSoftmacHardwareCapabilityBit {
698    #[inline]
699    pub fn from_primitive(prim: u32) -> Option<Self> {
700        match prim {
701            32 => Some(Self::ShortPreamble),
702            256 => Some(Self::SpectrumMgmt),
703            512 => Some(Self::Qos),
704            1024 => Some(Self::ShortSlotTime),
705            4096 => Some(Self::RadioMsmt),
706            65536 => Some(Self::SimultaneousClientAp),
707            _ => None,
708        }
709    }
710
711    #[inline]
712    pub const fn into_primitive(self) -> u32 {
713        self as u32
714    }
715}
716
717/// Outcome of a packet transmission.
718#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
719pub enum WlanTxResultCode {
720    /// ACK was not received or transmission otherwise failed.
721    Failed,
722    /// ACK was received from peer.
723    Success,
724    #[doc(hidden)]
725    __SourceBreaking { unknown_ordinal: u8 },
726}
727
728/// Pattern that matches an unknown `WlanTxResultCode` member.
729#[macro_export]
730macro_rules! WlanTxResultCodeUnknown {
731    () => {
732        _
733    };
734}
735
736impl WlanTxResultCode {
737    #[inline]
738    pub fn from_primitive(prim: u8) -> Option<Self> {
739        match prim {
740            0 => Some(Self::Failed),
741            1 => Some(Self::Success),
742            _ => None,
743        }
744    }
745
746    #[inline]
747    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
748        match prim {
749            0 => Self::Failed,
750            1 => Self::Success,
751            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
752        }
753    }
754
755    #[inline]
756    pub fn unknown() -> Self {
757        Self::__SourceBreaking { unknown_ordinal: 0xff }
758    }
759
760    #[inline]
761    pub const fn into_primitive(self) -> u8 {
762        match self {
763            Self::Failed => 0,
764            Self::Success => 1,
765            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
766        }
767    }
768
769    #[inline]
770    pub fn is_unknown(&self) -> bool {
771        match self {
772            Self::__SourceBreaking { unknown_ordinal: _ } => true,
773            _ => false,
774        }
775    }
776}
777
778/// Type corresponding to a BSSDescription defined by IEEE Std 802.11-2020 6.3.3.3.2
779///
780/// This type only includes explicit fields for information frequently required
781/// from a BSSDescription. All other fields are left in a raw buffer of IEs as
782/// received in an advertisement from the AP, e.g., from a Beacon or Probe
783/// Response frame.
784///
785/// The inclusion of a raw buffer of IEs ensures this type always includes all
786/// the information an AP advertises, no matter the version of Fuchsia the
787/// advertisement was received in.
788#[derive(Clone, Debug, PartialEq)]
789pub struct BssDescription {
790    pub bssid: [u8; 6],
791    pub bss_type: BssType,
792    pub beacon_period: u16,
793    pub capability_info: u16,
794    /// Buffer of IEs as received in an advertisement. E.g., from a Beacon
795    /// or Probe Response frame.
796    pub ies: Vec<u8>,
797    /// Channel information for this BSS.
798    pub channel: fidl_fuchsia_wlan_ieee80211__common::WlanChannel,
799    /// The running average of received signal strength indicator in units of dBm.
800    pub rssi_dbm: i8,
801    /// The running average of snr in units of dB.
802    pub snr_db: i8,
803}
804
805impl fidl::Persistable for BssDescription {}
806
807#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
808pub struct WlanChannel {
809    pub primary: u8,
810    pub cbw: ChannelBandwidth,
811    pub secondary80: u8,
812}
813
814impl fidl::Persistable for WlanChannel {}
815
816/// TX status reports are used by the Minstrel rate selection algorithm
817/// Tests should use the default value in //src/connectivity/wlan/testing/hw-sim/src/lib.rs
818#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
819pub struct WlanTxResult {
820    /// up to 8 different tx_vector for one PPDU frame.
821    /// WLAN_TX_VECTOR_IDX_INVALID indicates no more entries.
822    pub tx_result_entry: [WlanTxResultEntry; 8],
823    /// Destination mac address, or addr1 in packet header.
824    pub peer_addr: [u8; 6],
825    pub result_code: WlanTxResultCode,
826}
827
828impl fidl::Persistable for WlanTxResult {}
829
830/// One entry in a WlanTxResult report. Indicates a number of attempted transmissions on
831/// a particular tx vector, but does not imply successful transmission.
832#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
833#[repr(C)]
834pub struct WlanTxResultEntry {
835    pub tx_vector_idx: u16,
836    /// Number of total attempts with this specific tx vector, including successful attempts.
837    /// DDK assumes the number of attempts per packet will not exceed 255. (typically <= 8)
838    pub attempts: u8,
839}
840
841impl fidl::Persistable for WlanTxResultEntry {}
842
843/// WFA WMM v1.2, 2.2.2
844#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
845pub struct WlanWmmAccessCategoryParameters {
846    /// Lower bound of contention window in exponential form
847    /// `cw_min = 2^(ecw_min) - 1`. The unit for contention window is "slot time", which
848    /// is different for each standard (e.g. 9 microseconds, 13 microseconds, etc.)
849    pub ecw_min: u8,
850    /// Upper bound of contention window in exponential form
851    /// `cw_max = 2^(ecw_max) - 1`. The unit for contention window is "slot time", which
852    /// is different for each standard (e.g. 9 microseconds, 13 microseconds, etc.)
853    pub ecw_max: u8,
854    /// Arbitration Interframe Spacing Number (control wait time between sending each frame)
855    pub aifsn: u8,
856    /// TXOP limit in unit of 32 microseconds
857    pub txop_limit: u16,
858    /// Whether admission control is mandatory
859    pub acm: bool,
860}
861
862impl fidl::Persistable for WlanWmmAccessCategoryParameters {}
863
864#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
865pub struct WlanWmmParameters {
866    pub apsd: bool,
867    pub ac_be_params: WlanWmmAccessCategoryParameters,
868    pub ac_bk_params: WlanWmmAccessCategoryParameters,
869    pub ac_vi_params: WlanWmmAccessCategoryParameters,
870    pub ac_vo_params: WlanWmmAccessCategoryParameters,
871}
872
873impl fidl::Persistable for WlanWmmParameters {}
874
875/// Indicates where the data plane is implemented.
876/// This is a MAC sublayer extension, usable for fullmac or softmac. This
877/// extension is not part of the 802.11-2016 spec.
878#[derive(Clone, Debug, Default, PartialEq)]
879pub struct DataPlaneExtension {
880    pub data_plane_type: Option<DataPlaneType>,
881    #[doc(hidden)]
882    pub __source_breaking: fidl::marker::SourceBreaking,
883}
884
885impl fidl::Persistable for DataPlaneExtension {}
886
887/// Feature-like information specific to the device.
888/// This is a MAC sublayer extension. This extension is not part of the
889/// 802.11-2016 spec.
890#[derive(Clone, Debug, Default, PartialEq)]
891pub struct DeviceExtension {
892    /// Indicates that device is not a real hardware device. This extension only
893    /// exists to support the SYNTH value in
894    /// fuchsia.hardware.ethernet/EthernetFeature.
895    pub is_synthetic: Option<bool>,
896    /// Indicates where MAC layer is implemented.
897    pub mac_implementation_type: Option<MacImplementationType>,
898    /// Indicates whether device supports transmission reports.
899    pub tx_status_report_supported: Option<bool>,
900    #[doc(hidden)]
901    pub __source_breaking: fidl::marker::SourceBreaking,
902}
903
904impl fidl::Persistable for DeviceExtension {}
905
906/// Dynamic Frequency Selection.
907/// See IEEE 802.11-2016 11.9.
908/// This is a spectrum management feature, usable for fullmac or softmac.
909#[derive(Clone, Debug, Default, PartialEq)]
910pub struct DfsFeature {
911    /// If true, driver implements DFS procedures (e.g. vacate channel upon
912    /// detecting RADAR). Based on whether the driver implements DFS procedures,
913    /// higher layers may adjust their logic (e.g. to include/exclude channels
914    /// that require DFS).
915    pub supported: Option<bool>,
916    #[doc(hidden)]
917    pub __source_breaking: fidl::marker::SourceBreaking,
918}
919
920impl fidl::Persistable for DfsFeature {}
921
922/// Features related to discovery of potential BSSs.
923/// See IEEE 802.11-2016 11.1.4.2 and 11.1.4.3.
924#[derive(Clone, Debug, Default, PartialEq)]
925pub struct DiscoverySupport {
926    pub scan_offload: Option<ScanOffloadExtension>,
927    pub probe_response_offload: Option<ProbeResponseOffloadExtension>,
928    #[doc(hidden)]
929    pub __source_breaking: fidl::marker::SourceBreaking,
930}
931
932impl fidl::Persistable for DiscoverySupport {}
933
934#[derive(Clone, Debug, Default, PartialEq)]
935pub struct JoinBssRequest {
936    pub bssid: Option<[u8; 6]>,
937    pub bss_type: Option<BssType>,
938    pub remote: Option<bool>,
939    pub beacon_period: Option<u16>,
940    #[doc(hidden)]
941    pub __source_breaking: fidl::marker::SourceBreaking,
942}
943
944impl fidl::Persistable for JoinBssRequest {}
945
946/// Features related to the MAC sublayer (below MLME).
947/// See IEEE 802.11-2016 10.
948#[derive(Clone, Debug, Default, PartialEq)]
949pub struct MacSublayerSupport {
950    pub rate_selection_offload: Option<RateSelectionOffloadExtension>,
951    pub data_plane: Option<DataPlaneExtension>,
952    pub device: Option<DeviceExtension>,
953    #[doc(hidden)]
954    pub __source_breaking: fidl::marker::SourceBreaking,
955}
956
957impl fidl::Persistable for MacSublayerSupport {}
958
959/// Management Frame Protection.
960/// See IEEE 802.11-2016 4.5.4.9.
961/// This is a security feature, usable for fullmac or softmac.
962#[derive(Clone, Debug, Default, PartialEq)]
963pub struct MfpFeature {
964    pub supported: Option<bool>,
965    #[doc(hidden)]
966    pub __source_breaking: fidl::marker::SourceBreaking,
967}
968
969impl fidl::Persistable for MfpFeature {}
970
971/// Indicates where and how probe responses are to be handled.
972/// See IEEE 802.11-2016 11.1.4.3.
973/// This is a discovery extension, expected to be used for softmac only.
974#[derive(Clone, Debug, Default, PartialEq)]
975pub struct ProbeResponseOffloadExtension {
976    /// If true, driver responds to probe requests; otherwise MLME must respond.
977    pub supported: Option<bool>,
978    #[doc(hidden)]
979    pub __source_breaking: fidl::marker::SourceBreaking,
980}
981
982impl fidl::Persistable for ProbeResponseOffloadExtension {}
983
984/// Indicates where and how rate selection logic is orchestrated.
985/// See IEEE 802.11-2016 10.7.
986/// This is a MAC sublayer extension, expected to be used for softmac only.
987#[derive(Clone, Debug, Default, PartialEq)]
988pub struct RateSelectionOffloadExtension {
989    /// If true, driver orchestrates rate selection; otherwise MLME must do so.
990    pub supported: Option<bool>,
991    #[doc(hidden)]
992    pub __source_breaking: fidl::marker::SourceBreaking,
993}
994
995impl fidl::Persistable for RateSelectionOffloadExtension {}
996
997/// Simultaneous Authentication of Equals.
998/// See IEEE 802.11-2016 12.4.
999/// This is a security feature, usable for fullmac or softmac.
1000#[derive(Clone, Debug, Default, PartialEq)]
1001pub struct SaeFeature {
1002    /// SAE can be handled by the driver.
1003    pub driver_handler_supported: Option<bool>,
1004    /// SAE can be handled by SME.
1005    pub sme_handler_supported: Option<bool>,
1006    #[doc(hidden)]
1007    pub __source_breaking: fidl::marker::SourceBreaking,
1008}
1009
1010impl fidl::Persistable for SaeFeature {}
1011
1012/// Indicates where and how scan logic is orchestrated.
1013/// See IEEE 802.11-2016 11.1.4.2 and 11.1.4.3.
1014/// This is a discovery extension, expected to be used for softmac only.
1015#[derive(Clone, Debug, Default, PartialEq)]
1016pub struct ScanOffloadExtension {
1017    /// If true, driver orchestrates scans; otherwise MLME must do so.
1018    pub supported: Option<bool>,
1019    pub scan_cancel_supported: Option<bool>,
1020    #[doc(hidden)]
1021    pub __source_breaking: fidl::marker::SourceBreaking,
1022}
1023
1024impl fidl::Persistable for ScanOffloadExtension {}
1025
1026/// Features related to security / access control and data confidentiality.
1027/// See IEEE 802.11-2016 4.5.4 and 802.11-2016 12.
1028#[derive(Clone, Debug, Default, PartialEq)]
1029pub struct SecuritySupport {
1030    pub sae: Option<SaeFeature>,
1031    pub mfp: Option<MfpFeature>,
1032    #[doc(hidden)]
1033    pub __source_breaking: fidl::marker::SourceBreaking,
1034}
1035
1036impl fidl::Persistable for SecuritySupport {}
1037
1038/// Features related to spectrum management.
1039/// See IEEE 802.11-2016 4.5.5, 11.8, and 11.9.
1040#[derive(Clone, Debug, Default, PartialEq)]
1041pub struct SpectrumManagementSupport {
1042    pub dfs: Option<DfsFeature>,
1043    #[doc(hidden)]
1044    pub __source_breaking: fidl::marker::SourceBreaking,
1045}
1046
1047impl fidl::Persistable for SpectrumManagementSupport {}
1048
1049#[derive(Clone, Debug, Default, PartialEq)]
1050pub struct WlanKeyConfig {
1051    /// Which path to protect: None, TX, RX, or TX and RX.
1052    pub protection: Option<WlanProtection>,
1053    /// IEEE Cipher suite selector.
1054    /// See IEEE Std 802.11-2016, 9.4.2.25.2, Table 9-131
1055    /// Optional. If not specified, it's assumed that this is the IEEE OUI.
1056    pub cipher_oui: Option<[u8; 3]>,
1057    /// The cipher type.
1058    /// Required.
1059    pub cipher_type: Option<fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType>,
1060    /// Whether this key is a pairwise, group or peer key.
1061    /// Required.
1062    pub key_type: Option<WlanKeyType>,
1063    /// The peer MAC address for pairwise and peer keys.
1064    /// For group keys this value is always the broadcast address.
1065    /// Required.
1066    pub peer_addr: Option<[u8; 6]>,
1067    /// Index for rotating keys, e.g. group keys.
1068    /// This value is always 0 for key types which aren't rotating, e.g. pairwise keys.
1069    /// Required.
1070    ///
1071    /// TODO(https://fxbug.dev/301104836): This is a uint8, but SetKeyDescriptor in MLME FIDL and
1072    /// DeleteKeysDescriptor in Fullmac FIDL use a uint16 for key_id/key_idx. We should consider
1073    /// making all these use the same type.
1074    pub key_idx: Option<u8>,
1075    /// They key's actual bytes.
1076    /// Required.
1077    pub key: Option<Vec<u8>>,
1078    /// Receive Sequence Counter for group keys only.
1079    /// In all other cases the RSC will be 0.
1080    /// Optional.
1081    pub rsc: Option<u64>,
1082    #[doc(hidden)]
1083    pub __source_breaking: fidl::marker::SourceBreaking,
1084}
1085
1086impl fidl::Persistable for WlanKeyConfig {}
1087
1088mod internal {
1089    use super::*;
1090    unsafe impl fidl::encoding::TypeMarker for BssType {
1091        type Owned = Self;
1092
1093        #[inline(always)]
1094        fn inline_align(_context: fidl::encoding::Context) -> usize {
1095            std::mem::align_of::<u32>()
1096        }
1097
1098        #[inline(always)]
1099        fn inline_size(_context: fidl::encoding::Context) -> usize {
1100            std::mem::size_of::<u32>()
1101        }
1102
1103        #[inline(always)]
1104        fn encode_is_copy() -> bool {
1105            false
1106        }
1107
1108        #[inline(always)]
1109        fn decode_is_copy() -> bool {
1110            false
1111        }
1112    }
1113
1114    impl fidl::encoding::ValueTypeMarker for BssType {
1115        type Borrowed<'a> = Self;
1116        #[inline(always)]
1117        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1118            *value
1119        }
1120    }
1121
1122    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BssType {
1123        #[inline]
1124        unsafe fn encode(
1125            self,
1126            encoder: &mut fidl::encoding::Encoder<'_, D>,
1127            offset: usize,
1128            _depth: fidl::encoding::Depth,
1129        ) -> fidl::Result<()> {
1130            encoder.debug_check_bounds::<Self>(offset);
1131            encoder.write_num(self.into_primitive(), offset);
1132            Ok(())
1133        }
1134    }
1135
1136    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BssType {
1137        #[inline(always)]
1138        fn new_empty() -> Self {
1139            Self::unknown()
1140        }
1141
1142        #[inline]
1143        unsafe fn decode(
1144            &mut self,
1145            decoder: &mut fidl::encoding::Decoder<'_, D>,
1146            offset: usize,
1147            _depth: fidl::encoding::Depth,
1148        ) -> fidl::Result<()> {
1149            decoder.debug_check_bounds::<Self>(offset);
1150            let prim = decoder.read_num::<u32>(offset);
1151
1152            *self = Self::from_primitive_allow_unknown(prim);
1153            Ok(())
1154        }
1155    }
1156    unsafe impl fidl::encoding::TypeMarker for ChannelBandwidth {
1157        type Owned = Self;
1158
1159        #[inline(always)]
1160        fn inline_align(_context: fidl::encoding::Context) -> usize {
1161            std::mem::align_of::<u32>()
1162        }
1163
1164        #[inline(always)]
1165        fn inline_size(_context: fidl::encoding::Context) -> usize {
1166            std::mem::size_of::<u32>()
1167        }
1168
1169        #[inline(always)]
1170        fn encode_is_copy() -> bool {
1171            false
1172        }
1173
1174        #[inline(always)]
1175        fn decode_is_copy() -> bool {
1176            false
1177        }
1178    }
1179
1180    impl fidl::encoding::ValueTypeMarker for ChannelBandwidth {
1181        type Borrowed<'a> = Self;
1182        #[inline(always)]
1183        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1184            *value
1185        }
1186    }
1187
1188    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1189        for ChannelBandwidth
1190    {
1191        #[inline]
1192        unsafe fn encode(
1193            self,
1194            encoder: &mut fidl::encoding::Encoder<'_, D>,
1195            offset: usize,
1196            _depth: fidl::encoding::Depth,
1197        ) -> fidl::Result<()> {
1198            encoder.debug_check_bounds::<Self>(offset);
1199            encoder.write_num(self.into_primitive(), offset);
1200            Ok(())
1201        }
1202    }
1203
1204    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelBandwidth {
1205        #[inline(always)]
1206        fn new_empty() -> Self {
1207            Self::unknown()
1208        }
1209
1210        #[inline]
1211        unsafe fn decode(
1212            &mut self,
1213            decoder: &mut fidl::encoding::Decoder<'_, D>,
1214            offset: usize,
1215            _depth: fidl::encoding::Depth,
1216        ) -> fidl::Result<()> {
1217            decoder.debug_check_bounds::<Self>(offset);
1218            let prim = decoder.read_num::<u32>(offset);
1219
1220            *self = Self::from_primitive_allow_unknown(prim);
1221            Ok(())
1222        }
1223    }
1224    unsafe impl fidl::encoding::TypeMarker for DataPlaneType {
1225        type Owned = Self;
1226
1227        #[inline(always)]
1228        fn inline_align(_context: fidl::encoding::Context) -> usize {
1229            std::mem::align_of::<u8>()
1230        }
1231
1232        #[inline(always)]
1233        fn inline_size(_context: fidl::encoding::Context) -> usize {
1234            std::mem::size_of::<u8>()
1235        }
1236
1237        #[inline(always)]
1238        fn encode_is_copy() -> bool {
1239            false
1240        }
1241
1242        #[inline(always)]
1243        fn decode_is_copy() -> bool {
1244            false
1245        }
1246    }
1247
1248    impl fidl::encoding::ValueTypeMarker for DataPlaneType {
1249        type Borrowed<'a> = Self;
1250        #[inline(always)]
1251        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1252            *value
1253        }
1254    }
1255
1256    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DataPlaneType {
1257        #[inline]
1258        unsafe fn encode(
1259            self,
1260            encoder: &mut fidl::encoding::Encoder<'_, D>,
1261            offset: usize,
1262            _depth: fidl::encoding::Depth,
1263        ) -> fidl::Result<()> {
1264            encoder.debug_check_bounds::<Self>(offset);
1265            encoder.write_num(self.into_primitive(), offset);
1266            Ok(())
1267        }
1268    }
1269
1270    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataPlaneType {
1271        #[inline(always)]
1272        fn new_empty() -> Self {
1273            Self::unknown()
1274        }
1275
1276        #[inline]
1277        unsafe fn decode(
1278            &mut self,
1279            decoder: &mut fidl::encoding::Decoder<'_, D>,
1280            offset: usize,
1281            _depth: fidl::encoding::Depth,
1282        ) -> fidl::Result<()> {
1283            decoder.debug_check_bounds::<Self>(offset);
1284            let prim = decoder.read_num::<u8>(offset);
1285
1286            *self = Self::from_primitive_allow_unknown(prim);
1287            Ok(())
1288        }
1289    }
1290    unsafe impl fidl::encoding::TypeMarker for GuardInterval {
1291        type Owned = Self;
1292
1293        #[inline(always)]
1294        fn inline_align(_context: fidl::encoding::Context) -> usize {
1295            std::mem::align_of::<u8>()
1296        }
1297
1298        #[inline(always)]
1299        fn inline_size(_context: fidl::encoding::Context) -> usize {
1300            std::mem::size_of::<u8>()
1301        }
1302
1303        #[inline(always)]
1304        fn encode_is_copy() -> bool {
1305            true
1306        }
1307
1308        #[inline(always)]
1309        fn decode_is_copy() -> bool {
1310            false
1311        }
1312    }
1313
1314    impl fidl::encoding::ValueTypeMarker for GuardInterval {
1315        type Borrowed<'a> = Self;
1316        #[inline(always)]
1317        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1318            *value
1319        }
1320    }
1321
1322    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GuardInterval {
1323        #[inline]
1324        unsafe fn encode(
1325            self,
1326            encoder: &mut fidl::encoding::Encoder<'_, D>,
1327            offset: usize,
1328            _depth: fidl::encoding::Depth,
1329        ) -> fidl::Result<()> {
1330            encoder.debug_check_bounds::<Self>(offset);
1331            encoder.write_num(self.into_primitive(), offset);
1332            Ok(())
1333        }
1334    }
1335
1336    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuardInterval {
1337        #[inline(always)]
1338        fn new_empty() -> Self {
1339            Self::LongGi
1340        }
1341
1342        #[inline]
1343        unsafe fn decode(
1344            &mut self,
1345            decoder: &mut fidl::encoding::Decoder<'_, D>,
1346            offset: usize,
1347            _depth: fidl::encoding::Depth,
1348        ) -> fidl::Result<()> {
1349            decoder.debug_check_bounds::<Self>(offset);
1350            let prim = decoder.read_num::<u8>(offset);
1351
1352            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1353            Ok(())
1354        }
1355    }
1356    unsafe impl fidl::encoding::TypeMarker for MacImplementationType {
1357        type Owned = Self;
1358
1359        #[inline(always)]
1360        fn inline_align(_context: fidl::encoding::Context) -> usize {
1361            std::mem::align_of::<u8>()
1362        }
1363
1364        #[inline(always)]
1365        fn inline_size(_context: fidl::encoding::Context) -> usize {
1366            std::mem::size_of::<u8>()
1367        }
1368
1369        #[inline(always)]
1370        fn encode_is_copy() -> bool {
1371            false
1372        }
1373
1374        #[inline(always)]
1375        fn decode_is_copy() -> bool {
1376            false
1377        }
1378    }
1379
1380    impl fidl::encoding::ValueTypeMarker for MacImplementationType {
1381        type Borrowed<'a> = Self;
1382        #[inline(always)]
1383        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1384            *value
1385        }
1386    }
1387
1388    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1389        for MacImplementationType
1390    {
1391        #[inline]
1392        unsafe fn encode(
1393            self,
1394            encoder: &mut fidl::encoding::Encoder<'_, D>,
1395            offset: usize,
1396            _depth: fidl::encoding::Depth,
1397        ) -> fidl::Result<()> {
1398            encoder.debug_check_bounds::<Self>(offset);
1399            encoder.write_num(self.into_primitive(), offset);
1400            Ok(())
1401        }
1402    }
1403
1404    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MacImplementationType {
1405        #[inline(always)]
1406        fn new_empty() -> Self {
1407            Self::unknown()
1408        }
1409
1410        #[inline]
1411        unsafe fn decode(
1412            &mut self,
1413            decoder: &mut fidl::encoding::Decoder<'_, D>,
1414            offset: usize,
1415            _depth: fidl::encoding::Depth,
1416        ) -> fidl::Result<()> {
1417            decoder.debug_check_bounds::<Self>(offset);
1418            let prim = decoder.read_num::<u8>(offset);
1419
1420            *self = Self::from_primitive_allow_unknown(prim);
1421            Ok(())
1422        }
1423    }
1424    unsafe impl fidl::encoding::TypeMarker for PowerSaveType {
1425        type Owned = Self;
1426
1427        #[inline(always)]
1428        fn inline_align(_context: fidl::encoding::Context) -> usize {
1429            std::mem::align_of::<u32>()
1430        }
1431
1432        #[inline(always)]
1433        fn inline_size(_context: fidl::encoding::Context) -> usize {
1434            std::mem::size_of::<u32>()
1435        }
1436
1437        #[inline(always)]
1438        fn encode_is_copy() -> bool {
1439            true
1440        }
1441
1442        #[inline(always)]
1443        fn decode_is_copy() -> bool {
1444            false
1445        }
1446    }
1447
1448    impl fidl::encoding::ValueTypeMarker for PowerSaveType {
1449        type Borrowed<'a> = Self;
1450        #[inline(always)]
1451        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1452            *value
1453        }
1454    }
1455
1456    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PowerSaveType {
1457        #[inline]
1458        unsafe fn encode(
1459            self,
1460            encoder: &mut fidl::encoding::Encoder<'_, D>,
1461            offset: usize,
1462            _depth: fidl::encoding::Depth,
1463        ) -> fidl::Result<()> {
1464            encoder.debug_check_bounds::<Self>(offset);
1465            encoder.write_num(self.into_primitive(), offset);
1466            Ok(())
1467        }
1468    }
1469
1470    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerSaveType {
1471        #[inline(always)]
1472        fn new_empty() -> Self {
1473            Self::PsModeUltraLowPower
1474        }
1475
1476        #[inline]
1477        unsafe fn decode(
1478            &mut self,
1479            decoder: &mut fidl::encoding::Decoder<'_, D>,
1480            offset: usize,
1481            _depth: fidl::encoding::Depth,
1482        ) -> fidl::Result<()> {
1483            decoder.debug_check_bounds::<Self>(offset);
1484            let prim = decoder.read_num::<u32>(offset);
1485
1486            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1487            Ok(())
1488        }
1489    }
1490    unsafe impl fidl::encoding::TypeMarker for ScanType {
1491        type Owned = Self;
1492
1493        #[inline(always)]
1494        fn inline_align(_context: fidl::encoding::Context) -> usize {
1495            std::mem::align_of::<u32>()
1496        }
1497
1498        #[inline(always)]
1499        fn inline_size(_context: fidl::encoding::Context) -> usize {
1500            std::mem::size_of::<u32>()
1501        }
1502
1503        #[inline(always)]
1504        fn encode_is_copy() -> bool {
1505            true
1506        }
1507
1508        #[inline(always)]
1509        fn decode_is_copy() -> bool {
1510            false
1511        }
1512    }
1513
1514    impl fidl::encoding::ValueTypeMarker for ScanType {
1515        type Borrowed<'a> = Self;
1516        #[inline(always)]
1517        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1518            *value
1519        }
1520    }
1521
1522    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ScanType {
1523        #[inline]
1524        unsafe fn encode(
1525            self,
1526            encoder: &mut fidl::encoding::Encoder<'_, D>,
1527            offset: usize,
1528            _depth: fidl::encoding::Depth,
1529        ) -> fidl::Result<()> {
1530            encoder.debug_check_bounds::<Self>(offset);
1531            encoder.write_num(self.into_primitive(), offset);
1532            Ok(())
1533        }
1534    }
1535
1536    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanType {
1537        #[inline(always)]
1538        fn new_empty() -> Self {
1539            Self::Active
1540        }
1541
1542        #[inline]
1543        unsafe fn decode(
1544            &mut self,
1545            decoder: &mut fidl::encoding::Decoder<'_, D>,
1546            offset: usize,
1547            _depth: fidl::encoding::Depth,
1548        ) -> fidl::Result<()> {
1549            decoder.debug_check_bounds::<Self>(offset);
1550            let prim = decoder.read_num::<u32>(offset);
1551
1552            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1553            Ok(())
1554        }
1555    }
1556    unsafe impl fidl::encoding::TypeMarker for WlanKeyType {
1557        type Owned = Self;
1558
1559        #[inline(always)]
1560        fn inline_align(_context: fidl::encoding::Context) -> usize {
1561            std::mem::align_of::<u8>()
1562        }
1563
1564        #[inline(always)]
1565        fn inline_size(_context: fidl::encoding::Context) -> usize {
1566            std::mem::size_of::<u8>()
1567        }
1568
1569        #[inline(always)]
1570        fn encode_is_copy() -> bool {
1571            false
1572        }
1573
1574        #[inline(always)]
1575        fn decode_is_copy() -> bool {
1576            false
1577        }
1578    }
1579
1580    impl fidl::encoding::ValueTypeMarker for WlanKeyType {
1581        type Borrowed<'a> = Self;
1582        #[inline(always)]
1583        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1584            *value
1585        }
1586    }
1587
1588    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanKeyType {
1589        #[inline]
1590        unsafe fn encode(
1591            self,
1592            encoder: &mut fidl::encoding::Encoder<'_, D>,
1593            offset: usize,
1594            _depth: fidl::encoding::Depth,
1595        ) -> fidl::Result<()> {
1596            encoder.debug_check_bounds::<Self>(offset);
1597            encoder.write_num(self.into_primitive(), offset);
1598            Ok(())
1599        }
1600    }
1601
1602    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanKeyType {
1603        #[inline(always)]
1604        fn new_empty() -> Self {
1605            Self::unknown()
1606        }
1607
1608        #[inline]
1609        unsafe fn decode(
1610            &mut self,
1611            decoder: &mut fidl::encoding::Decoder<'_, D>,
1612            offset: usize,
1613            _depth: fidl::encoding::Depth,
1614        ) -> fidl::Result<()> {
1615            decoder.debug_check_bounds::<Self>(offset);
1616            let prim = decoder.read_num::<u8>(offset);
1617
1618            *self = Self::from_primitive_allow_unknown(prim);
1619            Ok(())
1620        }
1621    }
1622    unsafe impl fidl::encoding::TypeMarker for WlanMacRole {
1623        type Owned = Self;
1624
1625        #[inline(always)]
1626        fn inline_align(_context: fidl::encoding::Context) -> usize {
1627            std::mem::align_of::<u32>()
1628        }
1629
1630        #[inline(always)]
1631        fn inline_size(_context: fidl::encoding::Context) -> usize {
1632            std::mem::size_of::<u32>()
1633        }
1634
1635        #[inline(always)]
1636        fn encode_is_copy() -> bool {
1637            false
1638        }
1639
1640        #[inline(always)]
1641        fn decode_is_copy() -> bool {
1642            false
1643        }
1644    }
1645
1646    impl fidl::encoding::ValueTypeMarker for WlanMacRole {
1647        type Borrowed<'a> = Self;
1648        #[inline(always)]
1649        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1650            *value
1651        }
1652    }
1653
1654    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanMacRole {
1655        #[inline]
1656        unsafe fn encode(
1657            self,
1658            encoder: &mut fidl::encoding::Encoder<'_, D>,
1659            offset: usize,
1660            _depth: fidl::encoding::Depth,
1661        ) -> fidl::Result<()> {
1662            encoder.debug_check_bounds::<Self>(offset);
1663            encoder.write_num(self.into_primitive(), offset);
1664            Ok(())
1665        }
1666    }
1667
1668    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanMacRole {
1669        #[inline(always)]
1670        fn new_empty() -> Self {
1671            Self::unknown()
1672        }
1673
1674        #[inline]
1675        unsafe fn decode(
1676            &mut self,
1677            decoder: &mut fidl::encoding::Decoder<'_, D>,
1678            offset: usize,
1679            _depth: fidl::encoding::Depth,
1680        ) -> fidl::Result<()> {
1681            decoder.debug_check_bounds::<Self>(offset);
1682            let prim = decoder.read_num::<u32>(offset);
1683
1684            *self = Self::from_primitive_allow_unknown(prim);
1685            Ok(())
1686        }
1687    }
1688    unsafe impl fidl::encoding::TypeMarker for WlanPhyType {
1689        type Owned = Self;
1690
1691        #[inline(always)]
1692        fn inline_align(_context: fidl::encoding::Context) -> usize {
1693            std::mem::align_of::<u32>()
1694        }
1695
1696        #[inline(always)]
1697        fn inline_size(_context: fidl::encoding::Context) -> usize {
1698            std::mem::size_of::<u32>()
1699        }
1700
1701        #[inline(always)]
1702        fn encode_is_copy() -> bool {
1703            false
1704        }
1705
1706        #[inline(always)]
1707        fn decode_is_copy() -> bool {
1708            false
1709        }
1710    }
1711
1712    impl fidl::encoding::ValueTypeMarker for WlanPhyType {
1713        type Borrowed<'a> = Self;
1714        #[inline(always)]
1715        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1716            *value
1717        }
1718    }
1719
1720    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanPhyType {
1721        #[inline]
1722        unsafe fn encode(
1723            self,
1724            encoder: &mut fidl::encoding::Encoder<'_, D>,
1725            offset: usize,
1726            _depth: fidl::encoding::Depth,
1727        ) -> fidl::Result<()> {
1728            encoder.debug_check_bounds::<Self>(offset);
1729            encoder.write_num(self.into_primitive(), offset);
1730            Ok(())
1731        }
1732    }
1733
1734    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanPhyType {
1735        #[inline(always)]
1736        fn new_empty() -> Self {
1737            Self::unknown()
1738        }
1739
1740        #[inline]
1741        unsafe fn decode(
1742            &mut self,
1743            decoder: &mut fidl::encoding::Decoder<'_, D>,
1744            offset: usize,
1745            _depth: fidl::encoding::Depth,
1746        ) -> fidl::Result<()> {
1747            decoder.debug_check_bounds::<Self>(offset);
1748            let prim = decoder.read_num::<u32>(offset);
1749
1750            *self = Self::from_primitive_allow_unknown(prim);
1751            Ok(())
1752        }
1753    }
1754    unsafe impl fidl::encoding::TypeMarker for WlanProtection {
1755        type Owned = Self;
1756
1757        #[inline(always)]
1758        fn inline_align(_context: fidl::encoding::Context) -> usize {
1759            std::mem::align_of::<u8>()
1760        }
1761
1762        #[inline(always)]
1763        fn inline_size(_context: fidl::encoding::Context) -> usize {
1764            std::mem::size_of::<u8>()
1765        }
1766
1767        #[inline(always)]
1768        fn encode_is_copy() -> bool {
1769            true
1770        }
1771
1772        #[inline(always)]
1773        fn decode_is_copy() -> bool {
1774            false
1775        }
1776    }
1777
1778    impl fidl::encoding::ValueTypeMarker for WlanProtection {
1779        type Borrowed<'a> = Self;
1780        #[inline(always)]
1781        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1782            *value
1783        }
1784    }
1785
1786    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanProtection {
1787        #[inline]
1788        unsafe fn encode(
1789            self,
1790            encoder: &mut fidl::encoding::Encoder<'_, D>,
1791            offset: usize,
1792            _depth: fidl::encoding::Depth,
1793        ) -> fidl::Result<()> {
1794            encoder.debug_check_bounds::<Self>(offset);
1795            encoder.write_num(self.into_primitive(), offset);
1796            Ok(())
1797        }
1798    }
1799
1800    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanProtection {
1801        #[inline(always)]
1802        fn new_empty() -> Self {
1803            Self::None
1804        }
1805
1806        #[inline]
1807        unsafe fn decode(
1808            &mut self,
1809            decoder: &mut fidl::encoding::Decoder<'_, D>,
1810            offset: usize,
1811            _depth: fidl::encoding::Depth,
1812        ) -> fidl::Result<()> {
1813            decoder.debug_check_bounds::<Self>(offset);
1814            let prim = decoder.read_num::<u8>(offset);
1815
1816            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1817            Ok(())
1818        }
1819    }
1820    unsafe impl fidl::encoding::TypeMarker for WlanSoftmacHardwareCapabilityBit {
1821        type Owned = Self;
1822
1823        #[inline(always)]
1824        fn inline_align(_context: fidl::encoding::Context) -> usize {
1825            std::mem::align_of::<u32>()
1826        }
1827
1828        #[inline(always)]
1829        fn inline_size(_context: fidl::encoding::Context) -> usize {
1830            std::mem::size_of::<u32>()
1831        }
1832
1833        #[inline(always)]
1834        fn encode_is_copy() -> bool {
1835            true
1836        }
1837
1838        #[inline(always)]
1839        fn decode_is_copy() -> bool {
1840            false
1841        }
1842    }
1843
1844    impl fidl::encoding::ValueTypeMarker for WlanSoftmacHardwareCapabilityBit {
1845        type Borrowed<'a> = Self;
1846        #[inline(always)]
1847        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1848            *value
1849        }
1850    }
1851
1852    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1853        for WlanSoftmacHardwareCapabilityBit
1854    {
1855        #[inline]
1856        unsafe fn encode(
1857            self,
1858            encoder: &mut fidl::encoding::Encoder<'_, D>,
1859            offset: usize,
1860            _depth: fidl::encoding::Depth,
1861        ) -> fidl::Result<()> {
1862            encoder.debug_check_bounds::<Self>(offset);
1863            encoder.write_num(self.into_primitive(), offset);
1864            Ok(())
1865        }
1866    }
1867
1868    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1869        for WlanSoftmacHardwareCapabilityBit
1870    {
1871        #[inline(always)]
1872        fn new_empty() -> Self {
1873            Self::ShortPreamble
1874        }
1875
1876        #[inline]
1877        unsafe fn decode(
1878            &mut self,
1879            decoder: &mut fidl::encoding::Decoder<'_, D>,
1880            offset: usize,
1881            _depth: fidl::encoding::Depth,
1882        ) -> fidl::Result<()> {
1883            decoder.debug_check_bounds::<Self>(offset);
1884            let prim = decoder.read_num::<u32>(offset);
1885
1886            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1887            Ok(())
1888        }
1889    }
1890    unsafe impl fidl::encoding::TypeMarker for WlanTxResultCode {
1891        type Owned = Self;
1892
1893        #[inline(always)]
1894        fn inline_align(_context: fidl::encoding::Context) -> usize {
1895            std::mem::align_of::<u8>()
1896        }
1897
1898        #[inline(always)]
1899        fn inline_size(_context: fidl::encoding::Context) -> usize {
1900            std::mem::size_of::<u8>()
1901        }
1902
1903        #[inline(always)]
1904        fn encode_is_copy() -> bool {
1905            false
1906        }
1907
1908        #[inline(always)]
1909        fn decode_is_copy() -> bool {
1910            false
1911        }
1912    }
1913
1914    impl fidl::encoding::ValueTypeMarker for WlanTxResultCode {
1915        type Borrowed<'a> = Self;
1916        #[inline(always)]
1917        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1918            *value
1919        }
1920    }
1921
1922    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1923        for WlanTxResultCode
1924    {
1925        #[inline]
1926        unsafe fn encode(
1927            self,
1928            encoder: &mut fidl::encoding::Encoder<'_, D>,
1929            offset: usize,
1930            _depth: fidl::encoding::Depth,
1931        ) -> fidl::Result<()> {
1932            encoder.debug_check_bounds::<Self>(offset);
1933            encoder.write_num(self.into_primitive(), offset);
1934            Ok(())
1935        }
1936    }
1937
1938    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanTxResultCode {
1939        #[inline(always)]
1940        fn new_empty() -> Self {
1941            Self::unknown()
1942        }
1943
1944        #[inline]
1945        unsafe fn decode(
1946            &mut self,
1947            decoder: &mut fidl::encoding::Decoder<'_, D>,
1948            offset: usize,
1949            _depth: fidl::encoding::Depth,
1950        ) -> fidl::Result<()> {
1951            decoder.debug_check_bounds::<Self>(offset);
1952            let prim = decoder.read_num::<u8>(offset);
1953
1954            *self = Self::from_primitive_allow_unknown(prim);
1955            Ok(())
1956        }
1957    }
1958
1959    impl fidl::encoding::ValueTypeMarker for BssDescription {
1960        type Borrowed<'a> = &'a Self;
1961        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1962            value
1963        }
1964    }
1965
1966    unsafe impl fidl::encoding::TypeMarker for BssDescription {
1967        type Owned = Self;
1968
1969        #[inline(always)]
1970        fn inline_align(_context: fidl::encoding::Context) -> usize {
1971            8
1972        }
1973
1974        #[inline(always)]
1975        fn inline_size(_context: fidl::encoding::Context) -> usize {
1976            48
1977        }
1978    }
1979
1980    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BssDescription, D>
1981        for &BssDescription
1982    {
1983        #[inline]
1984        unsafe fn encode(
1985            self,
1986            encoder: &mut fidl::encoding::Encoder<'_, D>,
1987            offset: usize,
1988            _depth: fidl::encoding::Depth,
1989        ) -> fidl::Result<()> {
1990            encoder.debug_check_bounds::<BssDescription>(offset);
1991            // Delegate to tuple encoding.
1992            fidl::encoding::Encode::<BssDescription, D>::encode(
1993                (
1994                    <fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow(&self.bssid),
1995                    <BssType as fidl::encoding::ValueTypeMarker>::borrow(&self.bss_type),
1996                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.beacon_period),
1997                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.capability_info),
1998                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.ies),
1999                    <fidl_fuchsia_wlan_ieee80211__common::WlanChannel as fidl::encoding::ValueTypeMarker>::borrow(&self.channel),
2000                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.rssi_dbm),
2001                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.snr_db),
2002                ),
2003                encoder, offset, _depth
2004            )
2005        }
2006    }
2007    unsafe impl<
2008        D: fidl::encoding::ResourceDialect,
2009        T0: fidl::encoding::Encode<fidl::encoding::Array<u8, 6>, D>,
2010        T1: fidl::encoding::Encode<BssType, D>,
2011        T2: fidl::encoding::Encode<u16, D>,
2012        T3: fidl::encoding::Encode<u16, D>,
2013        T4: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
2014        T5: fidl::encoding::Encode<fidl_fuchsia_wlan_ieee80211__common::WlanChannel, D>,
2015        T6: fidl::encoding::Encode<i8, D>,
2016        T7: fidl::encoding::Encode<i8, D>,
2017    > fidl::encoding::Encode<BssDescription, D> for (T0, T1, T2, T3, T4, T5, T6, T7)
2018    {
2019        #[inline]
2020        unsafe fn encode(
2021            self,
2022            encoder: &mut fidl::encoding::Encoder<'_, D>,
2023            offset: usize,
2024            depth: fidl::encoding::Depth,
2025        ) -> fidl::Result<()> {
2026            encoder.debug_check_bounds::<BssDescription>(offset);
2027            // Zero out padding regions. There's no need to apply masks
2028            // because the unmasked parts will be overwritten by fields.
2029            unsafe {
2030                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2031                (ptr as *mut u64).write_unaligned(0);
2032            }
2033            unsafe {
2034                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
2035                (ptr as *mut u64).write_unaligned(0);
2036            }
2037            // Write the fields.
2038            self.0.encode(encoder, offset + 0, depth)?;
2039            self.1.encode(encoder, offset + 8, depth)?;
2040            self.2.encode(encoder, offset + 12, depth)?;
2041            self.3.encode(encoder, offset + 14, depth)?;
2042            self.4.encode(encoder, offset + 16, depth)?;
2043            self.5.encode(encoder, offset + 32, depth)?;
2044            self.6.encode(encoder, offset + 44, depth)?;
2045            self.7.encode(encoder, offset + 45, depth)?;
2046            Ok(())
2047        }
2048    }
2049
2050    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BssDescription {
2051        #[inline(always)]
2052        fn new_empty() -> Self {
2053            Self {
2054                bssid: fidl::new_empty!(fidl::encoding::Array<u8, 6>, D),
2055                bss_type: fidl::new_empty!(BssType, D),
2056                beacon_period: fidl::new_empty!(u16, D),
2057                capability_info: fidl::new_empty!(u16, D),
2058                ies: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
2059                channel: fidl::new_empty!(fidl_fuchsia_wlan_ieee80211__common::WlanChannel, D),
2060                rssi_dbm: fidl::new_empty!(i8, D),
2061                snr_db: fidl::new_empty!(i8, D),
2062            }
2063        }
2064
2065        #[inline]
2066        unsafe fn decode(
2067            &mut self,
2068            decoder: &mut fidl::encoding::Decoder<'_, D>,
2069            offset: usize,
2070            _depth: fidl::encoding::Depth,
2071        ) -> fidl::Result<()> {
2072            decoder.debug_check_bounds::<Self>(offset);
2073            // Verify that padding bytes are zero.
2074            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2075            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2076            let mask = 0xffff000000000000u64;
2077            let maskedval = padval & mask;
2078            if maskedval != 0 {
2079                return Err(fidl::Error::NonZeroPadding {
2080                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2081                });
2082            }
2083            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
2084            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2085            let mask = 0xffff000000000000u64;
2086            let maskedval = padval & mask;
2087            if maskedval != 0 {
2088                return Err(fidl::Error::NonZeroPadding {
2089                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
2090                });
2091            }
2092            fidl::decode!(fidl::encoding::Array<u8, 6>, D, &mut self.bssid, decoder, offset + 0, _depth)?;
2093            fidl::decode!(BssType, D, &mut self.bss_type, decoder, offset + 8, _depth)?;
2094            fidl::decode!(u16, D, &mut self.beacon_period, decoder, offset + 12, _depth)?;
2095            fidl::decode!(u16, D, &mut self.capability_info, decoder, offset + 14, _depth)?;
2096            fidl::decode!(
2097                fidl::encoding::UnboundedVector<u8>,
2098                D,
2099                &mut self.ies,
2100                decoder,
2101                offset + 16,
2102                _depth
2103            )?;
2104            fidl::decode!(
2105                fidl_fuchsia_wlan_ieee80211__common::WlanChannel,
2106                D,
2107                &mut self.channel,
2108                decoder,
2109                offset + 32,
2110                _depth
2111            )?;
2112            fidl::decode!(i8, D, &mut self.rssi_dbm, decoder, offset + 44, _depth)?;
2113            fidl::decode!(i8, D, &mut self.snr_db, decoder, offset + 45, _depth)?;
2114            Ok(())
2115        }
2116    }
2117
2118    impl fidl::encoding::ValueTypeMarker for WlanChannel {
2119        type Borrowed<'a> = &'a Self;
2120        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2121            value
2122        }
2123    }
2124
2125    unsafe impl fidl::encoding::TypeMarker for WlanChannel {
2126        type Owned = Self;
2127
2128        #[inline(always)]
2129        fn inline_align(_context: fidl::encoding::Context) -> usize {
2130            4
2131        }
2132
2133        #[inline(always)]
2134        fn inline_size(_context: fidl::encoding::Context) -> usize {
2135            12
2136        }
2137    }
2138
2139    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanChannel, D>
2140        for &WlanChannel
2141    {
2142        #[inline]
2143        unsafe fn encode(
2144            self,
2145            encoder: &mut fidl::encoding::Encoder<'_, D>,
2146            offset: usize,
2147            _depth: fidl::encoding::Depth,
2148        ) -> fidl::Result<()> {
2149            encoder.debug_check_bounds::<WlanChannel>(offset);
2150            // Delegate to tuple encoding.
2151            fidl::encoding::Encode::<WlanChannel, D>::encode(
2152                (
2153                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary),
2154                    <ChannelBandwidth as fidl::encoding::ValueTypeMarker>::borrow(&self.cbw),
2155                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary80),
2156                ),
2157                encoder,
2158                offset,
2159                _depth,
2160            )
2161        }
2162    }
2163    unsafe impl<
2164        D: fidl::encoding::ResourceDialect,
2165        T0: fidl::encoding::Encode<u8, D>,
2166        T1: fidl::encoding::Encode<ChannelBandwidth, D>,
2167        T2: fidl::encoding::Encode<u8, D>,
2168    > fidl::encoding::Encode<WlanChannel, D> for (T0, T1, T2)
2169    {
2170        #[inline]
2171        unsafe fn encode(
2172            self,
2173            encoder: &mut fidl::encoding::Encoder<'_, D>,
2174            offset: usize,
2175            depth: fidl::encoding::Depth,
2176        ) -> fidl::Result<()> {
2177            encoder.debug_check_bounds::<WlanChannel>(offset);
2178            // Zero out padding regions. There's no need to apply masks
2179            // because the unmasked parts will be overwritten by fields.
2180            unsafe {
2181                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2182                (ptr as *mut u32).write_unaligned(0);
2183            }
2184            unsafe {
2185                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2186                (ptr as *mut u32).write_unaligned(0);
2187            }
2188            // Write the fields.
2189            self.0.encode(encoder, offset + 0, depth)?;
2190            self.1.encode(encoder, offset + 4, depth)?;
2191            self.2.encode(encoder, offset + 8, depth)?;
2192            Ok(())
2193        }
2194    }
2195
2196    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanChannel {
2197        #[inline(always)]
2198        fn new_empty() -> Self {
2199            Self {
2200                primary: fidl::new_empty!(u8, D),
2201                cbw: fidl::new_empty!(ChannelBandwidth, D),
2202                secondary80: fidl::new_empty!(u8, D),
2203            }
2204        }
2205
2206        #[inline]
2207        unsafe fn decode(
2208            &mut self,
2209            decoder: &mut fidl::encoding::Decoder<'_, D>,
2210            offset: usize,
2211            _depth: fidl::encoding::Depth,
2212        ) -> fidl::Result<()> {
2213            decoder.debug_check_bounds::<Self>(offset);
2214            // Verify that padding bytes are zero.
2215            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2216            let padval = unsafe { (ptr as *const u32).read_unaligned() };
2217            let mask = 0xffffff00u32;
2218            let maskedval = padval & mask;
2219            if maskedval != 0 {
2220                return Err(fidl::Error::NonZeroPadding {
2221                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2222                });
2223            }
2224            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
2225            let padval = unsafe { (ptr as *const u32).read_unaligned() };
2226            let mask = 0xffffff00u32;
2227            let maskedval = padval & mask;
2228            if maskedval != 0 {
2229                return Err(fidl::Error::NonZeroPadding {
2230                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2231                });
2232            }
2233            fidl::decode!(u8, D, &mut self.primary, decoder, offset + 0, _depth)?;
2234            fidl::decode!(ChannelBandwidth, D, &mut self.cbw, decoder, offset + 4, _depth)?;
2235            fidl::decode!(u8, D, &mut self.secondary80, decoder, offset + 8, _depth)?;
2236            Ok(())
2237        }
2238    }
2239
2240    impl fidl::encoding::ValueTypeMarker for WlanTxResult {
2241        type Borrowed<'a> = &'a Self;
2242        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2243            value
2244        }
2245    }
2246
2247    unsafe impl fidl::encoding::TypeMarker for WlanTxResult {
2248        type Owned = Self;
2249
2250        #[inline(always)]
2251        fn inline_align(_context: fidl::encoding::Context) -> usize {
2252            2
2253        }
2254
2255        #[inline(always)]
2256        fn inline_size(_context: fidl::encoding::Context) -> usize {
2257            40
2258        }
2259    }
2260
2261    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanTxResult, D>
2262        for &WlanTxResult
2263    {
2264        #[inline]
2265        unsafe fn encode(
2266            self,
2267            encoder: &mut fidl::encoding::Encoder<'_, D>,
2268            offset: usize,
2269            _depth: fidl::encoding::Depth,
2270        ) -> fidl::Result<()> {
2271            encoder.debug_check_bounds::<WlanTxResult>(offset);
2272            // Delegate to tuple encoding.
2273            fidl::encoding::Encode::<WlanTxResult, D>::encode(
2274                (
2275                    <fidl::encoding::Array<WlanTxResultEntry, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.tx_result_entry),
2276                    <fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow(&self.peer_addr),
2277                    <WlanTxResultCode as fidl::encoding::ValueTypeMarker>::borrow(&self.result_code),
2278                ),
2279                encoder, offset, _depth
2280            )
2281        }
2282    }
2283    unsafe impl<
2284        D: fidl::encoding::ResourceDialect,
2285        T0: fidl::encoding::Encode<fidl::encoding::Array<WlanTxResultEntry, 8>, D>,
2286        T1: fidl::encoding::Encode<fidl::encoding::Array<u8, 6>, D>,
2287        T2: fidl::encoding::Encode<WlanTxResultCode, D>,
2288    > fidl::encoding::Encode<WlanTxResult, D> for (T0, T1, T2)
2289    {
2290        #[inline]
2291        unsafe fn encode(
2292            self,
2293            encoder: &mut fidl::encoding::Encoder<'_, D>,
2294            offset: usize,
2295            depth: fidl::encoding::Depth,
2296        ) -> fidl::Result<()> {
2297            encoder.debug_check_bounds::<WlanTxResult>(offset);
2298            // Zero out padding regions. There's no need to apply masks
2299            // because the unmasked parts will be overwritten by fields.
2300            unsafe {
2301                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(38);
2302                (ptr as *mut u16).write_unaligned(0);
2303            }
2304            // Write the fields.
2305            self.0.encode(encoder, offset + 0, depth)?;
2306            self.1.encode(encoder, offset + 32, depth)?;
2307            self.2.encode(encoder, offset + 38, depth)?;
2308            Ok(())
2309        }
2310    }
2311
2312    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanTxResult {
2313        #[inline(always)]
2314        fn new_empty() -> Self {
2315            Self {
2316                tx_result_entry: fidl::new_empty!(fidl::encoding::Array<WlanTxResultEntry, 8>, D),
2317                peer_addr: fidl::new_empty!(fidl::encoding::Array<u8, 6>, D),
2318                result_code: fidl::new_empty!(WlanTxResultCode, D),
2319            }
2320        }
2321
2322        #[inline]
2323        unsafe fn decode(
2324            &mut self,
2325            decoder: &mut fidl::encoding::Decoder<'_, D>,
2326            offset: usize,
2327            _depth: fidl::encoding::Depth,
2328        ) -> fidl::Result<()> {
2329            decoder.debug_check_bounds::<Self>(offset);
2330            // Verify that padding bytes are zero.
2331            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(38) };
2332            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2333            let mask = 0xff00u16;
2334            let maskedval = padval & mask;
2335            if maskedval != 0 {
2336                return Err(fidl::Error::NonZeroPadding {
2337                    padding_start: offset + 38 + ((mask as u64).trailing_zeros() / 8) as usize,
2338                });
2339            }
2340            fidl::decode!(fidl::encoding::Array<WlanTxResultEntry, 8>, D, &mut self.tx_result_entry, decoder, offset + 0, _depth)?;
2341            fidl::decode!(fidl::encoding::Array<u8, 6>, D, &mut self.peer_addr, decoder, offset + 32, _depth)?;
2342            fidl::decode!(
2343                WlanTxResultCode,
2344                D,
2345                &mut self.result_code,
2346                decoder,
2347                offset + 38,
2348                _depth
2349            )?;
2350            Ok(())
2351        }
2352    }
2353
2354    impl fidl::encoding::ValueTypeMarker for WlanTxResultEntry {
2355        type Borrowed<'a> = &'a Self;
2356        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2357            value
2358        }
2359    }
2360
2361    unsafe impl fidl::encoding::TypeMarker for WlanTxResultEntry {
2362        type Owned = Self;
2363
2364        #[inline(always)]
2365        fn inline_align(_context: fidl::encoding::Context) -> usize {
2366            2
2367        }
2368
2369        #[inline(always)]
2370        fn inline_size(_context: fidl::encoding::Context) -> usize {
2371            4
2372        }
2373    }
2374
2375    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanTxResultEntry, D>
2376        for &WlanTxResultEntry
2377    {
2378        #[inline]
2379        unsafe fn encode(
2380            self,
2381            encoder: &mut fidl::encoding::Encoder<'_, D>,
2382            offset: usize,
2383            _depth: fidl::encoding::Depth,
2384        ) -> fidl::Result<()> {
2385            encoder.debug_check_bounds::<WlanTxResultEntry>(offset);
2386            unsafe {
2387                // Copy the object into the buffer.
2388                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2389                (buf_ptr as *mut WlanTxResultEntry)
2390                    .write_unaligned((self as *const WlanTxResultEntry).read());
2391                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2392                // done second because the memcpy will write garbage to these bytes.
2393                let padding_ptr = buf_ptr.offset(2) as *mut u16;
2394                let padding_mask = 0xff00u16;
2395                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2396            }
2397            Ok(())
2398        }
2399    }
2400    unsafe impl<
2401        D: fidl::encoding::ResourceDialect,
2402        T0: fidl::encoding::Encode<u16, D>,
2403        T1: fidl::encoding::Encode<u8, D>,
2404    > fidl::encoding::Encode<WlanTxResultEntry, D> for (T0, T1)
2405    {
2406        #[inline]
2407        unsafe fn encode(
2408            self,
2409            encoder: &mut fidl::encoding::Encoder<'_, D>,
2410            offset: usize,
2411            depth: fidl::encoding::Depth,
2412        ) -> fidl::Result<()> {
2413            encoder.debug_check_bounds::<WlanTxResultEntry>(offset);
2414            // Zero out padding regions. There's no need to apply masks
2415            // because the unmasked parts will be overwritten by fields.
2416            unsafe {
2417                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(2);
2418                (ptr as *mut u16).write_unaligned(0);
2419            }
2420            // Write the fields.
2421            self.0.encode(encoder, offset + 0, depth)?;
2422            self.1.encode(encoder, offset + 2, depth)?;
2423            Ok(())
2424        }
2425    }
2426
2427    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanTxResultEntry {
2428        #[inline(always)]
2429        fn new_empty() -> Self {
2430            Self { tx_vector_idx: fidl::new_empty!(u16, D), attempts: fidl::new_empty!(u8, D) }
2431        }
2432
2433        #[inline]
2434        unsafe fn decode(
2435            &mut self,
2436            decoder: &mut fidl::encoding::Decoder<'_, D>,
2437            offset: usize,
2438            _depth: fidl::encoding::Depth,
2439        ) -> fidl::Result<()> {
2440            decoder.debug_check_bounds::<Self>(offset);
2441            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2442            // Verify that padding bytes are zero.
2443            let ptr = unsafe { buf_ptr.offset(2) };
2444            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2445            let mask = 0xff00u16;
2446            let maskedval = padval & mask;
2447            if maskedval != 0 {
2448                return Err(fidl::Error::NonZeroPadding {
2449                    padding_start: offset + 2 + ((mask as u64).trailing_zeros() / 8) as usize,
2450                });
2451            }
2452            // Copy from the buffer into the object.
2453            unsafe {
2454                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2455            }
2456            Ok(())
2457        }
2458    }
2459
2460    impl fidl::encoding::ValueTypeMarker for WlanWmmAccessCategoryParameters {
2461        type Borrowed<'a> = &'a Self;
2462        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2463            value
2464        }
2465    }
2466
2467    unsafe impl fidl::encoding::TypeMarker for WlanWmmAccessCategoryParameters {
2468        type Owned = Self;
2469
2470        #[inline(always)]
2471        fn inline_align(_context: fidl::encoding::Context) -> usize {
2472            2
2473        }
2474
2475        #[inline(always)]
2476        fn inline_size(_context: fidl::encoding::Context) -> usize {
2477            8
2478        }
2479    }
2480
2481    unsafe impl<D: fidl::encoding::ResourceDialect>
2482        fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>
2483        for &WlanWmmAccessCategoryParameters
2484    {
2485        #[inline]
2486        unsafe fn encode(
2487            self,
2488            encoder: &mut fidl::encoding::Encoder<'_, D>,
2489            offset: usize,
2490            _depth: fidl::encoding::Depth,
2491        ) -> fidl::Result<()> {
2492            encoder.debug_check_bounds::<WlanWmmAccessCategoryParameters>(offset);
2493            // Delegate to tuple encoding.
2494            fidl::encoding::Encode::<WlanWmmAccessCategoryParameters, D>::encode(
2495                (
2496                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.ecw_min),
2497                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.ecw_max),
2498                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.aifsn),
2499                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.txop_limit),
2500                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.acm),
2501                ),
2502                encoder,
2503                offset,
2504                _depth,
2505            )
2506        }
2507    }
2508    unsafe impl<
2509        D: fidl::encoding::ResourceDialect,
2510        T0: fidl::encoding::Encode<u8, D>,
2511        T1: fidl::encoding::Encode<u8, D>,
2512        T2: fidl::encoding::Encode<u8, D>,
2513        T3: fidl::encoding::Encode<u16, D>,
2514        T4: fidl::encoding::Encode<bool, D>,
2515    > fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D> for (T0, T1, T2, T3, T4)
2516    {
2517        #[inline]
2518        unsafe fn encode(
2519            self,
2520            encoder: &mut fidl::encoding::Encoder<'_, D>,
2521            offset: usize,
2522            depth: fidl::encoding::Depth,
2523        ) -> fidl::Result<()> {
2524            encoder.debug_check_bounds::<WlanWmmAccessCategoryParameters>(offset);
2525            // Zero out padding regions. There's no need to apply masks
2526            // because the unmasked parts will be overwritten by fields.
2527            unsafe {
2528                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(2);
2529                (ptr as *mut u16).write_unaligned(0);
2530            }
2531            unsafe {
2532                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(6);
2533                (ptr as *mut u16).write_unaligned(0);
2534            }
2535            // Write the fields.
2536            self.0.encode(encoder, offset + 0, depth)?;
2537            self.1.encode(encoder, offset + 1, depth)?;
2538            self.2.encode(encoder, offset + 2, depth)?;
2539            self.3.encode(encoder, offset + 4, depth)?;
2540            self.4.encode(encoder, offset + 6, depth)?;
2541            Ok(())
2542        }
2543    }
2544
2545    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2546        for WlanWmmAccessCategoryParameters
2547    {
2548        #[inline(always)]
2549        fn new_empty() -> Self {
2550            Self {
2551                ecw_min: fidl::new_empty!(u8, D),
2552                ecw_max: fidl::new_empty!(u8, D),
2553                aifsn: fidl::new_empty!(u8, D),
2554                txop_limit: fidl::new_empty!(u16, D),
2555                acm: fidl::new_empty!(bool, D),
2556            }
2557        }
2558
2559        #[inline]
2560        unsafe fn decode(
2561            &mut self,
2562            decoder: &mut fidl::encoding::Decoder<'_, D>,
2563            offset: usize,
2564            _depth: fidl::encoding::Depth,
2565        ) -> fidl::Result<()> {
2566            decoder.debug_check_bounds::<Self>(offset);
2567            // Verify that padding bytes are zero.
2568            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(2) };
2569            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2570            let mask = 0xff00u16;
2571            let maskedval = padval & mask;
2572            if maskedval != 0 {
2573                return Err(fidl::Error::NonZeroPadding {
2574                    padding_start: offset + 2 + ((mask as u64).trailing_zeros() / 8) as usize,
2575                });
2576            }
2577            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(6) };
2578            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2579            let mask = 0xff00u16;
2580            let maskedval = padval & mask;
2581            if maskedval != 0 {
2582                return Err(fidl::Error::NonZeroPadding {
2583                    padding_start: offset + 6 + ((mask as u64).trailing_zeros() / 8) as usize,
2584                });
2585            }
2586            fidl::decode!(u8, D, &mut self.ecw_min, decoder, offset + 0, _depth)?;
2587            fidl::decode!(u8, D, &mut self.ecw_max, decoder, offset + 1, _depth)?;
2588            fidl::decode!(u8, D, &mut self.aifsn, decoder, offset + 2, _depth)?;
2589            fidl::decode!(u16, D, &mut self.txop_limit, decoder, offset + 4, _depth)?;
2590            fidl::decode!(bool, D, &mut self.acm, decoder, offset + 6, _depth)?;
2591            Ok(())
2592        }
2593    }
2594
2595    impl fidl::encoding::ValueTypeMarker for WlanWmmParameters {
2596        type Borrowed<'a> = &'a Self;
2597        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2598            value
2599        }
2600    }
2601
2602    unsafe impl fidl::encoding::TypeMarker for WlanWmmParameters {
2603        type Owned = Self;
2604
2605        #[inline(always)]
2606        fn inline_align(_context: fidl::encoding::Context) -> usize {
2607            2
2608        }
2609
2610        #[inline(always)]
2611        fn inline_size(_context: fidl::encoding::Context) -> usize {
2612            34
2613        }
2614    }
2615
2616    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanWmmParameters, D>
2617        for &WlanWmmParameters
2618    {
2619        #[inline]
2620        unsafe fn encode(
2621            self,
2622            encoder: &mut fidl::encoding::Encoder<'_, D>,
2623            offset: usize,
2624            _depth: fidl::encoding::Depth,
2625        ) -> fidl::Result<()> {
2626            encoder.debug_check_bounds::<WlanWmmParameters>(offset);
2627            // Delegate to tuple encoding.
2628            fidl::encoding::Encode::<WlanWmmParameters, D>::encode(
2629                (
2630                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.apsd),
2631                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2632                        &self.ac_be_params,
2633                    ),
2634                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2635                        &self.ac_bk_params,
2636                    ),
2637                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2638                        &self.ac_vi_params,
2639                    ),
2640                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2641                        &self.ac_vo_params,
2642                    ),
2643                ),
2644                encoder,
2645                offset,
2646                _depth,
2647            )
2648        }
2649    }
2650    unsafe impl<
2651        D: fidl::encoding::ResourceDialect,
2652        T0: fidl::encoding::Encode<bool, D>,
2653        T1: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2654        T2: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2655        T3: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2656        T4: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2657    > fidl::encoding::Encode<WlanWmmParameters, D> for (T0, T1, T2, T3, T4)
2658    {
2659        #[inline]
2660        unsafe fn encode(
2661            self,
2662            encoder: &mut fidl::encoding::Encoder<'_, D>,
2663            offset: usize,
2664            depth: fidl::encoding::Depth,
2665        ) -> fidl::Result<()> {
2666            encoder.debug_check_bounds::<WlanWmmParameters>(offset);
2667            // Zero out padding regions. There's no need to apply masks
2668            // because the unmasked parts will be overwritten by fields.
2669            unsafe {
2670                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2671                (ptr as *mut u16).write_unaligned(0);
2672            }
2673            // Write the fields.
2674            self.0.encode(encoder, offset + 0, depth)?;
2675            self.1.encode(encoder, offset + 2, depth)?;
2676            self.2.encode(encoder, offset + 10, depth)?;
2677            self.3.encode(encoder, offset + 18, depth)?;
2678            self.4.encode(encoder, offset + 26, depth)?;
2679            Ok(())
2680        }
2681    }
2682
2683    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanWmmParameters {
2684        #[inline(always)]
2685        fn new_empty() -> Self {
2686            Self {
2687                apsd: fidl::new_empty!(bool, D),
2688                ac_be_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2689                ac_bk_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2690                ac_vi_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2691                ac_vo_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2692            }
2693        }
2694
2695        #[inline]
2696        unsafe fn decode(
2697            &mut self,
2698            decoder: &mut fidl::encoding::Decoder<'_, D>,
2699            offset: usize,
2700            _depth: fidl::encoding::Depth,
2701        ) -> fidl::Result<()> {
2702            decoder.debug_check_bounds::<Self>(offset);
2703            // Verify that padding bytes are zero.
2704            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2705            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2706            let mask = 0xff00u16;
2707            let maskedval = padval & mask;
2708            if maskedval != 0 {
2709                return Err(fidl::Error::NonZeroPadding {
2710                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2711                });
2712            }
2713            fidl::decode!(bool, D, &mut self.apsd, decoder, offset + 0, _depth)?;
2714            fidl::decode!(
2715                WlanWmmAccessCategoryParameters,
2716                D,
2717                &mut self.ac_be_params,
2718                decoder,
2719                offset + 2,
2720                _depth
2721            )?;
2722            fidl::decode!(
2723                WlanWmmAccessCategoryParameters,
2724                D,
2725                &mut self.ac_bk_params,
2726                decoder,
2727                offset + 10,
2728                _depth
2729            )?;
2730            fidl::decode!(
2731                WlanWmmAccessCategoryParameters,
2732                D,
2733                &mut self.ac_vi_params,
2734                decoder,
2735                offset + 18,
2736                _depth
2737            )?;
2738            fidl::decode!(
2739                WlanWmmAccessCategoryParameters,
2740                D,
2741                &mut self.ac_vo_params,
2742                decoder,
2743                offset + 26,
2744                _depth
2745            )?;
2746            Ok(())
2747        }
2748    }
2749
2750    impl DataPlaneExtension {
2751        #[inline(always)]
2752        fn max_ordinal_present(&self) -> u64 {
2753            if let Some(_) = self.data_plane_type {
2754                return 1;
2755            }
2756            0
2757        }
2758    }
2759
2760    impl fidl::encoding::ValueTypeMarker for DataPlaneExtension {
2761        type Borrowed<'a> = &'a Self;
2762        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2763            value
2764        }
2765    }
2766
2767    unsafe impl fidl::encoding::TypeMarker for DataPlaneExtension {
2768        type Owned = Self;
2769
2770        #[inline(always)]
2771        fn inline_align(_context: fidl::encoding::Context) -> usize {
2772            8
2773        }
2774
2775        #[inline(always)]
2776        fn inline_size(_context: fidl::encoding::Context) -> usize {
2777            16
2778        }
2779    }
2780
2781    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DataPlaneExtension, D>
2782        for &DataPlaneExtension
2783    {
2784        unsafe fn encode(
2785            self,
2786            encoder: &mut fidl::encoding::Encoder<'_, D>,
2787            offset: usize,
2788            mut depth: fidl::encoding::Depth,
2789        ) -> fidl::Result<()> {
2790            encoder.debug_check_bounds::<DataPlaneExtension>(offset);
2791            // Vector header
2792            let max_ordinal: u64 = self.max_ordinal_present();
2793            encoder.write_num(max_ordinal, offset);
2794            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2795            // Calling encoder.out_of_line_offset(0) is not allowed.
2796            if max_ordinal == 0 {
2797                return Ok(());
2798            }
2799            depth.increment()?;
2800            let envelope_size = 8;
2801            let bytes_len = max_ordinal as usize * envelope_size;
2802            #[allow(unused_variables)]
2803            let offset = encoder.out_of_line_offset(bytes_len);
2804            let mut _prev_end_offset: usize = 0;
2805            if 1 > max_ordinal {
2806                return Ok(());
2807            }
2808
2809            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2810            // are envelope_size bytes.
2811            let cur_offset: usize = (1 - 1) * envelope_size;
2812
2813            // Zero reserved fields.
2814            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2815
2816            // Safety:
2817            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2818            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2819            //   envelope_size bytes, there is always sufficient room.
2820            fidl::encoding::encode_in_envelope_optional::<DataPlaneType, D>(
2821                self.data_plane_type
2822                    .as_ref()
2823                    .map(<DataPlaneType as fidl::encoding::ValueTypeMarker>::borrow),
2824                encoder,
2825                offset + cur_offset,
2826                depth,
2827            )?;
2828
2829            _prev_end_offset = cur_offset + envelope_size;
2830
2831            Ok(())
2832        }
2833    }
2834
2835    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataPlaneExtension {
2836        #[inline(always)]
2837        fn new_empty() -> Self {
2838            Self::default()
2839        }
2840
2841        unsafe fn decode(
2842            &mut self,
2843            decoder: &mut fidl::encoding::Decoder<'_, D>,
2844            offset: usize,
2845            mut depth: fidl::encoding::Depth,
2846        ) -> fidl::Result<()> {
2847            decoder.debug_check_bounds::<Self>(offset);
2848            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2849                None => return Err(fidl::Error::NotNullable),
2850                Some(len) => len,
2851            };
2852            // Calling decoder.out_of_line_offset(0) is not allowed.
2853            if len == 0 {
2854                return Ok(());
2855            };
2856            depth.increment()?;
2857            let envelope_size = 8;
2858            let bytes_len = len * envelope_size;
2859            let offset = decoder.out_of_line_offset(bytes_len)?;
2860            // Decode the envelope for each type.
2861            let mut _next_ordinal_to_read = 0;
2862            let mut next_offset = offset;
2863            let end_offset = offset + bytes_len;
2864            _next_ordinal_to_read += 1;
2865            if next_offset >= end_offset {
2866                return Ok(());
2867            }
2868
2869            // Decode unknown envelopes for gaps in ordinals.
2870            while _next_ordinal_to_read < 1 {
2871                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2872                _next_ordinal_to_read += 1;
2873                next_offset += envelope_size;
2874            }
2875
2876            let next_out_of_line = decoder.next_out_of_line();
2877            let handles_before = decoder.remaining_handles();
2878            if let Some((inlined, num_bytes, num_handles)) =
2879                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2880            {
2881                let member_inline_size =
2882                    <DataPlaneType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2883                if inlined != (member_inline_size <= 4) {
2884                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2885                }
2886                let inner_offset;
2887                let mut inner_depth = depth.clone();
2888                if inlined {
2889                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2890                    inner_offset = next_offset;
2891                } else {
2892                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2893                    inner_depth.increment()?;
2894                }
2895                let val_ref =
2896                    self.data_plane_type.get_or_insert_with(|| fidl::new_empty!(DataPlaneType, D));
2897                fidl::decode!(DataPlaneType, D, val_ref, decoder, inner_offset, inner_depth)?;
2898                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2899                {
2900                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2901                }
2902                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2903                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2904                }
2905            }
2906
2907            next_offset += envelope_size;
2908
2909            // Decode the remaining unknown envelopes.
2910            while next_offset < end_offset {
2911                _next_ordinal_to_read += 1;
2912                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2913                next_offset += envelope_size;
2914            }
2915
2916            Ok(())
2917        }
2918    }
2919
2920    impl DeviceExtension {
2921        #[inline(always)]
2922        fn max_ordinal_present(&self) -> u64 {
2923            if let Some(_) = self.tx_status_report_supported {
2924                return 3;
2925            }
2926            if let Some(_) = self.mac_implementation_type {
2927                return 2;
2928            }
2929            if let Some(_) = self.is_synthetic {
2930                return 1;
2931            }
2932            0
2933        }
2934    }
2935
2936    impl fidl::encoding::ValueTypeMarker for DeviceExtension {
2937        type Borrowed<'a> = &'a Self;
2938        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2939            value
2940        }
2941    }
2942
2943    unsafe impl fidl::encoding::TypeMarker for DeviceExtension {
2944        type Owned = Self;
2945
2946        #[inline(always)]
2947        fn inline_align(_context: fidl::encoding::Context) -> usize {
2948            8
2949        }
2950
2951        #[inline(always)]
2952        fn inline_size(_context: fidl::encoding::Context) -> usize {
2953            16
2954        }
2955    }
2956
2957    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceExtension, D>
2958        for &DeviceExtension
2959    {
2960        unsafe fn encode(
2961            self,
2962            encoder: &mut fidl::encoding::Encoder<'_, D>,
2963            offset: usize,
2964            mut depth: fidl::encoding::Depth,
2965        ) -> fidl::Result<()> {
2966            encoder.debug_check_bounds::<DeviceExtension>(offset);
2967            // Vector header
2968            let max_ordinal: u64 = self.max_ordinal_present();
2969            encoder.write_num(max_ordinal, offset);
2970            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2971            // Calling encoder.out_of_line_offset(0) is not allowed.
2972            if max_ordinal == 0 {
2973                return Ok(());
2974            }
2975            depth.increment()?;
2976            let envelope_size = 8;
2977            let bytes_len = max_ordinal as usize * envelope_size;
2978            #[allow(unused_variables)]
2979            let offset = encoder.out_of_line_offset(bytes_len);
2980            let mut _prev_end_offset: usize = 0;
2981            if 1 > max_ordinal {
2982                return Ok(());
2983            }
2984
2985            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2986            // are envelope_size bytes.
2987            let cur_offset: usize = (1 - 1) * envelope_size;
2988
2989            // Zero reserved fields.
2990            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2991
2992            // Safety:
2993            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2994            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2995            //   envelope_size bytes, there is always sufficient room.
2996            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2997                self.is_synthetic.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2998                encoder,
2999                offset + cur_offset,
3000                depth,
3001            )?;
3002
3003            _prev_end_offset = cur_offset + envelope_size;
3004            if 2 > max_ordinal {
3005                return Ok(());
3006            }
3007
3008            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3009            // are envelope_size bytes.
3010            let cur_offset: usize = (2 - 1) * envelope_size;
3011
3012            // Zero reserved fields.
3013            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3014
3015            // Safety:
3016            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3017            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3018            //   envelope_size bytes, there is always sufficient room.
3019            fidl::encoding::encode_in_envelope_optional::<MacImplementationType, D>(
3020                self.mac_implementation_type
3021                    .as_ref()
3022                    .map(<MacImplementationType as fidl::encoding::ValueTypeMarker>::borrow),
3023                encoder,
3024                offset + cur_offset,
3025                depth,
3026            )?;
3027
3028            _prev_end_offset = cur_offset + envelope_size;
3029            if 3 > max_ordinal {
3030                return Ok(());
3031            }
3032
3033            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3034            // are envelope_size bytes.
3035            let cur_offset: usize = (3 - 1) * envelope_size;
3036
3037            // Zero reserved fields.
3038            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3039
3040            // Safety:
3041            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3042            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3043            //   envelope_size bytes, there is always sufficient room.
3044            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3045                self.tx_status_report_supported
3046                    .as_ref()
3047                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3048                encoder,
3049                offset + cur_offset,
3050                depth,
3051            )?;
3052
3053            _prev_end_offset = cur_offset + envelope_size;
3054
3055            Ok(())
3056        }
3057    }
3058
3059    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceExtension {
3060        #[inline(always)]
3061        fn new_empty() -> Self {
3062            Self::default()
3063        }
3064
3065        unsafe fn decode(
3066            &mut self,
3067            decoder: &mut fidl::encoding::Decoder<'_, D>,
3068            offset: usize,
3069            mut depth: fidl::encoding::Depth,
3070        ) -> fidl::Result<()> {
3071            decoder.debug_check_bounds::<Self>(offset);
3072            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3073                None => return Err(fidl::Error::NotNullable),
3074                Some(len) => len,
3075            };
3076            // Calling decoder.out_of_line_offset(0) is not allowed.
3077            if len == 0 {
3078                return Ok(());
3079            };
3080            depth.increment()?;
3081            let envelope_size = 8;
3082            let bytes_len = len * envelope_size;
3083            let offset = decoder.out_of_line_offset(bytes_len)?;
3084            // Decode the envelope for each type.
3085            let mut _next_ordinal_to_read = 0;
3086            let mut next_offset = offset;
3087            let end_offset = offset + bytes_len;
3088            _next_ordinal_to_read += 1;
3089            if next_offset >= end_offset {
3090                return Ok(());
3091            }
3092
3093            // Decode unknown envelopes for gaps in ordinals.
3094            while _next_ordinal_to_read < 1 {
3095                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3096                _next_ordinal_to_read += 1;
3097                next_offset += envelope_size;
3098            }
3099
3100            let next_out_of_line = decoder.next_out_of_line();
3101            let handles_before = decoder.remaining_handles();
3102            if let Some((inlined, num_bytes, num_handles)) =
3103                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3104            {
3105                let member_inline_size =
3106                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3107                if inlined != (member_inline_size <= 4) {
3108                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3109                }
3110                let inner_offset;
3111                let mut inner_depth = depth.clone();
3112                if inlined {
3113                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3114                    inner_offset = next_offset;
3115                } else {
3116                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3117                    inner_depth.increment()?;
3118                }
3119                let val_ref = self.is_synthetic.get_or_insert_with(|| fidl::new_empty!(bool, D));
3120                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3121                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3122                {
3123                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3124                }
3125                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3126                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3127                }
3128            }
3129
3130            next_offset += envelope_size;
3131            _next_ordinal_to_read += 1;
3132            if next_offset >= end_offset {
3133                return Ok(());
3134            }
3135
3136            // Decode unknown envelopes for gaps in ordinals.
3137            while _next_ordinal_to_read < 2 {
3138                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3139                _next_ordinal_to_read += 1;
3140                next_offset += envelope_size;
3141            }
3142
3143            let next_out_of_line = decoder.next_out_of_line();
3144            let handles_before = decoder.remaining_handles();
3145            if let Some((inlined, num_bytes, num_handles)) =
3146                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3147            {
3148                let member_inline_size =
3149                    <MacImplementationType as fidl::encoding::TypeMarker>::inline_size(
3150                        decoder.context,
3151                    );
3152                if inlined != (member_inline_size <= 4) {
3153                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3154                }
3155                let inner_offset;
3156                let mut inner_depth = depth.clone();
3157                if inlined {
3158                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3159                    inner_offset = next_offset;
3160                } else {
3161                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3162                    inner_depth.increment()?;
3163                }
3164                let val_ref = self
3165                    .mac_implementation_type
3166                    .get_or_insert_with(|| fidl::new_empty!(MacImplementationType, D));
3167                fidl::decode!(
3168                    MacImplementationType,
3169                    D,
3170                    val_ref,
3171                    decoder,
3172                    inner_offset,
3173                    inner_depth
3174                )?;
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            _next_ordinal_to_read += 1;
3186            if next_offset >= end_offset {
3187                return Ok(());
3188            }
3189
3190            // Decode unknown envelopes for gaps in ordinals.
3191            while _next_ordinal_to_read < 3 {
3192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3193                _next_ordinal_to_read += 1;
3194                next_offset += envelope_size;
3195            }
3196
3197            let next_out_of_line = decoder.next_out_of_line();
3198            let handles_before = decoder.remaining_handles();
3199            if let Some((inlined, num_bytes, num_handles)) =
3200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3201            {
3202                let member_inline_size =
3203                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3204                if inlined != (member_inline_size <= 4) {
3205                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3206                }
3207                let inner_offset;
3208                let mut inner_depth = depth.clone();
3209                if inlined {
3210                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3211                    inner_offset = next_offset;
3212                } else {
3213                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3214                    inner_depth.increment()?;
3215                }
3216                let val_ref = self
3217                    .tx_status_report_supported
3218                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
3219                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3221                {
3222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3223                }
3224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3226                }
3227            }
3228
3229            next_offset += envelope_size;
3230
3231            // Decode the remaining unknown envelopes.
3232            while next_offset < end_offset {
3233                _next_ordinal_to_read += 1;
3234                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3235                next_offset += envelope_size;
3236            }
3237
3238            Ok(())
3239        }
3240    }
3241
3242    impl DfsFeature {
3243        #[inline(always)]
3244        fn max_ordinal_present(&self) -> u64 {
3245            if let Some(_) = self.supported {
3246                return 1;
3247            }
3248            0
3249        }
3250    }
3251
3252    impl fidl::encoding::ValueTypeMarker for DfsFeature {
3253        type Borrowed<'a> = &'a Self;
3254        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3255            value
3256        }
3257    }
3258
3259    unsafe impl fidl::encoding::TypeMarker for DfsFeature {
3260        type Owned = Self;
3261
3262        #[inline(always)]
3263        fn inline_align(_context: fidl::encoding::Context) -> usize {
3264            8
3265        }
3266
3267        #[inline(always)]
3268        fn inline_size(_context: fidl::encoding::Context) -> usize {
3269            16
3270        }
3271    }
3272
3273    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DfsFeature, D>
3274        for &DfsFeature
3275    {
3276        unsafe fn encode(
3277            self,
3278            encoder: &mut fidl::encoding::Encoder<'_, D>,
3279            offset: usize,
3280            mut depth: fidl::encoding::Depth,
3281        ) -> fidl::Result<()> {
3282            encoder.debug_check_bounds::<DfsFeature>(offset);
3283            // Vector header
3284            let max_ordinal: u64 = self.max_ordinal_present();
3285            encoder.write_num(max_ordinal, offset);
3286            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3287            // Calling encoder.out_of_line_offset(0) is not allowed.
3288            if max_ordinal == 0 {
3289                return Ok(());
3290            }
3291            depth.increment()?;
3292            let envelope_size = 8;
3293            let bytes_len = max_ordinal as usize * envelope_size;
3294            #[allow(unused_variables)]
3295            let offset = encoder.out_of_line_offset(bytes_len);
3296            let mut _prev_end_offset: usize = 0;
3297            if 1 > max_ordinal {
3298                return Ok(());
3299            }
3300
3301            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3302            // are envelope_size bytes.
3303            let cur_offset: usize = (1 - 1) * envelope_size;
3304
3305            // Zero reserved fields.
3306            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3307
3308            // Safety:
3309            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3310            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3311            //   envelope_size bytes, there is always sufficient room.
3312            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3313                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3314                encoder,
3315                offset + cur_offset,
3316                depth,
3317            )?;
3318
3319            _prev_end_offset = cur_offset + envelope_size;
3320
3321            Ok(())
3322        }
3323    }
3324
3325    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DfsFeature {
3326        #[inline(always)]
3327        fn new_empty() -> Self {
3328            Self::default()
3329        }
3330
3331        unsafe fn decode(
3332            &mut self,
3333            decoder: &mut fidl::encoding::Decoder<'_, D>,
3334            offset: usize,
3335            mut depth: fidl::encoding::Depth,
3336        ) -> fidl::Result<()> {
3337            decoder.debug_check_bounds::<Self>(offset);
3338            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3339                None => return Err(fidl::Error::NotNullable),
3340                Some(len) => len,
3341            };
3342            // Calling decoder.out_of_line_offset(0) is not allowed.
3343            if len == 0 {
3344                return Ok(());
3345            };
3346            depth.increment()?;
3347            let envelope_size = 8;
3348            let bytes_len = len * envelope_size;
3349            let offset = decoder.out_of_line_offset(bytes_len)?;
3350            // Decode the envelope for each type.
3351            let mut _next_ordinal_to_read = 0;
3352            let mut next_offset = offset;
3353            let end_offset = offset + bytes_len;
3354            _next_ordinal_to_read += 1;
3355            if next_offset >= end_offset {
3356                return Ok(());
3357            }
3358
3359            // Decode unknown envelopes for gaps in ordinals.
3360            while _next_ordinal_to_read < 1 {
3361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3362                _next_ordinal_to_read += 1;
3363                next_offset += envelope_size;
3364            }
3365
3366            let next_out_of_line = decoder.next_out_of_line();
3367            let handles_before = decoder.remaining_handles();
3368            if let Some((inlined, num_bytes, num_handles)) =
3369                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3370            {
3371                let member_inline_size =
3372                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3373                if inlined != (member_inline_size <= 4) {
3374                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3375                }
3376                let inner_offset;
3377                let mut inner_depth = depth.clone();
3378                if inlined {
3379                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3380                    inner_offset = next_offset;
3381                } else {
3382                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3383                    inner_depth.increment()?;
3384                }
3385                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
3386                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3387                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3388                {
3389                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3390                }
3391                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3392                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3393                }
3394            }
3395
3396            next_offset += envelope_size;
3397
3398            // Decode the remaining unknown envelopes.
3399            while next_offset < end_offset {
3400                _next_ordinal_to_read += 1;
3401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3402                next_offset += envelope_size;
3403            }
3404
3405            Ok(())
3406        }
3407    }
3408
3409    impl DiscoverySupport {
3410        #[inline(always)]
3411        fn max_ordinal_present(&self) -> u64 {
3412            if let Some(_) = self.probe_response_offload {
3413                return 2;
3414            }
3415            if let Some(_) = self.scan_offload {
3416                return 1;
3417            }
3418            0
3419        }
3420    }
3421
3422    impl fidl::encoding::ValueTypeMarker for DiscoverySupport {
3423        type Borrowed<'a> = &'a Self;
3424        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3425            value
3426        }
3427    }
3428
3429    unsafe impl fidl::encoding::TypeMarker for DiscoverySupport {
3430        type Owned = Self;
3431
3432        #[inline(always)]
3433        fn inline_align(_context: fidl::encoding::Context) -> usize {
3434            8
3435        }
3436
3437        #[inline(always)]
3438        fn inline_size(_context: fidl::encoding::Context) -> usize {
3439            16
3440        }
3441    }
3442
3443    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DiscoverySupport, D>
3444        for &DiscoverySupport
3445    {
3446        unsafe fn encode(
3447            self,
3448            encoder: &mut fidl::encoding::Encoder<'_, D>,
3449            offset: usize,
3450            mut depth: fidl::encoding::Depth,
3451        ) -> fidl::Result<()> {
3452            encoder.debug_check_bounds::<DiscoverySupport>(offset);
3453            // Vector header
3454            let max_ordinal: u64 = self.max_ordinal_present();
3455            encoder.write_num(max_ordinal, offset);
3456            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3457            // Calling encoder.out_of_line_offset(0) is not allowed.
3458            if max_ordinal == 0 {
3459                return Ok(());
3460            }
3461            depth.increment()?;
3462            let envelope_size = 8;
3463            let bytes_len = max_ordinal as usize * envelope_size;
3464            #[allow(unused_variables)]
3465            let offset = encoder.out_of_line_offset(bytes_len);
3466            let mut _prev_end_offset: usize = 0;
3467            if 1 > max_ordinal {
3468                return Ok(());
3469            }
3470
3471            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3472            // are envelope_size bytes.
3473            let cur_offset: usize = (1 - 1) * envelope_size;
3474
3475            // Zero reserved fields.
3476            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3477
3478            // Safety:
3479            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3480            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3481            //   envelope_size bytes, there is always sufficient room.
3482            fidl::encoding::encode_in_envelope_optional::<ScanOffloadExtension, D>(
3483                self.scan_offload
3484                    .as_ref()
3485                    .map(<ScanOffloadExtension as fidl::encoding::ValueTypeMarker>::borrow),
3486                encoder,
3487                offset + cur_offset,
3488                depth,
3489            )?;
3490
3491            _prev_end_offset = cur_offset + envelope_size;
3492            if 2 > max_ordinal {
3493                return Ok(());
3494            }
3495
3496            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3497            // are envelope_size bytes.
3498            let cur_offset: usize = (2 - 1) * envelope_size;
3499
3500            // Zero reserved fields.
3501            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3502
3503            // Safety:
3504            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3505            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3506            //   envelope_size bytes, there is always sufficient room.
3507            fidl::encoding::encode_in_envelope_optional::<ProbeResponseOffloadExtension, D>(
3508                self.probe_response_offload.as_ref().map(
3509                    <ProbeResponseOffloadExtension as fidl::encoding::ValueTypeMarker>::borrow,
3510                ),
3511                encoder,
3512                offset + cur_offset,
3513                depth,
3514            )?;
3515
3516            _prev_end_offset = cur_offset + envelope_size;
3517
3518            Ok(())
3519        }
3520    }
3521
3522    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DiscoverySupport {
3523        #[inline(always)]
3524        fn new_empty() -> Self {
3525            Self::default()
3526        }
3527
3528        unsafe fn decode(
3529            &mut self,
3530            decoder: &mut fidl::encoding::Decoder<'_, D>,
3531            offset: usize,
3532            mut depth: fidl::encoding::Depth,
3533        ) -> fidl::Result<()> {
3534            decoder.debug_check_bounds::<Self>(offset);
3535            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3536                None => return Err(fidl::Error::NotNullable),
3537                Some(len) => len,
3538            };
3539            // Calling decoder.out_of_line_offset(0) is not allowed.
3540            if len == 0 {
3541                return Ok(());
3542            };
3543            depth.increment()?;
3544            let envelope_size = 8;
3545            let bytes_len = len * envelope_size;
3546            let offset = decoder.out_of_line_offset(bytes_len)?;
3547            // Decode the envelope for each type.
3548            let mut _next_ordinal_to_read = 0;
3549            let mut next_offset = offset;
3550            let end_offset = offset + bytes_len;
3551            _next_ordinal_to_read += 1;
3552            if next_offset >= end_offset {
3553                return Ok(());
3554            }
3555
3556            // Decode unknown envelopes for gaps in ordinals.
3557            while _next_ordinal_to_read < 1 {
3558                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3559                _next_ordinal_to_read += 1;
3560                next_offset += envelope_size;
3561            }
3562
3563            let next_out_of_line = decoder.next_out_of_line();
3564            let handles_before = decoder.remaining_handles();
3565            if let Some((inlined, num_bytes, num_handles)) =
3566                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3567            {
3568                let member_inline_size =
3569                    <ScanOffloadExtension as fidl::encoding::TypeMarker>::inline_size(
3570                        decoder.context,
3571                    );
3572                if inlined != (member_inline_size <= 4) {
3573                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3574                }
3575                let inner_offset;
3576                let mut inner_depth = depth.clone();
3577                if inlined {
3578                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3579                    inner_offset = next_offset;
3580                } else {
3581                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3582                    inner_depth.increment()?;
3583                }
3584                let val_ref = self
3585                    .scan_offload
3586                    .get_or_insert_with(|| fidl::new_empty!(ScanOffloadExtension, D));
3587                fidl::decode!(
3588                    ScanOffloadExtension,
3589                    D,
3590                    val_ref,
3591                    decoder,
3592                    inner_offset,
3593                    inner_depth
3594                )?;
3595                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3596                {
3597                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3598                }
3599                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3600                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3601                }
3602            }
3603
3604            next_offset += envelope_size;
3605            _next_ordinal_to_read += 1;
3606            if next_offset >= end_offset {
3607                return Ok(());
3608            }
3609
3610            // Decode unknown envelopes for gaps in ordinals.
3611            while _next_ordinal_to_read < 2 {
3612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3613                _next_ordinal_to_read += 1;
3614                next_offset += envelope_size;
3615            }
3616
3617            let next_out_of_line = decoder.next_out_of_line();
3618            let handles_before = decoder.remaining_handles();
3619            if let Some((inlined, num_bytes, num_handles)) =
3620                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3621            {
3622                let member_inline_size =
3623                    <ProbeResponseOffloadExtension as fidl::encoding::TypeMarker>::inline_size(
3624                        decoder.context,
3625                    );
3626                if inlined != (member_inline_size <= 4) {
3627                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3628                }
3629                let inner_offset;
3630                let mut inner_depth = depth.clone();
3631                if inlined {
3632                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3633                    inner_offset = next_offset;
3634                } else {
3635                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3636                    inner_depth.increment()?;
3637                }
3638                let val_ref = self
3639                    .probe_response_offload
3640                    .get_or_insert_with(|| fidl::new_empty!(ProbeResponseOffloadExtension, D));
3641                fidl::decode!(
3642                    ProbeResponseOffloadExtension,
3643                    D,
3644                    val_ref,
3645                    decoder,
3646                    inner_offset,
3647                    inner_depth
3648                )?;
3649                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3650                {
3651                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3652                }
3653                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3654                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3655                }
3656            }
3657
3658            next_offset += envelope_size;
3659
3660            // Decode the remaining unknown envelopes.
3661            while next_offset < end_offset {
3662                _next_ordinal_to_read += 1;
3663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3664                next_offset += envelope_size;
3665            }
3666
3667            Ok(())
3668        }
3669    }
3670
3671    impl JoinBssRequest {
3672        #[inline(always)]
3673        fn max_ordinal_present(&self) -> u64 {
3674            if let Some(_) = self.beacon_period {
3675                return 4;
3676            }
3677            if let Some(_) = self.remote {
3678                return 3;
3679            }
3680            if let Some(_) = self.bss_type {
3681                return 2;
3682            }
3683            if let Some(_) = self.bssid {
3684                return 1;
3685            }
3686            0
3687        }
3688    }
3689
3690    impl fidl::encoding::ValueTypeMarker for JoinBssRequest {
3691        type Borrowed<'a> = &'a Self;
3692        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3693            value
3694        }
3695    }
3696
3697    unsafe impl fidl::encoding::TypeMarker for JoinBssRequest {
3698        type Owned = Self;
3699
3700        #[inline(always)]
3701        fn inline_align(_context: fidl::encoding::Context) -> usize {
3702            8
3703        }
3704
3705        #[inline(always)]
3706        fn inline_size(_context: fidl::encoding::Context) -> usize {
3707            16
3708        }
3709    }
3710
3711    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinBssRequest, D>
3712        for &JoinBssRequest
3713    {
3714        unsafe fn encode(
3715            self,
3716            encoder: &mut fidl::encoding::Encoder<'_, D>,
3717            offset: usize,
3718            mut depth: fidl::encoding::Depth,
3719        ) -> fidl::Result<()> {
3720            encoder.debug_check_bounds::<JoinBssRequest>(offset);
3721            // Vector header
3722            let max_ordinal: u64 = self.max_ordinal_present();
3723            encoder.write_num(max_ordinal, offset);
3724            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3725            // Calling encoder.out_of_line_offset(0) is not allowed.
3726            if max_ordinal == 0 {
3727                return Ok(());
3728            }
3729            depth.increment()?;
3730            let envelope_size = 8;
3731            let bytes_len = max_ordinal as usize * envelope_size;
3732            #[allow(unused_variables)]
3733            let offset = encoder.out_of_line_offset(bytes_len);
3734            let mut _prev_end_offset: usize = 0;
3735            if 1 > max_ordinal {
3736                return Ok(());
3737            }
3738
3739            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3740            // are envelope_size bytes.
3741            let cur_offset: usize = (1 - 1) * envelope_size;
3742
3743            // Zero reserved fields.
3744            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3745
3746            // Safety:
3747            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3748            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3749            //   envelope_size bytes, there is always sufficient room.
3750            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 6>, D>(
3751                self.bssid
3752                    .as_ref()
3753                    .map(<fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow),
3754                encoder,
3755                offset + cur_offset,
3756                depth,
3757            )?;
3758
3759            _prev_end_offset = cur_offset + envelope_size;
3760            if 2 > max_ordinal {
3761                return Ok(());
3762            }
3763
3764            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3765            // are envelope_size bytes.
3766            let cur_offset: usize = (2 - 1) * envelope_size;
3767
3768            // Zero reserved fields.
3769            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3770
3771            // Safety:
3772            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3773            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3774            //   envelope_size bytes, there is always sufficient room.
3775            fidl::encoding::encode_in_envelope_optional::<BssType, D>(
3776                self.bss_type.as_ref().map(<BssType as fidl::encoding::ValueTypeMarker>::borrow),
3777                encoder,
3778                offset + cur_offset,
3779                depth,
3780            )?;
3781
3782            _prev_end_offset = cur_offset + envelope_size;
3783            if 3 > max_ordinal {
3784                return Ok(());
3785            }
3786
3787            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3788            // are envelope_size bytes.
3789            let cur_offset: usize = (3 - 1) * envelope_size;
3790
3791            // Zero reserved fields.
3792            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3793
3794            // Safety:
3795            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3796            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3797            //   envelope_size bytes, there is always sufficient room.
3798            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3799                self.remote.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3800                encoder,
3801                offset + cur_offset,
3802                depth,
3803            )?;
3804
3805            _prev_end_offset = cur_offset + envelope_size;
3806            if 4 > max_ordinal {
3807                return Ok(());
3808            }
3809
3810            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3811            // are envelope_size bytes.
3812            let cur_offset: usize = (4 - 1) * envelope_size;
3813
3814            // Zero reserved fields.
3815            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3816
3817            // Safety:
3818            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3819            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3820            //   envelope_size bytes, there is always sufficient room.
3821            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3822                self.beacon_period.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3823                encoder,
3824                offset + cur_offset,
3825                depth,
3826            )?;
3827
3828            _prev_end_offset = cur_offset + envelope_size;
3829
3830            Ok(())
3831        }
3832    }
3833
3834    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinBssRequest {
3835        #[inline(always)]
3836        fn new_empty() -> Self {
3837            Self::default()
3838        }
3839
3840        unsafe fn decode(
3841            &mut self,
3842            decoder: &mut fidl::encoding::Decoder<'_, D>,
3843            offset: usize,
3844            mut depth: fidl::encoding::Depth,
3845        ) -> fidl::Result<()> {
3846            decoder.debug_check_bounds::<Self>(offset);
3847            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3848                None => return Err(fidl::Error::NotNullable),
3849                Some(len) => len,
3850            };
3851            // Calling decoder.out_of_line_offset(0) is not allowed.
3852            if len == 0 {
3853                return Ok(());
3854            };
3855            depth.increment()?;
3856            let envelope_size = 8;
3857            let bytes_len = len * envelope_size;
3858            let offset = decoder.out_of_line_offset(bytes_len)?;
3859            // Decode the envelope for each type.
3860            let mut _next_ordinal_to_read = 0;
3861            let mut next_offset = offset;
3862            let end_offset = offset + bytes_len;
3863            _next_ordinal_to_read += 1;
3864            if next_offset >= end_offset {
3865                return Ok(());
3866            }
3867
3868            // Decode unknown envelopes for gaps in ordinals.
3869            while _next_ordinal_to_read < 1 {
3870                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3871                _next_ordinal_to_read += 1;
3872                next_offset += envelope_size;
3873            }
3874
3875            let next_out_of_line = decoder.next_out_of_line();
3876            let handles_before = decoder.remaining_handles();
3877            if let Some((inlined, num_bytes, num_handles)) =
3878                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3879            {
3880                let member_inline_size =
3881                    <fidl::encoding::Array<u8, 6> as fidl::encoding::TypeMarker>::inline_size(
3882                        decoder.context,
3883                    );
3884                if inlined != (member_inline_size <= 4) {
3885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3886                }
3887                let inner_offset;
3888                let mut inner_depth = depth.clone();
3889                if inlined {
3890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3891                    inner_offset = next_offset;
3892                } else {
3893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3894                    inner_depth.increment()?;
3895                }
3896                let val_ref = self
3897                    .bssid
3898                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 6>, D));
3899                fidl::decode!(fidl::encoding::Array<u8, 6>, D, val_ref, decoder, inner_offset, inner_depth)?;
3900                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3901                {
3902                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3903                }
3904                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3905                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3906                }
3907            }
3908
3909            next_offset += envelope_size;
3910            _next_ordinal_to_read += 1;
3911            if next_offset >= end_offset {
3912                return Ok(());
3913            }
3914
3915            // Decode unknown envelopes for gaps in ordinals.
3916            while _next_ordinal_to_read < 2 {
3917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3918                _next_ordinal_to_read += 1;
3919                next_offset += envelope_size;
3920            }
3921
3922            let next_out_of_line = decoder.next_out_of_line();
3923            let handles_before = decoder.remaining_handles();
3924            if let Some((inlined, num_bytes, num_handles)) =
3925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3926            {
3927                let member_inline_size =
3928                    <BssType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3929                if inlined != (member_inline_size <= 4) {
3930                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3931                }
3932                let inner_offset;
3933                let mut inner_depth = depth.clone();
3934                if inlined {
3935                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3936                    inner_offset = next_offset;
3937                } else {
3938                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3939                    inner_depth.increment()?;
3940                }
3941                let val_ref = self.bss_type.get_or_insert_with(|| fidl::new_empty!(BssType, D));
3942                fidl::decode!(BssType, D, val_ref, decoder, inner_offset, inner_depth)?;
3943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3944                {
3945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3946                }
3947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3949                }
3950            }
3951
3952            next_offset += envelope_size;
3953            _next_ordinal_to_read += 1;
3954            if next_offset >= end_offset {
3955                return Ok(());
3956            }
3957
3958            // Decode unknown envelopes for gaps in ordinals.
3959            while _next_ordinal_to_read < 3 {
3960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3961                _next_ordinal_to_read += 1;
3962                next_offset += envelope_size;
3963            }
3964
3965            let next_out_of_line = decoder.next_out_of_line();
3966            let handles_before = decoder.remaining_handles();
3967            if let Some((inlined, num_bytes, num_handles)) =
3968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3969            {
3970                let member_inline_size =
3971                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3972                if inlined != (member_inline_size <= 4) {
3973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3974                }
3975                let inner_offset;
3976                let mut inner_depth = depth.clone();
3977                if inlined {
3978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3979                    inner_offset = next_offset;
3980                } else {
3981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3982                    inner_depth.increment()?;
3983                }
3984                let val_ref = self.remote.get_or_insert_with(|| fidl::new_empty!(bool, D));
3985                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3987                {
3988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3989                }
3990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3992                }
3993            }
3994
3995            next_offset += envelope_size;
3996            _next_ordinal_to_read += 1;
3997            if next_offset >= end_offset {
3998                return Ok(());
3999            }
4000
4001            // Decode unknown envelopes for gaps in ordinals.
4002            while _next_ordinal_to_read < 4 {
4003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4004                _next_ordinal_to_read += 1;
4005                next_offset += envelope_size;
4006            }
4007
4008            let next_out_of_line = decoder.next_out_of_line();
4009            let handles_before = decoder.remaining_handles();
4010            if let Some((inlined, num_bytes, num_handles)) =
4011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4012            {
4013                let member_inline_size =
4014                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4015                if inlined != (member_inline_size <= 4) {
4016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4017                }
4018                let inner_offset;
4019                let mut inner_depth = depth.clone();
4020                if inlined {
4021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4022                    inner_offset = next_offset;
4023                } else {
4024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4025                    inner_depth.increment()?;
4026                }
4027                let val_ref = self.beacon_period.get_or_insert_with(|| fidl::new_empty!(u16, D));
4028                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4029                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4030                {
4031                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4032                }
4033                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4034                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4035                }
4036            }
4037
4038            next_offset += envelope_size;
4039
4040            // Decode the remaining unknown envelopes.
4041            while next_offset < end_offset {
4042                _next_ordinal_to_read += 1;
4043                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4044                next_offset += envelope_size;
4045            }
4046
4047            Ok(())
4048        }
4049    }
4050
4051    impl MacSublayerSupport {
4052        #[inline(always)]
4053        fn max_ordinal_present(&self) -> u64 {
4054            if let Some(_) = self.device {
4055                return 3;
4056            }
4057            if let Some(_) = self.data_plane {
4058                return 2;
4059            }
4060            if let Some(_) = self.rate_selection_offload {
4061                return 1;
4062            }
4063            0
4064        }
4065    }
4066
4067    impl fidl::encoding::ValueTypeMarker for MacSublayerSupport {
4068        type Borrowed<'a> = &'a Self;
4069        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4070            value
4071        }
4072    }
4073
4074    unsafe impl fidl::encoding::TypeMarker for MacSublayerSupport {
4075        type Owned = Self;
4076
4077        #[inline(always)]
4078        fn inline_align(_context: fidl::encoding::Context) -> usize {
4079            8
4080        }
4081
4082        #[inline(always)]
4083        fn inline_size(_context: fidl::encoding::Context) -> usize {
4084            16
4085        }
4086    }
4087
4088    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MacSublayerSupport, D>
4089        for &MacSublayerSupport
4090    {
4091        unsafe fn encode(
4092            self,
4093            encoder: &mut fidl::encoding::Encoder<'_, D>,
4094            offset: usize,
4095            mut depth: fidl::encoding::Depth,
4096        ) -> fidl::Result<()> {
4097            encoder.debug_check_bounds::<MacSublayerSupport>(offset);
4098            // Vector header
4099            let max_ordinal: u64 = self.max_ordinal_present();
4100            encoder.write_num(max_ordinal, offset);
4101            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4102            // Calling encoder.out_of_line_offset(0) is not allowed.
4103            if max_ordinal == 0 {
4104                return Ok(());
4105            }
4106            depth.increment()?;
4107            let envelope_size = 8;
4108            let bytes_len = max_ordinal as usize * envelope_size;
4109            #[allow(unused_variables)]
4110            let offset = encoder.out_of_line_offset(bytes_len);
4111            let mut _prev_end_offset: usize = 0;
4112            if 1 > max_ordinal {
4113                return Ok(());
4114            }
4115
4116            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4117            // are envelope_size bytes.
4118            let cur_offset: usize = (1 - 1) * envelope_size;
4119
4120            // Zero reserved fields.
4121            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4122
4123            // Safety:
4124            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4125            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4126            //   envelope_size bytes, there is always sufficient room.
4127            fidl::encoding::encode_in_envelope_optional::<RateSelectionOffloadExtension, D>(
4128                self.rate_selection_offload.as_ref().map(
4129                    <RateSelectionOffloadExtension as fidl::encoding::ValueTypeMarker>::borrow,
4130                ),
4131                encoder,
4132                offset + cur_offset,
4133                depth,
4134            )?;
4135
4136            _prev_end_offset = cur_offset + envelope_size;
4137            if 2 > max_ordinal {
4138                return Ok(());
4139            }
4140
4141            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4142            // are envelope_size bytes.
4143            let cur_offset: usize = (2 - 1) * envelope_size;
4144
4145            // Zero reserved fields.
4146            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4147
4148            // Safety:
4149            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4150            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4151            //   envelope_size bytes, there is always sufficient room.
4152            fidl::encoding::encode_in_envelope_optional::<DataPlaneExtension, D>(
4153                self.data_plane
4154                    .as_ref()
4155                    .map(<DataPlaneExtension as fidl::encoding::ValueTypeMarker>::borrow),
4156                encoder,
4157                offset + cur_offset,
4158                depth,
4159            )?;
4160
4161            _prev_end_offset = cur_offset + envelope_size;
4162            if 3 > max_ordinal {
4163                return Ok(());
4164            }
4165
4166            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4167            // are envelope_size bytes.
4168            let cur_offset: usize = (3 - 1) * envelope_size;
4169
4170            // Zero reserved fields.
4171            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4172
4173            // Safety:
4174            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4175            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4176            //   envelope_size bytes, there is always sufficient room.
4177            fidl::encoding::encode_in_envelope_optional::<DeviceExtension, D>(
4178                self.device
4179                    .as_ref()
4180                    .map(<DeviceExtension as fidl::encoding::ValueTypeMarker>::borrow),
4181                encoder,
4182                offset + cur_offset,
4183                depth,
4184            )?;
4185
4186            _prev_end_offset = cur_offset + envelope_size;
4187
4188            Ok(())
4189        }
4190    }
4191
4192    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MacSublayerSupport {
4193        #[inline(always)]
4194        fn new_empty() -> Self {
4195            Self::default()
4196        }
4197
4198        unsafe fn decode(
4199            &mut self,
4200            decoder: &mut fidl::encoding::Decoder<'_, D>,
4201            offset: usize,
4202            mut depth: fidl::encoding::Depth,
4203        ) -> fidl::Result<()> {
4204            decoder.debug_check_bounds::<Self>(offset);
4205            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4206                None => return Err(fidl::Error::NotNullable),
4207                Some(len) => len,
4208            };
4209            // Calling decoder.out_of_line_offset(0) is not allowed.
4210            if len == 0 {
4211                return Ok(());
4212            };
4213            depth.increment()?;
4214            let envelope_size = 8;
4215            let bytes_len = len * envelope_size;
4216            let offset = decoder.out_of_line_offset(bytes_len)?;
4217            // Decode the envelope for each type.
4218            let mut _next_ordinal_to_read = 0;
4219            let mut next_offset = offset;
4220            let end_offset = offset + bytes_len;
4221            _next_ordinal_to_read += 1;
4222            if next_offset >= end_offset {
4223                return Ok(());
4224            }
4225
4226            // Decode unknown envelopes for gaps in ordinals.
4227            while _next_ordinal_to_read < 1 {
4228                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4229                _next_ordinal_to_read += 1;
4230                next_offset += envelope_size;
4231            }
4232
4233            let next_out_of_line = decoder.next_out_of_line();
4234            let handles_before = decoder.remaining_handles();
4235            if let Some((inlined, num_bytes, num_handles)) =
4236                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4237            {
4238                let member_inline_size =
4239                    <RateSelectionOffloadExtension as fidl::encoding::TypeMarker>::inline_size(
4240                        decoder.context,
4241                    );
4242                if inlined != (member_inline_size <= 4) {
4243                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4244                }
4245                let inner_offset;
4246                let mut inner_depth = depth.clone();
4247                if inlined {
4248                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4249                    inner_offset = next_offset;
4250                } else {
4251                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4252                    inner_depth.increment()?;
4253                }
4254                let val_ref = self
4255                    .rate_selection_offload
4256                    .get_or_insert_with(|| fidl::new_empty!(RateSelectionOffloadExtension, D));
4257                fidl::decode!(
4258                    RateSelectionOffloadExtension,
4259                    D,
4260                    val_ref,
4261                    decoder,
4262                    inner_offset,
4263                    inner_depth
4264                )?;
4265                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4266                {
4267                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4268                }
4269                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4270                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4271                }
4272            }
4273
4274            next_offset += envelope_size;
4275            _next_ordinal_to_read += 1;
4276            if next_offset >= end_offset {
4277                return Ok(());
4278            }
4279
4280            // Decode unknown envelopes for gaps in ordinals.
4281            while _next_ordinal_to_read < 2 {
4282                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4283                _next_ordinal_to_read += 1;
4284                next_offset += envelope_size;
4285            }
4286
4287            let next_out_of_line = decoder.next_out_of_line();
4288            let handles_before = decoder.remaining_handles();
4289            if let Some((inlined, num_bytes, num_handles)) =
4290                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4291            {
4292                let member_inline_size =
4293                    <DataPlaneExtension as fidl::encoding::TypeMarker>::inline_size(
4294                        decoder.context,
4295                    );
4296                if inlined != (member_inline_size <= 4) {
4297                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4298                }
4299                let inner_offset;
4300                let mut inner_depth = depth.clone();
4301                if inlined {
4302                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4303                    inner_offset = next_offset;
4304                } else {
4305                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4306                    inner_depth.increment()?;
4307                }
4308                let val_ref =
4309                    self.data_plane.get_or_insert_with(|| fidl::new_empty!(DataPlaneExtension, D));
4310                fidl::decode!(DataPlaneExtension, D, val_ref, decoder, inner_offset, inner_depth)?;
4311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4312                {
4313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4314                }
4315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4317                }
4318            }
4319
4320            next_offset += envelope_size;
4321            _next_ordinal_to_read += 1;
4322            if next_offset >= end_offset {
4323                return Ok(());
4324            }
4325
4326            // Decode unknown envelopes for gaps in ordinals.
4327            while _next_ordinal_to_read < 3 {
4328                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4329                _next_ordinal_to_read += 1;
4330                next_offset += envelope_size;
4331            }
4332
4333            let next_out_of_line = decoder.next_out_of_line();
4334            let handles_before = decoder.remaining_handles();
4335            if let Some((inlined, num_bytes, num_handles)) =
4336                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4337            {
4338                let member_inline_size =
4339                    <DeviceExtension as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4340                if inlined != (member_inline_size <= 4) {
4341                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4342                }
4343                let inner_offset;
4344                let mut inner_depth = depth.clone();
4345                if inlined {
4346                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4347                    inner_offset = next_offset;
4348                } else {
4349                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4350                    inner_depth.increment()?;
4351                }
4352                let val_ref =
4353                    self.device.get_or_insert_with(|| fidl::new_empty!(DeviceExtension, D));
4354                fidl::decode!(DeviceExtension, D, val_ref, decoder, inner_offset, inner_depth)?;
4355                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4356                {
4357                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4358                }
4359                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4360                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4361                }
4362            }
4363
4364            next_offset += envelope_size;
4365
4366            // Decode the remaining unknown envelopes.
4367            while next_offset < end_offset {
4368                _next_ordinal_to_read += 1;
4369                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4370                next_offset += envelope_size;
4371            }
4372
4373            Ok(())
4374        }
4375    }
4376
4377    impl MfpFeature {
4378        #[inline(always)]
4379        fn max_ordinal_present(&self) -> u64 {
4380            if let Some(_) = self.supported {
4381                return 1;
4382            }
4383            0
4384        }
4385    }
4386
4387    impl fidl::encoding::ValueTypeMarker for MfpFeature {
4388        type Borrowed<'a> = &'a Self;
4389        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4390            value
4391        }
4392    }
4393
4394    unsafe impl fidl::encoding::TypeMarker for MfpFeature {
4395        type Owned = Self;
4396
4397        #[inline(always)]
4398        fn inline_align(_context: fidl::encoding::Context) -> usize {
4399            8
4400        }
4401
4402        #[inline(always)]
4403        fn inline_size(_context: fidl::encoding::Context) -> usize {
4404            16
4405        }
4406    }
4407
4408    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MfpFeature, D>
4409        for &MfpFeature
4410    {
4411        unsafe fn encode(
4412            self,
4413            encoder: &mut fidl::encoding::Encoder<'_, D>,
4414            offset: usize,
4415            mut depth: fidl::encoding::Depth,
4416        ) -> fidl::Result<()> {
4417            encoder.debug_check_bounds::<MfpFeature>(offset);
4418            // Vector header
4419            let max_ordinal: u64 = self.max_ordinal_present();
4420            encoder.write_num(max_ordinal, offset);
4421            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4422            // Calling encoder.out_of_line_offset(0) is not allowed.
4423            if max_ordinal == 0 {
4424                return Ok(());
4425            }
4426            depth.increment()?;
4427            let envelope_size = 8;
4428            let bytes_len = max_ordinal as usize * envelope_size;
4429            #[allow(unused_variables)]
4430            let offset = encoder.out_of_line_offset(bytes_len);
4431            let mut _prev_end_offset: usize = 0;
4432            if 1 > max_ordinal {
4433                return Ok(());
4434            }
4435
4436            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4437            // are envelope_size bytes.
4438            let cur_offset: usize = (1 - 1) * envelope_size;
4439
4440            // Zero reserved fields.
4441            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4442
4443            // Safety:
4444            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4445            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4446            //   envelope_size bytes, there is always sufficient room.
4447            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4448                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4449                encoder,
4450                offset + cur_offset,
4451                depth,
4452            )?;
4453
4454            _prev_end_offset = cur_offset + envelope_size;
4455
4456            Ok(())
4457        }
4458    }
4459
4460    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MfpFeature {
4461        #[inline(always)]
4462        fn new_empty() -> Self {
4463            Self::default()
4464        }
4465
4466        unsafe fn decode(
4467            &mut self,
4468            decoder: &mut fidl::encoding::Decoder<'_, D>,
4469            offset: usize,
4470            mut depth: fidl::encoding::Depth,
4471        ) -> fidl::Result<()> {
4472            decoder.debug_check_bounds::<Self>(offset);
4473            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4474                None => return Err(fidl::Error::NotNullable),
4475                Some(len) => len,
4476            };
4477            // Calling decoder.out_of_line_offset(0) is not allowed.
4478            if len == 0 {
4479                return Ok(());
4480            };
4481            depth.increment()?;
4482            let envelope_size = 8;
4483            let bytes_len = len * envelope_size;
4484            let offset = decoder.out_of_line_offset(bytes_len)?;
4485            // Decode the envelope for each type.
4486            let mut _next_ordinal_to_read = 0;
4487            let mut next_offset = offset;
4488            let end_offset = offset + bytes_len;
4489            _next_ordinal_to_read += 1;
4490            if next_offset >= end_offset {
4491                return Ok(());
4492            }
4493
4494            // Decode unknown envelopes for gaps in ordinals.
4495            while _next_ordinal_to_read < 1 {
4496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4497                _next_ordinal_to_read += 1;
4498                next_offset += envelope_size;
4499            }
4500
4501            let next_out_of_line = decoder.next_out_of_line();
4502            let handles_before = decoder.remaining_handles();
4503            if let Some((inlined, num_bytes, num_handles)) =
4504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4505            {
4506                let member_inline_size =
4507                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4508                if inlined != (member_inline_size <= 4) {
4509                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4510                }
4511                let inner_offset;
4512                let mut inner_depth = depth.clone();
4513                if inlined {
4514                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4515                    inner_offset = next_offset;
4516                } else {
4517                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4518                    inner_depth.increment()?;
4519                }
4520                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
4521                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4522                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4523                {
4524                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4525                }
4526                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4527                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4528                }
4529            }
4530
4531            next_offset += envelope_size;
4532
4533            // Decode the remaining unknown envelopes.
4534            while next_offset < end_offset {
4535                _next_ordinal_to_read += 1;
4536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4537                next_offset += envelope_size;
4538            }
4539
4540            Ok(())
4541        }
4542    }
4543
4544    impl ProbeResponseOffloadExtension {
4545        #[inline(always)]
4546        fn max_ordinal_present(&self) -> u64 {
4547            if let Some(_) = self.supported {
4548                return 1;
4549            }
4550            0
4551        }
4552    }
4553
4554    impl fidl::encoding::ValueTypeMarker for ProbeResponseOffloadExtension {
4555        type Borrowed<'a> = &'a Self;
4556        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4557            value
4558        }
4559    }
4560
4561    unsafe impl fidl::encoding::TypeMarker for ProbeResponseOffloadExtension {
4562        type Owned = Self;
4563
4564        #[inline(always)]
4565        fn inline_align(_context: fidl::encoding::Context) -> usize {
4566            8
4567        }
4568
4569        #[inline(always)]
4570        fn inline_size(_context: fidl::encoding::Context) -> usize {
4571            16
4572        }
4573    }
4574
4575    unsafe impl<D: fidl::encoding::ResourceDialect>
4576        fidl::encoding::Encode<ProbeResponseOffloadExtension, D>
4577        for &ProbeResponseOffloadExtension
4578    {
4579        unsafe fn encode(
4580            self,
4581            encoder: &mut fidl::encoding::Encoder<'_, D>,
4582            offset: usize,
4583            mut depth: fidl::encoding::Depth,
4584        ) -> fidl::Result<()> {
4585            encoder.debug_check_bounds::<ProbeResponseOffloadExtension>(offset);
4586            // Vector header
4587            let max_ordinal: u64 = self.max_ordinal_present();
4588            encoder.write_num(max_ordinal, offset);
4589            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4590            // Calling encoder.out_of_line_offset(0) is not allowed.
4591            if max_ordinal == 0 {
4592                return Ok(());
4593            }
4594            depth.increment()?;
4595            let envelope_size = 8;
4596            let bytes_len = max_ordinal as usize * envelope_size;
4597            #[allow(unused_variables)]
4598            let offset = encoder.out_of_line_offset(bytes_len);
4599            let mut _prev_end_offset: usize = 0;
4600            if 1 > max_ordinal {
4601                return Ok(());
4602            }
4603
4604            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4605            // are envelope_size bytes.
4606            let cur_offset: usize = (1 - 1) * envelope_size;
4607
4608            // Zero reserved fields.
4609            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4610
4611            // Safety:
4612            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4613            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4614            //   envelope_size bytes, there is always sufficient room.
4615            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4616                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4617                encoder,
4618                offset + cur_offset,
4619                depth,
4620            )?;
4621
4622            _prev_end_offset = cur_offset + envelope_size;
4623
4624            Ok(())
4625        }
4626    }
4627
4628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4629        for ProbeResponseOffloadExtension
4630    {
4631        #[inline(always)]
4632        fn new_empty() -> Self {
4633            Self::default()
4634        }
4635
4636        unsafe fn decode(
4637            &mut self,
4638            decoder: &mut fidl::encoding::Decoder<'_, D>,
4639            offset: usize,
4640            mut depth: fidl::encoding::Depth,
4641        ) -> fidl::Result<()> {
4642            decoder.debug_check_bounds::<Self>(offset);
4643            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4644                None => return Err(fidl::Error::NotNullable),
4645                Some(len) => len,
4646            };
4647            // Calling decoder.out_of_line_offset(0) is not allowed.
4648            if len == 0 {
4649                return Ok(());
4650            };
4651            depth.increment()?;
4652            let envelope_size = 8;
4653            let bytes_len = len * envelope_size;
4654            let offset = decoder.out_of_line_offset(bytes_len)?;
4655            // Decode the envelope for each type.
4656            let mut _next_ordinal_to_read = 0;
4657            let mut next_offset = offset;
4658            let end_offset = offset + bytes_len;
4659            _next_ordinal_to_read += 1;
4660            if next_offset >= end_offset {
4661                return Ok(());
4662            }
4663
4664            // Decode unknown envelopes for gaps in ordinals.
4665            while _next_ordinal_to_read < 1 {
4666                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4667                _next_ordinal_to_read += 1;
4668                next_offset += envelope_size;
4669            }
4670
4671            let next_out_of_line = decoder.next_out_of_line();
4672            let handles_before = decoder.remaining_handles();
4673            if let Some((inlined, num_bytes, num_handles)) =
4674                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4675            {
4676                let member_inline_size =
4677                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4678                if inlined != (member_inline_size <= 4) {
4679                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4680                }
4681                let inner_offset;
4682                let mut inner_depth = depth.clone();
4683                if inlined {
4684                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4685                    inner_offset = next_offset;
4686                } else {
4687                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4688                    inner_depth.increment()?;
4689                }
4690                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
4691                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4692                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4693                {
4694                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4695                }
4696                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4697                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4698                }
4699            }
4700
4701            next_offset += envelope_size;
4702
4703            // Decode the remaining unknown envelopes.
4704            while next_offset < end_offset {
4705                _next_ordinal_to_read += 1;
4706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4707                next_offset += envelope_size;
4708            }
4709
4710            Ok(())
4711        }
4712    }
4713
4714    impl RateSelectionOffloadExtension {
4715        #[inline(always)]
4716        fn max_ordinal_present(&self) -> u64 {
4717            if let Some(_) = self.supported {
4718                return 1;
4719            }
4720            0
4721        }
4722    }
4723
4724    impl fidl::encoding::ValueTypeMarker for RateSelectionOffloadExtension {
4725        type Borrowed<'a> = &'a Self;
4726        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4727            value
4728        }
4729    }
4730
4731    unsafe impl fidl::encoding::TypeMarker for RateSelectionOffloadExtension {
4732        type Owned = Self;
4733
4734        #[inline(always)]
4735        fn inline_align(_context: fidl::encoding::Context) -> usize {
4736            8
4737        }
4738
4739        #[inline(always)]
4740        fn inline_size(_context: fidl::encoding::Context) -> usize {
4741            16
4742        }
4743    }
4744
4745    unsafe impl<D: fidl::encoding::ResourceDialect>
4746        fidl::encoding::Encode<RateSelectionOffloadExtension, D>
4747        for &RateSelectionOffloadExtension
4748    {
4749        unsafe fn encode(
4750            self,
4751            encoder: &mut fidl::encoding::Encoder<'_, D>,
4752            offset: usize,
4753            mut depth: fidl::encoding::Depth,
4754        ) -> fidl::Result<()> {
4755            encoder.debug_check_bounds::<RateSelectionOffloadExtension>(offset);
4756            // Vector header
4757            let max_ordinal: u64 = self.max_ordinal_present();
4758            encoder.write_num(max_ordinal, offset);
4759            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4760            // Calling encoder.out_of_line_offset(0) is not allowed.
4761            if max_ordinal == 0 {
4762                return Ok(());
4763            }
4764            depth.increment()?;
4765            let envelope_size = 8;
4766            let bytes_len = max_ordinal as usize * envelope_size;
4767            #[allow(unused_variables)]
4768            let offset = encoder.out_of_line_offset(bytes_len);
4769            let mut _prev_end_offset: usize = 0;
4770            if 1 > max_ordinal {
4771                return Ok(());
4772            }
4773
4774            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4775            // are envelope_size bytes.
4776            let cur_offset: usize = (1 - 1) * envelope_size;
4777
4778            // Zero reserved fields.
4779            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4780
4781            // Safety:
4782            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4783            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4784            //   envelope_size bytes, there is always sufficient room.
4785            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4786                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4787                encoder,
4788                offset + cur_offset,
4789                depth,
4790            )?;
4791
4792            _prev_end_offset = cur_offset + envelope_size;
4793
4794            Ok(())
4795        }
4796    }
4797
4798    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4799        for RateSelectionOffloadExtension
4800    {
4801        #[inline(always)]
4802        fn new_empty() -> Self {
4803            Self::default()
4804        }
4805
4806        unsafe fn decode(
4807            &mut self,
4808            decoder: &mut fidl::encoding::Decoder<'_, D>,
4809            offset: usize,
4810            mut depth: fidl::encoding::Depth,
4811        ) -> fidl::Result<()> {
4812            decoder.debug_check_bounds::<Self>(offset);
4813            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4814                None => return Err(fidl::Error::NotNullable),
4815                Some(len) => len,
4816            };
4817            // Calling decoder.out_of_line_offset(0) is not allowed.
4818            if len == 0 {
4819                return Ok(());
4820            };
4821            depth.increment()?;
4822            let envelope_size = 8;
4823            let bytes_len = len * envelope_size;
4824            let offset = decoder.out_of_line_offset(bytes_len)?;
4825            // Decode the envelope for each type.
4826            let mut _next_ordinal_to_read = 0;
4827            let mut next_offset = offset;
4828            let end_offset = offset + bytes_len;
4829            _next_ordinal_to_read += 1;
4830            if next_offset >= end_offset {
4831                return Ok(());
4832            }
4833
4834            // Decode unknown envelopes for gaps in ordinals.
4835            while _next_ordinal_to_read < 1 {
4836                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4837                _next_ordinal_to_read += 1;
4838                next_offset += envelope_size;
4839            }
4840
4841            let next_out_of_line = decoder.next_out_of_line();
4842            let handles_before = decoder.remaining_handles();
4843            if let Some((inlined, num_bytes, num_handles)) =
4844                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4845            {
4846                let member_inline_size =
4847                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4848                if inlined != (member_inline_size <= 4) {
4849                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4850                }
4851                let inner_offset;
4852                let mut inner_depth = depth.clone();
4853                if inlined {
4854                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4855                    inner_offset = next_offset;
4856                } else {
4857                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4858                    inner_depth.increment()?;
4859                }
4860                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
4861                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4862                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4863                {
4864                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4865                }
4866                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4867                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4868                }
4869            }
4870
4871            next_offset += envelope_size;
4872
4873            // Decode the remaining unknown envelopes.
4874            while next_offset < end_offset {
4875                _next_ordinal_to_read += 1;
4876                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4877                next_offset += envelope_size;
4878            }
4879
4880            Ok(())
4881        }
4882    }
4883
4884    impl SaeFeature {
4885        #[inline(always)]
4886        fn max_ordinal_present(&self) -> u64 {
4887            if let Some(_) = self.sme_handler_supported {
4888                return 2;
4889            }
4890            if let Some(_) = self.driver_handler_supported {
4891                return 1;
4892            }
4893            0
4894        }
4895    }
4896
4897    impl fidl::encoding::ValueTypeMarker for SaeFeature {
4898        type Borrowed<'a> = &'a Self;
4899        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4900            value
4901        }
4902    }
4903
4904    unsafe impl fidl::encoding::TypeMarker for SaeFeature {
4905        type Owned = Self;
4906
4907        #[inline(always)]
4908        fn inline_align(_context: fidl::encoding::Context) -> usize {
4909            8
4910        }
4911
4912        #[inline(always)]
4913        fn inline_size(_context: fidl::encoding::Context) -> usize {
4914            16
4915        }
4916    }
4917
4918    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SaeFeature, D>
4919        for &SaeFeature
4920    {
4921        unsafe fn encode(
4922            self,
4923            encoder: &mut fidl::encoding::Encoder<'_, D>,
4924            offset: usize,
4925            mut depth: fidl::encoding::Depth,
4926        ) -> fidl::Result<()> {
4927            encoder.debug_check_bounds::<SaeFeature>(offset);
4928            // Vector header
4929            let max_ordinal: u64 = self.max_ordinal_present();
4930            encoder.write_num(max_ordinal, offset);
4931            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4932            // Calling encoder.out_of_line_offset(0) is not allowed.
4933            if max_ordinal == 0 {
4934                return Ok(());
4935            }
4936            depth.increment()?;
4937            let envelope_size = 8;
4938            let bytes_len = max_ordinal as usize * envelope_size;
4939            #[allow(unused_variables)]
4940            let offset = encoder.out_of_line_offset(bytes_len);
4941            let mut _prev_end_offset: usize = 0;
4942            if 1 > max_ordinal {
4943                return Ok(());
4944            }
4945
4946            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4947            // are envelope_size bytes.
4948            let cur_offset: usize = (1 - 1) * envelope_size;
4949
4950            // Zero reserved fields.
4951            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4952
4953            // Safety:
4954            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4955            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4956            //   envelope_size bytes, there is always sufficient room.
4957            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4958                self.driver_handler_supported
4959                    .as_ref()
4960                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4961                encoder,
4962                offset + cur_offset,
4963                depth,
4964            )?;
4965
4966            _prev_end_offset = cur_offset + envelope_size;
4967            if 2 > max_ordinal {
4968                return Ok(());
4969            }
4970
4971            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4972            // are envelope_size bytes.
4973            let cur_offset: usize = (2 - 1) * envelope_size;
4974
4975            // Zero reserved fields.
4976            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4977
4978            // Safety:
4979            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4980            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4981            //   envelope_size bytes, there is always sufficient room.
4982            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4983                self.sme_handler_supported
4984                    .as_ref()
4985                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4986                encoder,
4987                offset + cur_offset,
4988                depth,
4989            )?;
4990
4991            _prev_end_offset = cur_offset + envelope_size;
4992
4993            Ok(())
4994        }
4995    }
4996
4997    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SaeFeature {
4998        #[inline(always)]
4999        fn new_empty() -> Self {
5000            Self::default()
5001        }
5002
5003        unsafe fn decode(
5004            &mut self,
5005            decoder: &mut fidl::encoding::Decoder<'_, D>,
5006            offset: usize,
5007            mut depth: fidl::encoding::Depth,
5008        ) -> fidl::Result<()> {
5009            decoder.debug_check_bounds::<Self>(offset);
5010            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5011                None => return Err(fidl::Error::NotNullable),
5012                Some(len) => len,
5013            };
5014            // Calling decoder.out_of_line_offset(0) is not allowed.
5015            if len == 0 {
5016                return Ok(());
5017            };
5018            depth.increment()?;
5019            let envelope_size = 8;
5020            let bytes_len = len * envelope_size;
5021            let offset = decoder.out_of_line_offset(bytes_len)?;
5022            // Decode the envelope for each type.
5023            let mut _next_ordinal_to_read = 0;
5024            let mut next_offset = offset;
5025            let end_offset = offset + bytes_len;
5026            _next_ordinal_to_read += 1;
5027            if next_offset >= end_offset {
5028                return Ok(());
5029            }
5030
5031            // Decode unknown envelopes for gaps in ordinals.
5032            while _next_ordinal_to_read < 1 {
5033                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5034                _next_ordinal_to_read += 1;
5035                next_offset += envelope_size;
5036            }
5037
5038            let next_out_of_line = decoder.next_out_of_line();
5039            let handles_before = decoder.remaining_handles();
5040            if let Some((inlined, num_bytes, num_handles)) =
5041                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5042            {
5043                let member_inline_size =
5044                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5045                if inlined != (member_inline_size <= 4) {
5046                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5047                }
5048                let inner_offset;
5049                let mut inner_depth = depth.clone();
5050                if inlined {
5051                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5052                    inner_offset = next_offset;
5053                } else {
5054                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5055                    inner_depth.increment()?;
5056                }
5057                let val_ref =
5058                    self.driver_handler_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5059                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5060                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5061                {
5062                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5063                }
5064                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5065                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5066                }
5067            }
5068
5069            next_offset += envelope_size;
5070            _next_ordinal_to_read += 1;
5071            if next_offset >= end_offset {
5072                return Ok(());
5073            }
5074
5075            // Decode unknown envelopes for gaps in ordinals.
5076            while _next_ordinal_to_read < 2 {
5077                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5078                _next_ordinal_to_read += 1;
5079                next_offset += envelope_size;
5080            }
5081
5082            let next_out_of_line = decoder.next_out_of_line();
5083            let handles_before = decoder.remaining_handles();
5084            if let Some((inlined, num_bytes, num_handles)) =
5085                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5086            {
5087                let member_inline_size =
5088                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5089                if inlined != (member_inline_size <= 4) {
5090                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5091                }
5092                let inner_offset;
5093                let mut inner_depth = depth.clone();
5094                if inlined {
5095                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5096                    inner_offset = next_offset;
5097                } else {
5098                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5099                    inner_depth.increment()?;
5100                }
5101                let val_ref =
5102                    self.sme_handler_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5103                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5104                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5105                {
5106                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5107                }
5108                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5109                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5110                }
5111            }
5112
5113            next_offset += envelope_size;
5114
5115            // Decode the remaining unknown envelopes.
5116            while next_offset < end_offset {
5117                _next_ordinal_to_read += 1;
5118                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5119                next_offset += envelope_size;
5120            }
5121
5122            Ok(())
5123        }
5124    }
5125
5126    impl ScanOffloadExtension {
5127        #[inline(always)]
5128        fn max_ordinal_present(&self) -> u64 {
5129            if let Some(_) = self.scan_cancel_supported {
5130                return 2;
5131            }
5132            if let Some(_) = self.supported {
5133                return 1;
5134            }
5135            0
5136        }
5137    }
5138
5139    impl fidl::encoding::ValueTypeMarker for ScanOffloadExtension {
5140        type Borrowed<'a> = &'a Self;
5141        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5142            value
5143        }
5144    }
5145
5146    unsafe impl fidl::encoding::TypeMarker for ScanOffloadExtension {
5147        type Owned = Self;
5148
5149        #[inline(always)]
5150        fn inline_align(_context: fidl::encoding::Context) -> usize {
5151            8
5152        }
5153
5154        #[inline(always)]
5155        fn inline_size(_context: fidl::encoding::Context) -> usize {
5156            16
5157        }
5158    }
5159
5160    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScanOffloadExtension, D>
5161        for &ScanOffloadExtension
5162    {
5163        unsafe fn encode(
5164            self,
5165            encoder: &mut fidl::encoding::Encoder<'_, D>,
5166            offset: usize,
5167            mut depth: fidl::encoding::Depth,
5168        ) -> fidl::Result<()> {
5169            encoder.debug_check_bounds::<ScanOffloadExtension>(offset);
5170            // Vector header
5171            let max_ordinal: u64 = self.max_ordinal_present();
5172            encoder.write_num(max_ordinal, offset);
5173            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5174            // Calling encoder.out_of_line_offset(0) is not allowed.
5175            if max_ordinal == 0 {
5176                return Ok(());
5177            }
5178            depth.increment()?;
5179            let envelope_size = 8;
5180            let bytes_len = max_ordinal as usize * envelope_size;
5181            #[allow(unused_variables)]
5182            let offset = encoder.out_of_line_offset(bytes_len);
5183            let mut _prev_end_offset: usize = 0;
5184            if 1 > max_ordinal {
5185                return Ok(());
5186            }
5187
5188            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5189            // are envelope_size bytes.
5190            let cur_offset: usize = (1 - 1) * envelope_size;
5191
5192            // Zero reserved fields.
5193            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5194
5195            // Safety:
5196            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5197            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5198            //   envelope_size bytes, there is always sufficient room.
5199            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5200                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5201                encoder,
5202                offset + cur_offset,
5203                depth,
5204            )?;
5205
5206            _prev_end_offset = cur_offset + envelope_size;
5207            if 2 > max_ordinal {
5208                return Ok(());
5209            }
5210
5211            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5212            // are envelope_size bytes.
5213            let cur_offset: usize = (2 - 1) * envelope_size;
5214
5215            // Zero reserved fields.
5216            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5217
5218            // Safety:
5219            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5220            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5221            //   envelope_size bytes, there is always sufficient room.
5222            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5223                self.scan_cancel_supported
5224                    .as_ref()
5225                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5226                encoder,
5227                offset + cur_offset,
5228                depth,
5229            )?;
5230
5231            _prev_end_offset = cur_offset + envelope_size;
5232
5233            Ok(())
5234        }
5235    }
5236
5237    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanOffloadExtension {
5238        #[inline(always)]
5239        fn new_empty() -> Self {
5240            Self::default()
5241        }
5242
5243        unsafe fn decode(
5244            &mut self,
5245            decoder: &mut fidl::encoding::Decoder<'_, D>,
5246            offset: usize,
5247            mut depth: fidl::encoding::Depth,
5248        ) -> fidl::Result<()> {
5249            decoder.debug_check_bounds::<Self>(offset);
5250            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5251                None => return Err(fidl::Error::NotNullable),
5252                Some(len) => len,
5253            };
5254            // Calling decoder.out_of_line_offset(0) is not allowed.
5255            if len == 0 {
5256                return Ok(());
5257            };
5258            depth.increment()?;
5259            let envelope_size = 8;
5260            let bytes_len = len * envelope_size;
5261            let offset = decoder.out_of_line_offset(bytes_len)?;
5262            // Decode the envelope for each type.
5263            let mut _next_ordinal_to_read = 0;
5264            let mut next_offset = offset;
5265            let end_offset = offset + bytes_len;
5266            _next_ordinal_to_read += 1;
5267            if next_offset >= end_offset {
5268                return Ok(());
5269            }
5270
5271            // Decode unknown envelopes for gaps in ordinals.
5272            while _next_ordinal_to_read < 1 {
5273                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5274                _next_ordinal_to_read += 1;
5275                next_offset += envelope_size;
5276            }
5277
5278            let next_out_of_line = decoder.next_out_of_line();
5279            let handles_before = decoder.remaining_handles();
5280            if let Some((inlined, num_bytes, num_handles)) =
5281                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5282            {
5283                let member_inline_size =
5284                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5285                if inlined != (member_inline_size <= 4) {
5286                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5287                }
5288                let inner_offset;
5289                let mut inner_depth = depth.clone();
5290                if inlined {
5291                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5292                    inner_offset = next_offset;
5293                } else {
5294                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5295                    inner_depth.increment()?;
5296                }
5297                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5298                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5299                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5300                {
5301                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5302                }
5303                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5304                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5305                }
5306            }
5307
5308            next_offset += envelope_size;
5309            _next_ordinal_to_read += 1;
5310            if next_offset >= end_offset {
5311                return Ok(());
5312            }
5313
5314            // Decode unknown envelopes for gaps in ordinals.
5315            while _next_ordinal_to_read < 2 {
5316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5317                _next_ordinal_to_read += 1;
5318                next_offset += envelope_size;
5319            }
5320
5321            let next_out_of_line = decoder.next_out_of_line();
5322            let handles_before = decoder.remaining_handles();
5323            if let Some((inlined, num_bytes, num_handles)) =
5324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5325            {
5326                let member_inline_size =
5327                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5328                if inlined != (member_inline_size <= 4) {
5329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5330                }
5331                let inner_offset;
5332                let mut inner_depth = depth.clone();
5333                if inlined {
5334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5335                    inner_offset = next_offset;
5336                } else {
5337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5338                    inner_depth.increment()?;
5339                }
5340                let val_ref =
5341                    self.scan_cancel_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5342                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5343                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5344                {
5345                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5346                }
5347                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5348                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5349                }
5350            }
5351
5352            next_offset += envelope_size;
5353
5354            // Decode the remaining unknown envelopes.
5355            while next_offset < end_offset {
5356                _next_ordinal_to_read += 1;
5357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5358                next_offset += envelope_size;
5359            }
5360
5361            Ok(())
5362        }
5363    }
5364
5365    impl SecuritySupport {
5366        #[inline(always)]
5367        fn max_ordinal_present(&self) -> u64 {
5368            if let Some(_) = self.mfp {
5369                return 2;
5370            }
5371            if let Some(_) = self.sae {
5372                return 1;
5373            }
5374            0
5375        }
5376    }
5377
5378    impl fidl::encoding::ValueTypeMarker for SecuritySupport {
5379        type Borrowed<'a> = &'a Self;
5380        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5381            value
5382        }
5383    }
5384
5385    unsafe impl fidl::encoding::TypeMarker for SecuritySupport {
5386        type Owned = Self;
5387
5388        #[inline(always)]
5389        fn inline_align(_context: fidl::encoding::Context) -> usize {
5390            8
5391        }
5392
5393        #[inline(always)]
5394        fn inline_size(_context: fidl::encoding::Context) -> usize {
5395            16
5396        }
5397    }
5398
5399    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecuritySupport, D>
5400        for &SecuritySupport
5401    {
5402        unsafe fn encode(
5403            self,
5404            encoder: &mut fidl::encoding::Encoder<'_, D>,
5405            offset: usize,
5406            mut depth: fidl::encoding::Depth,
5407        ) -> fidl::Result<()> {
5408            encoder.debug_check_bounds::<SecuritySupport>(offset);
5409            // Vector header
5410            let max_ordinal: u64 = self.max_ordinal_present();
5411            encoder.write_num(max_ordinal, offset);
5412            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5413            // Calling encoder.out_of_line_offset(0) is not allowed.
5414            if max_ordinal == 0 {
5415                return Ok(());
5416            }
5417            depth.increment()?;
5418            let envelope_size = 8;
5419            let bytes_len = max_ordinal as usize * envelope_size;
5420            #[allow(unused_variables)]
5421            let offset = encoder.out_of_line_offset(bytes_len);
5422            let mut _prev_end_offset: usize = 0;
5423            if 1 > max_ordinal {
5424                return Ok(());
5425            }
5426
5427            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5428            // are envelope_size bytes.
5429            let cur_offset: usize = (1 - 1) * envelope_size;
5430
5431            // Zero reserved fields.
5432            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5433
5434            // Safety:
5435            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5436            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5437            //   envelope_size bytes, there is always sufficient room.
5438            fidl::encoding::encode_in_envelope_optional::<SaeFeature, D>(
5439                self.sae.as_ref().map(<SaeFeature as fidl::encoding::ValueTypeMarker>::borrow),
5440                encoder,
5441                offset + cur_offset,
5442                depth,
5443            )?;
5444
5445            _prev_end_offset = cur_offset + envelope_size;
5446            if 2 > max_ordinal {
5447                return Ok(());
5448            }
5449
5450            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5451            // are envelope_size bytes.
5452            let cur_offset: usize = (2 - 1) * envelope_size;
5453
5454            // Zero reserved fields.
5455            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5456
5457            // Safety:
5458            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5459            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5460            //   envelope_size bytes, there is always sufficient room.
5461            fidl::encoding::encode_in_envelope_optional::<MfpFeature, D>(
5462                self.mfp.as_ref().map(<MfpFeature as fidl::encoding::ValueTypeMarker>::borrow),
5463                encoder,
5464                offset + cur_offset,
5465                depth,
5466            )?;
5467
5468            _prev_end_offset = cur_offset + envelope_size;
5469
5470            Ok(())
5471        }
5472    }
5473
5474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecuritySupport {
5475        #[inline(always)]
5476        fn new_empty() -> Self {
5477            Self::default()
5478        }
5479
5480        unsafe fn decode(
5481            &mut self,
5482            decoder: &mut fidl::encoding::Decoder<'_, D>,
5483            offset: usize,
5484            mut depth: fidl::encoding::Depth,
5485        ) -> fidl::Result<()> {
5486            decoder.debug_check_bounds::<Self>(offset);
5487            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5488                None => return Err(fidl::Error::NotNullable),
5489                Some(len) => len,
5490            };
5491            // Calling decoder.out_of_line_offset(0) is not allowed.
5492            if len == 0 {
5493                return Ok(());
5494            };
5495            depth.increment()?;
5496            let envelope_size = 8;
5497            let bytes_len = len * envelope_size;
5498            let offset = decoder.out_of_line_offset(bytes_len)?;
5499            // Decode the envelope for each type.
5500            let mut _next_ordinal_to_read = 0;
5501            let mut next_offset = offset;
5502            let end_offset = offset + bytes_len;
5503            _next_ordinal_to_read += 1;
5504            if next_offset >= end_offset {
5505                return Ok(());
5506            }
5507
5508            // Decode unknown envelopes for gaps in ordinals.
5509            while _next_ordinal_to_read < 1 {
5510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5511                _next_ordinal_to_read += 1;
5512                next_offset += envelope_size;
5513            }
5514
5515            let next_out_of_line = decoder.next_out_of_line();
5516            let handles_before = decoder.remaining_handles();
5517            if let Some((inlined, num_bytes, num_handles)) =
5518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5519            {
5520                let member_inline_size =
5521                    <SaeFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5522                if inlined != (member_inline_size <= 4) {
5523                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5524                }
5525                let inner_offset;
5526                let mut inner_depth = depth.clone();
5527                if inlined {
5528                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5529                    inner_offset = next_offset;
5530                } else {
5531                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5532                    inner_depth.increment()?;
5533                }
5534                let val_ref = self.sae.get_or_insert_with(|| fidl::new_empty!(SaeFeature, D));
5535                fidl::decode!(SaeFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
5536                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5537                {
5538                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5539                }
5540                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5541                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5542                }
5543            }
5544
5545            next_offset += envelope_size;
5546            _next_ordinal_to_read += 1;
5547            if next_offset >= end_offset {
5548                return Ok(());
5549            }
5550
5551            // Decode unknown envelopes for gaps in ordinals.
5552            while _next_ordinal_to_read < 2 {
5553                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5554                _next_ordinal_to_read += 1;
5555                next_offset += envelope_size;
5556            }
5557
5558            let next_out_of_line = decoder.next_out_of_line();
5559            let handles_before = decoder.remaining_handles();
5560            if let Some((inlined, num_bytes, num_handles)) =
5561                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5562            {
5563                let member_inline_size =
5564                    <MfpFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5565                if inlined != (member_inline_size <= 4) {
5566                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5567                }
5568                let inner_offset;
5569                let mut inner_depth = depth.clone();
5570                if inlined {
5571                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5572                    inner_offset = next_offset;
5573                } else {
5574                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5575                    inner_depth.increment()?;
5576                }
5577                let val_ref = self.mfp.get_or_insert_with(|| fidl::new_empty!(MfpFeature, D));
5578                fidl::decode!(MfpFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
5579                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5580                {
5581                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5582                }
5583                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5584                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5585                }
5586            }
5587
5588            next_offset += envelope_size;
5589
5590            // Decode the remaining unknown envelopes.
5591            while next_offset < end_offset {
5592                _next_ordinal_to_read += 1;
5593                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5594                next_offset += envelope_size;
5595            }
5596
5597            Ok(())
5598        }
5599    }
5600
5601    impl SpectrumManagementSupport {
5602        #[inline(always)]
5603        fn max_ordinal_present(&self) -> u64 {
5604            if let Some(_) = self.dfs {
5605                return 1;
5606            }
5607            0
5608        }
5609    }
5610
5611    impl fidl::encoding::ValueTypeMarker for SpectrumManagementSupport {
5612        type Borrowed<'a> = &'a Self;
5613        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5614            value
5615        }
5616    }
5617
5618    unsafe impl fidl::encoding::TypeMarker for SpectrumManagementSupport {
5619        type Owned = Self;
5620
5621        #[inline(always)]
5622        fn inline_align(_context: fidl::encoding::Context) -> usize {
5623            8
5624        }
5625
5626        #[inline(always)]
5627        fn inline_size(_context: fidl::encoding::Context) -> usize {
5628            16
5629        }
5630    }
5631
5632    unsafe impl<D: fidl::encoding::ResourceDialect>
5633        fidl::encoding::Encode<SpectrumManagementSupport, D> for &SpectrumManagementSupport
5634    {
5635        unsafe fn encode(
5636            self,
5637            encoder: &mut fidl::encoding::Encoder<'_, D>,
5638            offset: usize,
5639            mut depth: fidl::encoding::Depth,
5640        ) -> fidl::Result<()> {
5641            encoder.debug_check_bounds::<SpectrumManagementSupport>(offset);
5642            // Vector header
5643            let max_ordinal: u64 = self.max_ordinal_present();
5644            encoder.write_num(max_ordinal, offset);
5645            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5646            // Calling encoder.out_of_line_offset(0) is not allowed.
5647            if max_ordinal == 0 {
5648                return Ok(());
5649            }
5650            depth.increment()?;
5651            let envelope_size = 8;
5652            let bytes_len = max_ordinal as usize * envelope_size;
5653            #[allow(unused_variables)]
5654            let offset = encoder.out_of_line_offset(bytes_len);
5655            let mut _prev_end_offset: usize = 0;
5656            if 1 > max_ordinal {
5657                return Ok(());
5658            }
5659
5660            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5661            // are envelope_size bytes.
5662            let cur_offset: usize = (1 - 1) * envelope_size;
5663
5664            // Zero reserved fields.
5665            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5666
5667            // Safety:
5668            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5669            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5670            //   envelope_size bytes, there is always sufficient room.
5671            fidl::encoding::encode_in_envelope_optional::<DfsFeature, D>(
5672                self.dfs.as_ref().map(<DfsFeature as fidl::encoding::ValueTypeMarker>::borrow),
5673                encoder,
5674                offset + cur_offset,
5675                depth,
5676            )?;
5677
5678            _prev_end_offset = cur_offset + envelope_size;
5679
5680            Ok(())
5681        }
5682    }
5683
5684    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5685        for SpectrumManagementSupport
5686    {
5687        #[inline(always)]
5688        fn new_empty() -> Self {
5689            Self::default()
5690        }
5691
5692        unsafe fn decode(
5693            &mut self,
5694            decoder: &mut fidl::encoding::Decoder<'_, D>,
5695            offset: usize,
5696            mut depth: fidl::encoding::Depth,
5697        ) -> fidl::Result<()> {
5698            decoder.debug_check_bounds::<Self>(offset);
5699            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5700                None => return Err(fidl::Error::NotNullable),
5701                Some(len) => len,
5702            };
5703            // Calling decoder.out_of_line_offset(0) is not allowed.
5704            if len == 0 {
5705                return Ok(());
5706            };
5707            depth.increment()?;
5708            let envelope_size = 8;
5709            let bytes_len = len * envelope_size;
5710            let offset = decoder.out_of_line_offset(bytes_len)?;
5711            // Decode the envelope for each type.
5712            let mut _next_ordinal_to_read = 0;
5713            let mut next_offset = offset;
5714            let end_offset = offset + bytes_len;
5715            _next_ordinal_to_read += 1;
5716            if next_offset >= end_offset {
5717                return Ok(());
5718            }
5719
5720            // Decode unknown envelopes for gaps in ordinals.
5721            while _next_ordinal_to_read < 1 {
5722                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5723                _next_ordinal_to_read += 1;
5724                next_offset += envelope_size;
5725            }
5726
5727            let next_out_of_line = decoder.next_out_of_line();
5728            let handles_before = decoder.remaining_handles();
5729            if let Some((inlined, num_bytes, num_handles)) =
5730                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5731            {
5732                let member_inline_size =
5733                    <DfsFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5734                if inlined != (member_inline_size <= 4) {
5735                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5736                }
5737                let inner_offset;
5738                let mut inner_depth = depth.clone();
5739                if inlined {
5740                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5741                    inner_offset = next_offset;
5742                } else {
5743                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5744                    inner_depth.increment()?;
5745                }
5746                let val_ref = self.dfs.get_or_insert_with(|| fidl::new_empty!(DfsFeature, D));
5747                fidl::decode!(DfsFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
5748                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5749                {
5750                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5751                }
5752                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5753                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5754                }
5755            }
5756
5757            next_offset += envelope_size;
5758
5759            // Decode the remaining unknown envelopes.
5760            while next_offset < end_offset {
5761                _next_ordinal_to_read += 1;
5762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5763                next_offset += envelope_size;
5764            }
5765
5766            Ok(())
5767        }
5768    }
5769
5770    impl WlanKeyConfig {
5771        #[inline(always)]
5772        fn max_ordinal_present(&self) -> u64 {
5773            if let Some(_) = self.rsc {
5774                return 8;
5775            }
5776            if let Some(_) = self.key {
5777                return 7;
5778            }
5779            if let Some(_) = self.key_idx {
5780                return 6;
5781            }
5782            if let Some(_) = self.peer_addr {
5783                return 5;
5784            }
5785            if let Some(_) = self.key_type {
5786                return 4;
5787            }
5788            if let Some(_) = self.cipher_type {
5789                return 3;
5790            }
5791            if let Some(_) = self.cipher_oui {
5792                return 2;
5793            }
5794            if let Some(_) = self.protection {
5795                return 1;
5796            }
5797            0
5798        }
5799    }
5800
5801    impl fidl::encoding::ValueTypeMarker for WlanKeyConfig {
5802        type Borrowed<'a> = &'a Self;
5803        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5804            value
5805        }
5806    }
5807
5808    unsafe impl fidl::encoding::TypeMarker for WlanKeyConfig {
5809        type Owned = Self;
5810
5811        #[inline(always)]
5812        fn inline_align(_context: fidl::encoding::Context) -> usize {
5813            8
5814        }
5815
5816        #[inline(always)]
5817        fn inline_size(_context: fidl::encoding::Context) -> usize {
5818            16
5819        }
5820    }
5821
5822    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanKeyConfig, D>
5823        for &WlanKeyConfig
5824    {
5825        unsafe fn encode(
5826            self,
5827            encoder: &mut fidl::encoding::Encoder<'_, D>,
5828            offset: usize,
5829            mut depth: fidl::encoding::Depth,
5830        ) -> fidl::Result<()> {
5831            encoder.debug_check_bounds::<WlanKeyConfig>(offset);
5832            // Vector header
5833            let max_ordinal: u64 = self.max_ordinal_present();
5834            encoder.write_num(max_ordinal, offset);
5835            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5836            // Calling encoder.out_of_line_offset(0) is not allowed.
5837            if max_ordinal == 0 {
5838                return Ok(());
5839            }
5840            depth.increment()?;
5841            let envelope_size = 8;
5842            let bytes_len = max_ordinal as usize * envelope_size;
5843            #[allow(unused_variables)]
5844            let offset = encoder.out_of_line_offset(bytes_len);
5845            let mut _prev_end_offset: usize = 0;
5846            if 1 > max_ordinal {
5847                return Ok(());
5848            }
5849
5850            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5851            // are envelope_size bytes.
5852            let cur_offset: usize = (1 - 1) * envelope_size;
5853
5854            // Zero reserved fields.
5855            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5856
5857            // Safety:
5858            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5859            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5860            //   envelope_size bytes, there is always sufficient room.
5861            fidl::encoding::encode_in_envelope_optional::<WlanProtection, D>(
5862                self.protection
5863                    .as_ref()
5864                    .map(<WlanProtection as fidl::encoding::ValueTypeMarker>::borrow),
5865                encoder,
5866                offset + cur_offset,
5867                depth,
5868            )?;
5869
5870            _prev_end_offset = cur_offset + envelope_size;
5871            if 2 > max_ordinal {
5872                return Ok(());
5873            }
5874
5875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5876            // are envelope_size bytes.
5877            let cur_offset: usize = (2 - 1) * envelope_size;
5878
5879            // Zero reserved fields.
5880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5881
5882            // Safety:
5883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5885            //   envelope_size bytes, there is always sufficient room.
5886            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 3>, D>(
5887                self.cipher_oui
5888                    .as_ref()
5889                    .map(<fidl::encoding::Array<u8, 3> as fidl::encoding::ValueTypeMarker>::borrow),
5890                encoder,
5891                offset + cur_offset,
5892                depth,
5893            )?;
5894
5895            _prev_end_offset = cur_offset + envelope_size;
5896            if 3 > max_ordinal {
5897                return Ok(());
5898            }
5899
5900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5901            // are envelope_size bytes.
5902            let cur_offset: usize = (3 - 1) * envelope_size;
5903
5904            // Zero reserved fields.
5905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5906
5907            // Safety:
5908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5910            //   envelope_size bytes, there is always sufficient room.
5911            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType, D>(
5912            self.cipher_type.as_ref().map(<fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType as fidl::encoding::ValueTypeMarker>::borrow),
5913            encoder, offset + cur_offset, depth
5914        )?;
5915
5916            _prev_end_offset = cur_offset + envelope_size;
5917            if 4 > max_ordinal {
5918                return Ok(());
5919            }
5920
5921            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5922            // are envelope_size bytes.
5923            let cur_offset: usize = (4 - 1) * envelope_size;
5924
5925            // Zero reserved fields.
5926            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5927
5928            // Safety:
5929            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5930            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5931            //   envelope_size bytes, there is always sufficient room.
5932            fidl::encoding::encode_in_envelope_optional::<WlanKeyType, D>(
5933                self.key_type
5934                    .as_ref()
5935                    .map(<WlanKeyType as fidl::encoding::ValueTypeMarker>::borrow),
5936                encoder,
5937                offset + cur_offset,
5938                depth,
5939            )?;
5940
5941            _prev_end_offset = cur_offset + envelope_size;
5942            if 5 > max_ordinal {
5943                return Ok(());
5944            }
5945
5946            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5947            // are envelope_size bytes.
5948            let cur_offset: usize = (5 - 1) * envelope_size;
5949
5950            // Zero reserved fields.
5951            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5952
5953            // Safety:
5954            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5955            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5956            //   envelope_size bytes, there is always sufficient room.
5957            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 6>, D>(
5958                self.peer_addr
5959                    .as_ref()
5960                    .map(<fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow),
5961                encoder,
5962                offset + cur_offset,
5963                depth,
5964            )?;
5965
5966            _prev_end_offset = cur_offset + envelope_size;
5967            if 6 > max_ordinal {
5968                return Ok(());
5969            }
5970
5971            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5972            // are envelope_size bytes.
5973            let cur_offset: usize = (6 - 1) * envelope_size;
5974
5975            // Zero reserved fields.
5976            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5977
5978            // Safety:
5979            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5980            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5981            //   envelope_size bytes, there is always sufficient room.
5982            fidl::encoding::encode_in_envelope_optional::<u8, D>(
5983                self.key_idx.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
5984                encoder,
5985                offset + cur_offset,
5986                depth,
5987            )?;
5988
5989            _prev_end_offset = cur_offset + envelope_size;
5990            if 7 > max_ordinal {
5991                return Ok(());
5992            }
5993
5994            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5995            // are envelope_size bytes.
5996            let cur_offset: usize = (7 - 1) * envelope_size;
5997
5998            // Zero reserved fields.
5999            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6000
6001            // Safety:
6002            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6003            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6004            //   envelope_size bytes, there is always sufficient room.
6005            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
6006                self.key.as_ref().map(
6007                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
6008                ),
6009                encoder,
6010                offset + cur_offset,
6011                depth,
6012            )?;
6013
6014            _prev_end_offset = cur_offset + envelope_size;
6015            if 8 > max_ordinal {
6016                return Ok(());
6017            }
6018
6019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6020            // are envelope_size bytes.
6021            let cur_offset: usize = (8 - 1) * envelope_size;
6022
6023            // Zero reserved fields.
6024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6025
6026            // Safety:
6027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6029            //   envelope_size bytes, there is always sufficient room.
6030            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6031                self.rsc.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6032                encoder,
6033                offset + cur_offset,
6034                depth,
6035            )?;
6036
6037            _prev_end_offset = cur_offset + envelope_size;
6038
6039            Ok(())
6040        }
6041    }
6042
6043    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanKeyConfig {
6044        #[inline(always)]
6045        fn new_empty() -> Self {
6046            Self::default()
6047        }
6048
6049        unsafe fn decode(
6050            &mut self,
6051            decoder: &mut fidl::encoding::Decoder<'_, D>,
6052            offset: usize,
6053            mut depth: fidl::encoding::Depth,
6054        ) -> fidl::Result<()> {
6055            decoder.debug_check_bounds::<Self>(offset);
6056            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6057                None => return Err(fidl::Error::NotNullable),
6058                Some(len) => len,
6059            };
6060            // Calling decoder.out_of_line_offset(0) is not allowed.
6061            if len == 0 {
6062                return Ok(());
6063            };
6064            depth.increment()?;
6065            let envelope_size = 8;
6066            let bytes_len = len * envelope_size;
6067            let offset = decoder.out_of_line_offset(bytes_len)?;
6068            // Decode the envelope for each type.
6069            let mut _next_ordinal_to_read = 0;
6070            let mut next_offset = offset;
6071            let end_offset = offset + bytes_len;
6072            _next_ordinal_to_read += 1;
6073            if next_offset >= end_offset {
6074                return Ok(());
6075            }
6076
6077            // Decode unknown envelopes for gaps in ordinals.
6078            while _next_ordinal_to_read < 1 {
6079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6080                _next_ordinal_to_read += 1;
6081                next_offset += envelope_size;
6082            }
6083
6084            let next_out_of_line = decoder.next_out_of_line();
6085            let handles_before = decoder.remaining_handles();
6086            if let Some((inlined, num_bytes, num_handles)) =
6087                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6088            {
6089                let member_inline_size =
6090                    <WlanProtection as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6091                if inlined != (member_inline_size <= 4) {
6092                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6093                }
6094                let inner_offset;
6095                let mut inner_depth = depth.clone();
6096                if inlined {
6097                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6098                    inner_offset = next_offset;
6099                } else {
6100                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6101                    inner_depth.increment()?;
6102                }
6103                let val_ref =
6104                    self.protection.get_or_insert_with(|| fidl::new_empty!(WlanProtection, D));
6105                fidl::decode!(WlanProtection, D, val_ref, decoder, inner_offset, inner_depth)?;
6106                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6107                {
6108                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6109                }
6110                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6111                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6112                }
6113            }
6114
6115            next_offset += envelope_size;
6116            _next_ordinal_to_read += 1;
6117            if next_offset >= end_offset {
6118                return Ok(());
6119            }
6120
6121            // Decode unknown envelopes for gaps in ordinals.
6122            while _next_ordinal_to_read < 2 {
6123                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6124                _next_ordinal_to_read += 1;
6125                next_offset += envelope_size;
6126            }
6127
6128            let next_out_of_line = decoder.next_out_of_line();
6129            let handles_before = decoder.remaining_handles();
6130            if let Some((inlined, num_bytes, num_handles)) =
6131                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6132            {
6133                let member_inline_size =
6134                    <fidl::encoding::Array<u8, 3> as fidl::encoding::TypeMarker>::inline_size(
6135                        decoder.context,
6136                    );
6137                if inlined != (member_inline_size <= 4) {
6138                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6139                }
6140                let inner_offset;
6141                let mut inner_depth = depth.clone();
6142                if inlined {
6143                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6144                    inner_offset = next_offset;
6145                } else {
6146                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6147                    inner_depth.increment()?;
6148                }
6149                let val_ref = self
6150                    .cipher_oui
6151                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 3>, D));
6152                fidl::decode!(fidl::encoding::Array<u8, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
6153                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6154                {
6155                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6156                }
6157                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6158                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6159                }
6160            }
6161
6162            next_offset += envelope_size;
6163            _next_ordinal_to_read += 1;
6164            if next_offset >= end_offset {
6165                return Ok(());
6166            }
6167
6168            // Decode unknown envelopes for gaps in ordinals.
6169            while _next_ordinal_to_read < 3 {
6170                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6171                _next_ordinal_to_read += 1;
6172                next_offset += envelope_size;
6173            }
6174
6175            let next_out_of_line = decoder.next_out_of_line();
6176            let handles_before = decoder.remaining_handles();
6177            if let Some((inlined, num_bytes, num_handles)) =
6178                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6179            {
6180                let member_inline_size = <fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6181                if inlined != (member_inline_size <= 4) {
6182                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6183                }
6184                let inner_offset;
6185                let mut inner_depth = depth.clone();
6186                if inlined {
6187                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6188                    inner_offset = next_offset;
6189                } else {
6190                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6191                    inner_depth.increment()?;
6192                }
6193                let val_ref = self.cipher_type.get_or_insert_with(|| {
6194                    fidl::new_empty!(fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType, D)
6195                });
6196                fidl::decode!(
6197                    fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType,
6198                    D,
6199                    val_ref,
6200                    decoder,
6201                    inner_offset,
6202                    inner_depth
6203                )?;
6204                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6205                {
6206                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6207                }
6208                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6209                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6210                }
6211            }
6212
6213            next_offset += envelope_size;
6214            _next_ordinal_to_read += 1;
6215            if next_offset >= end_offset {
6216                return Ok(());
6217            }
6218
6219            // Decode unknown envelopes for gaps in ordinals.
6220            while _next_ordinal_to_read < 4 {
6221                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6222                _next_ordinal_to_read += 1;
6223                next_offset += envelope_size;
6224            }
6225
6226            let next_out_of_line = decoder.next_out_of_line();
6227            let handles_before = decoder.remaining_handles();
6228            if let Some((inlined, num_bytes, num_handles)) =
6229                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6230            {
6231                let member_inline_size =
6232                    <WlanKeyType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6233                if inlined != (member_inline_size <= 4) {
6234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6235                }
6236                let inner_offset;
6237                let mut inner_depth = depth.clone();
6238                if inlined {
6239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6240                    inner_offset = next_offset;
6241                } else {
6242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6243                    inner_depth.increment()?;
6244                }
6245                let val_ref = self.key_type.get_or_insert_with(|| fidl::new_empty!(WlanKeyType, D));
6246                fidl::decode!(WlanKeyType, D, val_ref, decoder, inner_offset, inner_depth)?;
6247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6248                {
6249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6250                }
6251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6253                }
6254            }
6255
6256            next_offset += envelope_size;
6257            _next_ordinal_to_read += 1;
6258            if next_offset >= end_offset {
6259                return Ok(());
6260            }
6261
6262            // Decode unknown envelopes for gaps in ordinals.
6263            while _next_ordinal_to_read < 5 {
6264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6265                _next_ordinal_to_read += 1;
6266                next_offset += envelope_size;
6267            }
6268
6269            let next_out_of_line = decoder.next_out_of_line();
6270            let handles_before = decoder.remaining_handles();
6271            if let Some((inlined, num_bytes, num_handles)) =
6272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6273            {
6274                let member_inline_size =
6275                    <fidl::encoding::Array<u8, 6> as fidl::encoding::TypeMarker>::inline_size(
6276                        decoder.context,
6277                    );
6278                if inlined != (member_inline_size <= 4) {
6279                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6280                }
6281                let inner_offset;
6282                let mut inner_depth = depth.clone();
6283                if inlined {
6284                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6285                    inner_offset = next_offset;
6286                } else {
6287                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6288                    inner_depth.increment()?;
6289                }
6290                let val_ref = self
6291                    .peer_addr
6292                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 6>, D));
6293                fidl::decode!(fidl::encoding::Array<u8, 6>, D, val_ref, decoder, inner_offset, inner_depth)?;
6294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6295                {
6296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6297                }
6298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6300                }
6301            }
6302
6303            next_offset += envelope_size;
6304            _next_ordinal_to_read += 1;
6305            if next_offset >= end_offset {
6306                return Ok(());
6307            }
6308
6309            // Decode unknown envelopes for gaps in ordinals.
6310            while _next_ordinal_to_read < 6 {
6311                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6312                _next_ordinal_to_read += 1;
6313                next_offset += envelope_size;
6314            }
6315
6316            let next_out_of_line = decoder.next_out_of_line();
6317            let handles_before = decoder.remaining_handles();
6318            if let Some((inlined, num_bytes, num_handles)) =
6319                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6320            {
6321                let member_inline_size =
6322                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6323                if inlined != (member_inline_size <= 4) {
6324                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6325                }
6326                let inner_offset;
6327                let mut inner_depth = depth.clone();
6328                if inlined {
6329                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6330                    inner_offset = next_offset;
6331                } else {
6332                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6333                    inner_depth.increment()?;
6334                }
6335                let val_ref = self.key_idx.get_or_insert_with(|| fidl::new_empty!(u8, D));
6336                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
6337                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6338                {
6339                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6340                }
6341                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6342                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6343                }
6344            }
6345
6346            next_offset += envelope_size;
6347            _next_ordinal_to_read += 1;
6348            if next_offset >= end_offset {
6349                return Ok(());
6350            }
6351
6352            // Decode unknown envelopes for gaps in ordinals.
6353            while _next_ordinal_to_read < 7 {
6354                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6355                _next_ordinal_to_read += 1;
6356                next_offset += envelope_size;
6357            }
6358
6359            let next_out_of_line = decoder.next_out_of_line();
6360            let handles_before = decoder.remaining_handles();
6361            if let Some((inlined, num_bytes, num_handles)) =
6362                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6363            {
6364                let member_inline_size =
6365                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
6366                        decoder.context,
6367                    );
6368                if inlined != (member_inline_size <= 4) {
6369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6370                }
6371                let inner_offset;
6372                let mut inner_depth = depth.clone();
6373                if inlined {
6374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6375                    inner_offset = next_offset;
6376                } else {
6377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6378                    inner_depth.increment()?;
6379                }
6380                let val_ref = self
6381                    .key
6382                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
6383                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
6384                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6385                {
6386                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6387                }
6388                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6389                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6390                }
6391            }
6392
6393            next_offset += envelope_size;
6394            _next_ordinal_to_read += 1;
6395            if next_offset >= end_offset {
6396                return Ok(());
6397            }
6398
6399            // Decode unknown envelopes for gaps in ordinals.
6400            while _next_ordinal_to_read < 8 {
6401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6402                _next_ordinal_to_read += 1;
6403                next_offset += envelope_size;
6404            }
6405
6406            let next_out_of_line = decoder.next_out_of_line();
6407            let handles_before = decoder.remaining_handles();
6408            if let Some((inlined, num_bytes, num_handles)) =
6409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6410            {
6411                let member_inline_size =
6412                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6413                if inlined != (member_inline_size <= 4) {
6414                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6415                }
6416                let inner_offset;
6417                let mut inner_depth = depth.clone();
6418                if inlined {
6419                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6420                    inner_offset = next_offset;
6421                } else {
6422                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6423                    inner_depth.increment()?;
6424                }
6425                let val_ref = self.rsc.get_or_insert_with(|| fidl::new_empty!(u64, D));
6426                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6427                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6428                {
6429                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6430                }
6431                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6432                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6433                }
6434            }
6435
6436            next_offset += envelope_size;
6437
6438            // Decode the remaining unknown envelopes.
6439            while next_offset < end_offset {
6440                _next_ordinal_to_read += 1;
6441                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6442                next_offset += envelope_size;
6443            }
6444
6445            Ok(())
6446        }
6447    }
6448}