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