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