Skip to main content

fidl_fuchsia_wlan_phy_common/
fidl_fuchsia_wlan_phy_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
12pub enum WlanPhyNotifyError {
13    /// An unspecified internal error occurred.
14    Internal,
15    /// Receiver does not have support for handling the event.
16    NotSupported,
17    /// Receiver not ready to handle event yet.
18    ShouldWait,
19    /// Invalid arguments.
20    InvalidArgs,
21    #[doc(hidden)]
22    __SourceBreaking { unknown_ordinal: u32 },
23}
24
25/// Pattern that matches an unknown `WlanPhyNotifyError` member.
26#[macro_export]
27macro_rules! WlanPhyNotifyErrorUnknown {
28    () => {
29        _
30    };
31}
32
33impl WlanPhyNotifyError {
34    #[inline]
35    pub fn from_primitive(prim: u32) -> Option<Self> {
36        match prim {
37            1 => Some(Self::Internal),
38            2 => Some(Self::NotSupported),
39            3 => Some(Self::ShouldWait),
40            4 => Some(Self::InvalidArgs),
41            _ => None,
42        }
43    }
44
45    #[inline]
46    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
47        match prim {
48            1 => Self::Internal,
49            2 => Self::NotSupported,
50            3 => Self::ShouldWait,
51            4 => Self::InvalidArgs,
52            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
53        }
54    }
55
56    #[inline]
57    pub fn unknown() -> Self {
58        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
59    }
60
61    #[inline]
62    pub const fn into_primitive(self) -> u32 {
63        match self {
64            Self::Internal => 1,
65            Self::NotSupported => 2,
66            Self::ShouldWait => 3,
67            Self::InvalidArgs => 4,
68            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
69        }
70    }
71
72    #[inline]
73    pub fn is_unknown(&self) -> bool {
74        match self {
75            Self::__SourceBreaking { unknown_ordinal: _ } => true,
76            _ => false,
77        }
78    }
79}
80
81#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
82#[repr(C)]
83pub struct WlanPhySetCountryRequest {
84    pub country: [u8; 2],
85}
86
87impl fidl::Persistable for WlanPhySetCountryRequest {}
88
89#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
90#[repr(C)]
91pub struct WlanPhyGetCountryResponse {
92    pub country: [u8; 2],
93}
94
95impl fidl::Persistable for WlanPhyGetCountryResponse {}
96
97#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
98pub struct WlanPhyGetTxPowerScenarioResponse {
99    pub scenario: fidl_fuchsia_wlan_internal_common::TxPowerScenario,
100}
101
102impl fidl::Persistable for WlanPhyGetTxPowerScenarioResponse {}
103
104#[derive(Clone, Debug, Default, PartialEq)]
105pub struct WlanPhyDestroyIfaceRequest {
106    /// This field is required.
107    pub iface_id: Option<u16>,
108    #[doc(hidden)]
109    pub __source_breaking: fidl::marker::SourceBreaking,
110}
111
112impl fidl::Persistable for WlanPhyDestroyIfaceRequest {}
113
114#[derive(Clone, Debug, Default, PartialEq)]
115pub struct WlanPhyNotifyOnCountryCodeChangeRequest {
116    pub phy_country: Option<[u8; 2]>,
117    #[doc(hidden)]
118    pub __source_breaking: fidl::marker::SourceBreaking,
119}
120
121impl fidl::Persistable for WlanPhyNotifyOnCountryCodeChangeRequest {}
122
123#[derive(Clone, Debug, Default, PartialEq)]
124pub struct WlanPhyNotifyOnCriticalErrorRequest {
125    pub reason_code: Option<fidl_fuchsia_wlan_internal_common::CriticalErrorReason>,
126    #[doc(hidden)]
127    pub __source_breaking: fidl::marker::SourceBreaking,
128}
129
130impl fidl::Persistable for WlanPhyNotifyOnCriticalErrorRequest {}
131
132#[derive(Clone, Debug, Default, PartialEq)]
133pub struct WlanPhySetBtCoexistenceModeRequest {
134    pub mode: Option<fidl_fuchsia_wlan_internal_common::BtCoexistenceMode>,
135    #[doc(hidden)]
136    pub __source_breaking: fidl::marker::SourceBreaking,
137}
138
139impl fidl::Persistable for WlanPhySetBtCoexistenceModeRequest {}
140
141#[derive(Clone, Debug, Default, PartialEq)]
142pub struct WlanPhySetPowerSaveModeRequest {
143    /// This field is required.
144    pub ps_mode: Option<fidl_fuchsia_wlan_common_common::PowerSaveType>,
145    #[doc(hidden)]
146    pub __source_breaking: fidl::marker::SourceBreaking,
147}
148
149impl fidl::Persistable for WlanPhySetPowerSaveModeRequest {}
150
151#[derive(Clone, Debug, Default, PartialEq)]
152pub struct WlanPhySetTxPowerScenarioRequest {
153    pub scenario: Option<fidl_fuchsia_wlan_internal_common::TxPowerScenario>,
154    #[doc(hidden)]
155    pub __source_breaking: fidl::marker::SourceBreaking,
156}
157
158impl fidl::Persistable for WlanPhySetTxPowerScenarioRequest {}
159
160#[derive(Clone, Debug, Default, PartialEq)]
161pub struct WlanPhyCreateIfaceResponse {
162    /// This field is always present.
163    pub iface_id: Option<u16>,
164    #[doc(hidden)]
165    pub __source_breaking: fidl::marker::SourceBreaking,
166}
167
168impl fidl::Persistable for WlanPhyCreateIfaceResponse {}
169
170#[derive(Clone, Debug, Default, PartialEq)]
171pub struct WlanPhyGetPowerSaveModeResponse {
172    /// This field is required.
173    pub ps_mode: Option<fidl_fuchsia_wlan_common_common::PowerSaveType>,
174    #[doc(hidden)]
175    pub __source_breaking: fidl::marker::SourceBreaking,
176}
177
178impl fidl::Persistable for WlanPhyGetPowerSaveModeResponse {}
179
180#[derive(Clone, Debug, Default, PartialEq)]
181pub struct WlanPhyGetPowerStateResponse {
182    pub power_on: Option<bool>,
183    #[doc(hidden)]
184    pub __source_breaking: fidl::marker::SourceBreaking,
185}
186
187impl fidl::Persistable for WlanPhyGetPowerStateResponse {}
188
189#[derive(Clone, Debug, Default, PartialEq)]
190pub struct WlanPhyGetSupportedMacRolesResponse {
191    pub supported_mac_roles: Option<Vec<fidl_fuchsia_wlan_common_common::WlanMacRole>>,
192    #[doc(hidden)]
193    pub __source_breaking: fidl::marker::SourceBreaking,
194}
195
196impl fidl::Persistable for WlanPhyGetSupportedMacRolesResponse {}
197
198pub mod wlan_phy_ordinals {
199    pub const INIT: u64 = 0x399fe5e97bb0eff3;
200    pub const GET_SUPPORTED_MAC_ROLES: u64 = 0x36891bcf679ad34a;
201    pub const CREATE_IFACE: u64 = 0x4cc00e15727fbb8e;
202    pub const DESTROY_IFACE: u64 = 0xfa408ede62bf8bc;
203    pub const SET_COUNTRY: u64 = 0x6d1258ed25af4a0f;
204    pub const CLEAR_COUNTRY: u64 = 0x73f333d223cec34f;
205    pub const GET_COUNTRY: u64 = 0x13ee2c5158d8507a;
206    pub const SET_POWER_SAVE_MODE: u64 = 0x4e164c65070f890d;
207    pub const GET_POWER_SAVE_MODE: u64 = 0x1cbd3390a4230826;
208    pub const RESET: u64 = 0x2f0f1d8f2f22988f;
209    pub const GET_POWER_STATE: u64 = 0x4639d1e5e93102c1;
210    pub const SET_BT_COEXISTENCE_MODE: u64 = 0x5ac69f24a87cac05;
211    pub const SET_TX_POWER_SCENARIO: u64 = 0x72e4d055cd3a18dc;
212    pub const RESET_TX_POWER_SCENARIO: u64 = 0x78c3bd271b3bb712;
213    pub const GET_TX_POWER_SCENARIO: u64 = 0x62f9717d964b3c8e;
214}
215
216pub mod wlan_phy_notify_ordinals {
217    pub const ON_CRITICAL_ERROR: u64 = 0x621a4bea612fda2;
218    pub const ON_COUNTRY_CODE_CHANGE: u64 = 0x9db74ddfe1fa156;
219}
220
221mod internal {
222    use super::*;
223    unsafe impl fidl::encoding::TypeMarker for WlanPhyNotifyError {
224        type Owned = Self;
225
226        #[inline(always)]
227        fn inline_align(_context: fidl::encoding::Context) -> usize {
228            std::mem::align_of::<u32>()
229        }
230
231        #[inline(always)]
232        fn inline_size(_context: fidl::encoding::Context) -> usize {
233            std::mem::size_of::<u32>()
234        }
235
236        #[inline(always)]
237        fn encode_is_copy() -> bool {
238            false
239        }
240
241        #[inline(always)]
242        fn decode_is_copy() -> bool {
243            false
244        }
245    }
246
247    impl fidl::encoding::ValueTypeMarker for WlanPhyNotifyError {
248        type Borrowed<'a> = Self;
249        #[inline(always)]
250        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
251            *value
252        }
253    }
254
255    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
256        for WlanPhyNotifyError
257    {
258        #[inline]
259        unsafe fn encode(
260            self,
261            encoder: &mut fidl::encoding::Encoder<'_, D>,
262            offset: usize,
263            _depth: fidl::encoding::Depth,
264        ) -> fidl::Result<()> {
265            encoder.debug_check_bounds::<Self>(offset);
266            encoder.write_num(self.into_primitive(), offset);
267            Ok(())
268        }
269    }
270
271    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WlanPhyNotifyError {
272        #[inline(always)]
273        fn new_empty() -> Self {
274            Self::unknown()
275        }
276
277        #[inline]
278        unsafe fn decode(
279            &mut self,
280            decoder: &mut fidl::encoding::Decoder<'_, D>,
281            offset: usize,
282            _depth: fidl::encoding::Depth,
283        ) -> fidl::Result<()> {
284            decoder.debug_check_bounds::<Self>(offset);
285            let prim = decoder.read_num::<u32>(offset);
286
287            *self = Self::from_primitive_allow_unknown(prim);
288            Ok(())
289        }
290    }
291
292    impl fidl::encoding::ValueTypeMarker for WlanPhySetCountryRequest {
293        type Borrowed<'a> = &'a Self;
294        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
295            value
296        }
297    }
298
299    unsafe impl fidl::encoding::TypeMarker for WlanPhySetCountryRequest {
300        type Owned = Self;
301
302        #[inline(always)]
303        fn inline_align(_context: fidl::encoding::Context) -> usize {
304            1
305        }
306
307        #[inline(always)]
308        fn inline_size(_context: fidl::encoding::Context) -> usize {
309            2
310        }
311        #[inline(always)]
312        fn encode_is_copy() -> bool {
313            true
314        }
315
316        #[inline(always)]
317        fn decode_is_copy() -> bool {
318            true
319        }
320    }
321
322    unsafe impl<D: fidl::encoding::ResourceDialect>
323        fidl::encoding::Encode<WlanPhySetCountryRequest, D> for &WlanPhySetCountryRequest
324    {
325        #[inline]
326        unsafe fn encode(
327            self,
328            encoder: &mut fidl::encoding::Encoder<'_, D>,
329            offset: usize,
330            _depth: fidl::encoding::Depth,
331        ) -> fidl::Result<()> {
332            encoder.debug_check_bounds::<WlanPhySetCountryRequest>(offset);
333            unsafe {
334                // Copy the object into the buffer.
335                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
336                (buf_ptr as *mut WlanPhySetCountryRequest)
337                    .write_unaligned((self as *const WlanPhySetCountryRequest).read());
338                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
339                // done second because the memcpy will write garbage to these bytes.
340            }
341            Ok(())
342        }
343    }
344    unsafe impl<
345        D: fidl::encoding::ResourceDialect,
346        T0: fidl::encoding::Encode<fidl::encoding::Array<u8, 2>, D>,
347    > fidl::encoding::Encode<WlanPhySetCountryRequest, D> for (T0,)
348    {
349        #[inline]
350        unsafe fn encode(
351            self,
352            encoder: &mut fidl::encoding::Encoder<'_, D>,
353            offset: usize,
354            depth: fidl::encoding::Depth,
355        ) -> fidl::Result<()> {
356            encoder.debug_check_bounds::<WlanPhySetCountryRequest>(offset);
357            // Zero out padding regions. There's no need to apply masks
358            // because the unmasked parts will be overwritten by fields.
359            // Write the fields.
360            self.0.encode(encoder, offset + 0, depth)?;
361            Ok(())
362        }
363    }
364
365    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
366        for WlanPhySetCountryRequest
367    {
368        #[inline(always)]
369        fn new_empty() -> Self {
370            Self { country: fidl::new_empty!(fidl::encoding::Array<u8, 2>, D) }
371        }
372
373        #[inline]
374        unsafe fn decode(
375            &mut self,
376            decoder: &mut fidl::encoding::Decoder<'_, D>,
377            offset: usize,
378            _depth: fidl::encoding::Depth,
379        ) -> fidl::Result<()> {
380            decoder.debug_check_bounds::<Self>(offset);
381            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
382            // Verify that padding bytes are zero.
383            // Copy from the buffer into the object.
384            unsafe {
385                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 2);
386            }
387            Ok(())
388        }
389    }
390
391    impl fidl::encoding::ValueTypeMarker for WlanPhyGetCountryResponse {
392        type Borrowed<'a> = &'a Self;
393        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
394            value
395        }
396    }
397
398    unsafe impl fidl::encoding::TypeMarker for WlanPhyGetCountryResponse {
399        type Owned = Self;
400
401        #[inline(always)]
402        fn inline_align(_context: fidl::encoding::Context) -> usize {
403            1
404        }
405
406        #[inline(always)]
407        fn inline_size(_context: fidl::encoding::Context) -> usize {
408            2
409        }
410        #[inline(always)]
411        fn encode_is_copy() -> bool {
412            true
413        }
414
415        #[inline(always)]
416        fn decode_is_copy() -> bool {
417            true
418        }
419    }
420
421    unsafe impl<D: fidl::encoding::ResourceDialect>
422        fidl::encoding::Encode<WlanPhyGetCountryResponse, D> for &WlanPhyGetCountryResponse
423    {
424        #[inline]
425        unsafe fn encode(
426            self,
427            encoder: &mut fidl::encoding::Encoder<'_, D>,
428            offset: usize,
429            _depth: fidl::encoding::Depth,
430        ) -> fidl::Result<()> {
431            encoder.debug_check_bounds::<WlanPhyGetCountryResponse>(offset);
432            unsafe {
433                // Copy the object into the buffer.
434                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
435                (buf_ptr as *mut WlanPhyGetCountryResponse)
436                    .write_unaligned((self as *const WlanPhyGetCountryResponse).read());
437                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
438                // done second because the memcpy will write garbage to these bytes.
439            }
440            Ok(())
441        }
442    }
443    unsafe impl<
444        D: fidl::encoding::ResourceDialect,
445        T0: fidl::encoding::Encode<fidl::encoding::Array<u8, 2>, D>,
446    > fidl::encoding::Encode<WlanPhyGetCountryResponse, D> for (T0,)
447    {
448        #[inline]
449        unsafe fn encode(
450            self,
451            encoder: &mut fidl::encoding::Encoder<'_, D>,
452            offset: usize,
453            depth: fidl::encoding::Depth,
454        ) -> fidl::Result<()> {
455            encoder.debug_check_bounds::<WlanPhyGetCountryResponse>(offset);
456            // Zero out padding regions. There's no need to apply masks
457            // because the unmasked parts will be overwritten by fields.
458            // Write the fields.
459            self.0.encode(encoder, offset + 0, depth)?;
460            Ok(())
461        }
462    }
463
464    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
465        for WlanPhyGetCountryResponse
466    {
467        #[inline(always)]
468        fn new_empty() -> Self {
469            Self { country: fidl::new_empty!(fidl::encoding::Array<u8, 2>, D) }
470        }
471
472        #[inline]
473        unsafe fn decode(
474            &mut self,
475            decoder: &mut fidl::encoding::Decoder<'_, D>,
476            offset: usize,
477            _depth: fidl::encoding::Depth,
478        ) -> fidl::Result<()> {
479            decoder.debug_check_bounds::<Self>(offset);
480            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
481            // Verify that padding bytes are zero.
482            // Copy from the buffer into the object.
483            unsafe {
484                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 2);
485            }
486            Ok(())
487        }
488    }
489
490    impl fidl::encoding::ValueTypeMarker for WlanPhyGetTxPowerScenarioResponse {
491        type Borrowed<'a> = &'a Self;
492        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
493            value
494        }
495    }
496
497    unsafe impl fidl::encoding::TypeMarker for WlanPhyGetTxPowerScenarioResponse {
498        type Owned = Self;
499
500        #[inline(always)]
501        fn inline_align(_context: fidl::encoding::Context) -> usize {
502            4
503        }
504
505        #[inline(always)]
506        fn inline_size(_context: fidl::encoding::Context) -> usize {
507            4
508        }
509    }
510
511    unsafe impl<D: fidl::encoding::ResourceDialect>
512        fidl::encoding::Encode<WlanPhyGetTxPowerScenarioResponse, D>
513        for &WlanPhyGetTxPowerScenarioResponse
514    {
515        #[inline]
516        unsafe fn encode(
517            self,
518            encoder: &mut fidl::encoding::Encoder<'_, D>,
519            offset: usize,
520            _depth: fidl::encoding::Depth,
521        ) -> fidl::Result<()> {
522            encoder.debug_check_bounds::<WlanPhyGetTxPowerScenarioResponse>(offset);
523            // Delegate to tuple encoding.
524            fidl::encoding::Encode::<WlanPhyGetTxPowerScenarioResponse, D>::encode(
525                (
526                    <fidl_fuchsia_wlan_internal_common::TxPowerScenario as fidl::encoding::ValueTypeMarker>::borrow(&self.scenario),
527                ),
528                encoder, offset, _depth
529            )
530        }
531    }
532    unsafe impl<
533        D: fidl::encoding::ResourceDialect,
534        T0: fidl::encoding::Encode<fidl_fuchsia_wlan_internal_common::TxPowerScenario, D>,
535    > fidl::encoding::Encode<WlanPhyGetTxPowerScenarioResponse, D> for (T0,)
536    {
537        #[inline]
538        unsafe fn encode(
539            self,
540            encoder: &mut fidl::encoding::Encoder<'_, D>,
541            offset: usize,
542            depth: fidl::encoding::Depth,
543        ) -> fidl::Result<()> {
544            encoder.debug_check_bounds::<WlanPhyGetTxPowerScenarioResponse>(offset);
545            // Zero out padding regions. There's no need to apply masks
546            // because the unmasked parts will be overwritten by fields.
547            // Write the fields.
548            self.0.encode(encoder, offset + 0, depth)?;
549            Ok(())
550        }
551    }
552
553    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
554        for WlanPhyGetTxPowerScenarioResponse
555    {
556        #[inline(always)]
557        fn new_empty() -> Self {
558            Self {
559                scenario: fidl::new_empty!(fidl_fuchsia_wlan_internal_common::TxPowerScenario, D),
560            }
561        }
562
563        #[inline]
564        unsafe fn decode(
565            &mut self,
566            decoder: &mut fidl::encoding::Decoder<'_, D>,
567            offset: usize,
568            _depth: fidl::encoding::Depth,
569        ) -> fidl::Result<()> {
570            decoder.debug_check_bounds::<Self>(offset);
571            // Verify that padding bytes are zero.
572            fidl::decode!(
573                fidl_fuchsia_wlan_internal_common::TxPowerScenario,
574                D,
575                &mut self.scenario,
576                decoder,
577                offset + 0,
578                _depth
579            )?;
580            Ok(())
581        }
582    }
583
584    impl WlanPhyDestroyIfaceRequest {
585        #[inline(always)]
586        fn max_ordinal_present(&self) -> u64 {
587            if let Some(_) = self.iface_id {
588                return 1;
589            }
590            0
591        }
592    }
593
594    impl fidl::encoding::ValueTypeMarker for WlanPhyDestroyIfaceRequest {
595        type Borrowed<'a> = &'a Self;
596        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
597            value
598        }
599    }
600
601    unsafe impl fidl::encoding::TypeMarker for WlanPhyDestroyIfaceRequest {
602        type Owned = Self;
603
604        #[inline(always)]
605        fn inline_align(_context: fidl::encoding::Context) -> usize {
606            8
607        }
608
609        #[inline(always)]
610        fn inline_size(_context: fidl::encoding::Context) -> usize {
611            16
612        }
613    }
614
615    unsafe impl<D: fidl::encoding::ResourceDialect>
616        fidl::encoding::Encode<WlanPhyDestroyIfaceRequest, D> for &WlanPhyDestroyIfaceRequest
617    {
618        unsafe fn encode(
619            self,
620            encoder: &mut fidl::encoding::Encoder<'_, D>,
621            offset: usize,
622            mut depth: fidl::encoding::Depth,
623        ) -> fidl::Result<()> {
624            encoder.debug_check_bounds::<WlanPhyDestroyIfaceRequest>(offset);
625            // Vector header
626            let max_ordinal: u64 = self.max_ordinal_present();
627            encoder.write_num(max_ordinal, offset);
628            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
629            // Calling encoder.out_of_line_offset(0) is not allowed.
630            if max_ordinal == 0 {
631                return Ok(());
632            }
633            depth.increment()?;
634            let envelope_size = 8;
635            let bytes_len = max_ordinal as usize * envelope_size;
636            #[allow(unused_variables)]
637            let offset = encoder.out_of_line_offset(bytes_len);
638            let mut _prev_end_offset: usize = 0;
639            if 1 > max_ordinal {
640                return Ok(());
641            }
642
643            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
644            // are envelope_size bytes.
645            let cur_offset: usize = (1 - 1) * envelope_size;
646
647            // Zero reserved fields.
648            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
649
650            // Safety:
651            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
652            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
653            //   envelope_size bytes, there is always sufficient room.
654            fidl::encoding::encode_in_envelope_optional::<u16, D>(
655                self.iface_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
656                encoder,
657                offset + cur_offset,
658                depth,
659            )?;
660
661            _prev_end_offset = cur_offset + envelope_size;
662
663            Ok(())
664        }
665    }
666
667    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
668        for WlanPhyDestroyIfaceRequest
669    {
670        #[inline(always)]
671        fn new_empty() -> Self {
672            Self::default()
673        }
674
675        unsafe fn decode(
676            &mut self,
677            decoder: &mut fidl::encoding::Decoder<'_, D>,
678            offset: usize,
679            mut depth: fidl::encoding::Depth,
680        ) -> fidl::Result<()> {
681            decoder.debug_check_bounds::<Self>(offset);
682            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
683                None => return Err(fidl::Error::NotNullable),
684                Some(len) => len,
685            };
686            // Calling decoder.out_of_line_offset(0) is not allowed.
687            if len == 0 {
688                return Ok(());
689            };
690            depth.increment()?;
691            let envelope_size = 8;
692            let bytes_len = len * envelope_size;
693            let offset = decoder.out_of_line_offset(bytes_len)?;
694            // Decode the envelope for each type.
695            let mut _next_ordinal_to_read = 0;
696            let mut next_offset = offset;
697            let end_offset = offset + bytes_len;
698            _next_ordinal_to_read += 1;
699            if next_offset >= end_offset {
700                return Ok(());
701            }
702
703            // Decode unknown envelopes for gaps in ordinals.
704            while _next_ordinal_to_read < 1 {
705                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
706                _next_ordinal_to_read += 1;
707                next_offset += envelope_size;
708            }
709
710            let next_out_of_line = decoder.next_out_of_line();
711            let handles_before = decoder.remaining_handles();
712            if let Some((inlined, num_bytes, num_handles)) =
713                fidl::encoding::decode_envelope_header(decoder, next_offset)?
714            {
715                let member_inline_size =
716                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
717                if inlined != (member_inline_size <= 4) {
718                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
719                }
720                let inner_offset;
721                let mut inner_depth = depth.clone();
722                if inlined {
723                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
724                    inner_offset = next_offset;
725                } else {
726                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
727                    inner_depth.increment()?;
728                }
729                let val_ref = self.iface_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
730                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
731                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
732                {
733                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
734                }
735                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
736                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
737                }
738            }
739
740            next_offset += envelope_size;
741
742            // Decode the remaining unknown envelopes.
743            while next_offset < end_offset {
744                _next_ordinal_to_read += 1;
745                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
746                next_offset += envelope_size;
747            }
748
749            Ok(())
750        }
751    }
752
753    impl WlanPhyNotifyOnCountryCodeChangeRequest {
754        #[inline(always)]
755        fn max_ordinal_present(&self) -> u64 {
756            if let Some(_) = self.phy_country {
757                return 1;
758            }
759            0
760        }
761    }
762
763    impl fidl::encoding::ValueTypeMarker for WlanPhyNotifyOnCountryCodeChangeRequest {
764        type Borrowed<'a> = &'a Self;
765        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
766            value
767        }
768    }
769
770    unsafe impl fidl::encoding::TypeMarker for WlanPhyNotifyOnCountryCodeChangeRequest {
771        type Owned = Self;
772
773        #[inline(always)]
774        fn inline_align(_context: fidl::encoding::Context) -> usize {
775            8
776        }
777
778        #[inline(always)]
779        fn inline_size(_context: fidl::encoding::Context) -> usize {
780            16
781        }
782    }
783
784    unsafe impl<D: fidl::encoding::ResourceDialect>
785        fidl::encoding::Encode<WlanPhyNotifyOnCountryCodeChangeRequest, D>
786        for &WlanPhyNotifyOnCountryCodeChangeRequest
787    {
788        unsafe fn encode(
789            self,
790            encoder: &mut fidl::encoding::Encoder<'_, D>,
791            offset: usize,
792            mut depth: fidl::encoding::Depth,
793        ) -> fidl::Result<()> {
794            encoder.debug_check_bounds::<WlanPhyNotifyOnCountryCodeChangeRequest>(offset);
795            // Vector header
796            let max_ordinal: u64 = self.max_ordinal_present();
797            encoder.write_num(max_ordinal, offset);
798            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
799            // Calling encoder.out_of_line_offset(0) is not allowed.
800            if max_ordinal == 0 {
801                return Ok(());
802            }
803            depth.increment()?;
804            let envelope_size = 8;
805            let bytes_len = max_ordinal as usize * envelope_size;
806            #[allow(unused_variables)]
807            let offset = encoder.out_of_line_offset(bytes_len);
808            let mut _prev_end_offset: usize = 0;
809            if 1 > max_ordinal {
810                return Ok(());
811            }
812
813            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
814            // are envelope_size bytes.
815            let cur_offset: usize = (1 - 1) * envelope_size;
816
817            // Zero reserved fields.
818            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
819
820            // Safety:
821            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
822            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
823            //   envelope_size bytes, there is always sufficient room.
824            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 2>, D>(
825                self.phy_country
826                    .as_ref()
827                    .map(<fidl::encoding::Array<u8, 2> as fidl::encoding::ValueTypeMarker>::borrow),
828                encoder,
829                offset + cur_offset,
830                depth,
831            )?;
832
833            _prev_end_offset = cur_offset + envelope_size;
834
835            Ok(())
836        }
837    }
838
839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
840        for WlanPhyNotifyOnCountryCodeChangeRequest
841    {
842        #[inline(always)]
843        fn new_empty() -> Self {
844            Self::default()
845        }
846
847        unsafe fn decode(
848            &mut self,
849            decoder: &mut fidl::encoding::Decoder<'_, D>,
850            offset: usize,
851            mut depth: fidl::encoding::Depth,
852        ) -> fidl::Result<()> {
853            decoder.debug_check_bounds::<Self>(offset);
854            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
855                None => return Err(fidl::Error::NotNullable),
856                Some(len) => len,
857            };
858            // Calling decoder.out_of_line_offset(0) is not allowed.
859            if len == 0 {
860                return Ok(());
861            };
862            depth.increment()?;
863            let envelope_size = 8;
864            let bytes_len = len * envelope_size;
865            let offset = decoder.out_of_line_offset(bytes_len)?;
866            // Decode the envelope for each type.
867            let mut _next_ordinal_to_read = 0;
868            let mut next_offset = offset;
869            let end_offset = offset + bytes_len;
870            _next_ordinal_to_read += 1;
871            if next_offset >= end_offset {
872                return Ok(());
873            }
874
875            // Decode unknown envelopes for gaps in ordinals.
876            while _next_ordinal_to_read < 1 {
877                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
878                _next_ordinal_to_read += 1;
879                next_offset += envelope_size;
880            }
881
882            let next_out_of_line = decoder.next_out_of_line();
883            let handles_before = decoder.remaining_handles();
884            if let Some((inlined, num_bytes, num_handles)) =
885                fidl::encoding::decode_envelope_header(decoder, next_offset)?
886            {
887                let member_inline_size =
888                    <fidl::encoding::Array<u8, 2> as fidl::encoding::TypeMarker>::inline_size(
889                        decoder.context,
890                    );
891                if inlined != (member_inline_size <= 4) {
892                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
893                }
894                let inner_offset;
895                let mut inner_depth = depth.clone();
896                if inlined {
897                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
898                    inner_offset = next_offset;
899                } else {
900                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
901                    inner_depth.increment()?;
902                }
903                let val_ref = self
904                    .phy_country
905                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 2>, D));
906                fidl::decode!(fidl::encoding::Array<u8, 2>, D, val_ref, decoder, inner_offset, inner_depth)?;
907                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
908                {
909                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
910                }
911                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
912                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
913                }
914            }
915
916            next_offset += envelope_size;
917
918            // Decode the remaining unknown envelopes.
919            while next_offset < end_offset {
920                _next_ordinal_to_read += 1;
921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
922                next_offset += envelope_size;
923            }
924
925            Ok(())
926        }
927    }
928
929    impl WlanPhyNotifyOnCriticalErrorRequest {
930        #[inline(always)]
931        fn max_ordinal_present(&self) -> u64 {
932            if let Some(_) = self.reason_code {
933                return 1;
934            }
935            0
936        }
937    }
938
939    impl fidl::encoding::ValueTypeMarker for WlanPhyNotifyOnCriticalErrorRequest {
940        type Borrowed<'a> = &'a Self;
941        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
942            value
943        }
944    }
945
946    unsafe impl fidl::encoding::TypeMarker for WlanPhyNotifyOnCriticalErrorRequest {
947        type Owned = Self;
948
949        #[inline(always)]
950        fn inline_align(_context: fidl::encoding::Context) -> usize {
951            8
952        }
953
954        #[inline(always)]
955        fn inline_size(_context: fidl::encoding::Context) -> usize {
956            16
957        }
958    }
959
960    unsafe impl<D: fidl::encoding::ResourceDialect>
961        fidl::encoding::Encode<WlanPhyNotifyOnCriticalErrorRequest, D>
962        for &WlanPhyNotifyOnCriticalErrorRequest
963    {
964        unsafe fn encode(
965            self,
966            encoder: &mut fidl::encoding::Encoder<'_, D>,
967            offset: usize,
968            mut depth: fidl::encoding::Depth,
969        ) -> fidl::Result<()> {
970            encoder.debug_check_bounds::<WlanPhyNotifyOnCriticalErrorRequest>(offset);
971            // Vector header
972            let max_ordinal: u64 = self.max_ordinal_present();
973            encoder.write_num(max_ordinal, offset);
974            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
975            // Calling encoder.out_of_line_offset(0) is not allowed.
976            if max_ordinal == 0 {
977                return Ok(());
978            }
979            depth.increment()?;
980            let envelope_size = 8;
981            let bytes_len = max_ordinal as usize * envelope_size;
982            #[allow(unused_variables)]
983            let offset = encoder.out_of_line_offset(bytes_len);
984            let mut _prev_end_offset: usize = 0;
985            if 1 > max_ordinal {
986                return Ok(());
987            }
988
989            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
990            // are envelope_size bytes.
991            let cur_offset: usize = (1 - 1) * envelope_size;
992
993            // Zero reserved fields.
994            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
995
996            // Safety:
997            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
998            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
999            //   envelope_size bytes, there is always sufficient room.
1000            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_internal_common::CriticalErrorReason, D>(
1001            self.reason_code.as_ref().map(<fidl_fuchsia_wlan_internal_common::CriticalErrorReason as fidl::encoding::ValueTypeMarker>::borrow),
1002            encoder, offset + cur_offset, depth
1003        )?;
1004
1005            _prev_end_offset = cur_offset + envelope_size;
1006
1007            Ok(())
1008        }
1009    }
1010
1011    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1012        for WlanPhyNotifyOnCriticalErrorRequest
1013    {
1014        #[inline(always)]
1015        fn new_empty() -> Self {
1016            Self::default()
1017        }
1018
1019        unsafe fn decode(
1020            &mut self,
1021            decoder: &mut fidl::encoding::Decoder<'_, D>,
1022            offset: usize,
1023            mut depth: fidl::encoding::Depth,
1024        ) -> fidl::Result<()> {
1025            decoder.debug_check_bounds::<Self>(offset);
1026            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1027                None => return Err(fidl::Error::NotNullable),
1028                Some(len) => len,
1029            };
1030            // Calling decoder.out_of_line_offset(0) is not allowed.
1031            if len == 0 {
1032                return Ok(());
1033            };
1034            depth.increment()?;
1035            let envelope_size = 8;
1036            let bytes_len = len * envelope_size;
1037            let offset = decoder.out_of_line_offset(bytes_len)?;
1038            // Decode the envelope for each type.
1039            let mut _next_ordinal_to_read = 0;
1040            let mut next_offset = offset;
1041            let end_offset = offset + bytes_len;
1042            _next_ordinal_to_read += 1;
1043            if next_offset >= end_offset {
1044                return Ok(());
1045            }
1046
1047            // Decode unknown envelopes for gaps in ordinals.
1048            while _next_ordinal_to_read < 1 {
1049                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1050                _next_ordinal_to_read += 1;
1051                next_offset += envelope_size;
1052            }
1053
1054            let next_out_of_line = decoder.next_out_of_line();
1055            let handles_before = decoder.remaining_handles();
1056            if let Some((inlined, num_bytes, num_handles)) =
1057                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1058            {
1059                let member_inline_size = <fidl_fuchsia_wlan_internal_common::CriticalErrorReason as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1060                if inlined != (member_inline_size <= 4) {
1061                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1062                }
1063                let inner_offset;
1064                let mut inner_depth = depth.clone();
1065                if inlined {
1066                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1067                    inner_offset = next_offset;
1068                } else {
1069                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1070                    inner_depth.increment()?;
1071                }
1072                let val_ref = self.reason_code.get_or_insert_with(|| {
1073                    fidl::new_empty!(fidl_fuchsia_wlan_internal_common::CriticalErrorReason, D)
1074                });
1075                fidl::decode!(
1076                    fidl_fuchsia_wlan_internal_common::CriticalErrorReason,
1077                    D,
1078                    val_ref,
1079                    decoder,
1080                    inner_offset,
1081                    inner_depth
1082                )?;
1083                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1084                {
1085                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1086                }
1087                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1088                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1089                }
1090            }
1091
1092            next_offset += envelope_size;
1093
1094            // Decode the remaining unknown envelopes.
1095            while next_offset < end_offset {
1096                _next_ordinal_to_read += 1;
1097                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1098                next_offset += envelope_size;
1099            }
1100
1101            Ok(())
1102        }
1103    }
1104
1105    impl WlanPhySetBtCoexistenceModeRequest {
1106        #[inline(always)]
1107        fn max_ordinal_present(&self) -> u64 {
1108            if let Some(_) = self.mode {
1109                return 1;
1110            }
1111            0
1112        }
1113    }
1114
1115    impl fidl::encoding::ValueTypeMarker for WlanPhySetBtCoexistenceModeRequest {
1116        type Borrowed<'a> = &'a Self;
1117        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1118            value
1119        }
1120    }
1121
1122    unsafe impl fidl::encoding::TypeMarker for WlanPhySetBtCoexistenceModeRequest {
1123        type Owned = Self;
1124
1125        #[inline(always)]
1126        fn inline_align(_context: fidl::encoding::Context) -> usize {
1127            8
1128        }
1129
1130        #[inline(always)]
1131        fn inline_size(_context: fidl::encoding::Context) -> usize {
1132            16
1133        }
1134    }
1135
1136    unsafe impl<D: fidl::encoding::ResourceDialect>
1137        fidl::encoding::Encode<WlanPhySetBtCoexistenceModeRequest, D>
1138        for &WlanPhySetBtCoexistenceModeRequest
1139    {
1140        unsafe fn encode(
1141            self,
1142            encoder: &mut fidl::encoding::Encoder<'_, D>,
1143            offset: usize,
1144            mut depth: fidl::encoding::Depth,
1145        ) -> fidl::Result<()> {
1146            encoder.debug_check_bounds::<WlanPhySetBtCoexistenceModeRequest>(offset);
1147            // Vector header
1148            let max_ordinal: u64 = self.max_ordinal_present();
1149            encoder.write_num(max_ordinal, offset);
1150            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1151            // Calling encoder.out_of_line_offset(0) is not allowed.
1152            if max_ordinal == 0 {
1153                return Ok(());
1154            }
1155            depth.increment()?;
1156            let envelope_size = 8;
1157            let bytes_len = max_ordinal as usize * envelope_size;
1158            #[allow(unused_variables)]
1159            let offset = encoder.out_of_line_offset(bytes_len);
1160            let mut _prev_end_offset: usize = 0;
1161            if 1 > max_ordinal {
1162                return Ok(());
1163            }
1164
1165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1166            // are envelope_size bytes.
1167            let cur_offset: usize = (1 - 1) * envelope_size;
1168
1169            // Zero reserved fields.
1170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1171
1172            // Safety:
1173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1175            //   envelope_size bytes, there is always sufficient room.
1176            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_internal_common::BtCoexistenceMode, D>(
1177            self.mode.as_ref().map(<fidl_fuchsia_wlan_internal_common::BtCoexistenceMode as fidl::encoding::ValueTypeMarker>::borrow),
1178            encoder, offset + cur_offset, depth
1179        )?;
1180
1181            _prev_end_offset = cur_offset + envelope_size;
1182
1183            Ok(())
1184        }
1185    }
1186
1187    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1188        for WlanPhySetBtCoexistenceModeRequest
1189    {
1190        #[inline(always)]
1191        fn new_empty() -> Self {
1192            Self::default()
1193        }
1194
1195        unsafe fn decode(
1196            &mut self,
1197            decoder: &mut fidl::encoding::Decoder<'_, D>,
1198            offset: usize,
1199            mut depth: fidl::encoding::Depth,
1200        ) -> fidl::Result<()> {
1201            decoder.debug_check_bounds::<Self>(offset);
1202            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1203                None => return Err(fidl::Error::NotNullable),
1204                Some(len) => len,
1205            };
1206            // Calling decoder.out_of_line_offset(0) is not allowed.
1207            if len == 0 {
1208                return Ok(());
1209            };
1210            depth.increment()?;
1211            let envelope_size = 8;
1212            let bytes_len = len * envelope_size;
1213            let offset = decoder.out_of_line_offset(bytes_len)?;
1214            // Decode the envelope for each type.
1215            let mut _next_ordinal_to_read = 0;
1216            let mut next_offset = offset;
1217            let end_offset = offset + bytes_len;
1218            _next_ordinal_to_read += 1;
1219            if next_offset >= end_offset {
1220                return Ok(());
1221            }
1222
1223            // Decode unknown envelopes for gaps in ordinals.
1224            while _next_ordinal_to_read < 1 {
1225                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1226                _next_ordinal_to_read += 1;
1227                next_offset += envelope_size;
1228            }
1229
1230            let next_out_of_line = decoder.next_out_of_line();
1231            let handles_before = decoder.remaining_handles();
1232            if let Some((inlined, num_bytes, num_handles)) =
1233                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1234            {
1235                let member_inline_size = <fidl_fuchsia_wlan_internal_common::BtCoexistenceMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1236                if inlined != (member_inline_size <= 4) {
1237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1238                }
1239                let inner_offset;
1240                let mut inner_depth = depth.clone();
1241                if inlined {
1242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1243                    inner_offset = next_offset;
1244                } else {
1245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1246                    inner_depth.increment()?;
1247                }
1248                let val_ref = self.mode.get_or_insert_with(|| {
1249                    fidl::new_empty!(fidl_fuchsia_wlan_internal_common::BtCoexistenceMode, D)
1250                });
1251                fidl::decode!(
1252                    fidl_fuchsia_wlan_internal_common::BtCoexistenceMode,
1253                    D,
1254                    val_ref,
1255                    decoder,
1256                    inner_offset,
1257                    inner_depth
1258                )?;
1259                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1260                {
1261                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1262                }
1263                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1264                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1265                }
1266            }
1267
1268            next_offset += envelope_size;
1269
1270            // Decode the remaining unknown envelopes.
1271            while next_offset < end_offset {
1272                _next_ordinal_to_read += 1;
1273                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1274                next_offset += envelope_size;
1275            }
1276
1277            Ok(())
1278        }
1279    }
1280
1281    impl WlanPhySetPowerSaveModeRequest {
1282        #[inline(always)]
1283        fn max_ordinal_present(&self) -> u64 {
1284            if let Some(_) = self.ps_mode {
1285                return 1;
1286            }
1287            0
1288        }
1289    }
1290
1291    impl fidl::encoding::ValueTypeMarker for WlanPhySetPowerSaveModeRequest {
1292        type Borrowed<'a> = &'a Self;
1293        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1294            value
1295        }
1296    }
1297
1298    unsafe impl fidl::encoding::TypeMarker for WlanPhySetPowerSaveModeRequest {
1299        type Owned = Self;
1300
1301        #[inline(always)]
1302        fn inline_align(_context: fidl::encoding::Context) -> usize {
1303            8
1304        }
1305
1306        #[inline(always)]
1307        fn inline_size(_context: fidl::encoding::Context) -> usize {
1308            16
1309        }
1310    }
1311
1312    unsafe impl<D: fidl::encoding::ResourceDialect>
1313        fidl::encoding::Encode<WlanPhySetPowerSaveModeRequest, D>
1314        for &WlanPhySetPowerSaveModeRequest
1315    {
1316        unsafe fn encode(
1317            self,
1318            encoder: &mut fidl::encoding::Encoder<'_, D>,
1319            offset: usize,
1320            mut depth: fidl::encoding::Depth,
1321        ) -> fidl::Result<()> {
1322            encoder.debug_check_bounds::<WlanPhySetPowerSaveModeRequest>(offset);
1323            // Vector header
1324            let max_ordinal: u64 = self.max_ordinal_present();
1325            encoder.write_num(max_ordinal, offset);
1326            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1327            // Calling encoder.out_of_line_offset(0) is not allowed.
1328            if max_ordinal == 0 {
1329                return Ok(());
1330            }
1331            depth.increment()?;
1332            let envelope_size = 8;
1333            let bytes_len = max_ordinal as usize * envelope_size;
1334            #[allow(unused_variables)]
1335            let offset = encoder.out_of_line_offset(bytes_len);
1336            let mut _prev_end_offset: usize = 0;
1337            if 1 > max_ordinal {
1338                return Ok(());
1339            }
1340
1341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1342            // are envelope_size bytes.
1343            let cur_offset: usize = (1 - 1) * envelope_size;
1344
1345            // Zero reserved fields.
1346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1347
1348            // Safety:
1349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1351            //   envelope_size bytes, there is always sufficient room.
1352            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_common_common::PowerSaveType, D>(
1353            self.ps_mode.as_ref().map(<fidl_fuchsia_wlan_common_common::PowerSaveType as fidl::encoding::ValueTypeMarker>::borrow),
1354            encoder, offset + cur_offset, depth
1355        )?;
1356
1357            _prev_end_offset = cur_offset + envelope_size;
1358
1359            Ok(())
1360        }
1361    }
1362
1363    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1364        for WlanPhySetPowerSaveModeRequest
1365    {
1366        #[inline(always)]
1367        fn new_empty() -> Self {
1368            Self::default()
1369        }
1370
1371        unsafe fn decode(
1372            &mut self,
1373            decoder: &mut fidl::encoding::Decoder<'_, D>,
1374            offset: usize,
1375            mut depth: fidl::encoding::Depth,
1376        ) -> fidl::Result<()> {
1377            decoder.debug_check_bounds::<Self>(offset);
1378            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1379                None => return Err(fidl::Error::NotNullable),
1380                Some(len) => len,
1381            };
1382            // Calling decoder.out_of_line_offset(0) is not allowed.
1383            if len == 0 {
1384                return Ok(());
1385            };
1386            depth.increment()?;
1387            let envelope_size = 8;
1388            let bytes_len = len * envelope_size;
1389            let offset = decoder.out_of_line_offset(bytes_len)?;
1390            // Decode the envelope for each type.
1391            let mut _next_ordinal_to_read = 0;
1392            let mut next_offset = offset;
1393            let end_offset = offset + bytes_len;
1394            _next_ordinal_to_read += 1;
1395            if next_offset >= end_offset {
1396                return Ok(());
1397            }
1398
1399            // Decode unknown envelopes for gaps in ordinals.
1400            while _next_ordinal_to_read < 1 {
1401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1402                _next_ordinal_to_read += 1;
1403                next_offset += envelope_size;
1404            }
1405
1406            let next_out_of_line = decoder.next_out_of_line();
1407            let handles_before = decoder.remaining_handles();
1408            if let Some((inlined, num_bytes, num_handles)) =
1409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1410            {
1411                let member_inline_size = <fidl_fuchsia_wlan_common_common::PowerSaveType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1412                if inlined != (member_inline_size <= 4) {
1413                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1414                }
1415                let inner_offset;
1416                let mut inner_depth = depth.clone();
1417                if inlined {
1418                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1419                    inner_offset = next_offset;
1420                } else {
1421                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1422                    inner_depth.increment()?;
1423                }
1424                let val_ref = self.ps_mode.get_or_insert_with(|| {
1425                    fidl::new_empty!(fidl_fuchsia_wlan_common_common::PowerSaveType, D)
1426                });
1427                fidl::decode!(
1428                    fidl_fuchsia_wlan_common_common::PowerSaveType,
1429                    D,
1430                    val_ref,
1431                    decoder,
1432                    inner_offset,
1433                    inner_depth
1434                )?;
1435                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1436                {
1437                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1438                }
1439                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1440                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1441                }
1442            }
1443
1444            next_offset += envelope_size;
1445
1446            // Decode the remaining unknown envelopes.
1447            while next_offset < end_offset {
1448                _next_ordinal_to_read += 1;
1449                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1450                next_offset += envelope_size;
1451            }
1452
1453            Ok(())
1454        }
1455    }
1456
1457    impl WlanPhySetTxPowerScenarioRequest {
1458        #[inline(always)]
1459        fn max_ordinal_present(&self) -> u64 {
1460            if let Some(_) = self.scenario {
1461                return 1;
1462            }
1463            0
1464        }
1465    }
1466
1467    impl fidl::encoding::ValueTypeMarker for WlanPhySetTxPowerScenarioRequest {
1468        type Borrowed<'a> = &'a Self;
1469        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1470            value
1471        }
1472    }
1473
1474    unsafe impl fidl::encoding::TypeMarker for WlanPhySetTxPowerScenarioRequest {
1475        type Owned = Self;
1476
1477        #[inline(always)]
1478        fn inline_align(_context: fidl::encoding::Context) -> usize {
1479            8
1480        }
1481
1482        #[inline(always)]
1483        fn inline_size(_context: fidl::encoding::Context) -> usize {
1484            16
1485        }
1486    }
1487
1488    unsafe impl<D: fidl::encoding::ResourceDialect>
1489        fidl::encoding::Encode<WlanPhySetTxPowerScenarioRequest, D>
1490        for &WlanPhySetTxPowerScenarioRequest
1491    {
1492        unsafe fn encode(
1493            self,
1494            encoder: &mut fidl::encoding::Encoder<'_, D>,
1495            offset: usize,
1496            mut depth: fidl::encoding::Depth,
1497        ) -> fidl::Result<()> {
1498            encoder.debug_check_bounds::<WlanPhySetTxPowerScenarioRequest>(offset);
1499            // Vector header
1500            let max_ordinal: u64 = self.max_ordinal_present();
1501            encoder.write_num(max_ordinal, offset);
1502            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1503            // Calling encoder.out_of_line_offset(0) is not allowed.
1504            if max_ordinal == 0 {
1505                return Ok(());
1506            }
1507            depth.increment()?;
1508            let envelope_size = 8;
1509            let bytes_len = max_ordinal as usize * envelope_size;
1510            #[allow(unused_variables)]
1511            let offset = encoder.out_of_line_offset(bytes_len);
1512            let mut _prev_end_offset: usize = 0;
1513            if 1 > max_ordinal {
1514                return Ok(());
1515            }
1516
1517            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1518            // are envelope_size bytes.
1519            let cur_offset: usize = (1 - 1) * envelope_size;
1520
1521            // Zero reserved fields.
1522            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1523
1524            // Safety:
1525            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1526            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1527            //   envelope_size bytes, there is always sufficient room.
1528            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_internal_common::TxPowerScenario, D>(
1529            self.scenario.as_ref().map(<fidl_fuchsia_wlan_internal_common::TxPowerScenario as fidl::encoding::ValueTypeMarker>::borrow),
1530            encoder, offset + cur_offset, depth
1531        )?;
1532
1533            _prev_end_offset = cur_offset + envelope_size;
1534
1535            Ok(())
1536        }
1537    }
1538
1539    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1540        for WlanPhySetTxPowerScenarioRequest
1541    {
1542        #[inline(always)]
1543        fn new_empty() -> Self {
1544            Self::default()
1545        }
1546
1547        unsafe fn decode(
1548            &mut self,
1549            decoder: &mut fidl::encoding::Decoder<'_, D>,
1550            offset: usize,
1551            mut depth: fidl::encoding::Depth,
1552        ) -> fidl::Result<()> {
1553            decoder.debug_check_bounds::<Self>(offset);
1554            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1555                None => return Err(fidl::Error::NotNullable),
1556                Some(len) => len,
1557            };
1558            // Calling decoder.out_of_line_offset(0) is not allowed.
1559            if len == 0 {
1560                return Ok(());
1561            };
1562            depth.increment()?;
1563            let envelope_size = 8;
1564            let bytes_len = len * envelope_size;
1565            let offset = decoder.out_of_line_offset(bytes_len)?;
1566            // Decode the envelope for each type.
1567            let mut _next_ordinal_to_read = 0;
1568            let mut next_offset = offset;
1569            let end_offset = offset + bytes_len;
1570            _next_ordinal_to_read += 1;
1571            if next_offset >= end_offset {
1572                return Ok(());
1573            }
1574
1575            // Decode unknown envelopes for gaps in ordinals.
1576            while _next_ordinal_to_read < 1 {
1577                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1578                _next_ordinal_to_read += 1;
1579                next_offset += envelope_size;
1580            }
1581
1582            let next_out_of_line = decoder.next_out_of_line();
1583            let handles_before = decoder.remaining_handles();
1584            if let Some((inlined, num_bytes, num_handles)) =
1585                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1586            {
1587                let member_inline_size = <fidl_fuchsia_wlan_internal_common::TxPowerScenario as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1588                if inlined != (member_inline_size <= 4) {
1589                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1590                }
1591                let inner_offset;
1592                let mut inner_depth = depth.clone();
1593                if inlined {
1594                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1595                    inner_offset = next_offset;
1596                } else {
1597                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1598                    inner_depth.increment()?;
1599                }
1600                let val_ref = self.scenario.get_or_insert_with(|| {
1601                    fidl::new_empty!(fidl_fuchsia_wlan_internal_common::TxPowerScenario, D)
1602                });
1603                fidl::decode!(
1604                    fidl_fuchsia_wlan_internal_common::TxPowerScenario,
1605                    D,
1606                    val_ref,
1607                    decoder,
1608                    inner_offset,
1609                    inner_depth
1610                )?;
1611                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1612                {
1613                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1614                }
1615                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1616                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1617                }
1618            }
1619
1620            next_offset += envelope_size;
1621
1622            // Decode the remaining unknown envelopes.
1623            while next_offset < end_offset {
1624                _next_ordinal_to_read += 1;
1625                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1626                next_offset += envelope_size;
1627            }
1628
1629            Ok(())
1630        }
1631    }
1632
1633    impl WlanPhyCreateIfaceResponse {
1634        #[inline(always)]
1635        fn max_ordinal_present(&self) -> u64 {
1636            if let Some(_) = self.iface_id {
1637                return 1;
1638            }
1639            0
1640        }
1641    }
1642
1643    impl fidl::encoding::ValueTypeMarker for WlanPhyCreateIfaceResponse {
1644        type Borrowed<'a> = &'a Self;
1645        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1646            value
1647        }
1648    }
1649
1650    unsafe impl fidl::encoding::TypeMarker for WlanPhyCreateIfaceResponse {
1651        type Owned = Self;
1652
1653        #[inline(always)]
1654        fn inline_align(_context: fidl::encoding::Context) -> usize {
1655            8
1656        }
1657
1658        #[inline(always)]
1659        fn inline_size(_context: fidl::encoding::Context) -> usize {
1660            16
1661        }
1662    }
1663
1664    unsafe impl<D: fidl::encoding::ResourceDialect>
1665        fidl::encoding::Encode<WlanPhyCreateIfaceResponse, D> for &WlanPhyCreateIfaceResponse
1666    {
1667        unsafe fn encode(
1668            self,
1669            encoder: &mut fidl::encoding::Encoder<'_, D>,
1670            offset: usize,
1671            mut depth: fidl::encoding::Depth,
1672        ) -> fidl::Result<()> {
1673            encoder.debug_check_bounds::<WlanPhyCreateIfaceResponse>(offset);
1674            // Vector header
1675            let max_ordinal: u64 = self.max_ordinal_present();
1676            encoder.write_num(max_ordinal, offset);
1677            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1678            // Calling encoder.out_of_line_offset(0) is not allowed.
1679            if max_ordinal == 0 {
1680                return Ok(());
1681            }
1682            depth.increment()?;
1683            let envelope_size = 8;
1684            let bytes_len = max_ordinal as usize * envelope_size;
1685            #[allow(unused_variables)]
1686            let offset = encoder.out_of_line_offset(bytes_len);
1687            let mut _prev_end_offset: usize = 0;
1688            if 1 > max_ordinal {
1689                return Ok(());
1690            }
1691
1692            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1693            // are envelope_size bytes.
1694            let cur_offset: usize = (1 - 1) * envelope_size;
1695
1696            // Zero reserved fields.
1697            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1698
1699            // Safety:
1700            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1701            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1702            //   envelope_size bytes, there is always sufficient room.
1703            fidl::encoding::encode_in_envelope_optional::<u16, D>(
1704                self.iface_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
1705                encoder,
1706                offset + cur_offset,
1707                depth,
1708            )?;
1709
1710            _prev_end_offset = cur_offset + envelope_size;
1711
1712            Ok(())
1713        }
1714    }
1715
1716    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1717        for WlanPhyCreateIfaceResponse
1718    {
1719        #[inline(always)]
1720        fn new_empty() -> Self {
1721            Self::default()
1722        }
1723
1724        unsafe fn decode(
1725            &mut self,
1726            decoder: &mut fidl::encoding::Decoder<'_, D>,
1727            offset: usize,
1728            mut depth: fidl::encoding::Depth,
1729        ) -> fidl::Result<()> {
1730            decoder.debug_check_bounds::<Self>(offset);
1731            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1732                None => return Err(fidl::Error::NotNullable),
1733                Some(len) => len,
1734            };
1735            // Calling decoder.out_of_line_offset(0) is not allowed.
1736            if len == 0 {
1737                return Ok(());
1738            };
1739            depth.increment()?;
1740            let envelope_size = 8;
1741            let bytes_len = len * envelope_size;
1742            let offset = decoder.out_of_line_offset(bytes_len)?;
1743            // Decode the envelope for each type.
1744            let mut _next_ordinal_to_read = 0;
1745            let mut next_offset = offset;
1746            let end_offset = offset + bytes_len;
1747            _next_ordinal_to_read += 1;
1748            if next_offset >= end_offset {
1749                return Ok(());
1750            }
1751
1752            // Decode unknown envelopes for gaps in ordinals.
1753            while _next_ordinal_to_read < 1 {
1754                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1755                _next_ordinal_to_read += 1;
1756                next_offset += envelope_size;
1757            }
1758
1759            let next_out_of_line = decoder.next_out_of_line();
1760            let handles_before = decoder.remaining_handles();
1761            if let Some((inlined, num_bytes, num_handles)) =
1762                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1763            {
1764                let member_inline_size =
1765                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1766                if inlined != (member_inline_size <= 4) {
1767                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1768                }
1769                let inner_offset;
1770                let mut inner_depth = depth.clone();
1771                if inlined {
1772                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1773                    inner_offset = next_offset;
1774                } else {
1775                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1776                    inner_depth.increment()?;
1777                }
1778                let val_ref = self.iface_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
1779                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
1780                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1781                {
1782                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1783                }
1784                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1785                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1786                }
1787            }
1788
1789            next_offset += envelope_size;
1790
1791            // Decode the remaining unknown envelopes.
1792            while next_offset < end_offset {
1793                _next_ordinal_to_read += 1;
1794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1795                next_offset += envelope_size;
1796            }
1797
1798            Ok(())
1799        }
1800    }
1801
1802    impl WlanPhyGetPowerSaveModeResponse {
1803        #[inline(always)]
1804        fn max_ordinal_present(&self) -> u64 {
1805            if let Some(_) = self.ps_mode {
1806                return 1;
1807            }
1808            0
1809        }
1810    }
1811
1812    impl fidl::encoding::ValueTypeMarker for WlanPhyGetPowerSaveModeResponse {
1813        type Borrowed<'a> = &'a Self;
1814        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1815            value
1816        }
1817    }
1818
1819    unsafe impl fidl::encoding::TypeMarker for WlanPhyGetPowerSaveModeResponse {
1820        type Owned = Self;
1821
1822        #[inline(always)]
1823        fn inline_align(_context: fidl::encoding::Context) -> usize {
1824            8
1825        }
1826
1827        #[inline(always)]
1828        fn inline_size(_context: fidl::encoding::Context) -> usize {
1829            16
1830        }
1831    }
1832
1833    unsafe impl<D: fidl::encoding::ResourceDialect>
1834        fidl::encoding::Encode<WlanPhyGetPowerSaveModeResponse, D>
1835        for &WlanPhyGetPowerSaveModeResponse
1836    {
1837        unsafe fn encode(
1838            self,
1839            encoder: &mut fidl::encoding::Encoder<'_, D>,
1840            offset: usize,
1841            mut depth: fidl::encoding::Depth,
1842        ) -> fidl::Result<()> {
1843            encoder.debug_check_bounds::<WlanPhyGetPowerSaveModeResponse>(offset);
1844            // Vector header
1845            let max_ordinal: u64 = self.max_ordinal_present();
1846            encoder.write_num(max_ordinal, offset);
1847            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1848            // Calling encoder.out_of_line_offset(0) is not allowed.
1849            if max_ordinal == 0 {
1850                return Ok(());
1851            }
1852            depth.increment()?;
1853            let envelope_size = 8;
1854            let bytes_len = max_ordinal as usize * envelope_size;
1855            #[allow(unused_variables)]
1856            let offset = encoder.out_of_line_offset(bytes_len);
1857            let mut _prev_end_offset: usize = 0;
1858            if 1 > max_ordinal {
1859                return Ok(());
1860            }
1861
1862            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1863            // are envelope_size bytes.
1864            let cur_offset: usize = (1 - 1) * envelope_size;
1865
1866            // Zero reserved fields.
1867            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1868
1869            // Safety:
1870            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1871            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1872            //   envelope_size bytes, there is always sufficient room.
1873            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_wlan_common_common::PowerSaveType, D>(
1874            self.ps_mode.as_ref().map(<fidl_fuchsia_wlan_common_common::PowerSaveType as fidl::encoding::ValueTypeMarker>::borrow),
1875            encoder, offset + cur_offset, depth
1876        )?;
1877
1878            _prev_end_offset = cur_offset + envelope_size;
1879
1880            Ok(())
1881        }
1882    }
1883
1884    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1885        for WlanPhyGetPowerSaveModeResponse
1886    {
1887        #[inline(always)]
1888        fn new_empty() -> Self {
1889            Self::default()
1890        }
1891
1892        unsafe fn decode(
1893            &mut self,
1894            decoder: &mut fidl::encoding::Decoder<'_, D>,
1895            offset: usize,
1896            mut depth: fidl::encoding::Depth,
1897        ) -> fidl::Result<()> {
1898            decoder.debug_check_bounds::<Self>(offset);
1899            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1900                None => return Err(fidl::Error::NotNullable),
1901                Some(len) => len,
1902            };
1903            // Calling decoder.out_of_line_offset(0) is not allowed.
1904            if len == 0 {
1905                return Ok(());
1906            };
1907            depth.increment()?;
1908            let envelope_size = 8;
1909            let bytes_len = len * envelope_size;
1910            let offset = decoder.out_of_line_offset(bytes_len)?;
1911            // Decode the envelope for each type.
1912            let mut _next_ordinal_to_read = 0;
1913            let mut next_offset = offset;
1914            let end_offset = offset + bytes_len;
1915            _next_ordinal_to_read += 1;
1916            if next_offset >= end_offset {
1917                return Ok(());
1918            }
1919
1920            // Decode unknown envelopes for gaps in ordinals.
1921            while _next_ordinal_to_read < 1 {
1922                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1923                _next_ordinal_to_read += 1;
1924                next_offset += envelope_size;
1925            }
1926
1927            let next_out_of_line = decoder.next_out_of_line();
1928            let handles_before = decoder.remaining_handles();
1929            if let Some((inlined, num_bytes, num_handles)) =
1930                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1931            {
1932                let member_inline_size = <fidl_fuchsia_wlan_common_common::PowerSaveType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1933                if inlined != (member_inline_size <= 4) {
1934                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1935                }
1936                let inner_offset;
1937                let mut inner_depth = depth.clone();
1938                if inlined {
1939                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1940                    inner_offset = next_offset;
1941                } else {
1942                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1943                    inner_depth.increment()?;
1944                }
1945                let val_ref = self.ps_mode.get_or_insert_with(|| {
1946                    fidl::new_empty!(fidl_fuchsia_wlan_common_common::PowerSaveType, D)
1947                });
1948                fidl::decode!(
1949                    fidl_fuchsia_wlan_common_common::PowerSaveType,
1950                    D,
1951                    val_ref,
1952                    decoder,
1953                    inner_offset,
1954                    inner_depth
1955                )?;
1956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1957                {
1958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1959                }
1960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1962                }
1963            }
1964
1965            next_offset += envelope_size;
1966
1967            // Decode the remaining unknown envelopes.
1968            while next_offset < end_offset {
1969                _next_ordinal_to_read += 1;
1970                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1971                next_offset += envelope_size;
1972            }
1973
1974            Ok(())
1975        }
1976    }
1977
1978    impl WlanPhyGetPowerStateResponse {
1979        #[inline(always)]
1980        fn max_ordinal_present(&self) -> u64 {
1981            if let Some(_) = self.power_on {
1982                return 1;
1983            }
1984            0
1985        }
1986    }
1987
1988    impl fidl::encoding::ValueTypeMarker for WlanPhyGetPowerStateResponse {
1989        type Borrowed<'a> = &'a Self;
1990        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1991            value
1992        }
1993    }
1994
1995    unsafe impl fidl::encoding::TypeMarker for WlanPhyGetPowerStateResponse {
1996        type Owned = Self;
1997
1998        #[inline(always)]
1999        fn inline_align(_context: fidl::encoding::Context) -> usize {
2000            8
2001        }
2002
2003        #[inline(always)]
2004        fn inline_size(_context: fidl::encoding::Context) -> usize {
2005            16
2006        }
2007    }
2008
2009    unsafe impl<D: fidl::encoding::ResourceDialect>
2010        fidl::encoding::Encode<WlanPhyGetPowerStateResponse, D> for &WlanPhyGetPowerStateResponse
2011    {
2012        unsafe fn encode(
2013            self,
2014            encoder: &mut fidl::encoding::Encoder<'_, D>,
2015            offset: usize,
2016            mut depth: fidl::encoding::Depth,
2017        ) -> fidl::Result<()> {
2018            encoder.debug_check_bounds::<WlanPhyGetPowerStateResponse>(offset);
2019            // Vector header
2020            let max_ordinal: u64 = self.max_ordinal_present();
2021            encoder.write_num(max_ordinal, offset);
2022            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2023            // Calling encoder.out_of_line_offset(0) is not allowed.
2024            if max_ordinal == 0 {
2025                return Ok(());
2026            }
2027            depth.increment()?;
2028            let envelope_size = 8;
2029            let bytes_len = max_ordinal as usize * envelope_size;
2030            #[allow(unused_variables)]
2031            let offset = encoder.out_of_line_offset(bytes_len);
2032            let mut _prev_end_offset: usize = 0;
2033            if 1 > max_ordinal {
2034                return Ok(());
2035            }
2036
2037            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2038            // are envelope_size bytes.
2039            let cur_offset: usize = (1 - 1) * envelope_size;
2040
2041            // Zero reserved fields.
2042            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2043
2044            // Safety:
2045            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2046            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2047            //   envelope_size bytes, there is always sufficient room.
2048            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2049                self.power_on.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2050                encoder,
2051                offset + cur_offset,
2052                depth,
2053            )?;
2054
2055            _prev_end_offset = cur_offset + envelope_size;
2056
2057            Ok(())
2058        }
2059    }
2060
2061    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2062        for WlanPhyGetPowerStateResponse
2063    {
2064        #[inline(always)]
2065        fn new_empty() -> Self {
2066            Self::default()
2067        }
2068
2069        unsafe fn decode(
2070            &mut self,
2071            decoder: &mut fidl::encoding::Decoder<'_, D>,
2072            offset: usize,
2073            mut depth: fidl::encoding::Depth,
2074        ) -> fidl::Result<()> {
2075            decoder.debug_check_bounds::<Self>(offset);
2076            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2077                None => return Err(fidl::Error::NotNullable),
2078                Some(len) => len,
2079            };
2080            // Calling decoder.out_of_line_offset(0) is not allowed.
2081            if len == 0 {
2082                return Ok(());
2083            };
2084            depth.increment()?;
2085            let envelope_size = 8;
2086            let bytes_len = len * envelope_size;
2087            let offset = decoder.out_of_line_offset(bytes_len)?;
2088            // Decode the envelope for each type.
2089            let mut _next_ordinal_to_read = 0;
2090            let mut next_offset = offset;
2091            let end_offset = offset + bytes_len;
2092            _next_ordinal_to_read += 1;
2093            if next_offset >= end_offset {
2094                return Ok(());
2095            }
2096
2097            // Decode unknown envelopes for gaps in ordinals.
2098            while _next_ordinal_to_read < 1 {
2099                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2100                _next_ordinal_to_read += 1;
2101                next_offset += envelope_size;
2102            }
2103
2104            let next_out_of_line = decoder.next_out_of_line();
2105            let handles_before = decoder.remaining_handles();
2106            if let Some((inlined, num_bytes, num_handles)) =
2107                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2108            {
2109                let member_inline_size =
2110                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2111                if inlined != (member_inline_size <= 4) {
2112                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2113                }
2114                let inner_offset;
2115                let mut inner_depth = depth.clone();
2116                if inlined {
2117                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2118                    inner_offset = next_offset;
2119                } else {
2120                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2121                    inner_depth.increment()?;
2122                }
2123                let val_ref = self.power_on.get_or_insert_with(|| fidl::new_empty!(bool, D));
2124                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2125                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2126                {
2127                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2128                }
2129                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2130                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2131                }
2132            }
2133
2134            next_offset += envelope_size;
2135
2136            // Decode the remaining unknown envelopes.
2137            while next_offset < end_offset {
2138                _next_ordinal_to_read += 1;
2139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2140                next_offset += envelope_size;
2141            }
2142
2143            Ok(())
2144        }
2145    }
2146
2147    impl WlanPhyGetSupportedMacRolesResponse {
2148        #[inline(always)]
2149        fn max_ordinal_present(&self) -> u64 {
2150            if let Some(_) = self.supported_mac_roles {
2151                return 1;
2152            }
2153            0
2154        }
2155    }
2156
2157    impl fidl::encoding::ValueTypeMarker for WlanPhyGetSupportedMacRolesResponse {
2158        type Borrowed<'a> = &'a Self;
2159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2160            value
2161        }
2162    }
2163
2164    unsafe impl fidl::encoding::TypeMarker for WlanPhyGetSupportedMacRolesResponse {
2165        type Owned = Self;
2166
2167        #[inline(always)]
2168        fn inline_align(_context: fidl::encoding::Context) -> usize {
2169            8
2170        }
2171
2172        #[inline(always)]
2173        fn inline_size(_context: fidl::encoding::Context) -> usize {
2174            16
2175        }
2176    }
2177
2178    unsafe impl<D: fidl::encoding::ResourceDialect>
2179        fidl::encoding::Encode<WlanPhyGetSupportedMacRolesResponse, D>
2180        for &WlanPhyGetSupportedMacRolesResponse
2181    {
2182        unsafe fn encode(
2183            self,
2184            encoder: &mut fidl::encoding::Encoder<'_, D>,
2185            offset: usize,
2186            mut depth: fidl::encoding::Depth,
2187        ) -> fidl::Result<()> {
2188            encoder.debug_check_bounds::<WlanPhyGetSupportedMacRolesResponse>(offset);
2189            // Vector header
2190            let max_ordinal: u64 = self.max_ordinal_present();
2191            encoder.write_num(max_ordinal, offset);
2192            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2193            // Calling encoder.out_of_line_offset(0) is not allowed.
2194            if max_ordinal == 0 {
2195                return Ok(());
2196            }
2197            depth.increment()?;
2198            let envelope_size = 8;
2199            let bytes_len = max_ordinal as usize * envelope_size;
2200            #[allow(unused_variables)]
2201            let offset = encoder.out_of_line_offset(bytes_len);
2202            let mut _prev_end_offset: usize = 0;
2203            if 1 > max_ordinal {
2204                return Ok(());
2205            }
2206
2207            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2208            // are envelope_size bytes.
2209            let cur_offset: usize = (1 - 1) * envelope_size;
2210
2211            // Zero reserved fields.
2212            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2213
2214            // Safety:
2215            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2216            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2217            //   envelope_size bytes, there is always sufficient room.
2218            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_wlan_common_common::WlanMacRole, 16>, D>(
2219            self.supported_mac_roles.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_wlan_common_common::WlanMacRole, 16> as fidl::encoding::ValueTypeMarker>::borrow),
2220            encoder, offset + cur_offset, depth
2221        )?;
2222
2223            _prev_end_offset = cur_offset + envelope_size;
2224
2225            Ok(())
2226        }
2227    }
2228
2229    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2230        for WlanPhyGetSupportedMacRolesResponse
2231    {
2232        #[inline(always)]
2233        fn new_empty() -> Self {
2234            Self::default()
2235        }
2236
2237        unsafe fn decode(
2238            &mut self,
2239            decoder: &mut fidl::encoding::Decoder<'_, D>,
2240            offset: usize,
2241            mut depth: fidl::encoding::Depth,
2242        ) -> fidl::Result<()> {
2243            decoder.debug_check_bounds::<Self>(offset);
2244            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2245                None => return Err(fidl::Error::NotNullable),
2246                Some(len) => len,
2247            };
2248            // Calling decoder.out_of_line_offset(0) is not allowed.
2249            if len == 0 {
2250                return Ok(());
2251            };
2252            depth.increment()?;
2253            let envelope_size = 8;
2254            let bytes_len = len * envelope_size;
2255            let offset = decoder.out_of_line_offset(bytes_len)?;
2256            // Decode the envelope for each type.
2257            let mut _next_ordinal_to_read = 0;
2258            let mut next_offset = offset;
2259            let end_offset = offset + bytes_len;
2260            _next_ordinal_to_read += 1;
2261            if next_offset >= end_offset {
2262                return Ok(());
2263            }
2264
2265            // Decode unknown envelopes for gaps in ordinals.
2266            while _next_ordinal_to_read < 1 {
2267                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2268                _next_ordinal_to_read += 1;
2269                next_offset += envelope_size;
2270            }
2271
2272            let next_out_of_line = decoder.next_out_of_line();
2273            let handles_before = decoder.remaining_handles();
2274            if let Some((inlined, num_bytes, num_handles)) =
2275                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2276            {
2277                let member_inline_size = <fidl::encoding::Vector<
2278                    fidl_fuchsia_wlan_common_common::WlanMacRole,
2279                    16,
2280                > as fidl::encoding::TypeMarker>::inline_size(
2281                    decoder.context
2282                );
2283                if inlined != (member_inline_size <= 4) {
2284                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2285                }
2286                let inner_offset;
2287                let mut inner_depth = depth.clone();
2288                if inlined {
2289                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2290                    inner_offset = next_offset;
2291                } else {
2292                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2293                    inner_depth.increment()?;
2294                }
2295                let val_ref =
2296                self.supported_mac_roles.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_wlan_common_common::WlanMacRole, 16>, D));
2297                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_wlan_common_common::WlanMacRole, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
2298                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2299                {
2300                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2301                }
2302                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2303                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2304                }
2305            }
2306
2307            next_offset += envelope_size;
2308
2309            // Decode the remaining unknown envelopes.
2310            while next_offset < end_offset {
2311                _next_ordinal_to_read += 1;
2312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2313                next_offset += envelope_size;
2314            }
2315
2316            Ok(())
2317        }
2318    }
2319}