fidl_fuchsia_wlan_common__common/
fidl_fuchsia_wlan_common__common.rs

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