Skip to main content

fidl_fuchsia_wlan_common_common/
fidl_fuchsia_wlan_common_common.rs

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