Skip to main content

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/// Android Packet Filter (APF) support.
876#[derive(Clone, Debug, Default, PartialEq)]
877pub struct ApfPacketFilterSupport {
878    pub supported: Option<bool>,
879    /// Only valid if 'supported' is true.
880    pub version: Option<i32>,
881    /// Only valid if 'supported' is true.
882    pub max_filter_length: Option<i32>,
883    #[doc(hidden)]
884    pub __source_breaking: fidl::marker::SourceBreaking,
885}
886
887impl fidl::Persistable for ApfPacketFilterSupport {}
888
889/// Indicates where the data plane is implemented.
890/// This is a MAC sublayer extension, usable for fullmac or softmac. This
891/// extension is not part of the 802.11-2016 spec.
892#[derive(Clone, Debug, Default, PartialEq)]
893pub struct DataPlaneExtension {
894    pub data_plane_type: Option<DataPlaneType>,
895    #[doc(hidden)]
896    pub __source_breaking: fidl::marker::SourceBreaking,
897}
898
899impl fidl::Persistable for DataPlaneExtension {}
900
901/// Feature-like information specific to the device.
902/// This is a MAC sublayer extension. This extension is not part of the
903/// 802.11-2016 spec.
904#[derive(Clone, Debug, Default, PartialEq)]
905pub struct DeviceExtension {
906    /// Indicates that device is not a real hardware device. This extension only
907    /// exists to support the SYNTH value in
908    /// fuchsia.hardware.ethernet/EthernetFeature.
909    pub is_synthetic: Option<bool>,
910    /// Indicates where MAC layer is implemented.
911    pub mac_implementation_type: Option<MacImplementationType>,
912    /// Indicates whether device supports transmission reports.
913    pub tx_status_report_supported: Option<bool>,
914    #[doc(hidden)]
915    pub __source_breaking: fidl::marker::SourceBreaking,
916}
917
918impl fidl::Persistable for DeviceExtension {}
919
920/// Dynamic Frequency Selection.
921/// See IEEE 802.11-2016 11.9.
922/// This is a spectrum management feature, usable for fullmac or softmac.
923#[derive(Clone, Debug, Default, PartialEq)]
924pub struct DfsFeature {
925    /// If true, driver implements DFS procedures (e.g. vacate channel upon
926    /// detecting RADAR). Based on whether the driver implements DFS procedures,
927    /// higher layers may adjust their logic (e.g. to include/exclude channels
928    /// that require DFS).
929    pub supported: Option<bool>,
930    #[doc(hidden)]
931    pub __source_breaking: fidl::marker::SourceBreaking,
932}
933
934impl fidl::Persistable for DfsFeature {}
935
936/// Features related to discovery of potential BSSs.
937/// See IEEE 802.11-2016 11.1.4.2 and 11.1.4.3.
938#[derive(Clone, Debug, Default, PartialEq)]
939pub struct DiscoverySupport {
940    pub scan_offload: Option<ScanOffloadExtension>,
941    pub probe_response_offload: Option<ProbeResponseOffloadExtension>,
942    #[doc(hidden)]
943    pub __source_breaking: fidl::marker::SourceBreaking,
944}
945
946impl fidl::Persistable for DiscoverySupport {}
947
948#[derive(Clone, Debug, Default, PartialEq)]
949pub struct JoinBssRequest {
950    pub bssid: Option<[u8; 6]>,
951    pub bss_type: Option<BssType>,
952    pub remote: Option<bool>,
953    pub beacon_period: Option<u16>,
954    #[doc(hidden)]
955    pub __source_breaking: fidl::marker::SourceBreaking,
956}
957
958impl fidl::Persistable for JoinBssRequest {}
959
960/// Features related to the MAC sublayer (below MLME).
961/// See IEEE 802.11-2016 10.
962#[derive(Clone, Debug, Default, PartialEq)]
963pub struct MacSublayerSupport {
964    pub rate_selection_offload: Option<RateSelectionOffloadExtension>,
965    pub data_plane: Option<DataPlaneExtension>,
966    pub device: Option<DeviceExtension>,
967    #[doc(hidden)]
968    pub __source_breaking: fidl::marker::SourceBreaking,
969}
970
971impl fidl::Persistable for MacSublayerSupport {}
972
973/// Management Frame Protection.
974/// See IEEE 802.11-2016 4.5.4.9.
975/// This is a security feature, usable for fullmac or softmac.
976#[derive(Clone, Debug, Default, PartialEq)]
977pub struct MfpFeature {
978    pub supported: Option<bool>,
979    #[doc(hidden)]
980    pub __source_breaking: fidl::marker::SourceBreaking,
981}
982
983impl fidl::Persistable for MfpFeature {}
984
985/// Opportunistic Wireless Encryption.
986/// See RFC 8110.
987/// This is a security feature, usable for fullmac or softmac.
988#[derive(Clone, Debug, Default, PartialEq)]
989pub struct OweFeature {
990    pub supported: Option<bool>,
991    #[doc(hidden)]
992    pub __source_breaking: fidl::marker::SourceBreaking,
993}
994
995impl fidl::Persistable for OweFeature {}
996
997/// Indicates where and how probe responses are to be handled.
998/// See IEEE 802.11-2016 11.1.4.3.
999/// This is a discovery extension, expected to be used for softmac only.
1000#[derive(Clone, Debug, Default, PartialEq)]
1001pub struct ProbeResponseOffloadExtension {
1002    /// If true, driver responds to probe requests; otherwise MLME must respond.
1003    pub supported: Option<bool>,
1004    #[doc(hidden)]
1005    pub __source_breaking: fidl::marker::SourceBreaking,
1006}
1007
1008impl fidl::Persistable for ProbeResponseOffloadExtension {}
1009
1010/// Indicates where and how rate selection logic is orchestrated.
1011/// See IEEE 802.11-2016 10.7.
1012/// This is a MAC sublayer extension, expected to be used for softmac only.
1013#[derive(Clone, Debug, Default, PartialEq)]
1014pub struct RateSelectionOffloadExtension {
1015    /// If true, driver orchestrates rate selection; otherwise MLME must do so.
1016    pub supported: Option<bool>,
1017    #[doc(hidden)]
1018    pub __source_breaking: fidl::marker::SourceBreaking,
1019}
1020
1021impl fidl::Persistable for RateSelectionOffloadExtension {}
1022
1023/// Simultaneous Authentication of Equals.
1024/// See IEEE 802.11-2016 12.4.
1025/// This is a security feature, usable for fullmac or softmac.
1026#[derive(Clone, Debug, Default, PartialEq)]
1027pub struct SaeFeature {
1028    /// SAE can be handled by the driver.
1029    pub driver_handler_supported: Option<bool>,
1030    /// SAE can be handled by SME.
1031    pub sme_handler_supported: Option<bool>,
1032    /// Indicates whether the driver is compatible with SAE hash-to-element.
1033    /// In the SME handler case, this just means passing through SAE frames
1034    /// with the SAE_HASH_TO_ELEMENT status code.
1035    pub hash_to_element_supported: Option<bool>,
1036    #[doc(hidden)]
1037    pub __source_breaking: fidl::marker::SourceBreaking,
1038}
1039
1040impl fidl::Persistable for SaeFeature {}
1041
1042/// Indicates where and how scan logic is orchestrated.
1043/// See IEEE 802.11-2016 11.1.4.2 and 11.1.4.3.
1044/// This is a discovery extension, expected to be used for softmac only.
1045#[derive(Clone, Debug, Default, PartialEq)]
1046pub struct ScanOffloadExtension {
1047    /// If true, driver orchestrates scans; otherwise MLME must do so.
1048    pub supported: Option<bool>,
1049    pub scan_cancel_supported: Option<bool>,
1050    #[doc(hidden)]
1051    pub __source_breaking: fidl::marker::SourceBreaking,
1052}
1053
1054impl fidl::Persistable for ScanOffloadExtension {}
1055
1056/// Features related to security / access control and data confidentiality.
1057/// See IEEE 802.11-2016 4.5.4 and 802.11-2016 12.
1058#[derive(Clone, Debug, Default, PartialEq)]
1059pub struct SecuritySupport {
1060    pub sae: Option<SaeFeature>,
1061    pub mfp: Option<MfpFeature>,
1062    pub owe: Option<OweFeature>,
1063    #[doc(hidden)]
1064    pub __source_breaking: fidl::marker::SourceBreaking,
1065}
1066
1067impl fidl::Persistable for SecuritySupport {}
1068
1069/// Features related to spectrum management.
1070/// See IEEE 802.11-2016 4.5.5, 11.8, and 11.9.
1071#[derive(Clone, Debug, Default, PartialEq)]
1072pub struct SpectrumManagementSupport {
1073    pub dfs: Option<DfsFeature>,
1074    #[doc(hidden)]
1075    pub __source_breaking: fidl::marker::SourceBreaking,
1076}
1077
1078impl fidl::Persistable for SpectrumManagementSupport {}
1079
1080#[derive(Clone, Debug, Default, PartialEq)]
1081pub struct WlanKeyConfig {
1082    /// Which path to protect: None, TX, RX, or TX and RX.
1083    pub protection: Option<WlanProtection>,
1084    /// IEEE Cipher suite selector.
1085    /// See IEEE Std 802.11-2016, 9.4.2.25.2, Table 9-131
1086    /// Optional. If not specified, it's assumed that this is the IEEE OUI.
1087    pub cipher_oui: Option<[u8; 3]>,
1088    /// The cipher type.
1089    /// Required.
1090    pub cipher_type: Option<fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType>,
1091    /// Whether this key is a pairwise, group or peer key.
1092    /// Required.
1093    pub key_type: Option<WlanKeyType>,
1094    /// The peer MAC address for pairwise and peer keys.
1095    /// For group keys this value is always the broadcast address.
1096    /// Required.
1097    pub peer_addr: Option<[u8; 6]>,
1098    /// Index for rotating keys, e.g. group keys.
1099    /// This value is always 0 for key types which aren't rotating, e.g. pairwise keys.
1100    /// Required.
1101    ///
1102    /// TODO(https://fxbug.dev/301104836): This is a uint8, but SetKeyDescriptor in MLME FIDL and
1103    /// DeleteKeysDescriptor in Fullmac FIDL use a uint16 for key_id/key_idx. We should consider
1104    /// making all these use the same type.
1105    pub key_idx: Option<u8>,
1106    /// They key's actual bytes.
1107    /// Required.
1108    pub key: Option<Vec<u8>>,
1109    /// Receive Sequence Counter for group keys only.
1110    /// In all other cases the RSC will be 0.
1111    /// Optional.
1112    pub rsc: Option<u64>,
1113    #[doc(hidden)]
1114    pub __source_breaking: fidl::marker::SourceBreaking,
1115}
1116
1117impl fidl::Persistable for WlanKeyConfig {}
1118
1119mod internal {
1120    use super::*;
1121    unsafe impl fidl::encoding::TypeMarker for BssType {
1122        type Owned = Self;
1123
1124        #[inline(always)]
1125        fn inline_align(_context: fidl::encoding::Context) -> usize {
1126            std::mem::align_of::<u32>()
1127        }
1128
1129        #[inline(always)]
1130        fn inline_size(_context: fidl::encoding::Context) -> usize {
1131            std::mem::size_of::<u32>()
1132        }
1133
1134        #[inline(always)]
1135        fn encode_is_copy() -> bool {
1136            false
1137        }
1138
1139        #[inline(always)]
1140        fn decode_is_copy() -> bool {
1141            false
1142        }
1143    }
1144
1145    impl fidl::encoding::ValueTypeMarker for BssType {
1146        type Borrowed<'a> = Self;
1147        #[inline(always)]
1148        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1149            *value
1150        }
1151    }
1152
1153    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BssType {
1154        #[inline]
1155        unsafe fn encode(
1156            self,
1157            encoder: &mut fidl::encoding::Encoder<'_, D>,
1158            offset: usize,
1159            _depth: fidl::encoding::Depth,
1160        ) -> fidl::Result<()> {
1161            encoder.debug_check_bounds::<Self>(offset);
1162            encoder.write_num(self.into_primitive(), offset);
1163            Ok(())
1164        }
1165    }
1166
1167    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BssType {
1168        #[inline(always)]
1169        fn new_empty() -> Self {
1170            Self::unknown()
1171        }
1172
1173        #[inline]
1174        unsafe fn decode(
1175            &mut self,
1176            decoder: &mut fidl::encoding::Decoder<'_, D>,
1177            offset: usize,
1178            _depth: fidl::encoding::Depth,
1179        ) -> fidl::Result<()> {
1180            decoder.debug_check_bounds::<Self>(offset);
1181            let prim = decoder.read_num::<u32>(offset);
1182
1183            *self = Self::from_primitive_allow_unknown(prim);
1184            Ok(())
1185        }
1186    }
1187    unsafe impl fidl::encoding::TypeMarker for ChannelBandwidth {
1188        type Owned = Self;
1189
1190        #[inline(always)]
1191        fn inline_align(_context: fidl::encoding::Context) -> usize {
1192            std::mem::align_of::<u32>()
1193        }
1194
1195        #[inline(always)]
1196        fn inline_size(_context: fidl::encoding::Context) -> usize {
1197            std::mem::size_of::<u32>()
1198        }
1199
1200        #[inline(always)]
1201        fn encode_is_copy() -> bool {
1202            false
1203        }
1204
1205        #[inline(always)]
1206        fn decode_is_copy() -> bool {
1207            false
1208        }
1209    }
1210
1211    impl fidl::encoding::ValueTypeMarker for ChannelBandwidth {
1212        type Borrowed<'a> = Self;
1213        #[inline(always)]
1214        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1215            *value
1216        }
1217    }
1218
1219    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1220        for ChannelBandwidth
1221    {
1222        #[inline]
1223        unsafe fn encode(
1224            self,
1225            encoder: &mut fidl::encoding::Encoder<'_, D>,
1226            offset: usize,
1227            _depth: fidl::encoding::Depth,
1228        ) -> fidl::Result<()> {
1229            encoder.debug_check_bounds::<Self>(offset);
1230            encoder.write_num(self.into_primitive(), offset);
1231            Ok(())
1232        }
1233    }
1234
1235    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelBandwidth {
1236        #[inline(always)]
1237        fn new_empty() -> Self {
1238            Self::unknown()
1239        }
1240
1241        #[inline]
1242        unsafe fn decode(
1243            &mut self,
1244            decoder: &mut fidl::encoding::Decoder<'_, D>,
1245            offset: usize,
1246            _depth: fidl::encoding::Depth,
1247        ) -> fidl::Result<()> {
1248            decoder.debug_check_bounds::<Self>(offset);
1249            let prim = decoder.read_num::<u32>(offset);
1250
1251            *self = Self::from_primitive_allow_unknown(prim);
1252            Ok(())
1253        }
1254    }
1255    unsafe impl fidl::encoding::TypeMarker for DataPlaneType {
1256        type Owned = Self;
1257
1258        #[inline(always)]
1259        fn inline_align(_context: fidl::encoding::Context) -> usize {
1260            std::mem::align_of::<u8>()
1261        }
1262
1263        #[inline(always)]
1264        fn inline_size(_context: fidl::encoding::Context) -> usize {
1265            std::mem::size_of::<u8>()
1266        }
1267
1268        #[inline(always)]
1269        fn encode_is_copy() -> bool {
1270            false
1271        }
1272
1273        #[inline(always)]
1274        fn decode_is_copy() -> bool {
1275            false
1276        }
1277    }
1278
1279    impl fidl::encoding::ValueTypeMarker for DataPlaneType {
1280        type Borrowed<'a> = Self;
1281        #[inline(always)]
1282        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1283            *value
1284        }
1285    }
1286
1287    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DataPlaneType {
1288        #[inline]
1289        unsafe fn encode(
1290            self,
1291            encoder: &mut fidl::encoding::Encoder<'_, D>,
1292            offset: usize,
1293            _depth: fidl::encoding::Depth,
1294        ) -> fidl::Result<()> {
1295            encoder.debug_check_bounds::<Self>(offset);
1296            encoder.write_num(self.into_primitive(), offset);
1297            Ok(())
1298        }
1299    }
1300
1301    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataPlaneType {
1302        #[inline(always)]
1303        fn new_empty() -> Self {
1304            Self::unknown()
1305        }
1306
1307        #[inline]
1308        unsafe fn decode(
1309            &mut self,
1310            decoder: &mut fidl::encoding::Decoder<'_, D>,
1311            offset: usize,
1312            _depth: fidl::encoding::Depth,
1313        ) -> fidl::Result<()> {
1314            decoder.debug_check_bounds::<Self>(offset);
1315            let prim = decoder.read_num::<u8>(offset);
1316
1317            *self = Self::from_primitive_allow_unknown(prim);
1318            Ok(())
1319        }
1320    }
1321    unsafe impl fidl::encoding::TypeMarker for GuardInterval {
1322        type Owned = Self;
1323
1324        #[inline(always)]
1325        fn inline_align(_context: fidl::encoding::Context) -> usize {
1326            std::mem::align_of::<u8>()
1327        }
1328
1329        #[inline(always)]
1330        fn inline_size(_context: fidl::encoding::Context) -> usize {
1331            std::mem::size_of::<u8>()
1332        }
1333
1334        #[inline(always)]
1335        fn encode_is_copy() -> bool {
1336            true
1337        }
1338
1339        #[inline(always)]
1340        fn decode_is_copy() -> bool {
1341            false
1342        }
1343    }
1344
1345    impl fidl::encoding::ValueTypeMarker for GuardInterval {
1346        type Borrowed<'a> = Self;
1347        #[inline(always)]
1348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1349            *value
1350        }
1351    }
1352
1353    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GuardInterval {
1354        #[inline]
1355        unsafe fn encode(
1356            self,
1357            encoder: &mut fidl::encoding::Encoder<'_, D>,
1358            offset: usize,
1359            _depth: fidl::encoding::Depth,
1360        ) -> fidl::Result<()> {
1361            encoder.debug_check_bounds::<Self>(offset);
1362            encoder.write_num(self.into_primitive(), offset);
1363            Ok(())
1364        }
1365    }
1366
1367    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuardInterval {
1368        #[inline(always)]
1369        fn new_empty() -> Self {
1370            Self::LongGi
1371        }
1372
1373        #[inline]
1374        unsafe fn decode(
1375            &mut self,
1376            decoder: &mut fidl::encoding::Decoder<'_, D>,
1377            offset: usize,
1378            _depth: fidl::encoding::Depth,
1379        ) -> fidl::Result<()> {
1380            decoder.debug_check_bounds::<Self>(offset);
1381            let prim = decoder.read_num::<u8>(offset);
1382
1383            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1384            Ok(())
1385        }
1386    }
1387    unsafe impl fidl::encoding::TypeMarker for MacImplementationType {
1388        type Owned = Self;
1389
1390        #[inline(always)]
1391        fn inline_align(_context: fidl::encoding::Context) -> usize {
1392            std::mem::align_of::<u8>()
1393        }
1394
1395        #[inline(always)]
1396        fn inline_size(_context: fidl::encoding::Context) -> usize {
1397            std::mem::size_of::<u8>()
1398        }
1399
1400        #[inline(always)]
1401        fn encode_is_copy() -> bool {
1402            false
1403        }
1404
1405        #[inline(always)]
1406        fn decode_is_copy() -> bool {
1407            false
1408        }
1409    }
1410
1411    impl fidl::encoding::ValueTypeMarker for MacImplementationType {
1412        type Borrowed<'a> = Self;
1413        #[inline(always)]
1414        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1415            *value
1416        }
1417    }
1418
1419    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1420        for MacImplementationType
1421    {
1422        #[inline]
1423        unsafe fn encode(
1424            self,
1425            encoder: &mut fidl::encoding::Encoder<'_, D>,
1426            offset: usize,
1427            _depth: fidl::encoding::Depth,
1428        ) -> fidl::Result<()> {
1429            encoder.debug_check_bounds::<Self>(offset);
1430            encoder.write_num(self.into_primitive(), offset);
1431            Ok(())
1432        }
1433    }
1434
1435    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MacImplementationType {
1436        #[inline(always)]
1437        fn new_empty() -> Self {
1438            Self::unknown()
1439        }
1440
1441        #[inline]
1442        unsafe fn decode(
1443            &mut self,
1444            decoder: &mut fidl::encoding::Decoder<'_, D>,
1445            offset: usize,
1446            _depth: fidl::encoding::Depth,
1447        ) -> fidl::Result<()> {
1448            decoder.debug_check_bounds::<Self>(offset);
1449            let prim = decoder.read_num::<u8>(offset);
1450
1451            *self = Self::from_primitive_allow_unknown(prim);
1452            Ok(())
1453        }
1454    }
1455    unsafe impl fidl::encoding::TypeMarker for PowerSaveType {
1456        type Owned = Self;
1457
1458        #[inline(always)]
1459        fn inline_align(_context: fidl::encoding::Context) -> usize {
1460            std::mem::align_of::<u32>()
1461        }
1462
1463        #[inline(always)]
1464        fn inline_size(_context: fidl::encoding::Context) -> usize {
1465            std::mem::size_of::<u32>()
1466        }
1467
1468        #[inline(always)]
1469        fn encode_is_copy() -> bool {
1470            true
1471        }
1472
1473        #[inline(always)]
1474        fn decode_is_copy() -> bool {
1475            false
1476        }
1477    }
1478
1479    impl fidl::encoding::ValueTypeMarker for PowerSaveType {
1480        type Borrowed<'a> = Self;
1481        #[inline(always)]
1482        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1483            *value
1484        }
1485    }
1486
1487    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PowerSaveType {
1488        #[inline]
1489        unsafe fn encode(
1490            self,
1491            encoder: &mut fidl::encoding::Encoder<'_, D>,
1492            offset: usize,
1493            _depth: fidl::encoding::Depth,
1494        ) -> fidl::Result<()> {
1495            encoder.debug_check_bounds::<Self>(offset);
1496            encoder.write_num(self.into_primitive(), offset);
1497            Ok(())
1498        }
1499    }
1500
1501    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerSaveType {
1502        #[inline(always)]
1503        fn new_empty() -> Self {
1504            Self::PsModeUltraLowPower
1505        }
1506
1507        #[inline]
1508        unsafe fn decode(
1509            &mut self,
1510            decoder: &mut fidl::encoding::Decoder<'_, D>,
1511            offset: usize,
1512            _depth: fidl::encoding::Depth,
1513        ) -> fidl::Result<()> {
1514            decoder.debug_check_bounds::<Self>(offset);
1515            let prim = decoder.read_num::<u32>(offset);
1516
1517            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1518            Ok(())
1519        }
1520    }
1521    unsafe impl fidl::encoding::TypeMarker for ScanType {
1522        type Owned = Self;
1523
1524        #[inline(always)]
1525        fn inline_align(_context: fidl::encoding::Context) -> usize {
1526            std::mem::align_of::<u32>()
1527        }
1528
1529        #[inline(always)]
1530        fn inline_size(_context: fidl::encoding::Context) -> usize {
1531            std::mem::size_of::<u32>()
1532        }
1533
1534        #[inline(always)]
1535        fn encode_is_copy() -> bool {
1536            true
1537        }
1538
1539        #[inline(always)]
1540        fn decode_is_copy() -> bool {
1541            false
1542        }
1543    }
1544
1545    impl fidl::encoding::ValueTypeMarker for ScanType {
1546        type Borrowed<'a> = Self;
1547        #[inline(always)]
1548        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1549            *value
1550        }
1551    }
1552
1553    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ScanType {
1554        #[inline]
1555        unsafe fn encode(
1556            self,
1557            encoder: &mut fidl::encoding::Encoder<'_, D>,
1558            offset: usize,
1559            _depth: fidl::encoding::Depth,
1560        ) -> fidl::Result<()> {
1561            encoder.debug_check_bounds::<Self>(offset);
1562            encoder.write_num(self.into_primitive(), offset);
1563            Ok(())
1564        }
1565    }
1566
1567    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanType {
1568        #[inline(always)]
1569        fn new_empty() -> Self {
1570            Self::Active
1571        }
1572
1573        #[inline]
1574        unsafe fn decode(
1575            &mut self,
1576            decoder: &mut fidl::encoding::Decoder<'_, D>,
1577            offset: usize,
1578            _depth: fidl::encoding::Depth,
1579        ) -> fidl::Result<()> {
1580            decoder.debug_check_bounds::<Self>(offset);
1581            let prim = decoder.read_num::<u32>(offset);
1582
1583            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1584            Ok(())
1585        }
1586    }
1587    unsafe impl fidl::encoding::TypeMarker for WlanKeyType {
1588        type Owned = Self;
1589
1590        #[inline(always)]
1591        fn inline_align(_context: fidl::encoding::Context) -> usize {
1592            std::mem::align_of::<u8>()
1593        }
1594
1595        #[inline(always)]
1596        fn inline_size(_context: fidl::encoding::Context) -> usize {
1597            std::mem::size_of::<u8>()
1598        }
1599
1600        #[inline(always)]
1601        fn encode_is_copy() -> bool {
1602            false
1603        }
1604
1605        #[inline(always)]
1606        fn decode_is_copy() -> bool {
1607            false
1608        }
1609    }
1610
1611    impl fidl::encoding::ValueTypeMarker for WlanKeyType {
1612        type Borrowed<'a> = Self;
1613        #[inline(always)]
1614        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1615            *value
1616        }
1617    }
1618
1619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanKeyType {
1620        #[inline]
1621        unsafe fn encode(
1622            self,
1623            encoder: &mut fidl::encoding::Encoder<'_, D>,
1624            offset: usize,
1625            _depth: fidl::encoding::Depth,
1626        ) -> fidl::Result<()> {
1627            encoder.debug_check_bounds::<Self>(offset);
1628            encoder.write_num(self.into_primitive(), offset);
1629            Ok(())
1630        }
1631    }
1632
1633    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanKeyType {
1634        #[inline(always)]
1635        fn new_empty() -> Self {
1636            Self::unknown()
1637        }
1638
1639        #[inline]
1640        unsafe fn decode(
1641            &mut self,
1642            decoder: &mut fidl::encoding::Decoder<'_, D>,
1643            offset: usize,
1644            _depth: fidl::encoding::Depth,
1645        ) -> fidl::Result<()> {
1646            decoder.debug_check_bounds::<Self>(offset);
1647            let prim = decoder.read_num::<u8>(offset);
1648
1649            *self = Self::from_primitive_allow_unknown(prim);
1650            Ok(())
1651        }
1652    }
1653    unsafe impl fidl::encoding::TypeMarker for WlanMacRole {
1654        type Owned = Self;
1655
1656        #[inline(always)]
1657        fn inline_align(_context: fidl::encoding::Context) -> usize {
1658            std::mem::align_of::<u32>()
1659        }
1660
1661        #[inline(always)]
1662        fn inline_size(_context: fidl::encoding::Context) -> usize {
1663            std::mem::size_of::<u32>()
1664        }
1665
1666        #[inline(always)]
1667        fn encode_is_copy() -> bool {
1668            false
1669        }
1670
1671        #[inline(always)]
1672        fn decode_is_copy() -> bool {
1673            false
1674        }
1675    }
1676
1677    impl fidl::encoding::ValueTypeMarker for WlanMacRole {
1678        type Borrowed<'a> = Self;
1679        #[inline(always)]
1680        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1681            *value
1682        }
1683    }
1684
1685    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanMacRole {
1686        #[inline]
1687        unsafe fn encode(
1688            self,
1689            encoder: &mut fidl::encoding::Encoder<'_, D>,
1690            offset: usize,
1691            _depth: fidl::encoding::Depth,
1692        ) -> fidl::Result<()> {
1693            encoder.debug_check_bounds::<Self>(offset);
1694            encoder.write_num(self.into_primitive(), offset);
1695            Ok(())
1696        }
1697    }
1698
1699    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanMacRole {
1700        #[inline(always)]
1701        fn new_empty() -> Self {
1702            Self::unknown()
1703        }
1704
1705        #[inline]
1706        unsafe fn decode(
1707            &mut self,
1708            decoder: &mut fidl::encoding::Decoder<'_, D>,
1709            offset: usize,
1710            _depth: fidl::encoding::Depth,
1711        ) -> fidl::Result<()> {
1712            decoder.debug_check_bounds::<Self>(offset);
1713            let prim = decoder.read_num::<u32>(offset);
1714
1715            *self = Self::from_primitive_allow_unknown(prim);
1716            Ok(())
1717        }
1718    }
1719    unsafe impl fidl::encoding::TypeMarker for WlanPhyType {
1720        type Owned = Self;
1721
1722        #[inline(always)]
1723        fn inline_align(_context: fidl::encoding::Context) -> usize {
1724            std::mem::align_of::<u32>()
1725        }
1726
1727        #[inline(always)]
1728        fn inline_size(_context: fidl::encoding::Context) -> usize {
1729            std::mem::size_of::<u32>()
1730        }
1731
1732        #[inline(always)]
1733        fn encode_is_copy() -> bool {
1734            false
1735        }
1736
1737        #[inline(always)]
1738        fn decode_is_copy() -> bool {
1739            false
1740        }
1741    }
1742
1743    impl fidl::encoding::ValueTypeMarker for WlanPhyType {
1744        type Borrowed<'a> = Self;
1745        #[inline(always)]
1746        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1747            *value
1748        }
1749    }
1750
1751    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanPhyType {
1752        #[inline]
1753        unsafe fn encode(
1754            self,
1755            encoder: &mut fidl::encoding::Encoder<'_, D>,
1756            offset: usize,
1757            _depth: fidl::encoding::Depth,
1758        ) -> fidl::Result<()> {
1759            encoder.debug_check_bounds::<Self>(offset);
1760            encoder.write_num(self.into_primitive(), offset);
1761            Ok(())
1762        }
1763    }
1764
1765    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanPhyType {
1766        #[inline(always)]
1767        fn new_empty() -> Self {
1768            Self::unknown()
1769        }
1770
1771        #[inline]
1772        unsafe fn decode(
1773            &mut self,
1774            decoder: &mut fidl::encoding::Decoder<'_, D>,
1775            offset: usize,
1776            _depth: fidl::encoding::Depth,
1777        ) -> fidl::Result<()> {
1778            decoder.debug_check_bounds::<Self>(offset);
1779            let prim = decoder.read_num::<u32>(offset);
1780
1781            *self = Self::from_primitive_allow_unknown(prim);
1782            Ok(())
1783        }
1784    }
1785    unsafe impl fidl::encoding::TypeMarker for WlanProtection {
1786        type Owned = Self;
1787
1788        #[inline(always)]
1789        fn inline_align(_context: fidl::encoding::Context) -> usize {
1790            std::mem::align_of::<u8>()
1791        }
1792
1793        #[inline(always)]
1794        fn inline_size(_context: fidl::encoding::Context) -> usize {
1795            std::mem::size_of::<u8>()
1796        }
1797
1798        #[inline(always)]
1799        fn encode_is_copy() -> bool {
1800            true
1801        }
1802
1803        #[inline(always)]
1804        fn decode_is_copy() -> bool {
1805            false
1806        }
1807    }
1808
1809    impl fidl::encoding::ValueTypeMarker for WlanProtection {
1810        type Borrowed<'a> = Self;
1811        #[inline(always)]
1812        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1813            *value
1814        }
1815    }
1816
1817    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WlanProtection {
1818        #[inline]
1819        unsafe fn encode(
1820            self,
1821            encoder: &mut fidl::encoding::Encoder<'_, D>,
1822            offset: usize,
1823            _depth: fidl::encoding::Depth,
1824        ) -> fidl::Result<()> {
1825            encoder.debug_check_bounds::<Self>(offset);
1826            encoder.write_num(self.into_primitive(), offset);
1827            Ok(())
1828        }
1829    }
1830
1831    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanProtection {
1832        #[inline(always)]
1833        fn new_empty() -> Self {
1834            Self::None
1835        }
1836
1837        #[inline]
1838        unsafe fn decode(
1839            &mut self,
1840            decoder: &mut fidl::encoding::Decoder<'_, D>,
1841            offset: usize,
1842            _depth: fidl::encoding::Depth,
1843        ) -> fidl::Result<()> {
1844            decoder.debug_check_bounds::<Self>(offset);
1845            let prim = decoder.read_num::<u8>(offset);
1846
1847            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1848            Ok(())
1849        }
1850    }
1851    unsafe impl fidl::encoding::TypeMarker for WlanSoftmacHardwareCapabilityBit {
1852        type Owned = Self;
1853
1854        #[inline(always)]
1855        fn inline_align(_context: fidl::encoding::Context) -> usize {
1856            std::mem::align_of::<u32>()
1857        }
1858
1859        #[inline(always)]
1860        fn inline_size(_context: fidl::encoding::Context) -> usize {
1861            std::mem::size_of::<u32>()
1862        }
1863
1864        #[inline(always)]
1865        fn encode_is_copy() -> bool {
1866            true
1867        }
1868
1869        #[inline(always)]
1870        fn decode_is_copy() -> bool {
1871            false
1872        }
1873    }
1874
1875    impl fidl::encoding::ValueTypeMarker for WlanSoftmacHardwareCapabilityBit {
1876        type Borrowed<'a> = Self;
1877        #[inline(always)]
1878        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1879            *value
1880        }
1881    }
1882
1883    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1884        for WlanSoftmacHardwareCapabilityBit
1885    {
1886        #[inline]
1887        unsafe fn encode(
1888            self,
1889            encoder: &mut fidl::encoding::Encoder<'_, D>,
1890            offset: usize,
1891            _depth: fidl::encoding::Depth,
1892        ) -> fidl::Result<()> {
1893            encoder.debug_check_bounds::<Self>(offset);
1894            encoder.write_num(self.into_primitive(), offset);
1895            Ok(())
1896        }
1897    }
1898
1899    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1900        for WlanSoftmacHardwareCapabilityBit
1901    {
1902        #[inline(always)]
1903        fn new_empty() -> Self {
1904            Self::ShortPreamble
1905        }
1906
1907        #[inline]
1908        unsafe fn decode(
1909            &mut self,
1910            decoder: &mut fidl::encoding::Decoder<'_, D>,
1911            offset: usize,
1912            _depth: fidl::encoding::Depth,
1913        ) -> fidl::Result<()> {
1914            decoder.debug_check_bounds::<Self>(offset);
1915            let prim = decoder.read_num::<u32>(offset);
1916
1917            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1918            Ok(())
1919        }
1920    }
1921    unsafe impl fidl::encoding::TypeMarker for WlanTxResultCode {
1922        type Owned = Self;
1923
1924        #[inline(always)]
1925        fn inline_align(_context: fidl::encoding::Context) -> usize {
1926            std::mem::align_of::<u8>()
1927        }
1928
1929        #[inline(always)]
1930        fn inline_size(_context: fidl::encoding::Context) -> usize {
1931            std::mem::size_of::<u8>()
1932        }
1933
1934        #[inline(always)]
1935        fn encode_is_copy() -> bool {
1936            false
1937        }
1938
1939        #[inline(always)]
1940        fn decode_is_copy() -> bool {
1941            false
1942        }
1943    }
1944
1945    impl fidl::encoding::ValueTypeMarker for WlanTxResultCode {
1946        type Borrowed<'a> = Self;
1947        #[inline(always)]
1948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1949            *value
1950        }
1951    }
1952
1953    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1954        for WlanTxResultCode
1955    {
1956        #[inline]
1957        unsafe fn encode(
1958            self,
1959            encoder: &mut fidl::encoding::Encoder<'_, D>,
1960            offset: usize,
1961            _depth: fidl::encoding::Depth,
1962        ) -> fidl::Result<()> {
1963            encoder.debug_check_bounds::<Self>(offset);
1964            encoder.write_num(self.into_primitive(), offset);
1965            Ok(())
1966        }
1967    }
1968
1969    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanTxResultCode {
1970        #[inline(always)]
1971        fn new_empty() -> Self {
1972            Self::unknown()
1973        }
1974
1975        #[inline]
1976        unsafe fn decode(
1977            &mut self,
1978            decoder: &mut fidl::encoding::Decoder<'_, D>,
1979            offset: usize,
1980            _depth: fidl::encoding::Depth,
1981        ) -> fidl::Result<()> {
1982            decoder.debug_check_bounds::<Self>(offset);
1983            let prim = decoder.read_num::<u8>(offset);
1984
1985            *self = Self::from_primitive_allow_unknown(prim);
1986            Ok(())
1987        }
1988    }
1989
1990    impl fidl::encoding::ValueTypeMarker for BssDescription {
1991        type Borrowed<'a> = &'a Self;
1992        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1993            value
1994        }
1995    }
1996
1997    unsafe impl fidl::encoding::TypeMarker for BssDescription {
1998        type Owned = Self;
1999
2000        #[inline(always)]
2001        fn inline_align(_context: fidl::encoding::Context) -> usize {
2002            8
2003        }
2004
2005        #[inline(always)]
2006        fn inline_size(_context: fidl::encoding::Context) -> usize {
2007            48
2008        }
2009    }
2010
2011    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BssDescription, D>
2012        for &BssDescription
2013    {
2014        #[inline]
2015        unsafe fn encode(
2016            self,
2017            encoder: &mut fidl::encoding::Encoder<'_, D>,
2018            offset: usize,
2019            _depth: fidl::encoding::Depth,
2020        ) -> fidl::Result<()> {
2021            encoder.debug_check_bounds::<BssDescription>(offset);
2022            // Delegate to tuple encoding.
2023            fidl::encoding::Encode::<BssDescription, D>::encode(
2024                (
2025                    <fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow(&self.bssid),
2026                    <BssType as fidl::encoding::ValueTypeMarker>::borrow(&self.bss_type),
2027                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.beacon_period),
2028                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.capability_info),
2029                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.ies),
2030                    <fidl_fuchsia_wlan_ieee80211__common::WlanChannel as fidl::encoding::ValueTypeMarker>::borrow(&self.channel),
2031                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.rssi_dbm),
2032                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.snr_db),
2033                ),
2034                encoder, offset, _depth
2035            )
2036        }
2037    }
2038    unsafe impl<
2039        D: fidl::encoding::ResourceDialect,
2040        T0: fidl::encoding::Encode<fidl::encoding::Array<u8, 6>, D>,
2041        T1: fidl::encoding::Encode<BssType, D>,
2042        T2: fidl::encoding::Encode<u16, D>,
2043        T3: fidl::encoding::Encode<u16, D>,
2044        T4: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
2045        T5: fidl::encoding::Encode<fidl_fuchsia_wlan_ieee80211__common::WlanChannel, D>,
2046        T6: fidl::encoding::Encode<i8, D>,
2047        T7: fidl::encoding::Encode<i8, D>,
2048    > fidl::encoding::Encode<BssDescription, D> for (T0, T1, T2, T3, T4, T5, T6, T7)
2049    {
2050        #[inline]
2051        unsafe fn encode(
2052            self,
2053            encoder: &mut fidl::encoding::Encoder<'_, D>,
2054            offset: usize,
2055            depth: fidl::encoding::Depth,
2056        ) -> fidl::Result<()> {
2057            encoder.debug_check_bounds::<BssDescription>(offset);
2058            // Zero out padding regions. There's no need to apply masks
2059            // because the unmasked parts will be overwritten by fields.
2060            unsafe {
2061                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2062                (ptr as *mut u64).write_unaligned(0);
2063            }
2064            unsafe {
2065                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
2066                (ptr as *mut u64).write_unaligned(0);
2067            }
2068            // Write the fields.
2069            self.0.encode(encoder, offset + 0, depth)?;
2070            self.1.encode(encoder, offset + 8, depth)?;
2071            self.2.encode(encoder, offset + 12, depth)?;
2072            self.3.encode(encoder, offset + 14, depth)?;
2073            self.4.encode(encoder, offset + 16, depth)?;
2074            self.5.encode(encoder, offset + 32, depth)?;
2075            self.6.encode(encoder, offset + 44, depth)?;
2076            self.7.encode(encoder, offset + 45, depth)?;
2077            Ok(())
2078        }
2079    }
2080
2081    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BssDescription {
2082        #[inline(always)]
2083        fn new_empty() -> Self {
2084            Self {
2085                bssid: fidl::new_empty!(fidl::encoding::Array<u8, 6>, D),
2086                bss_type: fidl::new_empty!(BssType, D),
2087                beacon_period: fidl::new_empty!(u16, D),
2088                capability_info: fidl::new_empty!(u16, D),
2089                ies: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
2090                channel: fidl::new_empty!(fidl_fuchsia_wlan_ieee80211__common::WlanChannel, D),
2091                rssi_dbm: fidl::new_empty!(i8, D),
2092                snr_db: fidl::new_empty!(i8, D),
2093            }
2094        }
2095
2096        #[inline]
2097        unsafe fn decode(
2098            &mut self,
2099            decoder: &mut fidl::encoding::Decoder<'_, D>,
2100            offset: usize,
2101            _depth: fidl::encoding::Depth,
2102        ) -> fidl::Result<()> {
2103            decoder.debug_check_bounds::<Self>(offset);
2104            // Verify that padding bytes are zero.
2105            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2106            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2107            let mask = 0xffff000000000000u64;
2108            let maskedval = padval & mask;
2109            if maskedval != 0 {
2110                return Err(fidl::Error::NonZeroPadding {
2111                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2112                });
2113            }
2114            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
2115            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2116            let mask = 0xffff000000000000u64;
2117            let maskedval = padval & mask;
2118            if maskedval != 0 {
2119                return Err(fidl::Error::NonZeroPadding {
2120                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
2121                });
2122            }
2123            fidl::decode!(fidl::encoding::Array<u8, 6>, D, &mut self.bssid, decoder, offset + 0, _depth)?;
2124            fidl::decode!(BssType, D, &mut self.bss_type, decoder, offset + 8, _depth)?;
2125            fidl::decode!(u16, D, &mut self.beacon_period, decoder, offset + 12, _depth)?;
2126            fidl::decode!(u16, D, &mut self.capability_info, decoder, offset + 14, _depth)?;
2127            fidl::decode!(
2128                fidl::encoding::UnboundedVector<u8>,
2129                D,
2130                &mut self.ies,
2131                decoder,
2132                offset + 16,
2133                _depth
2134            )?;
2135            fidl::decode!(
2136                fidl_fuchsia_wlan_ieee80211__common::WlanChannel,
2137                D,
2138                &mut self.channel,
2139                decoder,
2140                offset + 32,
2141                _depth
2142            )?;
2143            fidl::decode!(i8, D, &mut self.rssi_dbm, decoder, offset + 44, _depth)?;
2144            fidl::decode!(i8, D, &mut self.snr_db, decoder, offset + 45, _depth)?;
2145            Ok(())
2146        }
2147    }
2148
2149    impl fidl::encoding::ValueTypeMarker for WlanChannel {
2150        type Borrowed<'a> = &'a Self;
2151        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2152            value
2153        }
2154    }
2155
2156    unsafe impl fidl::encoding::TypeMarker for WlanChannel {
2157        type Owned = Self;
2158
2159        #[inline(always)]
2160        fn inline_align(_context: fidl::encoding::Context) -> usize {
2161            4
2162        }
2163
2164        #[inline(always)]
2165        fn inline_size(_context: fidl::encoding::Context) -> usize {
2166            12
2167        }
2168    }
2169
2170    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanChannel, D>
2171        for &WlanChannel
2172    {
2173        #[inline]
2174        unsafe fn encode(
2175            self,
2176            encoder: &mut fidl::encoding::Encoder<'_, D>,
2177            offset: usize,
2178            _depth: fidl::encoding::Depth,
2179        ) -> fidl::Result<()> {
2180            encoder.debug_check_bounds::<WlanChannel>(offset);
2181            // Delegate to tuple encoding.
2182            fidl::encoding::Encode::<WlanChannel, D>::encode(
2183                (
2184                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.primary),
2185                    <ChannelBandwidth as fidl::encoding::ValueTypeMarker>::borrow(&self.cbw),
2186                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.secondary80),
2187                ),
2188                encoder,
2189                offset,
2190                _depth,
2191            )
2192        }
2193    }
2194    unsafe impl<
2195        D: fidl::encoding::ResourceDialect,
2196        T0: fidl::encoding::Encode<u8, D>,
2197        T1: fidl::encoding::Encode<ChannelBandwidth, D>,
2198        T2: fidl::encoding::Encode<u8, D>,
2199    > fidl::encoding::Encode<WlanChannel, D> for (T0, T1, T2)
2200    {
2201        #[inline]
2202        unsafe fn encode(
2203            self,
2204            encoder: &mut fidl::encoding::Encoder<'_, D>,
2205            offset: usize,
2206            depth: fidl::encoding::Depth,
2207        ) -> fidl::Result<()> {
2208            encoder.debug_check_bounds::<WlanChannel>(offset);
2209            // Zero out padding regions. There's no need to apply masks
2210            // because the unmasked parts will be overwritten by fields.
2211            unsafe {
2212                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2213                (ptr as *mut u32).write_unaligned(0);
2214            }
2215            unsafe {
2216                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2217                (ptr as *mut u32).write_unaligned(0);
2218            }
2219            // Write the fields.
2220            self.0.encode(encoder, offset + 0, depth)?;
2221            self.1.encode(encoder, offset + 4, depth)?;
2222            self.2.encode(encoder, offset + 8, depth)?;
2223            Ok(())
2224        }
2225    }
2226
2227    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanChannel {
2228        #[inline(always)]
2229        fn new_empty() -> Self {
2230            Self {
2231                primary: fidl::new_empty!(u8, D),
2232                cbw: fidl::new_empty!(ChannelBandwidth, D),
2233                secondary80: fidl::new_empty!(u8, D),
2234            }
2235        }
2236
2237        #[inline]
2238        unsafe fn decode(
2239            &mut self,
2240            decoder: &mut fidl::encoding::Decoder<'_, D>,
2241            offset: usize,
2242            _depth: fidl::encoding::Depth,
2243        ) -> fidl::Result<()> {
2244            decoder.debug_check_bounds::<Self>(offset);
2245            // Verify that padding bytes are zero.
2246            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2247            let padval = unsafe { (ptr as *const u32).read_unaligned() };
2248            let mask = 0xffffff00u32;
2249            let maskedval = padval & mask;
2250            if maskedval != 0 {
2251                return Err(fidl::Error::NonZeroPadding {
2252                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2253                });
2254            }
2255            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
2256            let padval = unsafe { (ptr as *const u32).read_unaligned() };
2257            let mask = 0xffffff00u32;
2258            let maskedval = padval & mask;
2259            if maskedval != 0 {
2260                return Err(fidl::Error::NonZeroPadding {
2261                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2262                });
2263            }
2264            fidl::decode!(u8, D, &mut self.primary, decoder, offset + 0, _depth)?;
2265            fidl::decode!(ChannelBandwidth, D, &mut self.cbw, decoder, offset + 4, _depth)?;
2266            fidl::decode!(u8, D, &mut self.secondary80, decoder, offset + 8, _depth)?;
2267            Ok(())
2268        }
2269    }
2270
2271    impl fidl::encoding::ValueTypeMarker for WlanTxResult {
2272        type Borrowed<'a> = &'a Self;
2273        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2274            value
2275        }
2276    }
2277
2278    unsafe impl fidl::encoding::TypeMarker for WlanTxResult {
2279        type Owned = Self;
2280
2281        #[inline(always)]
2282        fn inline_align(_context: fidl::encoding::Context) -> usize {
2283            2
2284        }
2285
2286        #[inline(always)]
2287        fn inline_size(_context: fidl::encoding::Context) -> usize {
2288            40
2289        }
2290    }
2291
2292    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanTxResult, D>
2293        for &WlanTxResult
2294    {
2295        #[inline]
2296        unsafe fn encode(
2297            self,
2298            encoder: &mut fidl::encoding::Encoder<'_, D>,
2299            offset: usize,
2300            _depth: fidl::encoding::Depth,
2301        ) -> fidl::Result<()> {
2302            encoder.debug_check_bounds::<WlanTxResult>(offset);
2303            // Delegate to tuple encoding.
2304            fidl::encoding::Encode::<WlanTxResult, D>::encode(
2305                (
2306                    <fidl::encoding::Array<WlanTxResultEntry, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.tx_result_entry),
2307                    <fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow(&self.peer_addr),
2308                    <WlanTxResultCode as fidl::encoding::ValueTypeMarker>::borrow(&self.result_code),
2309                ),
2310                encoder, offset, _depth
2311            )
2312        }
2313    }
2314    unsafe impl<
2315        D: fidl::encoding::ResourceDialect,
2316        T0: fidl::encoding::Encode<fidl::encoding::Array<WlanTxResultEntry, 8>, D>,
2317        T1: fidl::encoding::Encode<fidl::encoding::Array<u8, 6>, D>,
2318        T2: fidl::encoding::Encode<WlanTxResultCode, D>,
2319    > fidl::encoding::Encode<WlanTxResult, D> for (T0, T1, T2)
2320    {
2321        #[inline]
2322        unsafe fn encode(
2323            self,
2324            encoder: &mut fidl::encoding::Encoder<'_, D>,
2325            offset: usize,
2326            depth: fidl::encoding::Depth,
2327        ) -> fidl::Result<()> {
2328            encoder.debug_check_bounds::<WlanTxResult>(offset);
2329            // Zero out padding regions. There's no need to apply masks
2330            // because the unmasked parts will be overwritten by fields.
2331            unsafe {
2332                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(38);
2333                (ptr as *mut u16).write_unaligned(0);
2334            }
2335            // Write the fields.
2336            self.0.encode(encoder, offset + 0, depth)?;
2337            self.1.encode(encoder, offset + 32, depth)?;
2338            self.2.encode(encoder, offset + 38, depth)?;
2339            Ok(())
2340        }
2341    }
2342
2343    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanTxResult {
2344        #[inline(always)]
2345        fn new_empty() -> Self {
2346            Self {
2347                tx_result_entry: fidl::new_empty!(fidl::encoding::Array<WlanTxResultEntry, 8>, D),
2348                peer_addr: fidl::new_empty!(fidl::encoding::Array<u8, 6>, D),
2349                result_code: fidl::new_empty!(WlanTxResultCode, D),
2350            }
2351        }
2352
2353        #[inline]
2354        unsafe fn decode(
2355            &mut self,
2356            decoder: &mut fidl::encoding::Decoder<'_, D>,
2357            offset: usize,
2358            _depth: fidl::encoding::Depth,
2359        ) -> fidl::Result<()> {
2360            decoder.debug_check_bounds::<Self>(offset);
2361            // Verify that padding bytes are zero.
2362            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(38) };
2363            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2364            let mask = 0xff00u16;
2365            let maskedval = padval & mask;
2366            if maskedval != 0 {
2367                return Err(fidl::Error::NonZeroPadding {
2368                    padding_start: offset + 38 + ((mask as u64).trailing_zeros() / 8) as usize,
2369                });
2370            }
2371            fidl::decode!(fidl::encoding::Array<WlanTxResultEntry, 8>, D, &mut self.tx_result_entry, decoder, offset + 0, _depth)?;
2372            fidl::decode!(fidl::encoding::Array<u8, 6>, D, &mut self.peer_addr, decoder, offset + 32, _depth)?;
2373            fidl::decode!(
2374                WlanTxResultCode,
2375                D,
2376                &mut self.result_code,
2377                decoder,
2378                offset + 38,
2379                _depth
2380            )?;
2381            Ok(())
2382        }
2383    }
2384
2385    impl fidl::encoding::ValueTypeMarker for WlanTxResultEntry {
2386        type Borrowed<'a> = &'a Self;
2387        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2388            value
2389        }
2390    }
2391
2392    unsafe impl fidl::encoding::TypeMarker for WlanTxResultEntry {
2393        type Owned = Self;
2394
2395        #[inline(always)]
2396        fn inline_align(_context: fidl::encoding::Context) -> usize {
2397            2
2398        }
2399
2400        #[inline(always)]
2401        fn inline_size(_context: fidl::encoding::Context) -> usize {
2402            4
2403        }
2404    }
2405
2406    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanTxResultEntry, D>
2407        for &WlanTxResultEntry
2408    {
2409        #[inline]
2410        unsafe fn encode(
2411            self,
2412            encoder: &mut fidl::encoding::Encoder<'_, D>,
2413            offset: usize,
2414            _depth: fidl::encoding::Depth,
2415        ) -> fidl::Result<()> {
2416            encoder.debug_check_bounds::<WlanTxResultEntry>(offset);
2417            unsafe {
2418                // Copy the object into the buffer.
2419                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2420                (buf_ptr as *mut WlanTxResultEntry)
2421                    .write_unaligned((self as *const WlanTxResultEntry).read());
2422                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2423                // done second because the memcpy will write garbage to these bytes.
2424                let padding_ptr = buf_ptr.offset(2) as *mut u16;
2425                let padding_mask = 0xff00u16;
2426                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2427            }
2428            Ok(())
2429        }
2430    }
2431    unsafe impl<
2432        D: fidl::encoding::ResourceDialect,
2433        T0: fidl::encoding::Encode<u16, D>,
2434        T1: fidl::encoding::Encode<u8, D>,
2435    > fidl::encoding::Encode<WlanTxResultEntry, D> for (T0, T1)
2436    {
2437        #[inline]
2438        unsafe fn encode(
2439            self,
2440            encoder: &mut fidl::encoding::Encoder<'_, D>,
2441            offset: usize,
2442            depth: fidl::encoding::Depth,
2443        ) -> fidl::Result<()> {
2444            encoder.debug_check_bounds::<WlanTxResultEntry>(offset);
2445            // Zero out padding regions. There's no need to apply masks
2446            // because the unmasked parts will be overwritten by fields.
2447            unsafe {
2448                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(2);
2449                (ptr as *mut u16).write_unaligned(0);
2450            }
2451            // Write the fields.
2452            self.0.encode(encoder, offset + 0, depth)?;
2453            self.1.encode(encoder, offset + 2, depth)?;
2454            Ok(())
2455        }
2456    }
2457
2458    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanTxResultEntry {
2459        #[inline(always)]
2460        fn new_empty() -> Self {
2461            Self { tx_vector_idx: fidl::new_empty!(u16, D), attempts: fidl::new_empty!(u8, D) }
2462        }
2463
2464        #[inline]
2465        unsafe fn decode(
2466            &mut self,
2467            decoder: &mut fidl::encoding::Decoder<'_, D>,
2468            offset: usize,
2469            _depth: fidl::encoding::Depth,
2470        ) -> fidl::Result<()> {
2471            decoder.debug_check_bounds::<Self>(offset);
2472            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2473            // Verify that padding bytes are zero.
2474            let ptr = unsafe { buf_ptr.offset(2) };
2475            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2476            let mask = 0xff00u16;
2477            let maskedval = padval & mask;
2478            if maskedval != 0 {
2479                return Err(fidl::Error::NonZeroPadding {
2480                    padding_start: offset + 2 + ((mask as u64).trailing_zeros() / 8) as usize,
2481                });
2482            }
2483            // Copy from the buffer into the object.
2484            unsafe {
2485                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2486            }
2487            Ok(())
2488        }
2489    }
2490
2491    impl fidl::encoding::ValueTypeMarker for WlanWmmAccessCategoryParameters {
2492        type Borrowed<'a> = &'a Self;
2493        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2494            value
2495        }
2496    }
2497
2498    unsafe impl fidl::encoding::TypeMarker for WlanWmmAccessCategoryParameters {
2499        type Owned = Self;
2500
2501        #[inline(always)]
2502        fn inline_align(_context: fidl::encoding::Context) -> usize {
2503            2
2504        }
2505
2506        #[inline(always)]
2507        fn inline_size(_context: fidl::encoding::Context) -> usize {
2508            8
2509        }
2510    }
2511
2512    unsafe impl<D: fidl::encoding::ResourceDialect>
2513        fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>
2514        for &WlanWmmAccessCategoryParameters
2515    {
2516        #[inline]
2517        unsafe fn encode(
2518            self,
2519            encoder: &mut fidl::encoding::Encoder<'_, D>,
2520            offset: usize,
2521            _depth: fidl::encoding::Depth,
2522        ) -> fidl::Result<()> {
2523            encoder.debug_check_bounds::<WlanWmmAccessCategoryParameters>(offset);
2524            // Delegate to tuple encoding.
2525            fidl::encoding::Encode::<WlanWmmAccessCategoryParameters, D>::encode(
2526                (
2527                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.ecw_min),
2528                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.ecw_max),
2529                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.aifsn),
2530                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.txop_limit),
2531                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.acm),
2532                ),
2533                encoder,
2534                offset,
2535                _depth,
2536            )
2537        }
2538    }
2539    unsafe impl<
2540        D: fidl::encoding::ResourceDialect,
2541        T0: fidl::encoding::Encode<u8, D>,
2542        T1: fidl::encoding::Encode<u8, D>,
2543        T2: fidl::encoding::Encode<u8, D>,
2544        T3: fidl::encoding::Encode<u16, D>,
2545        T4: fidl::encoding::Encode<bool, D>,
2546    > fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D> for (T0, T1, T2, T3, T4)
2547    {
2548        #[inline]
2549        unsafe fn encode(
2550            self,
2551            encoder: &mut fidl::encoding::Encoder<'_, D>,
2552            offset: usize,
2553            depth: fidl::encoding::Depth,
2554        ) -> fidl::Result<()> {
2555            encoder.debug_check_bounds::<WlanWmmAccessCategoryParameters>(offset);
2556            // Zero out padding regions. There's no need to apply masks
2557            // because the unmasked parts will be overwritten by fields.
2558            unsafe {
2559                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(2);
2560                (ptr as *mut u16).write_unaligned(0);
2561            }
2562            unsafe {
2563                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(6);
2564                (ptr as *mut u16).write_unaligned(0);
2565            }
2566            // Write the fields.
2567            self.0.encode(encoder, offset + 0, depth)?;
2568            self.1.encode(encoder, offset + 1, depth)?;
2569            self.2.encode(encoder, offset + 2, depth)?;
2570            self.3.encode(encoder, offset + 4, depth)?;
2571            self.4.encode(encoder, offset + 6, depth)?;
2572            Ok(())
2573        }
2574    }
2575
2576    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2577        for WlanWmmAccessCategoryParameters
2578    {
2579        #[inline(always)]
2580        fn new_empty() -> Self {
2581            Self {
2582                ecw_min: fidl::new_empty!(u8, D),
2583                ecw_max: fidl::new_empty!(u8, D),
2584                aifsn: fidl::new_empty!(u8, D),
2585                txop_limit: fidl::new_empty!(u16, D),
2586                acm: fidl::new_empty!(bool, D),
2587            }
2588        }
2589
2590        #[inline]
2591        unsafe fn decode(
2592            &mut self,
2593            decoder: &mut fidl::encoding::Decoder<'_, D>,
2594            offset: usize,
2595            _depth: fidl::encoding::Depth,
2596        ) -> fidl::Result<()> {
2597            decoder.debug_check_bounds::<Self>(offset);
2598            // Verify that padding bytes are zero.
2599            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(2) };
2600            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2601            let mask = 0xff00u16;
2602            let maskedval = padval & mask;
2603            if maskedval != 0 {
2604                return Err(fidl::Error::NonZeroPadding {
2605                    padding_start: offset + 2 + ((mask as u64).trailing_zeros() / 8) as usize,
2606                });
2607            }
2608            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(6) };
2609            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2610            let mask = 0xff00u16;
2611            let maskedval = padval & mask;
2612            if maskedval != 0 {
2613                return Err(fidl::Error::NonZeroPadding {
2614                    padding_start: offset + 6 + ((mask as u64).trailing_zeros() / 8) as usize,
2615                });
2616            }
2617            fidl::decode!(u8, D, &mut self.ecw_min, decoder, offset + 0, _depth)?;
2618            fidl::decode!(u8, D, &mut self.ecw_max, decoder, offset + 1, _depth)?;
2619            fidl::decode!(u8, D, &mut self.aifsn, decoder, offset + 2, _depth)?;
2620            fidl::decode!(u16, D, &mut self.txop_limit, decoder, offset + 4, _depth)?;
2621            fidl::decode!(bool, D, &mut self.acm, decoder, offset + 6, _depth)?;
2622            Ok(())
2623        }
2624    }
2625
2626    impl fidl::encoding::ValueTypeMarker for WlanWmmParameters {
2627        type Borrowed<'a> = &'a Self;
2628        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2629            value
2630        }
2631    }
2632
2633    unsafe impl fidl::encoding::TypeMarker for WlanWmmParameters {
2634        type Owned = Self;
2635
2636        #[inline(always)]
2637        fn inline_align(_context: fidl::encoding::Context) -> usize {
2638            2
2639        }
2640
2641        #[inline(always)]
2642        fn inline_size(_context: fidl::encoding::Context) -> usize {
2643            34
2644        }
2645    }
2646
2647    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanWmmParameters, D>
2648        for &WlanWmmParameters
2649    {
2650        #[inline]
2651        unsafe fn encode(
2652            self,
2653            encoder: &mut fidl::encoding::Encoder<'_, D>,
2654            offset: usize,
2655            _depth: fidl::encoding::Depth,
2656        ) -> fidl::Result<()> {
2657            encoder.debug_check_bounds::<WlanWmmParameters>(offset);
2658            // Delegate to tuple encoding.
2659            fidl::encoding::Encode::<WlanWmmParameters, D>::encode(
2660                (
2661                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.apsd),
2662                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2663                        &self.ac_be_params,
2664                    ),
2665                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2666                        &self.ac_bk_params,
2667                    ),
2668                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2669                        &self.ac_vi_params,
2670                    ),
2671                    <WlanWmmAccessCategoryParameters as fidl::encoding::ValueTypeMarker>::borrow(
2672                        &self.ac_vo_params,
2673                    ),
2674                ),
2675                encoder,
2676                offset,
2677                _depth,
2678            )
2679        }
2680    }
2681    unsafe impl<
2682        D: fidl::encoding::ResourceDialect,
2683        T0: fidl::encoding::Encode<bool, D>,
2684        T1: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2685        T2: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2686        T3: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2687        T4: fidl::encoding::Encode<WlanWmmAccessCategoryParameters, D>,
2688    > fidl::encoding::Encode<WlanWmmParameters, D> for (T0, T1, T2, T3, T4)
2689    {
2690        #[inline]
2691        unsafe fn encode(
2692            self,
2693            encoder: &mut fidl::encoding::Encoder<'_, D>,
2694            offset: usize,
2695            depth: fidl::encoding::Depth,
2696        ) -> fidl::Result<()> {
2697            encoder.debug_check_bounds::<WlanWmmParameters>(offset);
2698            // Zero out padding regions. There's no need to apply masks
2699            // because the unmasked parts will be overwritten by fields.
2700            unsafe {
2701                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2702                (ptr as *mut u16).write_unaligned(0);
2703            }
2704            // Write the fields.
2705            self.0.encode(encoder, offset + 0, depth)?;
2706            self.1.encode(encoder, offset + 2, depth)?;
2707            self.2.encode(encoder, offset + 10, depth)?;
2708            self.3.encode(encoder, offset + 18, depth)?;
2709            self.4.encode(encoder, offset + 26, depth)?;
2710            Ok(())
2711        }
2712    }
2713
2714    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanWmmParameters {
2715        #[inline(always)]
2716        fn new_empty() -> Self {
2717            Self {
2718                apsd: fidl::new_empty!(bool, D),
2719                ac_be_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2720                ac_bk_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2721                ac_vi_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2722                ac_vo_params: fidl::new_empty!(WlanWmmAccessCategoryParameters, D),
2723            }
2724        }
2725
2726        #[inline]
2727        unsafe fn decode(
2728            &mut self,
2729            decoder: &mut fidl::encoding::Decoder<'_, D>,
2730            offset: usize,
2731            _depth: fidl::encoding::Depth,
2732        ) -> fidl::Result<()> {
2733            decoder.debug_check_bounds::<Self>(offset);
2734            // Verify that padding bytes are zero.
2735            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2736            let padval = unsafe { (ptr as *const u16).read_unaligned() };
2737            let mask = 0xff00u16;
2738            let maskedval = padval & mask;
2739            if maskedval != 0 {
2740                return Err(fidl::Error::NonZeroPadding {
2741                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2742                });
2743            }
2744            fidl::decode!(bool, D, &mut self.apsd, decoder, offset + 0, _depth)?;
2745            fidl::decode!(
2746                WlanWmmAccessCategoryParameters,
2747                D,
2748                &mut self.ac_be_params,
2749                decoder,
2750                offset + 2,
2751                _depth
2752            )?;
2753            fidl::decode!(
2754                WlanWmmAccessCategoryParameters,
2755                D,
2756                &mut self.ac_bk_params,
2757                decoder,
2758                offset + 10,
2759                _depth
2760            )?;
2761            fidl::decode!(
2762                WlanWmmAccessCategoryParameters,
2763                D,
2764                &mut self.ac_vi_params,
2765                decoder,
2766                offset + 18,
2767                _depth
2768            )?;
2769            fidl::decode!(
2770                WlanWmmAccessCategoryParameters,
2771                D,
2772                &mut self.ac_vo_params,
2773                decoder,
2774                offset + 26,
2775                _depth
2776            )?;
2777            Ok(())
2778        }
2779    }
2780
2781    impl ApfPacketFilterSupport {
2782        #[inline(always)]
2783        fn max_ordinal_present(&self) -> u64 {
2784            if let Some(_) = self.max_filter_length {
2785                return 3;
2786            }
2787            if let Some(_) = self.version {
2788                return 2;
2789            }
2790            if let Some(_) = self.supported {
2791                return 1;
2792            }
2793            0
2794        }
2795    }
2796
2797    impl fidl::encoding::ValueTypeMarker for ApfPacketFilterSupport {
2798        type Borrowed<'a> = &'a Self;
2799        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2800            value
2801        }
2802    }
2803
2804    unsafe impl fidl::encoding::TypeMarker for ApfPacketFilterSupport {
2805        type Owned = Self;
2806
2807        #[inline(always)]
2808        fn inline_align(_context: fidl::encoding::Context) -> usize {
2809            8
2810        }
2811
2812        #[inline(always)]
2813        fn inline_size(_context: fidl::encoding::Context) -> usize {
2814            16
2815        }
2816    }
2817
2818    unsafe impl<D: fidl::encoding::ResourceDialect>
2819        fidl::encoding::Encode<ApfPacketFilterSupport, D> for &ApfPacketFilterSupport
2820    {
2821        unsafe fn encode(
2822            self,
2823            encoder: &mut fidl::encoding::Encoder<'_, D>,
2824            offset: usize,
2825            mut depth: fidl::encoding::Depth,
2826        ) -> fidl::Result<()> {
2827            encoder.debug_check_bounds::<ApfPacketFilterSupport>(offset);
2828            // Vector header
2829            let max_ordinal: u64 = self.max_ordinal_present();
2830            encoder.write_num(max_ordinal, offset);
2831            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2832            // Calling encoder.out_of_line_offset(0) is not allowed.
2833            if max_ordinal == 0 {
2834                return Ok(());
2835            }
2836            depth.increment()?;
2837            let envelope_size = 8;
2838            let bytes_len = max_ordinal as usize * envelope_size;
2839            #[allow(unused_variables)]
2840            let offset = encoder.out_of_line_offset(bytes_len);
2841            let mut _prev_end_offset: usize = 0;
2842            if 1 > max_ordinal {
2843                return Ok(());
2844            }
2845
2846            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2847            // are envelope_size bytes.
2848            let cur_offset: usize = (1 - 1) * envelope_size;
2849
2850            // Zero reserved fields.
2851            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2852
2853            // Safety:
2854            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2855            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2856            //   envelope_size bytes, there is always sufficient room.
2857            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2858                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2859                encoder,
2860                offset + cur_offset,
2861                depth,
2862            )?;
2863
2864            _prev_end_offset = cur_offset + envelope_size;
2865            if 2 > max_ordinal {
2866                return Ok(());
2867            }
2868
2869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2870            // are envelope_size bytes.
2871            let cur_offset: usize = (2 - 1) * envelope_size;
2872
2873            // Zero reserved fields.
2874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2875
2876            // Safety:
2877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2879            //   envelope_size bytes, there is always sufficient room.
2880            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2881                self.version.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2882                encoder,
2883                offset + cur_offset,
2884                depth,
2885            )?;
2886
2887            _prev_end_offset = cur_offset + envelope_size;
2888            if 3 > max_ordinal {
2889                return Ok(());
2890            }
2891
2892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2893            // are envelope_size bytes.
2894            let cur_offset: usize = (3 - 1) * envelope_size;
2895
2896            // Zero reserved fields.
2897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2898
2899            // Safety:
2900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2902            //   envelope_size bytes, there is always sufficient room.
2903            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2904                self.max_filter_length
2905                    .as_ref()
2906                    .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2907                encoder,
2908                offset + cur_offset,
2909                depth,
2910            )?;
2911
2912            _prev_end_offset = cur_offset + envelope_size;
2913
2914            Ok(())
2915        }
2916    }
2917
2918    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2919        for ApfPacketFilterSupport
2920    {
2921        #[inline(always)]
2922        fn new_empty() -> Self {
2923            Self::default()
2924        }
2925
2926        unsafe fn decode(
2927            &mut self,
2928            decoder: &mut fidl::encoding::Decoder<'_, D>,
2929            offset: usize,
2930            mut depth: fidl::encoding::Depth,
2931        ) -> fidl::Result<()> {
2932            decoder.debug_check_bounds::<Self>(offset);
2933            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2934                None => return Err(fidl::Error::NotNullable),
2935                Some(len) => len,
2936            };
2937            // Calling decoder.out_of_line_offset(0) is not allowed.
2938            if len == 0 {
2939                return Ok(());
2940            };
2941            depth.increment()?;
2942            let envelope_size = 8;
2943            let bytes_len = len * envelope_size;
2944            let offset = decoder.out_of_line_offset(bytes_len)?;
2945            // Decode the envelope for each type.
2946            let mut _next_ordinal_to_read = 0;
2947            let mut next_offset = offset;
2948            let end_offset = offset + bytes_len;
2949            _next_ordinal_to_read += 1;
2950            if next_offset >= end_offset {
2951                return Ok(());
2952            }
2953
2954            // Decode unknown envelopes for gaps in ordinals.
2955            while _next_ordinal_to_read < 1 {
2956                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2957                _next_ordinal_to_read += 1;
2958                next_offset += envelope_size;
2959            }
2960
2961            let next_out_of_line = decoder.next_out_of_line();
2962            let handles_before = decoder.remaining_handles();
2963            if let Some((inlined, num_bytes, num_handles)) =
2964                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2965            {
2966                let member_inline_size =
2967                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2968                if inlined != (member_inline_size <= 4) {
2969                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2970                }
2971                let inner_offset;
2972                let mut inner_depth = depth.clone();
2973                if inlined {
2974                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2975                    inner_offset = next_offset;
2976                } else {
2977                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2978                    inner_depth.increment()?;
2979                }
2980                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
2981                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2982                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2983                {
2984                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2985                }
2986                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2987                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2988                }
2989            }
2990
2991            next_offset += envelope_size;
2992            _next_ordinal_to_read += 1;
2993            if next_offset >= end_offset {
2994                return Ok(());
2995            }
2996
2997            // Decode unknown envelopes for gaps in ordinals.
2998            while _next_ordinal_to_read < 2 {
2999                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3000                _next_ordinal_to_read += 1;
3001                next_offset += envelope_size;
3002            }
3003
3004            let next_out_of_line = decoder.next_out_of_line();
3005            let handles_before = decoder.remaining_handles();
3006            if let Some((inlined, num_bytes, num_handles)) =
3007                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3008            {
3009                let member_inline_size =
3010                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3011                if inlined != (member_inline_size <= 4) {
3012                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3013                }
3014                let inner_offset;
3015                let mut inner_depth = depth.clone();
3016                if inlined {
3017                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3018                    inner_offset = next_offset;
3019                } else {
3020                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3021                    inner_depth.increment()?;
3022                }
3023                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(i32, D));
3024                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3025                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3026                {
3027                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3028                }
3029                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3030                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3031                }
3032            }
3033
3034            next_offset += envelope_size;
3035            _next_ordinal_to_read += 1;
3036            if next_offset >= end_offset {
3037                return Ok(());
3038            }
3039
3040            // Decode unknown envelopes for gaps in ordinals.
3041            while _next_ordinal_to_read < 3 {
3042                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3043                _next_ordinal_to_read += 1;
3044                next_offset += envelope_size;
3045            }
3046
3047            let next_out_of_line = decoder.next_out_of_line();
3048            let handles_before = decoder.remaining_handles();
3049            if let Some((inlined, num_bytes, num_handles)) =
3050                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3051            {
3052                let member_inline_size =
3053                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3054                if inlined != (member_inline_size <= 4) {
3055                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3056                }
3057                let inner_offset;
3058                let mut inner_depth = depth.clone();
3059                if inlined {
3060                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3061                    inner_offset = next_offset;
3062                } else {
3063                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3064                    inner_depth.increment()?;
3065                }
3066                let val_ref =
3067                    self.max_filter_length.get_or_insert_with(|| fidl::new_empty!(i32, D));
3068                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3069                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3070                {
3071                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3072                }
3073                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3074                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3075                }
3076            }
3077
3078            next_offset += envelope_size;
3079
3080            // Decode the remaining unknown envelopes.
3081            while next_offset < end_offset {
3082                _next_ordinal_to_read += 1;
3083                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3084                next_offset += envelope_size;
3085            }
3086
3087            Ok(())
3088        }
3089    }
3090
3091    impl DataPlaneExtension {
3092        #[inline(always)]
3093        fn max_ordinal_present(&self) -> u64 {
3094            if let Some(_) = self.data_plane_type {
3095                return 1;
3096            }
3097            0
3098        }
3099    }
3100
3101    impl fidl::encoding::ValueTypeMarker for DataPlaneExtension {
3102        type Borrowed<'a> = &'a Self;
3103        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3104            value
3105        }
3106    }
3107
3108    unsafe impl fidl::encoding::TypeMarker for DataPlaneExtension {
3109        type Owned = Self;
3110
3111        #[inline(always)]
3112        fn inline_align(_context: fidl::encoding::Context) -> usize {
3113            8
3114        }
3115
3116        #[inline(always)]
3117        fn inline_size(_context: fidl::encoding::Context) -> usize {
3118            16
3119        }
3120    }
3121
3122    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DataPlaneExtension, D>
3123        for &DataPlaneExtension
3124    {
3125        unsafe fn encode(
3126            self,
3127            encoder: &mut fidl::encoding::Encoder<'_, D>,
3128            offset: usize,
3129            mut depth: fidl::encoding::Depth,
3130        ) -> fidl::Result<()> {
3131            encoder.debug_check_bounds::<DataPlaneExtension>(offset);
3132            // Vector header
3133            let max_ordinal: u64 = self.max_ordinal_present();
3134            encoder.write_num(max_ordinal, offset);
3135            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3136            // Calling encoder.out_of_line_offset(0) is not allowed.
3137            if max_ordinal == 0 {
3138                return Ok(());
3139            }
3140            depth.increment()?;
3141            let envelope_size = 8;
3142            let bytes_len = max_ordinal as usize * envelope_size;
3143            #[allow(unused_variables)]
3144            let offset = encoder.out_of_line_offset(bytes_len);
3145            let mut _prev_end_offset: usize = 0;
3146            if 1 > max_ordinal {
3147                return Ok(());
3148            }
3149
3150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3151            // are envelope_size bytes.
3152            let cur_offset: usize = (1 - 1) * envelope_size;
3153
3154            // Zero reserved fields.
3155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3156
3157            // Safety:
3158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3160            //   envelope_size bytes, there is always sufficient room.
3161            fidl::encoding::encode_in_envelope_optional::<DataPlaneType, D>(
3162                self.data_plane_type
3163                    .as_ref()
3164                    .map(<DataPlaneType as fidl::encoding::ValueTypeMarker>::borrow),
3165                encoder,
3166                offset + cur_offset,
3167                depth,
3168            )?;
3169
3170            _prev_end_offset = cur_offset + envelope_size;
3171
3172            Ok(())
3173        }
3174    }
3175
3176    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataPlaneExtension {
3177        #[inline(always)]
3178        fn new_empty() -> Self {
3179            Self::default()
3180        }
3181
3182        unsafe fn decode(
3183            &mut self,
3184            decoder: &mut fidl::encoding::Decoder<'_, D>,
3185            offset: usize,
3186            mut depth: fidl::encoding::Depth,
3187        ) -> fidl::Result<()> {
3188            decoder.debug_check_bounds::<Self>(offset);
3189            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3190                None => return Err(fidl::Error::NotNullable),
3191                Some(len) => len,
3192            };
3193            // Calling decoder.out_of_line_offset(0) is not allowed.
3194            if len == 0 {
3195                return Ok(());
3196            };
3197            depth.increment()?;
3198            let envelope_size = 8;
3199            let bytes_len = len * envelope_size;
3200            let offset = decoder.out_of_line_offset(bytes_len)?;
3201            // Decode the envelope for each type.
3202            let mut _next_ordinal_to_read = 0;
3203            let mut next_offset = offset;
3204            let end_offset = offset + bytes_len;
3205            _next_ordinal_to_read += 1;
3206            if next_offset >= end_offset {
3207                return Ok(());
3208            }
3209
3210            // Decode unknown envelopes for gaps in ordinals.
3211            while _next_ordinal_to_read < 1 {
3212                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3213                _next_ordinal_to_read += 1;
3214                next_offset += envelope_size;
3215            }
3216
3217            let next_out_of_line = decoder.next_out_of_line();
3218            let handles_before = decoder.remaining_handles();
3219            if let Some((inlined, num_bytes, num_handles)) =
3220                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3221            {
3222                let member_inline_size =
3223                    <DataPlaneType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3224                if inlined != (member_inline_size <= 4) {
3225                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3226                }
3227                let inner_offset;
3228                let mut inner_depth = depth.clone();
3229                if inlined {
3230                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3231                    inner_offset = next_offset;
3232                } else {
3233                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3234                    inner_depth.increment()?;
3235                }
3236                let val_ref =
3237                    self.data_plane_type.get_or_insert_with(|| fidl::new_empty!(DataPlaneType, D));
3238                fidl::decode!(DataPlaneType, D, val_ref, decoder, inner_offset, inner_depth)?;
3239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3240                {
3241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3242                }
3243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3245                }
3246            }
3247
3248            next_offset += envelope_size;
3249
3250            // Decode the remaining unknown envelopes.
3251            while next_offset < end_offset {
3252                _next_ordinal_to_read += 1;
3253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3254                next_offset += envelope_size;
3255            }
3256
3257            Ok(())
3258        }
3259    }
3260
3261    impl DeviceExtension {
3262        #[inline(always)]
3263        fn max_ordinal_present(&self) -> u64 {
3264            if let Some(_) = self.tx_status_report_supported {
3265                return 3;
3266            }
3267            if let Some(_) = self.mac_implementation_type {
3268                return 2;
3269            }
3270            if let Some(_) = self.is_synthetic {
3271                return 1;
3272            }
3273            0
3274        }
3275    }
3276
3277    impl fidl::encoding::ValueTypeMarker for DeviceExtension {
3278        type Borrowed<'a> = &'a Self;
3279        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3280            value
3281        }
3282    }
3283
3284    unsafe impl fidl::encoding::TypeMarker for DeviceExtension {
3285        type Owned = Self;
3286
3287        #[inline(always)]
3288        fn inline_align(_context: fidl::encoding::Context) -> usize {
3289            8
3290        }
3291
3292        #[inline(always)]
3293        fn inline_size(_context: fidl::encoding::Context) -> usize {
3294            16
3295        }
3296    }
3297
3298    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceExtension, D>
3299        for &DeviceExtension
3300    {
3301        unsafe fn encode(
3302            self,
3303            encoder: &mut fidl::encoding::Encoder<'_, D>,
3304            offset: usize,
3305            mut depth: fidl::encoding::Depth,
3306        ) -> fidl::Result<()> {
3307            encoder.debug_check_bounds::<DeviceExtension>(offset);
3308            // Vector header
3309            let max_ordinal: u64 = self.max_ordinal_present();
3310            encoder.write_num(max_ordinal, offset);
3311            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3312            // Calling encoder.out_of_line_offset(0) is not allowed.
3313            if max_ordinal == 0 {
3314                return Ok(());
3315            }
3316            depth.increment()?;
3317            let envelope_size = 8;
3318            let bytes_len = max_ordinal as usize * envelope_size;
3319            #[allow(unused_variables)]
3320            let offset = encoder.out_of_line_offset(bytes_len);
3321            let mut _prev_end_offset: usize = 0;
3322            if 1 > max_ordinal {
3323                return Ok(());
3324            }
3325
3326            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3327            // are envelope_size bytes.
3328            let cur_offset: usize = (1 - 1) * envelope_size;
3329
3330            // Zero reserved fields.
3331            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3332
3333            // Safety:
3334            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3335            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3336            //   envelope_size bytes, there is always sufficient room.
3337            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3338                self.is_synthetic.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3339                encoder,
3340                offset + cur_offset,
3341                depth,
3342            )?;
3343
3344            _prev_end_offset = cur_offset + envelope_size;
3345            if 2 > max_ordinal {
3346                return Ok(());
3347            }
3348
3349            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3350            // are envelope_size bytes.
3351            let cur_offset: usize = (2 - 1) * envelope_size;
3352
3353            // Zero reserved fields.
3354            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3355
3356            // Safety:
3357            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3358            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3359            //   envelope_size bytes, there is always sufficient room.
3360            fidl::encoding::encode_in_envelope_optional::<MacImplementationType, D>(
3361                self.mac_implementation_type
3362                    .as_ref()
3363                    .map(<MacImplementationType as fidl::encoding::ValueTypeMarker>::borrow),
3364                encoder,
3365                offset + cur_offset,
3366                depth,
3367            )?;
3368
3369            _prev_end_offset = cur_offset + envelope_size;
3370            if 3 > max_ordinal {
3371                return Ok(());
3372            }
3373
3374            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3375            // are envelope_size bytes.
3376            let cur_offset: usize = (3 - 1) * envelope_size;
3377
3378            // Zero reserved fields.
3379            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3380
3381            // Safety:
3382            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3383            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3384            //   envelope_size bytes, there is always sufficient room.
3385            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3386                self.tx_status_report_supported
3387                    .as_ref()
3388                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3389                encoder,
3390                offset + cur_offset,
3391                depth,
3392            )?;
3393
3394            _prev_end_offset = cur_offset + envelope_size;
3395
3396            Ok(())
3397        }
3398    }
3399
3400    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceExtension {
3401        #[inline(always)]
3402        fn new_empty() -> Self {
3403            Self::default()
3404        }
3405
3406        unsafe fn decode(
3407            &mut self,
3408            decoder: &mut fidl::encoding::Decoder<'_, D>,
3409            offset: usize,
3410            mut depth: fidl::encoding::Depth,
3411        ) -> fidl::Result<()> {
3412            decoder.debug_check_bounds::<Self>(offset);
3413            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3414                None => return Err(fidl::Error::NotNullable),
3415                Some(len) => len,
3416            };
3417            // Calling decoder.out_of_line_offset(0) is not allowed.
3418            if len == 0 {
3419                return Ok(());
3420            };
3421            depth.increment()?;
3422            let envelope_size = 8;
3423            let bytes_len = len * envelope_size;
3424            let offset = decoder.out_of_line_offset(bytes_len)?;
3425            // Decode the envelope for each type.
3426            let mut _next_ordinal_to_read = 0;
3427            let mut next_offset = offset;
3428            let end_offset = offset + bytes_len;
3429            _next_ordinal_to_read += 1;
3430            if next_offset >= end_offset {
3431                return Ok(());
3432            }
3433
3434            // Decode unknown envelopes for gaps in ordinals.
3435            while _next_ordinal_to_read < 1 {
3436                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3437                _next_ordinal_to_read += 1;
3438                next_offset += envelope_size;
3439            }
3440
3441            let next_out_of_line = decoder.next_out_of_line();
3442            let handles_before = decoder.remaining_handles();
3443            if let Some((inlined, num_bytes, num_handles)) =
3444                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3445            {
3446                let member_inline_size =
3447                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3448                if inlined != (member_inline_size <= 4) {
3449                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3450                }
3451                let inner_offset;
3452                let mut inner_depth = depth.clone();
3453                if inlined {
3454                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3455                    inner_offset = next_offset;
3456                } else {
3457                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3458                    inner_depth.increment()?;
3459                }
3460                let val_ref = self.is_synthetic.get_or_insert_with(|| fidl::new_empty!(bool, D));
3461                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3462                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3463                {
3464                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3465                }
3466                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3467                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3468                }
3469            }
3470
3471            next_offset += envelope_size;
3472            _next_ordinal_to_read += 1;
3473            if next_offset >= end_offset {
3474                return Ok(());
3475            }
3476
3477            // Decode unknown envelopes for gaps in ordinals.
3478            while _next_ordinal_to_read < 2 {
3479                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3480                _next_ordinal_to_read += 1;
3481                next_offset += envelope_size;
3482            }
3483
3484            let next_out_of_line = decoder.next_out_of_line();
3485            let handles_before = decoder.remaining_handles();
3486            if let Some((inlined, num_bytes, num_handles)) =
3487                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3488            {
3489                let member_inline_size =
3490                    <MacImplementationType as fidl::encoding::TypeMarker>::inline_size(
3491                        decoder.context,
3492                    );
3493                if inlined != (member_inline_size <= 4) {
3494                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3495                }
3496                let inner_offset;
3497                let mut inner_depth = depth.clone();
3498                if inlined {
3499                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3500                    inner_offset = next_offset;
3501                } else {
3502                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3503                    inner_depth.increment()?;
3504                }
3505                let val_ref = self
3506                    .mac_implementation_type
3507                    .get_or_insert_with(|| fidl::new_empty!(MacImplementationType, D));
3508                fidl::decode!(
3509                    MacImplementationType,
3510                    D,
3511                    val_ref,
3512                    decoder,
3513                    inner_offset,
3514                    inner_depth
3515                )?;
3516                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3517                {
3518                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3519                }
3520                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3521                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3522                }
3523            }
3524
3525            next_offset += envelope_size;
3526            _next_ordinal_to_read += 1;
3527            if next_offset >= end_offset {
3528                return Ok(());
3529            }
3530
3531            // Decode unknown envelopes for gaps in ordinals.
3532            while _next_ordinal_to_read < 3 {
3533                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3534                _next_ordinal_to_read += 1;
3535                next_offset += envelope_size;
3536            }
3537
3538            let next_out_of_line = decoder.next_out_of_line();
3539            let handles_before = decoder.remaining_handles();
3540            if let Some((inlined, num_bytes, num_handles)) =
3541                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3542            {
3543                let member_inline_size =
3544                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3545                if inlined != (member_inline_size <= 4) {
3546                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3547                }
3548                let inner_offset;
3549                let mut inner_depth = depth.clone();
3550                if inlined {
3551                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3552                    inner_offset = next_offset;
3553                } else {
3554                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3555                    inner_depth.increment()?;
3556                }
3557                let val_ref = self
3558                    .tx_status_report_supported
3559                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
3560                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3561                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3562                {
3563                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3564                }
3565                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3566                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3567                }
3568            }
3569
3570            next_offset += envelope_size;
3571
3572            // Decode the remaining unknown envelopes.
3573            while next_offset < end_offset {
3574                _next_ordinal_to_read += 1;
3575                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3576                next_offset += envelope_size;
3577            }
3578
3579            Ok(())
3580        }
3581    }
3582
3583    impl DfsFeature {
3584        #[inline(always)]
3585        fn max_ordinal_present(&self) -> u64 {
3586            if let Some(_) = self.supported {
3587                return 1;
3588            }
3589            0
3590        }
3591    }
3592
3593    impl fidl::encoding::ValueTypeMarker for DfsFeature {
3594        type Borrowed<'a> = &'a Self;
3595        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3596            value
3597        }
3598    }
3599
3600    unsafe impl fidl::encoding::TypeMarker for DfsFeature {
3601        type Owned = Self;
3602
3603        #[inline(always)]
3604        fn inline_align(_context: fidl::encoding::Context) -> usize {
3605            8
3606        }
3607
3608        #[inline(always)]
3609        fn inline_size(_context: fidl::encoding::Context) -> usize {
3610            16
3611        }
3612    }
3613
3614    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DfsFeature, D>
3615        for &DfsFeature
3616    {
3617        unsafe fn encode(
3618            self,
3619            encoder: &mut fidl::encoding::Encoder<'_, D>,
3620            offset: usize,
3621            mut depth: fidl::encoding::Depth,
3622        ) -> fidl::Result<()> {
3623            encoder.debug_check_bounds::<DfsFeature>(offset);
3624            // Vector header
3625            let max_ordinal: u64 = self.max_ordinal_present();
3626            encoder.write_num(max_ordinal, offset);
3627            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3628            // Calling encoder.out_of_line_offset(0) is not allowed.
3629            if max_ordinal == 0 {
3630                return Ok(());
3631            }
3632            depth.increment()?;
3633            let envelope_size = 8;
3634            let bytes_len = max_ordinal as usize * envelope_size;
3635            #[allow(unused_variables)]
3636            let offset = encoder.out_of_line_offset(bytes_len);
3637            let mut _prev_end_offset: usize = 0;
3638            if 1 > max_ordinal {
3639                return Ok(());
3640            }
3641
3642            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3643            // are envelope_size bytes.
3644            let cur_offset: usize = (1 - 1) * envelope_size;
3645
3646            // Zero reserved fields.
3647            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3648
3649            // Safety:
3650            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3651            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3652            //   envelope_size bytes, there is always sufficient room.
3653            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3654                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3655                encoder,
3656                offset + cur_offset,
3657                depth,
3658            )?;
3659
3660            _prev_end_offset = cur_offset + envelope_size;
3661
3662            Ok(())
3663        }
3664    }
3665
3666    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DfsFeature {
3667        #[inline(always)]
3668        fn new_empty() -> Self {
3669            Self::default()
3670        }
3671
3672        unsafe fn decode(
3673            &mut self,
3674            decoder: &mut fidl::encoding::Decoder<'_, D>,
3675            offset: usize,
3676            mut depth: fidl::encoding::Depth,
3677        ) -> fidl::Result<()> {
3678            decoder.debug_check_bounds::<Self>(offset);
3679            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3680                None => return Err(fidl::Error::NotNullable),
3681                Some(len) => len,
3682            };
3683            // Calling decoder.out_of_line_offset(0) is not allowed.
3684            if len == 0 {
3685                return Ok(());
3686            };
3687            depth.increment()?;
3688            let envelope_size = 8;
3689            let bytes_len = len * envelope_size;
3690            let offset = decoder.out_of_line_offset(bytes_len)?;
3691            // Decode the envelope for each type.
3692            let mut _next_ordinal_to_read = 0;
3693            let mut next_offset = offset;
3694            let end_offset = offset + bytes_len;
3695            _next_ordinal_to_read += 1;
3696            if next_offset >= end_offset {
3697                return Ok(());
3698            }
3699
3700            // Decode unknown envelopes for gaps in ordinals.
3701            while _next_ordinal_to_read < 1 {
3702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3703                _next_ordinal_to_read += 1;
3704                next_offset += envelope_size;
3705            }
3706
3707            let next_out_of_line = decoder.next_out_of_line();
3708            let handles_before = decoder.remaining_handles();
3709            if let Some((inlined, num_bytes, num_handles)) =
3710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3711            {
3712                let member_inline_size =
3713                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3714                if inlined != (member_inline_size <= 4) {
3715                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3716                }
3717                let inner_offset;
3718                let mut inner_depth = depth.clone();
3719                if inlined {
3720                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3721                    inner_offset = next_offset;
3722                } else {
3723                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3724                    inner_depth.increment()?;
3725                }
3726                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
3727                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3728                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3729                {
3730                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3731                }
3732                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3733                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3734                }
3735            }
3736
3737            next_offset += envelope_size;
3738
3739            // Decode the remaining unknown envelopes.
3740            while next_offset < end_offset {
3741                _next_ordinal_to_read += 1;
3742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3743                next_offset += envelope_size;
3744            }
3745
3746            Ok(())
3747        }
3748    }
3749
3750    impl DiscoverySupport {
3751        #[inline(always)]
3752        fn max_ordinal_present(&self) -> u64 {
3753            if let Some(_) = self.probe_response_offload {
3754                return 2;
3755            }
3756            if let Some(_) = self.scan_offload {
3757                return 1;
3758            }
3759            0
3760        }
3761    }
3762
3763    impl fidl::encoding::ValueTypeMarker for DiscoverySupport {
3764        type Borrowed<'a> = &'a Self;
3765        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3766            value
3767        }
3768    }
3769
3770    unsafe impl fidl::encoding::TypeMarker for DiscoverySupport {
3771        type Owned = Self;
3772
3773        #[inline(always)]
3774        fn inline_align(_context: fidl::encoding::Context) -> usize {
3775            8
3776        }
3777
3778        #[inline(always)]
3779        fn inline_size(_context: fidl::encoding::Context) -> usize {
3780            16
3781        }
3782    }
3783
3784    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DiscoverySupport, D>
3785        for &DiscoverySupport
3786    {
3787        unsafe fn encode(
3788            self,
3789            encoder: &mut fidl::encoding::Encoder<'_, D>,
3790            offset: usize,
3791            mut depth: fidl::encoding::Depth,
3792        ) -> fidl::Result<()> {
3793            encoder.debug_check_bounds::<DiscoverySupport>(offset);
3794            // Vector header
3795            let max_ordinal: u64 = self.max_ordinal_present();
3796            encoder.write_num(max_ordinal, offset);
3797            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3798            // Calling encoder.out_of_line_offset(0) is not allowed.
3799            if max_ordinal == 0 {
3800                return Ok(());
3801            }
3802            depth.increment()?;
3803            let envelope_size = 8;
3804            let bytes_len = max_ordinal as usize * envelope_size;
3805            #[allow(unused_variables)]
3806            let offset = encoder.out_of_line_offset(bytes_len);
3807            let mut _prev_end_offset: usize = 0;
3808            if 1 > max_ordinal {
3809                return Ok(());
3810            }
3811
3812            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3813            // are envelope_size bytes.
3814            let cur_offset: usize = (1 - 1) * envelope_size;
3815
3816            // Zero reserved fields.
3817            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3818
3819            // Safety:
3820            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3821            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3822            //   envelope_size bytes, there is always sufficient room.
3823            fidl::encoding::encode_in_envelope_optional::<ScanOffloadExtension, D>(
3824                self.scan_offload
3825                    .as_ref()
3826                    .map(<ScanOffloadExtension as fidl::encoding::ValueTypeMarker>::borrow),
3827                encoder,
3828                offset + cur_offset,
3829                depth,
3830            )?;
3831
3832            _prev_end_offset = cur_offset + envelope_size;
3833            if 2 > max_ordinal {
3834                return Ok(());
3835            }
3836
3837            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3838            // are envelope_size bytes.
3839            let cur_offset: usize = (2 - 1) * envelope_size;
3840
3841            // Zero reserved fields.
3842            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3843
3844            // Safety:
3845            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3846            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3847            //   envelope_size bytes, there is always sufficient room.
3848            fidl::encoding::encode_in_envelope_optional::<ProbeResponseOffloadExtension, D>(
3849                self.probe_response_offload.as_ref().map(
3850                    <ProbeResponseOffloadExtension as fidl::encoding::ValueTypeMarker>::borrow,
3851                ),
3852                encoder,
3853                offset + cur_offset,
3854                depth,
3855            )?;
3856
3857            _prev_end_offset = cur_offset + envelope_size;
3858
3859            Ok(())
3860        }
3861    }
3862
3863    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DiscoverySupport {
3864        #[inline(always)]
3865        fn new_empty() -> Self {
3866            Self::default()
3867        }
3868
3869        unsafe fn decode(
3870            &mut self,
3871            decoder: &mut fidl::encoding::Decoder<'_, D>,
3872            offset: usize,
3873            mut depth: fidl::encoding::Depth,
3874        ) -> fidl::Result<()> {
3875            decoder.debug_check_bounds::<Self>(offset);
3876            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3877                None => return Err(fidl::Error::NotNullable),
3878                Some(len) => len,
3879            };
3880            // Calling decoder.out_of_line_offset(0) is not allowed.
3881            if len == 0 {
3882                return Ok(());
3883            };
3884            depth.increment()?;
3885            let envelope_size = 8;
3886            let bytes_len = len * envelope_size;
3887            let offset = decoder.out_of_line_offset(bytes_len)?;
3888            // Decode the envelope for each type.
3889            let mut _next_ordinal_to_read = 0;
3890            let mut next_offset = offset;
3891            let end_offset = offset + bytes_len;
3892            _next_ordinal_to_read += 1;
3893            if next_offset >= end_offset {
3894                return Ok(());
3895            }
3896
3897            // Decode unknown envelopes for gaps in ordinals.
3898            while _next_ordinal_to_read < 1 {
3899                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3900                _next_ordinal_to_read += 1;
3901                next_offset += envelope_size;
3902            }
3903
3904            let next_out_of_line = decoder.next_out_of_line();
3905            let handles_before = decoder.remaining_handles();
3906            if let Some((inlined, num_bytes, num_handles)) =
3907                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3908            {
3909                let member_inline_size =
3910                    <ScanOffloadExtension as fidl::encoding::TypeMarker>::inline_size(
3911                        decoder.context,
3912                    );
3913                if inlined != (member_inline_size <= 4) {
3914                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3915                }
3916                let inner_offset;
3917                let mut inner_depth = depth.clone();
3918                if inlined {
3919                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3920                    inner_offset = next_offset;
3921                } else {
3922                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3923                    inner_depth.increment()?;
3924                }
3925                let val_ref = self
3926                    .scan_offload
3927                    .get_or_insert_with(|| fidl::new_empty!(ScanOffloadExtension, D));
3928                fidl::decode!(
3929                    ScanOffloadExtension,
3930                    D,
3931                    val_ref,
3932                    decoder,
3933                    inner_offset,
3934                    inner_depth
3935                )?;
3936                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3937                {
3938                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3939                }
3940                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3941                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3942                }
3943            }
3944
3945            next_offset += envelope_size;
3946            _next_ordinal_to_read += 1;
3947            if next_offset >= end_offset {
3948                return Ok(());
3949            }
3950
3951            // Decode unknown envelopes for gaps in ordinals.
3952            while _next_ordinal_to_read < 2 {
3953                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3954                _next_ordinal_to_read += 1;
3955                next_offset += envelope_size;
3956            }
3957
3958            let next_out_of_line = decoder.next_out_of_line();
3959            let handles_before = decoder.remaining_handles();
3960            if let Some((inlined, num_bytes, num_handles)) =
3961                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3962            {
3963                let member_inline_size =
3964                    <ProbeResponseOffloadExtension as fidl::encoding::TypeMarker>::inline_size(
3965                        decoder.context,
3966                    );
3967                if inlined != (member_inline_size <= 4) {
3968                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3969                }
3970                let inner_offset;
3971                let mut inner_depth = depth.clone();
3972                if inlined {
3973                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3974                    inner_offset = next_offset;
3975                } else {
3976                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3977                    inner_depth.increment()?;
3978                }
3979                let val_ref = self
3980                    .probe_response_offload
3981                    .get_or_insert_with(|| fidl::new_empty!(ProbeResponseOffloadExtension, D));
3982                fidl::decode!(
3983                    ProbeResponseOffloadExtension,
3984                    D,
3985                    val_ref,
3986                    decoder,
3987                    inner_offset,
3988                    inner_depth
3989                )?;
3990                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3991                {
3992                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3993                }
3994                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3995                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3996                }
3997            }
3998
3999            next_offset += envelope_size;
4000
4001            // Decode the remaining unknown envelopes.
4002            while next_offset < end_offset {
4003                _next_ordinal_to_read += 1;
4004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4005                next_offset += envelope_size;
4006            }
4007
4008            Ok(())
4009        }
4010    }
4011
4012    impl JoinBssRequest {
4013        #[inline(always)]
4014        fn max_ordinal_present(&self) -> u64 {
4015            if let Some(_) = self.beacon_period {
4016                return 4;
4017            }
4018            if let Some(_) = self.remote {
4019                return 3;
4020            }
4021            if let Some(_) = self.bss_type {
4022                return 2;
4023            }
4024            if let Some(_) = self.bssid {
4025                return 1;
4026            }
4027            0
4028        }
4029    }
4030
4031    impl fidl::encoding::ValueTypeMarker for JoinBssRequest {
4032        type Borrowed<'a> = &'a Self;
4033        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4034            value
4035        }
4036    }
4037
4038    unsafe impl fidl::encoding::TypeMarker for JoinBssRequest {
4039        type Owned = Self;
4040
4041        #[inline(always)]
4042        fn inline_align(_context: fidl::encoding::Context) -> usize {
4043            8
4044        }
4045
4046        #[inline(always)]
4047        fn inline_size(_context: fidl::encoding::Context) -> usize {
4048            16
4049        }
4050    }
4051
4052    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<JoinBssRequest, D>
4053        for &JoinBssRequest
4054    {
4055        unsafe fn encode(
4056            self,
4057            encoder: &mut fidl::encoding::Encoder<'_, D>,
4058            offset: usize,
4059            mut depth: fidl::encoding::Depth,
4060        ) -> fidl::Result<()> {
4061            encoder.debug_check_bounds::<JoinBssRequest>(offset);
4062            // Vector header
4063            let max_ordinal: u64 = self.max_ordinal_present();
4064            encoder.write_num(max_ordinal, offset);
4065            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4066            // Calling encoder.out_of_line_offset(0) is not allowed.
4067            if max_ordinal == 0 {
4068                return Ok(());
4069            }
4070            depth.increment()?;
4071            let envelope_size = 8;
4072            let bytes_len = max_ordinal as usize * envelope_size;
4073            #[allow(unused_variables)]
4074            let offset = encoder.out_of_line_offset(bytes_len);
4075            let mut _prev_end_offset: usize = 0;
4076            if 1 > max_ordinal {
4077                return Ok(());
4078            }
4079
4080            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4081            // are envelope_size bytes.
4082            let cur_offset: usize = (1 - 1) * envelope_size;
4083
4084            // Zero reserved fields.
4085            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4086
4087            // Safety:
4088            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4089            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4090            //   envelope_size bytes, there is always sufficient room.
4091            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 6>, D>(
4092                self.bssid
4093                    .as_ref()
4094                    .map(<fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow),
4095                encoder,
4096                offset + cur_offset,
4097                depth,
4098            )?;
4099
4100            _prev_end_offset = cur_offset + envelope_size;
4101            if 2 > max_ordinal {
4102                return Ok(());
4103            }
4104
4105            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4106            // are envelope_size bytes.
4107            let cur_offset: usize = (2 - 1) * envelope_size;
4108
4109            // Zero reserved fields.
4110            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4111
4112            // Safety:
4113            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4114            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4115            //   envelope_size bytes, there is always sufficient room.
4116            fidl::encoding::encode_in_envelope_optional::<BssType, D>(
4117                self.bss_type.as_ref().map(<BssType as fidl::encoding::ValueTypeMarker>::borrow),
4118                encoder,
4119                offset + cur_offset,
4120                depth,
4121            )?;
4122
4123            _prev_end_offset = cur_offset + envelope_size;
4124            if 3 > max_ordinal {
4125                return Ok(());
4126            }
4127
4128            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4129            // are envelope_size bytes.
4130            let cur_offset: usize = (3 - 1) * envelope_size;
4131
4132            // Zero reserved fields.
4133            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4134
4135            // Safety:
4136            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4137            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4138            //   envelope_size bytes, there is always sufficient room.
4139            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4140                self.remote.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4141                encoder,
4142                offset + cur_offset,
4143                depth,
4144            )?;
4145
4146            _prev_end_offset = cur_offset + envelope_size;
4147            if 4 > max_ordinal {
4148                return Ok(());
4149            }
4150
4151            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4152            // are envelope_size bytes.
4153            let cur_offset: usize = (4 - 1) * envelope_size;
4154
4155            // Zero reserved fields.
4156            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4157
4158            // Safety:
4159            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4160            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4161            //   envelope_size bytes, there is always sufficient room.
4162            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4163                self.beacon_period.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4164                encoder,
4165                offset + cur_offset,
4166                depth,
4167            )?;
4168
4169            _prev_end_offset = cur_offset + envelope_size;
4170
4171            Ok(())
4172        }
4173    }
4174
4175    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for JoinBssRequest {
4176        #[inline(always)]
4177        fn new_empty() -> Self {
4178            Self::default()
4179        }
4180
4181        unsafe fn decode(
4182            &mut self,
4183            decoder: &mut fidl::encoding::Decoder<'_, D>,
4184            offset: usize,
4185            mut depth: fidl::encoding::Depth,
4186        ) -> fidl::Result<()> {
4187            decoder.debug_check_bounds::<Self>(offset);
4188            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4189                None => return Err(fidl::Error::NotNullable),
4190                Some(len) => len,
4191            };
4192            // Calling decoder.out_of_line_offset(0) is not allowed.
4193            if len == 0 {
4194                return Ok(());
4195            };
4196            depth.increment()?;
4197            let envelope_size = 8;
4198            let bytes_len = len * envelope_size;
4199            let offset = decoder.out_of_line_offset(bytes_len)?;
4200            // Decode the envelope for each type.
4201            let mut _next_ordinal_to_read = 0;
4202            let mut next_offset = offset;
4203            let end_offset = offset + bytes_len;
4204            _next_ordinal_to_read += 1;
4205            if next_offset >= end_offset {
4206                return Ok(());
4207            }
4208
4209            // Decode unknown envelopes for gaps in ordinals.
4210            while _next_ordinal_to_read < 1 {
4211                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4212                _next_ordinal_to_read += 1;
4213                next_offset += envelope_size;
4214            }
4215
4216            let next_out_of_line = decoder.next_out_of_line();
4217            let handles_before = decoder.remaining_handles();
4218            if let Some((inlined, num_bytes, num_handles)) =
4219                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4220            {
4221                let member_inline_size =
4222                    <fidl::encoding::Array<u8, 6> as fidl::encoding::TypeMarker>::inline_size(
4223                        decoder.context,
4224                    );
4225                if inlined != (member_inline_size <= 4) {
4226                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4227                }
4228                let inner_offset;
4229                let mut inner_depth = depth.clone();
4230                if inlined {
4231                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4232                    inner_offset = next_offset;
4233                } else {
4234                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4235                    inner_depth.increment()?;
4236                }
4237                let val_ref = self
4238                    .bssid
4239                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 6>, D));
4240                fidl::decode!(fidl::encoding::Array<u8, 6>, D, val_ref, decoder, inner_offset, inner_depth)?;
4241                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4242                {
4243                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4244                }
4245                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4246                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4247                }
4248            }
4249
4250            next_offset += envelope_size;
4251            _next_ordinal_to_read += 1;
4252            if next_offset >= end_offset {
4253                return Ok(());
4254            }
4255
4256            // Decode unknown envelopes for gaps in ordinals.
4257            while _next_ordinal_to_read < 2 {
4258                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4259                _next_ordinal_to_read += 1;
4260                next_offset += envelope_size;
4261            }
4262
4263            let next_out_of_line = decoder.next_out_of_line();
4264            let handles_before = decoder.remaining_handles();
4265            if let Some((inlined, num_bytes, num_handles)) =
4266                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4267            {
4268                let member_inline_size =
4269                    <BssType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4270                if inlined != (member_inline_size <= 4) {
4271                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4272                }
4273                let inner_offset;
4274                let mut inner_depth = depth.clone();
4275                if inlined {
4276                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4277                    inner_offset = next_offset;
4278                } else {
4279                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4280                    inner_depth.increment()?;
4281                }
4282                let val_ref = self.bss_type.get_or_insert_with(|| fidl::new_empty!(BssType, D));
4283                fidl::decode!(BssType, D, val_ref, decoder, inner_offset, inner_depth)?;
4284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4285                {
4286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4287                }
4288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4290                }
4291            }
4292
4293            next_offset += envelope_size;
4294            _next_ordinal_to_read += 1;
4295            if next_offset >= end_offset {
4296                return Ok(());
4297            }
4298
4299            // Decode unknown envelopes for gaps in ordinals.
4300            while _next_ordinal_to_read < 3 {
4301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4302                _next_ordinal_to_read += 1;
4303                next_offset += envelope_size;
4304            }
4305
4306            let next_out_of_line = decoder.next_out_of_line();
4307            let handles_before = decoder.remaining_handles();
4308            if let Some((inlined, num_bytes, num_handles)) =
4309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4310            {
4311                let member_inline_size =
4312                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4313                if inlined != (member_inline_size <= 4) {
4314                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4315                }
4316                let inner_offset;
4317                let mut inner_depth = depth.clone();
4318                if inlined {
4319                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4320                    inner_offset = next_offset;
4321                } else {
4322                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4323                    inner_depth.increment()?;
4324                }
4325                let val_ref = self.remote.get_or_insert_with(|| fidl::new_empty!(bool, D));
4326                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4327                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4328                {
4329                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4330                }
4331                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4332                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4333                }
4334            }
4335
4336            next_offset += envelope_size;
4337            _next_ordinal_to_read += 1;
4338            if next_offset >= end_offset {
4339                return Ok(());
4340            }
4341
4342            // Decode unknown envelopes for gaps in ordinals.
4343            while _next_ordinal_to_read < 4 {
4344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4345                _next_ordinal_to_read += 1;
4346                next_offset += envelope_size;
4347            }
4348
4349            let next_out_of_line = decoder.next_out_of_line();
4350            let handles_before = decoder.remaining_handles();
4351            if let Some((inlined, num_bytes, num_handles)) =
4352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4353            {
4354                let member_inline_size =
4355                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4356                if inlined != (member_inline_size <= 4) {
4357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4358                }
4359                let inner_offset;
4360                let mut inner_depth = depth.clone();
4361                if inlined {
4362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4363                    inner_offset = next_offset;
4364                } else {
4365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4366                    inner_depth.increment()?;
4367                }
4368                let val_ref = self.beacon_period.get_or_insert_with(|| fidl::new_empty!(u16, D));
4369                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4370                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4371                {
4372                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4373                }
4374                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4375                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4376                }
4377            }
4378
4379            next_offset += envelope_size;
4380
4381            // Decode the remaining unknown envelopes.
4382            while next_offset < end_offset {
4383                _next_ordinal_to_read += 1;
4384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4385                next_offset += envelope_size;
4386            }
4387
4388            Ok(())
4389        }
4390    }
4391
4392    impl MacSublayerSupport {
4393        #[inline(always)]
4394        fn max_ordinal_present(&self) -> u64 {
4395            if let Some(_) = self.device {
4396                return 3;
4397            }
4398            if let Some(_) = self.data_plane {
4399                return 2;
4400            }
4401            if let Some(_) = self.rate_selection_offload {
4402                return 1;
4403            }
4404            0
4405        }
4406    }
4407
4408    impl fidl::encoding::ValueTypeMarker for MacSublayerSupport {
4409        type Borrowed<'a> = &'a Self;
4410        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4411            value
4412        }
4413    }
4414
4415    unsafe impl fidl::encoding::TypeMarker for MacSublayerSupport {
4416        type Owned = Self;
4417
4418        #[inline(always)]
4419        fn inline_align(_context: fidl::encoding::Context) -> usize {
4420            8
4421        }
4422
4423        #[inline(always)]
4424        fn inline_size(_context: fidl::encoding::Context) -> usize {
4425            16
4426        }
4427    }
4428
4429    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MacSublayerSupport, D>
4430        for &MacSublayerSupport
4431    {
4432        unsafe fn encode(
4433            self,
4434            encoder: &mut fidl::encoding::Encoder<'_, D>,
4435            offset: usize,
4436            mut depth: fidl::encoding::Depth,
4437        ) -> fidl::Result<()> {
4438            encoder.debug_check_bounds::<MacSublayerSupport>(offset);
4439            // Vector header
4440            let max_ordinal: u64 = self.max_ordinal_present();
4441            encoder.write_num(max_ordinal, offset);
4442            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4443            // Calling encoder.out_of_line_offset(0) is not allowed.
4444            if max_ordinal == 0 {
4445                return Ok(());
4446            }
4447            depth.increment()?;
4448            let envelope_size = 8;
4449            let bytes_len = max_ordinal as usize * envelope_size;
4450            #[allow(unused_variables)]
4451            let offset = encoder.out_of_line_offset(bytes_len);
4452            let mut _prev_end_offset: usize = 0;
4453            if 1 > max_ordinal {
4454                return Ok(());
4455            }
4456
4457            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4458            // are envelope_size bytes.
4459            let cur_offset: usize = (1 - 1) * envelope_size;
4460
4461            // Zero reserved fields.
4462            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4463
4464            // Safety:
4465            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4466            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4467            //   envelope_size bytes, there is always sufficient room.
4468            fidl::encoding::encode_in_envelope_optional::<RateSelectionOffloadExtension, D>(
4469                self.rate_selection_offload.as_ref().map(
4470                    <RateSelectionOffloadExtension as fidl::encoding::ValueTypeMarker>::borrow,
4471                ),
4472                encoder,
4473                offset + cur_offset,
4474                depth,
4475            )?;
4476
4477            _prev_end_offset = cur_offset + envelope_size;
4478            if 2 > max_ordinal {
4479                return Ok(());
4480            }
4481
4482            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4483            // are envelope_size bytes.
4484            let cur_offset: usize = (2 - 1) * envelope_size;
4485
4486            // Zero reserved fields.
4487            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4488
4489            // Safety:
4490            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4491            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4492            //   envelope_size bytes, there is always sufficient room.
4493            fidl::encoding::encode_in_envelope_optional::<DataPlaneExtension, D>(
4494                self.data_plane
4495                    .as_ref()
4496                    .map(<DataPlaneExtension as fidl::encoding::ValueTypeMarker>::borrow),
4497                encoder,
4498                offset + cur_offset,
4499                depth,
4500            )?;
4501
4502            _prev_end_offset = cur_offset + envelope_size;
4503            if 3 > max_ordinal {
4504                return Ok(());
4505            }
4506
4507            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4508            // are envelope_size bytes.
4509            let cur_offset: usize = (3 - 1) * envelope_size;
4510
4511            // Zero reserved fields.
4512            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4513
4514            // Safety:
4515            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4516            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4517            //   envelope_size bytes, there is always sufficient room.
4518            fidl::encoding::encode_in_envelope_optional::<DeviceExtension, D>(
4519                self.device
4520                    .as_ref()
4521                    .map(<DeviceExtension as fidl::encoding::ValueTypeMarker>::borrow),
4522                encoder,
4523                offset + cur_offset,
4524                depth,
4525            )?;
4526
4527            _prev_end_offset = cur_offset + envelope_size;
4528
4529            Ok(())
4530        }
4531    }
4532
4533    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MacSublayerSupport {
4534        #[inline(always)]
4535        fn new_empty() -> Self {
4536            Self::default()
4537        }
4538
4539        unsafe fn decode(
4540            &mut self,
4541            decoder: &mut fidl::encoding::Decoder<'_, D>,
4542            offset: usize,
4543            mut depth: fidl::encoding::Depth,
4544        ) -> fidl::Result<()> {
4545            decoder.debug_check_bounds::<Self>(offset);
4546            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4547                None => return Err(fidl::Error::NotNullable),
4548                Some(len) => len,
4549            };
4550            // Calling decoder.out_of_line_offset(0) is not allowed.
4551            if len == 0 {
4552                return Ok(());
4553            };
4554            depth.increment()?;
4555            let envelope_size = 8;
4556            let bytes_len = len * envelope_size;
4557            let offset = decoder.out_of_line_offset(bytes_len)?;
4558            // Decode the envelope for each type.
4559            let mut _next_ordinal_to_read = 0;
4560            let mut next_offset = offset;
4561            let end_offset = offset + bytes_len;
4562            _next_ordinal_to_read += 1;
4563            if next_offset >= end_offset {
4564                return Ok(());
4565            }
4566
4567            // Decode unknown envelopes for gaps in ordinals.
4568            while _next_ordinal_to_read < 1 {
4569                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4570                _next_ordinal_to_read += 1;
4571                next_offset += envelope_size;
4572            }
4573
4574            let next_out_of_line = decoder.next_out_of_line();
4575            let handles_before = decoder.remaining_handles();
4576            if let Some((inlined, num_bytes, num_handles)) =
4577                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4578            {
4579                let member_inline_size =
4580                    <RateSelectionOffloadExtension as fidl::encoding::TypeMarker>::inline_size(
4581                        decoder.context,
4582                    );
4583                if inlined != (member_inline_size <= 4) {
4584                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4585                }
4586                let inner_offset;
4587                let mut inner_depth = depth.clone();
4588                if inlined {
4589                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4590                    inner_offset = next_offset;
4591                } else {
4592                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4593                    inner_depth.increment()?;
4594                }
4595                let val_ref = self
4596                    .rate_selection_offload
4597                    .get_or_insert_with(|| fidl::new_empty!(RateSelectionOffloadExtension, D));
4598                fidl::decode!(
4599                    RateSelectionOffloadExtension,
4600                    D,
4601                    val_ref,
4602                    decoder,
4603                    inner_offset,
4604                    inner_depth
4605                )?;
4606                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4607                {
4608                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4609                }
4610                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4611                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4612                }
4613            }
4614
4615            next_offset += envelope_size;
4616            _next_ordinal_to_read += 1;
4617            if next_offset >= end_offset {
4618                return Ok(());
4619            }
4620
4621            // Decode unknown envelopes for gaps in ordinals.
4622            while _next_ordinal_to_read < 2 {
4623                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4624                _next_ordinal_to_read += 1;
4625                next_offset += envelope_size;
4626            }
4627
4628            let next_out_of_line = decoder.next_out_of_line();
4629            let handles_before = decoder.remaining_handles();
4630            if let Some((inlined, num_bytes, num_handles)) =
4631                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4632            {
4633                let member_inline_size =
4634                    <DataPlaneExtension as fidl::encoding::TypeMarker>::inline_size(
4635                        decoder.context,
4636                    );
4637                if inlined != (member_inline_size <= 4) {
4638                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4639                }
4640                let inner_offset;
4641                let mut inner_depth = depth.clone();
4642                if inlined {
4643                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4644                    inner_offset = next_offset;
4645                } else {
4646                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4647                    inner_depth.increment()?;
4648                }
4649                let val_ref =
4650                    self.data_plane.get_or_insert_with(|| fidl::new_empty!(DataPlaneExtension, D));
4651                fidl::decode!(DataPlaneExtension, D, val_ref, decoder, inner_offset, inner_depth)?;
4652                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4653                {
4654                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4655                }
4656                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4657                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4658                }
4659            }
4660
4661            next_offset += envelope_size;
4662            _next_ordinal_to_read += 1;
4663            if next_offset >= end_offset {
4664                return Ok(());
4665            }
4666
4667            // Decode unknown envelopes for gaps in ordinals.
4668            while _next_ordinal_to_read < 3 {
4669                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4670                _next_ordinal_to_read += 1;
4671                next_offset += envelope_size;
4672            }
4673
4674            let next_out_of_line = decoder.next_out_of_line();
4675            let handles_before = decoder.remaining_handles();
4676            if let Some((inlined, num_bytes, num_handles)) =
4677                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4678            {
4679                let member_inline_size =
4680                    <DeviceExtension as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4681                if inlined != (member_inline_size <= 4) {
4682                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4683                }
4684                let inner_offset;
4685                let mut inner_depth = depth.clone();
4686                if inlined {
4687                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4688                    inner_offset = next_offset;
4689                } else {
4690                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4691                    inner_depth.increment()?;
4692                }
4693                let val_ref =
4694                    self.device.get_or_insert_with(|| fidl::new_empty!(DeviceExtension, D));
4695                fidl::decode!(DeviceExtension, D, val_ref, decoder, inner_offset, inner_depth)?;
4696                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4697                {
4698                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4699                }
4700                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4701                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4702                }
4703            }
4704
4705            next_offset += envelope_size;
4706
4707            // Decode the remaining unknown envelopes.
4708            while next_offset < end_offset {
4709                _next_ordinal_to_read += 1;
4710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4711                next_offset += envelope_size;
4712            }
4713
4714            Ok(())
4715        }
4716    }
4717
4718    impl MfpFeature {
4719        #[inline(always)]
4720        fn max_ordinal_present(&self) -> u64 {
4721            if let Some(_) = self.supported {
4722                return 1;
4723            }
4724            0
4725        }
4726    }
4727
4728    impl fidl::encoding::ValueTypeMarker for MfpFeature {
4729        type Borrowed<'a> = &'a Self;
4730        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4731            value
4732        }
4733    }
4734
4735    unsafe impl fidl::encoding::TypeMarker for MfpFeature {
4736        type Owned = Self;
4737
4738        #[inline(always)]
4739        fn inline_align(_context: fidl::encoding::Context) -> usize {
4740            8
4741        }
4742
4743        #[inline(always)]
4744        fn inline_size(_context: fidl::encoding::Context) -> usize {
4745            16
4746        }
4747    }
4748
4749    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MfpFeature, D>
4750        for &MfpFeature
4751    {
4752        unsafe fn encode(
4753            self,
4754            encoder: &mut fidl::encoding::Encoder<'_, D>,
4755            offset: usize,
4756            mut depth: fidl::encoding::Depth,
4757        ) -> fidl::Result<()> {
4758            encoder.debug_check_bounds::<MfpFeature>(offset);
4759            // Vector header
4760            let max_ordinal: u64 = self.max_ordinal_present();
4761            encoder.write_num(max_ordinal, offset);
4762            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4763            // Calling encoder.out_of_line_offset(0) is not allowed.
4764            if max_ordinal == 0 {
4765                return Ok(());
4766            }
4767            depth.increment()?;
4768            let envelope_size = 8;
4769            let bytes_len = max_ordinal as usize * envelope_size;
4770            #[allow(unused_variables)]
4771            let offset = encoder.out_of_line_offset(bytes_len);
4772            let mut _prev_end_offset: usize = 0;
4773            if 1 > max_ordinal {
4774                return Ok(());
4775            }
4776
4777            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4778            // are envelope_size bytes.
4779            let cur_offset: usize = (1 - 1) * envelope_size;
4780
4781            // Zero reserved fields.
4782            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4783
4784            // Safety:
4785            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4786            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4787            //   envelope_size bytes, there is always sufficient room.
4788            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4789                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4790                encoder,
4791                offset + cur_offset,
4792                depth,
4793            )?;
4794
4795            _prev_end_offset = cur_offset + envelope_size;
4796
4797            Ok(())
4798        }
4799    }
4800
4801    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MfpFeature {
4802        #[inline(always)]
4803        fn new_empty() -> Self {
4804            Self::default()
4805        }
4806
4807        unsafe fn decode(
4808            &mut self,
4809            decoder: &mut fidl::encoding::Decoder<'_, D>,
4810            offset: usize,
4811            mut depth: fidl::encoding::Depth,
4812        ) -> fidl::Result<()> {
4813            decoder.debug_check_bounds::<Self>(offset);
4814            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4815                None => return Err(fidl::Error::NotNullable),
4816                Some(len) => len,
4817            };
4818            // Calling decoder.out_of_line_offset(0) is not allowed.
4819            if len == 0 {
4820                return Ok(());
4821            };
4822            depth.increment()?;
4823            let envelope_size = 8;
4824            let bytes_len = len * envelope_size;
4825            let offset = decoder.out_of_line_offset(bytes_len)?;
4826            // Decode the envelope for each type.
4827            let mut _next_ordinal_to_read = 0;
4828            let mut next_offset = offset;
4829            let end_offset = offset + bytes_len;
4830            _next_ordinal_to_read += 1;
4831            if next_offset >= end_offset {
4832                return Ok(());
4833            }
4834
4835            // Decode unknown envelopes for gaps in ordinals.
4836            while _next_ordinal_to_read < 1 {
4837                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4838                _next_ordinal_to_read += 1;
4839                next_offset += envelope_size;
4840            }
4841
4842            let next_out_of_line = decoder.next_out_of_line();
4843            let handles_before = decoder.remaining_handles();
4844            if let Some((inlined, num_bytes, num_handles)) =
4845                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4846            {
4847                let member_inline_size =
4848                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4849                if inlined != (member_inline_size <= 4) {
4850                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4851                }
4852                let inner_offset;
4853                let mut inner_depth = depth.clone();
4854                if inlined {
4855                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4856                    inner_offset = next_offset;
4857                } else {
4858                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4859                    inner_depth.increment()?;
4860                }
4861                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
4862                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4863                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4864                {
4865                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4866                }
4867                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4868                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4869                }
4870            }
4871
4872            next_offset += envelope_size;
4873
4874            // Decode the remaining unknown envelopes.
4875            while next_offset < end_offset {
4876                _next_ordinal_to_read += 1;
4877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4878                next_offset += envelope_size;
4879            }
4880
4881            Ok(())
4882        }
4883    }
4884
4885    impl OweFeature {
4886        #[inline(always)]
4887        fn max_ordinal_present(&self) -> u64 {
4888            if let Some(_) = self.supported {
4889                return 1;
4890            }
4891            0
4892        }
4893    }
4894
4895    impl fidl::encoding::ValueTypeMarker for OweFeature {
4896        type Borrowed<'a> = &'a Self;
4897        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4898            value
4899        }
4900    }
4901
4902    unsafe impl fidl::encoding::TypeMarker for OweFeature {
4903        type Owned = Self;
4904
4905        #[inline(always)]
4906        fn inline_align(_context: fidl::encoding::Context) -> usize {
4907            8
4908        }
4909
4910        #[inline(always)]
4911        fn inline_size(_context: fidl::encoding::Context) -> usize {
4912            16
4913        }
4914    }
4915
4916    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<OweFeature, D>
4917        for &OweFeature
4918    {
4919        unsafe fn encode(
4920            self,
4921            encoder: &mut fidl::encoding::Encoder<'_, D>,
4922            offset: usize,
4923            mut depth: fidl::encoding::Depth,
4924        ) -> fidl::Result<()> {
4925            encoder.debug_check_bounds::<OweFeature>(offset);
4926            // Vector header
4927            let max_ordinal: u64 = self.max_ordinal_present();
4928            encoder.write_num(max_ordinal, offset);
4929            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4930            // Calling encoder.out_of_line_offset(0) is not allowed.
4931            if max_ordinal == 0 {
4932                return Ok(());
4933            }
4934            depth.increment()?;
4935            let envelope_size = 8;
4936            let bytes_len = max_ordinal as usize * envelope_size;
4937            #[allow(unused_variables)]
4938            let offset = encoder.out_of_line_offset(bytes_len);
4939            let mut _prev_end_offset: usize = 0;
4940            if 1 > max_ordinal {
4941                return Ok(());
4942            }
4943
4944            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4945            // are envelope_size bytes.
4946            let cur_offset: usize = (1 - 1) * envelope_size;
4947
4948            // Zero reserved fields.
4949            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4950
4951            // Safety:
4952            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4953            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4954            //   envelope_size bytes, there is always sufficient room.
4955            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4956                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4957                encoder,
4958                offset + cur_offset,
4959                depth,
4960            )?;
4961
4962            _prev_end_offset = cur_offset + envelope_size;
4963
4964            Ok(())
4965        }
4966    }
4967
4968    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for OweFeature {
4969        #[inline(always)]
4970        fn new_empty() -> Self {
4971            Self::default()
4972        }
4973
4974        unsafe fn decode(
4975            &mut self,
4976            decoder: &mut fidl::encoding::Decoder<'_, D>,
4977            offset: usize,
4978            mut depth: fidl::encoding::Depth,
4979        ) -> fidl::Result<()> {
4980            decoder.debug_check_bounds::<Self>(offset);
4981            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4982                None => return Err(fidl::Error::NotNullable),
4983                Some(len) => len,
4984            };
4985            // Calling decoder.out_of_line_offset(0) is not allowed.
4986            if len == 0 {
4987                return Ok(());
4988            };
4989            depth.increment()?;
4990            let envelope_size = 8;
4991            let bytes_len = len * envelope_size;
4992            let offset = decoder.out_of_line_offset(bytes_len)?;
4993            // Decode the envelope for each type.
4994            let mut _next_ordinal_to_read = 0;
4995            let mut next_offset = offset;
4996            let end_offset = offset + bytes_len;
4997            _next_ordinal_to_read += 1;
4998            if next_offset >= end_offset {
4999                return Ok(());
5000            }
5001
5002            // Decode unknown envelopes for gaps in ordinals.
5003            while _next_ordinal_to_read < 1 {
5004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5005                _next_ordinal_to_read += 1;
5006                next_offset += envelope_size;
5007            }
5008
5009            let next_out_of_line = decoder.next_out_of_line();
5010            let handles_before = decoder.remaining_handles();
5011            if let Some((inlined, num_bytes, num_handles)) =
5012                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5013            {
5014                let member_inline_size =
5015                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5016                if inlined != (member_inline_size <= 4) {
5017                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5018                }
5019                let inner_offset;
5020                let mut inner_depth = depth.clone();
5021                if inlined {
5022                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5023                    inner_offset = next_offset;
5024                } else {
5025                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5026                    inner_depth.increment()?;
5027                }
5028                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5029                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5030                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5031                {
5032                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5033                }
5034                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5035                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5036                }
5037            }
5038
5039            next_offset += envelope_size;
5040
5041            // Decode the remaining unknown envelopes.
5042            while next_offset < end_offset {
5043                _next_ordinal_to_read += 1;
5044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5045                next_offset += envelope_size;
5046            }
5047
5048            Ok(())
5049        }
5050    }
5051
5052    impl ProbeResponseOffloadExtension {
5053        #[inline(always)]
5054        fn max_ordinal_present(&self) -> u64 {
5055            if let Some(_) = self.supported {
5056                return 1;
5057            }
5058            0
5059        }
5060    }
5061
5062    impl fidl::encoding::ValueTypeMarker for ProbeResponseOffloadExtension {
5063        type Borrowed<'a> = &'a Self;
5064        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5065            value
5066        }
5067    }
5068
5069    unsafe impl fidl::encoding::TypeMarker for ProbeResponseOffloadExtension {
5070        type Owned = Self;
5071
5072        #[inline(always)]
5073        fn inline_align(_context: fidl::encoding::Context) -> usize {
5074            8
5075        }
5076
5077        #[inline(always)]
5078        fn inline_size(_context: fidl::encoding::Context) -> usize {
5079            16
5080        }
5081    }
5082
5083    unsafe impl<D: fidl::encoding::ResourceDialect>
5084        fidl::encoding::Encode<ProbeResponseOffloadExtension, D>
5085        for &ProbeResponseOffloadExtension
5086    {
5087        unsafe fn encode(
5088            self,
5089            encoder: &mut fidl::encoding::Encoder<'_, D>,
5090            offset: usize,
5091            mut depth: fidl::encoding::Depth,
5092        ) -> fidl::Result<()> {
5093            encoder.debug_check_bounds::<ProbeResponseOffloadExtension>(offset);
5094            // Vector header
5095            let max_ordinal: u64 = self.max_ordinal_present();
5096            encoder.write_num(max_ordinal, offset);
5097            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5098            // Calling encoder.out_of_line_offset(0) is not allowed.
5099            if max_ordinal == 0 {
5100                return Ok(());
5101            }
5102            depth.increment()?;
5103            let envelope_size = 8;
5104            let bytes_len = max_ordinal as usize * envelope_size;
5105            #[allow(unused_variables)]
5106            let offset = encoder.out_of_line_offset(bytes_len);
5107            let mut _prev_end_offset: usize = 0;
5108            if 1 > max_ordinal {
5109                return Ok(());
5110            }
5111
5112            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5113            // are envelope_size bytes.
5114            let cur_offset: usize = (1 - 1) * envelope_size;
5115
5116            // Zero reserved fields.
5117            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5118
5119            // Safety:
5120            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5121            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5122            //   envelope_size bytes, there is always sufficient room.
5123            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5124                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5125                encoder,
5126                offset + cur_offset,
5127                depth,
5128            )?;
5129
5130            _prev_end_offset = cur_offset + envelope_size;
5131
5132            Ok(())
5133        }
5134    }
5135
5136    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5137        for ProbeResponseOffloadExtension
5138    {
5139        #[inline(always)]
5140        fn new_empty() -> Self {
5141            Self::default()
5142        }
5143
5144        unsafe fn decode(
5145            &mut self,
5146            decoder: &mut fidl::encoding::Decoder<'_, D>,
5147            offset: usize,
5148            mut depth: fidl::encoding::Depth,
5149        ) -> fidl::Result<()> {
5150            decoder.debug_check_bounds::<Self>(offset);
5151            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5152                None => return Err(fidl::Error::NotNullable),
5153                Some(len) => len,
5154            };
5155            // Calling decoder.out_of_line_offset(0) is not allowed.
5156            if len == 0 {
5157                return Ok(());
5158            };
5159            depth.increment()?;
5160            let envelope_size = 8;
5161            let bytes_len = len * envelope_size;
5162            let offset = decoder.out_of_line_offset(bytes_len)?;
5163            // Decode the envelope for each type.
5164            let mut _next_ordinal_to_read = 0;
5165            let mut next_offset = offset;
5166            let end_offset = offset + bytes_len;
5167            _next_ordinal_to_read += 1;
5168            if next_offset >= end_offset {
5169                return Ok(());
5170            }
5171
5172            // Decode unknown envelopes for gaps in ordinals.
5173            while _next_ordinal_to_read < 1 {
5174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5175                _next_ordinal_to_read += 1;
5176                next_offset += envelope_size;
5177            }
5178
5179            let next_out_of_line = decoder.next_out_of_line();
5180            let handles_before = decoder.remaining_handles();
5181            if let Some((inlined, num_bytes, num_handles)) =
5182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5183            {
5184                let member_inline_size =
5185                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5186                if inlined != (member_inline_size <= 4) {
5187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5188                }
5189                let inner_offset;
5190                let mut inner_depth = depth.clone();
5191                if inlined {
5192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5193                    inner_offset = next_offset;
5194                } else {
5195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5196                    inner_depth.increment()?;
5197                }
5198                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5199                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5200                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5201                {
5202                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5203                }
5204                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5205                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5206                }
5207            }
5208
5209            next_offset += envelope_size;
5210
5211            // Decode the remaining unknown envelopes.
5212            while next_offset < end_offset {
5213                _next_ordinal_to_read += 1;
5214                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5215                next_offset += envelope_size;
5216            }
5217
5218            Ok(())
5219        }
5220    }
5221
5222    impl RateSelectionOffloadExtension {
5223        #[inline(always)]
5224        fn max_ordinal_present(&self) -> u64 {
5225            if let Some(_) = self.supported {
5226                return 1;
5227            }
5228            0
5229        }
5230    }
5231
5232    impl fidl::encoding::ValueTypeMarker for RateSelectionOffloadExtension {
5233        type Borrowed<'a> = &'a Self;
5234        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5235            value
5236        }
5237    }
5238
5239    unsafe impl fidl::encoding::TypeMarker for RateSelectionOffloadExtension {
5240        type Owned = Self;
5241
5242        #[inline(always)]
5243        fn inline_align(_context: fidl::encoding::Context) -> usize {
5244            8
5245        }
5246
5247        #[inline(always)]
5248        fn inline_size(_context: fidl::encoding::Context) -> usize {
5249            16
5250        }
5251    }
5252
5253    unsafe impl<D: fidl::encoding::ResourceDialect>
5254        fidl::encoding::Encode<RateSelectionOffloadExtension, D>
5255        for &RateSelectionOffloadExtension
5256    {
5257        unsafe fn encode(
5258            self,
5259            encoder: &mut fidl::encoding::Encoder<'_, D>,
5260            offset: usize,
5261            mut depth: fidl::encoding::Depth,
5262        ) -> fidl::Result<()> {
5263            encoder.debug_check_bounds::<RateSelectionOffloadExtension>(offset);
5264            // Vector header
5265            let max_ordinal: u64 = self.max_ordinal_present();
5266            encoder.write_num(max_ordinal, offset);
5267            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5268            // Calling encoder.out_of_line_offset(0) is not allowed.
5269            if max_ordinal == 0 {
5270                return Ok(());
5271            }
5272            depth.increment()?;
5273            let envelope_size = 8;
5274            let bytes_len = max_ordinal as usize * envelope_size;
5275            #[allow(unused_variables)]
5276            let offset = encoder.out_of_line_offset(bytes_len);
5277            let mut _prev_end_offset: usize = 0;
5278            if 1 > max_ordinal {
5279                return Ok(());
5280            }
5281
5282            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5283            // are envelope_size bytes.
5284            let cur_offset: usize = (1 - 1) * envelope_size;
5285
5286            // Zero reserved fields.
5287            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5288
5289            // Safety:
5290            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5291            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5292            //   envelope_size bytes, there is always sufficient room.
5293            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5294                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5295                encoder,
5296                offset + cur_offset,
5297                depth,
5298            )?;
5299
5300            _prev_end_offset = cur_offset + envelope_size;
5301
5302            Ok(())
5303        }
5304    }
5305
5306    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5307        for RateSelectionOffloadExtension
5308    {
5309        #[inline(always)]
5310        fn new_empty() -> Self {
5311            Self::default()
5312        }
5313
5314        unsafe fn decode(
5315            &mut self,
5316            decoder: &mut fidl::encoding::Decoder<'_, D>,
5317            offset: usize,
5318            mut depth: fidl::encoding::Depth,
5319        ) -> fidl::Result<()> {
5320            decoder.debug_check_bounds::<Self>(offset);
5321            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5322                None => return Err(fidl::Error::NotNullable),
5323                Some(len) => len,
5324            };
5325            // Calling decoder.out_of_line_offset(0) is not allowed.
5326            if len == 0 {
5327                return Ok(());
5328            };
5329            depth.increment()?;
5330            let envelope_size = 8;
5331            let bytes_len = len * envelope_size;
5332            let offset = decoder.out_of_line_offset(bytes_len)?;
5333            // Decode the envelope for each type.
5334            let mut _next_ordinal_to_read = 0;
5335            let mut next_offset = offset;
5336            let end_offset = offset + bytes_len;
5337            _next_ordinal_to_read += 1;
5338            if next_offset >= end_offset {
5339                return Ok(());
5340            }
5341
5342            // Decode unknown envelopes for gaps in ordinals.
5343            while _next_ordinal_to_read < 1 {
5344                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5345                _next_ordinal_to_read += 1;
5346                next_offset += envelope_size;
5347            }
5348
5349            let next_out_of_line = decoder.next_out_of_line();
5350            let handles_before = decoder.remaining_handles();
5351            if let Some((inlined, num_bytes, num_handles)) =
5352                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5353            {
5354                let member_inline_size =
5355                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5356                if inlined != (member_inline_size <= 4) {
5357                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5358                }
5359                let inner_offset;
5360                let mut inner_depth = depth.clone();
5361                if inlined {
5362                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5363                    inner_offset = next_offset;
5364                } else {
5365                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5366                    inner_depth.increment()?;
5367                }
5368                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5369                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5370                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5371                {
5372                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5373                }
5374                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5375                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5376                }
5377            }
5378
5379            next_offset += envelope_size;
5380
5381            // Decode the remaining unknown envelopes.
5382            while next_offset < end_offset {
5383                _next_ordinal_to_read += 1;
5384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5385                next_offset += envelope_size;
5386            }
5387
5388            Ok(())
5389        }
5390    }
5391
5392    impl SaeFeature {
5393        #[inline(always)]
5394        fn max_ordinal_present(&self) -> u64 {
5395            if let Some(_) = self.hash_to_element_supported {
5396                return 3;
5397            }
5398            if let Some(_) = self.sme_handler_supported {
5399                return 2;
5400            }
5401            if let Some(_) = self.driver_handler_supported {
5402                return 1;
5403            }
5404            0
5405        }
5406    }
5407
5408    impl fidl::encoding::ValueTypeMarker for SaeFeature {
5409        type Borrowed<'a> = &'a Self;
5410        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5411            value
5412        }
5413    }
5414
5415    unsafe impl fidl::encoding::TypeMarker for SaeFeature {
5416        type Owned = Self;
5417
5418        #[inline(always)]
5419        fn inline_align(_context: fidl::encoding::Context) -> usize {
5420            8
5421        }
5422
5423        #[inline(always)]
5424        fn inline_size(_context: fidl::encoding::Context) -> usize {
5425            16
5426        }
5427    }
5428
5429    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SaeFeature, D>
5430        for &SaeFeature
5431    {
5432        unsafe fn encode(
5433            self,
5434            encoder: &mut fidl::encoding::Encoder<'_, D>,
5435            offset: usize,
5436            mut depth: fidl::encoding::Depth,
5437        ) -> fidl::Result<()> {
5438            encoder.debug_check_bounds::<SaeFeature>(offset);
5439            // Vector header
5440            let max_ordinal: u64 = self.max_ordinal_present();
5441            encoder.write_num(max_ordinal, offset);
5442            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5443            // Calling encoder.out_of_line_offset(0) is not allowed.
5444            if max_ordinal == 0 {
5445                return Ok(());
5446            }
5447            depth.increment()?;
5448            let envelope_size = 8;
5449            let bytes_len = max_ordinal as usize * envelope_size;
5450            #[allow(unused_variables)]
5451            let offset = encoder.out_of_line_offset(bytes_len);
5452            let mut _prev_end_offset: usize = 0;
5453            if 1 > max_ordinal {
5454                return Ok(());
5455            }
5456
5457            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5458            // are envelope_size bytes.
5459            let cur_offset: usize = (1 - 1) * envelope_size;
5460
5461            // Zero reserved fields.
5462            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5463
5464            // Safety:
5465            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5466            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5467            //   envelope_size bytes, there is always sufficient room.
5468            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5469                self.driver_handler_supported
5470                    .as_ref()
5471                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5472                encoder,
5473                offset + cur_offset,
5474                depth,
5475            )?;
5476
5477            _prev_end_offset = cur_offset + envelope_size;
5478            if 2 > max_ordinal {
5479                return Ok(());
5480            }
5481
5482            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5483            // are envelope_size bytes.
5484            let cur_offset: usize = (2 - 1) * envelope_size;
5485
5486            // Zero reserved fields.
5487            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5488
5489            // Safety:
5490            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5491            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5492            //   envelope_size bytes, there is always sufficient room.
5493            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5494                self.sme_handler_supported
5495                    .as_ref()
5496                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5497                encoder,
5498                offset + cur_offset,
5499                depth,
5500            )?;
5501
5502            _prev_end_offset = cur_offset + envelope_size;
5503            if 3 > max_ordinal {
5504                return Ok(());
5505            }
5506
5507            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5508            // are envelope_size bytes.
5509            let cur_offset: usize = (3 - 1) * envelope_size;
5510
5511            // Zero reserved fields.
5512            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5513
5514            // Safety:
5515            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5516            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5517            //   envelope_size bytes, there is always sufficient room.
5518            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5519                self.hash_to_element_supported
5520                    .as_ref()
5521                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5522                encoder,
5523                offset + cur_offset,
5524                depth,
5525            )?;
5526
5527            _prev_end_offset = cur_offset + envelope_size;
5528
5529            Ok(())
5530        }
5531    }
5532
5533    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SaeFeature {
5534        #[inline(always)]
5535        fn new_empty() -> Self {
5536            Self::default()
5537        }
5538
5539        unsafe fn decode(
5540            &mut self,
5541            decoder: &mut fidl::encoding::Decoder<'_, D>,
5542            offset: usize,
5543            mut depth: fidl::encoding::Depth,
5544        ) -> fidl::Result<()> {
5545            decoder.debug_check_bounds::<Self>(offset);
5546            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5547                None => return Err(fidl::Error::NotNullable),
5548                Some(len) => len,
5549            };
5550            // Calling decoder.out_of_line_offset(0) is not allowed.
5551            if len == 0 {
5552                return Ok(());
5553            };
5554            depth.increment()?;
5555            let envelope_size = 8;
5556            let bytes_len = len * envelope_size;
5557            let offset = decoder.out_of_line_offset(bytes_len)?;
5558            // Decode the envelope for each type.
5559            let mut _next_ordinal_to_read = 0;
5560            let mut next_offset = offset;
5561            let end_offset = offset + bytes_len;
5562            _next_ordinal_to_read += 1;
5563            if next_offset >= end_offset {
5564                return Ok(());
5565            }
5566
5567            // Decode unknown envelopes for gaps in ordinals.
5568            while _next_ordinal_to_read < 1 {
5569                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5570                _next_ordinal_to_read += 1;
5571                next_offset += envelope_size;
5572            }
5573
5574            let next_out_of_line = decoder.next_out_of_line();
5575            let handles_before = decoder.remaining_handles();
5576            if let Some((inlined, num_bytes, num_handles)) =
5577                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5578            {
5579                let member_inline_size =
5580                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5581                if inlined != (member_inline_size <= 4) {
5582                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5583                }
5584                let inner_offset;
5585                let mut inner_depth = depth.clone();
5586                if inlined {
5587                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5588                    inner_offset = next_offset;
5589                } else {
5590                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5591                    inner_depth.increment()?;
5592                }
5593                let val_ref =
5594                    self.driver_handler_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5595                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5596                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5597                {
5598                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5599                }
5600                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5601                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5602                }
5603            }
5604
5605            next_offset += envelope_size;
5606            _next_ordinal_to_read += 1;
5607            if next_offset >= end_offset {
5608                return Ok(());
5609            }
5610
5611            // Decode unknown envelopes for gaps in ordinals.
5612            while _next_ordinal_to_read < 2 {
5613                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5614                _next_ordinal_to_read += 1;
5615                next_offset += envelope_size;
5616            }
5617
5618            let next_out_of_line = decoder.next_out_of_line();
5619            let handles_before = decoder.remaining_handles();
5620            if let Some((inlined, num_bytes, num_handles)) =
5621                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5622            {
5623                let member_inline_size =
5624                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5625                if inlined != (member_inline_size <= 4) {
5626                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5627                }
5628                let inner_offset;
5629                let mut inner_depth = depth.clone();
5630                if inlined {
5631                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5632                    inner_offset = next_offset;
5633                } else {
5634                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5635                    inner_depth.increment()?;
5636                }
5637                let val_ref =
5638                    self.sme_handler_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5639                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5640                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5641                {
5642                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5643                }
5644                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5645                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5646                }
5647            }
5648
5649            next_offset += envelope_size;
5650            _next_ordinal_to_read += 1;
5651            if next_offset >= end_offset {
5652                return Ok(());
5653            }
5654
5655            // Decode unknown envelopes for gaps in ordinals.
5656            while _next_ordinal_to_read < 3 {
5657                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5658                _next_ordinal_to_read += 1;
5659                next_offset += envelope_size;
5660            }
5661
5662            let next_out_of_line = decoder.next_out_of_line();
5663            let handles_before = decoder.remaining_handles();
5664            if let Some((inlined, num_bytes, num_handles)) =
5665                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5666            {
5667                let member_inline_size =
5668                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5669                if inlined != (member_inline_size <= 4) {
5670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5671                }
5672                let inner_offset;
5673                let mut inner_depth = depth.clone();
5674                if inlined {
5675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5676                    inner_offset = next_offset;
5677                } else {
5678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5679                    inner_depth.increment()?;
5680                }
5681                let val_ref =
5682                    self.hash_to_element_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5683                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5684                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5685                {
5686                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5687                }
5688                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5689                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5690                }
5691            }
5692
5693            next_offset += envelope_size;
5694
5695            // Decode the remaining unknown envelopes.
5696            while next_offset < end_offset {
5697                _next_ordinal_to_read += 1;
5698                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5699                next_offset += envelope_size;
5700            }
5701
5702            Ok(())
5703        }
5704    }
5705
5706    impl ScanOffloadExtension {
5707        #[inline(always)]
5708        fn max_ordinal_present(&self) -> u64 {
5709            if let Some(_) = self.scan_cancel_supported {
5710                return 2;
5711            }
5712            if let Some(_) = self.supported {
5713                return 1;
5714            }
5715            0
5716        }
5717    }
5718
5719    impl fidl::encoding::ValueTypeMarker for ScanOffloadExtension {
5720        type Borrowed<'a> = &'a Self;
5721        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5722            value
5723        }
5724    }
5725
5726    unsafe impl fidl::encoding::TypeMarker for ScanOffloadExtension {
5727        type Owned = Self;
5728
5729        #[inline(always)]
5730        fn inline_align(_context: fidl::encoding::Context) -> usize {
5731            8
5732        }
5733
5734        #[inline(always)]
5735        fn inline_size(_context: fidl::encoding::Context) -> usize {
5736            16
5737        }
5738    }
5739
5740    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScanOffloadExtension, D>
5741        for &ScanOffloadExtension
5742    {
5743        unsafe fn encode(
5744            self,
5745            encoder: &mut fidl::encoding::Encoder<'_, D>,
5746            offset: usize,
5747            mut depth: fidl::encoding::Depth,
5748        ) -> fidl::Result<()> {
5749            encoder.debug_check_bounds::<ScanOffloadExtension>(offset);
5750            // Vector header
5751            let max_ordinal: u64 = self.max_ordinal_present();
5752            encoder.write_num(max_ordinal, offset);
5753            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5754            // Calling encoder.out_of_line_offset(0) is not allowed.
5755            if max_ordinal == 0 {
5756                return Ok(());
5757            }
5758            depth.increment()?;
5759            let envelope_size = 8;
5760            let bytes_len = max_ordinal as usize * envelope_size;
5761            #[allow(unused_variables)]
5762            let offset = encoder.out_of_line_offset(bytes_len);
5763            let mut _prev_end_offset: usize = 0;
5764            if 1 > max_ordinal {
5765                return Ok(());
5766            }
5767
5768            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5769            // are envelope_size bytes.
5770            let cur_offset: usize = (1 - 1) * envelope_size;
5771
5772            // Zero reserved fields.
5773            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5774
5775            // Safety:
5776            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5777            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5778            //   envelope_size bytes, there is always sufficient room.
5779            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5780                self.supported.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5781                encoder,
5782                offset + cur_offset,
5783                depth,
5784            )?;
5785
5786            _prev_end_offset = cur_offset + envelope_size;
5787            if 2 > max_ordinal {
5788                return Ok(());
5789            }
5790
5791            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5792            // are envelope_size bytes.
5793            let cur_offset: usize = (2 - 1) * envelope_size;
5794
5795            // Zero reserved fields.
5796            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5797
5798            // Safety:
5799            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5800            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5801            //   envelope_size bytes, there is always sufficient room.
5802            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5803                self.scan_cancel_supported
5804                    .as_ref()
5805                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5806                encoder,
5807                offset + cur_offset,
5808                depth,
5809            )?;
5810
5811            _prev_end_offset = cur_offset + envelope_size;
5812
5813            Ok(())
5814        }
5815    }
5816
5817    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanOffloadExtension {
5818        #[inline(always)]
5819        fn new_empty() -> Self {
5820            Self::default()
5821        }
5822
5823        unsafe fn decode(
5824            &mut self,
5825            decoder: &mut fidl::encoding::Decoder<'_, D>,
5826            offset: usize,
5827            mut depth: fidl::encoding::Depth,
5828        ) -> fidl::Result<()> {
5829            decoder.debug_check_bounds::<Self>(offset);
5830            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5831                None => return Err(fidl::Error::NotNullable),
5832                Some(len) => len,
5833            };
5834            // Calling decoder.out_of_line_offset(0) is not allowed.
5835            if len == 0 {
5836                return Ok(());
5837            };
5838            depth.increment()?;
5839            let envelope_size = 8;
5840            let bytes_len = len * envelope_size;
5841            let offset = decoder.out_of_line_offset(bytes_len)?;
5842            // Decode the envelope for each type.
5843            let mut _next_ordinal_to_read = 0;
5844            let mut next_offset = offset;
5845            let end_offset = offset + bytes_len;
5846            _next_ordinal_to_read += 1;
5847            if next_offset >= end_offset {
5848                return Ok(());
5849            }
5850
5851            // Decode unknown envelopes for gaps in ordinals.
5852            while _next_ordinal_to_read < 1 {
5853                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5854                _next_ordinal_to_read += 1;
5855                next_offset += envelope_size;
5856            }
5857
5858            let next_out_of_line = decoder.next_out_of_line();
5859            let handles_before = decoder.remaining_handles();
5860            if let Some((inlined, num_bytes, num_handles)) =
5861                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5862            {
5863                let member_inline_size =
5864                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5865                if inlined != (member_inline_size <= 4) {
5866                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5867                }
5868                let inner_offset;
5869                let mut inner_depth = depth.clone();
5870                if inlined {
5871                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5872                    inner_offset = next_offset;
5873                } else {
5874                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5875                    inner_depth.increment()?;
5876                }
5877                let val_ref = self.supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5878                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5880                {
5881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5882                }
5883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5885                }
5886            }
5887
5888            next_offset += envelope_size;
5889            _next_ordinal_to_read += 1;
5890            if next_offset >= end_offset {
5891                return Ok(());
5892            }
5893
5894            // Decode unknown envelopes for gaps in ordinals.
5895            while _next_ordinal_to_read < 2 {
5896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5897                _next_ordinal_to_read += 1;
5898                next_offset += envelope_size;
5899            }
5900
5901            let next_out_of_line = decoder.next_out_of_line();
5902            let handles_before = decoder.remaining_handles();
5903            if let Some((inlined, num_bytes, num_handles)) =
5904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5905            {
5906                let member_inline_size =
5907                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5908                if inlined != (member_inline_size <= 4) {
5909                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5910                }
5911                let inner_offset;
5912                let mut inner_depth = depth.clone();
5913                if inlined {
5914                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5915                    inner_offset = next_offset;
5916                } else {
5917                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5918                    inner_depth.increment()?;
5919                }
5920                let val_ref =
5921                    self.scan_cancel_supported.get_or_insert_with(|| fidl::new_empty!(bool, D));
5922                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5923                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5924                {
5925                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5926                }
5927                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5928                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5929                }
5930            }
5931
5932            next_offset += envelope_size;
5933
5934            // Decode the remaining unknown envelopes.
5935            while next_offset < end_offset {
5936                _next_ordinal_to_read += 1;
5937                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5938                next_offset += envelope_size;
5939            }
5940
5941            Ok(())
5942        }
5943    }
5944
5945    impl SecuritySupport {
5946        #[inline(always)]
5947        fn max_ordinal_present(&self) -> u64 {
5948            if let Some(_) = self.owe {
5949                return 3;
5950            }
5951            if let Some(_) = self.mfp {
5952                return 2;
5953            }
5954            if let Some(_) = self.sae {
5955                return 1;
5956            }
5957            0
5958        }
5959    }
5960
5961    impl fidl::encoding::ValueTypeMarker for SecuritySupport {
5962        type Borrowed<'a> = &'a Self;
5963        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5964            value
5965        }
5966    }
5967
5968    unsafe impl fidl::encoding::TypeMarker for SecuritySupport {
5969        type Owned = Self;
5970
5971        #[inline(always)]
5972        fn inline_align(_context: fidl::encoding::Context) -> usize {
5973            8
5974        }
5975
5976        #[inline(always)]
5977        fn inline_size(_context: fidl::encoding::Context) -> usize {
5978            16
5979        }
5980    }
5981
5982    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SecuritySupport, D>
5983        for &SecuritySupport
5984    {
5985        unsafe fn encode(
5986            self,
5987            encoder: &mut fidl::encoding::Encoder<'_, D>,
5988            offset: usize,
5989            mut depth: fidl::encoding::Depth,
5990        ) -> fidl::Result<()> {
5991            encoder.debug_check_bounds::<SecuritySupport>(offset);
5992            // Vector header
5993            let max_ordinal: u64 = self.max_ordinal_present();
5994            encoder.write_num(max_ordinal, offset);
5995            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5996            // Calling encoder.out_of_line_offset(0) is not allowed.
5997            if max_ordinal == 0 {
5998                return Ok(());
5999            }
6000            depth.increment()?;
6001            let envelope_size = 8;
6002            let bytes_len = max_ordinal as usize * envelope_size;
6003            #[allow(unused_variables)]
6004            let offset = encoder.out_of_line_offset(bytes_len);
6005            let mut _prev_end_offset: usize = 0;
6006            if 1 > max_ordinal {
6007                return Ok(());
6008            }
6009
6010            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6011            // are envelope_size bytes.
6012            let cur_offset: usize = (1 - 1) * envelope_size;
6013
6014            // Zero reserved fields.
6015            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6016
6017            // Safety:
6018            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6019            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6020            //   envelope_size bytes, there is always sufficient room.
6021            fidl::encoding::encode_in_envelope_optional::<SaeFeature, D>(
6022                self.sae.as_ref().map(<SaeFeature as fidl::encoding::ValueTypeMarker>::borrow),
6023                encoder,
6024                offset + cur_offset,
6025                depth,
6026            )?;
6027
6028            _prev_end_offset = cur_offset + envelope_size;
6029            if 2 > max_ordinal {
6030                return Ok(());
6031            }
6032
6033            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6034            // are envelope_size bytes.
6035            let cur_offset: usize = (2 - 1) * envelope_size;
6036
6037            // Zero reserved fields.
6038            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6039
6040            // Safety:
6041            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6042            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6043            //   envelope_size bytes, there is always sufficient room.
6044            fidl::encoding::encode_in_envelope_optional::<MfpFeature, D>(
6045                self.mfp.as_ref().map(<MfpFeature as fidl::encoding::ValueTypeMarker>::borrow),
6046                encoder,
6047                offset + cur_offset,
6048                depth,
6049            )?;
6050
6051            _prev_end_offset = cur_offset + envelope_size;
6052            if 3 > max_ordinal {
6053                return Ok(());
6054            }
6055
6056            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6057            // are envelope_size bytes.
6058            let cur_offset: usize = (3 - 1) * envelope_size;
6059
6060            // Zero reserved fields.
6061            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6062
6063            // Safety:
6064            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6065            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6066            //   envelope_size bytes, there is always sufficient room.
6067            fidl::encoding::encode_in_envelope_optional::<OweFeature, D>(
6068                self.owe.as_ref().map(<OweFeature as fidl::encoding::ValueTypeMarker>::borrow),
6069                encoder,
6070                offset + cur_offset,
6071                depth,
6072            )?;
6073
6074            _prev_end_offset = cur_offset + envelope_size;
6075
6076            Ok(())
6077        }
6078    }
6079
6080    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SecuritySupport {
6081        #[inline(always)]
6082        fn new_empty() -> Self {
6083            Self::default()
6084        }
6085
6086        unsafe fn decode(
6087            &mut self,
6088            decoder: &mut fidl::encoding::Decoder<'_, D>,
6089            offset: usize,
6090            mut depth: fidl::encoding::Depth,
6091        ) -> fidl::Result<()> {
6092            decoder.debug_check_bounds::<Self>(offset);
6093            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6094                None => return Err(fidl::Error::NotNullable),
6095                Some(len) => len,
6096            };
6097            // Calling decoder.out_of_line_offset(0) is not allowed.
6098            if len == 0 {
6099                return Ok(());
6100            };
6101            depth.increment()?;
6102            let envelope_size = 8;
6103            let bytes_len = len * envelope_size;
6104            let offset = decoder.out_of_line_offset(bytes_len)?;
6105            // Decode the envelope for each type.
6106            let mut _next_ordinal_to_read = 0;
6107            let mut next_offset = offset;
6108            let end_offset = offset + bytes_len;
6109            _next_ordinal_to_read += 1;
6110            if next_offset >= end_offset {
6111                return Ok(());
6112            }
6113
6114            // Decode unknown envelopes for gaps in ordinals.
6115            while _next_ordinal_to_read < 1 {
6116                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6117                _next_ordinal_to_read += 1;
6118                next_offset += envelope_size;
6119            }
6120
6121            let next_out_of_line = decoder.next_out_of_line();
6122            let handles_before = decoder.remaining_handles();
6123            if let Some((inlined, num_bytes, num_handles)) =
6124                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6125            {
6126                let member_inline_size =
6127                    <SaeFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6128                if inlined != (member_inline_size <= 4) {
6129                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6130                }
6131                let inner_offset;
6132                let mut inner_depth = depth.clone();
6133                if inlined {
6134                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6135                    inner_offset = next_offset;
6136                } else {
6137                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6138                    inner_depth.increment()?;
6139                }
6140                let val_ref = self.sae.get_or_insert_with(|| fidl::new_empty!(SaeFeature, D));
6141                fidl::decode!(SaeFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
6142                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6143                {
6144                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6145                }
6146                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6147                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6148                }
6149            }
6150
6151            next_offset += envelope_size;
6152            _next_ordinal_to_read += 1;
6153            if next_offset >= end_offset {
6154                return Ok(());
6155            }
6156
6157            // Decode unknown envelopes for gaps in ordinals.
6158            while _next_ordinal_to_read < 2 {
6159                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6160                _next_ordinal_to_read += 1;
6161                next_offset += envelope_size;
6162            }
6163
6164            let next_out_of_line = decoder.next_out_of_line();
6165            let handles_before = decoder.remaining_handles();
6166            if let Some((inlined, num_bytes, num_handles)) =
6167                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6168            {
6169                let member_inline_size =
6170                    <MfpFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6171                if inlined != (member_inline_size <= 4) {
6172                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6173                }
6174                let inner_offset;
6175                let mut inner_depth = depth.clone();
6176                if inlined {
6177                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6178                    inner_offset = next_offset;
6179                } else {
6180                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6181                    inner_depth.increment()?;
6182                }
6183                let val_ref = self.mfp.get_or_insert_with(|| fidl::new_empty!(MfpFeature, D));
6184                fidl::decode!(MfpFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
6185                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6186                {
6187                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6188                }
6189                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6190                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6191                }
6192            }
6193
6194            next_offset += envelope_size;
6195            _next_ordinal_to_read += 1;
6196            if next_offset >= end_offset {
6197                return Ok(());
6198            }
6199
6200            // Decode unknown envelopes for gaps in ordinals.
6201            while _next_ordinal_to_read < 3 {
6202                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6203                _next_ordinal_to_read += 1;
6204                next_offset += envelope_size;
6205            }
6206
6207            let next_out_of_line = decoder.next_out_of_line();
6208            let handles_before = decoder.remaining_handles();
6209            if let Some((inlined, num_bytes, num_handles)) =
6210                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6211            {
6212                let member_inline_size =
6213                    <OweFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6214                if inlined != (member_inline_size <= 4) {
6215                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6216                }
6217                let inner_offset;
6218                let mut inner_depth = depth.clone();
6219                if inlined {
6220                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6221                    inner_offset = next_offset;
6222                } else {
6223                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6224                    inner_depth.increment()?;
6225                }
6226                let val_ref = self.owe.get_or_insert_with(|| fidl::new_empty!(OweFeature, D));
6227                fidl::decode!(OweFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
6228                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6229                {
6230                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6231                }
6232                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6233                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6234                }
6235            }
6236
6237            next_offset += envelope_size;
6238
6239            // Decode the remaining unknown envelopes.
6240            while next_offset < end_offset {
6241                _next_ordinal_to_read += 1;
6242                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6243                next_offset += envelope_size;
6244            }
6245
6246            Ok(())
6247        }
6248    }
6249
6250    impl SpectrumManagementSupport {
6251        #[inline(always)]
6252        fn max_ordinal_present(&self) -> u64 {
6253            if let Some(_) = self.dfs {
6254                return 1;
6255            }
6256            0
6257        }
6258    }
6259
6260    impl fidl::encoding::ValueTypeMarker for SpectrumManagementSupport {
6261        type Borrowed<'a> = &'a Self;
6262        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6263            value
6264        }
6265    }
6266
6267    unsafe impl fidl::encoding::TypeMarker for SpectrumManagementSupport {
6268        type Owned = Self;
6269
6270        #[inline(always)]
6271        fn inline_align(_context: fidl::encoding::Context) -> usize {
6272            8
6273        }
6274
6275        #[inline(always)]
6276        fn inline_size(_context: fidl::encoding::Context) -> usize {
6277            16
6278        }
6279    }
6280
6281    unsafe impl<D: fidl::encoding::ResourceDialect>
6282        fidl::encoding::Encode<SpectrumManagementSupport, D> for &SpectrumManagementSupport
6283    {
6284        unsafe fn encode(
6285            self,
6286            encoder: &mut fidl::encoding::Encoder<'_, D>,
6287            offset: usize,
6288            mut depth: fidl::encoding::Depth,
6289        ) -> fidl::Result<()> {
6290            encoder.debug_check_bounds::<SpectrumManagementSupport>(offset);
6291            // Vector header
6292            let max_ordinal: u64 = self.max_ordinal_present();
6293            encoder.write_num(max_ordinal, offset);
6294            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6295            // Calling encoder.out_of_line_offset(0) is not allowed.
6296            if max_ordinal == 0 {
6297                return Ok(());
6298            }
6299            depth.increment()?;
6300            let envelope_size = 8;
6301            let bytes_len = max_ordinal as usize * envelope_size;
6302            #[allow(unused_variables)]
6303            let offset = encoder.out_of_line_offset(bytes_len);
6304            let mut _prev_end_offset: usize = 0;
6305            if 1 > max_ordinal {
6306                return Ok(());
6307            }
6308
6309            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6310            // are envelope_size bytes.
6311            let cur_offset: usize = (1 - 1) * envelope_size;
6312
6313            // Zero reserved fields.
6314            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6315
6316            // Safety:
6317            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6318            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6319            //   envelope_size bytes, there is always sufficient room.
6320            fidl::encoding::encode_in_envelope_optional::<DfsFeature, D>(
6321                self.dfs.as_ref().map(<DfsFeature as fidl::encoding::ValueTypeMarker>::borrow),
6322                encoder,
6323                offset + cur_offset,
6324                depth,
6325            )?;
6326
6327            _prev_end_offset = cur_offset + envelope_size;
6328
6329            Ok(())
6330        }
6331    }
6332
6333    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6334        for SpectrumManagementSupport
6335    {
6336        #[inline(always)]
6337        fn new_empty() -> Self {
6338            Self::default()
6339        }
6340
6341        unsafe fn decode(
6342            &mut self,
6343            decoder: &mut fidl::encoding::Decoder<'_, D>,
6344            offset: usize,
6345            mut depth: fidl::encoding::Depth,
6346        ) -> fidl::Result<()> {
6347            decoder.debug_check_bounds::<Self>(offset);
6348            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6349                None => return Err(fidl::Error::NotNullable),
6350                Some(len) => len,
6351            };
6352            // Calling decoder.out_of_line_offset(0) is not allowed.
6353            if len == 0 {
6354                return Ok(());
6355            };
6356            depth.increment()?;
6357            let envelope_size = 8;
6358            let bytes_len = len * envelope_size;
6359            let offset = decoder.out_of_line_offset(bytes_len)?;
6360            // Decode the envelope for each type.
6361            let mut _next_ordinal_to_read = 0;
6362            let mut next_offset = offset;
6363            let end_offset = offset + bytes_len;
6364            _next_ordinal_to_read += 1;
6365            if next_offset >= end_offset {
6366                return Ok(());
6367            }
6368
6369            // Decode unknown envelopes for gaps in ordinals.
6370            while _next_ordinal_to_read < 1 {
6371                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6372                _next_ordinal_to_read += 1;
6373                next_offset += envelope_size;
6374            }
6375
6376            let next_out_of_line = decoder.next_out_of_line();
6377            let handles_before = decoder.remaining_handles();
6378            if let Some((inlined, num_bytes, num_handles)) =
6379                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6380            {
6381                let member_inline_size =
6382                    <DfsFeature as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6383                if inlined != (member_inline_size <= 4) {
6384                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6385                }
6386                let inner_offset;
6387                let mut inner_depth = depth.clone();
6388                if inlined {
6389                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6390                    inner_offset = next_offset;
6391                } else {
6392                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6393                    inner_depth.increment()?;
6394                }
6395                let val_ref = self.dfs.get_or_insert_with(|| fidl::new_empty!(DfsFeature, D));
6396                fidl::decode!(DfsFeature, D, val_ref, decoder, inner_offset, inner_depth)?;
6397                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6398                {
6399                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6400                }
6401                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6402                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6403                }
6404            }
6405
6406            next_offset += envelope_size;
6407
6408            // Decode the remaining unknown envelopes.
6409            while next_offset < end_offset {
6410                _next_ordinal_to_read += 1;
6411                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6412                next_offset += envelope_size;
6413            }
6414
6415            Ok(())
6416        }
6417    }
6418
6419    impl WlanKeyConfig {
6420        #[inline(always)]
6421        fn max_ordinal_present(&self) -> u64 {
6422            if let Some(_) = self.rsc {
6423                return 8;
6424            }
6425            if let Some(_) = self.key {
6426                return 7;
6427            }
6428            if let Some(_) = self.key_idx {
6429                return 6;
6430            }
6431            if let Some(_) = self.peer_addr {
6432                return 5;
6433            }
6434            if let Some(_) = self.key_type {
6435                return 4;
6436            }
6437            if let Some(_) = self.cipher_type {
6438                return 3;
6439            }
6440            if let Some(_) = self.cipher_oui {
6441                return 2;
6442            }
6443            if let Some(_) = self.protection {
6444                return 1;
6445            }
6446            0
6447        }
6448    }
6449
6450    impl fidl::encoding::ValueTypeMarker for WlanKeyConfig {
6451        type Borrowed<'a> = &'a Self;
6452        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6453            value
6454        }
6455    }
6456
6457    unsafe impl fidl::encoding::TypeMarker for WlanKeyConfig {
6458        type Owned = Self;
6459
6460        #[inline(always)]
6461        fn inline_align(_context: fidl::encoding::Context) -> usize {
6462            8
6463        }
6464
6465        #[inline(always)]
6466        fn inline_size(_context: fidl::encoding::Context) -> usize {
6467            16
6468        }
6469    }
6470
6471    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WlanKeyConfig, D>
6472        for &WlanKeyConfig
6473    {
6474        unsafe fn encode(
6475            self,
6476            encoder: &mut fidl::encoding::Encoder<'_, D>,
6477            offset: usize,
6478            mut depth: fidl::encoding::Depth,
6479        ) -> fidl::Result<()> {
6480            encoder.debug_check_bounds::<WlanKeyConfig>(offset);
6481            // Vector header
6482            let max_ordinal: u64 = self.max_ordinal_present();
6483            encoder.write_num(max_ordinal, offset);
6484            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6485            // Calling encoder.out_of_line_offset(0) is not allowed.
6486            if max_ordinal == 0 {
6487                return Ok(());
6488            }
6489            depth.increment()?;
6490            let envelope_size = 8;
6491            let bytes_len = max_ordinal as usize * envelope_size;
6492            #[allow(unused_variables)]
6493            let offset = encoder.out_of_line_offset(bytes_len);
6494            let mut _prev_end_offset: usize = 0;
6495            if 1 > max_ordinal {
6496                return Ok(());
6497            }
6498
6499            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6500            // are envelope_size bytes.
6501            let cur_offset: usize = (1 - 1) * envelope_size;
6502
6503            // Zero reserved fields.
6504            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6505
6506            // Safety:
6507            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6508            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6509            //   envelope_size bytes, there is always sufficient room.
6510            fidl::encoding::encode_in_envelope_optional::<WlanProtection, D>(
6511                self.protection
6512                    .as_ref()
6513                    .map(<WlanProtection as fidl::encoding::ValueTypeMarker>::borrow),
6514                encoder,
6515                offset + cur_offset,
6516                depth,
6517            )?;
6518
6519            _prev_end_offset = cur_offset + envelope_size;
6520            if 2 > max_ordinal {
6521                return Ok(());
6522            }
6523
6524            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6525            // are envelope_size bytes.
6526            let cur_offset: usize = (2 - 1) * envelope_size;
6527
6528            // Zero reserved fields.
6529            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6530
6531            // Safety:
6532            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6533            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6534            //   envelope_size bytes, there is always sufficient room.
6535            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 3>, D>(
6536                self.cipher_oui
6537                    .as_ref()
6538                    .map(<fidl::encoding::Array<u8, 3> as fidl::encoding::ValueTypeMarker>::borrow),
6539                encoder,
6540                offset + cur_offset,
6541                depth,
6542            )?;
6543
6544            _prev_end_offset = cur_offset + envelope_size;
6545            if 3 > max_ordinal {
6546                return Ok(());
6547            }
6548
6549            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6550            // are envelope_size bytes.
6551            let cur_offset: usize = (3 - 1) * envelope_size;
6552
6553            // Zero reserved fields.
6554            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6555
6556            // Safety:
6557            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6558            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6559            //   envelope_size bytes, there is always sufficient room.
6560            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType, D>(
6561            self.cipher_type.as_ref().map(<fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType as fidl::encoding::ValueTypeMarker>::borrow),
6562            encoder, offset + cur_offset, depth
6563        )?;
6564
6565            _prev_end_offset = cur_offset + envelope_size;
6566            if 4 > max_ordinal {
6567                return Ok(());
6568            }
6569
6570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6571            // are envelope_size bytes.
6572            let cur_offset: usize = (4 - 1) * envelope_size;
6573
6574            // Zero reserved fields.
6575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6576
6577            // Safety:
6578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6580            //   envelope_size bytes, there is always sufficient room.
6581            fidl::encoding::encode_in_envelope_optional::<WlanKeyType, D>(
6582                self.key_type
6583                    .as_ref()
6584                    .map(<WlanKeyType as fidl::encoding::ValueTypeMarker>::borrow),
6585                encoder,
6586                offset + cur_offset,
6587                depth,
6588            )?;
6589
6590            _prev_end_offset = cur_offset + envelope_size;
6591            if 5 > max_ordinal {
6592                return Ok(());
6593            }
6594
6595            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6596            // are envelope_size bytes.
6597            let cur_offset: usize = (5 - 1) * envelope_size;
6598
6599            // Zero reserved fields.
6600            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6601
6602            // Safety:
6603            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6604            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6605            //   envelope_size bytes, there is always sufficient room.
6606            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 6>, D>(
6607                self.peer_addr
6608                    .as_ref()
6609                    .map(<fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow),
6610                encoder,
6611                offset + cur_offset,
6612                depth,
6613            )?;
6614
6615            _prev_end_offset = cur_offset + envelope_size;
6616            if 6 > max_ordinal {
6617                return Ok(());
6618            }
6619
6620            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6621            // are envelope_size bytes.
6622            let cur_offset: usize = (6 - 1) * envelope_size;
6623
6624            // Zero reserved fields.
6625            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6626
6627            // Safety:
6628            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6629            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6630            //   envelope_size bytes, there is always sufficient room.
6631            fidl::encoding::encode_in_envelope_optional::<u8, D>(
6632                self.key_idx.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
6633                encoder,
6634                offset + cur_offset,
6635                depth,
6636            )?;
6637
6638            _prev_end_offset = cur_offset + envelope_size;
6639            if 7 > max_ordinal {
6640                return Ok(());
6641            }
6642
6643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6644            // are envelope_size bytes.
6645            let cur_offset: usize = (7 - 1) * envelope_size;
6646
6647            // Zero reserved fields.
6648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6649
6650            // Safety:
6651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6653            //   envelope_size bytes, there is always sufficient room.
6654            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
6655                self.key.as_ref().map(
6656                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
6657                ),
6658                encoder,
6659                offset + cur_offset,
6660                depth,
6661            )?;
6662
6663            _prev_end_offset = cur_offset + envelope_size;
6664            if 8 > max_ordinal {
6665                return Ok(());
6666            }
6667
6668            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6669            // are envelope_size bytes.
6670            let cur_offset: usize = (8 - 1) * envelope_size;
6671
6672            // Zero reserved fields.
6673            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6674
6675            // Safety:
6676            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6677            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6678            //   envelope_size bytes, there is always sufficient room.
6679            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6680                self.rsc.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6681                encoder,
6682                offset + cur_offset,
6683                depth,
6684            )?;
6685
6686            _prev_end_offset = cur_offset + envelope_size;
6687
6688            Ok(())
6689        }
6690    }
6691
6692    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanKeyConfig {
6693        #[inline(always)]
6694        fn new_empty() -> Self {
6695            Self::default()
6696        }
6697
6698        unsafe fn decode(
6699            &mut self,
6700            decoder: &mut fidl::encoding::Decoder<'_, D>,
6701            offset: usize,
6702            mut depth: fidl::encoding::Depth,
6703        ) -> fidl::Result<()> {
6704            decoder.debug_check_bounds::<Self>(offset);
6705            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6706                None => return Err(fidl::Error::NotNullable),
6707                Some(len) => len,
6708            };
6709            // Calling decoder.out_of_line_offset(0) is not allowed.
6710            if len == 0 {
6711                return Ok(());
6712            };
6713            depth.increment()?;
6714            let envelope_size = 8;
6715            let bytes_len = len * envelope_size;
6716            let offset = decoder.out_of_line_offset(bytes_len)?;
6717            // Decode the envelope for each type.
6718            let mut _next_ordinal_to_read = 0;
6719            let mut next_offset = offset;
6720            let end_offset = offset + bytes_len;
6721            _next_ordinal_to_read += 1;
6722            if next_offset >= end_offset {
6723                return Ok(());
6724            }
6725
6726            // Decode unknown envelopes for gaps in ordinals.
6727            while _next_ordinal_to_read < 1 {
6728                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6729                _next_ordinal_to_read += 1;
6730                next_offset += envelope_size;
6731            }
6732
6733            let next_out_of_line = decoder.next_out_of_line();
6734            let handles_before = decoder.remaining_handles();
6735            if let Some((inlined, num_bytes, num_handles)) =
6736                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6737            {
6738                let member_inline_size =
6739                    <WlanProtection as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6740                if inlined != (member_inline_size <= 4) {
6741                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6742                }
6743                let inner_offset;
6744                let mut inner_depth = depth.clone();
6745                if inlined {
6746                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6747                    inner_offset = next_offset;
6748                } else {
6749                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6750                    inner_depth.increment()?;
6751                }
6752                let val_ref =
6753                    self.protection.get_or_insert_with(|| fidl::new_empty!(WlanProtection, D));
6754                fidl::decode!(WlanProtection, D, val_ref, decoder, inner_offset, inner_depth)?;
6755                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6756                {
6757                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6758                }
6759                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6760                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6761                }
6762            }
6763
6764            next_offset += envelope_size;
6765            _next_ordinal_to_read += 1;
6766            if next_offset >= end_offset {
6767                return Ok(());
6768            }
6769
6770            // Decode unknown envelopes for gaps in ordinals.
6771            while _next_ordinal_to_read < 2 {
6772                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6773                _next_ordinal_to_read += 1;
6774                next_offset += envelope_size;
6775            }
6776
6777            let next_out_of_line = decoder.next_out_of_line();
6778            let handles_before = decoder.remaining_handles();
6779            if let Some((inlined, num_bytes, num_handles)) =
6780                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6781            {
6782                let member_inline_size =
6783                    <fidl::encoding::Array<u8, 3> as fidl::encoding::TypeMarker>::inline_size(
6784                        decoder.context,
6785                    );
6786                if inlined != (member_inline_size <= 4) {
6787                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6788                }
6789                let inner_offset;
6790                let mut inner_depth = depth.clone();
6791                if inlined {
6792                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6793                    inner_offset = next_offset;
6794                } else {
6795                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6796                    inner_depth.increment()?;
6797                }
6798                let val_ref = self
6799                    .cipher_oui
6800                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 3>, D));
6801                fidl::decode!(fidl::encoding::Array<u8, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
6802                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6803                {
6804                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6805                }
6806                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6807                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6808                }
6809            }
6810
6811            next_offset += envelope_size;
6812            _next_ordinal_to_read += 1;
6813            if next_offset >= end_offset {
6814                return Ok(());
6815            }
6816
6817            // Decode unknown envelopes for gaps in ordinals.
6818            while _next_ordinal_to_read < 3 {
6819                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6820                _next_ordinal_to_read += 1;
6821                next_offset += envelope_size;
6822            }
6823
6824            let next_out_of_line = decoder.next_out_of_line();
6825            let handles_before = decoder.remaining_handles();
6826            if let Some((inlined, num_bytes, num_handles)) =
6827                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6828            {
6829                let member_inline_size = <fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6830                if inlined != (member_inline_size <= 4) {
6831                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6832                }
6833                let inner_offset;
6834                let mut inner_depth = depth.clone();
6835                if inlined {
6836                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6837                    inner_offset = next_offset;
6838                } else {
6839                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6840                    inner_depth.increment()?;
6841                }
6842                let val_ref = self.cipher_type.get_or_insert_with(|| {
6843                    fidl::new_empty!(fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType, D)
6844                });
6845                fidl::decode!(
6846                    fidl_fuchsia_wlan_ieee80211__common::CipherSuiteType,
6847                    D,
6848                    val_ref,
6849                    decoder,
6850                    inner_offset,
6851                    inner_depth
6852                )?;
6853                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6854                {
6855                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6856                }
6857                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6858                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6859                }
6860            }
6861
6862            next_offset += envelope_size;
6863            _next_ordinal_to_read += 1;
6864            if next_offset >= end_offset {
6865                return Ok(());
6866            }
6867
6868            // Decode unknown envelopes for gaps in ordinals.
6869            while _next_ordinal_to_read < 4 {
6870                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6871                _next_ordinal_to_read += 1;
6872                next_offset += envelope_size;
6873            }
6874
6875            let next_out_of_line = decoder.next_out_of_line();
6876            let handles_before = decoder.remaining_handles();
6877            if let Some((inlined, num_bytes, num_handles)) =
6878                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6879            {
6880                let member_inline_size =
6881                    <WlanKeyType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6882                if inlined != (member_inline_size <= 4) {
6883                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6884                }
6885                let inner_offset;
6886                let mut inner_depth = depth.clone();
6887                if inlined {
6888                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6889                    inner_offset = next_offset;
6890                } else {
6891                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6892                    inner_depth.increment()?;
6893                }
6894                let val_ref = self.key_type.get_or_insert_with(|| fidl::new_empty!(WlanKeyType, D));
6895                fidl::decode!(WlanKeyType, D, val_ref, decoder, inner_offset, inner_depth)?;
6896                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6897                {
6898                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6899                }
6900                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6901                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6902                }
6903            }
6904
6905            next_offset += envelope_size;
6906            _next_ordinal_to_read += 1;
6907            if next_offset >= end_offset {
6908                return Ok(());
6909            }
6910
6911            // Decode unknown envelopes for gaps in ordinals.
6912            while _next_ordinal_to_read < 5 {
6913                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6914                _next_ordinal_to_read += 1;
6915                next_offset += envelope_size;
6916            }
6917
6918            let next_out_of_line = decoder.next_out_of_line();
6919            let handles_before = decoder.remaining_handles();
6920            if let Some((inlined, num_bytes, num_handles)) =
6921                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6922            {
6923                let member_inline_size =
6924                    <fidl::encoding::Array<u8, 6> as fidl::encoding::TypeMarker>::inline_size(
6925                        decoder.context,
6926                    );
6927                if inlined != (member_inline_size <= 4) {
6928                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6929                }
6930                let inner_offset;
6931                let mut inner_depth = depth.clone();
6932                if inlined {
6933                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6934                    inner_offset = next_offset;
6935                } else {
6936                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6937                    inner_depth.increment()?;
6938                }
6939                let val_ref = self
6940                    .peer_addr
6941                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 6>, D));
6942                fidl::decode!(fidl::encoding::Array<u8, 6>, D, val_ref, decoder, inner_offset, inner_depth)?;
6943                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6944                {
6945                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6946                }
6947                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6948                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6949                }
6950            }
6951
6952            next_offset += envelope_size;
6953            _next_ordinal_to_read += 1;
6954            if next_offset >= end_offset {
6955                return Ok(());
6956            }
6957
6958            // Decode unknown envelopes for gaps in ordinals.
6959            while _next_ordinal_to_read < 6 {
6960                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6961                _next_ordinal_to_read += 1;
6962                next_offset += envelope_size;
6963            }
6964
6965            let next_out_of_line = decoder.next_out_of_line();
6966            let handles_before = decoder.remaining_handles();
6967            if let Some((inlined, num_bytes, num_handles)) =
6968                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6969            {
6970                let member_inline_size =
6971                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6972                if inlined != (member_inline_size <= 4) {
6973                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6974                }
6975                let inner_offset;
6976                let mut inner_depth = depth.clone();
6977                if inlined {
6978                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6979                    inner_offset = next_offset;
6980                } else {
6981                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6982                    inner_depth.increment()?;
6983                }
6984                let val_ref = self.key_idx.get_or_insert_with(|| fidl::new_empty!(u8, D));
6985                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
6986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6987                {
6988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6989                }
6990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6992                }
6993            }
6994
6995            next_offset += envelope_size;
6996            _next_ordinal_to_read += 1;
6997            if next_offset >= end_offset {
6998                return Ok(());
6999            }
7000
7001            // Decode unknown envelopes for gaps in ordinals.
7002            while _next_ordinal_to_read < 7 {
7003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7004                _next_ordinal_to_read += 1;
7005                next_offset += envelope_size;
7006            }
7007
7008            let next_out_of_line = decoder.next_out_of_line();
7009            let handles_before = decoder.remaining_handles();
7010            if let Some((inlined, num_bytes, num_handles)) =
7011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7012            {
7013                let member_inline_size =
7014                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
7015                        decoder.context,
7016                    );
7017                if inlined != (member_inline_size <= 4) {
7018                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7019                }
7020                let inner_offset;
7021                let mut inner_depth = depth.clone();
7022                if inlined {
7023                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7024                    inner_offset = next_offset;
7025                } else {
7026                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7027                    inner_depth.increment()?;
7028                }
7029                let val_ref = self
7030                    .key
7031                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
7032                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
7033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7034                {
7035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7036                }
7037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7039                }
7040            }
7041
7042            next_offset += envelope_size;
7043            _next_ordinal_to_read += 1;
7044            if next_offset >= end_offset {
7045                return Ok(());
7046            }
7047
7048            // Decode unknown envelopes for gaps in ordinals.
7049            while _next_ordinal_to_read < 8 {
7050                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7051                _next_ordinal_to_read += 1;
7052                next_offset += envelope_size;
7053            }
7054
7055            let next_out_of_line = decoder.next_out_of_line();
7056            let handles_before = decoder.remaining_handles();
7057            if let Some((inlined, num_bytes, num_handles)) =
7058                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7059            {
7060                let member_inline_size =
7061                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7062                if inlined != (member_inline_size <= 4) {
7063                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7064                }
7065                let inner_offset;
7066                let mut inner_depth = depth.clone();
7067                if inlined {
7068                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7069                    inner_offset = next_offset;
7070                } else {
7071                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7072                    inner_depth.increment()?;
7073                }
7074                let val_ref = self.rsc.get_or_insert_with(|| fidl::new_empty!(u64, D));
7075                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7076                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7077                {
7078                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7079                }
7080                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7081                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7082                }
7083            }
7084
7085            next_offset += envelope_size;
7086
7087            // Decode the remaining unknown envelopes.
7088            while next_offset < end_offset {
7089                _next_ordinal_to_read += 1;
7090                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7091                next_offset += envelope_size;
7092            }
7093
7094            Ok(())
7095        }
7096    }
7097}