Skip to main content

fidl_fuchsia_hardware_bluetooth__common/
fidl_fuchsia_hardware_bluetooth__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const ACL_PACKET_MAX: u64 = 65539;
12
13/// The maximum buffer length an encoded command might require.
14/// Update when adding new commands that might require a larger buffer.
15pub const BT_VENDOR_MAX_COMMAND_BUFFER_LEN: u16 = 16;
16
17pub const COMMAND_MAX: u64 = 258;
18
19pub const EVENT_MAX: u64 = 257;
20
21pub const ISO_PACKET_MAX: u64 = 16387;
22
23/// Advertising data MTUs for legacy (4.x) and extended (5.x) advertising PDU types
24/// (see Core Specification v5.4, Vol 4, Part E, Sections 7.3.11 & 7.8.54).
25pub const MAX_LEGACY_ADVERTISING_DATA_LENGTH: u8 = 31;
26
27/// The maximum size (in bytes) of a local name assigned using the HCI_Write_Local_Name command
28/// (see Core Specification v5.4, Vol 4, Part E, 7.3.11).
29pub const MAX_LOCAL_NAME_LENGTH: u8 = 248;
30
31pub const MAX_NAME_LENGTH: u32 = 32;
32
33/// Maximum service records that can be advertised at once.
34pub const MAX_PEER_SERVICES: u8 = 32;
35
36pub const SCO_PACKET_MAX: u64 = 258;
37
38#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
39pub enum ConnectionState {
40    Connected,
41    Disconnected,
42    #[doc(hidden)]
43    __SourceBreaking {
44        unknown_ordinal: u32,
45    },
46}
47
48/// Pattern that matches an unknown `ConnectionState` member.
49#[macro_export]
50macro_rules! ConnectionStateUnknown {
51    () => {
52        _
53    };
54}
55
56impl ConnectionState {
57    #[inline]
58    pub fn from_primitive(prim: u32) -> Option<Self> {
59        match prim {
60            1 => Some(Self::Connected),
61            2 => Some(Self::Disconnected),
62            _ => None,
63        }
64    }
65
66    #[inline]
67    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
68        match prim {
69            1 => Self::Connected,
70            2 => Self::Disconnected,
71            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
72        }
73    }
74
75    #[inline]
76    pub fn unknown() -> Self {
77        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
78    }
79
80    #[inline]
81    pub const fn into_primitive(self) -> u32 {
82        match self {
83            Self::Connected => 1,
84            Self::Disconnected => 2,
85            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
86        }
87    }
88
89    #[inline]
90    pub fn is_unknown(&self) -> bool {
91        match self {
92            Self::__SourceBreaking { unknown_ordinal: _ } => true,
93            _ => false,
94        }
95    }
96}
97
98/// Error codes that can be generated for emulator-wide configurations.
99#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
100pub enum EmulatorError {
101    Failed,
102    HciAlreadyPublished,
103    #[doc(hidden)]
104    __SourceBreaking {
105        unknown_ordinal: u32,
106    },
107}
108
109/// Pattern that matches an unknown `EmulatorError` member.
110#[macro_export]
111macro_rules! EmulatorErrorUnknown {
112    () => {
113        _
114    };
115}
116
117impl EmulatorError {
118    #[inline]
119    pub fn from_primitive(prim: u32) -> Option<Self> {
120        match prim {
121            1 => Some(Self::Failed),
122            2 => Some(Self::HciAlreadyPublished),
123            _ => None,
124        }
125    }
126
127    #[inline]
128    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
129        match prim {
130            1 => Self::Failed,
131            2 => Self::HciAlreadyPublished,
132            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
133        }
134    }
135
136    #[inline]
137    pub fn unknown() -> Self {
138        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
139    }
140
141    #[inline]
142    pub const fn into_primitive(self) -> u32 {
143        match self {
144            Self::Failed => 1,
145            Self::HciAlreadyPublished => 2,
146            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
147        }
148    }
149
150    #[inline]
151    pub fn is_unknown(&self) -> bool {
152        match self {
153            Self::__SourceBreaking { unknown_ordinal: _ } => true,
154            _ => false,
155        }
156    }
157}
158
159/// Error codes that are generated for functions that manipulate fake peers.
160#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
161pub enum EmulatorPeerError {
162    AddressRepeated,
163    ParametersInvalid,
164    NotFound,
165    #[doc(hidden)]
166    __SourceBreaking {
167        unknown_ordinal: u32,
168    },
169}
170
171/// Pattern that matches an unknown `EmulatorPeerError` member.
172#[macro_export]
173macro_rules! EmulatorPeerErrorUnknown {
174    () => {
175        _
176    };
177}
178
179impl EmulatorPeerError {
180    #[inline]
181    pub fn from_primitive(prim: u32) -> Option<Self> {
182        match prim {
183            1 => Some(Self::AddressRepeated),
184            2 => Some(Self::ParametersInvalid),
185            3 => Some(Self::NotFound),
186            _ => None,
187        }
188    }
189
190    #[inline]
191    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
192        match prim {
193            1 => Self::AddressRepeated,
194            2 => Self::ParametersInvalid,
195            3 => Self::NotFound,
196            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
197        }
198    }
199
200    #[inline]
201    pub fn unknown() -> Self {
202        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
203    }
204
205    #[inline]
206    pub const fn into_primitive(self) -> u32 {
207        match self {
208            Self::AddressRepeated => 1,
209            Self::ParametersInvalid => 2,
210            Self::NotFound => 3,
211            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
212        }
213    }
214
215    #[inline]
216    pub fn is_unknown(&self) -> bool {
217        match self {
218            Self::__SourceBreaking { unknown_ordinal: _ } => true,
219            _ => false,
220        }
221    }
222}
223
224/// Pre-set HCI configurations.
225#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
226pub enum HciConfig {
227    /// Support both BR/EDR and LE in LMP features.
228    DualMode,
229    /// Limits supported features and HCI commands to those that are required for LE only.
230    LeOnly,
231    #[doc(hidden)]
232    __SourceBreaking { unknown_ordinal: u32 },
233}
234
235/// Pattern that matches an unknown `HciConfig` member.
236#[macro_export]
237macro_rules! HciConfigUnknown {
238    () => {
239        _
240    };
241}
242
243impl HciConfig {
244    #[inline]
245    pub fn from_primitive(prim: u32) -> Option<Self> {
246        match prim {
247            1 => Some(Self::DualMode),
248            2 => Some(Self::LeOnly),
249            _ => None,
250        }
251    }
252
253    #[inline]
254    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
255        match prim {
256            1 => Self::DualMode,
257            2 => Self::LeOnly,
258            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
259        }
260    }
261
262    #[inline]
263    pub fn unknown() -> Self {
264        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
265    }
266
267    #[inline]
268    pub const fn into_primitive(self) -> u32 {
269        match self {
270            Self::DualMode => 1,
271            Self::LeOnly => 2,
272            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
273        }
274    }
275
276    #[inline]
277    pub fn is_unknown(&self) -> bool {
278        match self {
279            Self::__SourceBreaking { unknown_ordinal: _ } => true,
280            _ => false,
281        }
282    }
283}
284
285/// Defines the list of HCI protocol error codes that a Bluetooth controller can report. These
286/// values are taken from Bluetooth Core Specification v5.4, Vol 2, Part D, Section 1.3
287#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
288pub enum HciError {
289    Success,
290    UnknownCommand,
291    UnknownConnectionId,
292    HardwareFailure,
293    PageTimeout,
294    AuthenticationFailure,
295    PinOrKeyMissing,
296    MemoryCapacityExceeded,
297    ConnectionTimeout,
298    ConnectionLimitExceeded,
299    SynchronousConnectionLimitExceeded,
300    ConnectionAlreadyExists,
301    CommandDisallowed,
302    ConnectionRejectedLimitedResources,
303    ConnectionRejectedSecurity,
304    ConnectionRejectedBadBdAddr,
305    ConnectionAcceptTimeoutExceeded,
306    UnsupportedFeatureOrParameter,
307    InvalidHcicommandParameters,
308    RemoteUserTerminatedConnection,
309    RemoteDeviceTerminatedConnectionLowResources,
310    RemoteDeviceTerminatedConnectionPowerOff,
311    ConnectionTerminatedByLocalHost,
312    RepeatedAttempts,
313    PairingNotAllowed,
314    UnknownLmpPdu,
315    UnsupportedRemoteFeature,
316    ScoOffsetRejected,
317    ScoIntervalRejected,
318    ScoAirModeRejected,
319    InvalidLmpOrLlParameters,
320    UnspecifiedError,
321    UnsupportedLmpOrLlParameterValue,
322    RoleChangeNotAllowed,
323    LmpOrLlResponseTimeout,
324    LmpErrorTransactionCollision,
325    LmpPduNotAllowed,
326    EncryptionModeNotAcceptable,
327    LinkKeyCannotBeChanged,
328    RequestedQosNotSupported,
329    InstantPassed,
330    PairingWithUnitKeyNotSupported,
331    DifferentTransactionCollision,
332    Reserved0,
333    QosUnacceptableParameter,
334    QosRejected,
335    ChannelClassificationNotSupported,
336    InsufficientSecurity,
337    ParameterOutOfMandatoryRange,
338    Reserved1,
339    RoleSwitchPending,
340    Reserved2,
341    ReservedSlotViolation,
342    RoleSwitchFailed,
343    ExtendedInquiryResponseTooLarge,
344    SecureSimplePairingNotSupportedByHost,
345    HostBusyPairing,
346    ConnectionRejectedNoSuitableChannelFound,
347    ControllerBusy,
348    UnacceptableConnectionParameters,
349    DirectedAdvertisingTimeout,
350    ConnectionTerminatedMicFailure,
351    ConnectionFailedToBeEstablished,
352    MacConnectionFailed,
353    CoarseClockAdjustmentRejected,
354    Type0SubmapNotDefined,
355    UnknownAdvertisingIdentifier,
356    LimitReached,
357    OperationCancelledByHost,
358    PacketTooLong,
359    TooLate,
360    TooEarly,
361    #[doc(hidden)]
362    __SourceBreaking {
363        unknown_ordinal: u8,
364    },
365}
366
367/// Pattern that matches an unknown `HciError` member.
368#[macro_export]
369macro_rules! HciErrorUnknown {
370    () => {
371        _
372    };
373}
374
375impl HciError {
376    #[inline]
377    pub fn from_primitive(prim: u8) -> Option<Self> {
378        match prim {
379            0 => Some(Self::Success),
380            1 => Some(Self::UnknownCommand),
381            2 => Some(Self::UnknownConnectionId),
382            3 => Some(Self::HardwareFailure),
383            4 => Some(Self::PageTimeout),
384            5 => Some(Self::AuthenticationFailure),
385            6 => Some(Self::PinOrKeyMissing),
386            7 => Some(Self::MemoryCapacityExceeded),
387            8 => Some(Self::ConnectionTimeout),
388            9 => Some(Self::ConnectionLimitExceeded),
389            10 => Some(Self::SynchronousConnectionLimitExceeded),
390            11 => Some(Self::ConnectionAlreadyExists),
391            12 => Some(Self::CommandDisallowed),
392            13 => Some(Self::ConnectionRejectedLimitedResources),
393            14 => Some(Self::ConnectionRejectedSecurity),
394            15 => Some(Self::ConnectionRejectedBadBdAddr),
395            16 => Some(Self::ConnectionAcceptTimeoutExceeded),
396            17 => Some(Self::UnsupportedFeatureOrParameter),
397            18 => Some(Self::InvalidHcicommandParameters),
398            19 => Some(Self::RemoteUserTerminatedConnection),
399            20 => Some(Self::RemoteDeviceTerminatedConnectionLowResources),
400            21 => Some(Self::RemoteDeviceTerminatedConnectionPowerOff),
401            22 => Some(Self::ConnectionTerminatedByLocalHost),
402            23 => Some(Self::RepeatedAttempts),
403            24 => Some(Self::PairingNotAllowed),
404            25 => Some(Self::UnknownLmpPdu),
405            26 => Some(Self::UnsupportedRemoteFeature),
406            27 => Some(Self::ScoOffsetRejected),
407            28 => Some(Self::ScoIntervalRejected),
408            29 => Some(Self::ScoAirModeRejected),
409            30 => Some(Self::InvalidLmpOrLlParameters),
410            31 => Some(Self::UnspecifiedError),
411            32 => Some(Self::UnsupportedLmpOrLlParameterValue),
412            33 => Some(Self::RoleChangeNotAllowed),
413            34 => Some(Self::LmpOrLlResponseTimeout),
414            35 => Some(Self::LmpErrorTransactionCollision),
415            36 => Some(Self::LmpPduNotAllowed),
416            37 => Some(Self::EncryptionModeNotAcceptable),
417            38 => Some(Self::LinkKeyCannotBeChanged),
418            39 => Some(Self::RequestedQosNotSupported),
419            40 => Some(Self::InstantPassed),
420            41 => Some(Self::PairingWithUnitKeyNotSupported),
421            42 => Some(Self::DifferentTransactionCollision),
422            43 => Some(Self::Reserved0),
423            44 => Some(Self::QosUnacceptableParameter),
424            45 => Some(Self::QosRejected),
425            46 => Some(Self::ChannelClassificationNotSupported),
426            47 => Some(Self::InsufficientSecurity),
427            48 => Some(Self::ParameterOutOfMandatoryRange),
428            49 => Some(Self::Reserved1),
429            50 => Some(Self::RoleSwitchPending),
430            51 => Some(Self::Reserved2),
431            52 => Some(Self::ReservedSlotViolation),
432            53 => Some(Self::RoleSwitchFailed),
433            54 => Some(Self::ExtendedInquiryResponseTooLarge),
434            55 => Some(Self::SecureSimplePairingNotSupportedByHost),
435            56 => Some(Self::HostBusyPairing),
436            57 => Some(Self::ConnectionRejectedNoSuitableChannelFound),
437            58 => Some(Self::ControllerBusy),
438            59 => Some(Self::UnacceptableConnectionParameters),
439            60 => Some(Self::DirectedAdvertisingTimeout),
440            61 => Some(Self::ConnectionTerminatedMicFailure),
441            62 => Some(Self::ConnectionFailedToBeEstablished),
442            63 => Some(Self::MacConnectionFailed),
443            64 => Some(Self::CoarseClockAdjustmentRejected),
444            65 => Some(Self::Type0SubmapNotDefined),
445            66 => Some(Self::UnknownAdvertisingIdentifier),
446            67 => Some(Self::LimitReached),
447            68 => Some(Self::OperationCancelledByHost),
448            69 => Some(Self::PacketTooLong),
449            70 => Some(Self::TooLate),
450            71 => Some(Self::TooEarly),
451            _ => None,
452        }
453    }
454
455    #[inline]
456    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
457        match prim {
458            0 => Self::Success,
459            1 => Self::UnknownCommand,
460            2 => Self::UnknownConnectionId,
461            3 => Self::HardwareFailure,
462            4 => Self::PageTimeout,
463            5 => Self::AuthenticationFailure,
464            6 => Self::PinOrKeyMissing,
465            7 => Self::MemoryCapacityExceeded,
466            8 => Self::ConnectionTimeout,
467            9 => Self::ConnectionLimitExceeded,
468            10 => Self::SynchronousConnectionLimitExceeded,
469            11 => Self::ConnectionAlreadyExists,
470            12 => Self::CommandDisallowed,
471            13 => Self::ConnectionRejectedLimitedResources,
472            14 => Self::ConnectionRejectedSecurity,
473            15 => Self::ConnectionRejectedBadBdAddr,
474            16 => Self::ConnectionAcceptTimeoutExceeded,
475            17 => Self::UnsupportedFeatureOrParameter,
476            18 => Self::InvalidHcicommandParameters,
477            19 => Self::RemoteUserTerminatedConnection,
478            20 => Self::RemoteDeviceTerminatedConnectionLowResources,
479            21 => Self::RemoteDeviceTerminatedConnectionPowerOff,
480            22 => Self::ConnectionTerminatedByLocalHost,
481            23 => Self::RepeatedAttempts,
482            24 => Self::PairingNotAllowed,
483            25 => Self::UnknownLmpPdu,
484            26 => Self::UnsupportedRemoteFeature,
485            27 => Self::ScoOffsetRejected,
486            28 => Self::ScoIntervalRejected,
487            29 => Self::ScoAirModeRejected,
488            30 => Self::InvalidLmpOrLlParameters,
489            31 => Self::UnspecifiedError,
490            32 => Self::UnsupportedLmpOrLlParameterValue,
491            33 => Self::RoleChangeNotAllowed,
492            34 => Self::LmpOrLlResponseTimeout,
493            35 => Self::LmpErrorTransactionCollision,
494            36 => Self::LmpPduNotAllowed,
495            37 => Self::EncryptionModeNotAcceptable,
496            38 => Self::LinkKeyCannotBeChanged,
497            39 => Self::RequestedQosNotSupported,
498            40 => Self::InstantPassed,
499            41 => Self::PairingWithUnitKeyNotSupported,
500            42 => Self::DifferentTransactionCollision,
501            43 => Self::Reserved0,
502            44 => Self::QosUnacceptableParameter,
503            45 => Self::QosRejected,
504            46 => Self::ChannelClassificationNotSupported,
505            47 => Self::InsufficientSecurity,
506            48 => Self::ParameterOutOfMandatoryRange,
507            49 => Self::Reserved1,
508            50 => Self::RoleSwitchPending,
509            51 => Self::Reserved2,
510            52 => Self::ReservedSlotViolation,
511            53 => Self::RoleSwitchFailed,
512            54 => Self::ExtendedInquiryResponseTooLarge,
513            55 => Self::SecureSimplePairingNotSupportedByHost,
514            56 => Self::HostBusyPairing,
515            57 => Self::ConnectionRejectedNoSuitableChannelFound,
516            58 => Self::ControllerBusy,
517            59 => Self::UnacceptableConnectionParameters,
518            60 => Self::DirectedAdvertisingTimeout,
519            61 => Self::ConnectionTerminatedMicFailure,
520            62 => Self::ConnectionFailedToBeEstablished,
521            63 => Self::MacConnectionFailed,
522            64 => Self::CoarseClockAdjustmentRejected,
523            65 => Self::Type0SubmapNotDefined,
524            66 => Self::UnknownAdvertisingIdentifier,
525            67 => Self::LimitReached,
526            68 => Self::OperationCancelledByHost,
527            69 => Self::PacketTooLong,
528            70 => Self::TooLate,
529            71 => Self::TooEarly,
530            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
531        }
532    }
533
534    #[inline]
535    pub fn unknown() -> Self {
536        Self::__SourceBreaking { unknown_ordinal: 0xff }
537    }
538
539    #[inline]
540    pub const fn into_primitive(self) -> u8 {
541        match self {
542            Self::Success => 0,
543            Self::UnknownCommand => 1,
544            Self::UnknownConnectionId => 2,
545            Self::HardwareFailure => 3,
546            Self::PageTimeout => 4,
547            Self::AuthenticationFailure => 5,
548            Self::PinOrKeyMissing => 6,
549            Self::MemoryCapacityExceeded => 7,
550            Self::ConnectionTimeout => 8,
551            Self::ConnectionLimitExceeded => 9,
552            Self::SynchronousConnectionLimitExceeded => 10,
553            Self::ConnectionAlreadyExists => 11,
554            Self::CommandDisallowed => 12,
555            Self::ConnectionRejectedLimitedResources => 13,
556            Self::ConnectionRejectedSecurity => 14,
557            Self::ConnectionRejectedBadBdAddr => 15,
558            Self::ConnectionAcceptTimeoutExceeded => 16,
559            Self::UnsupportedFeatureOrParameter => 17,
560            Self::InvalidHcicommandParameters => 18,
561            Self::RemoteUserTerminatedConnection => 19,
562            Self::RemoteDeviceTerminatedConnectionLowResources => 20,
563            Self::RemoteDeviceTerminatedConnectionPowerOff => 21,
564            Self::ConnectionTerminatedByLocalHost => 22,
565            Self::RepeatedAttempts => 23,
566            Self::PairingNotAllowed => 24,
567            Self::UnknownLmpPdu => 25,
568            Self::UnsupportedRemoteFeature => 26,
569            Self::ScoOffsetRejected => 27,
570            Self::ScoIntervalRejected => 28,
571            Self::ScoAirModeRejected => 29,
572            Self::InvalidLmpOrLlParameters => 30,
573            Self::UnspecifiedError => 31,
574            Self::UnsupportedLmpOrLlParameterValue => 32,
575            Self::RoleChangeNotAllowed => 33,
576            Self::LmpOrLlResponseTimeout => 34,
577            Self::LmpErrorTransactionCollision => 35,
578            Self::LmpPduNotAllowed => 36,
579            Self::EncryptionModeNotAcceptable => 37,
580            Self::LinkKeyCannotBeChanged => 38,
581            Self::RequestedQosNotSupported => 39,
582            Self::InstantPassed => 40,
583            Self::PairingWithUnitKeyNotSupported => 41,
584            Self::DifferentTransactionCollision => 42,
585            Self::Reserved0 => 43,
586            Self::QosUnacceptableParameter => 44,
587            Self::QosRejected => 45,
588            Self::ChannelClassificationNotSupported => 46,
589            Self::InsufficientSecurity => 47,
590            Self::ParameterOutOfMandatoryRange => 48,
591            Self::Reserved1 => 49,
592            Self::RoleSwitchPending => 50,
593            Self::Reserved2 => 51,
594            Self::ReservedSlotViolation => 52,
595            Self::RoleSwitchFailed => 53,
596            Self::ExtendedInquiryResponseTooLarge => 54,
597            Self::SecureSimplePairingNotSupportedByHost => 55,
598            Self::HostBusyPairing => 56,
599            Self::ConnectionRejectedNoSuitableChannelFound => 57,
600            Self::ControllerBusy => 58,
601            Self::UnacceptableConnectionParameters => 59,
602            Self::DirectedAdvertisingTimeout => 60,
603            Self::ConnectionTerminatedMicFailure => 61,
604            Self::ConnectionFailedToBeEstablished => 62,
605            Self::MacConnectionFailed => 63,
606            Self::CoarseClockAdjustmentRejected => 64,
607            Self::Type0SubmapNotDefined => 65,
608            Self::UnknownAdvertisingIdentifier => 66,
609            Self::LimitReached => 67,
610            Self::OperationCancelledByHost => 68,
611            Self::PacketTooLong => 69,
612            Self::TooLate => 70,
613            Self::TooEarly => 71,
614            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
615        }
616    }
617
618    #[inline]
619    pub fn is_unknown(&self) -> bool {
620        match self {
621            Self::__SourceBreaking { unknown_ordinal: _ } => true,
622            _ => false,
623        }
624    }
625}
626
627/// LE legacy advertising types from Bluetooth Core Specification v5.4, Vol 4, Part E, 7.8.5.
628#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
629#[repr(u8)]
630pub enum LegacyAdvertisingType {
631    /// Connectable and scannable.
632    AdvInd = 0,
633    /// Connectable, high-duty cycle, directed.
634    AdvDirectInd = 1,
635    /// Scannable, undirected.
636    AdvScanInd = 2,
637    /// Non-connectable, undirected
638    AdvNonconnInd = 3,
639    /// Scan response
640    ScanRsp = 4,
641}
642
643impl LegacyAdvertisingType {
644    #[inline]
645    pub fn from_primitive(prim: u8) -> Option<Self> {
646        match prim {
647            0 => Some(Self::AdvInd),
648            1 => Some(Self::AdvDirectInd),
649            2 => Some(Self::AdvScanInd),
650            3 => Some(Self::AdvNonconnInd),
651            4 => Some(Self::ScanRsp),
652            _ => None,
653        }
654    }
655
656    #[inline]
657    pub const fn into_primitive(self) -> u8 {
658        self as u8
659    }
660}
661
662#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
663#[repr(u32)]
664pub enum PacketDirection {
665    HostToController = 1,
666    ControllerToHost = 2,
667}
668
669impl PacketDirection {
670    #[inline]
671    pub fn from_primitive(prim: u32) -> Option<Self> {
672        match prim {
673            1 => Some(Self::HostToController),
674            2 => Some(Self::ControllerToHost),
675            _ => None,
676        }
677    }
678
679    #[inline]
680    pub const fn into_primitive(self) -> u32 {
681        self as u32
682    }
683}
684
685#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
686pub enum ScoCodingFormat {
687    Cvsd,
688    Msbc,
689    #[doc(hidden)]
690    __SourceBreaking {
691        unknown_ordinal: u8,
692    },
693}
694
695/// Pattern that matches an unknown `ScoCodingFormat` member.
696#[macro_export]
697macro_rules! ScoCodingFormatUnknown {
698    () => {
699        _
700    };
701}
702
703impl ScoCodingFormat {
704    #[inline]
705    pub fn from_primitive(prim: u8) -> Option<Self> {
706        match prim {
707            1 => Some(Self::Cvsd),
708            2 => Some(Self::Msbc),
709            _ => None,
710        }
711    }
712
713    #[inline]
714    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
715        match prim {
716            1 => Self::Cvsd,
717            2 => Self::Msbc,
718            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
719        }
720    }
721
722    #[inline]
723    pub fn unknown() -> Self {
724        Self::__SourceBreaking { unknown_ordinal: 0xff }
725    }
726
727    #[inline]
728    pub const fn into_primitive(self) -> u8 {
729        match self {
730            Self::Cvsd => 1,
731            Self::Msbc => 2,
732            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
733        }
734    }
735
736    #[inline]
737    pub fn is_unknown(&self) -> bool {
738        match self {
739            Self::__SourceBreaking { unknown_ordinal: _ } => true,
740            _ => false,
741        }
742    }
743}
744
745#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
746pub enum ScoEncoding {
747    Bits8,
748    Bits16,
749    #[doc(hidden)]
750    __SourceBreaking {
751        unknown_ordinal: u8,
752    },
753}
754
755/// Pattern that matches an unknown `ScoEncoding` member.
756#[macro_export]
757macro_rules! ScoEncodingUnknown {
758    () => {
759        _
760    };
761}
762
763impl ScoEncoding {
764    #[inline]
765    pub fn from_primitive(prim: u8) -> Option<Self> {
766        match prim {
767            1 => Some(Self::Bits8),
768            2 => Some(Self::Bits16),
769            _ => None,
770        }
771    }
772
773    #[inline]
774    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
775        match prim {
776            1 => Self::Bits8,
777            2 => Self::Bits16,
778            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
779        }
780    }
781
782    #[inline]
783    pub fn unknown() -> Self {
784        Self::__SourceBreaking { unknown_ordinal: 0xff }
785    }
786
787    #[inline]
788    pub const fn into_primitive(self) -> u8 {
789        match self {
790            Self::Bits8 => 1,
791            Self::Bits16 => 2,
792            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
793        }
794    }
795
796    #[inline]
797    pub fn is_unknown(&self) -> bool {
798        match self {
799            Self::__SourceBreaking { unknown_ordinal: _ } => true,
800            _ => false,
801        }
802    }
803}
804
805#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
806pub enum ScoSampleRate {
807    Khz8,
808    Khz16,
809    #[doc(hidden)]
810    __SourceBreaking {
811        unknown_ordinal: u8,
812    },
813}
814
815/// Pattern that matches an unknown `ScoSampleRate` member.
816#[macro_export]
817macro_rules! ScoSampleRateUnknown {
818    () => {
819        _
820    };
821}
822
823impl ScoSampleRate {
824    #[inline]
825    pub fn from_primitive(prim: u8) -> Option<Self> {
826        match prim {
827            1 => Some(Self::Khz8),
828            2 => Some(Self::Khz16),
829            _ => None,
830        }
831    }
832
833    #[inline]
834    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
835        match prim {
836            1 => Self::Khz8,
837            2 => Self::Khz16,
838            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
839        }
840    }
841
842    #[inline]
843    pub fn unknown() -> Self {
844        Self::__SourceBreaking { unknown_ordinal: 0xff }
845    }
846
847    #[inline]
848    pub const fn into_primitive(self) -> u8 {
849        match self {
850            Self::Khz8 => 1,
851            Self::Khz16 => 2,
852            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
853        }
854    }
855
856    #[inline]
857    pub fn is_unknown(&self) -> bool {
858        match self {
859            Self::__SourceBreaking { unknown_ordinal: _ } => true,
860            _ => false,
861        }
862    }
863}
864
865#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
866pub enum VendorAclDirection {
867    Source,
868    Sink,
869    #[doc(hidden)]
870    __SourceBreaking {
871        unknown_ordinal: u8,
872    },
873}
874
875/// Pattern that matches an unknown `VendorAclDirection` member.
876#[macro_export]
877macro_rules! VendorAclDirectionUnknown {
878    () => {
879        _
880    };
881}
882
883impl VendorAclDirection {
884    #[inline]
885    pub fn from_primitive(prim: u8) -> Option<Self> {
886        match prim {
887            1 => Some(Self::Source),
888            2 => Some(Self::Sink),
889            _ => None,
890        }
891    }
892
893    #[inline]
894    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
895        match prim {
896            1 => Self::Source,
897            2 => Self::Sink,
898            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
899        }
900    }
901
902    #[inline]
903    pub fn unknown() -> Self {
904        Self::__SourceBreaking { unknown_ordinal: 0xff }
905    }
906
907    #[inline]
908    pub const fn into_primitive(self) -> u8 {
909        match self {
910            Self::Source => 1,
911            Self::Sink => 2,
912            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
913        }
914    }
915
916    #[inline]
917    pub fn is_unknown(&self) -> bool {
918        match self {
919            Self::__SourceBreaking { unknown_ordinal: _ } => true,
920            _ => false,
921        }
922    }
923}
924
925#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
926pub enum VendorAclPriority {
927    Normal,
928    High,
929    #[doc(hidden)]
930    __SourceBreaking {
931        unknown_ordinal: u8,
932    },
933}
934
935/// Pattern that matches an unknown `VendorAclPriority` member.
936#[macro_export]
937macro_rules! VendorAclPriorityUnknown {
938    () => {
939        _
940    };
941}
942
943impl VendorAclPriority {
944    #[inline]
945    pub fn from_primitive(prim: u8) -> Option<Self> {
946        match prim {
947            1 => Some(Self::Normal),
948            2 => Some(Self::High),
949            _ => None,
950        }
951    }
952
953    #[inline]
954    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
955        match prim {
956            1 => Self::Normal,
957            2 => Self::High,
958            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
959        }
960    }
961
962    #[inline]
963    pub fn unknown() -> Self {
964        Self::__SourceBreaking { unknown_ordinal: 0xff }
965    }
966
967    #[inline]
968    pub const fn into_primitive(self) -> u8 {
969        match self {
970            Self::Normal => 1,
971            Self::High => 2,
972            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
973        }
974    }
975
976    #[inline]
977    pub fn is_unknown(&self) -> bool {
978        match self {
979            Self::__SourceBreaking { unknown_ordinal: _ } => true,
980            _ => false,
981        }
982    }
983}
984
985#[derive(Clone, Debug, PartialEq)]
986pub struct EmulatorWatchLeScanStatesResponse {
987    pub states: Vec<LeScanState>,
988}
989
990impl fidl::Persistable for EmulatorWatchLeScanStatesResponse {}
991
992#[derive(Clone, Debug, PartialEq)]
993pub struct EmulatorWatchLegacyAdvertisingStatesResponse {
994    pub states: Vec<LegacyAdvertisingState>,
995}
996
997impl fidl::Persistable for EmulatorWatchLegacyAdvertisingStatesResponse {}
998
999#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1000pub struct HciConfigureScoRequest {
1001    pub coding_format: ScoCodingFormat,
1002    pub encoding: ScoEncoding,
1003    pub sample_rate: ScoSampleRate,
1004}
1005
1006impl fidl::Persistable for HciConfigureScoRequest {}
1007
1008#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1009pub struct PeerAssignConnectionStatusRequest {
1010    pub status: HciError,
1011}
1012
1013impl fidl::Persistable for PeerAssignConnectionStatusRequest {}
1014
1015#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1016pub struct PeerEmulateLeConnectionCompleteRequest {
1017    pub role: fidl_fuchsia_bluetooth__common::ConnectionRole,
1018}
1019
1020impl fidl::Persistable for PeerEmulateLeConnectionCompleteRequest {}
1021
1022#[derive(Clone, Debug, PartialEq)]
1023pub struct PeerSetServiceDefinitionsRequest {
1024    pub service_definitions: Vec<fidl_fuchsia_bluetooth_bredr__common::ServiceDefinition>,
1025}
1026
1027impl fidl::Persistable for PeerSetServiceDefinitionsRequest {}
1028
1029#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1030pub struct PeerWatchConnectionStatesResponse {
1031    pub states: Vec<ConnectionState>,
1032}
1033
1034impl fidl::Persistable for PeerWatchConnectionStatesResponse {}
1035
1036#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1037pub struct ScoPacket {
1038    pub packet: Vec<u8>,
1039}
1040
1041impl fidl::Persistable for ScoPacket {}
1042
1043#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1044#[repr(C)]
1045pub struct SnoopAcknowledgePacketsRequest {
1046    pub sequence: u64,
1047}
1048
1049impl fidl::Persistable for SnoopAcknowledgePacketsRequest {}
1050
1051#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1052pub struct VendorEncodeCommandResponse {
1053    pub encoded: Vec<u8>,
1054}
1055
1056impl fidl::Persistable for VendorEncodeCommandResponse {}
1057
1058#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1059pub struct VirtualControllerCreateEmulatorResponse {
1060    pub name: Option<String>,
1061}
1062
1063impl fidl::Persistable for VirtualControllerCreateEmulatorResponse {}
1064
1065/// The HCI ACL data flow-control parameters.
1066#[derive(Clone, Debug, Default, PartialEq)]
1067pub struct AclBufferSettings {
1068    /// ACL frame MTU in bytes.
1069    pub data_packet_length: Option<u16>,
1070    /// The maximum number of ACL frames that the controller can buffer.
1071    pub total_num_data_packets: Option<u8>,
1072    #[doc(hidden)]
1073    pub __source_breaking: fidl::marker::SourceBreaking,
1074}
1075
1076impl fidl::Persistable for AclBufferSettings {}
1077
1078#[derive(Clone, Debug, Default, PartialEq)]
1079pub struct AdvertisingData {
1080    pub data: Option<Vec<u8>>,
1081    #[doc(hidden)]
1082    pub __source_breaking: fidl::marker::SourceBreaking,
1083}
1084
1085impl fidl::Persistable for AdvertisingData {}
1086
1087/// Indicates support for Android Vendor Extensions
1088/// If empty, Android HCI Extensions are supported but the version is unspecified.
1089/// The version should be detected using the LE Get Vendor Capabilities Command.
1090#[derive(Clone, Debug, Default, PartialEq)]
1091pub struct AndroidVendorSupport {
1092    pub major_version: Option<u8>,
1093    pub minor_version: Option<u8>,
1094    #[doc(hidden)]
1095    pub __source_breaking: fidl::marker::SourceBreaking,
1096}
1097
1098impl fidl::Persistable for AndroidVendorSupport {}
1099
1100/// Various settings for audio offload data paths, which vary by controller
1101/// manufacturer and firmware version.
1102#[derive(Clone, Debug, Default, PartialEq)]
1103pub struct AudioOffloadSettings {
1104    /// The index to use when SCO OFFLOAD DataPath is requested.
1105    pub sco_offload_index: Option<u8>,
1106    #[doc(hidden)]
1107    pub __source_breaking: fidl::marker::SourceBreaking,
1108}
1109
1110impl fidl::Persistable for AudioOffloadSettings {}
1111
1112/// Contains Bluetooth controller & baseband parameters that are writable by the host but don't
1113/// fall under a particular procedural category (as are those defined below).
1114#[derive(Clone, Debug, Default, PartialEq)]
1115pub struct ControllerParameters {
1116    /// The local name used for the Link Layer name discovery procedure. This parameter only applies
1117    /// for the BR/EDR transport. In LE, the local name is provided as an advertising parameter and
1118    /// via GATT.
1119    pub local_name: Option<String>,
1120    /// The local "Class of Device" used during the BR/EDR inquiry procedure.
1121    pub device_class: Option<fidl_fuchsia_bluetooth__common::DeviceClass>,
1122    #[doc(hidden)]
1123    pub __source_breaking: fidl::marker::SourceBreaking,
1124}
1125
1126impl fidl::Persistable for ControllerParameters {}
1127
1128/// Controller settings used by the emulator.
1129#[derive(Clone, Debug, Default, PartialEq)]
1130pub struct EmulatorSettings {
1131    /// The `BD_ADDR` (BR/EDR) or LE Public Device Address. Defaults to "00:00:00:00:00:00".
1132    pub address: Option<fidl_fuchsia_bluetooth__common::Address>,
1133    /// Supported HCI command configuration. Defaults to "`DUAL_MODE`".
1134    pub hci_config: Option<HciConfig>,
1135    /// True if the 5.0 extended advertising features are supported. Defaults to "false".
1136    pub extended_advertising: Option<bool>,
1137    /// The ACL-U data buffer settings. Defaults to
1138    ///    data_packet_length: 1024
1139    ///    total_num_data_packets: 5
1140    /// IF `hci_config` is set to `DUAL_MODE`. Defaults to null otherwise.
1141    pub acl_buffer_settings: Option<AclBufferSettings>,
1142    /// The LE-U ACL data buffer settings. Defaults to
1143    ///    data_packet_length: 251
1144    ///    total_num_data_packets: 5
1145    pub le_acl_buffer_settings: Option<AclBufferSettings>,
1146    #[doc(hidden)]
1147    pub __source_breaking: fidl::marker::SourceBreaking,
1148}
1149
1150impl fidl::Persistable for EmulatorSettings {}
1151
1152/// Represents the LE scan state. The fields are present if scan parameters have been configured.
1153#[derive(Clone, Debug, Default, PartialEq)]
1154pub struct LeScanState {
1155    /// True if a scan is enabled.
1156    pub enabled: Option<bool>,
1157    /// True if an active scan is enabled. Otherwise the scan is passive.
1158    pub active: Option<bool>,
1159    /// The scan interval and window parameters. These are defined in Bluetooth controller
1160    /// "timeslices" where 1 slice = 0.625 ms. Valid values range from 0x4 (2.5 ms) to 0x4000 (10.24
1161    /// ms).
1162    pub interval: Option<u16>,
1163    pub window: Option<u16>,
1164    /// True if duplicate filtering has been enabled.
1165    pub filter_duplicates: Option<bool>,
1166    /// The type of local device address used.
1167    pub address_type: Option<fidl_fuchsia_bluetooth__common::AddressType>,
1168    #[doc(hidden)]
1169    pub __source_breaking: fidl::marker::SourceBreaking,
1170}
1171
1172impl fidl::Persistable for LeScanState {}
1173
1174/// Controller parameters for legacy advertising.
1175#[derive(Clone, Debug, Default, PartialEq)]
1176pub struct LegacyAdvertisingState {
1177    /// True if advertising has been enabled using the HCI_LE_Set_Advertising_Enable command.
1178    /// This field is always present.
1179    pub enabled: Option<bool>,
1180    /// The most recently configured advertising type. This field is always present. Defaults to
1181    /// [`fuchsia.hardware.bluetooth/LegacyAdvertisingType.ADV_IND`].
1182    pub type_: Option<LegacyAdvertisingType>,
1183    /// The LE address type being used for advertising. This field is always present. Defaults to
1184    /// [`fuchsia.bluetooth/AddressType.PUBLIC`].
1185    pub address_type: Option<fidl_fuchsia_bluetooth__common::AddressType>,
1186    /// The host-specified advertising interval range parameters. Present only if configured.
1187    pub interval_min: Option<u16>,
1188    pub interval_max: Option<u16>,
1189    /// Any configured advertising and scan response data. Present only if either field is non-zero.
1190    pub advertising_data: Option<AdvertisingData>,
1191    pub scan_response: Option<AdvertisingData>,
1192    #[doc(hidden)]
1193    pub __source_breaking: fidl::marker::SourceBreaking,
1194}
1195
1196impl fidl::Persistable for LegacyAdvertisingState {}
1197
1198#[derive(Clone, Debug, Default, PartialEq)]
1199pub struct PeerSetLeAdvertisementRequest {
1200    /// The LE address of the peer.
1201    pub le_address: Option<fidl_fuchsia_bluetooth__common::Address>,
1202    /// The advertising data contents. If not present, the advertising data sent by this peer
1203    /// will be empty.
1204    pub advertisement: Option<AdvertisingData>,
1205    /// The scan response data contents. When present, the fake controller will generate
1206    /// scannable advertising packets and scan response events.
1207    pub scan_response: Option<AdvertisingData>,
1208    #[doc(hidden)]
1209    pub __source_breaking: fidl::marker::SourceBreaking,
1210}
1211
1212impl fidl::Persistable for PeerSetLeAdvertisementRequest {}
1213
1214#[derive(Clone, Debug, Default, PartialEq)]
1215pub struct SnoopOnDroppedPacketsRequest {
1216    pub sent: Option<u32>,
1217    pub received: Option<u32>,
1218    #[doc(hidden)]
1219    pub __source_breaking: fidl::marker::SourceBreaking,
1220}
1221
1222impl fidl::Persistable for SnoopOnDroppedPacketsRequest {}
1223
1224#[derive(Clone, Debug, Default, PartialEq)]
1225pub struct SnoopOnObservePacketRequest {
1226    /// Monotonically increasing packet count. Used for flow control in conjunction with
1227    /// `OnAcknowledgePackets`.
1228    pub sequence: Option<u64>,
1229    pub direction: Option<PacketDirection>,
1230    pub packet: Option<SnoopPacket>,
1231    #[doc(hidden)]
1232    pub __source_breaking: fidl::marker::SourceBreaking,
1233}
1234
1235impl fidl::Persistable for SnoopOnObservePacketRequest {}
1236
1237/// Parameters for filing controller crash reports.
1238#[derive(Clone, Debug, Default, PartialEq)]
1239pub struct VendorCrashParameters {
1240    /// The value of the subevent code field in crash dump vendor events.
1241    /// Required.
1242    pub vendor_subevent_code: Option<u8>,
1243    /// The program name to use in the crash report.
1244    /// Required.
1245    pub program_name: Option<String>,
1246    /// The signature to use in the crash report.
1247    /// Must match [a-z][a-z-]* i.e. only lowercase letters and hyphens.
1248    /// Required.
1249    pub crash_signature: Option<String>,
1250    #[doc(hidden)]
1251    pub __source_breaking: fidl::marker::SourceBreaking,
1252}
1253
1254impl fidl::Persistable for VendorCrashParameters {}
1255
1256/// Table of features supported by the vendor.
1257#[derive(Clone, Debug, Default, PartialEq)]
1258pub struct VendorFeatures {
1259    /// Supports the SetAclPriority command
1260    /// If missing, the command is not supported.
1261    pub acl_priority_command: Option<bool>,
1262    /// Supports Android Vendor Extensions
1263    /// If missing, Android Vendor Extensions are not supported.
1264    pub android_vendor_extensions: Option<AndroidVendorSupport>,
1265    /// Specify some alternative settings for audio offload paths.
1266    /// If missing, use the reasonable defaults or configured settings.
1267    pub audio_offload_settings: Option<AudioOffloadSettings>,
1268    #[doc(hidden)]
1269    pub __source_breaking: fidl::marker::SourceBreaking,
1270}
1271
1272impl fidl::Persistable for VendorFeatures {}
1273
1274#[derive(Clone, Debug, Default, PartialEq)]
1275pub struct VendorSetAclPriorityParams {
1276    /// The ACL connection handle which is requested to be prioritized.
1277    pub connection_handle: Option<u16>,
1278    pub priority: Option<VendorAclPriority>,
1279    /// The direction data should be prioritized in. May not be supported by all
1280    /// vendors. Ignored when priority is normal.
1281    pub direction: Option<VendorAclDirection>,
1282    #[doc(hidden)]
1283    pub __source_breaking: fidl::marker::SourceBreaking,
1284}
1285
1286impl fidl::Persistable for VendorSetAclPriorityParams {}
1287
1288/// Packet received by the host from the controller.
1289#[derive(Clone, Debug)]
1290pub enum ReceivedPacket {
1291    Event(Vec<u8>),
1292    Acl(Vec<u8>),
1293    Iso(Vec<u8>),
1294    #[doc(hidden)]
1295    __SourceBreaking {
1296        unknown_ordinal: u64,
1297    },
1298}
1299
1300/// Pattern that matches an unknown `ReceivedPacket` member.
1301#[macro_export]
1302macro_rules! ReceivedPacketUnknown {
1303    () => {
1304        _
1305    };
1306}
1307
1308// Custom PartialEq so that unknown variants are not equal to themselves.
1309impl PartialEq for ReceivedPacket {
1310    fn eq(&self, other: &Self) -> bool {
1311        match (self, other) {
1312            (Self::Event(x), Self::Event(y)) => *x == *y,
1313            (Self::Acl(x), Self::Acl(y)) => *x == *y,
1314            (Self::Iso(x), Self::Iso(y)) => *x == *y,
1315            _ => false,
1316        }
1317    }
1318}
1319
1320impl ReceivedPacket {
1321    #[inline]
1322    pub fn ordinal(&self) -> u64 {
1323        match *self {
1324            Self::Event(_) => 1,
1325            Self::Acl(_) => 2,
1326            Self::Iso(_) => 3,
1327            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1328        }
1329    }
1330
1331    #[inline]
1332    pub fn unknown_variant_for_testing() -> Self {
1333        Self::__SourceBreaking { unknown_ordinal: 0 }
1334    }
1335
1336    #[inline]
1337    pub fn is_unknown(&self) -> bool {
1338        match self {
1339            Self::__SourceBreaking { .. } => true,
1340            _ => false,
1341        }
1342    }
1343}
1344
1345impl fidl::Persistable for ReceivedPacket {}
1346
1347/// Packet sent by the host to the controller.
1348#[derive(Clone, Debug)]
1349pub enum SentPacket {
1350    Command(Vec<u8>),
1351    Acl(Vec<u8>),
1352    Iso(Vec<u8>),
1353    #[doc(hidden)]
1354    __SourceBreaking {
1355        unknown_ordinal: u64,
1356    },
1357}
1358
1359/// Pattern that matches an unknown `SentPacket` member.
1360#[macro_export]
1361macro_rules! SentPacketUnknown {
1362    () => {
1363        _
1364    };
1365}
1366
1367// Custom PartialEq so that unknown variants are not equal to themselves.
1368impl PartialEq for SentPacket {
1369    fn eq(&self, other: &Self) -> bool {
1370        match (self, other) {
1371            (Self::Command(x), Self::Command(y)) => *x == *y,
1372            (Self::Acl(x), Self::Acl(y)) => *x == *y,
1373            (Self::Iso(x), Self::Iso(y)) => *x == *y,
1374            _ => false,
1375        }
1376    }
1377}
1378
1379impl SentPacket {
1380    #[inline]
1381    pub fn ordinal(&self) -> u64 {
1382        match *self {
1383            Self::Command(_) => 1,
1384            Self::Acl(_) => 2,
1385            Self::Iso(_) => 3,
1386            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1387        }
1388    }
1389
1390    #[inline]
1391    pub fn unknown_variant_for_testing() -> Self {
1392        Self::__SourceBreaking { unknown_ordinal: 0 }
1393    }
1394
1395    #[inline]
1396    pub fn is_unknown(&self) -> bool {
1397        match self {
1398            Self::__SourceBreaking { .. } => true,
1399            _ => false,
1400        }
1401    }
1402}
1403
1404impl fidl::Persistable for SentPacket {}
1405
1406#[derive(Clone, Debug)]
1407pub enum SnoopPacket {
1408    Event(Vec<u8>),
1409    Command(Vec<u8>),
1410    Acl(Vec<u8>),
1411    Sco(Vec<u8>),
1412    Iso(Vec<u8>),
1413    #[doc(hidden)]
1414    __SourceBreaking {
1415        unknown_ordinal: u64,
1416    },
1417}
1418
1419/// Pattern that matches an unknown `SnoopPacket` member.
1420#[macro_export]
1421macro_rules! SnoopPacketUnknown {
1422    () => {
1423        _
1424    };
1425}
1426
1427// Custom PartialEq so that unknown variants are not equal to themselves.
1428impl PartialEq for SnoopPacket {
1429    fn eq(&self, other: &Self) -> bool {
1430        match (self, other) {
1431            (Self::Event(x), Self::Event(y)) => *x == *y,
1432            (Self::Command(x), Self::Command(y)) => *x == *y,
1433            (Self::Acl(x), Self::Acl(y)) => *x == *y,
1434            (Self::Sco(x), Self::Sco(y)) => *x == *y,
1435            (Self::Iso(x), Self::Iso(y)) => *x == *y,
1436            _ => false,
1437        }
1438    }
1439}
1440
1441impl SnoopPacket {
1442    #[inline]
1443    pub fn ordinal(&self) -> u64 {
1444        match *self {
1445            Self::Event(_) => 1,
1446            Self::Command(_) => 2,
1447            Self::Acl(_) => 3,
1448            Self::Sco(_) => 4,
1449            Self::Iso(_) => 5,
1450            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1451        }
1452    }
1453
1454    #[inline]
1455    pub fn unknown_variant_for_testing() -> Self {
1456        Self::__SourceBreaking { unknown_ordinal: 0 }
1457    }
1458
1459    #[inline]
1460    pub fn is_unknown(&self) -> bool {
1461        match self {
1462            Self::__SourceBreaking { .. } => true,
1463            _ => false,
1464        }
1465    }
1466}
1467
1468impl fidl::Persistable for SnoopPacket {}
1469
1470#[derive(Clone, Debug)]
1471pub enum VendorCommand {
1472    SetAclPriority(VendorSetAclPriorityParams),
1473    #[doc(hidden)]
1474    __SourceBreaking {
1475        unknown_ordinal: u64,
1476    },
1477}
1478
1479/// Pattern that matches an unknown `VendorCommand` member.
1480#[macro_export]
1481macro_rules! VendorCommandUnknown {
1482    () => {
1483        _
1484    };
1485}
1486
1487// Custom PartialEq so that unknown variants are not equal to themselves.
1488impl PartialEq for VendorCommand {
1489    fn eq(&self, other: &Self) -> bool {
1490        match (self, other) {
1491            (Self::SetAclPriority(x), Self::SetAclPriority(y)) => *x == *y,
1492            _ => false,
1493        }
1494    }
1495}
1496
1497impl VendorCommand {
1498    #[inline]
1499    pub fn ordinal(&self) -> u64 {
1500        match *self {
1501            Self::SetAclPriority(_) => 1,
1502            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1503        }
1504    }
1505
1506    #[inline]
1507    pub fn unknown_variant_for_testing() -> Self {
1508        Self::__SourceBreaking { unknown_ordinal: 0 }
1509    }
1510
1511    #[inline]
1512    pub fn is_unknown(&self) -> bool {
1513        match self {
1514            Self::__SourceBreaking { .. } => true,
1515            _ => false,
1516        }
1517    }
1518}
1519
1520impl fidl::Persistable for VendorCommand {}
1521
1522pub mod emulator_ordinals {
1523    pub const PUBLISH: u64 = 0x5b8aeb2ece853c39;
1524    pub const ADD_LOW_ENERGY_PEER: u64 = 0x4e1fb7adbebc6946;
1525    pub const ADD_BREDR_PEER: u64 = 0x6d15989a0373e07;
1526    pub const WATCH_CONTROLLER_PARAMETERS: u64 = 0x6ed7a918b5800270;
1527    pub const WATCH_LE_SCAN_STATES: u64 = 0x10e6c845831f3b4a;
1528    pub const WATCH_LEGACY_ADVERTISING_STATES: u64 = 0x7067acbe275d0219;
1529}
1530
1531pub mod hci_ordinals {
1532    pub const OPEN_COMMAND_CHANNEL: u64 = 0x2510b52ea3a51ce0;
1533    pub const OPEN_ACL_DATA_CHANNEL: u64 = 0x210c3dd69156385a;
1534    pub const OPEN_SCO_DATA_CHANNEL: u64 = 0x5bcb0bf2cbf35bdf;
1535    pub const CONFIGURE_SCO: u64 = 0x499ec7edfd65fad7;
1536    pub const RESET_SCO: u64 = 0x6ee56dcb2ce23fcb;
1537    pub const OPEN_ISO_DATA_CHANNEL: u64 = 0x9adfa1d466cefd4;
1538    pub const OPEN_SNOOP_CHANNEL: u64 = 0xd31c6d5cbc4e136;
1539}
1540
1541pub mod hci_transport_ordinals {
1542    pub const SEND_: u64 = 0x4793b5e66fd79e0b;
1543    pub const ON_RECEIVE: u64 = 0xcb102e573e5049c;
1544    pub const ACK_RECEIVE: u64 = 0x25de8c1f760f0c89;
1545    pub const CONFIGURE_SCO: u64 = 0x4298072d0498b612;
1546}
1547
1548pub mod peer_ordinals {
1549    pub const ASSIGN_CONNECTION_STATUS: u64 = 0x52810c5ba7a2555c;
1550    pub const EMULATE_LE_CONNECTION_COMPLETE: u64 = 0x3dfba319b8d2fc2a;
1551    pub const EMULATE_DISCONNECTION_COMPLETE: u64 = 0x4d3955084d85a15c;
1552    pub const WATCH_CONNECTION_STATES: u64 = 0x5a5190211980c70f;
1553    pub const SET_DEVICE_CLASS: u64 = 0x3e52fa234758e1ea;
1554    pub const SET_SERVICE_DEFINITIONS: u64 = 0x58ce9f22fce272df;
1555    pub const SET_LE_ADVERTISEMENT: u64 = 0x481b9aea1b39cfb4;
1556}
1557
1558pub mod sco_connection_ordinals {
1559    pub const SEND_: u64 = 0x6e0c000ccd50adec;
1560    pub const ON_RECEIVE: u64 = 0x4d4e96f6f7d1aa12;
1561    pub const ACK_RECEIVE: u64 = 0x7e6af45151224a6a;
1562    pub const STOP: u64 = 0x5df8b0ab265b449d;
1563}
1564
1565pub mod snoop_ordinals {
1566    pub const ON_OBSERVE_PACKET: u64 = 0x34d9f4c9c6bc10ca;
1567    pub const ACKNOWLEDGE_PACKETS: u64 = 0x3336b5082c111286;
1568    pub const ON_DROPPED_PACKETS: u64 = 0x102a8d21278578b9;
1569}
1570
1571pub mod vendor_ordinals {
1572    pub const GET_FEATURES: u64 = 0x102e70164c1dc911;
1573    pub const ENCODE_COMMAND: u64 = 0x75430542c197cbe8;
1574    pub const OPEN_HCI: u64 = 0x7f05862f7ef92ec8;
1575    pub const OPEN_HCI_TRANSPORT: u64 = 0x1f785b656fb00834;
1576    pub const OPEN_SNOOP: u64 = 0xafeca0e3c789043;
1577    pub const GET_CRASH_PARAMETERS: u64 = 0xb16601642b3a567;
1578}
1579
1580pub mod virtual_controller_ordinals {
1581    pub const CREATE_EMULATOR: u64 = 0x130273fc0a35cedb;
1582    pub const CREATE_LOOPBACK_DEVICE: u64 = 0x7525af8edecb6c0c;
1583}
1584
1585mod internal {
1586    use super::*;
1587    unsafe impl fidl::encoding::TypeMarker for ConnectionState {
1588        type Owned = Self;
1589
1590        #[inline(always)]
1591        fn inline_align(_context: fidl::encoding::Context) -> usize {
1592            std::mem::align_of::<u32>()
1593        }
1594
1595        #[inline(always)]
1596        fn inline_size(_context: fidl::encoding::Context) -> usize {
1597            std::mem::size_of::<u32>()
1598        }
1599
1600        #[inline(always)]
1601        fn encode_is_copy() -> bool {
1602            false
1603        }
1604
1605        #[inline(always)]
1606        fn decode_is_copy() -> bool {
1607            false
1608        }
1609    }
1610
1611    impl fidl::encoding::ValueTypeMarker for ConnectionState {
1612        type Borrowed<'a> = Self;
1613        #[inline(always)]
1614        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1615            *value
1616        }
1617    }
1618
1619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1620        for ConnectionState
1621    {
1622        #[inline]
1623        unsafe fn encode(
1624            self,
1625            encoder: &mut fidl::encoding::Encoder<'_, D>,
1626            offset: usize,
1627            _depth: fidl::encoding::Depth,
1628        ) -> fidl::Result<()> {
1629            encoder.debug_check_bounds::<Self>(offset);
1630            encoder.write_num(self.into_primitive(), offset);
1631            Ok(())
1632        }
1633    }
1634
1635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectionState {
1636        #[inline(always)]
1637        fn new_empty() -> Self {
1638            Self::unknown()
1639        }
1640
1641        #[inline]
1642        unsafe fn decode(
1643            &mut self,
1644            decoder: &mut fidl::encoding::Decoder<'_, D>,
1645            offset: usize,
1646            _depth: fidl::encoding::Depth,
1647        ) -> fidl::Result<()> {
1648            decoder.debug_check_bounds::<Self>(offset);
1649            let prim = decoder.read_num::<u32>(offset);
1650
1651            *self = Self::from_primitive_allow_unknown(prim);
1652            Ok(())
1653        }
1654    }
1655    unsafe impl fidl::encoding::TypeMarker for EmulatorError {
1656        type Owned = Self;
1657
1658        #[inline(always)]
1659        fn inline_align(_context: fidl::encoding::Context) -> usize {
1660            std::mem::align_of::<u32>()
1661        }
1662
1663        #[inline(always)]
1664        fn inline_size(_context: fidl::encoding::Context) -> usize {
1665            std::mem::size_of::<u32>()
1666        }
1667
1668        #[inline(always)]
1669        fn encode_is_copy() -> bool {
1670            false
1671        }
1672
1673        #[inline(always)]
1674        fn decode_is_copy() -> bool {
1675            false
1676        }
1677    }
1678
1679    impl fidl::encoding::ValueTypeMarker for EmulatorError {
1680        type Borrowed<'a> = Self;
1681        #[inline(always)]
1682        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1683            *value
1684        }
1685    }
1686
1687    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EmulatorError {
1688        #[inline]
1689        unsafe fn encode(
1690            self,
1691            encoder: &mut fidl::encoding::Encoder<'_, D>,
1692            offset: usize,
1693            _depth: fidl::encoding::Depth,
1694        ) -> fidl::Result<()> {
1695            encoder.debug_check_bounds::<Self>(offset);
1696            encoder.write_num(self.into_primitive(), offset);
1697            Ok(())
1698        }
1699    }
1700
1701    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EmulatorError {
1702        #[inline(always)]
1703        fn new_empty() -> Self {
1704            Self::unknown()
1705        }
1706
1707        #[inline]
1708        unsafe fn decode(
1709            &mut self,
1710            decoder: &mut fidl::encoding::Decoder<'_, D>,
1711            offset: usize,
1712            _depth: fidl::encoding::Depth,
1713        ) -> fidl::Result<()> {
1714            decoder.debug_check_bounds::<Self>(offset);
1715            let prim = decoder.read_num::<u32>(offset);
1716
1717            *self = Self::from_primitive_allow_unknown(prim);
1718            Ok(())
1719        }
1720    }
1721    unsafe impl fidl::encoding::TypeMarker for EmulatorPeerError {
1722        type Owned = Self;
1723
1724        #[inline(always)]
1725        fn inline_align(_context: fidl::encoding::Context) -> usize {
1726            std::mem::align_of::<u32>()
1727        }
1728
1729        #[inline(always)]
1730        fn inline_size(_context: fidl::encoding::Context) -> usize {
1731            std::mem::size_of::<u32>()
1732        }
1733
1734        #[inline(always)]
1735        fn encode_is_copy() -> bool {
1736            false
1737        }
1738
1739        #[inline(always)]
1740        fn decode_is_copy() -> bool {
1741            false
1742        }
1743    }
1744
1745    impl fidl::encoding::ValueTypeMarker for EmulatorPeerError {
1746        type Borrowed<'a> = Self;
1747        #[inline(always)]
1748        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1749            *value
1750        }
1751    }
1752
1753    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1754        for EmulatorPeerError
1755    {
1756        #[inline]
1757        unsafe fn encode(
1758            self,
1759            encoder: &mut fidl::encoding::Encoder<'_, D>,
1760            offset: usize,
1761            _depth: fidl::encoding::Depth,
1762        ) -> fidl::Result<()> {
1763            encoder.debug_check_bounds::<Self>(offset);
1764            encoder.write_num(self.into_primitive(), offset);
1765            Ok(())
1766        }
1767    }
1768
1769    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EmulatorPeerError {
1770        #[inline(always)]
1771        fn new_empty() -> Self {
1772            Self::unknown()
1773        }
1774
1775        #[inline]
1776        unsafe fn decode(
1777            &mut self,
1778            decoder: &mut fidl::encoding::Decoder<'_, D>,
1779            offset: usize,
1780            _depth: fidl::encoding::Depth,
1781        ) -> fidl::Result<()> {
1782            decoder.debug_check_bounds::<Self>(offset);
1783            let prim = decoder.read_num::<u32>(offset);
1784
1785            *self = Self::from_primitive_allow_unknown(prim);
1786            Ok(())
1787        }
1788    }
1789    unsafe impl fidl::encoding::TypeMarker for HciConfig {
1790        type Owned = Self;
1791
1792        #[inline(always)]
1793        fn inline_align(_context: fidl::encoding::Context) -> usize {
1794            std::mem::align_of::<u32>()
1795        }
1796
1797        #[inline(always)]
1798        fn inline_size(_context: fidl::encoding::Context) -> usize {
1799            std::mem::size_of::<u32>()
1800        }
1801
1802        #[inline(always)]
1803        fn encode_is_copy() -> bool {
1804            false
1805        }
1806
1807        #[inline(always)]
1808        fn decode_is_copy() -> bool {
1809            false
1810        }
1811    }
1812
1813    impl fidl::encoding::ValueTypeMarker for HciConfig {
1814        type Borrowed<'a> = Self;
1815        #[inline(always)]
1816        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1817            *value
1818        }
1819    }
1820
1821    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HciConfig {
1822        #[inline]
1823        unsafe fn encode(
1824            self,
1825            encoder: &mut fidl::encoding::Encoder<'_, D>,
1826            offset: usize,
1827            _depth: fidl::encoding::Depth,
1828        ) -> fidl::Result<()> {
1829            encoder.debug_check_bounds::<Self>(offset);
1830            encoder.write_num(self.into_primitive(), offset);
1831            Ok(())
1832        }
1833    }
1834
1835    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HciConfig {
1836        #[inline(always)]
1837        fn new_empty() -> Self {
1838            Self::unknown()
1839        }
1840
1841        #[inline]
1842        unsafe fn decode(
1843            &mut self,
1844            decoder: &mut fidl::encoding::Decoder<'_, D>,
1845            offset: usize,
1846            _depth: fidl::encoding::Depth,
1847        ) -> fidl::Result<()> {
1848            decoder.debug_check_bounds::<Self>(offset);
1849            let prim = decoder.read_num::<u32>(offset);
1850
1851            *self = Self::from_primitive_allow_unknown(prim);
1852            Ok(())
1853        }
1854    }
1855    unsafe impl fidl::encoding::TypeMarker for HciError {
1856        type Owned = Self;
1857
1858        #[inline(always)]
1859        fn inline_align(_context: fidl::encoding::Context) -> usize {
1860            std::mem::align_of::<u8>()
1861        }
1862
1863        #[inline(always)]
1864        fn inline_size(_context: fidl::encoding::Context) -> usize {
1865            std::mem::size_of::<u8>()
1866        }
1867
1868        #[inline(always)]
1869        fn encode_is_copy() -> bool {
1870            false
1871        }
1872
1873        #[inline(always)]
1874        fn decode_is_copy() -> bool {
1875            false
1876        }
1877    }
1878
1879    impl fidl::encoding::ValueTypeMarker for HciError {
1880        type Borrowed<'a> = Self;
1881        #[inline(always)]
1882        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1883            *value
1884        }
1885    }
1886
1887    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HciError {
1888        #[inline]
1889        unsafe fn encode(
1890            self,
1891            encoder: &mut fidl::encoding::Encoder<'_, D>,
1892            offset: usize,
1893            _depth: fidl::encoding::Depth,
1894        ) -> fidl::Result<()> {
1895            encoder.debug_check_bounds::<Self>(offset);
1896            encoder.write_num(self.into_primitive(), offset);
1897            Ok(())
1898        }
1899    }
1900
1901    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HciError {
1902        #[inline(always)]
1903        fn new_empty() -> Self {
1904            Self::unknown()
1905        }
1906
1907        #[inline]
1908        unsafe fn decode(
1909            &mut self,
1910            decoder: &mut fidl::encoding::Decoder<'_, D>,
1911            offset: usize,
1912            _depth: fidl::encoding::Depth,
1913        ) -> fidl::Result<()> {
1914            decoder.debug_check_bounds::<Self>(offset);
1915            let prim = decoder.read_num::<u8>(offset);
1916
1917            *self = Self::from_primitive_allow_unknown(prim);
1918            Ok(())
1919        }
1920    }
1921    unsafe impl fidl::encoding::TypeMarker for LegacyAdvertisingType {
1922        type Owned = Self;
1923
1924        #[inline(always)]
1925        fn inline_align(_context: fidl::encoding::Context) -> usize {
1926            std::mem::align_of::<u8>()
1927        }
1928
1929        #[inline(always)]
1930        fn inline_size(_context: fidl::encoding::Context) -> usize {
1931            std::mem::size_of::<u8>()
1932        }
1933
1934        #[inline(always)]
1935        fn encode_is_copy() -> bool {
1936            true
1937        }
1938
1939        #[inline(always)]
1940        fn decode_is_copy() -> bool {
1941            false
1942        }
1943    }
1944
1945    impl fidl::encoding::ValueTypeMarker for LegacyAdvertisingType {
1946        type Borrowed<'a> = Self;
1947        #[inline(always)]
1948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1949            *value
1950        }
1951    }
1952
1953    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1954        for LegacyAdvertisingType
1955    {
1956        #[inline]
1957        unsafe fn encode(
1958            self,
1959            encoder: &mut fidl::encoding::Encoder<'_, D>,
1960            offset: usize,
1961            _depth: fidl::encoding::Depth,
1962        ) -> fidl::Result<()> {
1963            encoder.debug_check_bounds::<Self>(offset);
1964            encoder.write_num(self.into_primitive(), offset);
1965            Ok(())
1966        }
1967    }
1968
1969    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LegacyAdvertisingType {
1970        #[inline(always)]
1971        fn new_empty() -> Self {
1972            Self::AdvInd
1973        }
1974
1975        #[inline]
1976        unsafe fn decode(
1977            &mut self,
1978            decoder: &mut fidl::encoding::Decoder<'_, D>,
1979            offset: usize,
1980            _depth: fidl::encoding::Depth,
1981        ) -> fidl::Result<()> {
1982            decoder.debug_check_bounds::<Self>(offset);
1983            let prim = decoder.read_num::<u8>(offset);
1984
1985            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1986            Ok(())
1987        }
1988    }
1989    unsafe impl fidl::encoding::TypeMarker for PacketDirection {
1990        type Owned = Self;
1991
1992        #[inline(always)]
1993        fn inline_align(_context: fidl::encoding::Context) -> usize {
1994            std::mem::align_of::<u32>()
1995        }
1996
1997        #[inline(always)]
1998        fn inline_size(_context: fidl::encoding::Context) -> usize {
1999            std::mem::size_of::<u32>()
2000        }
2001
2002        #[inline(always)]
2003        fn encode_is_copy() -> bool {
2004            true
2005        }
2006
2007        #[inline(always)]
2008        fn decode_is_copy() -> bool {
2009            false
2010        }
2011    }
2012
2013    impl fidl::encoding::ValueTypeMarker for PacketDirection {
2014        type Borrowed<'a> = Self;
2015        #[inline(always)]
2016        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2017            *value
2018        }
2019    }
2020
2021    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2022        for PacketDirection
2023    {
2024        #[inline]
2025        unsafe fn encode(
2026            self,
2027            encoder: &mut fidl::encoding::Encoder<'_, D>,
2028            offset: usize,
2029            _depth: fidl::encoding::Depth,
2030        ) -> fidl::Result<()> {
2031            encoder.debug_check_bounds::<Self>(offset);
2032            encoder.write_num(self.into_primitive(), offset);
2033            Ok(())
2034        }
2035    }
2036
2037    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PacketDirection {
2038        #[inline(always)]
2039        fn new_empty() -> Self {
2040            Self::HostToController
2041        }
2042
2043        #[inline]
2044        unsafe fn decode(
2045            &mut self,
2046            decoder: &mut fidl::encoding::Decoder<'_, D>,
2047            offset: usize,
2048            _depth: fidl::encoding::Depth,
2049        ) -> fidl::Result<()> {
2050            decoder.debug_check_bounds::<Self>(offset);
2051            let prim = decoder.read_num::<u32>(offset);
2052
2053            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2054            Ok(())
2055        }
2056    }
2057    unsafe impl fidl::encoding::TypeMarker for ScoCodingFormat {
2058        type Owned = Self;
2059
2060        #[inline(always)]
2061        fn inline_align(_context: fidl::encoding::Context) -> usize {
2062            std::mem::align_of::<u8>()
2063        }
2064
2065        #[inline(always)]
2066        fn inline_size(_context: fidl::encoding::Context) -> usize {
2067            std::mem::size_of::<u8>()
2068        }
2069
2070        #[inline(always)]
2071        fn encode_is_copy() -> bool {
2072            false
2073        }
2074
2075        #[inline(always)]
2076        fn decode_is_copy() -> bool {
2077            false
2078        }
2079    }
2080
2081    impl fidl::encoding::ValueTypeMarker for ScoCodingFormat {
2082        type Borrowed<'a> = Self;
2083        #[inline(always)]
2084        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2085            *value
2086        }
2087    }
2088
2089    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2090        for ScoCodingFormat
2091    {
2092        #[inline]
2093        unsafe fn encode(
2094            self,
2095            encoder: &mut fidl::encoding::Encoder<'_, D>,
2096            offset: usize,
2097            _depth: fidl::encoding::Depth,
2098        ) -> fidl::Result<()> {
2099            encoder.debug_check_bounds::<Self>(offset);
2100            encoder.write_num(self.into_primitive(), offset);
2101            Ok(())
2102        }
2103    }
2104
2105    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScoCodingFormat {
2106        #[inline(always)]
2107        fn new_empty() -> Self {
2108            Self::unknown()
2109        }
2110
2111        #[inline]
2112        unsafe fn decode(
2113            &mut self,
2114            decoder: &mut fidl::encoding::Decoder<'_, D>,
2115            offset: usize,
2116            _depth: fidl::encoding::Depth,
2117        ) -> fidl::Result<()> {
2118            decoder.debug_check_bounds::<Self>(offset);
2119            let prim = decoder.read_num::<u8>(offset);
2120
2121            *self = Self::from_primitive_allow_unknown(prim);
2122            Ok(())
2123        }
2124    }
2125    unsafe impl fidl::encoding::TypeMarker for ScoEncoding {
2126        type Owned = Self;
2127
2128        #[inline(always)]
2129        fn inline_align(_context: fidl::encoding::Context) -> usize {
2130            std::mem::align_of::<u8>()
2131        }
2132
2133        #[inline(always)]
2134        fn inline_size(_context: fidl::encoding::Context) -> usize {
2135            std::mem::size_of::<u8>()
2136        }
2137
2138        #[inline(always)]
2139        fn encode_is_copy() -> bool {
2140            false
2141        }
2142
2143        #[inline(always)]
2144        fn decode_is_copy() -> bool {
2145            false
2146        }
2147    }
2148
2149    impl fidl::encoding::ValueTypeMarker for ScoEncoding {
2150        type Borrowed<'a> = Self;
2151        #[inline(always)]
2152        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2153            *value
2154        }
2155    }
2156
2157    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ScoEncoding {
2158        #[inline]
2159        unsafe fn encode(
2160            self,
2161            encoder: &mut fidl::encoding::Encoder<'_, D>,
2162            offset: usize,
2163            _depth: fidl::encoding::Depth,
2164        ) -> fidl::Result<()> {
2165            encoder.debug_check_bounds::<Self>(offset);
2166            encoder.write_num(self.into_primitive(), offset);
2167            Ok(())
2168        }
2169    }
2170
2171    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScoEncoding {
2172        #[inline(always)]
2173        fn new_empty() -> Self {
2174            Self::unknown()
2175        }
2176
2177        #[inline]
2178        unsafe fn decode(
2179            &mut self,
2180            decoder: &mut fidl::encoding::Decoder<'_, D>,
2181            offset: usize,
2182            _depth: fidl::encoding::Depth,
2183        ) -> fidl::Result<()> {
2184            decoder.debug_check_bounds::<Self>(offset);
2185            let prim = decoder.read_num::<u8>(offset);
2186
2187            *self = Self::from_primitive_allow_unknown(prim);
2188            Ok(())
2189        }
2190    }
2191    unsafe impl fidl::encoding::TypeMarker for ScoSampleRate {
2192        type Owned = Self;
2193
2194        #[inline(always)]
2195        fn inline_align(_context: fidl::encoding::Context) -> usize {
2196            std::mem::align_of::<u8>()
2197        }
2198
2199        #[inline(always)]
2200        fn inline_size(_context: fidl::encoding::Context) -> usize {
2201            std::mem::size_of::<u8>()
2202        }
2203
2204        #[inline(always)]
2205        fn encode_is_copy() -> bool {
2206            false
2207        }
2208
2209        #[inline(always)]
2210        fn decode_is_copy() -> bool {
2211            false
2212        }
2213    }
2214
2215    impl fidl::encoding::ValueTypeMarker for ScoSampleRate {
2216        type Borrowed<'a> = Self;
2217        #[inline(always)]
2218        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2219            *value
2220        }
2221    }
2222
2223    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ScoSampleRate {
2224        #[inline]
2225        unsafe fn encode(
2226            self,
2227            encoder: &mut fidl::encoding::Encoder<'_, D>,
2228            offset: usize,
2229            _depth: fidl::encoding::Depth,
2230        ) -> fidl::Result<()> {
2231            encoder.debug_check_bounds::<Self>(offset);
2232            encoder.write_num(self.into_primitive(), offset);
2233            Ok(())
2234        }
2235    }
2236
2237    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScoSampleRate {
2238        #[inline(always)]
2239        fn new_empty() -> Self {
2240            Self::unknown()
2241        }
2242
2243        #[inline]
2244        unsafe fn decode(
2245            &mut self,
2246            decoder: &mut fidl::encoding::Decoder<'_, D>,
2247            offset: usize,
2248            _depth: fidl::encoding::Depth,
2249        ) -> fidl::Result<()> {
2250            decoder.debug_check_bounds::<Self>(offset);
2251            let prim = decoder.read_num::<u8>(offset);
2252
2253            *self = Self::from_primitive_allow_unknown(prim);
2254            Ok(())
2255        }
2256    }
2257    unsafe impl fidl::encoding::TypeMarker for VendorAclDirection {
2258        type Owned = Self;
2259
2260        #[inline(always)]
2261        fn inline_align(_context: fidl::encoding::Context) -> usize {
2262            std::mem::align_of::<u8>()
2263        }
2264
2265        #[inline(always)]
2266        fn inline_size(_context: fidl::encoding::Context) -> usize {
2267            std::mem::size_of::<u8>()
2268        }
2269
2270        #[inline(always)]
2271        fn encode_is_copy() -> bool {
2272            false
2273        }
2274
2275        #[inline(always)]
2276        fn decode_is_copy() -> bool {
2277            false
2278        }
2279    }
2280
2281    impl fidl::encoding::ValueTypeMarker for VendorAclDirection {
2282        type Borrowed<'a> = Self;
2283        #[inline(always)]
2284        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2285            *value
2286        }
2287    }
2288
2289    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2290        for VendorAclDirection
2291    {
2292        #[inline]
2293        unsafe fn encode(
2294            self,
2295            encoder: &mut fidl::encoding::Encoder<'_, D>,
2296            offset: usize,
2297            _depth: fidl::encoding::Depth,
2298        ) -> fidl::Result<()> {
2299            encoder.debug_check_bounds::<Self>(offset);
2300            encoder.write_num(self.into_primitive(), offset);
2301            Ok(())
2302        }
2303    }
2304
2305    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VendorAclDirection {
2306        #[inline(always)]
2307        fn new_empty() -> Self {
2308            Self::unknown()
2309        }
2310
2311        #[inline]
2312        unsafe fn decode(
2313            &mut self,
2314            decoder: &mut fidl::encoding::Decoder<'_, D>,
2315            offset: usize,
2316            _depth: fidl::encoding::Depth,
2317        ) -> fidl::Result<()> {
2318            decoder.debug_check_bounds::<Self>(offset);
2319            let prim = decoder.read_num::<u8>(offset);
2320
2321            *self = Self::from_primitive_allow_unknown(prim);
2322            Ok(())
2323        }
2324    }
2325    unsafe impl fidl::encoding::TypeMarker for VendorAclPriority {
2326        type Owned = Self;
2327
2328        #[inline(always)]
2329        fn inline_align(_context: fidl::encoding::Context) -> usize {
2330            std::mem::align_of::<u8>()
2331        }
2332
2333        #[inline(always)]
2334        fn inline_size(_context: fidl::encoding::Context) -> usize {
2335            std::mem::size_of::<u8>()
2336        }
2337
2338        #[inline(always)]
2339        fn encode_is_copy() -> bool {
2340            false
2341        }
2342
2343        #[inline(always)]
2344        fn decode_is_copy() -> bool {
2345            false
2346        }
2347    }
2348
2349    impl fidl::encoding::ValueTypeMarker for VendorAclPriority {
2350        type Borrowed<'a> = Self;
2351        #[inline(always)]
2352        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2353            *value
2354        }
2355    }
2356
2357    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2358        for VendorAclPriority
2359    {
2360        #[inline]
2361        unsafe fn encode(
2362            self,
2363            encoder: &mut fidl::encoding::Encoder<'_, D>,
2364            offset: usize,
2365            _depth: fidl::encoding::Depth,
2366        ) -> fidl::Result<()> {
2367            encoder.debug_check_bounds::<Self>(offset);
2368            encoder.write_num(self.into_primitive(), offset);
2369            Ok(())
2370        }
2371    }
2372
2373    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VendorAclPriority {
2374        #[inline(always)]
2375        fn new_empty() -> Self {
2376            Self::unknown()
2377        }
2378
2379        #[inline]
2380        unsafe fn decode(
2381            &mut self,
2382            decoder: &mut fidl::encoding::Decoder<'_, D>,
2383            offset: usize,
2384            _depth: fidl::encoding::Depth,
2385        ) -> fidl::Result<()> {
2386            decoder.debug_check_bounds::<Self>(offset);
2387            let prim = decoder.read_num::<u8>(offset);
2388
2389            *self = Self::from_primitive_allow_unknown(prim);
2390            Ok(())
2391        }
2392    }
2393
2394    impl fidl::encoding::ValueTypeMarker for EmulatorWatchLeScanStatesResponse {
2395        type Borrowed<'a> = &'a Self;
2396        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2397            value
2398        }
2399    }
2400
2401    unsafe impl fidl::encoding::TypeMarker for EmulatorWatchLeScanStatesResponse {
2402        type Owned = Self;
2403
2404        #[inline(always)]
2405        fn inline_align(_context: fidl::encoding::Context) -> usize {
2406            8
2407        }
2408
2409        #[inline(always)]
2410        fn inline_size(_context: fidl::encoding::Context) -> usize {
2411            16
2412        }
2413    }
2414
2415    unsafe impl<D: fidl::encoding::ResourceDialect>
2416        fidl::encoding::Encode<EmulatorWatchLeScanStatesResponse, D>
2417        for &EmulatorWatchLeScanStatesResponse
2418    {
2419        #[inline]
2420        unsafe fn encode(
2421            self,
2422            encoder: &mut fidl::encoding::Encoder<'_, D>,
2423            offset: usize,
2424            _depth: fidl::encoding::Depth,
2425        ) -> fidl::Result<()> {
2426            encoder.debug_check_bounds::<EmulatorWatchLeScanStatesResponse>(offset);
2427            // Delegate to tuple encoding.
2428            fidl::encoding::Encode::<EmulatorWatchLeScanStatesResponse, D>::encode(
2429                (
2430                    <fidl::encoding::UnboundedVector<LeScanState> as fidl::encoding::ValueTypeMarker>::borrow(&self.states),
2431                ),
2432                encoder, offset, _depth
2433            )
2434        }
2435    }
2436    unsafe impl<
2437        D: fidl::encoding::ResourceDialect,
2438        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<LeScanState>, D>,
2439    > fidl::encoding::Encode<EmulatorWatchLeScanStatesResponse, D> for (T0,)
2440    {
2441        #[inline]
2442        unsafe fn encode(
2443            self,
2444            encoder: &mut fidl::encoding::Encoder<'_, D>,
2445            offset: usize,
2446            depth: fidl::encoding::Depth,
2447        ) -> fidl::Result<()> {
2448            encoder.debug_check_bounds::<EmulatorWatchLeScanStatesResponse>(offset);
2449            // Zero out padding regions. There's no need to apply masks
2450            // because the unmasked parts will be overwritten by fields.
2451            // Write the fields.
2452            self.0.encode(encoder, offset + 0, depth)?;
2453            Ok(())
2454        }
2455    }
2456
2457    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2458        for EmulatorWatchLeScanStatesResponse
2459    {
2460        #[inline(always)]
2461        fn new_empty() -> Self {
2462            Self { states: fidl::new_empty!(fidl::encoding::UnboundedVector<LeScanState>, D) }
2463        }
2464
2465        #[inline]
2466        unsafe fn decode(
2467            &mut self,
2468            decoder: &mut fidl::encoding::Decoder<'_, D>,
2469            offset: usize,
2470            _depth: fidl::encoding::Depth,
2471        ) -> fidl::Result<()> {
2472            decoder.debug_check_bounds::<Self>(offset);
2473            // Verify that padding bytes are zero.
2474            fidl::decode!(
2475                fidl::encoding::UnboundedVector<LeScanState>,
2476                D,
2477                &mut self.states,
2478                decoder,
2479                offset + 0,
2480                _depth
2481            )?;
2482            Ok(())
2483        }
2484    }
2485
2486    impl fidl::encoding::ValueTypeMarker for EmulatorWatchLegacyAdvertisingStatesResponse {
2487        type Borrowed<'a> = &'a Self;
2488        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2489            value
2490        }
2491    }
2492
2493    unsafe impl fidl::encoding::TypeMarker for EmulatorWatchLegacyAdvertisingStatesResponse {
2494        type Owned = Self;
2495
2496        #[inline(always)]
2497        fn inline_align(_context: fidl::encoding::Context) -> usize {
2498            8
2499        }
2500
2501        #[inline(always)]
2502        fn inline_size(_context: fidl::encoding::Context) -> usize {
2503            16
2504        }
2505    }
2506
2507    unsafe impl<D: fidl::encoding::ResourceDialect>
2508        fidl::encoding::Encode<EmulatorWatchLegacyAdvertisingStatesResponse, D>
2509        for &EmulatorWatchLegacyAdvertisingStatesResponse
2510    {
2511        #[inline]
2512        unsafe fn encode(
2513            self,
2514            encoder: &mut fidl::encoding::Encoder<'_, D>,
2515            offset: usize,
2516            _depth: fidl::encoding::Depth,
2517        ) -> fidl::Result<()> {
2518            encoder.debug_check_bounds::<EmulatorWatchLegacyAdvertisingStatesResponse>(offset);
2519            // Delegate to tuple encoding.
2520            fidl::encoding::Encode::<EmulatorWatchLegacyAdvertisingStatesResponse, D>::encode(
2521                (
2522                    <fidl::encoding::UnboundedVector<LegacyAdvertisingState> as fidl::encoding::ValueTypeMarker>::borrow(&self.states),
2523                ),
2524                encoder, offset, _depth
2525            )
2526        }
2527    }
2528    unsafe impl<
2529        D: fidl::encoding::ResourceDialect,
2530        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<LegacyAdvertisingState>, D>,
2531    > fidl::encoding::Encode<EmulatorWatchLegacyAdvertisingStatesResponse, D> for (T0,)
2532    {
2533        #[inline]
2534        unsafe fn encode(
2535            self,
2536            encoder: &mut fidl::encoding::Encoder<'_, D>,
2537            offset: usize,
2538            depth: fidl::encoding::Depth,
2539        ) -> fidl::Result<()> {
2540            encoder.debug_check_bounds::<EmulatorWatchLegacyAdvertisingStatesResponse>(offset);
2541            // Zero out padding regions. There's no need to apply masks
2542            // because the unmasked parts will be overwritten by fields.
2543            // Write the fields.
2544            self.0.encode(encoder, offset + 0, depth)?;
2545            Ok(())
2546        }
2547    }
2548
2549    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2550        for EmulatorWatchLegacyAdvertisingStatesResponse
2551    {
2552        #[inline(always)]
2553        fn new_empty() -> Self {
2554            Self {
2555                states: fidl::new_empty!(
2556                    fidl::encoding::UnboundedVector<LegacyAdvertisingState>,
2557                    D
2558                ),
2559            }
2560        }
2561
2562        #[inline]
2563        unsafe fn decode(
2564            &mut self,
2565            decoder: &mut fidl::encoding::Decoder<'_, D>,
2566            offset: usize,
2567            _depth: fidl::encoding::Depth,
2568        ) -> fidl::Result<()> {
2569            decoder.debug_check_bounds::<Self>(offset);
2570            // Verify that padding bytes are zero.
2571            fidl::decode!(
2572                fidl::encoding::UnboundedVector<LegacyAdvertisingState>,
2573                D,
2574                &mut self.states,
2575                decoder,
2576                offset + 0,
2577                _depth
2578            )?;
2579            Ok(())
2580        }
2581    }
2582
2583    impl fidl::encoding::ValueTypeMarker for HciConfigureScoRequest {
2584        type Borrowed<'a> = &'a Self;
2585        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2586            value
2587        }
2588    }
2589
2590    unsafe impl fidl::encoding::TypeMarker for HciConfigureScoRequest {
2591        type Owned = Self;
2592
2593        #[inline(always)]
2594        fn inline_align(_context: fidl::encoding::Context) -> usize {
2595            1
2596        }
2597
2598        #[inline(always)]
2599        fn inline_size(_context: fidl::encoding::Context) -> usize {
2600            3
2601        }
2602    }
2603
2604    unsafe impl<D: fidl::encoding::ResourceDialect>
2605        fidl::encoding::Encode<HciConfigureScoRequest, D> for &HciConfigureScoRequest
2606    {
2607        #[inline]
2608        unsafe fn encode(
2609            self,
2610            encoder: &mut fidl::encoding::Encoder<'_, D>,
2611            offset: usize,
2612            _depth: fidl::encoding::Depth,
2613        ) -> fidl::Result<()> {
2614            encoder.debug_check_bounds::<HciConfigureScoRequest>(offset);
2615            // Delegate to tuple encoding.
2616            fidl::encoding::Encode::<HciConfigureScoRequest, D>::encode(
2617                (
2618                    <ScoCodingFormat as fidl::encoding::ValueTypeMarker>::borrow(
2619                        &self.coding_format,
2620                    ),
2621                    <ScoEncoding as fidl::encoding::ValueTypeMarker>::borrow(&self.encoding),
2622                    <ScoSampleRate as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_rate),
2623                ),
2624                encoder,
2625                offset,
2626                _depth,
2627            )
2628        }
2629    }
2630    unsafe impl<
2631        D: fidl::encoding::ResourceDialect,
2632        T0: fidl::encoding::Encode<ScoCodingFormat, D>,
2633        T1: fidl::encoding::Encode<ScoEncoding, D>,
2634        T2: fidl::encoding::Encode<ScoSampleRate, D>,
2635    > fidl::encoding::Encode<HciConfigureScoRequest, D> for (T0, T1, T2)
2636    {
2637        #[inline]
2638        unsafe fn encode(
2639            self,
2640            encoder: &mut fidl::encoding::Encoder<'_, D>,
2641            offset: usize,
2642            depth: fidl::encoding::Depth,
2643        ) -> fidl::Result<()> {
2644            encoder.debug_check_bounds::<HciConfigureScoRequest>(offset);
2645            // Zero out padding regions. There's no need to apply masks
2646            // because the unmasked parts will be overwritten by fields.
2647            // Write the fields.
2648            self.0.encode(encoder, offset + 0, depth)?;
2649            self.1.encode(encoder, offset + 1, depth)?;
2650            self.2.encode(encoder, offset + 2, depth)?;
2651            Ok(())
2652        }
2653    }
2654
2655    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2656        for HciConfigureScoRequest
2657    {
2658        #[inline(always)]
2659        fn new_empty() -> Self {
2660            Self {
2661                coding_format: fidl::new_empty!(ScoCodingFormat, D),
2662                encoding: fidl::new_empty!(ScoEncoding, D),
2663                sample_rate: fidl::new_empty!(ScoSampleRate, D),
2664            }
2665        }
2666
2667        #[inline]
2668        unsafe fn decode(
2669            &mut self,
2670            decoder: &mut fidl::encoding::Decoder<'_, D>,
2671            offset: usize,
2672            _depth: fidl::encoding::Depth,
2673        ) -> fidl::Result<()> {
2674            decoder.debug_check_bounds::<Self>(offset);
2675            // Verify that padding bytes are zero.
2676            fidl::decode!(
2677                ScoCodingFormat,
2678                D,
2679                &mut self.coding_format,
2680                decoder,
2681                offset + 0,
2682                _depth
2683            )?;
2684            fidl::decode!(ScoEncoding, D, &mut self.encoding, decoder, offset + 1, _depth)?;
2685            fidl::decode!(ScoSampleRate, D, &mut self.sample_rate, decoder, offset + 2, _depth)?;
2686            Ok(())
2687        }
2688    }
2689
2690    impl fidl::encoding::ValueTypeMarker for PeerAssignConnectionStatusRequest {
2691        type Borrowed<'a> = &'a Self;
2692        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2693            value
2694        }
2695    }
2696
2697    unsafe impl fidl::encoding::TypeMarker for PeerAssignConnectionStatusRequest {
2698        type Owned = Self;
2699
2700        #[inline(always)]
2701        fn inline_align(_context: fidl::encoding::Context) -> usize {
2702            1
2703        }
2704
2705        #[inline(always)]
2706        fn inline_size(_context: fidl::encoding::Context) -> usize {
2707            1
2708        }
2709    }
2710
2711    unsafe impl<D: fidl::encoding::ResourceDialect>
2712        fidl::encoding::Encode<PeerAssignConnectionStatusRequest, D>
2713        for &PeerAssignConnectionStatusRequest
2714    {
2715        #[inline]
2716        unsafe fn encode(
2717            self,
2718            encoder: &mut fidl::encoding::Encoder<'_, D>,
2719            offset: usize,
2720            _depth: fidl::encoding::Depth,
2721        ) -> fidl::Result<()> {
2722            encoder.debug_check_bounds::<PeerAssignConnectionStatusRequest>(offset);
2723            // Delegate to tuple encoding.
2724            fidl::encoding::Encode::<PeerAssignConnectionStatusRequest, D>::encode(
2725                (<HciError as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
2726                encoder,
2727                offset,
2728                _depth,
2729            )
2730        }
2731    }
2732    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HciError, D>>
2733        fidl::encoding::Encode<PeerAssignConnectionStatusRequest, D> for (T0,)
2734    {
2735        #[inline]
2736        unsafe fn encode(
2737            self,
2738            encoder: &mut fidl::encoding::Encoder<'_, D>,
2739            offset: usize,
2740            depth: fidl::encoding::Depth,
2741        ) -> fidl::Result<()> {
2742            encoder.debug_check_bounds::<PeerAssignConnectionStatusRequest>(offset);
2743            // Zero out padding regions. There's no need to apply masks
2744            // because the unmasked parts will be overwritten by fields.
2745            // Write the fields.
2746            self.0.encode(encoder, offset + 0, depth)?;
2747            Ok(())
2748        }
2749    }
2750
2751    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2752        for PeerAssignConnectionStatusRequest
2753    {
2754        #[inline(always)]
2755        fn new_empty() -> Self {
2756            Self { status: fidl::new_empty!(HciError, D) }
2757        }
2758
2759        #[inline]
2760        unsafe fn decode(
2761            &mut self,
2762            decoder: &mut fidl::encoding::Decoder<'_, D>,
2763            offset: usize,
2764            _depth: fidl::encoding::Depth,
2765        ) -> fidl::Result<()> {
2766            decoder.debug_check_bounds::<Self>(offset);
2767            // Verify that padding bytes are zero.
2768            fidl::decode!(HciError, D, &mut self.status, decoder, offset + 0, _depth)?;
2769            Ok(())
2770        }
2771    }
2772
2773    impl fidl::encoding::ValueTypeMarker for PeerEmulateLeConnectionCompleteRequest {
2774        type Borrowed<'a> = &'a Self;
2775        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2776            value
2777        }
2778    }
2779
2780    unsafe impl fidl::encoding::TypeMarker for PeerEmulateLeConnectionCompleteRequest {
2781        type Owned = Self;
2782
2783        #[inline(always)]
2784        fn inline_align(_context: fidl::encoding::Context) -> usize {
2785            4
2786        }
2787
2788        #[inline(always)]
2789        fn inline_size(_context: fidl::encoding::Context) -> usize {
2790            4
2791        }
2792    }
2793
2794    unsafe impl<D: fidl::encoding::ResourceDialect>
2795        fidl::encoding::Encode<PeerEmulateLeConnectionCompleteRequest, D>
2796        for &PeerEmulateLeConnectionCompleteRequest
2797    {
2798        #[inline]
2799        unsafe fn encode(
2800            self,
2801            encoder: &mut fidl::encoding::Encoder<'_, D>,
2802            offset: usize,
2803            _depth: fidl::encoding::Depth,
2804        ) -> fidl::Result<()> {
2805            encoder.debug_check_bounds::<PeerEmulateLeConnectionCompleteRequest>(offset);
2806            // Delegate to tuple encoding.
2807            fidl::encoding::Encode::<PeerEmulateLeConnectionCompleteRequest, D>::encode(
2808                (
2809                    <fidl_fuchsia_bluetooth__common::ConnectionRole as fidl::encoding::ValueTypeMarker>::borrow(&self.role),
2810                ),
2811                encoder, offset, _depth
2812            )
2813        }
2814    }
2815    unsafe impl<
2816        D: fidl::encoding::ResourceDialect,
2817        T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth__common::ConnectionRole, D>,
2818    > fidl::encoding::Encode<PeerEmulateLeConnectionCompleteRequest, D> for (T0,)
2819    {
2820        #[inline]
2821        unsafe fn encode(
2822            self,
2823            encoder: &mut fidl::encoding::Encoder<'_, D>,
2824            offset: usize,
2825            depth: fidl::encoding::Depth,
2826        ) -> fidl::Result<()> {
2827            encoder.debug_check_bounds::<PeerEmulateLeConnectionCompleteRequest>(offset);
2828            // Zero out padding regions. There's no need to apply masks
2829            // because the unmasked parts will be overwritten by fields.
2830            // Write the fields.
2831            self.0.encode(encoder, offset + 0, depth)?;
2832            Ok(())
2833        }
2834    }
2835
2836    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2837        for PeerEmulateLeConnectionCompleteRequest
2838    {
2839        #[inline(always)]
2840        fn new_empty() -> Self {
2841            Self { role: fidl::new_empty!(fidl_fuchsia_bluetooth__common::ConnectionRole, D) }
2842        }
2843
2844        #[inline]
2845        unsafe fn decode(
2846            &mut self,
2847            decoder: &mut fidl::encoding::Decoder<'_, D>,
2848            offset: usize,
2849            _depth: fidl::encoding::Depth,
2850        ) -> fidl::Result<()> {
2851            decoder.debug_check_bounds::<Self>(offset);
2852            // Verify that padding bytes are zero.
2853            fidl::decode!(
2854                fidl_fuchsia_bluetooth__common::ConnectionRole,
2855                D,
2856                &mut self.role,
2857                decoder,
2858                offset + 0,
2859                _depth
2860            )?;
2861            Ok(())
2862        }
2863    }
2864
2865    impl fidl::encoding::ValueTypeMarker for PeerSetServiceDefinitionsRequest {
2866        type Borrowed<'a> = &'a Self;
2867        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2868            value
2869        }
2870    }
2871
2872    unsafe impl fidl::encoding::TypeMarker for PeerSetServiceDefinitionsRequest {
2873        type Owned = Self;
2874
2875        #[inline(always)]
2876        fn inline_align(_context: fidl::encoding::Context) -> usize {
2877            8
2878        }
2879
2880        #[inline(always)]
2881        fn inline_size(_context: fidl::encoding::Context) -> usize {
2882            16
2883        }
2884    }
2885
2886    unsafe impl<D: fidl::encoding::ResourceDialect>
2887        fidl::encoding::Encode<PeerSetServiceDefinitionsRequest, D>
2888        for &PeerSetServiceDefinitionsRequest
2889    {
2890        #[inline]
2891        unsafe fn encode(
2892            self,
2893            encoder: &mut fidl::encoding::Encoder<'_, D>,
2894            offset: usize,
2895            _depth: fidl::encoding::Depth,
2896        ) -> fidl::Result<()> {
2897            encoder.debug_check_bounds::<PeerSetServiceDefinitionsRequest>(offset);
2898            // Delegate to tuple encoding.
2899            fidl::encoding::Encode::<PeerSetServiceDefinitionsRequest, D>::encode(
2900                (<fidl::encoding::Vector<
2901                    fidl_fuchsia_bluetooth_bredr__common::ServiceDefinition,
2902                    32,
2903                > as fidl::encoding::ValueTypeMarker>::borrow(
2904                    &self.service_definitions
2905                ),),
2906                encoder,
2907                offset,
2908                _depth,
2909            )
2910        }
2911    }
2912    unsafe impl<
2913        D: fidl::encoding::ResourceDialect,
2914        T0: fidl::encoding::Encode<
2915                fidl::encoding::Vector<fidl_fuchsia_bluetooth_bredr__common::ServiceDefinition, 32>,
2916                D,
2917            >,
2918    > fidl::encoding::Encode<PeerSetServiceDefinitionsRequest, D> for (T0,)
2919    {
2920        #[inline]
2921        unsafe fn encode(
2922            self,
2923            encoder: &mut fidl::encoding::Encoder<'_, D>,
2924            offset: usize,
2925            depth: fidl::encoding::Depth,
2926        ) -> fidl::Result<()> {
2927            encoder.debug_check_bounds::<PeerSetServiceDefinitionsRequest>(offset);
2928            // Zero out padding regions. There's no need to apply masks
2929            // because the unmasked parts will be overwritten by fields.
2930            // Write the fields.
2931            self.0.encode(encoder, offset + 0, depth)?;
2932            Ok(())
2933        }
2934    }
2935
2936    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2937        for PeerSetServiceDefinitionsRequest
2938    {
2939        #[inline(always)]
2940        fn new_empty() -> Self {
2941            Self {
2942                service_definitions: fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_bluetooth_bredr__common::ServiceDefinition, 32>, D),
2943            }
2944        }
2945
2946        #[inline]
2947        unsafe fn decode(
2948            &mut self,
2949            decoder: &mut fidl::encoding::Decoder<'_, D>,
2950            offset: usize,
2951            _depth: fidl::encoding::Depth,
2952        ) -> fidl::Result<()> {
2953            decoder.debug_check_bounds::<Self>(offset);
2954            // Verify that padding bytes are zero.
2955            fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_bluetooth_bredr__common::ServiceDefinition, 32>, D, &mut self.service_definitions, decoder, offset + 0, _depth)?;
2956            Ok(())
2957        }
2958    }
2959
2960    impl fidl::encoding::ValueTypeMarker for PeerWatchConnectionStatesResponse {
2961        type Borrowed<'a> = &'a Self;
2962        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2963            value
2964        }
2965    }
2966
2967    unsafe impl fidl::encoding::TypeMarker for PeerWatchConnectionStatesResponse {
2968        type Owned = Self;
2969
2970        #[inline(always)]
2971        fn inline_align(_context: fidl::encoding::Context) -> usize {
2972            8
2973        }
2974
2975        #[inline(always)]
2976        fn inline_size(_context: fidl::encoding::Context) -> usize {
2977            16
2978        }
2979    }
2980
2981    unsafe impl<D: fidl::encoding::ResourceDialect>
2982        fidl::encoding::Encode<PeerWatchConnectionStatesResponse, D>
2983        for &PeerWatchConnectionStatesResponse
2984    {
2985        #[inline]
2986        unsafe fn encode(
2987            self,
2988            encoder: &mut fidl::encoding::Encoder<'_, D>,
2989            offset: usize,
2990            _depth: fidl::encoding::Depth,
2991        ) -> fidl::Result<()> {
2992            encoder.debug_check_bounds::<PeerWatchConnectionStatesResponse>(offset);
2993            // Delegate to tuple encoding.
2994            fidl::encoding::Encode::<PeerWatchConnectionStatesResponse, D>::encode(
2995                (
2996                    <fidl::encoding::UnboundedVector<ConnectionState> as fidl::encoding::ValueTypeMarker>::borrow(&self.states),
2997                ),
2998                encoder, offset, _depth
2999            )
3000        }
3001    }
3002    unsafe impl<
3003        D: fidl::encoding::ResourceDialect,
3004        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<ConnectionState>, D>,
3005    > fidl::encoding::Encode<PeerWatchConnectionStatesResponse, D> for (T0,)
3006    {
3007        #[inline]
3008        unsafe fn encode(
3009            self,
3010            encoder: &mut fidl::encoding::Encoder<'_, D>,
3011            offset: usize,
3012            depth: fidl::encoding::Depth,
3013        ) -> fidl::Result<()> {
3014            encoder.debug_check_bounds::<PeerWatchConnectionStatesResponse>(offset);
3015            // Zero out padding regions. There's no need to apply masks
3016            // because the unmasked parts will be overwritten by fields.
3017            // Write the fields.
3018            self.0.encode(encoder, offset + 0, depth)?;
3019            Ok(())
3020        }
3021    }
3022
3023    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3024        for PeerWatchConnectionStatesResponse
3025    {
3026        #[inline(always)]
3027        fn new_empty() -> Self {
3028            Self { states: fidl::new_empty!(fidl::encoding::UnboundedVector<ConnectionState>, D) }
3029        }
3030
3031        #[inline]
3032        unsafe fn decode(
3033            &mut self,
3034            decoder: &mut fidl::encoding::Decoder<'_, D>,
3035            offset: usize,
3036            _depth: fidl::encoding::Depth,
3037        ) -> fidl::Result<()> {
3038            decoder.debug_check_bounds::<Self>(offset);
3039            // Verify that padding bytes are zero.
3040            fidl::decode!(
3041                fidl::encoding::UnboundedVector<ConnectionState>,
3042                D,
3043                &mut self.states,
3044                decoder,
3045                offset + 0,
3046                _depth
3047            )?;
3048            Ok(())
3049        }
3050    }
3051
3052    impl fidl::encoding::ValueTypeMarker for ScoPacket {
3053        type Borrowed<'a> = &'a Self;
3054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3055            value
3056        }
3057    }
3058
3059    unsafe impl fidl::encoding::TypeMarker for ScoPacket {
3060        type Owned = Self;
3061
3062        #[inline(always)]
3063        fn inline_align(_context: fidl::encoding::Context) -> usize {
3064            8
3065        }
3066
3067        #[inline(always)]
3068        fn inline_size(_context: fidl::encoding::Context) -> usize {
3069            16
3070        }
3071    }
3072
3073    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScoPacket, D>
3074        for &ScoPacket
3075    {
3076        #[inline]
3077        unsafe fn encode(
3078            self,
3079            encoder: &mut fidl::encoding::Encoder<'_, D>,
3080            offset: usize,
3081            _depth: fidl::encoding::Depth,
3082        ) -> fidl::Result<()> {
3083            encoder.debug_check_bounds::<ScoPacket>(offset);
3084            // Delegate to tuple encoding.
3085            fidl::encoding::Encode::<ScoPacket, D>::encode(
3086                (<fidl::encoding::Vector<u8, 258> as fidl::encoding::ValueTypeMarker>::borrow(
3087                    &self.packet,
3088                ),),
3089                encoder,
3090                offset,
3091                _depth,
3092            )
3093        }
3094    }
3095    unsafe impl<
3096        D: fidl::encoding::ResourceDialect,
3097        T0: fidl::encoding::Encode<fidl::encoding::Vector<u8, 258>, D>,
3098    > fidl::encoding::Encode<ScoPacket, D> for (T0,)
3099    {
3100        #[inline]
3101        unsafe fn encode(
3102            self,
3103            encoder: &mut fidl::encoding::Encoder<'_, D>,
3104            offset: usize,
3105            depth: fidl::encoding::Depth,
3106        ) -> fidl::Result<()> {
3107            encoder.debug_check_bounds::<ScoPacket>(offset);
3108            // Zero out padding regions. There's no need to apply masks
3109            // because the unmasked parts will be overwritten by fields.
3110            // Write the fields.
3111            self.0.encode(encoder, offset + 0, depth)?;
3112            Ok(())
3113        }
3114    }
3115
3116    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScoPacket {
3117        #[inline(always)]
3118        fn new_empty() -> Self {
3119            Self { packet: fidl::new_empty!(fidl::encoding::Vector<u8, 258>, D) }
3120        }
3121
3122        #[inline]
3123        unsafe fn decode(
3124            &mut self,
3125            decoder: &mut fidl::encoding::Decoder<'_, D>,
3126            offset: usize,
3127            _depth: fidl::encoding::Depth,
3128        ) -> fidl::Result<()> {
3129            decoder.debug_check_bounds::<Self>(offset);
3130            // Verify that padding bytes are zero.
3131            fidl::decode!(fidl::encoding::Vector<u8, 258>, D, &mut self.packet, decoder, offset + 0, _depth)?;
3132            Ok(())
3133        }
3134    }
3135
3136    impl fidl::encoding::ValueTypeMarker for SnoopAcknowledgePacketsRequest {
3137        type Borrowed<'a> = &'a Self;
3138        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3139            value
3140        }
3141    }
3142
3143    unsafe impl fidl::encoding::TypeMarker for SnoopAcknowledgePacketsRequest {
3144        type Owned = Self;
3145
3146        #[inline(always)]
3147        fn inline_align(_context: fidl::encoding::Context) -> usize {
3148            8
3149        }
3150
3151        #[inline(always)]
3152        fn inline_size(_context: fidl::encoding::Context) -> usize {
3153            8
3154        }
3155        #[inline(always)]
3156        fn encode_is_copy() -> bool {
3157            true
3158        }
3159
3160        #[inline(always)]
3161        fn decode_is_copy() -> bool {
3162            true
3163        }
3164    }
3165
3166    unsafe impl<D: fidl::encoding::ResourceDialect>
3167        fidl::encoding::Encode<SnoopAcknowledgePacketsRequest, D>
3168        for &SnoopAcknowledgePacketsRequest
3169    {
3170        #[inline]
3171        unsafe fn encode(
3172            self,
3173            encoder: &mut fidl::encoding::Encoder<'_, D>,
3174            offset: usize,
3175            _depth: fidl::encoding::Depth,
3176        ) -> fidl::Result<()> {
3177            encoder.debug_check_bounds::<SnoopAcknowledgePacketsRequest>(offset);
3178            unsafe {
3179                // Copy the object into the buffer.
3180                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3181                (buf_ptr as *mut SnoopAcknowledgePacketsRequest)
3182                    .write_unaligned((self as *const SnoopAcknowledgePacketsRequest).read());
3183                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3184                // done second because the memcpy will write garbage to these bytes.
3185            }
3186            Ok(())
3187        }
3188    }
3189    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3190        fidl::encoding::Encode<SnoopAcknowledgePacketsRequest, D> for (T0,)
3191    {
3192        #[inline]
3193        unsafe fn encode(
3194            self,
3195            encoder: &mut fidl::encoding::Encoder<'_, D>,
3196            offset: usize,
3197            depth: fidl::encoding::Depth,
3198        ) -> fidl::Result<()> {
3199            encoder.debug_check_bounds::<SnoopAcknowledgePacketsRequest>(offset);
3200            // Zero out padding regions. There's no need to apply masks
3201            // because the unmasked parts will be overwritten by fields.
3202            // Write the fields.
3203            self.0.encode(encoder, offset + 0, depth)?;
3204            Ok(())
3205        }
3206    }
3207
3208    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3209        for SnoopAcknowledgePacketsRequest
3210    {
3211        #[inline(always)]
3212        fn new_empty() -> Self {
3213            Self { sequence: fidl::new_empty!(u64, D) }
3214        }
3215
3216        #[inline]
3217        unsafe fn decode(
3218            &mut self,
3219            decoder: &mut fidl::encoding::Decoder<'_, D>,
3220            offset: usize,
3221            _depth: fidl::encoding::Depth,
3222        ) -> fidl::Result<()> {
3223            decoder.debug_check_bounds::<Self>(offset);
3224            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3225            // Verify that padding bytes are zero.
3226            // Copy from the buffer into the object.
3227            unsafe {
3228                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3229            }
3230            Ok(())
3231        }
3232    }
3233
3234    impl fidl::encoding::ValueTypeMarker for VendorEncodeCommandResponse {
3235        type Borrowed<'a> = &'a Self;
3236        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3237            value
3238        }
3239    }
3240
3241    unsafe impl fidl::encoding::TypeMarker for VendorEncodeCommandResponse {
3242        type Owned = Self;
3243
3244        #[inline(always)]
3245        fn inline_align(_context: fidl::encoding::Context) -> usize {
3246            8
3247        }
3248
3249        #[inline(always)]
3250        fn inline_size(_context: fidl::encoding::Context) -> usize {
3251            16
3252        }
3253    }
3254
3255    unsafe impl<D: fidl::encoding::ResourceDialect>
3256        fidl::encoding::Encode<VendorEncodeCommandResponse, D> for &VendorEncodeCommandResponse
3257    {
3258        #[inline]
3259        unsafe fn encode(
3260            self,
3261            encoder: &mut fidl::encoding::Encoder<'_, D>,
3262            offset: usize,
3263            _depth: fidl::encoding::Depth,
3264        ) -> fidl::Result<()> {
3265            encoder.debug_check_bounds::<VendorEncodeCommandResponse>(offset);
3266            // Delegate to tuple encoding.
3267            fidl::encoding::Encode::<VendorEncodeCommandResponse, D>::encode(
3268                (<fidl::encoding::Vector<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow(
3269                    &self.encoded,
3270                ),),
3271                encoder,
3272                offset,
3273                _depth,
3274            )
3275        }
3276    }
3277    unsafe impl<
3278        D: fidl::encoding::ResourceDialect,
3279        T0: fidl::encoding::Encode<fidl::encoding::Vector<u8, 16>, D>,
3280    > fidl::encoding::Encode<VendorEncodeCommandResponse, D> for (T0,)
3281    {
3282        #[inline]
3283        unsafe fn encode(
3284            self,
3285            encoder: &mut fidl::encoding::Encoder<'_, D>,
3286            offset: usize,
3287            depth: fidl::encoding::Depth,
3288        ) -> fidl::Result<()> {
3289            encoder.debug_check_bounds::<VendorEncodeCommandResponse>(offset);
3290            // Zero out padding regions. There's no need to apply masks
3291            // because the unmasked parts will be overwritten by fields.
3292            // Write the fields.
3293            self.0.encode(encoder, offset + 0, depth)?;
3294            Ok(())
3295        }
3296    }
3297
3298    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3299        for VendorEncodeCommandResponse
3300    {
3301        #[inline(always)]
3302        fn new_empty() -> Self {
3303            Self { encoded: fidl::new_empty!(fidl::encoding::Vector<u8, 16>, D) }
3304        }
3305
3306        #[inline]
3307        unsafe fn decode(
3308            &mut self,
3309            decoder: &mut fidl::encoding::Decoder<'_, D>,
3310            offset: usize,
3311            _depth: fidl::encoding::Depth,
3312        ) -> fidl::Result<()> {
3313            decoder.debug_check_bounds::<Self>(offset);
3314            // Verify that padding bytes are zero.
3315            fidl::decode!(fidl::encoding::Vector<u8, 16>, D, &mut self.encoded, decoder, offset + 0, _depth)?;
3316            Ok(())
3317        }
3318    }
3319
3320    impl fidl::encoding::ValueTypeMarker for VirtualControllerCreateEmulatorResponse {
3321        type Borrowed<'a> = &'a Self;
3322        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3323            value
3324        }
3325    }
3326
3327    unsafe impl fidl::encoding::TypeMarker for VirtualControllerCreateEmulatorResponse {
3328        type Owned = Self;
3329
3330        #[inline(always)]
3331        fn inline_align(_context: fidl::encoding::Context) -> usize {
3332            8
3333        }
3334
3335        #[inline(always)]
3336        fn inline_size(_context: fidl::encoding::Context) -> usize {
3337            16
3338        }
3339    }
3340
3341    unsafe impl<D: fidl::encoding::ResourceDialect>
3342        fidl::encoding::Encode<VirtualControllerCreateEmulatorResponse, D>
3343        for &VirtualControllerCreateEmulatorResponse
3344    {
3345        #[inline]
3346        unsafe fn encode(
3347            self,
3348            encoder: &mut fidl::encoding::Encoder<'_, D>,
3349            offset: usize,
3350            _depth: fidl::encoding::Depth,
3351        ) -> fidl::Result<()> {
3352            encoder.debug_check_bounds::<VirtualControllerCreateEmulatorResponse>(offset);
3353            // Delegate to tuple encoding.
3354            fidl::encoding::Encode::<VirtualControllerCreateEmulatorResponse, D>::encode(
3355                (
3356                    <fidl::encoding::Optional<fidl::encoding::BoundedString<32>> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
3357                ),
3358                encoder, offset, _depth
3359            )
3360        }
3361    }
3362    unsafe impl<
3363        D: fidl::encoding::ResourceDialect,
3364        T0: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<32>>, D>,
3365    > fidl::encoding::Encode<VirtualControllerCreateEmulatorResponse, D> for (T0,)
3366    {
3367        #[inline]
3368        unsafe fn encode(
3369            self,
3370            encoder: &mut fidl::encoding::Encoder<'_, D>,
3371            offset: usize,
3372            depth: fidl::encoding::Depth,
3373        ) -> fidl::Result<()> {
3374            encoder.debug_check_bounds::<VirtualControllerCreateEmulatorResponse>(offset);
3375            // Zero out padding regions. There's no need to apply masks
3376            // because the unmasked parts will be overwritten by fields.
3377            // Write the fields.
3378            self.0.encode(encoder, offset + 0, depth)?;
3379            Ok(())
3380        }
3381    }
3382
3383    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3384        for VirtualControllerCreateEmulatorResponse
3385    {
3386        #[inline(always)]
3387        fn new_empty() -> Self {
3388            Self {
3389                name: fidl::new_empty!(
3390                    fidl::encoding::Optional<fidl::encoding::BoundedString<32>>,
3391                    D
3392                ),
3393            }
3394        }
3395
3396        #[inline]
3397        unsafe fn decode(
3398            &mut self,
3399            decoder: &mut fidl::encoding::Decoder<'_, D>,
3400            offset: usize,
3401            _depth: fidl::encoding::Depth,
3402        ) -> fidl::Result<()> {
3403            decoder.debug_check_bounds::<Self>(offset);
3404            // Verify that padding bytes are zero.
3405            fidl::decode!(
3406                fidl::encoding::Optional<fidl::encoding::BoundedString<32>>,
3407                D,
3408                &mut self.name,
3409                decoder,
3410                offset + 0,
3411                _depth
3412            )?;
3413            Ok(())
3414        }
3415    }
3416
3417    impl AclBufferSettings {
3418        #[inline(always)]
3419        fn max_ordinal_present(&self) -> u64 {
3420            if let Some(_) = self.total_num_data_packets {
3421                return 2;
3422            }
3423            if let Some(_) = self.data_packet_length {
3424                return 1;
3425            }
3426            0
3427        }
3428    }
3429
3430    impl fidl::encoding::ValueTypeMarker for AclBufferSettings {
3431        type Borrowed<'a> = &'a Self;
3432        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3433            value
3434        }
3435    }
3436
3437    unsafe impl fidl::encoding::TypeMarker for AclBufferSettings {
3438        type Owned = Self;
3439
3440        #[inline(always)]
3441        fn inline_align(_context: fidl::encoding::Context) -> usize {
3442            8
3443        }
3444
3445        #[inline(always)]
3446        fn inline_size(_context: fidl::encoding::Context) -> usize {
3447            16
3448        }
3449    }
3450
3451    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AclBufferSettings, D>
3452        for &AclBufferSettings
3453    {
3454        unsafe fn encode(
3455            self,
3456            encoder: &mut fidl::encoding::Encoder<'_, D>,
3457            offset: usize,
3458            mut depth: fidl::encoding::Depth,
3459        ) -> fidl::Result<()> {
3460            encoder.debug_check_bounds::<AclBufferSettings>(offset);
3461            // Vector header
3462            let max_ordinal: u64 = self.max_ordinal_present();
3463            encoder.write_num(max_ordinal, offset);
3464            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3465            // Calling encoder.out_of_line_offset(0) is not allowed.
3466            if max_ordinal == 0 {
3467                return Ok(());
3468            }
3469            depth.increment()?;
3470            let envelope_size = 8;
3471            let bytes_len = max_ordinal as usize * envelope_size;
3472            #[allow(unused_variables)]
3473            let offset = encoder.out_of_line_offset(bytes_len);
3474            let mut _prev_end_offset: usize = 0;
3475            if 1 > max_ordinal {
3476                return Ok(());
3477            }
3478
3479            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3480            // are envelope_size bytes.
3481            let cur_offset: usize = (1 - 1) * envelope_size;
3482
3483            // Zero reserved fields.
3484            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3485
3486            // Safety:
3487            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3488            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3489            //   envelope_size bytes, there is always sufficient room.
3490            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3491                self.data_packet_length
3492                    .as_ref()
3493                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3494                encoder,
3495                offset + cur_offset,
3496                depth,
3497            )?;
3498
3499            _prev_end_offset = cur_offset + envelope_size;
3500            if 2 > max_ordinal {
3501                return Ok(());
3502            }
3503
3504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3505            // are envelope_size bytes.
3506            let cur_offset: usize = (2 - 1) * envelope_size;
3507
3508            // Zero reserved fields.
3509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3510
3511            // Safety:
3512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3514            //   envelope_size bytes, there is always sufficient room.
3515            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3516                self.total_num_data_packets
3517                    .as_ref()
3518                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3519                encoder,
3520                offset + cur_offset,
3521                depth,
3522            )?;
3523
3524            _prev_end_offset = cur_offset + envelope_size;
3525
3526            Ok(())
3527        }
3528    }
3529
3530    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AclBufferSettings {
3531        #[inline(always)]
3532        fn new_empty() -> Self {
3533            Self::default()
3534        }
3535
3536        unsafe fn decode(
3537            &mut self,
3538            decoder: &mut fidl::encoding::Decoder<'_, D>,
3539            offset: usize,
3540            mut depth: fidl::encoding::Depth,
3541        ) -> fidl::Result<()> {
3542            decoder.debug_check_bounds::<Self>(offset);
3543            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3544                None => return Err(fidl::Error::NotNullable),
3545                Some(len) => len,
3546            };
3547            // Calling decoder.out_of_line_offset(0) is not allowed.
3548            if len == 0 {
3549                return Ok(());
3550            };
3551            depth.increment()?;
3552            let envelope_size = 8;
3553            let bytes_len = len * envelope_size;
3554            let offset = decoder.out_of_line_offset(bytes_len)?;
3555            // Decode the envelope for each type.
3556            let mut _next_ordinal_to_read = 0;
3557            let mut next_offset = offset;
3558            let end_offset = offset + bytes_len;
3559            _next_ordinal_to_read += 1;
3560            if next_offset >= end_offset {
3561                return Ok(());
3562            }
3563
3564            // Decode unknown envelopes for gaps in ordinals.
3565            while _next_ordinal_to_read < 1 {
3566                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3567                _next_ordinal_to_read += 1;
3568                next_offset += envelope_size;
3569            }
3570
3571            let next_out_of_line = decoder.next_out_of_line();
3572            let handles_before = decoder.remaining_handles();
3573            if let Some((inlined, num_bytes, num_handles)) =
3574                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3575            {
3576                let member_inline_size =
3577                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3578                if inlined != (member_inline_size <= 4) {
3579                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3580                }
3581                let inner_offset;
3582                let mut inner_depth = depth.clone();
3583                if inlined {
3584                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3585                    inner_offset = next_offset;
3586                } else {
3587                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3588                    inner_depth.increment()?;
3589                }
3590                let val_ref =
3591                    self.data_packet_length.get_or_insert_with(|| fidl::new_empty!(u16, D));
3592                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3593                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3594                {
3595                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3596                }
3597                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3598                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3599                }
3600            }
3601
3602            next_offset += envelope_size;
3603            _next_ordinal_to_read += 1;
3604            if next_offset >= end_offset {
3605                return Ok(());
3606            }
3607
3608            // Decode unknown envelopes for gaps in ordinals.
3609            while _next_ordinal_to_read < 2 {
3610                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3611                _next_ordinal_to_read += 1;
3612                next_offset += envelope_size;
3613            }
3614
3615            let next_out_of_line = decoder.next_out_of_line();
3616            let handles_before = decoder.remaining_handles();
3617            if let Some((inlined, num_bytes, num_handles)) =
3618                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3619            {
3620                let member_inline_size =
3621                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3622                if inlined != (member_inline_size <= 4) {
3623                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3624                }
3625                let inner_offset;
3626                let mut inner_depth = depth.clone();
3627                if inlined {
3628                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3629                    inner_offset = next_offset;
3630                } else {
3631                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3632                    inner_depth.increment()?;
3633                }
3634                let val_ref =
3635                    self.total_num_data_packets.get_or_insert_with(|| fidl::new_empty!(u8, D));
3636                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3637                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3638                {
3639                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3640                }
3641                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3642                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3643                }
3644            }
3645
3646            next_offset += envelope_size;
3647
3648            // Decode the remaining unknown envelopes.
3649            while next_offset < end_offset {
3650                _next_ordinal_to_read += 1;
3651                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3652                next_offset += envelope_size;
3653            }
3654
3655            Ok(())
3656        }
3657    }
3658
3659    impl AdvertisingData {
3660        #[inline(always)]
3661        fn max_ordinal_present(&self) -> u64 {
3662            if let Some(_) = self.data {
3663                return 1;
3664            }
3665            0
3666        }
3667    }
3668
3669    impl fidl::encoding::ValueTypeMarker for AdvertisingData {
3670        type Borrowed<'a> = &'a Self;
3671        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3672            value
3673        }
3674    }
3675
3676    unsafe impl fidl::encoding::TypeMarker for AdvertisingData {
3677        type Owned = Self;
3678
3679        #[inline(always)]
3680        fn inline_align(_context: fidl::encoding::Context) -> usize {
3681            8
3682        }
3683
3684        #[inline(always)]
3685        fn inline_size(_context: fidl::encoding::Context) -> usize {
3686            16
3687        }
3688    }
3689
3690    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdvertisingData, D>
3691        for &AdvertisingData
3692    {
3693        unsafe fn encode(
3694            self,
3695            encoder: &mut fidl::encoding::Encoder<'_, D>,
3696            offset: usize,
3697            mut depth: fidl::encoding::Depth,
3698        ) -> fidl::Result<()> {
3699            encoder.debug_check_bounds::<AdvertisingData>(offset);
3700            // Vector header
3701            let max_ordinal: u64 = self.max_ordinal_present();
3702            encoder.write_num(max_ordinal, offset);
3703            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3704            // Calling encoder.out_of_line_offset(0) is not allowed.
3705            if max_ordinal == 0 {
3706                return Ok(());
3707            }
3708            depth.increment()?;
3709            let envelope_size = 8;
3710            let bytes_len = max_ordinal as usize * envelope_size;
3711            #[allow(unused_variables)]
3712            let offset = encoder.out_of_line_offset(bytes_len);
3713            let mut _prev_end_offset: usize = 0;
3714            if 1 > max_ordinal {
3715                return Ok(());
3716            }
3717
3718            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3719            // are envelope_size bytes.
3720            let cur_offset: usize = (1 - 1) * envelope_size;
3721
3722            // Zero reserved fields.
3723            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3724
3725            // Safety:
3726            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3727            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3728            //   envelope_size bytes, there is always sufficient room.
3729            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 31>, D>(
3730                self.data.as_ref().map(
3731                    <fidl::encoding::Vector<u8, 31> as fidl::encoding::ValueTypeMarker>::borrow,
3732                ),
3733                encoder,
3734                offset + cur_offset,
3735                depth,
3736            )?;
3737
3738            _prev_end_offset = cur_offset + envelope_size;
3739
3740            Ok(())
3741        }
3742    }
3743
3744    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdvertisingData {
3745        #[inline(always)]
3746        fn new_empty() -> Self {
3747            Self::default()
3748        }
3749
3750        unsafe fn decode(
3751            &mut self,
3752            decoder: &mut fidl::encoding::Decoder<'_, D>,
3753            offset: usize,
3754            mut depth: fidl::encoding::Depth,
3755        ) -> fidl::Result<()> {
3756            decoder.debug_check_bounds::<Self>(offset);
3757            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3758                None => return Err(fidl::Error::NotNullable),
3759                Some(len) => len,
3760            };
3761            // Calling decoder.out_of_line_offset(0) is not allowed.
3762            if len == 0 {
3763                return Ok(());
3764            };
3765            depth.increment()?;
3766            let envelope_size = 8;
3767            let bytes_len = len * envelope_size;
3768            let offset = decoder.out_of_line_offset(bytes_len)?;
3769            // Decode the envelope for each type.
3770            let mut _next_ordinal_to_read = 0;
3771            let mut next_offset = offset;
3772            let end_offset = offset + bytes_len;
3773            _next_ordinal_to_read += 1;
3774            if next_offset >= end_offset {
3775                return Ok(());
3776            }
3777
3778            // Decode unknown envelopes for gaps in ordinals.
3779            while _next_ordinal_to_read < 1 {
3780                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3781                _next_ordinal_to_read += 1;
3782                next_offset += envelope_size;
3783            }
3784
3785            let next_out_of_line = decoder.next_out_of_line();
3786            let handles_before = decoder.remaining_handles();
3787            if let Some((inlined, num_bytes, num_handles)) =
3788                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3789            {
3790                let member_inline_size =
3791                    <fidl::encoding::Vector<u8, 31> as fidl::encoding::TypeMarker>::inline_size(
3792                        decoder.context,
3793                    );
3794                if inlined != (member_inline_size <= 4) {
3795                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3796                }
3797                let inner_offset;
3798                let mut inner_depth = depth.clone();
3799                if inlined {
3800                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3801                    inner_offset = next_offset;
3802                } else {
3803                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3804                    inner_depth.increment()?;
3805                }
3806                let val_ref = self
3807                    .data
3808                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 31>, D));
3809                fidl::decode!(fidl::encoding::Vector<u8, 31>, D, val_ref, decoder, inner_offset, inner_depth)?;
3810                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3811                {
3812                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3813                }
3814                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3815                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3816                }
3817            }
3818
3819            next_offset += envelope_size;
3820
3821            // Decode the remaining unknown envelopes.
3822            while next_offset < end_offset {
3823                _next_ordinal_to_read += 1;
3824                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3825                next_offset += envelope_size;
3826            }
3827
3828            Ok(())
3829        }
3830    }
3831
3832    impl AndroidVendorSupport {
3833        #[inline(always)]
3834        fn max_ordinal_present(&self) -> u64 {
3835            if let Some(_) = self.minor_version {
3836                return 2;
3837            }
3838            if let Some(_) = self.major_version {
3839                return 1;
3840            }
3841            0
3842        }
3843    }
3844
3845    impl fidl::encoding::ValueTypeMarker for AndroidVendorSupport {
3846        type Borrowed<'a> = &'a Self;
3847        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3848            value
3849        }
3850    }
3851
3852    unsafe impl fidl::encoding::TypeMarker for AndroidVendorSupport {
3853        type Owned = Self;
3854
3855        #[inline(always)]
3856        fn inline_align(_context: fidl::encoding::Context) -> usize {
3857            8
3858        }
3859
3860        #[inline(always)]
3861        fn inline_size(_context: fidl::encoding::Context) -> usize {
3862            16
3863        }
3864    }
3865
3866    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AndroidVendorSupport, D>
3867        for &AndroidVendorSupport
3868    {
3869        unsafe fn encode(
3870            self,
3871            encoder: &mut fidl::encoding::Encoder<'_, D>,
3872            offset: usize,
3873            mut depth: fidl::encoding::Depth,
3874        ) -> fidl::Result<()> {
3875            encoder.debug_check_bounds::<AndroidVendorSupport>(offset);
3876            // Vector header
3877            let max_ordinal: u64 = self.max_ordinal_present();
3878            encoder.write_num(max_ordinal, offset);
3879            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3880            // Calling encoder.out_of_line_offset(0) is not allowed.
3881            if max_ordinal == 0 {
3882                return Ok(());
3883            }
3884            depth.increment()?;
3885            let envelope_size = 8;
3886            let bytes_len = max_ordinal as usize * envelope_size;
3887            #[allow(unused_variables)]
3888            let offset = encoder.out_of_line_offset(bytes_len);
3889            let mut _prev_end_offset: usize = 0;
3890            if 1 > max_ordinal {
3891                return Ok(());
3892            }
3893
3894            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3895            // are envelope_size bytes.
3896            let cur_offset: usize = (1 - 1) * envelope_size;
3897
3898            // Zero reserved fields.
3899            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3900
3901            // Safety:
3902            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3903            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3904            //   envelope_size bytes, there is always sufficient room.
3905            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3906                self.major_version.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3907                encoder,
3908                offset + cur_offset,
3909                depth,
3910            )?;
3911
3912            _prev_end_offset = cur_offset + envelope_size;
3913            if 2 > max_ordinal {
3914                return Ok(());
3915            }
3916
3917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3918            // are envelope_size bytes.
3919            let cur_offset: usize = (2 - 1) * envelope_size;
3920
3921            // Zero reserved fields.
3922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3923
3924            // Safety:
3925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3927            //   envelope_size bytes, there is always sufficient room.
3928            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3929                self.minor_version.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3930                encoder,
3931                offset + cur_offset,
3932                depth,
3933            )?;
3934
3935            _prev_end_offset = cur_offset + envelope_size;
3936
3937            Ok(())
3938        }
3939    }
3940
3941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AndroidVendorSupport {
3942        #[inline(always)]
3943        fn new_empty() -> Self {
3944            Self::default()
3945        }
3946
3947        unsafe fn decode(
3948            &mut self,
3949            decoder: &mut fidl::encoding::Decoder<'_, D>,
3950            offset: usize,
3951            mut depth: fidl::encoding::Depth,
3952        ) -> fidl::Result<()> {
3953            decoder.debug_check_bounds::<Self>(offset);
3954            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3955                None => return Err(fidl::Error::NotNullable),
3956                Some(len) => len,
3957            };
3958            // Calling decoder.out_of_line_offset(0) is not allowed.
3959            if len == 0 {
3960                return Ok(());
3961            };
3962            depth.increment()?;
3963            let envelope_size = 8;
3964            let bytes_len = len * envelope_size;
3965            let offset = decoder.out_of_line_offset(bytes_len)?;
3966            // Decode the envelope for each type.
3967            let mut _next_ordinal_to_read = 0;
3968            let mut next_offset = offset;
3969            let end_offset = offset + bytes_len;
3970            _next_ordinal_to_read += 1;
3971            if next_offset >= end_offset {
3972                return Ok(());
3973            }
3974
3975            // Decode unknown envelopes for gaps in ordinals.
3976            while _next_ordinal_to_read < 1 {
3977                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3978                _next_ordinal_to_read += 1;
3979                next_offset += envelope_size;
3980            }
3981
3982            let next_out_of_line = decoder.next_out_of_line();
3983            let handles_before = decoder.remaining_handles();
3984            if let Some((inlined, num_bytes, num_handles)) =
3985                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3986            {
3987                let member_inline_size =
3988                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3989                if inlined != (member_inline_size <= 4) {
3990                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3991                }
3992                let inner_offset;
3993                let mut inner_depth = depth.clone();
3994                if inlined {
3995                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3996                    inner_offset = next_offset;
3997                } else {
3998                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3999                    inner_depth.increment()?;
4000                }
4001                let val_ref = self.major_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
4002                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4003                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4004                {
4005                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4006                }
4007                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4008                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4009                }
4010            }
4011
4012            next_offset += envelope_size;
4013            _next_ordinal_to_read += 1;
4014            if next_offset >= end_offset {
4015                return Ok(());
4016            }
4017
4018            // Decode unknown envelopes for gaps in ordinals.
4019            while _next_ordinal_to_read < 2 {
4020                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4021                _next_ordinal_to_read += 1;
4022                next_offset += envelope_size;
4023            }
4024
4025            let next_out_of_line = decoder.next_out_of_line();
4026            let handles_before = decoder.remaining_handles();
4027            if let Some((inlined, num_bytes, num_handles)) =
4028                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4029            {
4030                let member_inline_size =
4031                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4032                if inlined != (member_inline_size <= 4) {
4033                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4034                }
4035                let inner_offset;
4036                let mut inner_depth = depth.clone();
4037                if inlined {
4038                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4039                    inner_offset = next_offset;
4040                } else {
4041                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4042                    inner_depth.increment()?;
4043                }
4044                let val_ref = self.minor_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
4045                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4046                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4047                {
4048                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4049                }
4050                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4051                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4052                }
4053            }
4054
4055            next_offset += envelope_size;
4056
4057            // Decode the remaining unknown envelopes.
4058            while next_offset < end_offset {
4059                _next_ordinal_to_read += 1;
4060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4061                next_offset += envelope_size;
4062            }
4063
4064            Ok(())
4065        }
4066    }
4067
4068    impl AudioOffloadSettings {
4069        #[inline(always)]
4070        fn max_ordinal_present(&self) -> u64 {
4071            if let Some(_) = self.sco_offload_index {
4072                return 1;
4073            }
4074            0
4075        }
4076    }
4077
4078    impl fidl::encoding::ValueTypeMarker for AudioOffloadSettings {
4079        type Borrowed<'a> = &'a Self;
4080        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4081            value
4082        }
4083    }
4084
4085    unsafe impl fidl::encoding::TypeMarker for AudioOffloadSettings {
4086        type Owned = Self;
4087
4088        #[inline(always)]
4089        fn inline_align(_context: fidl::encoding::Context) -> usize {
4090            8
4091        }
4092
4093        #[inline(always)]
4094        fn inline_size(_context: fidl::encoding::Context) -> usize {
4095            16
4096        }
4097    }
4098
4099    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioOffloadSettings, D>
4100        for &AudioOffloadSettings
4101    {
4102        unsafe fn encode(
4103            self,
4104            encoder: &mut fidl::encoding::Encoder<'_, D>,
4105            offset: usize,
4106            mut depth: fidl::encoding::Depth,
4107        ) -> fidl::Result<()> {
4108            encoder.debug_check_bounds::<AudioOffloadSettings>(offset);
4109            // Vector header
4110            let max_ordinal: u64 = self.max_ordinal_present();
4111            encoder.write_num(max_ordinal, offset);
4112            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4113            // Calling encoder.out_of_line_offset(0) is not allowed.
4114            if max_ordinal == 0 {
4115                return Ok(());
4116            }
4117            depth.increment()?;
4118            let envelope_size = 8;
4119            let bytes_len = max_ordinal as usize * envelope_size;
4120            #[allow(unused_variables)]
4121            let offset = encoder.out_of_line_offset(bytes_len);
4122            let mut _prev_end_offset: usize = 0;
4123            if 1 > max_ordinal {
4124                return Ok(());
4125            }
4126
4127            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4128            // are envelope_size bytes.
4129            let cur_offset: usize = (1 - 1) * envelope_size;
4130
4131            // Zero reserved fields.
4132            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4133
4134            // Safety:
4135            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4136            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4137            //   envelope_size bytes, there is always sufficient room.
4138            fidl::encoding::encode_in_envelope_optional::<u8, D>(
4139                self.sco_offload_index
4140                    .as_ref()
4141                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
4142                encoder,
4143                offset + cur_offset,
4144                depth,
4145            )?;
4146
4147            _prev_end_offset = cur_offset + envelope_size;
4148
4149            Ok(())
4150        }
4151    }
4152
4153    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioOffloadSettings {
4154        #[inline(always)]
4155        fn new_empty() -> Self {
4156            Self::default()
4157        }
4158
4159        unsafe fn decode(
4160            &mut self,
4161            decoder: &mut fidl::encoding::Decoder<'_, D>,
4162            offset: usize,
4163            mut depth: fidl::encoding::Depth,
4164        ) -> fidl::Result<()> {
4165            decoder.debug_check_bounds::<Self>(offset);
4166            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4167                None => return Err(fidl::Error::NotNullable),
4168                Some(len) => len,
4169            };
4170            // Calling decoder.out_of_line_offset(0) is not allowed.
4171            if len == 0 {
4172                return Ok(());
4173            };
4174            depth.increment()?;
4175            let envelope_size = 8;
4176            let bytes_len = len * envelope_size;
4177            let offset = decoder.out_of_line_offset(bytes_len)?;
4178            // Decode the envelope for each type.
4179            let mut _next_ordinal_to_read = 0;
4180            let mut next_offset = offset;
4181            let end_offset = offset + bytes_len;
4182            _next_ordinal_to_read += 1;
4183            if next_offset >= end_offset {
4184                return Ok(());
4185            }
4186
4187            // Decode unknown envelopes for gaps in ordinals.
4188            while _next_ordinal_to_read < 1 {
4189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4190                _next_ordinal_to_read += 1;
4191                next_offset += envelope_size;
4192            }
4193
4194            let next_out_of_line = decoder.next_out_of_line();
4195            let handles_before = decoder.remaining_handles();
4196            if let Some((inlined, num_bytes, num_handles)) =
4197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4198            {
4199                let member_inline_size =
4200                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4201                if inlined != (member_inline_size <= 4) {
4202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4203                }
4204                let inner_offset;
4205                let mut inner_depth = depth.clone();
4206                if inlined {
4207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4208                    inner_offset = next_offset;
4209                } else {
4210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4211                    inner_depth.increment()?;
4212                }
4213                let val_ref = self.sco_offload_index.get_or_insert_with(|| fidl::new_empty!(u8, D));
4214                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4215                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4216                {
4217                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4218                }
4219                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4220                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4221                }
4222            }
4223
4224            next_offset += envelope_size;
4225
4226            // Decode the remaining unknown envelopes.
4227            while next_offset < end_offset {
4228                _next_ordinal_to_read += 1;
4229                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4230                next_offset += envelope_size;
4231            }
4232
4233            Ok(())
4234        }
4235    }
4236
4237    impl ControllerParameters {
4238        #[inline(always)]
4239        fn max_ordinal_present(&self) -> u64 {
4240            if let Some(_) = self.device_class {
4241                return 2;
4242            }
4243            if let Some(_) = self.local_name {
4244                return 1;
4245            }
4246            0
4247        }
4248    }
4249
4250    impl fidl::encoding::ValueTypeMarker for ControllerParameters {
4251        type Borrowed<'a> = &'a Self;
4252        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4253            value
4254        }
4255    }
4256
4257    unsafe impl fidl::encoding::TypeMarker for ControllerParameters {
4258        type Owned = Self;
4259
4260        #[inline(always)]
4261        fn inline_align(_context: fidl::encoding::Context) -> usize {
4262            8
4263        }
4264
4265        #[inline(always)]
4266        fn inline_size(_context: fidl::encoding::Context) -> usize {
4267            16
4268        }
4269    }
4270
4271    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ControllerParameters, D>
4272        for &ControllerParameters
4273    {
4274        unsafe fn encode(
4275            self,
4276            encoder: &mut fidl::encoding::Encoder<'_, D>,
4277            offset: usize,
4278            mut depth: fidl::encoding::Depth,
4279        ) -> fidl::Result<()> {
4280            encoder.debug_check_bounds::<ControllerParameters>(offset);
4281            // Vector header
4282            let max_ordinal: u64 = self.max_ordinal_present();
4283            encoder.write_num(max_ordinal, offset);
4284            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4285            // Calling encoder.out_of_line_offset(0) is not allowed.
4286            if max_ordinal == 0 {
4287                return Ok(());
4288            }
4289            depth.increment()?;
4290            let envelope_size = 8;
4291            let bytes_len = max_ordinal as usize * envelope_size;
4292            #[allow(unused_variables)]
4293            let offset = encoder.out_of_line_offset(bytes_len);
4294            let mut _prev_end_offset: usize = 0;
4295            if 1 > max_ordinal {
4296                return Ok(());
4297            }
4298
4299            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4300            // are envelope_size bytes.
4301            let cur_offset: usize = (1 - 1) * envelope_size;
4302
4303            // Zero reserved fields.
4304            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4305
4306            // Safety:
4307            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4308            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4309            //   envelope_size bytes, there is always sufficient room.
4310            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<248>, D>(
4311                self.local_name.as_ref().map(
4312                    <fidl::encoding::BoundedString<248> as fidl::encoding::ValueTypeMarker>::borrow,
4313                ),
4314                encoder,
4315                offset + cur_offset,
4316                depth,
4317            )?;
4318
4319            _prev_end_offset = cur_offset + envelope_size;
4320            if 2 > max_ordinal {
4321                return Ok(());
4322            }
4323
4324            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4325            // are envelope_size bytes.
4326            let cur_offset: usize = (2 - 1) * envelope_size;
4327
4328            // Zero reserved fields.
4329            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4330
4331            // Safety:
4332            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4333            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4334            //   envelope_size bytes, there is always sufficient room.
4335            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::DeviceClass, D>(
4336            self.device_class.as_ref().map(<fidl_fuchsia_bluetooth__common::DeviceClass as fidl::encoding::ValueTypeMarker>::borrow),
4337            encoder, offset + cur_offset, depth
4338        )?;
4339
4340            _prev_end_offset = cur_offset + envelope_size;
4341
4342            Ok(())
4343        }
4344    }
4345
4346    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ControllerParameters {
4347        #[inline(always)]
4348        fn new_empty() -> Self {
4349            Self::default()
4350        }
4351
4352        unsafe fn decode(
4353            &mut self,
4354            decoder: &mut fidl::encoding::Decoder<'_, D>,
4355            offset: usize,
4356            mut depth: fidl::encoding::Depth,
4357        ) -> fidl::Result<()> {
4358            decoder.debug_check_bounds::<Self>(offset);
4359            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4360                None => return Err(fidl::Error::NotNullable),
4361                Some(len) => len,
4362            };
4363            // Calling decoder.out_of_line_offset(0) is not allowed.
4364            if len == 0 {
4365                return Ok(());
4366            };
4367            depth.increment()?;
4368            let envelope_size = 8;
4369            let bytes_len = len * envelope_size;
4370            let offset = decoder.out_of_line_offset(bytes_len)?;
4371            // Decode the envelope for each type.
4372            let mut _next_ordinal_to_read = 0;
4373            let mut next_offset = offset;
4374            let end_offset = offset + bytes_len;
4375            _next_ordinal_to_read += 1;
4376            if next_offset >= end_offset {
4377                return Ok(());
4378            }
4379
4380            // Decode unknown envelopes for gaps in ordinals.
4381            while _next_ordinal_to_read < 1 {
4382                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4383                _next_ordinal_to_read += 1;
4384                next_offset += envelope_size;
4385            }
4386
4387            let next_out_of_line = decoder.next_out_of_line();
4388            let handles_before = decoder.remaining_handles();
4389            if let Some((inlined, num_bytes, num_handles)) =
4390                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4391            {
4392                let member_inline_size =
4393                    <fidl::encoding::BoundedString<248> as fidl::encoding::TypeMarker>::inline_size(
4394                        decoder.context,
4395                    );
4396                if inlined != (member_inline_size <= 4) {
4397                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4398                }
4399                let inner_offset;
4400                let mut inner_depth = depth.clone();
4401                if inlined {
4402                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4403                    inner_offset = next_offset;
4404                } else {
4405                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4406                    inner_depth.increment()?;
4407                }
4408                let val_ref = self
4409                    .local_name
4410                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<248>, D));
4411                fidl::decode!(
4412                    fidl::encoding::BoundedString<248>,
4413                    D,
4414                    val_ref,
4415                    decoder,
4416                    inner_offset,
4417                    inner_depth
4418                )?;
4419                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4420                {
4421                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4422                }
4423                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4424                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4425                }
4426            }
4427
4428            next_offset += envelope_size;
4429            _next_ordinal_to_read += 1;
4430            if next_offset >= end_offset {
4431                return Ok(());
4432            }
4433
4434            // Decode unknown envelopes for gaps in ordinals.
4435            while _next_ordinal_to_read < 2 {
4436                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4437                _next_ordinal_to_read += 1;
4438                next_offset += envelope_size;
4439            }
4440
4441            let next_out_of_line = decoder.next_out_of_line();
4442            let handles_before = decoder.remaining_handles();
4443            if let Some((inlined, num_bytes, num_handles)) =
4444                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4445            {
4446                let member_inline_size = <fidl_fuchsia_bluetooth__common::DeviceClass as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4447                if inlined != (member_inline_size <= 4) {
4448                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4449                }
4450                let inner_offset;
4451                let mut inner_depth = depth.clone();
4452                if inlined {
4453                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4454                    inner_offset = next_offset;
4455                } else {
4456                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4457                    inner_depth.increment()?;
4458                }
4459                let val_ref = self.device_class.get_or_insert_with(|| {
4460                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::DeviceClass, D)
4461                });
4462                fidl::decode!(
4463                    fidl_fuchsia_bluetooth__common::DeviceClass,
4464                    D,
4465                    val_ref,
4466                    decoder,
4467                    inner_offset,
4468                    inner_depth
4469                )?;
4470                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4471                {
4472                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4473                }
4474                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4475                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4476                }
4477            }
4478
4479            next_offset += envelope_size;
4480
4481            // Decode the remaining unknown envelopes.
4482            while next_offset < end_offset {
4483                _next_ordinal_to_read += 1;
4484                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4485                next_offset += envelope_size;
4486            }
4487
4488            Ok(())
4489        }
4490    }
4491
4492    impl EmulatorSettings {
4493        #[inline(always)]
4494        fn max_ordinal_present(&self) -> u64 {
4495            if let Some(_) = self.le_acl_buffer_settings {
4496                return 5;
4497            }
4498            if let Some(_) = self.acl_buffer_settings {
4499                return 4;
4500            }
4501            if let Some(_) = self.extended_advertising {
4502                return 3;
4503            }
4504            if let Some(_) = self.hci_config {
4505                return 2;
4506            }
4507            if let Some(_) = self.address {
4508                return 1;
4509            }
4510            0
4511        }
4512    }
4513
4514    impl fidl::encoding::ValueTypeMarker for EmulatorSettings {
4515        type Borrowed<'a> = &'a Self;
4516        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4517            value
4518        }
4519    }
4520
4521    unsafe impl fidl::encoding::TypeMarker for EmulatorSettings {
4522        type Owned = Self;
4523
4524        #[inline(always)]
4525        fn inline_align(_context: fidl::encoding::Context) -> usize {
4526            8
4527        }
4528
4529        #[inline(always)]
4530        fn inline_size(_context: fidl::encoding::Context) -> usize {
4531            16
4532        }
4533    }
4534
4535    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<EmulatorSettings, D>
4536        for &EmulatorSettings
4537    {
4538        unsafe fn encode(
4539            self,
4540            encoder: &mut fidl::encoding::Encoder<'_, D>,
4541            offset: usize,
4542            mut depth: fidl::encoding::Depth,
4543        ) -> fidl::Result<()> {
4544            encoder.debug_check_bounds::<EmulatorSettings>(offset);
4545            // Vector header
4546            let max_ordinal: u64 = self.max_ordinal_present();
4547            encoder.write_num(max_ordinal, offset);
4548            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4549            // Calling encoder.out_of_line_offset(0) is not allowed.
4550            if max_ordinal == 0 {
4551                return Ok(());
4552            }
4553            depth.increment()?;
4554            let envelope_size = 8;
4555            let bytes_len = max_ordinal as usize * envelope_size;
4556            #[allow(unused_variables)]
4557            let offset = encoder.out_of_line_offset(bytes_len);
4558            let mut _prev_end_offset: usize = 0;
4559            if 1 > max_ordinal {
4560                return Ok(());
4561            }
4562
4563            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4564            // are envelope_size bytes.
4565            let cur_offset: usize = (1 - 1) * envelope_size;
4566
4567            // Zero reserved fields.
4568            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4569
4570            // Safety:
4571            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4572            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4573            //   envelope_size bytes, there is always sufficient room.
4574            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Address, D>(
4575            self.address.as_ref().map(<fidl_fuchsia_bluetooth__common::Address as fidl::encoding::ValueTypeMarker>::borrow),
4576            encoder, offset + cur_offset, depth
4577        )?;
4578
4579            _prev_end_offset = cur_offset + envelope_size;
4580            if 2 > max_ordinal {
4581                return Ok(());
4582            }
4583
4584            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4585            // are envelope_size bytes.
4586            let cur_offset: usize = (2 - 1) * envelope_size;
4587
4588            // Zero reserved fields.
4589            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4590
4591            // Safety:
4592            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4593            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4594            //   envelope_size bytes, there is always sufficient room.
4595            fidl::encoding::encode_in_envelope_optional::<HciConfig, D>(
4596                self.hci_config
4597                    .as_ref()
4598                    .map(<HciConfig as fidl::encoding::ValueTypeMarker>::borrow),
4599                encoder,
4600                offset + cur_offset,
4601                depth,
4602            )?;
4603
4604            _prev_end_offset = cur_offset + envelope_size;
4605            if 3 > max_ordinal {
4606                return Ok(());
4607            }
4608
4609            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4610            // are envelope_size bytes.
4611            let cur_offset: usize = (3 - 1) * envelope_size;
4612
4613            // Zero reserved fields.
4614            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4615
4616            // Safety:
4617            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4618            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4619            //   envelope_size bytes, there is always sufficient room.
4620            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4621                self.extended_advertising
4622                    .as_ref()
4623                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4624                encoder,
4625                offset + cur_offset,
4626                depth,
4627            )?;
4628
4629            _prev_end_offset = cur_offset + envelope_size;
4630            if 4 > max_ordinal {
4631                return Ok(());
4632            }
4633
4634            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4635            // are envelope_size bytes.
4636            let cur_offset: usize = (4 - 1) * envelope_size;
4637
4638            // Zero reserved fields.
4639            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4640
4641            // Safety:
4642            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4643            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4644            //   envelope_size bytes, there is always sufficient room.
4645            fidl::encoding::encode_in_envelope_optional::<AclBufferSettings, D>(
4646                self.acl_buffer_settings
4647                    .as_ref()
4648                    .map(<AclBufferSettings as fidl::encoding::ValueTypeMarker>::borrow),
4649                encoder,
4650                offset + cur_offset,
4651                depth,
4652            )?;
4653
4654            _prev_end_offset = cur_offset + envelope_size;
4655            if 5 > max_ordinal {
4656                return Ok(());
4657            }
4658
4659            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4660            // are envelope_size bytes.
4661            let cur_offset: usize = (5 - 1) * envelope_size;
4662
4663            // Zero reserved fields.
4664            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4665
4666            // Safety:
4667            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4668            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4669            //   envelope_size bytes, there is always sufficient room.
4670            fidl::encoding::encode_in_envelope_optional::<AclBufferSettings, D>(
4671                self.le_acl_buffer_settings
4672                    .as_ref()
4673                    .map(<AclBufferSettings as fidl::encoding::ValueTypeMarker>::borrow),
4674                encoder,
4675                offset + cur_offset,
4676                depth,
4677            )?;
4678
4679            _prev_end_offset = cur_offset + envelope_size;
4680
4681            Ok(())
4682        }
4683    }
4684
4685    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EmulatorSettings {
4686        #[inline(always)]
4687        fn new_empty() -> Self {
4688            Self::default()
4689        }
4690
4691        unsafe fn decode(
4692            &mut self,
4693            decoder: &mut fidl::encoding::Decoder<'_, D>,
4694            offset: usize,
4695            mut depth: fidl::encoding::Depth,
4696        ) -> fidl::Result<()> {
4697            decoder.debug_check_bounds::<Self>(offset);
4698            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4699                None => return Err(fidl::Error::NotNullable),
4700                Some(len) => len,
4701            };
4702            // Calling decoder.out_of_line_offset(0) is not allowed.
4703            if len == 0 {
4704                return Ok(());
4705            };
4706            depth.increment()?;
4707            let envelope_size = 8;
4708            let bytes_len = len * envelope_size;
4709            let offset = decoder.out_of_line_offset(bytes_len)?;
4710            // Decode the envelope for each type.
4711            let mut _next_ordinal_to_read = 0;
4712            let mut next_offset = offset;
4713            let end_offset = offset + bytes_len;
4714            _next_ordinal_to_read += 1;
4715            if next_offset >= end_offset {
4716                return Ok(());
4717            }
4718
4719            // Decode unknown envelopes for gaps in ordinals.
4720            while _next_ordinal_to_read < 1 {
4721                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4722                _next_ordinal_to_read += 1;
4723                next_offset += envelope_size;
4724            }
4725
4726            let next_out_of_line = decoder.next_out_of_line();
4727            let handles_before = decoder.remaining_handles();
4728            if let Some((inlined, num_bytes, num_handles)) =
4729                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4730            {
4731                let member_inline_size = <fidl_fuchsia_bluetooth__common::Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4732                if inlined != (member_inline_size <= 4) {
4733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4734                }
4735                let inner_offset;
4736                let mut inner_depth = depth.clone();
4737                if inlined {
4738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4739                    inner_offset = next_offset;
4740                } else {
4741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4742                    inner_depth.increment()?;
4743                }
4744                let val_ref = self.address.get_or_insert_with(|| {
4745                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Address, D)
4746                });
4747                fidl::decode!(
4748                    fidl_fuchsia_bluetooth__common::Address,
4749                    D,
4750                    val_ref,
4751                    decoder,
4752                    inner_offset,
4753                    inner_depth
4754                )?;
4755                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4756                {
4757                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4758                }
4759                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4760                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4761                }
4762            }
4763
4764            next_offset += envelope_size;
4765            _next_ordinal_to_read += 1;
4766            if next_offset >= end_offset {
4767                return Ok(());
4768            }
4769
4770            // Decode unknown envelopes for gaps in ordinals.
4771            while _next_ordinal_to_read < 2 {
4772                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4773                _next_ordinal_to_read += 1;
4774                next_offset += envelope_size;
4775            }
4776
4777            let next_out_of_line = decoder.next_out_of_line();
4778            let handles_before = decoder.remaining_handles();
4779            if let Some((inlined, num_bytes, num_handles)) =
4780                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4781            {
4782                let member_inline_size =
4783                    <HciConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4784                if inlined != (member_inline_size <= 4) {
4785                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4786                }
4787                let inner_offset;
4788                let mut inner_depth = depth.clone();
4789                if inlined {
4790                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4791                    inner_offset = next_offset;
4792                } else {
4793                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4794                    inner_depth.increment()?;
4795                }
4796                let val_ref = self.hci_config.get_or_insert_with(|| fidl::new_empty!(HciConfig, D));
4797                fidl::decode!(HciConfig, D, val_ref, decoder, inner_offset, inner_depth)?;
4798                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4799                {
4800                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4801                }
4802                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4803                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4804                }
4805            }
4806
4807            next_offset += envelope_size;
4808            _next_ordinal_to_read += 1;
4809            if next_offset >= end_offset {
4810                return Ok(());
4811            }
4812
4813            // Decode unknown envelopes for gaps in ordinals.
4814            while _next_ordinal_to_read < 3 {
4815                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4816                _next_ordinal_to_read += 1;
4817                next_offset += envelope_size;
4818            }
4819
4820            let next_out_of_line = decoder.next_out_of_line();
4821            let handles_before = decoder.remaining_handles();
4822            if let Some((inlined, num_bytes, num_handles)) =
4823                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4824            {
4825                let member_inline_size =
4826                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4827                if inlined != (member_inline_size <= 4) {
4828                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4829                }
4830                let inner_offset;
4831                let mut inner_depth = depth.clone();
4832                if inlined {
4833                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4834                    inner_offset = next_offset;
4835                } else {
4836                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4837                    inner_depth.increment()?;
4838                }
4839                let val_ref =
4840                    self.extended_advertising.get_or_insert_with(|| fidl::new_empty!(bool, D));
4841                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4842                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4843                {
4844                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4845                }
4846                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4847                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4848                }
4849            }
4850
4851            next_offset += envelope_size;
4852            _next_ordinal_to_read += 1;
4853            if next_offset >= end_offset {
4854                return Ok(());
4855            }
4856
4857            // Decode unknown envelopes for gaps in ordinals.
4858            while _next_ordinal_to_read < 4 {
4859                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4860                _next_ordinal_to_read += 1;
4861                next_offset += envelope_size;
4862            }
4863
4864            let next_out_of_line = decoder.next_out_of_line();
4865            let handles_before = decoder.remaining_handles();
4866            if let Some((inlined, num_bytes, num_handles)) =
4867                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4868            {
4869                let member_inline_size =
4870                    <AclBufferSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4871                if inlined != (member_inline_size <= 4) {
4872                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4873                }
4874                let inner_offset;
4875                let mut inner_depth = depth.clone();
4876                if inlined {
4877                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4878                    inner_offset = next_offset;
4879                } else {
4880                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4881                    inner_depth.increment()?;
4882                }
4883                let val_ref = self
4884                    .acl_buffer_settings
4885                    .get_or_insert_with(|| fidl::new_empty!(AclBufferSettings, D));
4886                fidl::decode!(AclBufferSettings, D, val_ref, decoder, inner_offset, inner_depth)?;
4887                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4888                {
4889                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4890                }
4891                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4892                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4893                }
4894            }
4895
4896            next_offset += envelope_size;
4897            _next_ordinal_to_read += 1;
4898            if next_offset >= end_offset {
4899                return Ok(());
4900            }
4901
4902            // Decode unknown envelopes for gaps in ordinals.
4903            while _next_ordinal_to_read < 5 {
4904                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4905                _next_ordinal_to_read += 1;
4906                next_offset += envelope_size;
4907            }
4908
4909            let next_out_of_line = decoder.next_out_of_line();
4910            let handles_before = decoder.remaining_handles();
4911            if let Some((inlined, num_bytes, num_handles)) =
4912                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4913            {
4914                let member_inline_size =
4915                    <AclBufferSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4916                if inlined != (member_inline_size <= 4) {
4917                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4918                }
4919                let inner_offset;
4920                let mut inner_depth = depth.clone();
4921                if inlined {
4922                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4923                    inner_offset = next_offset;
4924                } else {
4925                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4926                    inner_depth.increment()?;
4927                }
4928                let val_ref = self
4929                    .le_acl_buffer_settings
4930                    .get_or_insert_with(|| fidl::new_empty!(AclBufferSettings, D));
4931                fidl::decode!(AclBufferSettings, D, val_ref, decoder, inner_offset, inner_depth)?;
4932                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4933                {
4934                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4935                }
4936                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4937                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4938                }
4939            }
4940
4941            next_offset += envelope_size;
4942
4943            // Decode the remaining unknown envelopes.
4944            while next_offset < end_offset {
4945                _next_ordinal_to_read += 1;
4946                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4947                next_offset += envelope_size;
4948            }
4949
4950            Ok(())
4951        }
4952    }
4953
4954    impl LeScanState {
4955        #[inline(always)]
4956        fn max_ordinal_present(&self) -> u64 {
4957            if let Some(_) = self.address_type {
4958                return 6;
4959            }
4960            if let Some(_) = self.filter_duplicates {
4961                return 5;
4962            }
4963            if let Some(_) = self.window {
4964                return 4;
4965            }
4966            if let Some(_) = self.interval {
4967                return 3;
4968            }
4969            if let Some(_) = self.active {
4970                return 2;
4971            }
4972            if let Some(_) = self.enabled {
4973                return 1;
4974            }
4975            0
4976        }
4977    }
4978
4979    impl fidl::encoding::ValueTypeMarker for LeScanState {
4980        type Borrowed<'a> = &'a Self;
4981        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4982            value
4983        }
4984    }
4985
4986    unsafe impl fidl::encoding::TypeMarker for LeScanState {
4987        type Owned = Self;
4988
4989        #[inline(always)]
4990        fn inline_align(_context: fidl::encoding::Context) -> usize {
4991            8
4992        }
4993
4994        #[inline(always)]
4995        fn inline_size(_context: fidl::encoding::Context) -> usize {
4996            16
4997        }
4998    }
4999
5000    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LeScanState, D>
5001        for &LeScanState
5002    {
5003        unsafe fn encode(
5004            self,
5005            encoder: &mut fidl::encoding::Encoder<'_, D>,
5006            offset: usize,
5007            mut depth: fidl::encoding::Depth,
5008        ) -> fidl::Result<()> {
5009            encoder.debug_check_bounds::<LeScanState>(offset);
5010            // Vector header
5011            let max_ordinal: u64 = self.max_ordinal_present();
5012            encoder.write_num(max_ordinal, offset);
5013            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5014            // Calling encoder.out_of_line_offset(0) is not allowed.
5015            if max_ordinal == 0 {
5016                return Ok(());
5017            }
5018            depth.increment()?;
5019            let envelope_size = 8;
5020            let bytes_len = max_ordinal as usize * envelope_size;
5021            #[allow(unused_variables)]
5022            let offset = encoder.out_of_line_offset(bytes_len);
5023            let mut _prev_end_offset: usize = 0;
5024            if 1 > max_ordinal {
5025                return Ok(());
5026            }
5027
5028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5029            // are envelope_size bytes.
5030            let cur_offset: usize = (1 - 1) * envelope_size;
5031
5032            // Zero reserved fields.
5033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5034
5035            // Safety:
5036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5038            //   envelope_size bytes, there is always sufficient room.
5039            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5040                self.enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5041                encoder,
5042                offset + cur_offset,
5043                depth,
5044            )?;
5045
5046            _prev_end_offset = cur_offset + envelope_size;
5047            if 2 > max_ordinal {
5048                return Ok(());
5049            }
5050
5051            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5052            // are envelope_size bytes.
5053            let cur_offset: usize = (2 - 1) * envelope_size;
5054
5055            // Zero reserved fields.
5056            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5057
5058            // Safety:
5059            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5060            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5061            //   envelope_size bytes, there is always sufficient room.
5062            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5063                self.active.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5064                encoder,
5065                offset + cur_offset,
5066                depth,
5067            )?;
5068
5069            _prev_end_offset = cur_offset + envelope_size;
5070            if 3 > max_ordinal {
5071                return Ok(());
5072            }
5073
5074            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5075            // are envelope_size bytes.
5076            let cur_offset: usize = (3 - 1) * envelope_size;
5077
5078            // Zero reserved fields.
5079            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5080
5081            // Safety:
5082            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5083            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5084            //   envelope_size bytes, there is always sufficient room.
5085            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5086                self.interval.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5087                encoder,
5088                offset + cur_offset,
5089                depth,
5090            )?;
5091
5092            _prev_end_offset = cur_offset + envelope_size;
5093            if 4 > max_ordinal {
5094                return Ok(());
5095            }
5096
5097            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5098            // are envelope_size bytes.
5099            let cur_offset: usize = (4 - 1) * envelope_size;
5100
5101            // Zero reserved fields.
5102            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5103
5104            // Safety:
5105            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5106            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5107            //   envelope_size bytes, there is always sufficient room.
5108            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5109                self.window.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5110                encoder,
5111                offset + cur_offset,
5112                depth,
5113            )?;
5114
5115            _prev_end_offset = cur_offset + envelope_size;
5116            if 5 > max_ordinal {
5117                return Ok(());
5118            }
5119
5120            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5121            // are envelope_size bytes.
5122            let cur_offset: usize = (5 - 1) * envelope_size;
5123
5124            // Zero reserved fields.
5125            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5126
5127            // Safety:
5128            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5129            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5130            //   envelope_size bytes, there is always sufficient room.
5131            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5132                self.filter_duplicates
5133                    .as_ref()
5134                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5135                encoder,
5136                offset + cur_offset,
5137                depth,
5138            )?;
5139
5140            _prev_end_offset = cur_offset + envelope_size;
5141            if 6 > max_ordinal {
5142                return Ok(());
5143            }
5144
5145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5146            // are envelope_size bytes.
5147            let cur_offset: usize = (6 - 1) * envelope_size;
5148
5149            // Zero reserved fields.
5150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5151
5152            // Safety:
5153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5155            //   envelope_size bytes, there is always sufficient room.
5156            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::AddressType, D>(
5157            self.address_type.as_ref().map(<fidl_fuchsia_bluetooth__common::AddressType as fidl::encoding::ValueTypeMarker>::borrow),
5158            encoder, offset + cur_offset, depth
5159        )?;
5160
5161            _prev_end_offset = cur_offset + envelope_size;
5162
5163            Ok(())
5164        }
5165    }
5166
5167    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LeScanState {
5168        #[inline(always)]
5169        fn new_empty() -> Self {
5170            Self::default()
5171        }
5172
5173        unsafe fn decode(
5174            &mut self,
5175            decoder: &mut fidl::encoding::Decoder<'_, D>,
5176            offset: usize,
5177            mut depth: fidl::encoding::Depth,
5178        ) -> fidl::Result<()> {
5179            decoder.debug_check_bounds::<Self>(offset);
5180            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5181                None => return Err(fidl::Error::NotNullable),
5182                Some(len) => len,
5183            };
5184            // Calling decoder.out_of_line_offset(0) is not allowed.
5185            if len == 0 {
5186                return Ok(());
5187            };
5188            depth.increment()?;
5189            let envelope_size = 8;
5190            let bytes_len = len * envelope_size;
5191            let offset = decoder.out_of_line_offset(bytes_len)?;
5192            // Decode the envelope for each type.
5193            let mut _next_ordinal_to_read = 0;
5194            let mut next_offset = offset;
5195            let end_offset = offset + bytes_len;
5196            _next_ordinal_to_read += 1;
5197            if next_offset >= end_offset {
5198                return Ok(());
5199            }
5200
5201            // Decode unknown envelopes for gaps in ordinals.
5202            while _next_ordinal_to_read < 1 {
5203                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5204                _next_ordinal_to_read += 1;
5205                next_offset += envelope_size;
5206            }
5207
5208            let next_out_of_line = decoder.next_out_of_line();
5209            let handles_before = decoder.remaining_handles();
5210            if let Some((inlined, num_bytes, num_handles)) =
5211                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5212            {
5213                let member_inline_size =
5214                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5215                if inlined != (member_inline_size <= 4) {
5216                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5217                }
5218                let inner_offset;
5219                let mut inner_depth = depth.clone();
5220                if inlined {
5221                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5222                    inner_offset = next_offset;
5223                } else {
5224                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5225                    inner_depth.increment()?;
5226                }
5227                let val_ref = self.enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
5228                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5229                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5230                {
5231                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5232                }
5233                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5234                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5235                }
5236            }
5237
5238            next_offset += envelope_size;
5239            _next_ordinal_to_read += 1;
5240            if next_offset >= end_offset {
5241                return Ok(());
5242            }
5243
5244            // Decode unknown envelopes for gaps in ordinals.
5245            while _next_ordinal_to_read < 2 {
5246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5247                _next_ordinal_to_read += 1;
5248                next_offset += envelope_size;
5249            }
5250
5251            let next_out_of_line = decoder.next_out_of_line();
5252            let handles_before = decoder.remaining_handles();
5253            if let Some((inlined, num_bytes, num_handles)) =
5254                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5255            {
5256                let member_inline_size =
5257                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5258                if inlined != (member_inline_size <= 4) {
5259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5260                }
5261                let inner_offset;
5262                let mut inner_depth = depth.clone();
5263                if inlined {
5264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5265                    inner_offset = next_offset;
5266                } else {
5267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5268                    inner_depth.increment()?;
5269                }
5270                let val_ref = self.active.get_or_insert_with(|| fidl::new_empty!(bool, D));
5271                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5272                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5273                {
5274                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5275                }
5276                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5277                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5278                }
5279            }
5280
5281            next_offset += envelope_size;
5282            _next_ordinal_to_read += 1;
5283            if next_offset >= end_offset {
5284                return Ok(());
5285            }
5286
5287            // Decode unknown envelopes for gaps in ordinals.
5288            while _next_ordinal_to_read < 3 {
5289                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5290                _next_ordinal_to_read += 1;
5291                next_offset += envelope_size;
5292            }
5293
5294            let next_out_of_line = decoder.next_out_of_line();
5295            let handles_before = decoder.remaining_handles();
5296            if let Some((inlined, num_bytes, num_handles)) =
5297                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5298            {
5299                let member_inline_size =
5300                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5301                if inlined != (member_inline_size <= 4) {
5302                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5303                }
5304                let inner_offset;
5305                let mut inner_depth = depth.clone();
5306                if inlined {
5307                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5308                    inner_offset = next_offset;
5309                } else {
5310                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5311                    inner_depth.increment()?;
5312                }
5313                let val_ref = self.interval.get_or_insert_with(|| fidl::new_empty!(u16, D));
5314                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5315                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5316                {
5317                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5318                }
5319                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5320                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5321                }
5322            }
5323
5324            next_offset += envelope_size;
5325            _next_ordinal_to_read += 1;
5326            if next_offset >= end_offset {
5327                return Ok(());
5328            }
5329
5330            // Decode unknown envelopes for gaps in ordinals.
5331            while _next_ordinal_to_read < 4 {
5332                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5333                _next_ordinal_to_read += 1;
5334                next_offset += envelope_size;
5335            }
5336
5337            let next_out_of_line = decoder.next_out_of_line();
5338            let handles_before = decoder.remaining_handles();
5339            if let Some((inlined, num_bytes, num_handles)) =
5340                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5341            {
5342                let member_inline_size =
5343                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5344                if inlined != (member_inline_size <= 4) {
5345                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5346                }
5347                let inner_offset;
5348                let mut inner_depth = depth.clone();
5349                if inlined {
5350                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5351                    inner_offset = next_offset;
5352                } else {
5353                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5354                    inner_depth.increment()?;
5355                }
5356                let val_ref = self.window.get_or_insert_with(|| fidl::new_empty!(u16, D));
5357                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5358                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5359                {
5360                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5361                }
5362                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5363                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5364                }
5365            }
5366
5367            next_offset += envelope_size;
5368            _next_ordinal_to_read += 1;
5369            if next_offset >= end_offset {
5370                return Ok(());
5371            }
5372
5373            // Decode unknown envelopes for gaps in ordinals.
5374            while _next_ordinal_to_read < 5 {
5375                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5376                _next_ordinal_to_read += 1;
5377                next_offset += envelope_size;
5378            }
5379
5380            let next_out_of_line = decoder.next_out_of_line();
5381            let handles_before = decoder.remaining_handles();
5382            if let Some((inlined, num_bytes, num_handles)) =
5383                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5384            {
5385                let member_inline_size =
5386                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5387                if inlined != (member_inline_size <= 4) {
5388                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5389                }
5390                let inner_offset;
5391                let mut inner_depth = depth.clone();
5392                if inlined {
5393                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5394                    inner_offset = next_offset;
5395                } else {
5396                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5397                    inner_depth.increment()?;
5398                }
5399                let val_ref =
5400                    self.filter_duplicates.get_or_insert_with(|| fidl::new_empty!(bool, D));
5401                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5402                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5403                {
5404                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5405                }
5406                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5407                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5408                }
5409            }
5410
5411            next_offset += envelope_size;
5412            _next_ordinal_to_read += 1;
5413            if next_offset >= end_offset {
5414                return Ok(());
5415            }
5416
5417            // Decode unknown envelopes for gaps in ordinals.
5418            while _next_ordinal_to_read < 6 {
5419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5420                _next_ordinal_to_read += 1;
5421                next_offset += envelope_size;
5422            }
5423
5424            let next_out_of_line = decoder.next_out_of_line();
5425            let handles_before = decoder.remaining_handles();
5426            if let Some((inlined, num_bytes, num_handles)) =
5427                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5428            {
5429                let member_inline_size = <fidl_fuchsia_bluetooth__common::AddressType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5430                if inlined != (member_inline_size <= 4) {
5431                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5432                }
5433                let inner_offset;
5434                let mut inner_depth = depth.clone();
5435                if inlined {
5436                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5437                    inner_offset = next_offset;
5438                } else {
5439                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5440                    inner_depth.increment()?;
5441                }
5442                let val_ref = self.address_type.get_or_insert_with(|| {
5443                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::AddressType, D)
5444                });
5445                fidl::decode!(
5446                    fidl_fuchsia_bluetooth__common::AddressType,
5447                    D,
5448                    val_ref,
5449                    decoder,
5450                    inner_offset,
5451                    inner_depth
5452                )?;
5453                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5454                {
5455                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5456                }
5457                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5458                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5459                }
5460            }
5461
5462            next_offset += envelope_size;
5463
5464            // Decode the remaining unknown envelopes.
5465            while next_offset < end_offset {
5466                _next_ordinal_to_read += 1;
5467                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5468                next_offset += envelope_size;
5469            }
5470
5471            Ok(())
5472        }
5473    }
5474
5475    impl LegacyAdvertisingState {
5476        #[inline(always)]
5477        fn max_ordinal_present(&self) -> u64 {
5478            if let Some(_) = self.scan_response {
5479                return 7;
5480            }
5481            if let Some(_) = self.advertising_data {
5482                return 6;
5483            }
5484            if let Some(_) = self.interval_max {
5485                return 5;
5486            }
5487            if let Some(_) = self.interval_min {
5488                return 4;
5489            }
5490            if let Some(_) = self.address_type {
5491                return 3;
5492            }
5493            if let Some(_) = self.type_ {
5494                return 2;
5495            }
5496            if let Some(_) = self.enabled {
5497                return 1;
5498            }
5499            0
5500        }
5501    }
5502
5503    impl fidl::encoding::ValueTypeMarker for LegacyAdvertisingState {
5504        type Borrowed<'a> = &'a Self;
5505        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5506            value
5507        }
5508    }
5509
5510    unsafe impl fidl::encoding::TypeMarker for LegacyAdvertisingState {
5511        type Owned = Self;
5512
5513        #[inline(always)]
5514        fn inline_align(_context: fidl::encoding::Context) -> usize {
5515            8
5516        }
5517
5518        #[inline(always)]
5519        fn inline_size(_context: fidl::encoding::Context) -> usize {
5520            16
5521        }
5522    }
5523
5524    unsafe impl<D: fidl::encoding::ResourceDialect>
5525        fidl::encoding::Encode<LegacyAdvertisingState, D> for &LegacyAdvertisingState
5526    {
5527        unsafe fn encode(
5528            self,
5529            encoder: &mut fidl::encoding::Encoder<'_, D>,
5530            offset: usize,
5531            mut depth: fidl::encoding::Depth,
5532        ) -> fidl::Result<()> {
5533            encoder.debug_check_bounds::<LegacyAdvertisingState>(offset);
5534            // Vector header
5535            let max_ordinal: u64 = self.max_ordinal_present();
5536            encoder.write_num(max_ordinal, offset);
5537            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5538            // Calling encoder.out_of_line_offset(0) is not allowed.
5539            if max_ordinal == 0 {
5540                return Ok(());
5541            }
5542            depth.increment()?;
5543            let envelope_size = 8;
5544            let bytes_len = max_ordinal as usize * envelope_size;
5545            #[allow(unused_variables)]
5546            let offset = encoder.out_of_line_offset(bytes_len);
5547            let mut _prev_end_offset: usize = 0;
5548            if 1 > max_ordinal {
5549                return Ok(());
5550            }
5551
5552            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5553            // are envelope_size bytes.
5554            let cur_offset: usize = (1 - 1) * envelope_size;
5555
5556            // Zero reserved fields.
5557            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5558
5559            // Safety:
5560            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5561            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5562            //   envelope_size bytes, there is always sufficient room.
5563            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5564                self.enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5565                encoder,
5566                offset + cur_offset,
5567                depth,
5568            )?;
5569
5570            _prev_end_offset = cur_offset + envelope_size;
5571            if 2 > max_ordinal {
5572                return Ok(());
5573            }
5574
5575            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5576            // are envelope_size bytes.
5577            let cur_offset: usize = (2 - 1) * envelope_size;
5578
5579            // Zero reserved fields.
5580            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5581
5582            // Safety:
5583            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5584            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5585            //   envelope_size bytes, there is always sufficient room.
5586            fidl::encoding::encode_in_envelope_optional::<LegacyAdvertisingType, D>(
5587                self.type_
5588                    .as_ref()
5589                    .map(<LegacyAdvertisingType as fidl::encoding::ValueTypeMarker>::borrow),
5590                encoder,
5591                offset + cur_offset,
5592                depth,
5593            )?;
5594
5595            _prev_end_offset = cur_offset + envelope_size;
5596            if 3 > max_ordinal {
5597                return Ok(());
5598            }
5599
5600            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5601            // are envelope_size bytes.
5602            let cur_offset: usize = (3 - 1) * envelope_size;
5603
5604            // Zero reserved fields.
5605            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5606
5607            // Safety:
5608            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5609            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5610            //   envelope_size bytes, there is always sufficient room.
5611            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::AddressType, D>(
5612            self.address_type.as_ref().map(<fidl_fuchsia_bluetooth__common::AddressType as fidl::encoding::ValueTypeMarker>::borrow),
5613            encoder, offset + cur_offset, depth
5614        )?;
5615
5616            _prev_end_offset = cur_offset + envelope_size;
5617            if 4 > max_ordinal {
5618                return Ok(());
5619            }
5620
5621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5622            // are envelope_size bytes.
5623            let cur_offset: usize = (4 - 1) * envelope_size;
5624
5625            // Zero reserved fields.
5626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5627
5628            // Safety:
5629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5631            //   envelope_size bytes, there is always sufficient room.
5632            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5633                self.interval_min.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5634                encoder,
5635                offset + cur_offset,
5636                depth,
5637            )?;
5638
5639            _prev_end_offset = cur_offset + envelope_size;
5640            if 5 > max_ordinal {
5641                return Ok(());
5642            }
5643
5644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5645            // are envelope_size bytes.
5646            let cur_offset: usize = (5 - 1) * envelope_size;
5647
5648            // Zero reserved fields.
5649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5650
5651            // Safety:
5652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5654            //   envelope_size bytes, there is always sufficient room.
5655            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5656                self.interval_max.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5657                encoder,
5658                offset + cur_offset,
5659                depth,
5660            )?;
5661
5662            _prev_end_offset = cur_offset + envelope_size;
5663            if 6 > max_ordinal {
5664                return Ok(());
5665            }
5666
5667            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5668            // are envelope_size bytes.
5669            let cur_offset: usize = (6 - 1) * envelope_size;
5670
5671            // Zero reserved fields.
5672            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5673
5674            // Safety:
5675            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5676            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5677            //   envelope_size bytes, there is always sufficient room.
5678            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
5679                self.advertising_data
5680                    .as_ref()
5681                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
5682                encoder,
5683                offset + cur_offset,
5684                depth,
5685            )?;
5686
5687            _prev_end_offset = cur_offset + envelope_size;
5688            if 7 > max_ordinal {
5689                return Ok(());
5690            }
5691
5692            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5693            // are envelope_size bytes.
5694            let cur_offset: usize = (7 - 1) * envelope_size;
5695
5696            // Zero reserved fields.
5697            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5698
5699            // Safety:
5700            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5701            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5702            //   envelope_size bytes, there is always sufficient room.
5703            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
5704                self.scan_response
5705                    .as_ref()
5706                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
5707                encoder,
5708                offset + cur_offset,
5709                depth,
5710            )?;
5711
5712            _prev_end_offset = cur_offset + envelope_size;
5713
5714            Ok(())
5715        }
5716    }
5717
5718    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5719        for LegacyAdvertisingState
5720    {
5721        #[inline(always)]
5722        fn new_empty() -> Self {
5723            Self::default()
5724        }
5725
5726        unsafe fn decode(
5727            &mut self,
5728            decoder: &mut fidl::encoding::Decoder<'_, D>,
5729            offset: usize,
5730            mut depth: fidl::encoding::Depth,
5731        ) -> fidl::Result<()> {
5732            decoder.debug_check_bounds::<Self>(offset);
5733            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5734                None => return Err(fidl::Error::NotNullable),
5735                Some(len) => len,
5736            };
5737            // Calling decoder.out_of_line_offset(0) is not allowed.
5738            if len == 0 {
5739                return Ok(());
5740            };
5741            depth.increment()?;
5742            let envelope_size = 8;
5743            let bytes_len = len * envelope_size;
5744            let offset = decoder.out_of_line_offset(bytes_len)?;
5745            // Decode the envelope for each type.
5746            let mut _next_ordinal_to_read = 0;
5747            let mut next_offset = offset;
5748            let end_offset = offset + bytes_len;
5749            _next_ordinal_to_read += 1;
5750            if next_offset >= end_offset {
5751                return Ok(());
5752            }
5753
5754            // Decode unknown envelopes for gaps in ordinals.
5755            while _next_ordinal_to_read < 1 {
5756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5757                _next_ordinal_to_read += 1;
5758                next_offset += envelope_size;
5759            }
5760
5761            let next_out_of_line = decoder.next_out_of_line();
5762            let handles_before = decoder.remaining_handles();
5763            if let Some((inlined, num_bytes, num_handles)) =
5764                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5765            {
5766                let member_inline_size =
5767                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5768                if inlined != (member_inline_size <= 4) {
5769                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5770                }
5771                let inner_offset;
5772                let mut inner_depth = depth.clone();
5773                if inlined {
5774                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5775                    inner_offset = next_offset;
5776                } else {
5777                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5778                    inner_depth.increment()?;
5779                }
5780                let val_ref = self.enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
5781                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5782                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5783                {
5784                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5785                }
5786                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5787                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5788                }
5789            }
5790
5791            next_offset += envelope_size;
5792            _next_ordinal_to_read += 1;
5793            if next_offset >= end_offset {
5794                return Ok(());
5795            }
5796
5797            // Decode unknown envelopes for gaps in ordinals.
5798            while _next_ordinal_to_read < 2 {
5799                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5800                _next_ordinal_to_read += 1;
5801                next_offset += envelope_size;
5802            }
5803
5804            let next_out_of_line = decoder.next_out_of_line();
5805            let handles_before = decoder.remaining_handles();
5806            if let Some((inlined, num_bytes, num_handles)) =
5807                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5808            {
5809                let member_inline_size =
5810                    <LegacyAdvertisingType as fidl::encoding::TypeMarker>::inline_size(
5811                        decoder.context,
5812                    );
5813                if inlined != (member_inline_size <= 4) {
5814                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5815                }
5816                let inner_offset;
5817                let mut inner_depth = depth.clone();
5818                if inlined {
5819                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5820                    inner_offset = next_offset;
5821                } else {
5822                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5823                    inner_depth.increment()?;
5824                }
5825                let val_ref =
5826                    self.type_.get_or_insert_with(|| fidl::new_empty!(LegacyAdvertisingType, D));
5827                fidl::decode!(
5828                    LegacyAdvertisingType,
5829                    D,
5830                    val_ref,
5831                    decoder,
5832                    inner_offset,
5833                    inner_depth
5834                )?;
5835                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5836                {
5837                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5838                }
5839                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5840                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5841                }
5842            }
5843
5844            next_offset += envelope_size;
5845            _next_ordinal_to_read += 1;
5846            if next_offset >= end_offset {
5847                return Ok(());
5848            }
5849
5850            // Decode unknown envelopes for gaps in ordinals.
5851            while _next_ordinal_to_read < 3 {
5852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5853                _next_ordinal_to_read += 1;
5854                next_offset += envelope_size;
5855            }
5856
5857            let next_out_of_line = decoder.next_out_of_line();
5858            let handles_before = decoder.remaining_handles();
5859            if let Some((inlined, num_bytes, num_handles)) =
5860                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5861            {
5862                let member_inline_size = <fidl_fuchsia_bluetooth__common::AddressType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5863                if inlined != (member_inline_size <= 4) {
5864                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5865                }
5866                let inner_offset;
5867                let mut inner_depth = depth.clone();
5868                if inlined {
5869                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5870                    inner_offset = next_offset;
5871                } else {
5872                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5873                    inner_depth.increment()?;
5874                }
5875                let val_ref = self.address_type.get_or_insert_with(|| {
5876                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::AddressType, D)
5877                });
5878                fidl::decode!(
5879                    fidl_fuchsia_bluetooth__common::AddressType,
5880                    D,
5881                    val_ref,
5882                    decoder,
5883                    inner_offset,
5884                    inner_depth
5885                )?;
5886                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5887                {
5888                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5889                }
5890                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5891                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5892                }
5893            }
5894
5895            next_offset += envelope_size;
5896            _next_ordinal_to_read += 1;
5897            if next_offset >= end_offset {
5898                return Ok(());
5899            }
5900
5901            // Decode unknown envelopes for gaps in ordinals.
5902            while _next_ordinal_to_read < 4 {
5903                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5904                _next_ordinal_to_read += 1;
5905                next_offset += envelope_size;
5906            }
5907
5908            let next_out_of_line = decoder.next_out_of_line();
5909            let handles_before = decoder.remaining_handles();
5910            if let Some((inlined, num_bytes, num_handles)) =
5911                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5912            {
5913                let member_inline_size =
5914                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5915                if inlined != (member_inline_size <= 4) {
5916                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5917                }
5918                let inner_offset;
5919                let mut inner_depth = depth.clone();
5920                if inlined {
5921                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5922                    inner_offset = next_offset;
5923                } else {
5924                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5925                    inner_depth.increment()?;
5926                }
5927                let val_ref = self.interval_min.get_or_insert_with(|| fidl::new_empty!(u16, D));
5928                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5929                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5930                {
5931                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5932                }
5933                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5934                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5935                }
5936            }
5937
5938            next_offset += envelope_size;
5939            _next_ordinal_to_read += 1;
5940            if next_offset >= end_offset {
5941                return Ok(());
5942            }
5943
5944            // Decode unknown envelopes for gaps in ordinals.
5945            while _next_ordinal_to_read < 5 {
5946                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5947                _next_ordinal_to_read += 1;
5948                next_offset += envelope_size;
5949            }
5950
5951            let next_out_of_line = decoder.next_out_of_line();
5952            let handles_before = decoder.remaining_handles();
5953            if let Some((inlined, num_bytes, num_handles)) =
5954                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5955            {
5956                let member_inline_size =
5957                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5958                if inlined != (member_inline_size <= 4) {
5959                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5960                }
5961                let inner_offset;
5962                let mut inner_depth = depth.clone();
5963                if inlined {
5964                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5965                    inner_offset = next_offset;
5966                } else {
5967                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5968                    inner_depth.increment()?;
5969                }
5970                let val_ref = self.interval_max.get_or_insert_with(|| fidl::new_empty!(u16, D));
5971                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5972                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5973                {
5974                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5975                }
5976                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5977                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5978                }
5979            }
5980
5981            next_offset += envelope_size;
5982            _next_ordinal_to_read += 1;
5983            if next_offset >= end_offset {
5984                return Ok(());
5985            }
5986
5987            // Decode unknown envelopes for gaps in ordinals.
5988            while _next_ordinal_to_read < 6 {
5989                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5990                _next_ordinal_to_read += 1;
5991                next_offset += envelope_size;
5992            }
5993
5994            let next_out_of_line = decoder.next_out_of_line();
5995            let handles_before = decoder.remaining_handles();
5996            if let Some((inlined, num_bytes, num_handles)) =
5997                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5998            {
5999                let member_inline_size =
6000                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6001                if inlined != (member_inline_size <= 4) {
6002                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6003                }
6004                let inner_offset;
6005                let mut inner_depth = depth.clone();
6006                if inlined {
6007                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6008                    inner_offset = next_offset;
6009                } else {
6010                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6011                    inner_depth.increment()?;
6012                }
6013                let val_ref = self
6014                    .advertising_data
6015                    .get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
6016                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
6017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6018                {
6019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6020                }
6021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6023                }
6024            }
6025
6026            next_offset += envelope_size;
6027            _next_ordinal_to_read += 1;
6028            if next_offset >= end_offset {
6029                return Ok(());
6030            }
6031
6032            // Decode unknown envelopes for gaps in ordinals.
6033            while _next_ordinal_to_read < 7 {
6034                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6035                _next_ordinal_to_read += 1;
6036                next_offset += envelope_size;
6037            }
6038
6039            let next_out_of_line = decoder.next_out_of_line();
6040            let handles_before = decoder.remaining_handles();
6041            if let Some((inlined, num_bytes, num_handles)) =
6042                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6043            {
6044                let member_inline_size =
6045                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6046                if inlined != (member_inline_size <= 4) {
6047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6048                }
6049                let inner_offset;
6050                let mut inner_depth = depth.clone();
6051                if inlined {
6052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6053                    inner_offset = next_offset;
6054                } else {
6055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6056                    inner_depth.increment()?;
6057                }
6058                let val_ref =
6059                    self.scan_response.get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
6060                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
6061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6062                {
6063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6064                }
6065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6067                }
6068            }
6069
6070            next_offset += envelope_size;
6071
6072            // Decode the remaining unknown envelopes.
6073            while next_offset < end_offset {
6074                _next_ordinal_to_read += 1;
6075                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6076                next_offset += envelope_size;
6077            }
6078
6079            Ok(())
6080        }
6081    }
6082
6083    impl PeerSetLeAdvertisementRequest {
6084        #[inline(always)]
6085        fn max_ordinal_present(&self) -> u64 {
6086            if let Some(_) = self.scan_response {
6087                return 3;
6088            }
6089            if let Some(_) = self.advertisement {
6090                return 2;
6091            }
6092            if let Some(_) = self.le_address {
6093                return 1;
6094            }
6095            0
6096        }
6097    }
6098
6099    impl fidl::encoding::ValueTypeMarker for PeerSetLeAdvertisementRequest {
6100        type Borrowed<'a> = &'a Self;
6101        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6102            value
6103        }
6104    }
6105
6106    unsafe impl fidl::encoding::TypeMarker for PeerSetLeAdvertisementRequest {
6107        type Owned = Self;
6108
6109        #[inline(always)]
6110        fn inline_align(_context: fidl::encoding::Context) -> usize {
6111            8
6112        }
6113
6114        #[inline(always)]
6115        fn inline_size(_context: fidl::encoding::Context) -> usize {
6116            16
6117        }
6118    }
6119
6120    unsafe impl<D: fidl::encoding::ResourceDialect>
6121        fidl::encoding::Encode<PeerSetLeAdvertisementRequest, D>
6122        for &PeerSetLeAdvertisementRequest
6123    {
6124        unsafe fn encode(
6125            self,
6126            encoder: &mut fidl::encoding::Encoder<'_, D>,
6127            offset: usize,
6128            mut depth: fidl::encoding::Depth,
6129        ) -> fidl::Result<()> {
6130            encoder.debug_check_bounds::<PeerSetLeAdvertisementRequest>(offset);
6131            // Vector header
6132            let max_ordinal: u64 = self.max_ordinal_present();
6133            encoder.write_num(max_ordinal, offset);
6134            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6135            // Calling encoder.out_of_line_offset(0) is not allowed.
6136            if max_ordinal == 0 {
6137                return Ok(());
6138            }
6139            depth.increment()?;
6140            let envelope_size = 8;
6141            let bytes_len = max_ordinal as usize * envelope_size;
6142            #[allow(unused_variables)]
6143            let offset = encoder.out_of_line_offset(bytes_len);
6144            let mut _prev_end_offset: usize = 0;
6145            if 1 > max_ordinal {
6146                return Ok(());
6147            }
6148
6149            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6150            // are envelope_size bytes.
6151            let cur_offset: usize = (1 - 1) * envelope_size;
6152
6153            // Zero reserved fields.
6154            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6155
6156            // Safety:
6157            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6158            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6159            //   envelope_size bytes, there is always sufficient room.
6160            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Address, D>(
6161            self.le_address.as_ref().map(<fidl_fuchsia_bluetooth__common::Address as fidl::encoding::ValueTypeMarker>::borrow),
6162            encoder, offset + cur_offset, depth
6163        )?;
6164
6165            _prev_end_offset = cur_offset + envelope_size;
6166            if 2 > max_ordinal {
6167                return Ok(());
6168            }
6169
6170            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6171            // are envelope_size bytes.
6172            let cur_offset: usize = (2 - 1) * envelope_size;
6173
6174            // Zero reserved fields.
6175            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6176
6177            // Safety:
6178            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6179            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6180            //   envelope_size bytes, there is always sufficient room.
6181            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
6182                self.advertisement
6183                    .as_ref()
6184                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
6185                encoder,
6186                offset + cur_offset,
6187                depth,
6188            )?;
6189
6190            _prev_end_offset = cur_offset + envelope_size;
6191            if 3 > max_ordinal {
6192                return Ok(());
6193            }
6194
6195            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6196            // are envelope_size bytes.
6197            let cur_offset: usize = (3 - 1) * envelope_size;
6198
6199            // Zero reserved fields.
6200            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6201
6202            // Safety:
6203            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6204            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6205            //   envelope_size bytes, there is always sufficient room.
6206            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
6207                self.scan_response
6208                    .as_ref()
6209                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
6210                encoder,
6211                offset + cur_offset,
6212                depth,
6213            )?;
6214
6215            _prev_end_offset = cur_offset + envelope_size;
6216
6217            Ok(())
6218        }
6219    }
6220
6221    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6222        for PeerSetLeAdvertisementRequest
6223    {
6224        #[inline(always)]
6225        fn new_empty() -> Self {
6226            Self::default()
6227        }
6228
6229        unsafe fn decode(
6230            &mut self,
6231            decoder: &mut fidl::encoding::Decoder<'_, D>,
6232            offset: usize,
6233            mut depth: fidl::encoding::Depth,
6234        ) -> fidl::Result<()> {
6235            decoder.debug_check_bounds::<Self>(offset);
6236            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6237                None => return Err(fidl::Error::NotNullable),
6238                Some(len) => len,
6239            };
6240            // Calling decoder.out_of_line_offset(0) is not allowed.
6241            if len == 0 {
6242                return Ok(());
6243            };
6244            depth.increment()?;
6245            let envelope_size = 8;
6246            let bytes_len = len * envelope_size;
6247            let offset = decoder.out_of_line_offset(bytes_len)?;
6248            // Decode the envelope for each type.
6249            let mut _next_ordinal_to_read = 0;
6250            let mut next_offset = offset;
6251            let end_offset = offset + bytes_len;
6252            _next_ordinal_to_read += 1;
6253            if next_offset >= end_offset {
6254                return Ok(());
6255            }
6256
6257            // Decode unknown envelopes for gaps in ordinals.
6258            while _next_ordinal_to_read < 1 {
6259                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6260                _next_ordinal_to_read += 1;
6261                next_offset += envelope_size;
6262            }
6263
6264            let next_out_of_line = decoder.next_out_of_line();
6265            let handles_before = decoder.remaining_handles();
6266            if let Some((inlined, num_bytes, num_handles)) =
6267                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6268            {
6269                let member_inline_size = <fidl_fuchsia_bluetooth__common::Address as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6270                if inlined != (member_inline_size <= 4) {
6271                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6272                }
6273                let inner_offset;
6274                let mut inner_depth = depth.clone();
6275                if inlined {
6276                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6277                    inner_offset = next_offset;
6278                } else {
6279                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6280                    inner_depth.increment()?;
6281                }
6282                let val_ref = self.le_address.get_or_insert_with(|| {
6283                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Address, D)
6284                });
6285                fidl::decode!(
6286                    fidl_fuchsia_bluetooth__common::Address,
6287                    D,
6288                    val_ref,
6289                    decoder,
6290                    inner_offset,
6291                    inner_depth
6292                )?;
6293                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6294                {
6295                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6296                }
6297                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6298                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6299                }
6300            }
6301
6302            next_offset += envelope_size;
6303            _next_ordinal_to_read += 1;
6304            if next_offset >= end_offset {
6305                return Ok(());
6306            }
6307
6308            // Decode unknown envelopes for gaps in ordinals.
6309            while _next_ordinal_to_read < 2 {
6310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6311                _next_ordinal_to_read += 1;
6312                next_offset += envelope_size;
6313            }
6314
6315            let next_out_of_line = decoder.next_out_of_line();
6316            let handles_before = decoder.remaining_handles();
6317            if let Some((inlined, num_bytes, num_handles)) =
6318                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6319            {
6320                let member_inline_size =
6321                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6322                if inlined != (member_inline_size <= 4) {
6323                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6324                }
6325                let inner_offset;
6326                let mut inner_depth = depth.clone();
6327                if inlined {
6328                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6329                    inner_offset = next_offset;
6330                } else {
6331                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6332                    inner_depth.increment()?;
6333                }
6334                let val_ref =
6335                    self.advertisement.get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
6336                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
6337                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6338                {
6339                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6340                }
6341                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6342                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6343                }
6344            }
6345
6346            next_offset += envelope_size;
6347            _next_ordinal_to_read += 1;
6348            if next_offset >= end_offset {
6349                return Ok(());
6350            }
6351
6352            // Decode unknown envelopes for gaps in ordinals.
6353            while _next_ordinal_to_read < 3 {
6354                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6355                _next_ordinal_to_read += 1;
6356                next_offset += envelope_size;
6357            }
6358
6359            let next_out_of_line = decoder.next_out_of_line();
6360            let handles_before = decoder.remaining_handles();
6361            if let Some((inlined, num_bytes, num_handles)) =
6362                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6363            {
6364                let member_inline_size =
6365                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6366                if inlined != (member_inline_size <= 4) {
6367                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6368                }
6369                let inner_offset;
6370                let mut inner_depth = depth.clone();
6371                if inlined {
6372                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6373                    inner_offset = next_offset;
6374                } else {
6375                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6376                    inner_depth.increment()?;
6377                }
6378                let val_ref =
6379                    self.scan_response.get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
6380                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
6381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6382                {
6383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6384                }
6385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6387                }
6388            }
6389
6390            next_offset += envelope_size;
6391
6392            // Decode the remaining unknown envelopes.
6393            while next_offset < end_offset {
6394                _next_ordinal_to_read += 1;
6395                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6396                next_offset += envelope_size;
6397            }
6398
6399            Ok(())
6400        }
6401    }
6402
6403    impl SnoopOnDroppedPacketsRequest {
6404        #[inline(always)]
6405        fn max_ordinal_present(&self) -> u64 {
6406            if let Some(_) = self.received {
6407                return 2;
6408            }
6409            if let Some(_) = self.sent {
6410                return 1;
6411            }
6412            0
6413        }
6414    }
6415
6416    impl fidl::encoding::ValueTypeMarker for SnoopOnDroppedPacketsRequest {
6417        type Borrowed<'a> = &'a Self;
6418        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6419            value
6420        }
6421    }
6422
6423    unsafe impl fidl::encoding::TypeMarker for SnoopOnDroppedPacketsRequest {
6424        type Owned = Self;
6425
6426        #[inline(always)]
6427        fn inline_align(_context: fidl::encoding::Context) -> usize {
6428            8
6429        }
6430
6431        #[inline(always)]
6432        fn inline_size(_context: fidl::encoding::Context) -> usize {
6433            16
6434        }
6435    }
6436
6437    unsafe impl<D: fidl::encoding::ResourceDialect>
6438        fidl::encoding::Encode<SnoopOnDroppedPacketsRequest, D> for &SnoopOnDroppedPacketsRequest
6439    {
6440        unsafe fn encode(
6441            self,
6442            encoder: &mut fidl::encoding::Encoder<'_, D>,
6443            offset: usize,
6444            mut depth: fidl::encoding::Depth,
6445        ) -> fidl::Result<()> {
6446            encoder.debug_check_bounds::<SnoopOnDroppedPacketsRequest>(offset);
6447            // Vector header
6448            let max_ordinal: u64 = self.max_ordinal_present();
6449            encoder.write_num(max_ordinal, offset);
6450            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6451            // Calling encoder.out_of_line_offset(0) is not allowed.
6452            if max_ordinal == 0 {
6453                return Ok(());
6454            }
6455            depth.increment()?;
6456            let envelope_size = 8;
6457            let bytes_len = max_ordinal as usize * envelope_size;
6458            #[allow(unused_variables)]
6459            let offset = encoder.out_of_line_offset(bytes_len);
6460            let mut _prev_end_offset: usize = 0;
6461            if 1 > max_ordinal {
6462                return Ok(());
6463            }
6464
6465            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6466            // are envelope_size bytes.
6467            let cur_offset: usize = (1 - 1) * envelope_size;
6468
6469            // Zero reserved fields.
6470            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6471
6472            // Safety:
6473            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6474            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6475            //   envelope_size bytes, there is always sufficient room.
6476            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6477                self.sent.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6478                encoder,
6479                offset + cur_offset,
6480                depth,
6481            )?;
6482
6483            _prev_end_offset = cur_offset + envelope_size;
6484            if 2 > max_ordinal {
6485                return Ok(());
6486            }
6487
6488            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6489            // are envelope_size bytes.
6490            let cur_offset: usize = (2 - 1) * envelope_size;
6491
6492            // Zero reserved fields.
6493            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6494
6495            // Safety:
6496            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6497            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6498            //   envelope_size bytes, there is always sufficient room.
6499            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6500                self.received.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6501                encoder,
6502                offset + cur_offset,
6503                depth,
6504            )?;
6505
6506            _prev_end_offset = cur_offset + envelope_size;
6507
6508            Ok(())
6509        }
6510    }
6511
6512    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6513        for SnoopOnDroppedPacketsRequest
6514    {
6515        #[inline(always)]
6516        fn new_empty() -> Self {
6517            Self::default()
6518        }
6519
6520        unsafe fn decode(
6521            &mut self,
6522            decoder: &mut fidl::encoding::Decoder<'_, D>,
6523            offset: usize,
6524            mut depth: fidl::encoding::Depth,
6525        ) -> fidl::Result<()> {
6526            decoder.debug_check_bounds::<Self>(offset);
6527            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6528                None => return Err(fidl::Error::NotNullable),
6529                Some(len) => len,
6530            };
6531            // Calling decoder.out_of_line_offset(0) is not allowed.
6532            if len == 0 {
6533                return Ok(());
6534            };
6535            depth.increment()?;
6536            let envelope_size = 8;
6537            let bytes_len = len * envelope_size;
6538            let offset = decoder.out_of_line_offset(bytes_len)?;
6539            // Decode the envelope for each type.
6540            let mut _next_ordinal_to_read = 0;
6541            let mut next_offset = offset;
6542            let end_offset = offset + bytes_len;
6543            _next_ordinal_to_read += 1;
6544            if next_offset >= end_offset {
6545                return Ok(());
6546            }
6547
6548            // Decode unknown envelopes for gaps in ordinals.
6549            while _next_ordinal_to_read < 1 {
6550                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6551                _next_ordinal_to_read += 1;
6552                next_offset += envelope_size;
6553            }
6554
6555            let next_out_of_line = decoder.next_out_of_line();
6556            let handles_before = decoder.remaining_handles();
6557            if let Some((inlined, num_bytes, num_handles)) =
6558                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6559            {
6560                let member_inline_size =
6561                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6562                if inlined != (member_inline_size <= 4) {
6563                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6564                }
6565                let inner_offset;
6566                let mut inner_depth = depth.clone();
6567                if inlined {
6568                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6569                    inner_offset = next_offset;
6570                } else {
6571                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6572                    inner_depth.increment()?;
6573                }
6574                let val_ref = self.sent.get_or_insert_with(|| fidl::new_empty!(u32, D));
6575                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6576                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6577                {
6578                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6579                }
6580                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6581                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6582                }
6583            }
6584
6585            next_offset += envelope_size;
6586            _next_ordinal_to_read += 1;
6587            if next_offset >= end_offset {
6588                return Ok(());
6589            }
6590
6591            // Decode unknown envelopes for gaps in ordinals.
6592            while _next_ordinal_to_read < 2 {
6593                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6594                _next_ordinal_to_read += 1;
6595                next_offset += envelope_size;
6596            }
6597
6598            let next_out_of_line = decoder.next_out_of_line();
6599            let handles_before = decoder.remaining_handles();
6600            if let Some((inlined, num_bytes, num_handles)) =
6601                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6602            {
6603                let member_inline_size =
6604                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6605                if inlined != (member_inline_size <= 4) {
6606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6607                }
6608                let inner_offset;
6609                let mut inner_depth = depth.clone();
6610                if inlined {
6611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6612                    inner_offset = next_offset;
6613                } else {
6614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6615                    inner_depth.increment()?;
6616                }
6617                let val_ref = self.received.get_or_insert_with(|| fidl::new_empty!(u32, D));
6618                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6619                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6620                {
6621                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6622                }
6623                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6624                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6625                }
6626            }
6627
6628            next_offset += envelope_size;
6629
6630            // Decode the remaining unknown envelopes.
6631            while next_offset < end_offset {
6632                _next_ordinal_to_read += 1;
6633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6634                next_offset += envelope_size;
6635            }
6636
6637            Ok(())
6638        }
6639    }
6640
6641    impl SnoopOnObservePacketRequest {
6642        #[inline(always)]
6643        fn max_ordinal_present(&self) -> u64 {
6644            if let Some(_) = self.packet {
6645                return 3;
6646            }
6647            if let Some(_) = self.direction {
6648                return 2;
6649            }
6650            if let Some(_) = self.sequence {
6651                return 1;
6652            }
6653            0
6654        }
6655    }
6656
6657    impl fidl::encoding::ValueTypeMarker for SnoopOnObservePacketRequest {
6658        type Borrowed<'a> = &'a Self;
6659        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6660            value
6661        }
6662    }
6663
6664    unsafe impl fidl::encoding::TypeMarker for SnoopOnObservePacketRequest {
6665        type Owned = Self;
6666
6667        #[inline(always)]
6668        fn inline_align(_context: fidl::encoding::Context) -> usize {
6669            8
6670        }
6671
6672        #[inline(always)]
6673        fn inline_size(_context: fidl::encoding::Context) -> usize {
6674            16
6675        }
6676    }
6677
6678    unsafe impl<D: fidl::encoding::ResourceDialect>
6679        fidl::encoding::Encode<SnoopOnObservePacketRequest, D> for &SnoopOnObservePacketRequest
6680    {
6681        unsafe fn encode(
6682            self,
6683            encoder: &mut fidl::encoding::Encoder<'_, D>,
6684            offset: usize,
6685            mut depth: fidl::encoding::Depth,
6686        ) -> fidl::Result<()> {
6687            encoder.debug_check_bounds::<SnoopOnObservePacketRequest>(offset);
6688            // Vector header
6689            let max_ordinal: u64 = self.max_ordinal_present();
6690            encoder.write_num(max_ordinal, offset);
6691            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6692            // Calling encoder.out_of_line_offset(0) is not allowed.
6693            if max_ordinal == 0 {
6694                return Ok(());
6695            }
6696            depth.increment()?;
6697            let envelope_size = 8;
6698            let bytes_len = max_ordinal as usize * envelope_size;
6699            #[allow(unused_variables)]
6700            let offset = encoder.out_of_line_offset(bytes_len);
6701            let mut _prev_end_offset: usize = 0;
6702            if 1 > max_ordinal {
6703                return Ok(());
6704            }
6705
6706            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6707            // are envelope_size bytes.
6708            let cur_offset: usize = (1 - 1) * envelope_size;
6709
6710            // Zero reserved fields.
6711            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6712
6713            // Safety:
6714            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6715            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6716            //   envelope_size bytes, there is always sufficient room.
6717            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6718                self.sequence.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6719                encoder,
6720                offset + cur_offset,
6721                depth,
6722            )?;
6723
6724            _prev_end_offset = cur_offset + envelope_size;
6725            if 2 > max_ordinal {
6726                return Ok(());
6727            }
6728
6729            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6730            // are envelope_size bytes.
6731            let cur_offset: usize = (2 - 1) * envelope_size;
6732
6733            // Zero reserved fields.
6734            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6735
6736            // Safety:
6737            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6738            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6739            //   envelope_size bytes, there is always sufficient room.
6740            fidl::encoding::encode_in_envelope_optional::<PacketDirection, D>(
6741                self.direction
6742                    .as_ref()
6743                    .map(<PacketDirection as fidl::encoding::ValueTypeMarker>::borrow),
6744                encoder,
6745                offset + cur_offset,
6746                depth,
6747            )?;
6748
6749            _prev_end_offset = cur_offset + envelope_size;
6750            if 3 > max_ordinal {
6751                return Ok(());
6752            }
6753
6754            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6755            // are envelope_size bytes.
6756            let cur_offset: usize = (3 - 1) * envelope_size;
6757
6758            // Zero reserved fields.
6759            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6760
6761            // Safety:
6762            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6763            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6764            //   envelope_size bytes, there is always sufficient room.
6765            fidl::encoding::encode_in_envelope_optional::<SnoopPacket, D>(
6766                self.packet.as_ref().map(<SnoopPacket as fidl::encoding::ValueTypeMarker>::borrow),
6767                encoder,
6768                offset + cur_offset,
6769                depth,
6770            )?;
6771
6772            _prev_end_offset = cur_offset + envelope_size;
6773
6774            Ok(())
6775        }
6776    }
6777
6778    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6779        for SnoopOnObservePacketRequest
6780    {
6781        #[inline(always)]
6782        fn new_empty() -> Self {
6783            Self::default()
6784        }
6785
6786        unsafe fn decode(
6787            &mut self,
6788            decoder: &mut fidl::encoding::Decoder<'_, D>,
6789            offset: usize,
6790            mut depth: fidl::encoding::Depth,
6791        ) -> fidl::Result<()> {
6792            decoder.debug_check_bounds::<Self>(offset);
6793            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6794                None => return Err(fidl::Error::NotNullable),
6795                Some(len) => len,
6796            };
6797            // Calling decoder.out_of_line_offset(0) is not allowed.
6798            if len == 0 {
6799                return Ok(());
6800            };
6801            depth.increment()?;
6802            let envelope_size = 8;
6803            let bytes_len = len * envelope_size;
6804            let offset = decoder.out_of_line_offset(bytes_len)?;
6805            // Decode the envelope for each type.
6806            let mut _next_ordinal_to_read = 0;
6807            let mut next_offset = offset;
6808            let end_offset = offset + bytes_len;
6809            _next_ordinal_to_read += 1;
6810            if next_offset >= end_offset {
6811                return Ok(());
6812            }
6813
6814            // Decode unknown envelopes for gaps in ordinals.
6815            while _next_ordinal_to_read < 1 {
6816                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6817                _next_ordinal_to_read += 1;
6818                next_offset += envelope_size;
6819            }
6820
6821            let next_out_of_line = decoder.next_out_of_line();
6822            let handles_before = decoder.remaining_handles();
6823            if let Some((inlined, num_bytes, num_handles)) =
6824                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6825            {
6826                let member_inline_size =
6827                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6828                if inlined != (member_inline_size <= 4) {
6829                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6830                }
6831                let inner_offset;
6832                let mut inner_depth = depth.clone();
6833                if inlined {
6834                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6835                    inner_offset = next_offset;
6836                } else {
6837                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6838                    inner_depth.increment()?;
6839                }
6840                let val_ref = self.sequence.get_or_insert_with(|| fidl::new_empty!(u64, D));
6841                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6842                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6843                {
6844                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6845                }
6846                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6847                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6848                }
6849            }
6850
6851            next_offset += envelope_size;
6852            _next_ordinal_to_read += 1;
6853            if next_offset >= end_offset {
6854                return Ok(());
6855            }
6856
6857            // Decode unknown envelopes for gaps in ordinals.
6858            while _next_ordinal_to_read < 2 {
6859                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6860                _next_ordinal_to_read += 1;
6861                next_offset += envelope_size;
6862            }
6863
6864            let next_out_of_line = decoder.next_out_of_line();
6865            let handles_before = decoder.remaining_handles();
6866            if let Some((inlined, num_bytes, num_handles)) =
6867                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6868            {
6869                let member_inline_size =
6870                    <PacketDirection as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6871                if inlined != (member_inline_size <= 4) {
6872                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6873                }
6874                let inner_offset;
6875                let mut inner_depth = depth.clone();
6876                if inlined {
6877                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6878                    inner_offset = next_offset;
6879                } else {
6880                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6881                    inner_depth.increment()?;
6882                }
6883                let val_ref =
6884                    self.direction.get_or_insert_with(|| fidl::new_empty!(PacketDirection, D));
6885                fidl::decode!(PacketDirection, D, val_ref, decoder, inner_offset, inner_depth)?;
6886                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6887                {
6888                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6889                }
6890                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6891                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6892                }
6893            }
6894
6895            next_offset += envelope_size;
6896            _next_ordinal_to_read += 1;
6897            if next_offset >= end_offset {
6898                return Ok(());
6899            }
6900
6901            // Decode unknown envelopes for gaps in ordinals.
6902            while _next_ordinal_to_read < 3 {
6903                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6904                _next_ordinal_to_read += 1;
6905                next_offset += envelope_size;
6906            }
6907
6908            let next_out_of_line = decoder.next_out_of_line();
6909            let handles_before = decoder.remaining_handles();
6910            if let Some((inlined, num_bytes, num_handles)) =
6911                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6912            {
6913                let member_inline_size =
6914                    <SnoopPacket as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6915                if inlined != (member_inline_size <= 4) {
6916                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6917                }
6918                let inner_offset;
6919                let mut inner_depth = depth.clone();
6920                if inlined {
6921                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6922                    inner_offset = next_offset;
6923                } else {
6924                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6925                    inner_depth.increment()?;
6926                }
6927                let val_ref = self.packet.get_or_insert_with(|| fidl::new_empty!(SnoopPacket, D));
6928                fidl::decode!(SnoopPacket, D, val_ref, decoder, inner_offset, inner_depth)?;
6929                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6930                {
6931                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6932                }
6933                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6934                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6935                }
6936            }
6937
6938            next_offset += envelope_size;
6939
6940            // Decode the remaining unknown envelopes.
6941            while next_offset < end_offset {
6942                _next_ordinal_to_read += 1;
6943                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6944                next_offset += envelope_size;
6945            }
6946
6947            Ok(())
6948        }
6949    }
6950
6951    impl VendorCrashParameters {
6952        #[inline(always)]
6953        fn max_ordinal_present(&self) -> u64 {
6954            if let Some(_) = self.crash_signature {
6955                return 3;
6956            }
6957            if let Some(_) = self.program_name {
6958                return 2;
6959            }
6960            if let Some(_) = self.vendor_subevent_code {
6961                return 1;
6962            }
6963            0
6964        }
6965    }
6966
6967    impl fidl::encoding::ValueTypeMarker for VendorCrashParameters {
6968        type Borrowed<'a> = &'a Self;
6969        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6970            value
6971        }
6972    }
6973
6974    unsafe impl fidl::encoding::TypeMarker for VendorCrashParameters {
6975        type Owned = Self;
6976
6977        #[inline(always)]
6978        fn inline_align(_context: fidl::encoding::Context) -> usize {
6979            8
6980        }
6981
6982        #[inline(always)]
6983        fn inline_size(_context: fidl::encoding::Context) -> usize {
6984            16
6985        }
6986    }
6987
6988    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VendorCrashParameters, D>
6989        for &VendorCrashParameters
6990    {
6991        unsafe fn encode(
6992            self,
6993            encoder: &mut fidl::encoding::Encoder<'_, D>,
6994            offset: usize,
6995            mut depth: fidl::encoding::Depth,
6996        ) -> fidl::Result<()> {
6997            encoder.debug_check_bounds::<VendorCrashParameters>(offset);
6998            // Vector header
6999            let max_ordinal: u64 = self.max_ordinal_present();
7000            encoder.write_num(max_ordinal, offset);
7001            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7002            // Calling encoder.out_of_line_offset(0) is not allowed.
7003            if max_ordinal == 0 {
7004                return Ok(());
7005            }
7006            depth.increment()?;
7007            let envelope_size = 8;
7008            let bytes_len = max_ordinal as usize * envelope_size;
7009            #[allow(unused_variables)]
7010            let offset = encoder.out_of_line_offset(bytes_len);
7011            let mut _prev_end_offset: usize = 0;
7012            if 1 > max_ordinal {
7013                return Ok(());
7014            }
7015
7016            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7017            // are envelope_size bytes.
7018            let cur_offset: usize = (1 - 1) * envelope_size;
7019
7020            // Zero reserved fields.
7021            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7022
7023            // Safety:
7024            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7025            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7026            //   envelope_size bytes, there is always sufficient room.
7027            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7028                self.vendor_subevent_code
7029                    .as_ref()
7030                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7031                encoder,
7032                offset + cur_offset,
7033                depth,
7034            )?;
7035
7036            _prev_end_offset = cur_offset + envelope_size;
7037            if 2 > max_ordinal {
7038                return Ok(());
7039            }
7040
7041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7042            // are envelope_size bytes.
7043            let cur_offset: usize = (2 - 1) * envelope_size;
7044
7045            // Zero reserved fields.
7046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7047
7048            // Safety:
7049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7051            //   envelope_size bytes, there is always sufficient room.
7052            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
7053            self.program_name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
7054            encoder, offset + cur_offset, depth
7055        )?;
7056
7057            _prev_end_offset = cur_offset + envelope_size;
7058            if 3 > max_ordinal {
7059                return Ok(());
7060            }
7061
7062            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7063            // are envelope_size bytes.
7064            let cur_offset: usize = (3 - 1) * envelope_size;
7065
7066            // Zero reserved fields.
7067            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7068
7069            // Safety:
7070            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7071            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7072            //   envelope_size bytes, there is always sufficient room.
7073            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
7074                self.crash_signature.as_ref().map(
7075                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
7076                ),
7077                encoder,
7078                offset + cur_offset,
7079                depth,
7080            )?;
7081
7082            _prev_end_offset = cur_offset + envelope_size;
7083
7084            Ok(())
7085        }
7086    }
7087
7088    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VendorCrashParameters {
7089        #[inline(always)]
7090        fn new_empty() -> Self {
7091            Self::default()
7092        }
7093
7094        unsafe fn decode(
7095            &mut self,
7096            decoder: &mut fidl::encoding::Decoder<'_, D>,
7097            offset: usize,
7098            mut depth: fidl::encoding::Depth,
7099        ) -> fidl::Result<()> {
7100            decoder.debug_check_bounds::<Self>(offset);
7101            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7102                None => return Err(fidl::Error::NotNullable),
7103                Some(len) => len,
7104            };
7105            // Calling decoder.out_of_line_offset(0) is not allowed.
7106            if len == 0 {
7107                return Ok(());
7108            };
7109            depth.increment()?;
7110            let envelope_size = 8;
7111            let bytes_len = len * envelope_size;
7112            let offset = decoder.out_of_line_offset(bytes_len)?;
7113            // Decode the envelope for each type.
7114            let mut _next_ordinal_to_read = 0;
7115            let mut next_offset = offset;
7116            let end_offset = offset + bytes_len;
7117            _next_ordinal_to_read += 1;
7118            if next_offset >= end_offset {
7119                return Ok(());
7120            }
7121
7122            // Decode unknown envelopes for gaps in ordinals.
7123            while _next_ordinal_to_read < 1 {
7124                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7125                _next_ordinal_to_read += 1;
7126                next_offset += envelope_size;
7127            }
7128
7129            let next_out_of_line = decoder.next_out_of_line();
7130            let handles_before = decoder.remaining_handles();
7131            if let Some((inlined, num_bytes, num_handles)) =
7132                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7133            {
7134                let member_inline_size =
7135                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7136                if inlined != (member_inline_size <= 4) {
7137                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7138                }
7139                let inner_offset;
7140                let mut inner_depth = depth.clone();
7141                if inlined {
7142                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7143                    inner_offset = next_offset;
7144                } else {
7145                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7146                    inner_depth.increment()?;
7147                }
7148                let val_ref =
7149                    self.vendor_subevent_code.get_or_insert_with(|| fidl::new_empty!(u8, D));
7150                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7151                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7152                {
7153                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7154                }
7155                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7156                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7157                }
7158            }
7159
7160            next_offset += envelope_size;
7161            _next_ordinal_to_read += 1;
7162            if next_offset >= end_offset {
7163                return Ok(());
7164            }
7165
7166            // Decode unknown envelopes for gaps in ordinals.
7167            while _next_ordinal_to_read < 2 {
7168                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7169                _next_ordinal_to_read += 1;
7170                next_offset += envelope_size;
7171            }
7172
7173            let next_out_of_line = decoder.next_out_of_line();
7174            let handles_before = decoder.remaining_handles();
7175            if let Some((inlined, num_bytes, num_handles)) =
7176                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7177            {
7178                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7179                if inlined != (member_inline_size <= 4) {
7180                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7181                }
7182                let inner_offset;
7183                let mut inner_depth = depth.clone();
7184                if inlined {
7185                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7186                    inner_offset = next_offset;
7187                } else {
7188                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7189                    inner_depth.increment()?;
7190                }
7191                let val_ref = self.program_name.get_or_insert_with(|| {
7192                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
7193                });
7194                fidl::decode!(
7195                    fidl::encoding::BoundedString<1024>,
7196                    D,
7197                    val_ref,
7198                    decoder,
7199                    inner_offset,
7200                    inner_depth
7201                )?;
7202                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7203                {
7204                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7205                }
7206                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7207                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7208                }
7209            }
7210
7211            next_offset += envelope_size;
7212            _next_ordinal_to_read += 1;
7213            if next_offset >= end_offset {
7214                return Ok(());
7215            }
7216
7217            // Decode unknown envelopes for gaps in ordinals.
7218            while _next_ordinal_to_read < 3 {
7219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7220                _next_ordinal_to_read += 1;
7221                next_offset += envelope_size;
7222            }
7223
7224            let next_out_of_line = decoder.next_out_of_line();
7225            let handles_before = decoder.remaining_handles();
7226            if let Some((inlined, num_bytes, num_handles)) =
7227                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7228            {
7229                let member_inline_size =
7230                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
7231                        decoder.context,
7232                    );
7233                if inlined != (member_inline_size <= 4) {
7234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7235                }
7236                let inner_offset;
7237                let mut inner_depth = depth.clone();
7238                if inlined {
7239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7240                    inner_offset = next_offset;
7241                } else {
7242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7243                    inner_depth.increment()?;
7244                }
7245                let val_ref = self
7246                    .crash_signature
7247                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
7248                fidl::decode!(
7249                    fidl::encoding::BoundedString<128>,
7250                    D,
7251                    val_ref,
7252                    decoder,
7253                    inner_offset,
7254                    inner_depth
7255                )?;
7256                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7257                {
7258                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7259                }
7260                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7261                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7262                }
7263            }
7264
7265            next_offset += envelope_size;
7266
7267            // Decode the remaining unknown envelopes.
7268            while next_offset < end_offset {
7269                _next_ordinal_to_read += 1;
7270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7271                next_offset += envelope_size;
7272            }
7273
7274            Ok(())
7275        }
7276    }
7277
7278    impl VendorFeatures {
7279        #[inline(always)]
7280        fn max_ordinal_present(&self) -> u64 {
7281            if let Some(_) = self.audio_offload_settings {
7282                return 3;
7283            }
7284            if let Some(_) = self.android_vendor_extensions {
7285                return 2;
7286            }
7287            if let Some(_) = self.acl_priority_command {
7288                return 1;
7289            }
7290            0
7291        }
7292    }
7293
7294    impl fidl::encoding::ValueTypeMarker for VendorFeatures {
7295        type Borrowed<'a> = &'a Self;
7296        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7297            value
7298        }
7299    }
7300
7301    unsafe impl fidl::encoding::TypeMarker for VendorFeatures {
7302        type Owned = Self;
7303
7304        #[inline(always)]
7305        fn inline_align(_context: fidl::encoding::Context) -> usize {
7306            8
7307        }
7308
7309        #[inline(always)]
7310        fn inline_size(_context: fidl::encoding::Context) -> usize {
7311            16
7312        }
7313    }
7314
7315    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VendorFeatures, D>
7316        for &VendorFeatures
7317    {
7318        unsafe fn encode(
7319            self,
7320            encoder: &mut fidl::encoding::Encoder<'_, D>,
7321            offset: usize,
7322            mut depth: fidl::encoding::Depth,
7323        ) -> fidl::Result<()> {
7324            encoder.debug_check_bounds::<VendorFeatures>(offset);
7325            // Vector header
7326            let max_ordinal: u64 = self.max_ordinal_present();
7327            encoder.write_num(max_ordinal, offset);
7328            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7329            // Calling encoder.out_of_line_offset(0) is not allowed.
7330            if max_ordinal == 0 {
7331                return Ok(());
7332            }
7333            depth.increment()?;
7334            let envelope_size = 8;
7335            let bytes_len = max_ordinal as usize * envelope_size;
7336            #[allow(unused_variables)]
7337            let offset = encoder.out_of_line_offset(bytes_len);
7338            let mut _prev_end_offset: usize = 0;
7339            if 1 > max_ordinal {
7340                return Ok(());
7341            }
7342
7343            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7344            // are envelope_size bytes.
7345            let cur_offset: usize = (1 - 1) * envelope_size;
7346
7347            // Zero reserved fields.
7348            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7349
7350            // Safety:
7351            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7352            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7353            //   envelope_size bytes, there is always sufficient room.
7354            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7355                self.acl_priority_command
7356                    .as_ref()
7357                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7358                encoder,
7359                offset + cur_offset,
7360                depth,
7361            )?;
7362
7363            _prev_end_offset = cur_offset + envelope_size;
7364            if 2 > max_ordinal {
7365                return Ok(());
7366            }
7367
7368            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7369            // are envelope_size bytes.
7370            let cur_offset: usize = (2 - 1) * envelope_size;
7371
7372            // Zero reserved fields.
7373            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7374
7375            // Safety:
7376            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7377            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7378            //   envelope_size bytes, there is always sufficient room.
7379            fidl::encoding::encode_in_envelope_optional::<AndroidVendorSupport, D>(
7380                self.android_vendor_extensions
7381                    .as_ref()
7382                    .map(<AndroidVendorSupport as fidl::encoding::ValueTypeMarker>::borrow),
7383                encoder,
7384                offset + cur_offset,
7385                depth,
7386            )?;
7387
7388            _prev_end_offset = cur_offset + envelope_size;
7389            if 3 > max_ordinal {
7390                return Ok(());
7391            }
7392
7393            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7394            // are envelope_size bytes.
7395            let cur_offset: usize = (3 - 1) * envelope_size;
7396
7397            // Zero reserved fields.
7398            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7399
7400            // Safety:
7401            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7402            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7403            //   envelope_size bytes, there is always sufficient room.
7404            fidl::encoding::encode_in_envelope_optional::<AudioOffloadSettings, D>(
7405                self.audio_offload_settings
7406                    .as_ref()
7407                    .map(<AudioOffloadSettings as fidl::encoding::ValueTypeMarker>::borrow),
7408                encoder,
7409                offset + cur_offset,
7410                depth,
7411            )?;
7412
7413            _prev_end_offset = cur_offset + envelope_size;
7414
7415            Ok(())
7416        }
7417    }
7418
7419    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VendorFeatures {
7420        #[inline(always)]
7421        fn new_empty() -> Self {
7422            Self::default()
7423        }
7424
7425        unsafe fn decode(
7426            &mut self,
7427            decoder: &mut fidl::encoding::Decoder<'_, D>,
7428            offset: usize,
7429            mut depth: fidl::encoding::Depth,
7430        ) -> fidl::Result<()> {
7431            decoder.debug_check_bounds::<Self>(offset);
7432            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7433                None => return Err(fidl::Error::NotNullable),
7434                Some(len) => len,
7435            };
7436            // Calling decoder.out_of_line_offset(0) is not allowed.
7437            if len == 0 {
7438                return Ok(());
7439            };
7440            depth.increment()?;
7441            let envelope_size = 8;
7442            let bytes_len = len * envelope_size;
7443            let offset = decoder.out_of_line_offset(bytes_len)?;
7444            // Decode the envelope for each type.
7445            let mut _next_ordinal_to_read = 0;
7446            let mut next_offset = offset;
7447            let end_offset = offset + bytes_len;
7448            _next_ordinal_to_read += 1;
7449            if next_offset >= end_offset {
7450                return Ok(());
7451            }
7452
7453            // Decode unknown envelopes for gaps in ordinals.
7454            while _next_ordinal_to_read < 1 {
7455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7456                _next_ordinal_to_read += 1;
7457                next_offset += envelope_size;
7458            }
7459
7460            let next_out_of_line = decoder.next_out_of_line();
7461            let handles_before = decoder.remaining_handles();
7462            if let Some((inlined, num_bytes, num_handles)) =
7463                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7464            {
7465                let member_inline_size =
7466                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7467                if inlined != (member_inline_size <= 4) {
7468                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7469                }
7470                let inner_offset;
7471                let mut inner_depth = depth.clone();
7472                if inlined {
7473                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7474                    inner_offset = next_offset;
7475                } else {
7476                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7477                    inner_depth.increment()?;
7478                }
7479                let val_ref =
7480                    self.acl_priority_command.get_or_insert_with(|| fidl::new_empty!(bool, D));
7481                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7482                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7483                {
7484                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7485                }
7486                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7487                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7488                }
7489            }
7490
7491            next_offset += envelope_size;
7492            _next_ordinal_to_read += 1;
7493            if next_offset >= end_offset {
7494                return Ok(());
7495            }
7496
7497            // Decode unknown envelopes for gaps in ordinals.
7498            while _next_ordinal_to_read < 2 {
7499                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7500                _next_ordinal_to_read += 1;
7501                next_offset += envelope_size;
7502            }
7503
7504            let next_out_of_line = decoder.next_out_of_line();
7505            let handles_before = decoder.remaining_handles();
7506            if let Some((inlined, num_bytes, num_handles)) =
7507                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7508            {
7509                let member_inline_size =
7510                    <AndroidVendorSupport as fidl::encoding::TypeMarker>::inline_size(
7511                        decoder.context,
7512                    );
7513                if inlined != (member_inline_size <= 4) {
7514                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7515                }
7516                let inner_offset;
7517                let mut inner_depth = depth.clone();
7518                if inlined {
7519                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7520                    inner_offset = next_offset;
7521                } else {
7522                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7523                    inner_depth.increment()?;
7524                }
7525                let val_ref = self
7526                    .android_vendor_extensions
7527                    .get_or_insert_with(|| fidl::new_empty!(AndroidVendorSupport, D));
7528                fidl::decode!(
7529                    AndroidVendorSupport,
7530                    D,
7531                    val_ref,
7532                    decoder,
7533                    inner_offset,
7534                    inner_depth
7535                )?;
7536                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7537                {
7538                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7539                }
7540                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7541                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7542                }
7543            }
7544
7545            next_offset += envelope_size;
7546            _next_ordinal_to_read += 1;
7547            if next_offset >= end_offset {
7548                return Ok(());
7549            }
7550
7551            // Decode unknown envelopes for gaps in ordinals.
7552            while _next_ordinal_to_read < 3 {
7553                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7554                _next_ordinal_to_read += 1;
7555                next_offset += envelope_size;
7556            }
7557
7558            let next_out_of_line = decoder.next_out_of_line();
7559            let handles_before = decoder.remaining_handles();
7560            if let Some((inlined, num_bytes, num_handles)) =
7561                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7562            {
7563                let member_inline_size =
7564                    <AudioOffloadSettings as fidl::encoding::TypeMarker>::inline_size(
7565                        decoder.context,
7566                    );
7567                if inlined != (member_inline_size <= 4) {
7568                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7569                }
7570                let inner_offset;
7571                let mut inner_depth = depth.clone();
7572                if inlined {
7573                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7574                    inner_offset = next_offset;
7575                } else {
7576                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7577                    inner_depth.increment()?;
7578                }
7579                let val_ref = self
7580                    .audio_offload_settings
7581                    .get_or_insert_with(|| fidl::new_empty!(AudioOffloadSettings, D));
7582                fidl::decode!(
7583                    AudioOffloadSettings,
7584                    D,
7585                    val_ref,
7586                    decoder,
7587                    inner_offset,
7588                    inner_depth
7589                )?;
7590                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7591                {
7592                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7593                }
7594                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7595                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7596                }
7597            }
7598
7599            next_offset += envelope_size;
7600
7601            // Decode the remaining unknown envelopes.
7602            while next_offset < end_offset {
7603                _next_ordinal_to_read += 1;
7604                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7605                next_offset += envelope_size;
7606            }
7607
7608            Ok(())
7609        }
7610    }
7611
7612    impl VendorSetAclPriorityParams {
7613        #[inline(always)]
7614        fn max_ordinal_present(&self) -> u64 {
7615            if let Some(_) = self.direction {
7616                return 3;
7617            }
7618            if let Some(_) = self.priority {
7619                return 2;
7620            }
7621            if let Some(_) = self.connection_handle {
7622                return 1;
7623            }
7624            0
7625        }
7626    }
7627
7628    impl fidl::encoding::ValueTypeMarker for VendorSetAclPriorityParams {
7629        type Borrowed<'a> = &'a Self;
7630        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7631            value
7632        }
7633    }
7634
7635    unsafe impl fidl::encoding::TypeMarker for VendorSetAclPriorityParams {
7636        type Owned = Self;
7637
7638        #[inline(always)]
7639        fn inline_align(_context: fidl::encoding::Context) -> usize {
7640            8
7641        }
7642
7643        #[inline(always)]
7644        fn inline_size(_context: fidl::encoding::Context) -> usize {
7645            16
7646        }
7647    }
7648
7649    unsafe impl<D: fidl::encoding::ResourceDialect>
7650        fidl::encoding::Encode<VendorSetAclPriorityParams, D> for &VendorSetAclPriorityParams
7651    {
7652        unsafe fn encode(
7653            self,
7654            encoder: &mut fidl::encoding::Encoder<'_, D>,
7655            offset: usize,
7656            mut depth: fidl::encoding::Depth,
7657        ) -> fidl::Result<()> {
7658            encoder.debug_check_bounds::<VendorSetAclPriorityParams>(offset);
7659            // Vector header
7660            let max_ordinal: u64 = self.max_ordinal_present();
7661            encoder.write_num(max_ordinal, offset);
7662            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7663            // Calling encoder.out_of_line_offset(0) is not allowed.
7664            if max_ordinal == 0 {
7665                return Ok(());
7666            }
7667            depth.increment()?;
7668            let envelope_size = 8;
7669            let bytes_len = max_ordinal as usize * envelope_size;
7670            #[allow(unused_variables)]
7671            let offset = encoder.out_of_line_offset(bytes_len);
7672            let mut _prev_end_offset: usize = 0;
7673            if 1 > max_ordinal {
7674                return Ok(());
7675            }
7676
7677            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7678            // are envelope_size bytes.
7679            let cur_offset: usize = (1 - 1) * envelope_size;
7680
7681            // Zero reserved fields.
7682            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7683
7684            // Safety:
7685            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7686            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7687            //   envelope_size bytes, there is always sufficient room.
7688            fidl::encoding::encode_in_envelope_optional::<u16, D>(
7689                self.connection_handle
7690                    .as_ref()
7691                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
7692                encoder,
7693                offset + cur_offset,
7694                depth,
7695            )?;
7696
7697            _prev_end_offset = cur_offset + envelope_size;
7698            if 2 > max_ordinal {
7699                return Ok(());
7700            }
7701
7702            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7703            // are envelope_size bytes.
7704            let cur_offset: usize = (2 - 1) * envelope_size;
7705
7706            // Zero reserved fields.
7707            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7708
7709            // Safety:
7710            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7711            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7712            //   envelope_size bytes, there is always sufficient room.
7713            fidl::encoding::encode_in_envelope_optional::<VendorAclPriority, D>(
7714                self.priority
7715                    .as_ref()
7716                    .map(<VendorAclPriority as fidl::encoding::ValueTypeMarker>::borrow),
7717                encoder,
7718                offset + cur_offset,
7719                depth,
7720            )?;
7721
7722            _prev_end_offset = cur_offset + envelope_size;
7723            if 3 > max_ordinal {
7724                return Ok(());
7725            }
7726
7727            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7728            // are envelope_size bytes.
7729            let cur_offset: usize = (3 - 1) * envelope_size;
7730
7731            // Zero reserved fields.
7732            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7733
7734            // Safety:
7735            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7736            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7737            //   envelope_size bytes, there is always sufficient room.
7738            fidl::encoding::encode_in_envelope_optional::<VendorAclDirection, D>(
7739                self.direction
7740                    .as_ref()
7741                    .map(<VendorAclDirection as fidl::encoding::ValueTypeMarker>::borrow),
7742                encoder,
7743                offset + cur_offset,
7744                depth,
7745            )?;
7746
7747            _prev_end_offset = cur_offset + envelope_size;
7748
7749            Ok(())
7750        }
7751    }
7752
7753    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7754        for VendorSetAclPriorityParams
7755    {
7756        #[inline(always)]
7757        fn new_empty() -> Self {
7758            Self::default()
7759        }
7760
7761        unsafe fn decode(
7762            &mut self,
7763            decoder: &mut fidl::encoding::Decoder<'_, D>,
7764            offset: usize,
7765            mut depth: fidl::encoding::Depth,
7766        ) -> fidl::Result<()> {
7767            decoder.debug_check_bounds::<Self>(offset);
7768            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7769                None => return Err(fidl::Error::NotNullable),
7770                Some(len) => len,
7771            };
7772            // Calling decoder.out_of_line_offset(0) is not allowed.
7773            if len == 0 {
7774                return Ok(());
7775            };
7776            depth.increment()?;
7777            let envelope_size = 8;
7778            let bytes_len = len * envelope_size;
7779            let offset = decoder.out_of_line_offset(bytes_len)?;
7780            // Decode the envelope for each type.
7781            let mut _next_ordinal_to_read = 0;
7782            let mut next_offset = offset;
7783            let end_offset = offset + bytes_len;
7784            _next_ordinal_to_read += 1;
7785            if next_offset >= end_offset {
7786                return Ok(());
7787            }
7788
7789            // Decode unknown envelopes for gaps in ordinals.
7790            while _next_ordinal_to_read < 1 {
7791                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7792                _next_ordinal_to_read += 1;
7793                next_offset += envelope_size;
7794            }
7795
7796            let next_out_of_line = decoder.next_out_of_line();
7797            let handles_before = decoder.remaining_handles();
7798            if let Some((inlined, num_bytes, num_handles)) =
7799                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7800            {
7801                let member_inline_size =
7802                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7803                if inlined != (member_inline_size <= 4) {
7804                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7805                }
7806                let inner_offset;
7807                let mut inner_depth = depth.clone();
7808                if inlined {
7809                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7810                    inner_offset = next_offset;
7811                } else {
7812                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7813                    inner_depth.increment()?;
7814                }
7815                let val_ref =
7816                    self.connection_handle.get_or_insert_with(|| fidl::new_empty!(u16, D));
7817                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
7818                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7819                {
7820                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7821                }
7822                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7823                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7824                }
7825            }
7826
7827            next_offset += envelope_size;
7828            _next_ordinal_to_read += 1;
7829            if next_offset >= end_offset {
7830                return Ok(());
7831            }
7832
7833            // Decode unknown envelopes for gaps in ordinals.
7834            while _next_ordinal_to_read < 2 {
7835                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7836                _next_ordinal_to_read += 1;
7837                next_offset += envelope_size;
7838            }
7839
7840            let next_out_of_line = decoder.next_out_of_line();
7841            let handles_before = decoder.remaining_handles();
7842            if let Some((inlined, num_bytes, num_handles)) =
7843                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7844            {
7845                let member_inline_size =
7846                    <VendorAclPriority as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7847                if inlined != (member_inline_size <= 4) {
7848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7849                }
7850                let inner_offset;
7851                let mut inner_depth = depth.clone();
7852                if inlined {
7853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7854                    inner_offset = next_offset;
7855                } else {
7856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7857                    inner_depth.increment()?;
7858                }
7859                let val_ref =
7860                    self.priority.get_or_insert_with(|| fidl::new_empty!(VendorAclPriority, D));
7861                fidl::decode!(VendorAclPriority, D, val_ref, decoder, inner_offset, inner_depth)?;
7862                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7863                {
7864                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7865                }
7866                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7867                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7868                }
7869            }
7870
7871            next_offset += envelope_size;
7872            _next_ordinal_to_read += 1;
7873            if next_offset >= end_offset {
7874                return Ok(());
7875            }
7876
7877            // Decode unknown envelopes for gaps in ordinals.
7878            while _next_ordinal_to_read < 3 {
7879                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7880                _next_ordinal_to_read += 1;
7881                next_offset += envelope_size;
7882            }
7883
7884            let next_out_of_line = decoder.next_out_of_line();
7885            let handles_before = decoder.remaining_handles();
7886            if let Some((inlined, num_bytes, num_handles)) =
7887                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7888            {
7889                let member_inline_size =
7890                    <VendorAclDirection as fidl::encoding::TypeMarker>::inline_size(
7891                        decoder.context,
7892                    );
7893                if inlined != (member_inline_size <= 4) {
7894                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7895                }
7896                let inner_offset;
7897                let mut inner_depth = depth.clone();
7898                if inlined {
7899                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7900                    inner_offset = next_offset;
7901                } else {
7902                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7903                    inner_depth.increment()?;
7904                }
7905                let val_ref =
7906                    self.direction.get_or_insert_with(|| fidl::new_empty!(VendorAclDirection, D));
7907                fidl::decode!(VendorAclDirection, D, val_ref, decoder, inner_offset, inner_depth)?;
7908                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7909                {
7910                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7911                }
7912                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7913                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7914                }
7915            }
7916
7917            next_offset += envelope_size;
7918
7919            // Decode the remaining unknown envelopes.
7920            while next_offset < end_offset {
7921                _next_ordinal_to_read += 1;
7922                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7923                next_offset += envelope_size;
7924            }
7925
7926            Ok(())
7927        }
7928    }
7929
7930    impl fidl::encoding::ValueTypeMarker for ReceivedPacket {
7931        type Borrowed<'a> = &'a Self;
7932        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7933            value
7934        }
7935    }
7936
7937    unsafe impl fidl::encoding::TypeMarker for ReceivedPacket {
7938        type Owned = Self;
7939
7940        #[inline(always)]
7941        fn inline_align(_context: fidl::encoding::Context) -> usize {
7942            8
7943        }
7944
7945        #[inline(always)]
7946        fn inline_size(_context: fidl::encoding::Context) -> usize {
7947            16
7948        }
7949    }
7950
7951    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ReceivedPacket, D>
7952        for &ReceivedPacket
7953    {
7954        #[inline]
7955        unsafe fn encode(
7956            self,
7957            encoder: &mut fidl::encoding::Encoder<'_, D>,
7958            offset: usize,
7959            _depth: fidl::encoding::Depth,
7960        ) -> fidl::Result<()> {
7961            encoder.debug_check_bounds::<ReceivedPacket>(offset);
7962            encoder.write_num::<u64>(self.ordinal(), offset);
7963            match self {
7964                ReceivedPacket::Event(ref val) => fidl::encoding::encode_in_envelope::<
7965                    fidl::encoding::Vector<u8, 257>,
7966                    D,
7967                >(
7968                    <fidl::encoding::Vector<u8, 257> as fidl::encoding::ValueTypeMarker>::borrow(
7969                        val,
7970                    ),
7971                    encoder,
7972                    offset + 8,
7973                    _depth,
7974                ),
7975                ReceivedPacket::Acl(ref val) => fidl::encoding::encode_in_envelope::<
7976                    fidl::encoding::Vector<u8, 65539>,
7977                    D,
7978                >(
7979                    <fidl::encoding::Vector<u8, 65539> as fidl::encoding::ValueTypeMarker>::borrow(
7980                        val,
7981                    ),
7982                    encoder,
7983                    offset + 8,
7984                    _depth,
7985                ),
7986                ReceivedPacket::Iso(ref val) => fidl::encoding::encode_in_envelope::<
7987                    fidl::encoding::Vector<u8, 16387>,
7988                    D,
7989                >(
7990                    <fidl::encoding::Vector<u8, 16387> as fidl::encoding::ValueTypeMarker>::borrow(
7991                        val,
7992                    ),
7993                    encoder,
7994                    offset + 8,
7995                    _depth,
7996                ),
7997                ReceivedPacket::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7998            }
7999        }
8000    }
8001
8002    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ReceivedPacket {
8003        #[inline(always)]
8004        fn new_empty() -> Self {
8005            Self::__SourceBreaking { unknown_ordinal: 0 }
8006        }
8007
8008        #[inline]
8009        unsafe fn decode(
8010            &mut self,
8011            decoder: &mut fidl::encoding::Decoder<'_, D>,
8012            offset: usize,
8013            mut depth: fidl::encoding::Depth,
8014        ) -> fidl::Result<()> {
8015            decoder.debug_check_bounds::<Self>(offset);
8016            #[allow(unused_variables)]
8017            let next_out_of_line = decoder.next_out_of_line();
8018            let handles_before = decoder.remaining_handles();
8019            let (ordinal, inlined, num_bytes, num_handles) =
8020                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8021
8022            let member_inline_size = match ordinal {
8023                1 => <fidl::encoding::Vector<u8, 257> as fidl::encoding::TypeMarker>::inline_size(
8024                    decoder.context,
8025                ),
8026                2 => {
8027                    <fidl::encoding::Vector<u8, 65539> as fidl::encoding::TypeMarker>::inline_size(
8028                        decoder.context,
8029                    )
8030                }
8031                3 => {
8032                    <fidl::encoding::Vector<u8, 16387> as fidl::encoding::TypeMarker>::inline_size(
8033                        decoder.context,
8034                    )
8035                }
8036                0 => return Err(fidl::Error::UnknownUnionTag),
8037                _ => num_bytes as usize,
8038            };
8039
8040            if inlined != (member_inline_size <= 4) {
8041                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8042            }
8043            let _inner_offset;
8044            if inlined {
8045                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8046                _inner_offset = offset + 8;
8047            } else {
8048                depth.increment()?;
8049                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8050            }
8051            match ordinal {
8052                1 => {
8053                    #[allow(irrefutable_let_patterns)]
8054                    if let ReceivedPacket::Event(_) = self {
8055                        // Do nothing, read the value into the object
8056                    } else {
8057                        // Initialize `self` to the right variant
8058                        *self = ReceivedPacket::Event(
8059                            fidl::new_empty!(fidl::encoding::Vector<u8, 257>, D),
8060                        );
8061                    }
8062                    #[allow(irrefutable_let_patterns)]
8063                    if let ReceivedPacket::Event(ref mut val) = self {
8064                        fidl::decode!(fidl::encoding::Vector<u8, 257>, D, val, decoder, _inner_offset, depth)?;
8065                    } else {
8066                        unreachable!()
8067                    }
8068                }
8069                2 => {
8070                    #[allow(irrefutable_let_patterns)]
8071                    if let ReceivedPacket::Acl(_) = self {
8072                        // Do nothing, read the value into the object
8073                    } else {
8074                        // Initialize `self` to the right variant
8075                        *self = ReceivedPacket::Acl(
8076                            fidl::new_empty!(fidl::encoding::Vector<u8, 65539>, D),
8077                        );
8078                    }
8079                    #[allow(irrefutable_let_patterns)]
8080                    if let ReceivedPacket::Acl(ref mut val) = self {
8081                        fidl::decode!(fidl::encoding::Vector<u8, 65539>, D, val, decoder, _inner_offset, depth)?;
8082                    } else {
8083                        unreachable!()
8084                    }
8085                }
8086                3 => {
8087                    #[allow(irrefutable_let_patterns)]
8088                    if let ReceivedPacket::Iso(_) = self {
8089                        // Do nothing, read the value into the object
8090                    } else {
8091                        // Initialize `self` to the right variant
8092                        *self = ReceivedPacket::Iso(
8093                            fidl::new_empty!(fidl::encoding::Vector<u8, 16387>, D),
8094                        );
8095                    }
8096                    #[allow(irrefutable_let_patterns)]
8097                    if let ReceivedPacket::Iso(ref mut val) = self {
8098                        fidl::decode!(fidl::encoding::Vector<u8, 16387>, D, val, decoder, _inner_offset, depth)?;
8099                    } else {
8100                        unreachable!()
8101                    }
8102                }
8103                #[allow(deprecated)]
8104                ordinal => {
8105                    for _ in 0..num_handles {
8106                        decoder.drop_next_handle()?;
8107                    }
8108                    *self = ReceivedPacket::__SourceBreaking { unknown_ordinal: ordinal };
8109                }
8110            }
8111            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8112                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8113            }
8114            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8115                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8116            }
8117            Ok(())
8118        }
8119    }
8120
8121    impl fidl::encoding::ValueTypeMarker for SentPacket {
8122        type Borrowed<'a> = &'a Self;
8123        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8124            value
8125        }
8126    }
8127
8128    unsafe impl fidl::encoding::TypeMarker for SentPacket {
8129        type Owned = Self;
8130
8131        #[inline(always)]
8132        fn inline_align(_context: fidl::encoding::Context) -> usize {
8133            8
8134        }
8135
8136        #[inline(always)]
8137        fn inline_size(_context: fidl::encoding::Context) -> usize {
8138            16
8139        }
8140    }
8141
8142    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SentPacket, D>
8143        for &SentPacket
8144    {
8145        #[inline]
8146        unsafe fn encode(
8147            self,
8148            encoder: &mut fidl::encoding::Encoder<'_, D>,
8149            offset: usize,
8150            _depth: fidl::encoding::Depth,
8151        ) -> fidl::Result<()> {
8152            encoder.debug_check_bounds::<SentPacket>(offset);
8153            encoder.write_num::<u64>(self.ordinal(), offset);
8154            match self {
8155                SentPacket::Command(ref val) => fidl::encoding::encode_in_envelope::<
8156                    fidl::encoding::Vector<u8, 258>,
8157                    D,
8158                >(
8159                    <fidl::encoding::Vector<u8, 258> as fidl::encoding::ValueTypeMarker>::borrow(
8160                        val,
8161                    ),
8162                    encoder,
8163                    offset + 8,
8164                    _depth,
8165                ),
8166                SentPacket::Acl(ref val) => fidl::encoding::encode_in_envelope::<
8167                    fidl::encoding::Vector<u8, 65539>,
8168                    D,
8169                >(
8170                    <fidl::encoding::Vector<u8, 65539> as fidl::encoding::ValueTypeMarker>::borrow(
8171                        val,
8172                    ),
8173                    encoder,
8174                    offset + 8,
8175                    _depth,
8176                ),
8177                SentPacket::Iso(ref val) => fidl::encoding::encode_in_envelope::<
8178                    fidl::encoding::Vector<u8, 16387>,
8179                    D,
8180                >(
8181                    <fidl::encoding::Vector<u8, 16387> as fidl::encoding::ValueTypeMarker>::borrow(
8182                        val,
8183                    ),
8184                    encoder,
8185                    offset + 8,
8186                    _depth,
8187                ),
8188                SentPacket::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
8189            }
8190        }
8191    }
8192
8193    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SentPacket {
8194        #[inline(always)]
8195        fn new_empty() -> Self {
8196            Self::__SourceBreaking { unknown_ordinal: 0 }
8197        }
8198
8199        #[inline]
8200        unsafe fn decode(
8201            &mut self,
8202            decoder: &mut fidl::encoding::Decoder<'_, D>,
8203            offset: usize,
8204            mut depth: fidl::encoding::Depth,
8205        ) -> fidl::Result<()> {
8206            decoder.debug_check_bounds::<Self>(offset);
8207            #[allow(unused_variables)]
8208            let next_out_of_line = decoder.next_out_of_line();
8209            let handles_before = decoder.remaining_handles();
8210            let (ordinal, inlined, num_bytes, num_handles) =
8211                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8212
8213            let member_inline_size = match ordinal {
8214                1 => <fidl::encoding::Vector<u8, 258> as fidl::encoding::TypeMarker>::inline_size(
8215                    decoder.context,
8216                ),
8217                2 => {
8218                    <fidl::encoding::Vector<u8, 65539> as fidl::encoding::TypeMarker>::inline_size(
8219                        decoder.context,
8220                    )
8221                }
8222                3 => {
8223                    <fidl::encoding::Vector<u8, 16387> as fidl::encoding::TypeMarker>::inline_size(
8224                        decoder.context,
8225                    )
8226                }
8227                0 => return Err(fidl::Error::UnknownUnionTag),
8228                _ => num_bytes as usize,
8229            };
8230
8231            if inlined != (member_inline_size <= 4) {
8232                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8233            }
8234            let _inner_offset;
8235            if inlined {
8236                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8237                _inner_offset = offset + 8;
8238            } else {
8239                depth.increment()?;
8240                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8241            }
8242            match ordinal {
8243                1 => {
8244                    #[allow(irrefutable_let_patterns)]
8245                    if let SentPacket::Command(_) = self {
8246                        // Do nothing, read the value into the object
8247                    } else {
8248                        // Initialize `self` to the right variant
8249                        *self = SentPacket::Command(
8250                            fidl::new_empty!(fidl::encoding::Vector<u8, 258>, D),
8251                        );
8252                    }
8253                    #[allow(irrefutable_let_patterns)]
8254                    if let SentPacket::Command(ref mut val) = self {
8255                        fidl::decode!(fidl::encoding::Vector<u8, 258>, D, val, decoder, _inner_offset, depth)?;
8256                    } else {
8257                        unreachable!()
8258                    }
8259                }
8260                2 => {
8261                    #[allow(irrefutable_let_patterns)]
8262                    if let SentPacket::Acl(_) = self {
8263                        // Do nothing, read the value into the object
8264                    } else {
8265                        // Initialize `self` to the right variant
8266                        *self =
8267                            SentPacket::Acl(fidl::new_empty!(fidl::encoding::Vector<u8, 65539>, D));
8268                    }
8269                    #[allow(irrefutable_let_patterns)]
8270                    if let SentPacket::Acl(ref mut val) = self {
8271                        fidl::decode!(fidl::encoding::Vector<u8, 65539>, D, val, decoder, _inner_offset, depth)?;
8272                    } else {
8273                        unreachable!()
8274                    }
8275                }
8276                3 => {
8277                    #[allow(irrefutable_let_patterns)]
8278                    if let SentPacket::Iso(_) = self {
8279                        // Do nothing, read the value into the object
8280                    } else {
8281                        // Initialize `self` to the right variant
8282                        *self =
8283                            SentPacket::Iso(fidl::new_empty!(fidl::encoding::Vector<u8, 16387>, D));
8284                    }
8285                    #[allow(irrefutable_let_patterns)]
8286                    if let SentPacket::Iso(ref mut val) = self {
8287                        fidl::decode!(fidl::encoding::Vector<u8, 16387>, D, val, decoder, _inner_offset, depth)?;
8288                    } else {
8289                        unreachable!()
8290                    }
8291                }
8292                #[allow(deprecated)]
8293                ordinal => {
8294                    for _ in 0..num_handles {
8295                        decoder.drop_next_handle()?;
8296                    }
8297                    *self = SentPacket::__SourceBreaking { unknown_ordinal: ordinal };
8298                }
8299            }
8300            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8301                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8302            }
8303            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8304                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8305            }
8306            Ok(())
8307        }
8308    }
8309
8310    impl fidl::encoding::ValueTypeMarker for SnoopPacket {
8311        type Borrowed<'a> = &'a Self;
8312        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8313            value
8314        }
8315    }
8316
8317    unsafe impl fidl::encoding::TypeMarker for SnoopPacket {
8318        type Owned = Self;
8319
8320        #[inline(always)]
8321        fn inline_align(_context: fidl::encoding::Context) -> usize {
8322            8
8323        }
8324
8325        #[inline(always)]
8326        fn inline_size(_context: fidl::encoding::Context) -> usize {
8327            16
8328        }
8329    }
8330
8331    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SnoopPacket, D>
8332        for &SnoopPacket
8333    {
8334        #[inline]
8335        unsafe fn encode(
8336            self,
8337            encoder: &mut fidl::encoding::Encoder<'_, D>,
8338            offset: usize,
8339            _depth: fidl::encoding::Depth,
8340        ) -> fidl::Result<()> {
8341            encoder.debug_check_bounds::<SnoopPacket>(offset);
8342            encoder.write_num::<u64>(self.ordinal(), offset);
8343            match self {
8344                SnoopPacket::Event(ref val) => fidl::encoding::encode_in_envelope::<
8345                    fidl::encoding::Vector<u8, 257>,
8346                    D,
8347                >(
8348                    <fidl::encoding::Vector<u8, 257> as fidl::encoding::ValueTypeMarker>::borrow(
8349                        val,
8350                    ),
8351                    encoder,
8352                    offset + 8,
8353                    _depth,
8354                ),
8355                SnoopPacket::Command(ref val) => fidl::encoding::encode_in_envelope::<
8356                    fidl::encoding::Vector<u8, 258>,
8357                    D,
8358                >(
8359                    <fidl::encoding::Vector<u8, 258> as fidl::encoding::ValueTypeMarker>::borrow(
8360                        val,
8361                    ),
8362                    encoder,
8363                    offset + 8,
8364                    _depth,
8365                ),
8366                SnoopPacket::Acl(ref val) => fidl::encoding::encode_in_envelope::<
8367                    fidl::encoding::Vector<u8, 65539>,
8368                    D,
8369                >(
8370                    <fidl::encoding::Vector<u8, 65539> as fidl::encoding::ValueTypeMarker>::borrow(
8371                        val,
8372                    ),
8373                    encoder,
8374                    offset + 8,
8375                    _depth,
8376                ),
8377                SnoopPacket::Sco(ref val) => fidl::encoding::encode_in_envelope::<
8378                    fidl::encoding::Vector<u8, 258>,
8379                    D,
8380                >(
8381                    <fidl::encoding::Vector<u8, 258> as fidl::encoding::ValueTypeMarker>::borrow(
8382                        val,
8383                    ),
8384                    encoder,
8385                    offset + 8,
8386                    _depth,
8387                ),
8388                SnoopPacket::Iso(ref val) => fidl::encoding::encode_in_envelope::<
8389                    fidl::encoding::Vector<u8, 16387>,
8390                    D,
8391                >(
8392                    <fidl::encoding::Vector<u8, 16387> as fidl::encoding::ValueTypeMarker>::borrow(
8393                        val,
8394                    ),
8395                    encoder,
8396                    offset + 8,
8397                    _depth,
8398                ),
8399                SnoopPacket::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
8400            }
8401        }
8402    }
8403
8404    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SnoopPacket {
8405        #[inline(always)]
8406        fn new_empty() -> Self {
8407            Self::__SourceBreaking { unknown_ordinal: 0 }
8408        }
8409
8410        #[inline]
8411        unsafe fn decode(
8412            &mut self,
8413            decoder: &mut fidl::encoding::Decoder<'_, D>,
8414            offset: usize,
8415            mut depth: fidl::encoding::Depth,
8416        ) -> fidl::Result<()> {
8417            decoder.debug_check_bounds::<Self>(offset);
8418            #[allow(unused_variables)]
8419            let next_out_of_line = decoder.next_out_of_line();
8420            let handles_before = decoder.remaining_handles();
8421            let (ordinal, inlined, num_bytes, num_handles) =
8422                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8423
8424            let member_inline_size = match ordinal {
8425                1 => <fidl::encoding::Vector<u8, 257> as fidl::encoding::TypeMarker>::inline_size(
8426                    decoder.context,
8427                ),
8428                2 => <fidl::encoding::Vector<u8, 258> as fidl::encoding::TypeMarker>::inline_size(
8429                    decoder.context,
8430                ),
8431                3 => {
8432                    <fidl::encoding::Vector<u8, 65539> as fidl::encoding::TypeMarker>::inline_size(
8433                        decoder.context,
8434                    )
8435                }
8436                4 => <fidl::encoding::Vector<u8, 258> as fidl::encoding::TypeMarker>::inline_size(
8437                    decoder.context,
8438                ),
8439                5 => {
8440                    <fidl::encoding::Vector<u8, 16387> as fidl::encoding::TypeMarker>::inline_size(
8441                        decoder.context,
8442                    )
8443                }
8444                0 => return Err(fidl::Error::UnknownUnionTag),
8445                _ => num_bytes as usize,
8446            };
8447
8448            if inlined != (member_inline_size <= 4) {
8449                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8450            }
8451            let _inner_offset;
8452            if inlined {
8453                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8454                _inner_offset = offset + 8;
8455            } else {
8456                depth.increment()?;
8457                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8458            }
8459            match ordinal {
8460                1 => {
8461                    #[allow(irrefutable_let_patterns)]
8462                    if let SnoopPacket::Event(_) = self {
8463                        // Do nothing, read the value into the object
8464                    } else {
8465                        // Initialize `self` to the right variant
8466                        *self = SnoopPacket::Event(
8467                            fidl::new_empty!(fidl::encoding::Vector<u8, 257>, D),
8468                        );
8469                    }
8470                    #[allow(irrefutable_let_patterns)]
8471                    if let SnoopPacket::Event(ref mut val) = self {
8472                        fidl::decode!(fidl::encoding::Vector<u8, 257>, D, val, decoder, _inner_offset, depth)?;
8473                    } else {
8474                        unreachable!()
8475                    }
8476                }
8477                2 => {
8478                    #[allow(irrefutable_let_patterns)]
8479                    if let SnoopPacket::Command(_) = self {
8480                        // Do nothing, read the value into the object
8481                    } else {
8482                        // Initialize `self` to the right variant
8483                        *self = SnoopPacket::Command(
8484                            fidl::new_empty!(fidl::encoding::Vector<u8, 258>, D),
8485                        );
8486                    }
8487                    #[allow(irrefutable_let_patterns)]
8488                    if let SnoopPacket::Command(ref mut val) = self {
8489                        fidl::decode!(fidl::encoding::Vector<u8, 258>, D, val, decoder, _inner_offset, depth)?;
8490                    } else {
8491                        unreachable!()
8492                    }
8493                }
8494                3 => {
8495                    #[allow(irrefutable_let_patterns)]
8496                    if let SnoopPacket::Acl(_) = self {
8497                        // Do nothing, read the value into the object
8498                    } else {
8499                        // Initialize `self` to the right variant
8500                        *self = SnoopPacket::Acl(
8501                            fidl::new_empty!(fidl::encoding::Vector<u8, 65539>, D),
8502                        );
8503                    }
8504                    #[allow(irrefutable_let_patterns)]
8505                    if let SnoopPacket::Acl(ref mut val) = self {
8506                        fidl::decode!(fidl::encoding::Vector<u8, 65539>, D, val, decoder, _inner_offset, depth)?;
8507                    } else {
8508                        unreachable!()
8509                    }
8510                }
8511                4 => {
8512                    #[allow(irrefutable_let_patterns)]
8513                    if let SnoopPacket::Sco(_) = self {
8514                        // Do nothing, read the value into the object
8515                    } else {
8516                        // Initialize `self` to the right variant
8517                        *self =
8518                            SnoopPacket::Sco(fidl::new_empty!(fidl::encoding::Vector<u8, 258>, D));
8519                    }
8520                    #[allow(irrefutable_let_patterns)]
8521                    if let SnoopPacket::Sco(ref mut val) = self {
8522                        fidl::decode!(fidl::encoding::Vector<u8, 258>, D, val, decoder, _inner_offset, depth)?;
8523                    } else {
8524                        unreachable!()
8525                    }
8526                }
8527                5 => {
8528                    #[allow(irrefutable_let_patterns)]
8529                    if let SnoopPacket::Iso(_) = self {
8530                        // Do nothing, read the value into the object
8531                    } else {
8532                        // Initialize `self` to the right variant
8533                        *self = SnoopPacket::Iso(
8534                            fidl::new_empty!(fidl::encoding::Vector<u8, 16387>, D),
8535                        );
8536                    }
8537                    #[allow(irrefutable_let_patterns)]
8538                    if let SnoopPacket::Iso(ref mut val) = self {
8539                        fidl::decode!(fidl::encoding::Vector<u8, 16387>, D, val, decoder, _inner_offset, depth)?;
8540                    } else {
8541                        unreachable!()
8542                    }
8543                }
8544                #[allow(deprecated)]
8545                ordinal => {
8546                    for _ in 0..num_handles {
8547                        decoder.drop_next_handle()?;
8548                    }
8549                    *self = SnoopPacket::__SourceBreaking { unknown_ordinal: ordinal };
8550                }
8551            }
8552            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8553                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8554            }
8555            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8556                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8557            }
8558            Ok(())
8559        }
8560    }
8561
8562    impl fidl::encoding::ValueTypeMarker for VendorCommand {
8563        type Borrowed<'a> = &'a Self;
8564        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8565            value
8566        }
8567    }
8568
8569    unsafe impl fidl::encoding::TypeMarker for VendorCommand {
8570        type Owned = Self;
8571
8572        #[inline(always)]
8573        fn inline_align(_context: fidl::encoding::Context) -> usize {
8574            8
8575        }
8576
8577        #[inline(always)]
8578        fn inline_size(_context: fidl::encoding::Context) -> usize {
8579            16
8580        }
8581    }
8582
8583    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<VendorCommand, D>
8584        for &VendorCommand
8585    {
8586        #[inline]
8587        unsafe fn encode(
8588            self,
8589            encoder: &mut fidl::encoding::Encoder<'_, D>,
8590            offset: usize,
8591            _depth: fidl::encoding::Depth,
8592        ) -> fidl::Result<()> {
8593            encoder.debug_check_bounds::<VendorCommand>(offset);
8594            encoder.write_num::<u64>(self.ordinal(), offset);
8595            match self {
8596                VendorCommand::SetAclPriority(ref val) => fidl::encoding::encode_in_envelope::<
8597                    VendorSetAclPriorityParams,
8598                    D,
8599                >(
8600                    <VendorSetAclPriorityParams as fidl::encoding::ValueTypeMarker>::borrow(val),
8601                    encoder,
8602                    offset + 8,
8603                    _depth,
8604                ),
8605                VendorCommand::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
8606            }
8607        }
8608    }
8609
8610    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for VendorCommand {
8611        #[inline(always)]
8612        fn new_empty() -> Self {
8613            Self::__SourceBreaking { unknown_ordinal: 0 }
8614        }
8615
8616        #[inline]
8617        unsafe fn decode(
8618            &mut self,
8619            decoder: &mut fidl::encoding::Decoder<'_, D>,
8620            offset: usize,
8621            mut depth: fidl::encoding::Depth,
8622        ) -> fidl::Result<()> {
8623            decoder.debug_check_bounds::<Self>(offset);
8624            #[allow(unused_variables)]
8625            let next_out_of_line = decoder.next_out_of_line();
8626            let handles_before = decoder.remaining_handles();
8627            let (ordinal, inlined, num_bytes, num_handles) =
8628                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8629
8630            let member_inline_size = match ordinal {
8631                1 => <VendorSetAclPriorityParams as fidl::encoding::TypeMarker>::inline_size(
8632                    decoder.context,
8633                ),
8634                0 => return Err(fidl::Error::UnknownUnionTag),
8635                _ => num_bytes as usize,
8636            };
8637
8638            if inlined != (member_inline_size <= 4) {
8639                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8640            }
8641            let _inner_offset;
8642            if inlined {
8643                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8644                _inner_offset = offset + 8;
8645            } else {
8646                depth.increment()?;
8647                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8648            }
8649            match ordinal {
8650                1 => {
8651                    #[allow(irrefutable_let_patterns)]
8652                    if let VendorCommand::SetAclPriority(_) = self {
8653                        // Do nothing, read the value into the object
8654                    } else {
8655                        // Initialize `self` to the right variant
8656                        *self = VendorCommand::SetAclPriority(fidl::new_empty!(
8657                            VendorSetAclPriorityParams,
8658                            D
8659                        ));
8660                    }
8661                    #[allow(irrefutable_let_patterns)]
8662                    if let VendorCommand::SetAclPriority(ref mut val) = self {
8663                        fidl::decode!(
8664                            VendorSetAclPriorityParams,
8665                            D,
8666                            val,
8667                            decoder,
8668                            _inner_offset,
8669                            depth
8670                        )?;
8671                    } else {
8672                        unreachable!()
8673                    }
8674                }
8675                #[allow(deprecated)]
8676                ordinal => {
8677                    for _ in 0..num_handles {
8678                        decoder.drop_next_handle()?;
8679                    }
8680                    *self = VendorCommand::__SourceBreaking { unknown_ordinal: ordinal };
8681                }
8682            }
8683            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8684                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8685            }
8686            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8687                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8688            }
8689            Ok(())
8690        }
8691    }
8692}