Skip to main content

fidl_fuchsia_bluetooth_le__common/
fidl_fuchsia_bluetooth_le__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// An identifier for a service that accepts connection-oriented channel
12/// connections. Referred to as a (simplified) protocol/service multiplexer
13/// in the Bluetooth specification.
14pub type Psm = u16;
15
16pub const MAX_BROADCAST_NAME_OCTETS: u8 = 128;
17
18/// An ISO data packet can be no larger than the maximum 12-bit unsigned integer.
19/// See Bluetooth Core Spec Version 6.0 | Vol 4, Part E, Section 5.4.5
20pub const MAX_ISO_PACKET_SIZE: u16 = 4095;
21
22pub const MAX_MANUFACTURER_DATA_LENGTH: u8 = 252;
23
24pub const MAX_SERVICE_DATA_LENGTH: u8 = 252;
25
26/// The maximum number of connected isochronous streams that can be added to
27/// a connected isochronous group.
28pub const MAX_STREAMS_IN_GROUP: u8 = 31;
29
30pub const MAX_SUBEVENTS: u8 = 128;
31
32pub const MAX_URI_LENGTH: u16 = 278;
33
34/// A client can indicate the transmission rate of advertising packets by specifying a mode. The
35/// mode provides a hint to the system when configuring the controller with advertising interval and
36/// window parameters.
37///
38/// The mode affects how quickly a scanner or central is able to discover the peripheral; however it
39/// can have an adverse effect on power consumption. While the system will try to honor a client's
40/// request, it is not guaranteed to do so.
41#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
42#[repr(u8)]
43pub enum AdvertisingModeHint {
44    /// Advertise with a very short interval and window for fast discovery at the cost of higher
45    /// power consumption. This corresponds to a 30-60ms interval on the 1M PHYs and 90-180ms on the
46    /// coded PHY.
47    VeryFast = 1,
48    /// Advertise with a short interval and window that uses less power than `VERY_FAST`.
49    /// This corresponds to a 100-150ms interval on the 1M PHYs and 300-450ms on the coded PHY.
50    Fast = 2,
51    /// Advertise with a moderate interval and window. This corresponds to 1-1.2s on the 1M PHYs and 3s
52    /// on the coded PHY.
53    Slow = 3,
54}
55
56impl AdvertisingModeHint {
57    #[inline]
58    pub fn from_primitive(prim: u8) -> Option<Self> {
59        match prim {
60            1 => Some(Self::VeryFast),
61            2 => Some(Self::Fast),
62            3 => Some(Self::Slow),
63            _ => None,
64        }
65    }
66
67    #[inline]
68    pub const fn into_primitive(self) -> u8 {
69        self as u8
70    }
71}
72
73#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
74#[repr(u32)]
75pub enum CentralError {
76    /// The request was aborted.
77    Aborted = 1,
78    /// The request is already in progress.
79    InProgress = 2,
80    /// The provided parameters are invalid.
81    InvalidParameters = 3,
82    /// Advertising could not be initiated due to a hardware or system error.
83    Failed = 4,
84}
85
86impl CentralError {
87    #[inline]
88    pub fn from_primitive(prim: u32) -> Option<Self> {
89        match prim {
90            1 => Some(Self::Aborted),
91            2 => Some(Self::InProgress),
92            3 => Some(Self::InvalidParameters),
93            4 => Some(Self::Failed),
94            _ => None,
95        }
96    }
97
98    #[inline]
99    pub const fn into_primitive(self) -> u32 {
100        self as u32
101    }
102}
103
104#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
105#[repr(u32)]
106pub enum CigFramingOptions {
107    Unframed = 0,
108    Framed = 1,
109}
110
111impl CigFramingOptions {
112    #[inline]
113    pub fn from_primitive(prim: u32) -> Option<Self> {
114        match prim {
115            0 => Some(Self::Unframed),
116            1 => Some(Self::Framed),
117            _ => None,
118        }
119    }
120
121    #[inline]
122    pub const fn into_primitive(self) -> u32 {
123        self as u32
124    }
125}
126
127#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
128pub enum CigPacking {
129    Sequential,
130    Interleaved,
131    #[doc(hidden)]
132    __SourceBreaking {
133        unknown_ordinal: u32,
134    },
135}
136
137/// Pattern that matches an unknown `CigPacking` member.
138#[macro_export]
139macro_rules! CigPackingUnknown {
140    () => {
141        _
142    };
143}
144
145impl CigPacking {
146    #[inline]
147    pub fn from_primitive(prim: u32) -> Option<Self> {
148        match prim {
149            0 => Some(Self::Sequential),
150            1 => Some(Self::Interleaved),
151            _ => None,
152        }
153    }
154
155    #[inline]
156    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
157        match prim {
158            0 => Self::Sequential,
159            1 => Self::Interleaved,
160            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
161        }
162    }
163
164    #[inline]
165    pub fn unknown() -> Self {
166        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
167    }
168
169    #[inline]
170    pub const fn into_primitive(self) -> u32 {
171        match self {
172            Self::Sequential => 0,
173            Self::Interleaved => 1,
174            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
175        }
176    }
177
178    #[inline]
179    pub fn is_unknown(&self) -> bool {
180        match self {
181            Self::__SourceBreaking { unknown_ordinal: _ } => true,
182            _ => false,
183        }
184    }
185}
186
187#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
188pub enum CreateCigError {
189    /// The CIG could not be created because an unknown or unspecified error occurred unrelated
190    /// to the other errors defined below.
191    Unknown,
192    /// The CIG could not be created because it would exceed available resources.
193    NotEnoughResources,
194    /// The CIG could not be created because the combination of parameters supplied to CreateCig
195    /// for one or more CISes are invalid.
196    InvalidCisParameters,
197    #[doc(hidden)]
198    __SourceBreaking { unknown_ordinal: u32 },
199}
200
201/// Pattern that matches an unknown `CreateCigError` member.
202#[macro_export]
203macro_rules! CreateCigErrorUnknown {
204    () => {
205        _
206    };
207}
208
209impl CreateCigError {
210    #[inline]
211    pub fn from_primitive(prim: u32) -> Option<Self> {
212        match prim {
213            1 => Some(Self::Unknown),
214            2 => Some(Self::NotEnoughResources),
215            3 => Some(Self::InvalidCisParameters),
216            _ => None,
217        }
218    }
219
220    #[inline]
221    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
222        match prim {
223            1 => Self::Unknown,
224            2 => Self::NotEnoughResources,
225            3 => Self::InvalidCisParameters,
226            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
227        }
228    }
229
230    #[inline]
231    pub fn unknown() -> Self {
232        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
233    }
234
235    #[inline]
236    pub const fn into_primitive(self) -> u32 {
237        match self {
238            Self::Unknown => 1,
239            Self::NotEnoughResources => 2,
240            Self::InvalidCisParameters => 3,
241            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
242        }
243    }
244
245    #[inline]
246    pub fn is_unknown(&self) -> bool {
247        match self {
248            Self::__SourceBreaking { unknown_ordinal: _ } => true,
249            _ => false,
250        }
251    }
252}
253
254#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
255pub enum EstablishStreamsError {
256    /// The controller does not support a CIS with the parameters specified for it.
257    NotSupported,
258    /// The same CIS was specified multiple times in a call.
259    DuplicateCis,
260    /// One or more CISes specified already exist.
261    CisAlreadyEstablished,
262    /// One or more of the peers specified in the CIS parameters are not connected.
263    PeerNotConnected,
264    #[doc(hidden)]
265    __SourceBreaking { unknown_ordinal: u32 },
266}
267
268/// Pattern that matches an unknown `EstablishStreamsError` member.
269#[macro_export]
270macro_rules! EstablishStreamsErrorUnknown {
271    () => {
272        _
273    };
274}
275
276impl EstablishStreamsError {
277    #[inline]
278    pub fn from_primitive(prim: u32) -> Option<Self> {
279        match prim {
280            1 => Some(Self::NotSupported),
281            2 => Some(Self::DuplicateCis),
282            3 => Some(Self::CisAlreadyEstablished),
283            4 => Some(Self::PeerNotConnected),
284            _ => None,
285        }
286    }
287
288    #[inline]
289    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
290        match prim {
291            1 => Self::NotSupported,
292            2 => Self::DuplicateCis,
293            3 => Self::CisAlreadyEstablished,
294            4 => Self::PeerNotConnected,
295            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
296        }
297    }
298
299    #[inline]
300    pub fn unknown() -> Self {
301        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
302    }
303
304    #[inline]
305    pub const fn into_primitive(self) -> u32 {
306        match self {
307            Self::NotSupported => 1,
308            Self::DuplicateCis => 2,
309            Self::CisAlreadyEstablished => 3,
310            Self::PeerNotConnected => 4,
311            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
312        }
313    }
314
315    #[inline]
316    pub fn is_unknown(&self) -> bool {
317        match self {
318            Self::__SourceBreaking { unknown_ordinal: _ } => true,
319            _ => false,
320        }
321    }
322}
323
324/// Flags indicating validity of data received from an isochronous channel.
325#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
326#[repr(u8)]
327pub enum IsoPacketStatusFlag {
328    /// Valid data. The complete SDU was received correctly.
329    ValidData = 0,
330    /// Possibly invalid data. One ore more of the fragments received may contain errors or part of
331    /// the packet may be missing.
332    DataWithPossibleErrors = 1,
333    /// Parts of the packet were not received correctly.
334    LostData = 2,
335}
336
337impl IsoPacketStatusFlag {
338    #[inline]
339    pub fn from_primitive(prim: u8) -> Option<Self> {
340        match prim {
341            0 => Some(Self::ValidData),
342            1 => Some(Self::DataWithPossibleErrors),
343            2 => Some(Self::LostData),
344            _ => None,
345        }
346    }
347
348    #[inline]
349    pub const fn into_primitive(self) -> u8 {
350        self as u8
351    }
352}
353
354#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
355pub enum PeriodicAdvertisingSyncError {
356    InitialSynchronizationFailed,
357    SynchronizationLost,
358    NotSupportedLocal,
359    NotSupportedRemote,
360    #[doc(hidden)]
361    __SourceBreaking {
362        unknown_ordinal: u32,
363    },
364}
365
366/// Pattern that matches an unknown `PeriodicAdvertisingSyncError` member.
367#[macro_export]
368macro_rules! PeriodicAdvertisingSyncErrorUnknown {
369    () => {
370        _
371    };
372}
373
374impl PeriodicAdvertisingSyncError {
375    #[inline]
376    pub fn from_primitive(prim: u32) -> Option<Self> {
377        match prim {
378            0 => Some(Self::InitialSynchronizationFailed),
379            1 => Some(Self::SynchronizationLost),
380            2 => Some(Self::NotSupportedLocal),
381            3 => Some(Self::NotSupportedRemote),
382            _ => None,
383        }
384    }
385
386    #[inline]
387    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
388        match prim {
389            0 => Self::InitialSynchronizationFailed,
390            1 => Self::SynchronizationLost,
391            2 => Self::NotSupportedLocal,
392            3 => Self::NotSupportedRemote,
393            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
394        }
395    }
396
397    #[inline]
398    pub fn unknown() -> Self {
399        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
400    }
401
402    #[inline]
403    pub const fn into_primitive(self) -> u32 {
404        match self {
405            Self::InitialSynchronizationFailed => 0,
406            Self::SynchronizationLost => 1,
407            Self::NotSupportedLocal => 2,
408            Self::NotSupportedRemote => 3,
409            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
410        }
411    }
412
413    #[inline]
414    pub fn is_unknown(&self) -> bool {
415        match self {
416            Self::__SourceBreaking { unknown_ordinal: _ } => true,
417            _ => false,
418        }
419    }
420}
421
422#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
423pub enum PeriodicAdvertisingSyncTransferError {
424    Failed,
425    /// The `PeriodicAdvertisingSyncId` does not correspond to an active `PeriodicAdvertisingSync`.
426    InvalidSyncId,
427    TransferAlreadyPending,
428    NotSupportedLocal,
429    NotSupportedRemote,
430    #[doc(hidden)]
431    __SourceBreaking {
432        unknown_ordinal: u32,
433    },
434}
435
436/// Pattern that matches an unknown `PeriodicAdvertisingSyncTransferError` member.
437#[macro_export]
438macro_rules! PeriodicAdvertisingSyncTransferErrorUnknown {
439    () => {
440        _
441    };
442}
443
444impl PeriodicAdvertisingSyncTransferError {
445    #[inline]
446    pub fn from_primitive(prim: u32) -> Option<Self> {
447        match prim {
448            0 => Some(Self::Failed),
449            1 => Some(Self::InvalidSyncId),
450            2 => Some(Self::TransferAlreadyPending),
451            3 => Some(Self::NotSupportedLocal),
452            4 => Some(Self::NotSupportedRemote),
453            _ => None,
454        }
455    }
456
457    #[inline]
458    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
459        match prim {
460            0 => Self::Failed,
461            1 => Self::InvalidSyncId,
462            2 => Self::TransferAlreadyPending,
463            3 => Self::NotSupportedLocal,
464            4 => Self::NotSupportedRemote,
465            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
466        }
467    }
468
469    #[inline]
470    pub fn unknown() -> Self {
471        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
472    }
473
474    #[inline]
475    pub const fn into_primitive(self) -> u32 {
476        match self {
477            Self::Failed => 0,
478            Self::InvalidSyncId => 1,
479            Self::TransferAlreadyPending => 2,
480            Self::NotSupportedLocal => 3,
481            Self::NotSupportedRemote => 4,
482            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
483        }
484    }
485
486    #[inline]
487    pub fn is_unknown(&self) -> bool {
488        match self {
489            Self::__SourceBreaking { unknown_ordinal: _ } => true,
490            _ => false,
491        }
492    }
493}
494
495#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
496#[repr(u32)]
497pub enum PeripheralError {
498    /// The operation or parameters requested are not supported on the current hardware.
499    NotSupported = 1,
500    /// The provided advertising data exceeds the maximum allowed length when encoded.
501    AdvertisingDataTooLong = 2,
502    /// The provided scan response data exceeds the maximum allowed length when encoded.
503    ScanResponseDataTooLong = 3,
504    /// The requested parameters are invalid.
505    InvalidParameters = 4,
506    /// The request to start advertising was aborted, for example by issuing a new request with new
507    /// parameters.
508    Aborted = 5,
509    /// Advertising could not be initiated due to a hardware or system error.
510    Failed = 6,
511}
512
513impl PeripheralError {
514    #[inline]
515    pub fn from_primitive(prim: u32) -> Option<Self> {
516        match prim {
517            1 => Some(Self::NotSupported),
518            2 => Some(Self::AdvertisingDataTooLong),
519            3 => Some(Self::ScanResponseDataTooLong),
520            4 => Some(Self::InvalidParameters),
521            5 => Some(Self::Aborted),
522            6 => Some(Self::Failed),
523            _ => None,
524        }
525    }
526
527    #[inline]
528    pub const fn into_primitive(self) -> u32 {
529        self as u32
530    }
531}
532
533/// The physical layer configuration for LE radio transmissions.
534#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
535pub enum PhysicalLayer {
536    /// The 1 Megabit PHY is the original and default PHY with balanced throughput and range.
537    Le1M,
538    /// The 2 Megabit PHY supports increased throughput at
539    /// the cost of a reduced range.
540    Le2M,
541    /// The Coded PHY increases the maximum range by using enhanced error
542    /// detection and correction at the cost of reduced throughput.
543    LeCoded,
544    #[doc(hidden)]
545    __SourceBreaking { unknown_ordinal: u8 },
546}
547
548/// Pattern that matches an unknown `PhysicalLayer` member.
549#[macro_export]
550macro_rules! PhysicalLayerUnknown {
551    () => {
552        _
553    };
554}
555
556impl PhysicalLayer {
557    #[inline]
558    pub fn from_primitive(prim: u8) -> Option<Self> {
559        match prim {
560            1 => Some(Self::Le1M),
561            2 => Some(Self::Le2M),
562            3 => Some(Self::LeCoded),
563            _ => None,
564        }
565    }
566
567    #[inline]
568    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
569        match prim {
570            1 => Self::Le1M,
571            2 => Self::Le2M,
572            3 => Self::LeCoded,
573            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
574        }
575    }
576
577    #[inline]
578    pub fn unknown() -> Self {
579        Self::__SourceBreaking { unknown_ordinal: 0xff }
580    }
581
582    #[inline]
583    pub const fn into_primitive(self) -> u8 {
584        match self {
585            Self::Le1M => 1,
586            Self::Le2M => 2,
587            Self::LeCoded => 3,
588            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
589        }
590    }
591
592    #[inline]
593    pub fn is_unknown(&self) -> bool {
594        match self {
595            Self::__SourceBreaking { unknown_ordinal: _ } => true,
596            _ => false,
597        }
598    }
599}
600
601/// Represents advertising and scan response data advertised by a broadcaster or peripheral.
602#[derive(Clone, Debug, PartialEq)]
603pub struct AdvertisingDataDeprecated {
604    /// Name of the device.
605    pub name: Option<String>,
606    /// The radio transmission power level reported in the advertisement.
607    pub tx_power_level: Option<Box<fidl_fuchsia_bluetooth__common::Int8>>,
608    /// The appearance reported in the advertisemet.
609    pub appearance: Option<Box<fidl_fuchsia_bluetooth__common::UInt16>>,
610    /// List of service UUIDs reported in the advertisement.
611    pub service_uuids: Option<Vec<String>>,
612    /// Service data included in the advertisement.
613    pub service_data: Option<Vec<ServiceDataEntry>>,
614    /// Manufacturer specific data entries.
615    pub manufacturer_specific_data: Option<Vec<ManufacturerSpecificDataEntry>>,
616    /// Service UUIDs that were solicited in the advertisement. Peripherals can invite centrals that
617    /// expose certain services to connect to them using service solicitation.
618    pub solicited_service_uuids: Option<Vec<String>>,
619    /// URIs included in the advertising packet.
620    /// These are full URIs (they are encoded/decoded automatically)
621    pub uris: Option<Vec<String>>,
622}
623
624impl fidl::Persistable for AdvertisingDataDeprecated {}
625
626#[derive(Clone, Debug, PartialEq)]
627pub struct CentralConnectPeripheralResponse {
628    pub status: fidl_fuchsia_bluetooth__common::Status,
629}
630
631impl fidl::Persistable for CentralConnectPeripheralResponse {}
632
633#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
634pub struct CentralDisconnectPeripheralRequest {
635    pub identifier: String,
636}
637
638impl fidl::Persistable for CentralDisconnectPeripheralRequest {}
639
640#[derive(Clone, Debug, PartialEq)]
641pub struct CentralDisconnectPeripheralResponse {
642    pub status: fidl_fuchsia_bluetooth__common::Status,
643}
644
645impl fidl::Persistable for CentralDisconnectPeripheralResponse {}
646
647#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
648pub struct CentralGetPeripheralRequest {
649    pub identifier: String,
650}
651
652impl fidl::Persistable for CentralGetPeripheralRequest {}
653
654#[derive(Clone, Debug, PartialEq)]
655pub struct CentralGetPeripheralResponse {
656    pub peripheral: Option<Box<RemoteDevice>>,
657}
658
659impl fidl::Persistable for CentralGetPeripheralResponse {}
660
661#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
662pub struct CentralGetPeripheralsRequest {
663    pub service_uuids: Option<Vec<String>>,
664}
665
666impl fidl::Persistable for CentralGetPeripheralsRequest {}
667
668#[derive(Clone, Debug, PartialEq)]
669pub struct CentralGetPeripheralsResponse {
670    pub peripherals: Vec<RemoteDevice>,
671}
672
673impl fidl::Persistable for CentralGetPeripheralsResponse {}
674
675#[derive(Clone, Debug, PartialEq)]
676pub struct CentralOnDeviceDiscoveredRequest {
677    pub device: RemoteDevice,
678}
679
680impl fidl::Persistable for CentralOnDeviceDiscoveredRequest {}
681
682#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
683pub struct CentralOnPeripheralDisconnectedRequest {
684    pub identifier: String,
685}
686
687impl fidl::Persistable for CentralOnPeripheralDisconnectedRequest {}
688
689#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
690pub struct CentralOnScanStateChangedRequest {
691    pub scanning: bool,
692}
693
694impl fidl::Persistable for CentralOnScanStateChangedRequest {}
695
696#[derive(Clone, Debug, PartialEq)]
697pub struct CentralStartScanRequest {
698    pub filter: Option<Box<ScanFilter>>,
699}
700
701impl fidl::Persistable for CentralStartScanRequest {}
702
703#[derive(Clone, Debug, PartialEq)]
704pub struct CentralStartScanResponse {
705    pub status: fidl_fuchsia_bluetooth__common::Status,
706}
707
708impl fidl::Persistable for CentralStartScanResponse {}
709
710/// Entry in the `manufacturer_data` field of a [`fuchsia.bluetooth.le/AdvertisingData`].
711#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
712pub struct ManufacturerData {
713    pub company_id: u16,
714    pub data: Vec<u8>,
715}
716
717impl fidl::Persistable for ManufacturerData {}
718
719#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
720pub struct ManufacturerSpecificDataEntry {
721    pub company_id: u16,
722    pub data: Vec<u8>,
723}
724
725impl fidl::Persistable for ManufacturerSpecificDataEntry {}
726
727/// 64-bit unique value used by the system to identify a PeriodicAdvertisingSync.
728#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
729#[repr(C)]
730pub struct PeriodicAdvertisingSyncId {
731    pub value: u64,
732}
733
734impl fidl::Persistable for PeriodicAdvertisingSyncId {}
735
736#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
737pub struct PeriodicAdvertisingSyncOnErrorRequest {
738    pub error: PeriodicAdvertisingSyncError,
739}
740
741impl fidl::Persistable for PeriodicAdvertisingSyncOnErrorRequest {}
742
743/// Represents a remote Bluetooth Low Energy device. A RemoteDevice can represent a central,
744/// broadcaster, or peripheral based on the API from which it was received.
745#[derive(Clone, Debug, PartialEq)]
746pub struct RemoteDevice {
747    /// Identifier that uniquely identifies this device on the current system.
748    pub identifier: String,
749    /// Whether or not this device is connectable. Non-connectable devices are typically acting in the
750    /// LE broadcaster role.
751    pub connectable: bool,
752    /// The last known RSSI of this device, if known.
753    pub rssi: Option<Box<fidl_fuchsia_bluetooth__common::Int8>>,
754    /// Advertising data broadcast by this device if this device is a broadcaster or peripheral.
755    pub advertising_data: Option<Box<AdvertisingDataDeprecated>>,
756}
757
758impl fidl::Persistable for RemoteDevice {}
759
760/// Filter parameters for use during a scan. A discovered peripheral or broadcaster will be reported
761/// to applications only if it satisfies all of the provided filter parameters. Null fields will be
762/// ignored.
763#[derive(Clone, Debug, PartialEq)]
764pub struct ScanFilter {
765    /// Filter based on advertised service UUIDs. A peripheral that advertises at least one of the
766    /// entries in `service_uuids` will satisfy this filter.
767    pub service_uuids: Option<Vec<String>>,
768    /// Filter based on service data containing one of the given UUIDs.
769    pub service_data_uuids: Option<Vec<String>>,
770    /// Filter based on a company identifier present in the manufacturer data. If this filter parameter
771    /// is set, then the advertising payload must contain manufacturer specific data with the provided
772    /// company identifier to satisfy this filter.
773    pub manufacturer_identifier: Option<Box<fidl_fuchsia_bluetooth__common::UInt16>>,
774    /// Filter based on whether or not a device is connectable. For example, a client that is only
775    /// interested in peripherals that it can connect to can set this to true. Similarly a client can
776    /// scan only for braodcasters by setting this to false.
777    pub connectable: Option<Box<fidl_fuchsia_bluetooth__common::Bool>>,
778    /// Filter results based on a portion of the advertised device name.
779    pub name_substring: Option<String>,
780    /// Filter results based on the path loss of the radio wave. A device that matches this filter must
781    /// satisfy the following:
782    ///   1. Radio transmission power level and received signal strength must be available for the path
783    ///      loss calculation;
784    ///   2. The calculated path loss value must be less than, or equal to, `max_path_loss`.
785    pub max_path_loss: Option<Box<fidl_fuchsia_bluetooth__common::Int8>>,
786}
787
788impl fidl::Persistable for ScanFilter {}
789
790#[derive(Clone, Debug, PartialEq)]
791pub struct ScanResultWatcherWatchResponse {
792    pub updated: Vec<Peer>,
793}
794
795impl fidl::Persistable for ScanResultWatcherWatchResponse {}
796
797/// Entry in the `service_data` field of a [`fuchsia.bluetooth.le/AdvertisingData`].
798#[derive(Clone, Debug, PartialEq)]
799pub struct ServiceData {
800    pub uuid: fidl_fuchsia_bluetooth__common::Uuid,
801    pub data: Vec<u8>,
802}
803
804impl fidl::Persistable for ServiceData {}
805
806#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
807pub struct ServiceDataEntry {
808    pub uuid: String,
809    pub data: Vec<u8>,
810}
811
812impl fidl::Persistable for ServiceDataEntry {}
813
814/// The set of parameters for accepting a channel when listening for new channel
815/// connections.
816///
817/// See [`ChannelListenerRegistry/ListenL2cap`].
818#[derive(Clone, Debug, Default, PartialEq)]
819pub struct AcceptedChannelParameters {
820    /// All channel modes that should be accepted while listening. Must contain
821    /// at least one channel mode or the call will fail with
822    /// `ZX_ERR_INVALID_ARGS`.
823    /// Required.
824    pub accepted_channel_modes: Option<Vec<fidl_fuchsia_bluetooth__common::ChannelMode>>,
825    /// Maximum supported packet size for receiving.
826    /// Optional. If not provided, the size will be determined by the Bluetooth
827    /// system. No guarantees are given regarding the size selected.
828    pub max_packet_size: Option<u16>,
829    #[doc(hidden)]
830    pub __source_breaking: fidl::marker::SourceBreaking,
831}
832
833impl fidl::Persistable for AcceptedChannelParameters {}
834
835/// Represents advertising and scan response data that are transmitted by a LE peripheral or
836/// broadcaster.
837#[derive(Clone, Debug, Default, PartialEq)]
838pub struct AdvertisingData {
839    /// Long or short name of the device.
840    pub name: Option<String>,
841    /// The appearance of the device.
842    pub appearance: Option<fidl_fuchsia_bluetooth__common::Appearance>,
843    pub tx_power_level: Option<i8>,
844    /// Service UUIDs.
845    pub service_uuids: Option<Vec<fidl_fuchsia_bluetooth__common::Uuid>>,
846    /// Service data entries.
847    pub service_data: Option<Vec<ServiceData>>,
848    /// Manufacturer-specific data entries.
849    pub manufacturer_data: Option<Vec<ManufacturerData>>,
850    /// String representing a URI to be advertised, as defined in [IETF STD 66](https://tools.ietf.org/html/std66).
851    /// Each entry should be a UTF-8 string including the scheme. For more information, see:
852    /// - https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml for allowed schemes;
853    /// - https://www.bluetooth.com/specifications/assigned-numbers/uri-scheme-name-string-mapping
854    ///   for code-points used by the system to compress the scheme to save space in the payload.
855    pub uris: Option<Vec<String>>,
856    /// Indicates whether the current TX power level should be included in the advertising data.
857    pub include_tx_power_level: Option<bool>,
858    /// Identifies the peer as belonging to a Coordinated Set.
859    /// Resolution and generation of this parameter is defined in the
860    /// Coordinated Set Identification Service Specification.
861    pub resolvable_set_identifier: Option<[u8; 6]>,
862    /// The broadcast name string can be used by a user interface on a scanning
863    /// device that displays information on the available broadcast sources.
864    ///
865    /// Multiple devices with the same Broadcast Name may be transmitting the
866    /// same data, allowing devices to choose one.  At least 4 unicode characters
867    /// long and no more than 32 characters.
868    ///
869    /// Defined in the Public Broadcast Profile specification.
870    pub broadcast_name: Option<String>,
871    #[doc(hidden)]
872    pub __source_breaking: fidl::marker::SourceBreaking,
873}
874
875impl fidl::Persistable for AdvertisingData {}
876
877/// Represents the parameters for configuring advertisements.
878#[derive(Clone, Debug, Default, PartialEq)]
879pub struct AdvertisingParameters {
880    /// The fields that will be encoded in the data section of advertising packets.
881    ///
882    /// This field is required.
883    pub data: Option<AdvertisingData>,
884    /// The fields that are to be sent in a scan response packet. Clients may use this to send
885    /// additional data that does not fit inside an advertising packet on platforms that do not
886    /// support the advertising data length extensions.
887    ///
888    /// If present advertisements will be configured to be scannable.
889    pub scan_response: Option<AdvertisingData>,
890    /// The desired advertising frequency. See [`fuchsia.bluetooth.le/AdvertisingModeHint`].
891    /// Defaults to [`fuchsia.bluetooth.le/AdvertisingModeHint.SLOW`] if not present.
892    pub mode_hint: Option<AdvertisingModeHint>,
893    /// If present and true then the controller will broadcast connectable advertisements which
894    /// allows remote LE centrals to initiate a connection to the Peripheral. If false or otherwise
895    /// not present then the advertisements will be non-connectable.
896    pub connectable: Option<bool>,
897    /// If present, the controller will broadcast connectable advertisements
898    /// which allow peers to initiate connections to the Peripheral. The fields
899    /// of `ConnectionOptions` will configure any connections set up from
900    /// advertising.
901    pub connection_options: Option<ConnectionOptions>,
902    /// Specifies the advertising type to use (e.g. legacy, extended, etc).
903    ///
904    /// If not present, we default to legacy advertising to maintain optimal compatibility with
905    /// pre-Bluetooth 5.0 devices. See field descriptions within AdvertisingProcedure for more
906    /// information.
907    pub advertising_procedure: Option<AdvertisingProcedure>,
908    /// If privacy is not enabled, the address type will always be public.
909    ///
910    /// If privacy is enabled and the client is not privileged, the address will be a random
911    /// private address (either resolvable or non-resolvable). A non-privileged client requesting a
912    /// public address will return an error.
913    ///
914    /// If privacy is enabled and the client is privileged, they may request any address type,
915    /// or will default to a random private address.
916    ///
917    /// If this field is unset, the address type will be public or random depending on if privacy
918    /// is enabled in the system.
919    pub address_type: Option<fidl_fuchsia_bluetooth__common::AddressType>,
920    #[doc(hidden)]
921    pub __source_breaking: fidl::marker::SourceBreaking,
922}
923
924impl fidl::Persistable for AdvertisingParameters {}
925
926/// The "BIGInfo" parameters describing an LE Audio Broadcast Isochronous Group (BIG).
927/// Missing fields to be added as part of fxbug.dev/429213165.
928#[derive(Clone, Debug, Default, PartialEq)]
929pub struct BroadcastIsochronousGroupInfo {
930    /// The number of Broadcast Isochronous Streams in this group.
931    pub streams_count: Option<u8>,
932    /// The maximum size of an isochronous SDU.
933    pub max_sdu_size: Option<u16>,
934    /// The PHY used for transmission of data.
935    pub phy: Option<PhysicalLayer>,
936    /// Indicates whether the BIG is encrypted.
937    pub encryption: Option<bool>,
938    #[doc(hidden)]
939    pub __source_breaking: fidl::marker::SourceBreaking,
940}
941
942impl fidl::Persistable for BroadcastIsochronousGroupInfo {}
943
944/// A BIGInfo report that was received with a periodic advertisement.
945#[derive(Clone, Debug, Default, PartialEq)]
946pub struct BroadcastIsochronousGroupInfoReport {
947    pub info: Option<BroadcastIsochronousGroupInfo>,
948    /// The timestamp when the report was received by the host.
949    pub timestamp: Option<i64>,
950    #[doc(hidden)]
951    pub __source_breaking: fidl::marker::SourceBreaking,
952}
953
954impl fidl::Persistable for BroadcastIsochronousGroupInfoReport {}
955
956#[derive(Clone, Debug, Default, PartialEq)]
957pub struct CentralCreateConnectedIsochronousGroupResponse {
958    /// A unique CIG_ID, allocated by the host.
959    pub cig_id: Option<u8>,
960    #[doc(hidden)]
961    pub __source_breaking: fidl::marker::SourceBreaking,
962}
963
964impl fidl::Persistable for CentralCreateConnectedIsochronousGroupResponse {}
965
966#[derive(Clone, Debug, Default, PartialEq)]
967pub struct ChannelListenerRegistryListenL2capResponse {
968    /// PSM assigned by the registry. Guaranteed to be in the `DYNAMIC`
969    /// range of PSM values.
970    pub psm: Option<u16>,
971    #[doc(hidden)]
972    pub __source_breaking: fidl::marker::SourceBreaking,
973}
974
975impl fidl::Persistable for ChannelListenerRegistryListenL2capResponse {}
976
977#[derive(Clone, Debug, Default, PartialEq)]
978pub struct ChannelOffloadExtStartOffloadRequest {
979    #[doc(hidden)]
980    pub __source_breaking: fidl::marker::SourceBreaking,
981}
982
983impl fidl::Persistable for ChannelOffloadExtStartOffloadRequest {}
984
985#[derive(Clone, Debug, Default, PartialEq)]
986pub struct ChannelOffloadExtStartOffloadResponse {
987    pub offload_parameters: Option<fidl_fuchsia_bluetooth__common::L2capChannelOffloadParameters>,
988    #[doc(hidden)]
989    pub __source_breaking: fidl::marker::SourceBreaking,
990}
991
992impl fidl::Persistable for ChannelOffloadExtStartOffloadResponse {}
993
994#[derive(Clone, Debug, Default, PartialEq)]
995pub struct CigParameters {
996    /// Interval between the start of consecutive SDUs (central => peripheral,
997    /// microseconds). This is a function of the codec being used.
998    /// Required.
999    pub sdu_interval_c_to_p: Option<u32>,
1000    /// Interval between the start of consecutive SDUs (peripheral => central,
1001    /// microseconds). This is a function of the codec being used.
1002    /// Required.
1003    pub sdu_interval_p_to_c: Option<u32>,
1004    /// The preferred method of arranging subevents of multiple CISes. The
1005    /// controller may ignore this parameter.
1006    /// Optional. If not specified, SEQUENTIAL will be used.
1007    pub packing: Option<CigPacking>,
1008    /// Specifies inclusion of time offset values in data frame.
1009    /// Optional. If not specified, UNFRAMED will be used.
1010    pub framing: Option<CigFramingOptions>,
1011    /// Maximum latency, in milliseconds, between controllers (central =>
1012    /// peripheral).
1013    /// Required.
1014    pub max_transport_latency_c_to_p: Option<u16>,
1015    /// Maximum latency, in milliseconds, between controllers (peripheral =>
1016    /// central).
1017    /// Required.
1018    pub max_transport_latency_p_to_c: Option<u16>,
1019    #[doc(hidden)]
1020    pub __source_breaking: fidl::marker::SourceBreaking,
1021}
1022
1023impl fidl::Persistable for CigParameters {}
1024
1025/// Established configuration for a single CIS.
1026#[derive(Clone, Debug, Default, PartialEq)]
1027pub struct CisEstablishedParameters {
1028    /// Maximum time for transmission of PDUs of all CISes in a CIG event.
1029    /// In the range [234, 8388607] microseconds.
1030    ///
1031    /// This field is always present.
1032    pub cig_sync_delay: Option<i64>,
1033    /// The maximum time for transmission of PDUs of the specified CIS in a CIG
1034    /// event. In the range [234, 8388607] microseconds.
1035    ///
1036    /// This field is always present.
1037    pub cis_sync_delay: Option<i64>,
1038    /// Maximum number of subevents in each CIS event.
1039    ///
1040    /// This field is always present.
1041    pub max_subevents: Option<u8>,
1042    /// Time between two consecutive CIS anchor points, in the range [5ms, 4s]
1043    ///
1044    /// This field is always present.
1045    pub iso_interval: Option<i64>,
1046    /// Parameters for Central => Peripheral transmissions, if applicable.
1047    ///
1048    /// This field is present if the stream includes isochronous data transmission from the
1049    /// Central to the Peripheral.
1050    pub central_to_peripheral_params: Option<CisUnidirectionalParams>,
1051    /// Parameters for Peripheral => Central transmissions, if applicable.
1052    ///
1053    /// This field is present if the stream includes isochronous data transmission from the
1054    /// Peripheral to the Central.
1055    pub peripheral_to_central_params: Option<CisUnidirectionalParams>,
1056    #[doc(hidden)]
1057    pub __source_breaking: fidl::marker::SourceBreaking,
1058}
1059
1060impl fidl::Persistable for CisEstablishedParameters {}
1061
1062#[derive(Clone, Debug, Default, PartialEq)]
1063pub struct CisParameters {
1064    /// ID of the stream to establish (as previously passed to Connection/CreateCig()).
1065    /// Required.
1066    pub cis_id: Option<u8>,
1067    /// Peripheral device providing other end of the isochronous data stream.
1068    /// Required.
1069    pub id: Option<fidl_fuchsia_bluetooth__common::PeerId>,
1070    #[doc(hidden)]
1071    pub __source_breaking: fidl::marker::SourceBreaking,
1072}
1073
1074impl fidl::Persistable for CisParameters {}
1075
1076/// Parameters related to a single direction of transmission in an established CIS.
1077#[derive(Clone, Debug, Default, PartialEq)]
1078pub struct CisUnidirectionalParams {
1079    /// Transport latency, in the range [234, 8388607] microseconds
1080    ///
1081    /// This field is always present.
1082    pub transport_latency: Option<i64>,
1083    /// Burst number for transmissions in this direction.
1084    ///
1085    /// This field is always present.
1086    pub burst_number: Option<u8>,
1087    /// Flush timeout for each payload, in multiples of the ISO interval.
1088    ///
1089    /// This field is always present.
1090    pub flush_timeout: Option<u8>,
1091    #[doc(hidden)]
1092    pub __source_breaking: fidl::marker::SourceBreaking,
1093}
1094
1095impl fidl::Persistable for CisUnidirectionalParams {}
1096
1097#[derive(Clone, Debug, Default, PartialEq)]
1098pub struct CodecDelayGetCodecLocalDelayRangeRequest {
1099    /// Logical transport type being used. Currenly only supports LE transport mechanisms
1100    /// (CIS or BIS). Required.
1101    pub logical_transport_type: Option<fidl_fuchsia_bluetooth__common::LogicalTransportType>,
1102    /// Indicates direction of data flow. Required.
1103    pub data_direction: Option<fidl_fuchsia_bluetooth__common::DataDirection>,
1104    /// Codec being used over the air. Required.
1105    pub codec_attributes: Option<fidl_fuchsia_bluetooth__common::CodecAttributes>,
1106    #[doc(hidden)]
1107    pub __source_breaking: fidl::marker::SourceBreaking,
1108}
1109
1110impl fidl::Persistable for CodecDelayGetCodecLocalDelayRangeRequest {}
1111
1112#[derive(Clone, Debug, Default, PartialEq)]
1113pub struct CodecDelayGetCodecLocalDelayRangeResponse {
1114    /// Minimum controller delay for the specified configuration, in the range [0, 4] seconds.
1115    /// Always provided on success.
1116    pub min_controller_delay: Option<i64>,
1117    /// Maximum controller delay for the specified configuration, in the range [0, 4] seconds.
1118    /// Always provided on success.
1119    pub max_controller_delay: Option<i64>,
1120    #[doc(hidden)]
1121    pub __source_breaking: fidl::marker::SourceBreaking,
1122}
1123
1124impl fidl::Persistable for CodecDelayGetCodecLocalDelayRangeResponse {}
1125
1126#[derive(Clone, Debug, Default, PartialEq)]
1127pub struct ConnectedIsochronousGroupEstablishStreamsRequest {
1128    /// Required.
1129    pub cis_params: Option<Vec<CisParameters>>,
1130    #[doc(hidden)]
1131    pub __source_breaking: fidl::marker::SourceBreaking,
1132}
1133
1134impl fidl::Persistable for ConnectedIsochronousGroupEstablishStreamsRequest {}
1135
1136/// Represents parameters that are set on a per-connection basis by FIDL protocols that create
1137/// Low Energy connections.
1138#[derive(Clone, Debug, Default, PartialEq)]
1139pub struct ConnectionOptions {
1140    /// When true, the connection operates in bondable mode. This means pairing will form a bond,
1141    /// or persist across disconnections, if the peer is also in bondable mode. When not present,
1142    /// the connection defaults to bondable mode. When false, the connection operates in non-
1143    /// bondable mode, which means the local device only allows pairing that does not form a bond.
1144    pub bondable_mode: Option<bool>,
1145    /// When present, service discovery performed following the connection is restricted to primary
1146    /// services that match this field. Otherwise, by default all available services are discovered.
1147    pub service_filter: Option<fidl_fuchsia_bluetooth__common::Uuid>,
1148    #[doc(hidden)]
1149    pub __source_breaking: fidl::marker::SourceBreaking,
1150}
1151
1152impl fidl::Persistable for ConnectionOptions {}
1153
1154#[derive(Clone, Debug, Default, PartialEq)]
1155pub struct ConnectionTransferPeriodicAdvertisingSyncRequest {
1156    /// Required.
1157    pub sync_id: Option<PeriodicAdvertisingSyncId>,
1158    /// Application specific data to send with the sync.
1159    /// Optional.
1160    /// Default: 0
1161    pub service_data: Option<u16>,
1162    #[doc(hidden)]
1163    pub __source_breaking: fidl::marker::SourceBreaking,
1164}
1165
1166impl fidl::Persistable for ConnectionTransferPeriodicAdvertisingSyncRequest {}
1167
1168#[derive(Clone, Debug, Default, PartialEq)]
1169pub struct Extended {
1170    #[doc(hidden)]
1171    pub __source_breaking: fidl::marker::SourceBreaking,
1172}
1173
1174impl fidl::Persistable for Extended {}
1175
1176/// Filter parameters for use during a scan. A discovered peer only matches the
1177/// filter if it satisfies all of the present filter parameters.
1178#[derive(Clone, Debug, Default, PartialEq)]
1179pub struct Filter {
1180    /// Filter based on advertised service UUID.
1181    pub service_uuid: Option<fidl_fuchsia_bluetooth__common::Uuid>,
1182    /// Filter based on service data containing the given UUID.
1183    pub service_data_uuid: Option<fidl_fuchsia_bluetooth__common::Uuid>,
1184    /// Filter based on a manufacturer identifier present in the manufacturer
1185    /// data. If this filter parameter is set, then the advertising payload must
1186    /// contain manufacturer specific data with the provided company identifier
1187    /// to satisfy this filter. Manufacturer identifiers can be found at
1188    /// https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/
1189    pub manufacturer_id: Option<u16>,
1190    /// Filter based on whether or not a device is connectable. For example, a
1191    /// client that is only interested in peripherals that it can connect to can
1192    /// set this to true. Similarly a client can scan only for broadcasters by
1193    /// setting this to false.
1194    pub connectable: Option<bool>,
1195    /// Filter results based on a portion of the advertised device name.
1196    /// Substring matches are allowed.
1197    pub name: Option<String>,
1198    /// Filter results based on the path loss of the radio wave. A device that
1199    /// matches this filter must satisfy the following:
1200    ///   1. Radio transmission power level and received signal strength must be
1201    ///      available for the path loss calculation;
1202    ///   2. The calculated path loss value must be less than, or equal to,
1203    ///      `max_path_loss`.
1204    ///
1205    /// NOTE: This field is calculated using the RSSI and TX Power information
1206    /// obtained from advertising and scan response data during a scan procedure.
1207    /// It should NOT be confused with information for an active connection
1208    /// obtained using the "Path Loss Reporting" feature.
1209    pub max_path_loss: Option<i8>,
1210    /// Filter based on a service solicitation by service UUID.
1211    /// Service solicitation is an invitation to a peer to connect if they
1212    /// provide a service we want to use.
1213    pub solicitation_uuid: Option<fidl_fuchsia_bluetooth__common::Uuid>,
1214    #[doc(hidden)]
1215    pub __source_breaking: fidl::marker::SourceBreaking,
1216}
1217
1218impl fidl::Persistable for Filter {}
1219
1220#[derive(Clone, Debug, Default, PartialEq)]
1221pub struct IsochronousStreamOnEstablishedRequest {
1222    /// A result of ZX_ERR_INTERNAL indicates that the controller received a request
1223    /// but was unable to establish the stream.
1224    pub result: Option<i32>,
1225    /// This field is always present if a stream was successfully established.
1226    pub established_params: Option<CisEstablishedParameters>,
1227    #[doc(hidden)]
1228    pub __source_breaking: fidl::marker::SourceBreaking,
1229}
1230
1231impl fidl::Persistable for IsochronousStreamOnEstablishedRequest {}
1232
1233#[derive(Clone, Debug, Default, PartialEq)]
1234pub struct IsochronousStreamSetupDataPathRequest {
1235    /// Directions in which data will flow.
1236    /// Required.
1237    pub data_direction: Option<fidl_fuchsia_bluetooth__common::DataDirection>,
1238    /// Specifies the coding format used over the air.
1239    /// Required.
1240    pub codec_attributes: Option<fidl_fuchsia_bluetooth__common::CodecAttributes>,
1241    /// The delay provided must be within the controller's supported range and should not
1242    /// exceed 4 seconds.
1243    /// Required.
1244    pub controller_delay: Option<i64>,
1245    #[doc(hidden)]
1246    pub __source_breaking: fidl::marker::SourceBreaking,
1247}
1248
1249impl fidl::Persistable for IsochronousStreamSetupDataPathRequest {}
1250
1251#[derive(Clone, Debug, Default, PartialEq)]
1252pub struct IsochronousStreamWriteRequest {
1253    /// The data frame itself.
1254    pub data: Option<Vec<u8>>,
1255    #[doc(hidden)]
1256    pub __source_breaking: fidl::marker::SourceBreaking,
1257}
1258
1259impl fidl::Persistable for IsochronousStreamWriteRequest {}
1260
1261#[derive(Clone, Debug, Default, PartialEq)]
1262pub struct IsochronousStreamReadResponse {
1263    /// The data frame itself.
1264    /// Required.
1265    pub data: Option<Vec<u8>>,
1266    /// The sequence number associated with the frame.
1267    /// Required.
1268    pub sequence_number: Option<u16>,
1269    /// Status flags of packet, as reported by the controller.
1270    /// Required.
1271    pub status_flag: Option<IsoPacketStatusFlag>,
1272    /// Reception timestamp, as reported by the controller.
1273    /// Optional.
1274    pub timestamp: Option<i64>,
1275    #[doc(hidden)]
1276    pub __source_breaking: fidl::marker::SourceBreaking,
1277}
1278
1279impl fidl::Persistable for IsochronousStreamReadResponse {}
1280
1281#[derive(Clone, Debug, Default, PartialEq)]
1282pub struct Legacy {
1283    #[doc(hidden)]
1284    pub __source_breaking: fidl::marker::SourceBreaking,
1285}
1286
1287impl fidl::Persistable for Legacy {}
1288
1289/// Represents a Bluetooth Low Energy peer that may act in the broadcaster, peripheral, or central
1290/// role. The peer's role depends on whether it is obtained from the Central or Peripheral protocol.
1291#[derive(Clone, Debug, Default, PartialEq)]
1292pub struct Peer {
1293    /// Uniquely identifies this peer on the current system.
1294    ///
1295    /// This field is always present.
1296    pub id: Option<fidl_fuchsia_bluetooth__common::PeerId>,
1297    /// Whether or not this peer is connectable. Non-connectable peers are typically in the LE
1298    /// broadcaster role.
1299    ///
1300    /// This field is always present.
1301    pub connectable: Option<bool>,
1302    /// The last observed signal strength of this peer. This field is only present for a peer that
1303    /// is broadcasting. The RSSI can be stale if the peer has not been advertising.
1304    ///
1305    /// NOTE: This field should NOT be confused with the "connection RSSI" of a peer that is currently
1306    /// connected to the system.
1307    pub rssi: Option<i8>,
1308    pub advertising_data: Option<AdvertisingData>,
1309    /// The name of this peer. The name is often obtained during a scan procedure and can get
1310    /// updated during the name discovery procedure following a connection.
1311    ///
1312    /// This field is present if the name is known.
1313    pub name: Option<String>,
1314    /// Information from advertising and scan response data broadcast by this peer. When present,
1315    /// this contains the advertising data last received from the peer.
1316    pub data: Option<ScanData>,
1317    /// Whether or not this peer is bonded.
1318    ///
1319    /// This field is always present.
1320    pub bonded: Option<bool>,
1321    /// The value of the system monotonic clock, measured at the time this peer
1322    /// was last updated (e.g. due to reception of an advertisement).
1323    ///
1324    /// This field is always present.
1325    pub last_updated: Option<i64>,
1326    /// Value of the Advertising SID.
1327    ///
1328    /// Range: 0x00 to 0x0F
1329    pub advertising_sid: Option<u8>,
1330    /// Interval of the periodic advertising.
1331    /// The presence of this field indicates that a periodic advertising train
1332    /// is associated with this advertisement.
1333    ///
1334    /// Range: 0x0006 to 0xFFFF
1335    /// Time: N × 1.25 ms
1336    pub periodic_advertising_interval: Option<u16>,
1337    #[doc(hidden)]
1338    pub __source_breaking: fidl::marker::SourceBreaking,
1339}
1340
1341impl fidl::Persistable for Peer {}
1342
1343#[derive(Clone, Debug, Default, PartialEq)]
1344pub struct PeriodicAdvertisingReport {
1345    /// The signal strength of the advertising report.
1346    pub rssi: Option<i8>,
1347    /// The advertising data payload sent with this report.
1348    pub data: Option<ScanData>,
1349    /// The event counter of the event that the advertising packet was received
1350    /// in. This can be used to reply to the report.
1351    pub event_counter: Option<u16>,
1352    /// The subevent number of the report. Only present if the packet was received in a subevent.
1353    pub subevent: Option<u8>,
1354    /// The timestamp when the report was received by the host.
1355    pub timestamp: Option<i64>,
1356    #[doc(hidden)]
1357    pub __source_breaking: fidl::marker::SourceBreaking,
1358}
1359
1360impl fidl::Persistable for PeriodicAdvertisingReport {}
1361
1362#[derive(Clone, Debug, Default, PartialEq)]
1363pub struct PeriodicAdvertisingSyncConfiguration {
1364    /// Filter out duplicate advertising reports.
1365    /// Optional.
1366    /// Default: true
1367    pub filter_duplicates: Option<bool>,
1368    #[doc(hidden)]
1369    pub __source_breaking: fidl::marker::SourceBreaking,
1370}
1371
1372impl fidl::Persistable for PeriodicAdvertisingSyncConfiguration {}
1373
1374#[derive(Clone, Debug, Default, PartialEq)]
1375pub struct PeriodicAdvertisingSyncOnEstablishedRequest {
1376    /// Used in Connection.TransferPeriodicAdvertisingSync.
1377    pub id: Option<PeriodicAdvertisingSyncId>,
1378    /// The number of subevents this periodic advertisement has.
1379    pub subevents_count: Option<u8>,
1380    pub peer_id: Option<fidl_fuchsia_bluetooth__common::PeerId>,
1381    /// Present for Sync transfers only. Application specific data received
1382    /// with the transfer.
1383    pub service_data: Option<u16>,
1384    pub advertising_sid: Option<u8>,
1385    pub phy: Option<PhysicalLayer>,
1386    /// Kept in interval units as profiles use this field unchanged.
1387    /// Range: 0x0006 to 0xFFFF
1388    /// Time: N × 1.25 ms
1389    pub periodic_advertising_interval: Option<u16>,
1390    #[doc(hidden)]
1391    pub __source_breaking: fidl::marker::SourceBreaking,
1392}
1393
1394impl fidl::Persistable for PeriodicAdvertisingSyncOnEstablishedRequest {}
1395
1396#[derive(Clone, Debug, Default, PartialEq)]
1397pub struct PeriodicAdvertisingSyncSyncToSubeventsRequest {
1398    /// A list of subevent numbers to sync to.
1399    pub subevents: Option<Vec<u8>>,
1400    #[doc(hidden)]
1401    pub __source_breaking: fidl::marker::SourceBreaking,
1402}
1403
1404impl fidl::Persistable for PeriodicAdvertisingSyncSyncToSubeventsRequest {}
1405
1406#[derive(Clone, Debug, Default, PartialEq)]
1407pub struct PeriodicAdvertisingSyncWatchAdvertisingReportResponse {
1408    pub reports: Option<Vec<SyncReport>>,
1409    #[doc(hidden)]
1410    pub __source_breaking: fidl::marker::SourceBreaking,
1411}
1412
1413impl fidl::Persistable for PeriodicAdvertisingSyncWatchAdvertisingReportResponse {}
1414
1415/// Information obtained from advertising and scan response data broadcast by a peer.
1416#[derive(Clone, Debug, Default, PartialEq)]
1417pub struct ScanData {
1418    /// The radio transmit power level reported by an advertising and/or scannable peer.
1419    ///
1420    /// NOTE: This field should NOT be confused with the "connection TX Power Level" of a peer that
1421    /// is currently connected to the system obtained via the "Transmit Power reporting" feature.
1422    pub tx_power: Option<i8>,
1423    /// The appearance of the device.
1424    pub appearance: Option<fidl_fuchsia_bluetooth__common::Appearance>,
1425    /// Service UUIDs.
1426    pub service_uuids: Option<Vec<fidl_fuchsia_bluetooth__common::Uuid>>,
1427    /// Service data entries.
1428    pub service_data: Option<Vec<ServiceData>>,
1429    /// Manufacturer-specific data entries.
1430    pub manufacturer_data: Option<Vec<ManufacturerData>>,
1431    /// String representing a URI to be advertised, as defined in [IETF STD 66](https://tools.ietf.org/html/std66).
1432    /// Each entry should be a UTF-8 string including the scheme. For more information, see
1433    /// https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml for allowed schemes;
1434    /// NOTE: Bluetooth advertising compresses schemas over the air to save space. See
1435    /// https://www.bluetooth.com/specifications/assigned-numbers/uri-scheme-name-string-mapping.
1436    pub uris: Option<Vec<String>>,
1437    /// The monotonic time when this scan data was received.
1438    pub timestamp: Option<i64>,
1439    /// Identifies the peer as belonging to a Coordinated Set.
1440    /// Resolution and generation of this parameter is defined in the
1441    /// Coordinated Set Identification Service Specification.
1442    pub resolvable_set_identifier: Option<[u8; 6]>,
1443    /// The broadcast name string can be used by a user interface on a scanning
1444    /// device that displays information on the available broadcast sources.
1445    ///
1446    /// Multiple devices with the same Broadcast Name may be transmitting the
1447    /// same data, allowing devices to choose one.  At least 4 unicode characters
1448    /// long and no more than 32 characters.
1449    ///
1450    /// Defined in the Public Broadcast Profile specification.
1451    pub broadcast_name: Option<String>,
1452    #[doc(hidden)]
1453    pub __source_breaking: fidl::marker::SourceBreaking,
1454}
1455
1456impl fidl::Persistable for ScanData {}
1457
1458/// Parameters used during a scan.
1459#[derive(Clone, Debug, Default, PartialEq)]
1460pub struct ScanOptions {
1461    /// List of filters for use during a scan. A peripheral that satisfies any
1462    /// of these filters will be reported. At least 1 filter must be specified.
1463    /// While not recommended, clients that require that all peripherals be
1464    /// reported can specify an empty filter.
1465    pub filters: Option<Vec<Filter>>,
1466    #[doc(hidden)]
1467    pub __source_breaking: fidl::marker::SourceBreaking,
1468}
1469
1470impl fidl::Persistable for ScanOptions {}
1471
1472#[derive(Clone, Debug)]
1473pub enum AdvertisingProcedure {
1474    /// Advertise using legacy advertising packets. All devices should be able
1475    /// to discover this type of packet.
1476    Legacy(Legacy),
1477    /// Advertise using extended advertising packets. Extended advertising
1478    /// packets allow for a much larger amount of data to be advertised than
1479    /// legacy advertising packets (31 bytes vs 251 bytes per PDU). Extended
1480    /// advertising packets support up to 1,650 bytes in an advertisement chain,
1481    /// but they are only discoverable by newer devices using Bluetooth 5.0+.
1482    ///
1483    /// Extended advertising packets are not supported by all
1484    /// products. PeripheralError::NOT_SUPPORTED will be returned if requested
1485    /// and not supported.
1486    Extended(Extended),
1487    #[doc(hidden)]
1488    __SourceBreaking { unknown_ordinal: u64 },
1489}
1490
1491/// Pattern that matches an unknown `AdvertisingProcedure` member.
1492#[macro_export]
1493macro_rules! AdvertisingProcedureUnknown {
1494    () => {
1495        _
1496    };
1497}
1498
1499// Custom PartialEq so that unknown variants are not equal to themselves.
1500impl PartialEq for AdvertisingProcedure {
1501    fn eq(&self, other: &Self) -> bool {
1502        match (self, other) {
1503            (Self::Legacy(x), Self::Legacy(y)) => *x == *y,
1504            (Self::Extended(x), Self::Extended(y)) => *x == *y,
1505            _ => false,
1506        }
1507    }
1508}
1509
1510impl AdvertisingProcedure {
1511    #[inline]
1512    pub fn ordinal(&self) -> u64 {
1513        match *self {
1514            Self::Legacy(_) => 1,
1515            Self::Extended(_) => 2,
1516            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1517        }
1518    }
1519
1520    #[inline]
1521    pub fn unknown_variant_for_testing() -> Self {
1522        Self::__SourceBreaking { unknown_ordinal: 0 }
1523    }
1524
1525    #[inline]
1526    pub fn is_unknown(&self) -> bool {
1527        match self {
1528            Self::__SourceBreaking { .. } => true,
1529            _ => false,
1530        }
1531    }
1532}
1533
1534impl fidl::Persistable for AdvertisingProcedure {}
1535
1536#[derive(Clone, Debug)]
1537pub enum SyncReport {
1538    PeriodicAdvertisingReport(PeriodicAdvertisingReport),
1539    BroadcastIsochronousGroupInfoReport(BroadcastIsochronousGroupInfoReport),
1540    #[doc(hidden)]
1541    __SourceBreaking {
1542        unknown_ordinal: u64,
1543    },
1544}
1545
1546/// Pattern that matches an unknown `SyncReport` member.
1547#[macro_export]
1548macro_rules! SyncReportUnknown {
1549    () => {
1550        _
1551    };
1552}
1553
1554// Custom PartialEq so that unknown variants are not equal to themselves.
1555impl PartialEq for SyncReport {
1556    fn eq(&self, other: &Self) -> bool {
1557        match (self, other) {
1558            (Self::PeriodicAdvertisingReport(x), Self::PeriodicAdvertisingReport(y)) => *x == *y,
1559            (
1560                Self::BroadcastIsochronousGroupInfoReport(x),
1561                Self::BroadcastIsochronousGroupInfoReport(y),
1562            ) => *x == *y,
1563            _ => false,
1564        }
1565    }
1566}
1567
1568impl SyncReport {
1569    #[inline]
1570    pub fn ordinal(&self) -> u64 {
1571        match *self {
1572            Self::PeriodicAdvertisingReport(_) => 1,
1573            Self::BroadcastIsochronousGroupInfoReport(_) => 2,
1574            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1575        }
1576    }
1577
1578    #[inline]
1579    pub fn unknown_variant_for_testing() -> Self {
1580        Self::__SourceBreaking { unknown_ordinal: 0 }
1581    }
1582
1583    #[inline]
1584    pub fn is_unknown(&self) -> bool {
1585        match self {
1586            Self::__SourceBreaking { .. } => true,
1587            _ => false,
1588        }
1589    }
1590}
1591
1592impl fidl::Persistable for SyncReport {}
1593
1594pub mod advertised_peripheral_ordinals {
1595    pub const ON_CONNECTED: u64 = 0x607b7716457eb178;
1596}
1597
1598pub mod advertising_handle_ordinals {}
1599
1600pub mod central_ordinals {
1601    pub const LISTEN_L2CAP: u64 = 0x39c6e9001d102338;
1602    pub const SCAN: u64 = 0x41f7121798dfe15f;
1603    pub const CONNECT: u64 = 0x31a3065f2a6913c4;
1604    pub const SYNC_TO_PERIODIC_ADVERTISING: u64 = 0x1db6df126a00c5b9;
1605    pub const CREATE_CONNECTED_ISOCHRONOUS_GROUP: u64 = 0x60323e70ae22e13;
1606    pub const GET_PERIPHERALS: u64 = 0x37ba777499c683a8;
1607    pub const GET_PERIPHERAL: u64 = 0x97f5a2f2d9c13da;
1608    pub const START_SCAN: u64 = 0xeb4cf0cd0e1132b;
1609    pub const STOP_SCAN: u64 = 0x5f79ee6a0bb037a0;
1610    pub const CONNECT_PERIPHERAL: u64 = 0x714d6c32d066d75a;
1611    pub const DISCONNECT_PERIPHERAL: u64 = 0xa9430da197362fd;
1612    pub const ON_SCAN_STATE_CHANGED: u64 = 0x5f8edc23cad04d3f;
1613    pub const ON_DEVICE_DISCOVERED: u64 = 0x708dadf20d66db6;
1614    pub const ON_PERIPHERAL_DISCONNECTED: u64 = 0x4e4c6b979b2126df;
1615}
1616
1617pub mod channel_listener_ordinals {
1618    pub const ACCEPT: u64 = 0x6f535bd36b20fc7b;
1619    pub const CONNECTED: u64 = 0xf40756858f21866;
1620}
1621
1622pub mod channel_listener_registry_ordinals {
1623    pub const LISTEN_L2CAP: u64 = 0x39c6e9001d102338;
1624}
1625
1626pub mod channel_offload_ext_ordinals {
1627    pub const START_OFFLOAD: u64 = 0x2dd620feea793fe8;
1628}
1629
1630pub mod codec_delay_ordinals {
1631    pub const GET_CODEC_LOCAL_DELAY_RANGE: u64 = 0x1cf34fdeed80b4d;
1632}
1633
1634pub mod connected_isochronous_group_ordinals {
1635    pub const ESTABLISH_STREAMS: u64 = 0xc7296c5edb4dacc;
1636    pub const REMOVE: u64 = 0xbed433babd20503;
1637}
1638
1639pub mod connection_ordinals {
1640    pub const GET_CODEC_LOCAL_DELAY_RANGE: u64 = 0x1cf34fdeed80b4d;
1641    pub const REQUEST_GATT_CLIENT: u64 = 0x2a670e0fec6ccc6b;
1642    pub const ACCEPT_CIS: u64 = 0x7e6338c237088144;
1643    pub const CONNECT_L2CAP: u64 = 0x12351316feaebce9;
1644    pub const TRANSFER_PERIODIC_ADVERTISING_SYNC: u64 = 0x1117a10b5ba1e219;
1645    pub const ACCEPT_PERIODIC_ADVERTISING_SYNC_TRANSFER: u64 = 0x441a31a7effa7e2b;
1646}
1647
1648pub mod isochronous_stream_ordinals {
1649    pub const ON_ESTABLISHED: u64 = 0x341c50e9d10f3421;
1650    pub const SETUP_DATA_PATH: u64 = 0x7ec1e2b9cc6d2fbe;
1651    pub const READ: u64 = 0x6d7d8b4950ed3a32;
1652    pub const WRITE: u64 = 0x5282e90b667d0d43;
1653}
1654
1655pub mod periodic_advertising_sync_ordinals {
1656    pub const ON_ESTABLISHED: u64 = 0x4a5c307761c40fdc;
1657    pub const ON_ERROR: u64 = 0x1c051673126ce4a;
1658    pub const WATCH_ADVERTISING_REPORT: u64 = 0x2ea610fea0e7d337;
1659    pub const SYNC_TO_SUBEVENTS: u64 = 0x653c5dab1f1d80ed;
1660    pub const CANCEL: u64 = 0xd617c037eaf5d92;
1661}
1662
1663pub mod peripheral_ordinals {
1664    pub const LISTEN_L2CAP: u64 = 0x39c6e9001d102338;
1665    pub const ADVERTISE: u64 = 0x2d9ec9260c32c17f;
1666    pub const START_ADVERTISING: u64 = 0x5875c1c575f00f7d;
1667    pub const ON_PEER_CONNECTED: u64 = 0x16135d464299e356;
1668}
1669
1670pub mod privileged_central_ordinals {
1671    pub const LISTEN_L2CAP: u64 = 0x39c6e9001d102338;
1672    pub const SCAN: u64 = 0x41f7121798dfe15f;
1673    pub const CONNECT: u64 = 0x31a3065f2a6913c4;
1674    pub const SYNC_TO_PERIODIC_ADVERTISING: u64 = 0x1db6df126a00c5b9;
1675    pub const CREATE_CONNECTED_ISOCHRONOUS_GROUP: u64 = 0x60323e70ae22e13;
1676    pub const GET_PERIPHERALS: u64 = 0x37ba777499c683a8;
1677    pub const GET_PERIPHERAL: u64 = 0x97f5a2f2d9c13da;
1678    pub const START_SCAN: u64 = 0xeb4cf0cd0e1132b;
1679    pub const STOP_SCAN: u64 = 0x5f79ee6a0bb037a0;
1680    pub const CONNECT_PERIPHERAL: u64 = 0x714d6c32d066d75a;
1681    pub const DISCONNECT_PERIPHERAL: u64 = 0xa9430da197362fd;
1682    pub const ON_SCAN_STATE_CHANGED: u64 = 0x5f8edc23cad04d3f;
1683    pub const ON_DEVICE_DISCOVERED: u64 = 0x708dadf20d66db6;
1684    pub const ON_PERIPHERAL_DISCONNECTED: u64 = 0x4e4c6b979b2126df;
1685}
1686
1687pub mod privileged_peripheral_ordinals {
1688    pub const LISTEN_L2CAP: u64 = 0x39c6e9001d102338;
1689    pub const ADVERTISE: u64 = 0x2d9ec9260c32c17f;
1690    pub const START_ADVERTISING: u64 = 0x5875c1c575f00f7d;
1691    pub const ON_PEER_CONNECTED: u64 = 0x16135d464299e356;
1692}
1693
1694pub mod scan_result_watcher_ordinals {
1695    pub const WATCH: u64 = 0x713a122e949f301a;
1696}
1697
1698mod internal {
1699    use super::*;
1700    unsafe impl fidl::encoding::TypeMarker for AdvertisingModeHint {
1701        type Owned = Self;
1702
1703        #[inline(always)]
1704        fn inline_align(_context: fidl::encoding::Context) -> usize {
1705            std::mem::align_of::<u8>()
1706        }
1707
1708        #[inline(always)]
1709        fn inline_size(_context: fidl::encoding::Context) -> usize {
1710            std::mem::size_of::<u8>()
1711        }
1712
1713        #[inline(always)]
1714        fn encode_is_copy() -> bool {
1715            true
1716        }
1717
1718        #[inline(always)]
1719        fn decode_is_copy() -> bool {
1720            false
1721        }
1722    }
1723
1724    impl fidl::encoding::ValueTypeMarker for AdvertisingModeHint {
1725        type Borrowed<'a> = Self;
1726        #[inline(always)]
1727        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1728            *value
1729        }
1730    }
1731
1732    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1733        for AdvertisingModeHint
1734    {
1735        #[inline]
1736        unsafe fn encode(
1737            self,
1738            encoder: &mut fidl::encoding::Encoder<'_, D>,
1739            offset: usize,
1740            _depth: fidl::encoding::Depth,
1741        ) -> fidl::Result<()> {
1742            encoder.debug_check_bounds::<Self>(offset);
1743            encoder.write_num(self.into_primitive(), offset);
1744            Ok(())
1745        }
1746    }
1747
1748    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdvertisingModeHint {
1749        #[inline(always)]
1750        fn new_empty() -> Self {
1751            Self::VeryFast
1752        }
1753
1754        #[inline]
1755        unsafe fn decode(
1756            &mut self,
1757            decoder: &mut fidl::encoding::Decoder<'_, D>,
1758            offset: usize,
1759            _depth: fidl::encoding::Depth,
1760        ) -> fidl::Result<()> {
1761            decoder.debug_check_bounds::<Self>(offset);
1762            let prim = decoder.read_num::<u8>(offset);
1763
1764            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1765            Ok(())
1766        }
1767    }
1768    unsafe impl fidl::encoding::TypeMarker for CentralError {
1769        type Owned = Self;
1770
1771        #[inline(always)]
1772        fn inline_align(_context: fidl::encoding::Context) -> usize {
1773            std::mem::align_of::<u32>()
1774        }
1775
1776        #[inline(always)]
1777        fn inline_size(_context: fidl::encoding::Context) -> usize {
1778            std::mem::size_of::<u32>()
1779        }
1780
1781        #[inline(always)]
1782        fn encode_is_copy() -> bool {
1783            true
1784        }
1785
1786        #[inline(always)]
1787        fn decode_is_copy() -> bool {
1788            false
1789        }
1790    }
1791
1792    impl fidl::encoding::ValueTypeMarker for CentralError {
1793        type Borrowed<'a> = Self;
1794        #[inline(always)]
1795        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1796            *value
1797        }
1798    }
1799
1800    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CentralError {
1801        #[inline]
1802        unsafe fn encode(
1803            self,
1804            encoder: &mut fidl::encoding::Encoder<'_, D>,
1805            offset: usize,
1806            _depth: fidl::encoding::Depth,
1807        ) -> fidl::Result<()> {
1808            encoder.debug_check_bounds::<Self>(offset);
1809            encoder.write_num(self.into_primitive(), offset);
1810            Ok(())
1811        }
1812    }
1813
1814    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CentralError {
1815        #[inline(always)]
1816        fn new_empty() -> Self {
1817            Self::Aborted
1818        }
1819
1820        #[inline]
1821        unsafe fn decode(
1822            &mut self,
1823            decoder: &mut fidl::encoding::Decoder<'_, D>,
1824            offset: usize,
1825            _depth: fidl::encoding::Depth,
1826        ) -> fidl::Result<()> {
1827            decoder.debug_check_bounds::<Self>(offset);
1828            let prim = decoder.read_num::<u32>(offset);
1829
1830            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1831            Ok(())
1832        }
1833    }
1834    unsafe impl fidl::encoding::TypeMarker for CigFramingOptions {
1835        type Owned = Self;
1836
1837        #[inline(always)]
1838        fn inline_align(_context: fidl::encoding::Context) -> usize {
1839            std::mem::align_of::<u32>()
1840        }
1841
1842        #[inline(always)]
1843        fn inline_size(_context: fidl::encoding::Context) -> usize {
1844            std::mem::size_of::<u32>()
1845        }
1846
1847        #[inline(always)]
1848        fn encode_is_copy() -> bool {
1849            true
1850        }
1851
1852        #[inline(always)]
1853        fn decode_is_copy() -> bool {
1854            false
1855        }
1856    }
1857
1858    impl fidl::encoding::ValueTypeMarker for CigFramingOptions {
1859        type Borrowed<'a> = Self;
1860        #[inline(always)]
1861        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1862            *value
1863        }
1864    }
1865
1866    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1867        for CigFramingOptions
1868    {
1869        #[inline]
1870        unsafe fn encode(
1871            self,
1872            encoder: &mut fidl::encoding::Encoder<'_, D>,
1873            offset: usize,
1874            _depth: fidl::encoding::Depth,
1875        ) -> fidl::Result<()> {
1876            encoder.debug_check_bounds::<Self>(offset);
1877            encoder.write_num(self.into_primitive(), offset);
1878            Ok(())
1879        }
1880    }
1881
1882    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CigFramingOptions {
1883        #[inline(always)]
1884        fn new_empty() -> Self {
1885            Self::Unframed
1886        }
1887
1888        #[inline]
1889        unsafe fn decode(
1890            &mut self,
1891            decoder: &mut fidl::encoding::Decoder<'_, D>,
1892            offset: usize,
1893            _depth: fidl::encoding::Depth,
1894        ) -> fidl::Result<()> {
1895            decoder.debug_check_bounds::<Self>(offset);
1896            let prim = decoder.read_num::<u32>(offset);
1897
1898            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1899            Ok(())
1900        }
1901    }
1902    unsafe impl fidl::encoding::TypeMarker for CigPacking {
1903        type Owned = Self;
1904
1905        #[inline(always)]
1906        fn inline_align(_context: fidl::encoding::Context) -> usize {
1907            std::mem::align_of::<u32>()
1908        }
1909
1910        #[inline(always)]
1911        fn inline_size(_context: fidl::encoding::Context) -> usize {
1912            std::mem::size_of::<u32>()
1913        }
1914
1915        #[inline(always)]
1916        fn encode_is_copy() -> bool {
1917            false
1918        }
1919
1920        #[inline(always)]
1921        fn decode_is_copy() -> bool {
1922            false
1923        }
1924    }
1925
1926    impl fidl::encoding::ValueTypeMarker for CigPacking {
1927        type Borrowed<'a> = Self;
1928        #[inline(always)]
1929        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1930            *value
1931        }
1932    }
1933
1934    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CigPacking {
1935        #[inline]
1936        unsafe fn encode(
1937            self,
1938            encoder: &mut fidl::encoding::Encoder<'_, D>,
1939            offset: usize,
1940            _depth: fidl::encoding::Depth,
1941        ) -> fidl::Result<()> {
1942            encoder.debug_check_bounds::<Self>(offset);
1943            encoder.write_num(self.into_primitive(), offset);
1944            Ok(())
1945        }
1946    }
1947
1948    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CigPacking {
1949        #[inline(always)]
1950        fn new_empty() -> Self {
1951            Self::unknown()
1952        }
1953
1954        #[inline]
1955        unsafe fn decode(
1956            &mut self,
1957            decoder: &mut fidl::encoding::Decoder<'_, D>,
1958            offset: usize,
1959            _depth: fidl::encoding::Depth,
1960        ) -> fidl::Result<()> {
1961            decoder.debug_check_bounds::<Self>(offset);
1962            let prim = decoder.read_num::<u32>(offset);
1963
1964            *self = Self::from_primitive_allow_unknown(prim);
1965            Ok(())
1966        }
1967    }
1968    unsafe impl fidl::encoding::TypeMarker for CreateCigError {
1969        type Owned = Self;
1970
1971        #[inline(always)]
1972        fn inline_align(_context: fidl::encoding::Context) -> usize {
1973            std::mem::align_of::<u32>()
1974        }
1975
1976        #[inline(always)]
1977        fn inline_size(_context: fidl::encoding::Context) -> usize {
1978            std::mem::size_of::<u32>()
1979        }
1980
1981        #[inline(always)]
1982        fn encode_is_copy() -> bool {
1983            false
1984        }
1985
1986        #[inline(always)]
1987        fn decode_is_copy() -> bool {
1988            false
1989        }
1990    }
1991
1992    impl fidl::encoding::ValueTypeMarker for CreateCigError {
1993        type Borrowed<'a> = Self;
1994        #[inline(always)]
1995        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1996            *value
1997        }
1998    }
1999
2000    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CreateCigError {
2001        #[inline]
2002        unsafe fn encode(
2003            self,
2004            encoder: &mut fidl::encoding::Encoder<'_, D>,
2005            offset: usize,
2006            _depth: fidl::encoding::Depth,
2007        ) -> fidl::Result<()> {
2008            encoder.debug_check_bounds::<Self>(offset);
2009            encoder.write_num(self.into_primitive(), offset);
2010            Ok(())
2011        }
2012    }
2013
2014    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CreateCigError {
2015        #[inline(always)]
2016        fn new_empty() -> Self {
2017            Self::unknown()
2018        }
2019
2020        #[inline]
2021        unsafe fn decode(
2022            &mut self,
2023            decoder: &mut fidl::encoding::Decoder<'_, D>,
2024            offset: usize,
2025            _depth: fidl::encoding::Depth,
2026        ) -> fidl::Result<()> {
2027            decoder.debug_check_bounds::<Self>(offset);
2028            let prim = decoder.read_num::<u32>(offset);
2029
2030            *self = Self::from_primitive_allow_unknown(prim);
2031            Ok(())
2032        }
2033    }
2034    unsafe impl fidl::encoding::TypeMarker for EstablishStreamsError {
2035        type Owned = Self;
2036
2037        #[inline(always)]
2038        fn inline_align(_context: fidl::encoding::Context) -> usize {
2039            std::mem::align_of::<u32>()
2040        }
2041
2042        #[inline(always)]
2043        fn inline_size(_context: fidl::encoding::Context) -> usize {
2044            std::mem::size_of::<u32>()
2045        }
2046
2047        #[inline(always)]
2048        fn encode_is_copy() -> bool {
2049            false
2050        }
2051
2052        #[inline(always)]
2053        fn decode_is_copy() -> bool {
2054            false
2055        }
2056    }
2057
2058    impl fidl::encoding::ValueTypeMarker for EstablishStreamsError {
2059        type Borrowed<'a> = Self;
2060        #[inline(always)]
2061        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2062            *value
2063        }
2064    }
2065
2066    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2067        for EstablishStreamsError
2068    {
2069        #[inline]
2070        unsafe fn encode(
2071            self,
2072            encoder: &mut fidl::encoding::Encoder<'_, D>,
2073            offset: usize,
2074            _depth: fidl::encoding::Depth,
2075        ) -> fidl::Result<()> {
2076            encoder.debug_check_bounds::<Self>(offset);
2077            encoder.write_num(self.into_primitive(), offset);
2078            Ok(())
2079        }
2080    }
2081
2082    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EstablishStreamsError {
2083        #[inline(always)]
2084        fn new_empty() -> Self {
2085            Self::unknown()
2086        }
2087
2088        #[inline]
2089        unsafe fn decode(
2090            &mut self,
2091            decoder: &mut fidl::encoding::Decoder<'_, D>,
2092            offset: usize,
2093            _depth: fidl::encoding::Depth,
2094        ) -> fidl::Result<()> {
2095            decoder.debug_check_bounds::<Self>(offset);
2096            let prim = decoder.read_num::<u32>(offset);
2097
2098            *self = Self::from_primitive_allow_unknown(prim);
2099            Ok(())
2100        }
2101    }
2102    unsafe impl fidl::encoding::TypeMarker for IsoPacketStatusFlag {
2103        type Owned = Self;
2104
2105        #[inline(always)]
2106        fn inline_align(_context: fidl::encoding::Context) -> usize {
2107            std::mem::align_of::<u8>()
2108        }
2109
2110        #[inline(always)]
2111        fn inline_size(_context: fidl::encoding::Context) -> usize {
2112            std::mem::size_of::<u8>()
2113        }
2114
2115        #[inline(always)]
2116        fn encode_is_copy() -> bool {
2117            true
2118        }
2119
2120        #[inline(always)]
2121        fn decode_is_copy() -> bool {
2122            false
2123        }
2124    }
2125
2126    impl fidl::encoding::ValueTypeMarker for IsoPacketStatusFlag {
2127        type Borrowed<'a> = Self;
2128        #[inline(always)]
2129        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2130            *value
2131        }
2132    }
2133
2134    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2135        for IsoPacketStatusFlag
2136    {
2137        #[inline]
2138        unsafe fn encode(
2139            self,
2140            encoder: &mut fidl::encoding::Encoder<'_, D>,
2141            offset: usize,
2142            _depth: fidl::encoding::Depth,
2143        ) -> fidl::Result<()> {
2144            encoder.debug_check_bounds::<Self>(offset);
2145            encoder.write_num(self.into_primitive(), offset);
2146            Ok(())
2147        }
2148    }
2149
2150    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IsoPacketStatusFlag {
2151        #[inline(always)]
2152        fn new_empty() -> Self {
2153            Self::ValidData
2154        }
2155
2156        #[inline]
2157        unsafe fn decode(
2158            &mut self,
2159            decoder: &mut fidl::encoding::Decoder<'_, D>,
2160            offset: usize,
2161            _depth: fidl::encoding::Depth,
2162        ) -> fidl::Result<()> {
2163            decoder.debug_check_bounds::<Self>(offset);
2164            let prim = decoder.read_num::<u8>(offset);
2165
2166            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2167            Ok(())
2168        }
2169    }
2170    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncError {
2171        type Owned = Self;
2172
2173        #[inline(always)]
2174        fn inline_align(_context: fidl::encoding::Context) -> usize {
2175            std::mem::align_of::<u32>()
2176        }
2177
2178        #[inline(always)]
2179        fn inline_size(_context: fidl::encoding::Context) -> usize {
2180            std::mem::size_of::<u32>()
2181        }
2182
2183        #[inline(always)]
2184        fn encode_is_copy() -> bool {
2185            false
2186        }
2187
2188        #[inline(always)]
2189        fn decode_is_copy() -> bool {
2190            false
2191        }
2192    }
2193
2194    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncError {
2195        type Borrowed<'a> = Self;
2196        #[inline(always)]
2197        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2198            *value
2199        }
2200    }
2201
2202    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2203        for PeriodicAdvertisingSyncError
2204    {
2205        #[inline]
2206        unsafe fn encode(
2207            self,
2208            encoder: &mut fidl::encoding::Encoder<'_, D>,
2209            offset: usize,
2210            _depth: fidl::encoding::Depth,
2211        ) -> fidl::Result<()> {
2212            encoder.debug_check_bounds::<Self>(offset);
2213            encoder.write_num(self.into_primitive(), offset);
2214            Ok(())
2215        }
2216    }
2217
2218    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2219        for PeriodicAdvertisingSyncError
2220    {
2221        #[inline(always)]
2222        fn new_empty() -> Self {
2223            Self::unknown()
2224        }
2225
2226        #[inline]
2227        unsafe fn decode(
2228            &mut self,
2229            decoder: &mut fidl::encoding::Decoder<'_, D>,
2230            offset: usize,
2231            _depth: fidl::encoding::Depth,
2232        ) -> fidl::Result<()> {
2233            decoder.debug_check_bounds::<Self>(offset);
2234            let prim = decoder.read_num::<u32>(offset);
2235
2236            *self = Self::from_primitive_allow_unknown(prim);
2237            Ok(())
2238        }
2239    }
2240    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncTransferError {
2241        type Owned = Self;
2242
2243        #[inline(always)]
2244        fn inline_align(_context: fidl::encoding::Context) -> usize {
2245            std::mem::align_of::<u32>()
2246        }
2247
2248        #[inline(always)]
2249        fn inline_size(_context: fidl::encoding::Context) -> usize {
2250            std::mem::size_of::<u32>()
2251        }
2252
2253        #[inline(always)]
2254        fn encode_is_copy() -> bool {
2255            false
2256        }
2257
2258        #[inline(always)]
2259        fn decode_is_copy() -> bool {
2260            false
2261        }
2262    }
2263
2264    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncTransferError {
2265        type Borrowed<'a> = Self;
2266        #[inline(always)]
2267        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2268            *value
2269        }
2270    }
2271
2272    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2273        for PeriodicAdvertisingSyncTransferError
2274    {
2275        #[inline]
2276        unsafe fn encode(
2277            self,
2278            encoder: &mut fidl::encoding::Encoder<'_, D>,
2279            offset: usize,
2280            _depth: fidl::encoding::Depth,
2281        ) -> fidl::Result<()> {
2282            encoder.debug_check_bounds::<Self>(offset);
2283            encoder.write_num(self.into_primitive(), offset);
2284            Ok(())
2285        }
2286    }
2287
2288    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2289        for PeriodicAdvertisingSyncTransferError
2290    {
2291        #[inline(always)]
2292        fn new_empty() -> Self {
2293            Self::unknown()
2294        }
2295
2296        #[inline]
2297        unsafe fn decode(
2298            &mut self,
2299            decoder: &mut fidl::encoding::Decoder<'_, D>,
2300            offset: usize,
2301            _depth: fidl::encoding::Depth,
2302        ) -> fidl::Result<()> {
2303            decoder.debug_check_bounds::<Self>(offset);
2304            let prim = decoder.read_num::<u32>(offset);
2305
2306            *self = Self::from_primitive_allow_unknown(prim);
2307            Ok(())
2308        }
2309    }
2310    unsafe impl fidl::encoding::TypeMarker for PeripheralError {
2311        type Owned = Self;
2312
2313        #[inline(always)]
2314        fn inline_align(_context: fidl::encoding::Context) -> usize {
2315            std::mem::align_of::<u32>()
2316        }
2317
2318        #[inline(always)]
2319        fn inline_size(_context: fidl::encoding::Context) -> usize {
2320            std::mem::size_of::<u32>()
2321        }
2322
2323        #[inline(always)]
2324        fn encode_is_copy() -> bool {
2325            true
2326        }
2327
2328        #[inline(always)]
2329        fn decode_is_copy() -> bool {
2330            false
2331        }
2332    }
2333
2334    impl fidl::encoding::ValueTypeMarker for PeripheralError {
2335        type Borrowed<'a> = Self;
2336        #[inline(always)]
2337        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2338            *value
2339        }
2340    }
2341
2342    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2343        for PeripheralError
2344    {
2345        #[inline]
2346        unsafe fn encode(
2347            self,
2348            encoder: &mut fidl::encoding::Encoder<'_, D>,
2349            offset: usize,
2350            _depth: fidl::encoding::Depth,
2351        ) -> fidl::Result<()> {
2352            encoder.debug_check_bounds::<Self>(offset);
2353            encoder.write_num(self.into_primitive(), offset);
2354            Ok(())
2355        }
2356    }
2357
2358    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PeripheralError {
2359        #[inline(always)]
2360        fn new_empty() -> Self {
2361            Self::NotSupported
2362        }
2363
2364        #[inline]
2365        unsafe fn decode(
2366            &mut self,
2367            decoder: &mut fidl::encoding::Decoder<'_, D>,
2368            offset: usize,
2369            _depth: fidl::encoding::Depth,
2370        ) -> fidl::Result<()> {
2371            decoder.debug_check_bounds::<Self>(offset);
2372            let prim = decoder.read_num::<u32>(offset);
2373
2374            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2375            Ok(())
2376        }
2377    }
2378    unsafe impl fidl::encoding::TypeMarker for PhysicalLayer {
2379        type Owned = Self;
2380
2381        #[inline(always)]
2382        fn inline_align(_context: fidl::encoding::Context) -> usize {
2383            std::mem::align_of::<u8>()
2384        }
2385
2386        #[inline(always)]
2387        fn inline_size(_context: fidl::encoding::Context) -> usize {
2388            std::mem::size_of::<u8>()
2389        }
2390
2391        #[inline(always)]
2392        fn encode_is_copy() -> bool {
2393            false
2394        }
2395
2396        #[inline(always)]
2397        fn decode_is_copy() -> bool {
2398            false
2399        }
2400    }
2401
2402    impl fidl::encoding::ValueTypeMarker for PhysicalLayer {
2403        type Borrowed<'a> = Self;
2404        #[inline(always)]
2405        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2406            *value
2407        }
2408    }
2409
2410    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PhysicalLayer {
2411        #[inline]
2412        unsafe fn encode(
2413            self,
2414            encoder: &mut fidl::encoding::Encoder<'_, D>,
2415            offset: usize,
2416            _depth: fidl::encoding::Depth,
2417        ) -> fidl::Result<()> {
2418            encoder.debug_check_bounds::<Self>(offset);
2419            encoder.write_num(self.into_primitive(), offset);
2420            Ok(())
2421        }
2422    }
2423
2424    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PhysicalLayer {
2425        #[inline(always)]
2426        fn new_empty() -> Self {
2427            Self::unknown()
2428        }
2429
2430        #[inline]
2431        unsafe fn decode(
2432            &mut self,
2433            decoder: &mut fidl::encoding::Decoder<'_, D>,
2434            offset: usize,
2435            _depth: fidl::encoding::Depth,
2436        ) -> fidl::Result<()> {
2437            decoder.debug_check_bounds::<Self>(offset);
2438            let prim = decoder.read_num::<u8>(offset);
2439
2440            *self = Self::from_primitive_allow_unknown(prim);
2441            Ok(())
2442        }
2443    }
2444
2445    impl fidl::encoding::ValueTypeMarker for AdvertisingDataDeprecated {
2446        type Borrowed<'a> = &'a Self;
2447        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2448            value
2449        }
2450    }
2451
2452    unsafe impl fidl::encoding::TypeMarker for AdvertisingDataDeprecated {
2453        type Owned = Self;
2454
2455        #[inline(always)]
2456        fn inline_align(_context: fidl::encoding::Context) -> usize {
2457            8
2458        }
2459
2460        #[inline(always)]
2461        fn inline_size(_context: fidl::encoding::Context) -> usize {
2462            112
2463        }
2464    }
2465
2466    unsafe impl<D: fidl::encoding::ResourceDialect>
2467        fidl::encoding::Encode<AdvertisingDataDeprecated, D> for &AdvertisingDataDeprecated
2468    {
2469        #[inline]
2470        unsafe fn encode(
2471            self,
2472            encoder: &mut fidl::encoding::Encoder<'_, D>,
2473            offset: usize,
2474            _depth: fidl::encoding::Depth,
2475        ) -> fidl::Result<()> {
2476            encoder.debug_check_bounds::<AdvertisingDataDeprecated>(offset);
2477            // Delegate to tuple encoding.
2478            fidl::encoding::Encode::<AdvertisingDataDeprecated, D>::encode(
2479                (
2480                    <fidl::encoding::Optional<fidl::encoding::BoundedString<248>> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
2481                    <fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8> as fidl::encoding::ValueTypeMarker>::borrow(&self.tx_power_level),
2482                    <fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16> as fidl::encoding::ValueTypeMarker>::borrow(&self.appearance),
2483                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>> as fidl::encoding::ValueTypeMarker>::borrow(&self.service_uuids),
2484                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<ServiceDataEntry>> as fidl::encoding::ValueTypeMarker>::borrow(&self.service_data),
2485                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<ManufacturerSpecificDataEntry>> as fidl::encoding::ValueTypeMarker>::borrow(&self.manufacturer_specific_data),
2486                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>> as fidl::encoding::ValueTypeMarker>::borrow(&self.solicited_service_uuids),
2487                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>> as fidl::encoding::ValueTypeMarker>::borrow(&self.uris),
2488                ),
2489                encoder, offset, _depth
2490            )
2491        }
2492    }
2493    unsafe impl<
2494        D: fidl::encoding::ResourceDialect,
2495        T0: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<248>>, D>,
2496        T1: fidl::encoding::Encode<fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>, D>,
2497        T2: fidl::encoding::Encode<fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16>, D>,
2498        T3: fidl::encoding::Encode<
2499                fidl::encoding::Optional<
2500                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
2501                >,
2502                D,
2503            >,
2504        T4: fidl::encoding::Encode<
2505                fidl::encoding::Optional<fidl::encoding::UnboundedVector<ServiceDataEntry>>,
2506                D,
2507            >,
2508        T5: fidl::encoding::Encode<
2509                fidl::encoding::Optional<
2510                    fidl::encoding::UnboundedVector<ManufacturerSpecificDataEntry>,
2511                >,
2512                D,
2513            >,
2514        T6: fidl::encoding::Encode<
2515                fidl::encoding::Optional<
2516                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
2517                >,
2518                D,
2519            >,
2520        T7: fidl::encoding::Encode<
2521                fidl::encoding::Optional<
2522                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2523                >,
2524                D,
2525            >,
2526    > fidl::encoding::Encode<AdvertisingDataDeprecated, D> for (T0, T1, T2, T3, T4, T5, T6, T7)
2527    {
2528        #[inline]
2529        unsafe fn encode(
2530            self,
2531            encoder: &mut fidl::encoding::Encoder<'_, D>,
2532            offset: usize,
2533            depth: fidl::encoding::Depth,
2534        ) -> fidl::Result<()> {
2535            encoder.debug_check_bounds::<AdvertisingDataDeprecated>(offset);
2536            // Zero out padding regions. There's no need to apply masks
2537            // because the unmasked parts will be overwritten by fields.
2538            // Write the fields.
2539            self.0.encode(encoder, offset + 0, depth)?;
2540            self.1.encode(encoder, offset + 16, depth)?;
2541            self.2.encode(encoder, offset + 24, depth)?;
2542            self.3.encode(encoder, offset + 32, depth)?;
2543            self.4.encode(encoder, offset + 48, depth)?;
2544            self.5.encode(encoder, offset + 64, depth)?;
2545            self.6.encode(encoder, offset + 80, depth)?;
2546            self.7.encode(encoder, offset + 96, depth)?;
2547            Ok(())
2548        }
2549    }
2550
2551    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2552        for AdvertisingDataDeprecated
2553    {
2554        #[inline(always)]
2555        fn new_empty() -> Self {
2556            Self {
2557                name: fidl::new_empty!(
2558                    fidl::encoding::Optional<fidl::encoding::BoundedString<248>>,
2559                    D
2560                ),
2561                tx_power_level: fidl::new_empty!(
2562                    fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>,
2563                    D
2564                ),
2565                appearance: fidl::new_empty!(
2566                    fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16>,
2567                    D
2568                ),
2569                service_uuids: fidl::new_empty!(
2570                    fidl::encoding::Optional<
2571                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
2572                    >,
2573                    D
2574                ),
2575                service_data: fidl::new_empty!(
2576                    fidl::encoding::Optional<fidl::encoding::UnboundedVector<ServiceDataEntry>>,
2577                    D
2578                ),
2579                manufacturer_specific_data: fidl::new_empty!(
2580                    fidl::encoding::Optional<
2581                        fidl::encoding::UnboundedVector<ManufacturerSpecificDataEntry>,
2582                    >,
2583                    D
2584                ),
2585                solicited_service_uuids: fidl::new_empty!(
2586                    fidl::encoding::Optional<
2587                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
2588                    >,
2589                    D
2590                ),
2591                uris: fidl::new_empty!(
2592                    fidl::encoding::Optional<
2593                        fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2594                    >,
2595                    D
2596                ),
2597            }
2598        }
2599
2600        #[inline]
2601        unsafe fn decode(
2602            &mut self,
2603            decoder: &mut fidl::encoding::Decoder<'_, D>,
2604            offset: usize,
2605            _depth: fidl::encoding::Depth,
2606        ) -> fidl::Result<()> {
2607            decoder.debug_check_bounds::<Self>(offset);
2608            // Verify that padding bytes are zero.
2609            fidl::decode!(
2610                fidl::encoding::Optional<fidl::encoding::BoundedString<248>>,
2611                D,
2612                &mut self.name,
2613                decoder,
2614                offset + 0,
2615                _depth
2616            )?;
2617            fidl::decode!(
2618                fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>,
2619                D,
2620                &mut self.tx_power_level,
2621                decoder,
2622                offset + 16,
2623                _depth
2624            )?;
2625            fidl::decode!(
2626                fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16>,
2627                D,
2628                &mut self.appearance,
2629                decoder,
2630                offset + 24,
2631                _depth
2632            )?;
2633            fidl::decode!(
2634                fidl::encoding::Optional<
2635                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
2636                >,
2637                D,
2638                &mut self.service_uuids,
2639                decoder,
2640                offset + 32,
2641                _depth
2642            )?;
2643            fidl::decode!(
2644                fidl::encoding::Optional<fidl::encoding::UnboundedVector<ServiceDataEntry>>,
2645                D,
2646                &mut self.service_data,
2647                decoder,
2648                offset + 48,
2649                _depth
2650            )?;
2651            fidl::decode!(
2652                fidl::encoding::Optional<
2653                    fidl::encoding::UnboundedVector<ManufacturerSpecificDataEntry>,
2654                >,
2655                D,
2656                &mut self.manufacturer_specific_data,
2657                decoder,
2658                offset + 64,
2659                _depth
2660            )?;
2661            fidl::decode!(
2662                fidl::encoding::Optional<
2663                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
2664                >,
2665                D,
2666                &mut self.solicited_service_uuids,
2667                decoder,
2668                offset + 80,
2669                _depth
2670            )?;
2671            fidl::decode!(
2672                fidl::encoding::Optional<
2673                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
2674                >,
2675                D,
2676                &mut self.uris,
2677                decoder,
2678                offset + 96,
2679                _depth
2680            )?;
2681            Ok(())
2682        }
2683    }
2684
2685    impl fidl::encoding::ValueTypeMarker for CentralConnectPeripheralResponse {
2686        type Borrowed<'a> = &'a Self;
2687        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2688            value
2689        }
2690    }
2691
2692    unsafe impl fidl::encoding::TypeMarker for CentralConnectPeripheralResponse {
2693        type Owned = Self;
2694
2695        #[inline(always)]
2696        fn inline_align(_context: fidl::encoding::Context) -> usize {
2697            8
2698        }
2699
2700        #[inline(always)]
2701        fn inline_size(_context: fidl::encoding::Context) -> usize {
2702            8
2703        }
2704    }
2705
2706    unsafe impl<D: fidl::encoding::ResourceDialect>
2707        fidl::encoding::Encode<CentralConnectPeripheralResponse, D>
2708        for &CentralConnectPeripheralResponse
2709    {
2710        #[inline]
2711        unsafe fn encode(
2712            self,
2713            encoder: &mut fidl::encoding::Encoder<'_, D>,
2714            offset: usize,
2715            _depth: fidl::encoding::Depth,
2716        ) -> fidl::Result<()> {
2717            encoder.debug_check_bounds::<CentralConnectPeripheralResponse>(offset);
2718            // Delegate to tuple encoding.
2719            fidl::encoding::Encode::<CentralConnectPeripheralResponse, D>::encode(
2720                (
2721                    <fidl_fuchsia_bluetooth__common::Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
2722                ),
2723                encoder, offset, _depth
2724            )
2725        }
2726    }
2727    unsafe impl<
2728        D: fidl::encoding::ResourceDialect,
2729        T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth__common::Status, D>,
2730    > fidl::encoding::Encode<CentralConnectPeripheralResponse, D> for (T0,)
2731    {
2732        #[inline]
2733        unsafe fn encode(
2734            self,
2735            encoder: &mut fidl::encoding::Encoder<'_, D>,
2736            offset: usize,
2737            depth: fidl::encoding::Depth,
2738        ) -> fidl::Result<()> {
2739            encoder.debug_check_bounds::<CentralConnectPeripheralResponse>(offset);
2740            // Zero out padding regions. There's no need to apply masks
2741            // because the unmasked parts will be overwritten by fields.
2742            // Write the fields.
2743            self.0.encode(encoder, offset + 0, depth)?;
2744            Ok(())
2745        }
2746    }
2747
2748    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2749        for CentralConnectPeripheralResponse
2750    {
2751        #[inline(always)]
2752        fn new_empty() -> Self {
2753            Self { status: fidl::new_empty!(fidl_fuchsia_bluetooth__common::Status, D) }
2754        }
2755
2756        #[inline]
2757        unsafe fn decode(
2758            &mut self,
2759            decoder: &mut fidl::encoding::Decoder<'_, D>,
2760            offset: usize,
2761            _depth: fidl::encoding::Depth,
2762        ) -> fidl::Result<()> {
2763            decoder.debug_check_bounds::<Self>(offset);
2764            // Verify that padding bytes are zero.
2765            fidl::decode!(
2766                fidl_fuchsia_bluetooth__common::Status,
2767                D,
2768                &mut self.status,
2769                decoder,
2770                offset + 0,
2771                _depth
2772            )?;
2773            Ok(())
2774        }
2775    }
2776
2777    impl fidl::encoding::ValueTypeMarker for CentralDisconnectPeripheralRequest {
2778        type Borrowed<'a> = &'a Self;
2779        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2780            value
2781        }
2782    }
2783
2784    unsafe impl fidl::encoding::TypeMarker for CentralDisconnectPeripheralRequest {
2785        type Owned = Self;
2786
2787        #[inline(always)]
2788        fn inline_align(_context: fidl::encoding::Context) -> usize {
2789            8
2790        }
2791
2792        #[inline(always)]
2793        fn inline_size(_context: fidl::encoding::Context) -> usize {
2794            16
2795        }
2796    }
2797
2798    unsafe impl<D: fidl::encoding::ResourceDialect>
2799        fidl::encoding::Encode<CentralDisconnectPeripheralRequest, D>
2800        for &CentralDisconnectPeripheralRequest
2801    {
2802        #[inline]
2803        unsafe fn encode(
2804            self,
2805            encoder: &mut fidl::encoding::Encoder<'_, D>,
2806            offset: usize,
2807            _depth: fidl::encoding::Depth,
2808        ) -> fidl::Result<()> {
2809            encoder.debug_check_bounds::<CentralDisconnectPeripheralRequest>(offset);
2810            // Delegate to tuple encoding.
2811            fidl::encoding::Encode::<CentralDisconnectPeripheralRequest, D>::encode(
2812                (<fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow(
2813                    &self.identifier,
2814                ),),
2815                encoder,
2816                offset,
2817                _depth,
2818            )
2819        }
2820    }
2821    unsafe impl<
2822        D: fidl::encoding::ResourceDialect,
2823        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<16>, D>,
2824    > fidl::encoding::Encode<CentralDisconnectPeripheralRequest, D> for (T0,)
2825    {
2826        #[inline]
2827        unsafe fn encode(
2828            self,
2829            encoder: &mut fidl::encoding::Encoder<'_, D>,
2830            offset: usize,
2831            depth: fidl::encoding::Depth,
2832        ) -> fidl::Result<()> {
2833            encoder.debug_check_bounds::<CentralDisconnectPeripheralRequest>(offset);
2834            // Zero out padding regions. There's no need to apply masks
2835            // because the unmasked parts will be overwritten by fields.
2836            // Write the fields.
2837            self.0.encode(encoder, offset + 0, depth)?;
2838            Ok(())
2839        }
2840    }
2841
2842    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2843        for CentralDisconnectPeripheralRequest
2844    {
2845        #[inline(always)]
2846        fn new_empty() -> Self {
2847            Self { identifier: fidl::new_empty!(fidl::encoding::BoundedString<16>, D) }
2848        }
2849
2850        #[inline]
2851        unsafe fn decode(
2852            &mut self,
2853            decoder: &mut fidl::encoding::Decoder<'_, D>,
2854            offset: usize,
2855            _depth: fidl::encoding::Depth,
2856        ) -> fidl::Result<()> {
2857            decoder.debug_check_bounds::<Self>(offset);
2858            // Verify that padding bytes are zero.
2859            fidl::decode!(
2860                fidl::encoding::BoundedString<16>,
2861                D,
2862                &mut self.identifier,
2863                decoder,
2864                offset + 0,
2865                _depth
2866            )?;
2867            Ok(())
2868        }
2869    }
2870
2871    impl fidl::encoding::ValueTypeMarker for CentralDisconnectPeripheralResponse {
2872        type Borrowed<'a> = &'a Self;
2873        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2874            value
2875        }
2876    }
2877
2878    unsafe impl fidl::encoding::TypeMarker for CentralDisconnectPeripheralResponse {
2879        type Owned = Self;
2880
2881        #[inline(always)]
2882        fn inline_align(_context: fidl::encoding::Context) -> usize {
2883            8
2884        }
2885
2886        #[inline(always)]
2887        fn inline_size(_context: fidl::encoding::Context) -> usize {
2888            8
2889        }
2890    }
2891
2892    unsafe impl<D: fidl::encoding::ResourceDialect>
2893        fidl::encoding::Encode<CentralDisconnectPeripheralResponse, D>
2894        for &CentralDisconnectPeripheralResponse
2895    {
2896        #[inline]
2897        unsafe fn encode(
2898            self,
2899            encoder: &mut fidl::encoding::Encoder<'_, D>,
2900            offset: usize,
2901            _depth: fidl::encoding::Depth,
2902        ) -> fidl::Result<()> {
2903            encoder.debug_check_bounds::<CentralDisconnectPeripheralResponse>(offset);
2904            // Delegate to tuple encoding.
2905            fidl::encoding::Encode::<CentralDisconnectPeripheralResponse, D>::encode(
2906                (
2907                    <fidl_fuchsia_bluetooth__common::Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
2908                ),
2909                encoder, offset, _depth
2910            )
2911        }
2912    }
2913    unsafe impl<
2914        D: fidl::encoding::ResourceDialect,
2915        T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth__common::Status, D>,
2916    > fidl::encoding::Encode<CentralDisconnectPeripheralResponse, D> for (T0,)
2917    {
2918        #[inline]
2919        unsafe fn encode(
2920            self,
2921            encoder: &mut fidl::encoding::Encoder<'_, D>,
2922            offset: usize,
2923            depth: fidl::encoding::Depth,
2924        ) -> fidl::Result<()> {
2925            encoder.debug_check_bounds::<CentralDisconnectPeripheralResponse>(offset);
2926            // Zero out padding regions. There's no need to apply masks
2927            // because the unmasked parts will be overwritten by fields.
2928            // Write the fields.
2929            self.0.encode(encoder, offset + 0, depth)?;
2930            Ok(())
2931        }
2932    }
2933
2934    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2935        for CentralDisconnectPeripheralResponse
2936    {
2937        #[inline(always)]
2938        fn new_empty() -> Self {
2939            Self { status: fidl::new_empty!(fidl_fuchsia_bluetooth__common::Status, D) }
2940        }
2941
2942        #[inline]
2943        unsafe fn decode(
2944            &mut self,
2945            decoder: &mut fidl::encoding::Decoder<'_, D>,
2946            offset: usize,
2947            _depth: fidl::encoding::Depth,
2948        ) -> fidl::Result<()> {
2949            decoder.debug_check_bounds::<Self>(offset);
2950            // Verify that padding bytes are zero.
2951            fidl::decode!(
2952                fidl_fuchsia_bluetooth__common::Status,
2953                D,
2954                &mut self.status,
2955                decoder,
2956                offset + 0,
2957                _depth
2958            )?;
2959            Ok(())
2960        }
2961    }
2962
2963    impl fidl::encoding::ValueTypeMarker for CentralGetPeripheralRequest {
2964        type Borrowed<'a> = &'a Self;
2965        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2966            value
2967        }
2968    }
2969
2970    unsafe impl fidl::encoding::TypeMarker for CentralGetPeripheralRequest {
2971        type Owned = Self;
2972
2973        #[inline(always)]
2974        fn inline_align(_context: fidl::encoding::Context) -> usize {
2975            8
2976        }
2977
2978        #[inline(always)]
2979        fn inline_size(_context: fidl::encoding::Context) -> usize {
2980            16
2981        }
2982    }
2983
2984    unsafe impl<D: fidl::encoding::ResourceDialect>
2985        fidl::encoding::Encode<CentralGetPeripheralRequest, D> for &CentralGetPeripheralRequest
2986    {
2987        #[inline]
2988        unsafe fn encode(
2989            self,
2990            encoder: &mut fidl::encoding::Encoder<'_, D>,
2991            offset: usize,
2992            _depth: fidl::encoding::Depth,
2993        ) -> fidl::Result<()> {
2994            encoder.debug_check_bounds::<CentralGetPeripheralRequest>(offset);
2995            // Delegate to tuple encoding.
2996            fidl::encoding::Encode::<CentralGetPeripheralRequest, D>::encode(
2997                (<fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow(
2998                    &self.identifier,
2999                ),),
3000                encoder,
3001                offset,
3002                _depth,
3003            )
3004        }
3005    }
3006    unsafe impl<
3007        D: fidl::encoding::ResourceDialect,
3008        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<16>, D>,
3009    > fidl::encoding::Encode<CentralGetPeripheralRequest, D> for (T0,)
3010    {
3011        #[inline]
3012        unsafe fn encode(
3013            self,
3014            encoder: &mut fidl::encoding::Encoder<'_, D>,
3015            offset: usize,
3016            depth: fidl::encoding::Depth,
3017        ) -> fidl::Result<()> {
3018            encoder.debug_check_bounds::<CentralGetPeripheralRequest>(offset);
3019            // Zero out padding regions. There's no need to apply masks
3020            // because the unmasked parts will be overwritten by fields.
3021            // Write the fields.
3022            self.0.encode(encoder, offset + 0, depth)?;
3023            Ok(())
3024        }
3025    }
3026
3027    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3028        for CentralGetPeripheralRequest
3029    {
3030        #[inline(always)]
3031        fn new_empty() -> Self {
3032            Self { identifier: fidl::new_empty!(fidl::encoding::BoundedString<16>, D) }
3033        }
3034
3035        #[inline]
3036        unsafe fn decode(
3037            &mut self,
3038            decoder: &mut fidl::encoding::Decoder<'_, D>,
3039            offset: usize,
3040            _depth: fidl::encoding::Depth,
3041        ) -> fidl::Result<()> {
3042            decoder.debug_check_bounds::<Self>(offset);
3043            // Verify that padding bytes are zero.
3044            fidl::decode!(
3045                fidl::encoding::BoundedString<16>,
3046                D,
3047                &mut self.identifier,
3048                decoder,
3049                offset + 0,
3050                _depth
3051            )?;
3052            Ok(())
3053        }
3054    }
3055
3056    impl fidl::encoding::ValueTypeMarker for CentralGetPeripheralResponse {
3057        type Borrowed<'a> = &'a Self;
3058        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3059            value
3060        }
3061    }
3062
3063    unsafe impl fidl::encoding::TypeMarker for CentralGetPeripheralResponse {
3064        type Owned = Self;
3065
3066        #[inline(always)]
3067        fn inline_align(_context: fidl::encoding::Context) -> usize {
3068            8
3069        }
3070
3071        #[inline(always)]
3072        fn inline_size(_context: fidl::encoding::Context) -> usize {
3073            8
3074        }
3075    }
3076
3077    unsafe impl<D: fidl::encoding::ResourceDialect>
3078        fidl::encoding::Encode<CentralGetPeripheralResponse, D> for &CentralGetPeripheralResponse
3079    {
3080        #[inline]
3081        unsafe fn encode(
3082            self,
3083            encoder: &mut fidl::encoding::Encoder<'_, D>,
3084            offset: usize,
3085            _depth: fidl::encoding::Depth,
3086        ) -> fidl::Result<()> {
3087            encoder.debug_check_bounds::<CentralGetPeripheralResponse>(offset);
3088            // Delegate to tuple encoding.
3089            fidl::encoding::Encode::<CentralGetPeripheralResponse, D>::encode(
3090                (<fidl::encoding::Boxed<RemoteDevice> as fidl::encoding::ValueTypeMarker>::borrow(
3091                    &self.peripheral,
3092                ),),
3093                encoder,
3094                offset,
3095                _depth,
3096            )
3097        }
3098    }
3099    unsafe impl<
3100        D: fidl::encoding::ResourceDialect,
3101        T0: fidl::encoding::Encode<fidl::encoding::Boxed<RemoteDevice>, D>,
3102    > fidl::encoding::Encode<CentralGetPeripheralResponse, D> for (T0,)
3103    {
3104        #[inline]
3105        unsafe fn encode(
3106            self,
3107            encoder: &mut fidl::encoding::Encoder<'_, D>,
3108            offset: usize,
3109            depth: fidl::encoding::Depth,
3110        ) -> fidl::Result<()> {
3111            encoder.debug_check_bounds::<CentralGetPeripheralResponse>(offset);
3112            // Zero out padding regions. There's no need to apply masks
3113            // because the unmasked parts will be overwritten by fields.
3114            // Write the fields.
3115            self.0.encode(encoder, offset + 0, depth)?;
3116            Ok(())
3117        }
3118    }
3119
3120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3121        for CentralGetPeripheralResponse
3122    {
3123        #[inline(always)]
3124        fn new_empty() -> Self {
3125            Self { peripheral: fidl::new_empty!(fidl::encoding::Boxed<RemoteDevice>, D) }
3126        }
3127
3128        #[inline]
3129        unsafe fn decode(
3130            &mut self,
3131            decoder: &mut fidl::encoding::Decoder<'_, D>,
3132            offset: usize,
3133            _depth: fidl::encoding::Depth,
3134        ) -> fidl::Result<()> {
3135            decoder.debug_check_bounds::<Self>(offset);
3136            // Verify that padding bytes are zero.
3137            fidl::decode!(
3138                fidl::encoding::Boxed<RemoteDevice>,
3139                D,
3140                &mut self.peripheral,
3141                decoder,
3142                offset + 0,
3143                _depth
3144            )?;
3145            Ok(())
3146        }
3147    }
3148
3149    impl fidl::encoding::ValueTypeMarker for CentralGetPeripheralsRequest {
3150        type Borrowed<'a> = &'a Self;
3151        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3152            value
3153        }
3154    }
3155
3156    unsafe impl fidl::encoding::TypeMarker for CentralGetPeripheralsRequest {
3157        type Owned = Self;
3158
3159        #[inline(always)]
3160        fn inline_align(_context: fidl::encoding::Context) -> usize {
3161            8
3162        }
3163
3164        #[inline(always)]
3165        fn inline_size(_context: fidl::encoding::Context) -> usize {
3166            16
3167        }
3168    }
3169
3170    unsafe impl<D: fidl::encoding::ResourceDialect>
3171        fidl::encoding::Encode<CentralGetPeripheralsRequest, D> for &CentralGetPeripheralsRequest
3172    {
3173        #[inline]
3174        unsafe fn encode(
3175            self,
3176            encoder: &mut fidl::encoding::Encoder<'_, D>,
3177            offset: usize,
3178            _depth: fidl::encoding::Depth,
3179        ) -> fidl::Result<()> {
3180            encoder.debug_check_bounds::<CentralGetPeripheralsRequest>(offset);
3181            // Delegate to tuple encoding.
3182            fidl::encoding::Encode::<CentralGetPeripheralsRequest, D>::encode(
3183                (<fidl::encoding::Optional<
3184                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
3185                > as fidl::encoding::ValueTypeMarker>::borrow(&self.service_uuids),),
3186                encoder,
3187                offset,
3188                _depth,
3189            )
3190        }
3191    }
3192    unsafe impl<
3193        D: fidl::encoding::ResourceDialect,
3194        T0: fidl::encoding::Encode<
3195                fidl::encoding::Optional<
3196                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
3197                >,
3198                D,
3199            >,
3200    > fidl::encoding::Encode<CentralGetPeripheralsRequest, D> for (T0,)
3201    {
3202        #[inline]
3203        unsafe fn encode(
3204            self,
3205            encoder: &mut fidl::encoding::Encoder<'_, D>,
3206            offset: usize,
3207            depth: fidl::encoding::Depth,
3208        ) -> fidl::Result<()> {
3209            encoder.debug_check_bounds::<CentralGetPeripheralsRequest>(offset);
3210            // Zero out padding regions. There's no need to apply masks
3211            // because the unmasked parts will be overwritten by fields.
3212            // Write the fields.
3213            self.0.encode(encoder, offset + 0, depth)?;
3214            Ok(())
3215        }
3216    }
3217
3218    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3219        for CentralGetPeripheralsRequest
3220    {
3221        #[inline(always)]
3222        fn new_empty() -> Self {
3223            Self {
3224                service_uuids: fidl::new_empty!(
3225                    fidl::encoding::Optional<
3226                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
3227                    >,
3228                    D
3229                ),
3230            }
3231        }
3232
3233        #[inline]
3234        unsafe fn decode(
3235            &mut self,
3236            decoder: &mut fidl::encoding::Decoder<'_, D>,
3237            offset: usize,
3238            _depth: fidl::encoding::Depth,
3239        ) -> fidl::Result<()> {
3240            decoder.debug_check_bounds::<Self>(offset);
3241            // Verify that padding bytes are zero.
3242            fidl::decode!(
3243                fidl::encoding::Optional<
3244                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
3245                >,
3246                D,
3247                &mut self.service_uuids,
3248                decoder,
3249                offset + 0,
3250                _depth
3251            )?;
3252            Ok(())
3253        }
3254    }
3255
3256    impl fidl::encoding::ValueTypeMarker for CentralGetPeripheralsResponse {
3257        type Borrowed<'a> = &'a Self;
3258        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3259            value
3260        }
3261    }
3262
3263    unsafe impl fidl::encoding::TypeMarker for CentralGetPeripheralsResponse {
3264        type Owned = Self;
3265
3266        #[inline(always)]
3267        fn inline_align(_context: fidl::encoding::Context) -> usize {
3268            8
3269        }
3270
3271        #[inline(always)]
3272        fn inline_size(_context: fidl::encoding::Context) -> usize {
3273            16
3274        }
3275    }
3276
3277    unsafe impl<D: fidl::encoding::ResourceDialect>
3278        fidl::encoding::Encode<CentralGetPeripheralsResponse, D>
3279        for &CentralGetPeripheralsResponse
3280    {
3281        #[inline]
3282        unsafe fn encode(
3283            self,
3284            encoder: &mut fidl::encoding::Encoder<'_, D>,
3285            offset: usize,
3286            _depth: fidl::encoding::Depth,
3287        ) -> fidl::Result<()> {
3288            encoder.debug_check_bounds::<CentralGetPeripheralsResponse>(offset);
3289            // Delegate to tuple encoding.
3290            fidl::encoding::Encode::<CentralGetPeripheralsResponse, D>::encode(
3291                (
3292                    <fidl::encoding::UnboundedVector<RemoteDevice> as fidl::encoding::ValueTypeMarker>::borrow(&self.peripherals),
3293                ),
3294                encoder, offset, _depth
3295            )
3296        }
3297    }
3298    unsafe impl<
3299        D: fidl::encoding::ResourceDialect,
3300        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<RemoteDevice>, D>,
3301    > fidl::encoding::Encode<CentralGetPeripheralsResponse, D> for (T0,)
3302    {
3303        #[inline]
3304        unsafe fn encode(
3305            self,
3306            encoder: &mut fidl::encoding::Encoder<'_, D>,
3307            offset: usize,
3308            depth: fidl::encoding::Depth,
3309        ) -> fidl::Result<()> {
3310            encoder.debug_check_bounds::<CentralGetPeripheralsResponse>(offset);
3311            // Zero out padding regions. There's no need to apply masks
3312            // because the unmasked parts will be overwritten by fields.
3313            // Write the fields.
3314            self.0.encode(encoder, offset + 0, depth)?;
3315            Ok(())
3316        }
3317    }
3318
3319    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3320        for CentralGetPeripheralsResponse
3321    {
3322        #[inline(always)]
3323        fn new_empty() -> Self {
3324            Self { peripherals: fidl::new_empty!(fidl::encoding::UnboundedVector<RemoteDevice>, D) }
3325        }
3326
3327        #[inline]
3328        unsafe fn decode(
3329            &mut self,
3330            decoder: &mut fidl::encoding::Decoder<'_, D>,
3331            offset: usize,
3332            _depth: fidl::encoding::Depth,
3333        ) -> fidl::Result<()> {
3334            decoder.debug_check_bounds::<Self>(offset);
3335            // Verify that padding bytes are zero.
3336            fidl::decode!(
3337                fidl::encoding::UnboundedVector<RemoteDevice>,
3338                D,
3339                &mut self.peripherals,
3340                decoder,
3341                offset + 0,
3342                _depth
3343            )?;
3344            Ok(())
3345        }
3346    }
3347
3348    impl fidl::encoding::ValueTypeMarker for CentralOnDeviceDiscoveredRequest {
3349        type Borrowed<'a> = &'a Self;
3350        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3351            value
3352        }
3353    }
3354
3355    unsafe impl fidl::encoding::TypeMarker for CentralOnDeviceDiscoveredRequest {
3356        type Owned = Self;
3357
3358        #[inline(always)]
3359        fn inline_align(_context: fidl::encoding::Context) -> usize {
3360            8
3361        }
3362
3363        #[inline(always)]
3364        fn inline_size(_context: fidl::encoding::Context) -> usize {
3365            40
3366        }
3367    }
3368
3369    unsafe impl<D: fidl::encoding::ResourceDialect>
3370        fidl::encoding::Encode<CentralOnDeviceDiscoveredRequest, D>
3371        for &CentralOnDeviceDiscoveredRequest
3372    {
3373        #[inline]
3374        unsafe fn encode(
3375            self,
3376            encoder: &mut fidl::encoding::Encoder<'_, D>,
3377            offset: usize,
3378            _depth: fidl::encoding::Depth,
3379        ) -> fidl::Result<()> {
3380            encoder.debug_check_bounds::<CentralOnDeviceDiscoveredRequest>(offset);
3381            // Delegate to tuple encoding.
3382            fidl::encoding::Encode::<CentralOnDeviceDiscoveredRequest, D>::encode(
3383                (<RemoteDevice as fidl::encoding::ValueTypeMarker>::borrow(&self.device),),
3384                encoder,
3385                offset,
3386                _depth,
3387            )
3388        }
3389    }
3390    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RemoteDevice, D>>
3391        fidl::encoding::Encode<CentralOnDeviceDiscoveredRequest, D> for (T0,)
3392    {
3393        #[inline]
3394        unsafe fn encode(
3395            self,
3396            encoder: &mut fidl::encoding::Encoder<'_, D>,
3397            offset: usize,
3398            depth: fidl::encoding::Depth,
3399        ) -> fidl::Result<()> {
3400            encoder.debug_check_bounds::<CentralOnDeviceDiscoveredRequest>(offset);
3401            // Zero out padding regions. There's no need to apply masks
3402            // because the unmasked parts will be overwritten by fields.
3403            // Write the fields.
3404            self.0.encode(encoder, offset + 0, depth)?;
3405            Ok(())
3406        }
3407    }
3408
3409    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3410        for CentralOnDeviceDiscoveredRequest
3411    {
3412        #[inline(always)]
3413        fn new_empty() -> Self {
3414            Self { device: fidl::new_empty!(RemoteDevice, D) }
3415        }
3416
3417        #[inline]
3418        unsafe fn decode(
3419            &mut self,
3420            decoder: &mut fidl::encoding::Decoder<'_, D>,
3421            offset: usize,
3422            _depth: fidl::encoding::Depth,
3423        ) -> fidl::Result<()> {
3424            decoder.debug_check_bounds::<Self>(offset);
3425            // Verify that padding bytes are zero.
3426            fidl::decode!(RemoteDevice, D, &mut self.device, decoder, offset + 0, _depth)?;
3427            Ok(())
3428        }
3429    }
3430
3431    impl fidl::encoding::ValueTypeMarker for CentralOnPeripheralDisconnectedRequest {
3432        type Borrowed<'a> = &'a Self;
3433        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3434            value
3435        }
3436    }
3437
3438    unsafe impl fidl::encoding::TypeMarker for CentralOnPeripheralDisconnectedRequest {
3439        type Owned = Self;
3440
3441        #[inline(always)]
3442        fn inline_align(_context: fidl::encoding::Context) -> usize {
3443            8
3444        }
3445
3446        #[inline(always)]
3447        fn inline_size(_context: fidl::encoding::Context) -> usize {
3448            16
3449        }
3450    }
3451
3452    unsafe impl<D: fidl::encoding::ResourceDialect>
3453        fidl::encoding::Encode<CentralOnPeripheralDisconnectedRequest, D>
3454        for &CentralOnPeripheralDisconnectedRequest
3455    {
3456        #[inline]
3457        unsafe fn encode(
3458            self,
3459            encoder: &mut fidl::encoding::Encoder<'_, D>,
3460            offset: usize,
3461            _depth: fidl::encoding::Depth,
3462        ) -> fidl::Result<()> {
3463            encoder.debug_check_bounds::<CentralOnPeripheralDisconnectedRequest>(offset);
3464            // Delegate to tuple encoding.
3465            fidl::encoding::Encode::<CentralOnPeripheralDisconnectedRequest, D>::encode(
3466                (<fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow(
3467                    &self.identifier,
3468                ),),
3469                encoder,
3470                offset,
3471                _depth,
3472            )
3473        }
3474    }
3475    unsafe impl<
3476        D: fidl::encoding::ResourceDialect,
3477        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<16>, D>,
3478    > fidl::encoding::Encode<CentralOnPeripheralDisconnectedRequest, D> for (T0,)
3479    {
3480        #[inline]
3481        unsafe fn encode(
3482            self,
3483            encoder: &mut fidl::encoding::Encoder<'_, D>,
3484            offset: usize,
3485            depth: fidl::encoding::Depth,
3486        ) -> fidl::Result<()> {
3487            encoder.debug_check_bounds::<CentralOnPeripheralDisconnectedRequest>(offset);
3488            // Zero out padding regions. There's no need to apply masks
3489            // because the unmasked parts will be overwritten by fields.
3490            // Write the fields.
3491            self.0.encode(encoder, offset + 0, depth)?;
3492            Ok(())
3493        }
3494    }
3495
3496    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3497        for CentralOnPeripheralDisconnectedRequest
3498    {
3499        #[inline(always)]
3500        fn new_empty() -> Self {
3501            Self { identifier: fidl::new_empty!(fidl::encoding::BoundedString<16>, D) }
3502        }
3503
3504        #[inline]
3505        unsafe fn decode(
3506            &mut self,
3507            decoder: &mut fidl::encoding::Decoder<'_, D>,
3508            offset: usize,
3509            _depth: fidl::encoding::Depth,
3510        ) -> fidl::Result<()> {
3511            decoder.debug_check_bounds::<Self>(offset);
3512            // Verify that padding bytes are zero.
3513            fidl::decode!(
3514                fidl::encoding::BoundedString<16>,
3515                D,
3516                &mut self.identifier,
3517                decoder,
3518                offset + 0,
3519                _depth
3520            )?;
3521            Ok(())
3522        }
3523    }
3524
3525    impl fidl::encoding::ValueTypeMarker for CentralOnScanStateChangedRequest {
3526        type Borrowed<'a> = &'a Self;
3527        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3528            value
3529        }
3530    }
3531
3532    unsafe impl fidl::encoding::TypeMarker for CentralOnScanStateChangedRequest {
3533        type Owned = Self;
3534
3535        #[inline(always)]
3536        fn inline_align(_context: fidl::encoding::Context) -> usize {
3537            1
3538        }
3539
3540        #[inline(always)]
3541        fn inline_size(_context: fidl::encoding::Context) -> usize {
3542            1
3543        }
3544    }
3545
3546    unsafe impl<D: fidl::encoding::ResourceDialect>
3547        fidl::encoding::Encode<CentralOnScanStateChangedRequest, D>
3548        for &CentralOnScanStateChangedRequest
3549    {
3550        #[inline]
3551        unsafe fn encode(
3552            self,
3553            encoder: &mut fidl::encoding::Encoder<'_, D>,
3554            offset: usize,
3555            _depth: fidl::encoding::Depth,
3556        ) -> fidl::Result<()> {
3557            encoder.debug_check_bounds::<CentralOnScanStateChangedRequest>(offset);
3558            // Delegate to tuple encoding.
3559            fidl::encoding::Encode::<CentralOnScanStateChangedRequest, D>::encode(
3560                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.scanning),),
3561                encoder,
3562                offset,
3563                _depth,
3564            )
3565        }
3566    }
3567    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
3568        fidl::encoding::Encode<CentralOnScanStateChangedRequest, D> for (T0,)
3569    {
3570        #[inline]
3571        unsafe fn encode(
3572            self,
3573            encoder: &mut fidl::encoding::Encoder<'_, D>,
3574            offset: usize,
3575            depth: fidl::encoding::Depth,
3576        ) -> fidl::Result<()> {
3577            encoder.debug_check_bounds::<CentralOnScanStateChangedRequest>(offset);
3578            // Zero out padding regions. There's no need to apply masks
3579            // because the unmasked parts will be overwritten by fields.
3580            // Write the fields.
3581            self.0.encode(encoder, offset + 0, depth)?;
3582            Ok(())
3583        }
3584    }
3585
3586    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3587        for CentralOnScanStateChangedRequest
3588    {
3589        #[inline(always)]
3590        fn new_empty() -> Self {
3591            Self { scanning: fidl::new_empty!(bool, D) }
3592        }
3593
3594        #[inline]
3595        unsafe fn decode(
3596            &mut self,
3597            decoder: &mut fidl::encoding::Decoder<'_, D>,
3598            offset: usize,
3599            _depth: fidl::encoding::Depth,
3600        ) -> fidl::Result<()> {
3601            decoder.debug_check_bounds::<Self>(offset);
3602            // Verify that padding bytes are zero.
3603            fidl::decode!(bool, D, &mut self.scanning, decoder, offset + 0, _depth)?;
3604            Ok(())
3605        }
3606    }
3607
3608    impl fidl::encoding::ValueTypeMarker for CentralStartScanRequest {
3609        type Borrowed<'a> = &'a Self;
3610        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3611            value
3612        }
3613    }
3614
3615    unsafe impl fidl::encoding::TypeMarker for CentralStartScanRequest {
3616        type Owned = Self;
3617
3618        #[inline(always)]
3619        fn inline_align(_context: fidl::encoding::Context) -> usize {
3620            8
3621        }
3622
3623        #[inline(always)]
3624        fn inline_size(_context: fidl::encoding::Context) -> usize {
3625            8
3626        }
3627    }
3628
3629    unsafe impl<D: fidl::encoding::ResourceDialect>
3630        fidl::encoding::Encode<CentralStartScanRequest, D> for &CentralStartScanRequest
3631    {
3632        #[inline]
3633        unsafe fn encode(
3634            self,
3635            encoder: &mut fidl::encoding::Encoder<'_, D>,
3636            offset: usize,
3637            _depth: fidl::encoding::Depth,
3638        ) -> fidl::Result<()> {
3639            encoder.debug_check_bounds::<CentralStartScanRequest>(offset);
3640            // Delegate to tuple encoding.
3641            fidl::encoding::Encode::<CentralStartScanRequest, D>::encode(
3642                (<fidl::encoding::Boxed<ScanFilter> as fidl::encoding::ValueTypeMarker>::borrow(
3643                    &self.filter,
3644                ),),
3645                encoder,
3646                offset,
3647                _depth,
3648            )
3649        }
3650    }
3651    unsafe impl<
3652        D: fidl::encoding::ResourceDialect,
3653        T0: fidl::encoding::Encode<fidl::encoding::Boxed<ScanFilter>, D>,
3654    > fidl::encoding::Encode<CentralStartScanRequest, D> for (T0,)
3655    {
3656        #[inline]
3657        unsafe fn encode(
3658            self,
3659            encoder: &mut fidl::encoding::Encoder<'_, D>,
3660            offset: usize,
3661            depth: fidl::encoding::Depth,
3662        ) -> fidl::Result<()> {
3663            encoder.debug_check_bounds::<CentralStartScanRequest>(offset);
3664            // Zero out padding regions. There's no need to apply masks
3665            // because the unmasked parts will be overwritten by fields.
3666            // Write the fields.
3667            self.0.encode(encoder, offset + 0, depth)?;
3668            Ok(())
3669        }
3670    }
3671
3672    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3673        for CentralStartScanRequest
3674    {
3675        #[inline(always)]
3676        fn new_empty() -> Self {
3677            Self { filter: fidl::new_empty!(fidl::encoding::Boxed<ScanFilter>, D) }
3678        }
3679
3680        #[inline]
3681        unsafe fn decode(
3682            &mut self,
3683            decoder: &mut fidl::encoding::Decoder<'_, D>,
3684            offset: usize,
3685            _depth: fidl::encoding::Depth,
3686        ) -> fidl::Result<()> {
3687            decoder.debug_check_bounds::<Self>(offset);
3688            // Verify that padding bytes are zero.
3689            fidl::decode!(
3690                fidl::encoding::Boxed<ScanFilter>,
3691                D,
3692                &mut self.filter,
3693                decoder,
3694                offset + 0,
3695                _depth
3696            )?;
3697            Ok(())
3698        }
3699    }
3700
3701    impl fidl::encoding::ValueTypeMarker for CentralStartScanResponse {
3702        type Borrowed<'a> = &'a Self;
3703        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3704            value
3705        }
3706    }
3707
3708    unsafe impl fidl::encoding::TypeMarker for CentralStartScanResponse {
3709        type Owned = Self;
3710
3711        #[inline(always)]
3712        fn inline_align(_context: fidl::encoding::Context) -> usize {
3713            8
3714        }
3715
3716        #[inline(always)]
3717        fn inline_size(_context: fidl::encoding::Context) -> usize {
3718            8
3719        }
3720    }
3721
3722    unsafe impl<D: fidl::encoding::ResourceDialect>
3723        fidl::encoding::Encode<CentralStartScanResponse, D> for &CentralStartScanResponse
3724    {
3725        #[inline]
3726        unsafe fn encode(
3727            self,
3728            encoder: &mut fidl::encoding::Encoder<'_, D>,
3729            offset: usize,
3730            _depth: fidl::encoding::Depth,
3731        ) -> fidl::Result<()> {
3732            encoder.debug_check_bounds::<CentralStartScanResponse>(offset);
3733            // Delegate to tuple encoding.
3734            fidl::encoding::Encode::<CentralStartScanResponse, D>::encode(
3735                (
3736                    <fidl_fuchsia_bluetooth__common::Status as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
3737                ),
3738                encoder, offset, _depth
3739            )
3740        }
3741    }
3742    unsafe impl<
3743        D: fidl::encoding::ResourceDialect,
3744        T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth__common::Status, D>,
3745    > fidl::encoding::Encode<CentralStartScanResponse, D> for (T0,)
3746    {
3747        #[inline]
3748        unsafe fn encode(
3749            self,
3750            encoder: &mut fidl::encoding::Encoder<'_, D>,
3751            offset: usize,
3752            depth: fidl::encoding::Depth,
3753        ) -> fidl::Result<()> {
3754            encoder.debug_check_bounds::<CentralStartScanResponse>(offset);
3755            // Zero out padding regions. There's no need to apply masks
3756            // because the unmasked parts will be overwritten by fields.
3757            // Write the fields.
3758            self.0.encode(encoder, offset + 0, depth)?;
3759            Ok(())
3760        }
3761    }
3762
3763    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3764        for CentralStartScanResponse
3765    {
3766        #[inline(always)]
3767        fn new_empty() -> Self {
3768            Self { status: fidl::new_empty!(fidl_fuchsia_bluetooth__common::Status, D) }
3769        }
3770
3771        #[inline]
3772        unsafe fn decode(
3773            &mut self,
3774            decoder: &mut fidl::encoding::Decoder<'_, D>,
3775            offset: usize,
3776            _depth: fidl::encoding::Depth,
3777        ) -> fidl::Result<()> {
3778            decoder.debug_check_bounds::<Self>(offset);
3779            // Verify that padding bytes are zero.
3780            fidl::decode!(
3781                fidl_fuchsia_bluetooth__common::Status,
3782                D,
3783                &mut self.status,
3784                decoder,
3785                offset + 0,
3786                _depth
3787            )?;
3788            Ok(())
3789        }
3790    }
3791
3792    impl fidl::encoding::ValueTypeMarker for ManufacturerData {
3793        type Borrowed<'a> = &'a Self;
3794        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3795            value
3796        }
3797    }
3798
3799    unsafe impl fidl::encoding::TypeMarker for ManufacturerData {
3800        type Owned = Self;
3801
3802        #[inline(always)]
3803        fn inline_align(_context: fidl::encoding::Context) -> usize {
3804            8
3805        }
3806
3807        #[inline(always)]
3808        fn inline_size(_context: fidl::encoding::Context) -> usize {
3809            24
3810        }
3811    }
3812
3813    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ManufacturerData, D>
3814        for &ManufacturerData
3815    {
3816        #[inline]
3817        unsafe fn encode(
3818            self,
3819            encoder: &mut fidl::encoding::Encoder<'_, D>,
3820            offset: usize,
3821            _depth: fidl::encoding::Depth,
3822        ) -> fidl::Result<()> {
3823            encoder.debug_check_bounds::<ManufacturerData>(offset);
3824            // Delegate to tuple encoding.
3825            fidl::encoding::Encode::<ManufacturerData, D>::encode(
3826                (
3827                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.company_id),
3828                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow(
3829                        &self.data,
3830                    ),
3831                ),
3832                encoder,
3833                offset,
3834                _depth,
3835            )
3836        }
3837    }
3838    unsafe impl<
3839        D: fidl::encoding::ResourceDialect,
3840        T0: fidl::encoding::Encode<u16, D>,
3841        T1: fidl::encoding::Encode<fidl::encoding::Vector<u8, 252>, D>,
3842    > fidl::encoding::Encode<ManufacturerData, D> for (T0, T1)
3843    {
3844        #[inline]
3845        unsafe fn encode(
3846            self,
3847            encoder: &mut fidl::encoding::Encoder<'_, D>,
3848            offset: usize,
3849            depth: fidl::encoding::Depth,
3850        ) -> fidl::Result<()> {
3851            encoder.debug_check_bounds::<ManufacturerData>(offset);
3852            // Zero out padding regions. There's no need to apply masks
3853            // because the unmasked parts will be overwritten by fields.
3854            unsafe {
3855                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3856                (ptr as *mut u64).write_unaligned(0);
3857            }
3858            // Write the fields.
3859            self.0.encode(encoder, offset + 0, depth)?;
3860            self.1.encode(encoder, offset + 8, depth)?;
3861            Ok(())
3862        }
3863    }
3864
3865    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ManufacturerData {
3866        #[inline(always)]
3867        fn new_empty() -> Self {
3868            Self {
3869                company_id: fidl::new_empty!(u16, D),
3870                data: fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D),
3871            }
3872        }
3873
3874        #[inline]
3875        unsafe fn decode(
3876            &mut self,
3877            decoder: &mut fidl::encoding::Decoder<'_, D>,
3878            offset: usize,
3879            _depth: fidl::encoding::Depth,
3880        ) -> fidl::Result<()> {
3881            decoder.debug_check_bounds::<Self>(offset);
3882            // Verify that padding bytes are zero.
3883            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3884            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3885            let mask = 0xffffffffffff0000u64;
3886            let maskedval = padval & mask;
3887            if maskedval != 0 {
3888                return Err(fidl::Error::NonZeroPadding {
3889                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3890                });
3891            }
3892            fidl::decode!(u16, D, &mut self.company_id, decoder, offset + 0, _depth)?;
3893            fidl::decode!(fidl::encoding::Vector<u8, 252>, D, &mut self.data, decoder, offset + 8, _depth)?;
3894            Ok(())
3895        }
3896    }
3897
3898    impl fidl::encoding::ValueTypeMarker for ManufacturerSpecificDataEntry {
3899        type Borrowed<'a> = &'a Self;
3900        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3901            value
3902        }
3903    }
3904
3905    unsafe impl fidl::encoding::TypeMarker for ManufacturerSpecificDataEntry {
3906        type Owned = Self;
3907
3908        #[inline(always)]
3909        fn inline_align(_context: fidl::encoding::Context) -> usize {
3910            8
3911        }
3912
3913        #[inline(always)]
3914        fn inline_size(_context: fidl::encoding::Context) -> usize {
3915            24
3916        }
3917    }
3918
3919    unsafe impl<D: fidl::encoding::ResourceDialect>
3920        fidl::encoding::Encode<ManufacturerSpecificDataEntry, D>
3921        for &ManufacturerSpecificDataEntry
3922    {
3923        #[inline]
3924        unsafe fn encode(
3925            self,
3926            encoder: &mut fidl::encoding::Encoder<'_, D>,
3927            offset: usize,
3928            _depth: fidl::encoding::Depth,
3929        ) -> fidl::Result<()> {
3930            encoder.debug_check_bounds::<ManufacturerSpecificDataEntry>(offset);
3931            // Delegate to tuple encoding.
3932            fidl::encoding::Encode::<ManufacturerSpecificDataEntry, D>::encode(
3933                (
3934                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(&self.company_id),
3935                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
3936                ),
3937                encoder, offset, _depth
3938            )
3939        }
3940    }
3941    unsafe impl<
3942        D: fidl::encoding::ResourceDialect,
3943        T0: fidl::encoding::Encode<u16, D>,
3944        T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
3945    > fidl::encoding::Encode<ManufacturerSpecificDataEntry, D> for (T0, T1)
3946    {
3947        #[inline]
3948        unsafe fn encode(
3949            self,
3950            encoder: &mut fidl::encoding::Encoder<'_, D>,
3951            offset: usize,
3952            depth: fidl::encoding::Depth,
3953        ) -> fidl::Result<()> {
3954            encoder.debug_check_bounds::<ManufacturerSpecificDataEntry>(offset);
3955            // Zero out padding regions. There's no need to apply masks
3956            // because the unmasked parts will be overwritten by fields.
3957            unsafe {
3958                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3959                (ptr as *mut u64).write_unaligned(0);
3960            }
3961            // Write the fields.
3962            self.0.encode(encoder, offset + 0, depth)?;
3963            self.1.encode(encoder, offset + 8, depth)?;
3964            Ok(())
3965        }
3966    }
3967
3968    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3969        for ManufacturerSpecificDataEntry
3970    {
3971        #[inline(always)]
3972        fn new_empty() -> Self {
3973            Self {
3974                company_id: fidl::new_empty!(u16, D),
3975                data: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
3976            }
3977        }
3978
3979        #[inline]
3980        unsafe fn decode(
3981            &mut self,
3982            decoder: &mut fidl::encoding::Decoder<'_, D>,
3983            offset: usize,
3984            _depth: fidl::encoding::Depth,
3985        ) -> fidl::Result<()> {
3986            decoder.debug_check_bounds::<Self>(offset);
3987            // Verify that padding bytes are zero.
3988            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3989            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3990            let mask = 0xffffffffffff0000u64;
3991            let maskedval = padval & mask;
3992            if maskedval != 0 {
3993                return Err(fidl::Error::NonZeroPadding {
3994                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3995                });
3996            }
3997            fidl::decode!(u16, D, &mut self.company_id, decoder, offset + 0, _depth)?;
3998            fidl::decode!(
3999                fidl::encoding::UnboundedVector<u8>,
4000                D,
4001                &mut self.data,
4002                decoder,
4003                offset + 8,
4004                _depth
4005            )?;
4006            Ok(())
4007        }
4008    }
4009
4010    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncId {
4011        type Borrowed<'a> = &'a Self;
4012        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4013            value
4014        }
4015    }
4016
4017    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncId {
4018        type Owned = Self;
4019
4020        #[inline(always)]
4021        fn inline_align(_context: fidl::encoding::Context) -> usize {
4022            8
4023        }
4024
4025        #[inline(always)]
4026        fn inline_size(_context: fidl::encoding::Context) -> usize {
4027            8
4028        }
4029        #[inline(always)]
4030        fn encode_is_copy() -> bool {
4031            true
4032        }
4033
4034        #[inline(always)]
4035        fn decode_is_copy() -> bool {
4036            true
4037        }
4038    }
4039
4040    unsafe impl<D: fidl::encoding::ResourceDialect>
4041        fidl::encoding::Encode<PeriodicAdvertisingSyncId, D> for &PeriodicAdvertisingSyncId
4042    {
4043        #[inline]
4044        unsafe fn encode(
4045            self,
4046            encoder: &mut fidl::encoding::Encoder<'_, D>,
4047            offset: usize,
4048            _depth: fidl::encoding::Depth,
4049        ) -> fidl::Result<()> {
4050            encoder.debug_check_bounds::<PeriodicAdvertisingSyncId>(offset);
4051            unsafe {
4052                // Copy the object into the buffer.
4053                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4054                (buf_ptr as *mut PeriodicAdvertisingSyncId)
4055                    .write_unaligned((self as *const PeriodicAdvertisingSyncId).read());
4056                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4057                // done second because the memcpy will write garbage to these bytes.
4058            }
4059            Ok(())
4060        }
4061    }
4062    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
4063        fidl::encoding::Encode<PeriodicAdvertisingSyncId, D> for (T0,)
4064    {
4065        #[inline]
4066        unsafe fn encode(
4067            self,
4068            encoder: &mut fidl::encoding::Encoder<'_, D>,
4069            offset: usize,
4070            depth: fidl::encoding::Depth,
4071        ) -> fidl::Result<()> {
4072            encoder.debug_check_bounds::<PeriodicAdvertisingSyncId>(offset);
4073            // Zero out padding regions. There's no need to apply masks
4074            // because the unmasked parts will be overwritten by fields.
4075            // Write the fields.
4076            self.0.encode(encoder, offset + 0, depth)?;
4077            Ok(())
4078        }
4079    }
4080
4081    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4082        for PeriodicAdvertisingSyncId
4083    {
4084        #[inline(always)]
4085        fn new_empty() -> Self {
4086            Self { value: fidl::new_empty!(u64, D) }
4087        }
4088
4089        #[inline]
4090        unsafe fn decode(
4091            &mut self,
4092            decoder: &mut fidl::encoding::Decoder<'_, D>,
4093            offset: usize,
4094            _depth: fidl::encoding::Depth,
4095        ) -> fidl::Result<()> {
4096            decoder.debug_check_bounds::<Self>(offset);
4097            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4098            // Verify that padding bytes are zero.
4099            // Copy from the buffer into the object.
4100            unsafe {
4101                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4102            }
4103            Ok(())
4104        }
4105    }
4106
4107    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncOnErrorRequest {
4108        type Borrowed<'a> = &'a Self;
4109        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4110            value
4111        }
4112    }
4113
4114    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncOnErrorRequest {
4115        type Owned = Self;
4116
4117        #[inline(always)]
4118        fn inline_align(_context: fidl::encoding::Context) -> usize {
4119            4
4120        }
4121
4122        #[inline(always)]
4123        fn inline_size(_context: fidl::encoding::Context) -> usize {
4124            4
4125        }
4126    }
4127
4128    unsafe impl<D: fidl::encoding::ResourceDialect>
4129        fidl::encoding::Encode<PeriodicAdvertisingSyncOnErrorRequest, D>
4130        for &PeriodicAdvertisingSyncOnErrorRequest
4131    {
4132        #[inline]
4133        unsafe fn encode(
4134            self,
4135            encoder: &mut fidl::encoding::Encoder<'_, D>,
4136            offset: usize,
4137            _depth: fidl::encoding::Depth,
4138        ) -> fidl::Result<()> {
4139            encoder.debug_check_bounds::<PeriodicAdvertisingSyncOnErrorRequest>(offset);
4140            // Delegate to tuple encoding.
4141            fidl::encoding::Encode::<PeriodicAdvertisingSyncOnErrorRequest, D>::encode(
4142                (<PeriodicAdvertisingSyncError as fidl::encoding::ValueTypeMarker>::borrow(
4143                    &self.error,
4144                ),),
4145                encoder,
4146                offset,
4147                _depth,
4148            )
4149        }
4150    }
4151    unsafe impl<
4152        D: fidl::encoding::ResourceDialect,
4153        T0: fidl::encoding::Encode<PeriodicAdvertisingSyncError, D>,
4154    > fidl::encoding::Encode<PeriodicAdvertisingSyncOnErrorRequest, D> for (T0,)
4155    {
4156        #[inline]
4157        unsafe fn encode(
4158            self,
4159            encoder: &mut fidl::encoding::Encoder<'_, D>,
4160            offset: usize,
4161            depth: fidl::encoding::Depth,
4162        ) -> fidl::Result<()> {
4163            encoder.debug_check_bounds::<PeriodicAdvertisingSyncOnErrorRequest>(offset);
4164            // Zero out padding regions. There's no need to apply masks
4165            // because the unmasked parts will be overwritten by fields.
4166            // Write the fields.
4167            self.0.encode(encoder, offset + 0, depth)?;
4168            Ok(())
4169        }
4170    }
4171
4172    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4173        for PeriodicAdvertisingSyncOnErrorRequest
4174    {
4175        #[inline(always)]
4176        fn new_empty() -> Self {
4177            Self { error: fidl::new_empty!(PeriodicAdvertisingSyncError, D) }
4178        }
4179
4180        #[inline]
4181        unsafe fn decode(
4182            &mut self,
4183            decoder: &mut fidl::encoding::Decoder<'_, D>,
4184            offset: usize,
4185            _depth: fidl::encoding::Depth,
4186        ) -> fidl::Result<()> {
4187            decoder.debug_check_bounds::<Self>(offset);
4188            // Verify that padding bytes are zero.
4189            fidl::decode!(
4190                PeriodicAdvertisingSyncError,
4191                D,
4192                &mut self.error,
4193                decoder,
4194                offset + 0,
4195                _depth
4196            )?;
4197            Ok(())
4198        }
4199    }
4200
4201    impl fidl::encoding::ValueTypeMarker for RemoteDevice {
4202        type Borrowed<'a> = &'a Self;
4203        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4204            value
4205        }
4206    }
4207
4208    unsafe impl fidl::encoding::TypeMarker for RemoteDevice {
4209        type Owned = Self;
4210
4211        #[inline(always)]
4212        fn inline_align(_context: fidl::encoding::Context) -> usize {
4213            8
4214        }
4215
4216        #[inline(always)]
4217        fn inline_size(_context: fidl::encoding::Context) -> usize {
4218            40
4219        }
4220    }
4221
4222    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RemoteDevice, D>
4223        for &RemoteDevice
4224    {
4225        #[inline]
4226        unsafe fn encode(
4227            self,
4228            encoder: &mut fidl::encoding::Encoder<'_, D>,
4229            offset: usize,
4230            _depth: fidl::encoding::Depth,
4231        ) -> fidl::Result<()> {
4232            encoder.debug_check_bounds::<RemoteDevice>(offset);
4233            // Delegate to tuple encoding.
4234            fidl::encoding::Encode::<RemoteDevice, D>::encode(
4235                (
4236                    <fidl::encoding::BoundedString<16> as fidl::encoding::ValueTypeMarker>::borrow(&self.identifier),
4237                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.connectable),
4238                    <fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8> as fidl::encoding::ValueTypeMarker>::borrow(&self.rssi),
4239                    <fidl::encoding::Boxed<AdvertisingDataDeprecated> as fidl::encoding::ValueTypeMarker>::borrow(&self.advertising_data),
4240                ),
4241                encoder, offset, _depth
4242            )
4243        }
4244    }
4245    unsafe impl<
4246        D: fidl::encoding::ResourceDialect,
4247        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<16>, D>,
4248        T1: fidl::encoding::Encode<bool, D>,
4249        T2: fidl::encoding::Encode<fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>, D>,
4250        T3: fidl::encoding::Encode<fidl::encoding::Boxed<AdvertisingDataDeprecated>, D>,
4251    > fidl::encoding::Encode<RemoteDevice, D> for (T0, T1, T2, T3)
4252    {
4253        #[inline]
4254        unsafe fn encode(
4255            self,
4256            encoder: &mut fidl::encoding::Encoder<'_, D>,
4257            offset: usize,
4258            depth: fidl::encoding::Depth,
4259        ) -> fidl::Result<()> {
4260            encoder.debug_check_bounds::<RemoteDevice>(offset);
4261            // Zero out padding regions. There's no need to apply masks
4262            // because the unmasked parts will be overwritten by fields.
4263            unsafe {
4264                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
4265                (ptr as *mut u64).write_unaligned(0);
4266            }
4267            // Write the fields.
4268            self.0.encode(encoder, offset + 0, depth)?;
4269            self.1.encode(encoder, offset + 16, depth)?;
4270            self.2.encode(encoder, offset + 24, depth)?;
4271            self.3.encode(encoder, offset + 32, depth)?;
4272            Ok(())
4273        }
4274    }
4275
4276    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RemoteDevice {
4277        #[inline(always)]
4278        fn new_empty() -> Self {
4279            Self {
4280                identifier: fidl::new_empty!(fidl::encoding::BoundedString<16>, D),
4281                connectable: fidl::new_empty!(bool, D),
4282                rssi: fidl::new_empty!(
4283                    fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>,
4284                    D
4285                ),
4286                advertising_data: fidl::new_empty!(
4287                    fidl::encoding::Boxed<AdvertisingDataDeprecated>,
4288                    D
4289                ),
4290            }
4291        }
4292
4293        #[inline]
4294        unsafe fn decode(
4295            &mut self,
4296            decoder: &mut fidl::encoding::Decoder<'_, D>,
4297            offset: usize,
4298            _depth: fidl::encoding::Depth,
4299        ) -> fidl::Result<()> {
4300            decoder.debug_check_bounds::<Self>(offset);
4301            // Verify that padding bytes are zero.
4302            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
4303            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4304            let mask = 0xffffffffffffff00u64;
4305            let maskedval = padval & mask;
4306            if maskedval != 0 {
4307                return Err(fidl::Error::NonZeroPadding {
4308                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
4309                });
4310            }
4311            fidl::decode!(
4312                fidl::encoding::BoundedString<16>,
4313                D,
4314                &mut self.identifier,
4315                decoder,
4316                offset + 0,
4317                _depth
4318            )?;
4319            fidl::decode!(bool, D, &mut self.connectable, decoder, offset + 16, _depth)?;
4320            fidl::decode!(
4321                fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>,
4322                D,
4323                &mut self.rssi,
4324                decoder,
4325                offset + 24,
4326                _depth
4327            )?;
4328            fidl::decode!(
4329                fidl::encoding::Boxed<AdvertisingDataDeprecated>,
4330                D,
4331                &mut self.advertising_data,
4332                decoder,
4333                offset + 32,
4334                _depth
4335            )?;
4336            Ok(())
4337        }
4338    }
4339
4340    impl fidl::encoding::ValueTypeMarker for ScanFilter {
4341        type Borrowed<'a> = &'a Self;
4342        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4343            value
4344        }
4345    }
4346
4347    unsafe impl fidl::encoding::TypeMarker for ScanFilter {
4348        type Owned = Self;
4349
4350        #[inline(always)]
4351        fn inline_align(_context: fidl::encoding::Context) -> usize {
4352            8
4353        }
4354
4355        #[inline(always)]
4356        fn inline_size(_context: fidl::encoding::Context) -> usize {
4357            72
4358        }
4359    }
4360
4361    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScanFilter, D>
4362        for &ScanFilter
4363    {
4364        #[inline]
4365        unsafe fn encode(
4366            self,
4367            encoder: &mut fidl::encoding::Encoder<'_, D>,
4368            offset: usize,
4369            _depth: fidl::encoding::Depth,
4370        ) -> fidl::Result<()> {
4371            encoder.debug_check_bounds::<ScanFilter>(offset);
4372            // Delegate to tuple encoding.
4373            fidl::encoding::Encode::<ScanFilter, D>::encode(
4374                (
4375                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>> as fidl::encoding::ValueTypeMarker>::borrow(&self.service_uuids),
4376                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>> as fidl::encoding::ValueTypeMarker>::borrow(&self.service_data_uuids),
4377                    <fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16> as fidl::encoding::ValueTypeMarker>::borrow(&self.manufacturer_identifier),
4378                    <fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Bool> as fidl::encoding::ValueTypeMarker>::borrow(&self.connectable),
4379                    <fidl::encoding::Optional<fidl::encoding::BoundedString<248>> as fidl::encoding::ValueTypeMarker>::borrow(&self.name_substring),
4380                    <fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8> as fidl::encoding::ValueTypeMarker>::borrow(&self.max_path_loss),
4381                ),
4382                encoder, offset, _depth
4383            )
4384        }
4385    }
4386    unsafe impl<
4387        D: fidl::encoding::ResourceDialect,
4388        T0: fidl::encoding::Encode<
4389                fidl::encoding::Optional<
4390                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
4391                >,
4392                D,
4393            >,
4394        T1: fidl::encoding::Encode<
4395                fidl::encoding::Optional<
4396                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
4397                >,
4398                D,
4399            >,
4400        T2: fidl::encoding::Encode<fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16>, D>,
4401        T3: fidl::encoding::Encode<fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Bool>, D>,
4402        T4: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<248>>, D>,
4403        T5: fidl::encoding::Encode<fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>, D>,
4404    > fidl::encoding::Encode<ScanFilter, D> for (T0, T1, T2, T3, T4, T5)
4405    {
4406        #[inline]
4407        unsafe fn encode(
4408            self,
4409            encoder: &mut fidl::encoding::Encoder<'_, D>,
4410            offset: usize,
4411            depth: fidl::encoding::Depth,
4412        ) -> fidl::Result<()> {
4413            encoder.debug_check_bounds::<ScanFilter>(offset);
4414            // Zero out padding regions. There's no need to apply masks
4415            // because the unmasked parts will be overwritten by fields.
4416            // Write the fields.
4417            self.0.encode(encoder, offset + 0, depth)?;
4418            self.1.encode(encoder, offset + 16, depth)?;
4419            self.2.encode(encoder, offset + 32, depth)?;
4420            self.3.encode(encoder, offset + 40, depth)?;
4421            self.4.encode(encoder, offset + 48, depth)?;
4422            self.5.encode(encoder, offset + 64, depth)?;
4423            Ok(())
4424        }
4425    }
4426
4427    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanFilter {
4428        #[inline(always)]
4429        fn new_empty() -> Self {
4430            Self {
4431                service_uuids: fidl::new_empty!(
4432                    fidl::encoding::Optional<
4433                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
4434                    >,
4435                    D
4436                ),
4437                service_data_uuids: fidl::new_empty!(
4438                    fidl::encoding::Optional<
4439                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
4440                    >,
4441                    D
4442                ),
4443                manufacturer_identifier: fidl::new_empty!(
4444                    fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16>,
4445                    D
4446                ),
4447                connectable: fidl::new_empty!(
4448                    fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Bool>,
4449                    D
4450                ),
4451                name_substring: fidl::new_empty!(
4452                    fidl::encoding::Optional<fidl::encoding::BoundedString<248>>,
4453                    D
4454                ),
4455                max_path_loss: fidl::new_empty!(
4456                    fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>,
4457                    D
4458                ),
4459            }
4460        }
4461
4462        #[inline]
4463        unsafe fn decode(
4464            &mut self,
4465            decoder: &mut fidl::encoding::Decoder<'_, D>,
4466            offset: usize,
4467            _depth: fidl::encoding::Depth,
4468        ) -> fidl::Result<()> {
4469            decoder.debug_check_bounds::<Self>(offset);
4470            // Verify that padding bytes are zero.
4471            fidl::decode!(
4472                fidl::encoding::Optional<
4473                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
4474                >,
4475                D,
4476                &mut self.service_uuids,
4477                decoder,
4478                offset + 0,
4479                _depth
4480            )?;
4481            fidl::decode!(
4482                fidl::encoding::Optional<
4483                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<36>>,
4484                >,
4485                D,
4486                &mut self.service_data_uuids,
4487                decoder,
4488                offset + 16,
4489                _depth
4490            )?;
4491            fidl::decode!(
4492                fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::UInt16>,
4493                D,
4494                &mut self.manufacturer_identifier,
4495                decoder,
4496                offset + 32,
4497                _depth
4498            )?;
4499            fidl::decode!(
4500                fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Bool>,
4501                D,
4502                &mut self.connectable,
4503                decoder,
4504                offset + 40,
4505                _depth
4506            )?;
4507            fidl::decode!(
4508                fidl::encoding::Optional<fidl::encoding::BoundedString<248>>,
4509                D,
4510                &mut self.name_substring,
4511                decoder,
4512                offset + 48,
4513                _depth
4514            )?;
4515            fidl::decode!(
4516                fidl::encoding::Boxed<fidl_fuchsia_bluetooth__common::Int8>,
4517                D,
4518                &mut self.max_path_loss,
4519                decoder,
4520                offset + 64,
4521                _depth
4522            )?;
4523            Ok(())
4524        }
4525    }
4526
4527    impl fidl::encoding::ValueTypeMarker for ScanResultWatcherWatchResponse {
4528        type Borrowed<'a> = &'a Self;
4529        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4530            value
4531        }
4532    }
4533
4534    unsafe impl fidl::encoding::TypeMarker for ScanResultWatcherWatchResponse {
4535        type Owned = Self;
4536
4537        #[inline(always)]
4538        fn inline_align(_context: fidl::encoding::Context) -> usize {
4539            8
4540        }
4541
4542        #[inline(always)]
4543        fn inline_size(_context: fidl::encoding::Context) -> usize {
4544            16
4545        }
4546    }
4547
4548    unsafe impl<D: fidl::encoding::ResourceDialect>
4549        fidl::encoding::Encode<ScanResultWatcherWatchResponse, D>
4550        for &ScanResultWatcherWatchResponse
4551    {
4552        #[inline]
4553        unsafe fn encode(
4554            self,
4555            encoder: &mut fidl::encoding::Encoder<'_, D>,
4556            offset: usize,
4557            _depth: fidl::encoding::Depth,
4558        ) -> fidl::Result<()> {
4559            encoder.debug_check_bounds::<ScanResultWatcherWatchResponse>(offset);
4560            // Delegate to tuple encoding.
4561            fidl::encoding::Encode::<ScanResultWatcherWatchResponse, D>::encode(
4562                (
4563                    <fidl::encoding::UnboundedVector<Peer> as fidl::encoding::ValueTypeMarker>::borrow(&self.updated),
4564                ),
4565                encoder, offset, _depth
4566            )
4567        }
4568    }
4569    unsafe impl<
4570        D: fidl::encoding::ResourceDialect,
4571        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<Peer>, D>,
4572    > fidl::encoding::Encode<ScanResultWatcherWatchResponse, D> for (T0,)
4573    {
4574        #[inline]
4575        unsafe fn encode(
4576            self,
4577            encoder: &mut fidl::encoding::Encoder<'_, D>,
4578            offset: usize,
4579            depth: fidl::encoding::Depth,
4580        ) -> fidl::Result<()> {
4581            encoder.debug_check_bounds::<ScanResultWatcherWatchResponse>(offset);
4582            // Zero out padding regions. There's no need to apply masks
4583            // because the unmasked parts will be overwritten by fields.
4584            // Write the fields.
4585            self.0.encode(encoder, offset + 0, depth)?;
4586            Ok(())
4587        }
4588    }
4589
4590    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4591        for ScanResultWatcherWatchResponse
4592    {
4593        #[inline(always)]
4594        fn new_empty() -> Self {
4595            Self { updated: fidl::new_empty!(fidl::encoding::UnboundedVector<Peer>, D) }
4596        }
4597
4598        #[inline]
4599        unsafe fn decode(
4600            &mut self,
4601            decoder: &mut fidl::encoding::Decoder<'_, D>,
4602            offset: usize,
4603            _depth: fidl::encoding::Depth,
4604        ) -> fidl::Result<()> {
4605            decoder.debug_check_bounds::<Self>(offset);
4606            // Verify that padding bytes are zero.
4607            fidl::decode!(
4608                fidl::encoding::UnboundedVector<Peer>,
4609                D,
4610                &mut self.updated,
4611                decoder,
4612                offset + 0,
4613                _depth
4614            )?;
4615            Ok(())
4616        }
4617    }
4618
4619    impl fidl::encoding::ValueTypeMarker for ServiceData {
4620        type Borrowed<'a> = &'a Self;
4621        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4622            value
4623        }
4624    }
4625
4626    unsafe impl fidl::encoding::TypeMarker for ServiceData {
4627        type Owned = Self;
4628
4629        #[inline(always)]
4630        fn inline_align(_context: fidl::encoding::Context) -> usize {
4631            8
4632        }
4633
4634        #[inline(always)]
4635        fn inline_size(_context: fidl::encoding::Context) -> usize {
4636            32
4637        }
4638    }
4639
4640    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServiceData, D>
4641        for &ServiceData
4642    {
4643        #[inline]
4644        unsafe fn encode(
4645            self,
4646            encoder: &mut fidl::encoding::Encoder<'_, D>,
4647            offset: usize,
4648            _depth: fidl::encoding::Depth,
4649        ) -> fidl::Result<()> {
4650            encoder.debug_check_bounds::<ServiceData>(offset);
4651            // Delegate to tuple encoding.
4652            fidl::encoding::Encode::<ServiceData, D>::encode(
4653                (
4654                    <fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::ValueTypeMarker>::borrow(&self.uuid),
4655                    <fidl::encoding::Vector<u8, 252> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
4656                ),
4657                encoder, offset, _depth
4658            )
4659        }
4660    }
4661    unsafe impl<
4662        D: fidl::encoding::ResourceDialect,
4663        T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth__common::Uuid, D>,
4664        T1: fidl::encoding::Encode<fidl::encoding::Vector<u8, 252>, D>,
4665    > fidl::encoding::Encode<ServiceData, D> for (T0, T1)
4666    {
4667        #[inline]
4668        unsafe fn encode(
4669            self,
4670            encoder: &mut fidl::encoding::Encoder<'_, D>,
4671            offset: usize,
4672            depth: fidl::encoding::Depth,
4673        ) -> fidl::Result<()> {
4674            encoder.debug_check_bounds::<ServiceData>(offset);
4675            // Zero out padding regions. There's no need to apply masks
4676            // because the unmasked parts will be overwritten by fields.
4677            // Write the fields.
4678            self.0.encode(encoder, offset + 0, depth)?;
4679            self.1.encode(encoder, offset + 16, depth)?;
4680            Ok(())
4681        }
4682    }
4683
4684    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServiceData {
4685        #[inline(always)]
4686        fn new_empty() -> Self {
4687            Self {
4688                uuid: fidl::new_empty!(fidl_fuchsia_bluetooth__common::Uuid, D),
4689                data: fidl::new_empty!(fidl::encoding::Vector<u8, 252>, D),
4690            }
4691        }
4692
4693        #[inline]
4694        unsafe fn decode(
4695            &mut self,
4696            decoder: &mut fidl::encoding::Decoder<'_, D>,
4697            offset: usize,
4698            _depth: fidl::encoding::Depth,
4699        ) -> fidl::Result<()> {
4700            decoder.debug_check_bounds::<Self>(offset);
4701            // Verify that padding bytes are zero.
4702            fidl::decode!(
4703                fidl_fuchsia_bluetooth__common::Uuid,
4704                D,
4705                &mut self.uuid,
4706                decoder,
4707                offset + 0,
4708                _depth
4709            )?;
4710            fidl::decode!(fidl::encoding::Vector<u8, 252>, D, &mut self.data, decoder, offset + 16, _depth)?;
4711            Ok(())
4712        }
4713    }
4714
4715    impl fidl::encoding::ValueTypeMarker for ServiceDataEntry {
4716        type Borrowed<'a> = &'a Self;
4717        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4718            value
4719        }
4720    }
4721
4722    unsafe impl fidl::encoding::TypeMarker for ServiceDataEntry {
4723        type Owned = Self;
4724
4725        #[inline(always)]
4726        fn inline_align(_context: fidl::encoding::Context) -> usize {
4727            8
4728        }
4729
4730        #[inline(always)]
4731        fn inline_size(_context: fidl::encoding::Context) -> usize {
4732            32
4733        }
4734    }
4735
4736    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServiceDataEntry, D>
4737        for &ServiceDataEntry
4738    {
4739        #[inline]
4740        unsafe fn encode(
4741            self,
4742            encoder: &mut fidl::encoding::Encoder<'_, D>,
4743            offset: usize,
4744            _depth: fidl::encoding::Depth,
4745        ) -> fidl::Result<()> {
4746            encoder.debug_check_bounds::<ServiceDataEntry>(offset);
4747            // Delegate to tuple encoding.
4748            fidl::encoding::Encode::<ServiceDataEntry, D>::encode(
4749                (
4750                    <fidl::encoding::BoundedString<36> as fidl::encoding::ValueTypeMarker>::borrow(&self.uuid),
4751                    <fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow(&self.data),
4752                ),
4753                encoder, offset, _depth
4754            )
4755        }
4756    }
4757    unsafe impl<
4758        D: fidl::encoding::ResourceDialect,
4759        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<36>, D>,
4760        T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u8>, D>,
4761    > fidl::encoding::Encode<ServiceDataEntry, D> for (T0, T1)
4762    {
4763        #[inline]
4764        unsafe fn encode(
4765            self,
4766            encoder: &mut fidl::encoding::Encoder<'_, D>,
4767            offset: usize,
4768            depth: fidl::encoding::Depth,
4769        ) -> fidl::Result<()> {
4770            encoder.debug_check_bounds::<ServiceDataEntry>(offset);
4771            // Zero out padding regions. There's no need to apply masks
4772            // because the unmasked parts will be overwritten by fields.
4773            // Write the fields.
4774            self.0.encode(encoder, offset + 0, depth)?;
4775            self.1.encode(encoder, offset + 16, depth)?;
4776            Ok(())
4777        }
4778    }
4779
4780    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServiceDataEntry {
4781        #[inline(always)]
4782        fn new_empty() -> Self {
4783            Self {
4784                uuid: fidl::new_empty!(fidl::encoding::BoundedString<36>, D),
4785                data: fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D),
4786            }
4787        }
4788
4789        #[inline]
4790        unsafe fn decode(
4791            &mut self,
4792            decoder: &mut fidl::encoding::Decoder<'_, D>,
4793            offset: usize,
4794            _depth: fidl::encoding::Depth,
4795        ) -> fidl::Result<()> {
4796            decoder.debug_check_bounds::<Self>(offset);
4797            // Verify that padding bytes are zero.
4798            fidl::decode!(
4799                fidl::encoding::BoundedString<36>,
4800                D,
4801                &mut self.uuid,
4802                decoder,
4803                offset + 0,
4804                _depth
4805            )?;
4806            fidl::decode!(
4807                fidl::encoding::UnboundedVector<u8>,
4808                D,
4809                &mut self.data,
4810                decoder,
4811                offset + 16,
4812                _depth
4813            )?;
4814            Ok(())
4815        }
4816    }
4817
4818    impl AcceptedChannelParameters {
4819        #[inline(always)]
4820        fn max_ordinal_present(&self) -> u64 {
4821            if let Some(_) = self.max_packet_size {
4822                return 2;
4823            }
4824            if let Some(_) = self.accepted_channel_modes {
4825                return 1;
4826            }
4827            0
4828        }
4829    }
4830
4831    impl fidl::encoding::ValueTypeMarker for AcceptedChannelParameters {
4832        type Borrowed<'a> = &'a Self;
4833        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4834            value
4835        }
4836    }
4837
4838    unsafe impl fidl::encoding::TypeMarker for AcceptedChannelParameters {
4839        type Owned = Self;
4840
4841        #[inline(always)]
4842        fn inline_align(_context: fidl::encoding::Context) -> usize {
4843            8
4844        }
4845
4846        #[inline(always)]
4847        fn inline_size(_context: fidl::encoding::Context) -> usize {
4848            16
4849        }
4850    }
4851
4852    unsafe impl<D: fidl::encoding::ResourceDialect>
4853        fidl::encoding::Encode<AcceptedChannelParameters, D> for &AcceptedChannelParameters
4854    {
4855        unsafe fn encode(
4856            self,
4857            encoder: &mut fidl::encoding::Encoder<'_, D>,
4858            offset: usize,
4859            mut depth: fidl::encoding::Depth,
4860        ) -> fidl::Result<()> {
4861            encoder.debug_check_bounds::<AcceptedChannelParameters>(offset);
4862            // Vector header
4863            let max_ordinal: u64 = self.max_ordinal_present();
4864            encoder.write_num(max_ordinal, offset);
4865            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4866            // Calling encoder.out_of_line_offset(0) is not allowed.
4867            if max_ordinal == 0 {
4868                return Ok(());
4869            }
4870            depth.increment()?;
4871            let envelope_size = 8;
4872            let bytes_len = max_ordinal as usize * envelope_size;
4873            #[allow(unused_variables)]
4874            let offset = encoder.out_of_line_offset(bytes_len);
4875            let mut _prev_end_offset: usize = 0;
4876            if 1 > max_ordinal {
4877                return Ok(());
4878            }
4879
4880            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4881            // are envelope_size bytes.
4882            let cur_offset: usize = (1 - 1) * envelope_size;
4883
4884            // Zero reserved fields.
4885            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4886
4887            // Safety:
4888            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4889            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4890            //   envelope_size bytes, there is always sufficient room.
4891            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::ChannelMode>, D>(
4892            self.accepted_channel_modes.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::ChannelMode> as fidl::encoding::ValueTypeMarker>::borrow),
4893            encoder, offset + cur_offset, depth
4894        )?;
4895
4896            _prev_end_offset = cur_offset + envelope_size;
4897            if 2 > max_ordinal {
4898                return Ok(());
4899            }
4900
4901            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4902            // are envelope_size bytes.
4903            let cur_offset: usize = (2 - 1) * envelope_size;
4904
4905            // Zero reserved fields.
4906            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4907
4908            // Safety:
4909            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4910            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4911            //   envelope_size bytes, there is always sufficient room.
4912            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4913                self.max_packet_size.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4914                encoder,
4915                offset + cur_offset,
4916                depth,
4917            )?;
4918
4919            _prev_end_offset = cur_offset + envelope_size;
4920
4921            Ok(())
4922        }
4923    }
4924
4925    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4926        for AcceptedChannelParameters
4927    {
4928        #[inline(always)]
4929        fn new_empty() -> Self {
4930            Self::default()
4931        }
4932
4933        unsafe fn decode(
4934            &mut self,
4935            decoder: &mut fidl::encoding::Decoder<'_, D>,
4936            offset: usize,
4937            mut depth: fidl::encoding::Depth,
4938        ) -> fidl::Result<()> {
4939            decoder.debug_check_bounds::<Self>(offset);
4940            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4941                None => return Err(fidl::Error::NotNullable),
4942                Some(len) => len,
4943            };
4944            // Calling decoder.out_of_line_offset(0) is not allowed.
4945            if len == 0 {
4946                return Ok(());
4947            };
4948            depth.increment()?;
4949            let envelope_size = 8;
4950            let bytes_len = len * envelope_size;
4951            let offset = decoder.out_of_line_offset(bytes_len)?;
4952            // Decode the envelope for each type.
4953            let mut _next_ordinal_to_read = 0;
4954            let mut next_offset = offset;
4955            let end_offset = offset + bytes_len;
4956            _next_ordinal_to_read += 1;
4957            if next_offset >= end_offset {
4958                return Ok(());
4959            }
4960
4961            // Decode unknown envelopes for gaps in ordinals.
4962            while _next_ordinal_to_read < 1 {
4963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4964                _next_ordinal_to_read += 1;
4965                next_offset += envelope_size;
4966            }
4967
4968            let next_out_of_line = decoder.next_out_of_line();
4969            let handles_before = decoder.remaining_handles();
4970            if let Some((inlined, num_bytes, num_handles)) =
4971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4972            {
4973                let member_inline_size = <fidl::encoding::UnboundedVector<
4974                    fidl_fuchsia_bluetooth__common::ChannelMode,
4975                > as fidl::encoding::TypeMarker>::inline_size(
4976                    decoder.context
4977                );
4978                if inlined != (member_inline_size <= 4) {
4979                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4980                }
4981                let inner_offset;
4982                let mut inner_depth = depth.clone();
4983                if inlined {
4984                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4985                    inner_offset = next_offset;
4986                } else {
4987                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4988                    inner_depth.increment()?;
4989                }
4990                let val_ref = self.accepted_channel_modes.get_or_insert_with(|| {
4991                    fidl::new_empty!(
4992                        fidl::encoding::UnboundedVector<
4993                            fidl_fuchsia_bluetooth__common::ChannelMode,
4994                        >,
4995                        D
4996                    )
4997                });
4998                fidl::decode!(
4999                    fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::ChannelMode>,
5000                    D,
5001                    val_ref,
5002                    decoder,
5003                    inner_offset,
5004                    inner_depth
5005                )?;
5006                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5007                {
5008                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5009                }
5010                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5011                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5012                }
5013            }
5014
5015            next_offset += envelope_size;
5016            _next_ordinal_to_read += 1;
5017            if next_offset >= end_offset {
5018                return Ok(());
5019            }
5020
5021            // Decode unknown envelopes for gaps in ordinals.
5022            while _next_ordinal_to_read < 2 {
5023                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5024                _next_ordinal_to_read += 1;
5025                next_offset += envelope_size;
5026            }
5027
5028            let next_out_of_line = decoder.next_out_of_line();
5029            let handles_before = decoder.remaining_handles();
5030            if let Some((inlined, num_bytes, num_handles)) =
5031                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5032            {
5033                let member_inline_size =
5034                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5035                if inlined != (member_inline_size <= 4) {
5036                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5037                }
5038                let inner_offset;
5039                let mut inner_depth = depth.clone();
5040                if inlined {
5041                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5042                    inner_offset = next_offset;
5043                } else {
5044                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5045                    inner_depth.increment()?;
5046                }
5047                let val_ref = self.max_packet_size.get_or_insert_with(|| fidl::new_empty!(u16, D));
5048                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5050                {
5051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5052                }
5053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5055                }
5056            }
5057
5058            next_offset += envelope_size;
5059
5060            // Decode the remaining unknown envelopes.
5061            while next_offset < end_offset {
5062                _next_ordinal_to_read += 1;
5063                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5064                next_offset += envelope_size;
5065            }
5066
5067            Ok(())
5068        }
5069    }
5070
5071    impl AdvertisingData {
5072        #[inline(always)]
5073        fn max_ordinal_present(&self) -> u64 {
5074            if let Some(_) = self.broadcast_name {
5075                return 10;
5076            }
5077            if let Some(_) = self.resolvable_set_identifier {
5078                return 9;
5079            }
5080            if let Some(_) = self.include_tx_power_level {
5081                return 8;
5082            }
5083            if let Some(_) = self.uris {
5084                return 7;
5085            }
5086            if let Some(_) = self.manufacturer_data {
5087                return 6;
5088            }
5089            if let Some(_) = self.service_data {
5090                return 5;
5091            }
5092            if let Some(_) = self.service_uuids {
5093                return 4;
5094            }
5095            if let Some(_) = self.tx_power_level {
5096                return 3;
5097            }
5098            if let Some(_) = self.appearance {
5099                return 2;
5100            }
5101            if let Some(_) = self.name {
5102                return 1;
5103            }
5104            0
5105        }
5106    }
5107
5108    impl fidl::encoding::ValueTypeMarker for AdvertisingData {
5109        type Borrowed<'a> = &'a Self;
5110        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5111            value
5112        }
5113    }
5114
5115    unsafe impl fidl::encoding::TypeMarker for AdvertisingData {
5116        type Owned = Self;
5117
5118        #[inline(always)]
5119        fn inline_align(_context: fidl::encoding::Context) -> usize {
5120            8
5121        }
5122
5123        #[inline(always)]
5124        fn inline_size(_context: fidl::encoding::Context) -> usize {
5125            16
5126        }
5127    }
5128
5129    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdvertisingData, D>
5130        for &AdvertisingData
5131    {
5132        unsafe fn encode(
5133            self,
5134            encoder: &mut fidl::encoding::Encoder<'_, D>,
5135            offset: usize,
5136            mut depth: fidl::encoding::Depth,
5137        ) -> fidl::Result<()> {
5138            encoder.debug_check_bounds::<AdvertisingData>(offset);
5139            // Vector header
5140            let max_ordinal: u64 = self.max_ordinal_present();
5141            encoder.write_num(max_ordinal, offset);
5142            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5143            // Calling encoder.out_of_line_offset(0) is not allowed.
5144            if max_ordinal == 0 {
5145                return Ok(());
5146            }
5147            depth.increment()?;
5148            let envelope_size = 8;
5149            let bytes_len = max_ordinal as usize * envelope_size;
5150            #[allow(unused_variables)]
5151            let offset = encoder.out_of_line_offset(bytes_len);
5152            let mut _prev_end_offset: usize = 0;
5153            if 1 > max_ordinal {
5154                return Ok(());
5155            }
5156
5157            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5158            // are envelope_size bytes.
5159            let cur_offset: usize = (1 - 1) * envelope_size;
5160
5161            // Zero reserved fields.
5162            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5163
5164            // Safety:
5165            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5166            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5167            //   envelope_size bytes, there is always sufficient room.
5168            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<248>, D>(
5169                self.name.as_ref().map(
5170                    <fidl::encoding::BoundedString<248> as fidl::encoding::ValueTypeMarker>::borrow,
5171                ),
5172                encoder,
5173                offset + cur_offset,
5174                depth,
5175            )?;
5176
5177            _prev_end_offset = cur_offset + envelope_size;
5178            if 2 > max_ordinal {
5179                return Ok(());
5180            }
5181
5182            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5183            // are envelope_size bytes.
5184            let cur_offset: usize = (2 - 1) * envelope_size;
5185
5186            // Zero reserved fields.
5187            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5188
5189            // Safety:
5190            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5191            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5192            //   envelope_size bytes, there is always sufficient room.
5193            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Appearance, D>(
5194            self.appearance.as_ref().map(<fidl_fuchsia_bluetooth__common::Appearance as fidl::encoding::ValueTypeMarker>::borrow),
5195            encoder, offset + cur_offset, depth
5196        )?;
5197
5198            _prev_end_offset = cur_offset + envelope_size;
5199            if 3 > max_ordinal {
5200                return Ok(());
5201            }
5202
5203            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5204            // are envelope_size bytes.
5205            let cur_offset: usize = (3 - 1) * envelope_size;
5206
5207            // Zero reserved fields.
5208            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5209
5210            // Safety:
5211            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5212            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5213            //   envelope_size bytes, there is always sufficient room.
5214            fidl::encoding::encode_in_envelope_optional::<i8, D>(
5215                self.tx_power_level.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
5216                encoder,
5217                offset + cur_offset,
5218                depth,
5219            )?;
5220
5221            _prev_end_offset = cur_offset + envelope_size;
5222            if 4 > max_ordinal {
5223                return Ok(());
5224            }
5225
5226            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5227            // are envelope_size bytes.
5228            let cur_offset: usize = (4 - 1) * envelope_size;
5229
5230            // Zero reserved fields.
5231            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5232
5233            // Safety:
5234            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5235            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5236            //   envelope_size bytes, there is always sufficient room.
5237            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid>, D>(
5238            self.service_uuids.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid> as fidl::encoding::ValueTypeMarker>::borrow),
5239            encoder, offset + cur_offset, depth
5240        )?;
5241
5242            _prev_end_offset = cur_offset + envelope_size;
5243            if 5 > max_ordinal {
5244                return Ok(());
5245            }
5246
5247            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5248            // are envelope_size bytes.
5249            let cur_offset: usize = (5 - 1) * envelope_size;
5250
5251            // Zero reserved fields.
5252            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5253
5254            // Safety:
5255            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5256            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5257            //   envelope_size bytes, there is always sufficient room.
5258            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ServiceData>, D>(
5259            self.service_data.as_ref().map(<fidl::encoding::UnboundedVector<ServiceData> as fidl::encoding::ValueTypeMarker>::borrow),
5260            encoder, offset + cur_offset, depth
5261        )?;
5262
5263            _prev_end_offset = cur_offset + envelope_size;
5264            if 6 > max_ordinal {
5265                return Ok(());
5266            }
5267
5268            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5269            // are envelope_size bytes.
5270            let cur_offset: usize = (6 - 1) * envelope_size;
5271
5272            // Zero reserved fields.
5273            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5274
5275            // Safety:
5276            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5277            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5278            //   envelope_size bytes, there is always sufficient room.
5279            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ManufacturerData>, D>(
5280            self.manufacturer_data.as_ref().map(<fidl::encoding::UnboundedVector<ManufacturerData> as fidl::encoding::ValueTypeMarker>::borrow),
5281            encoder, offset + cur_offset, depth
5282        )?;
5283
5284            _prev_end_offset = cur_offset + envelope_size;
5285            if 7 > max_ordinal {
5286                return Ok(());
5287            }
5288
5289            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5290            // are envelope_size bytes.
5291            let cur_offset: usize = (7 - 1) * envelope_size;
5292
5293            // Zero reserved fields.
5294            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5295
5296            // Safety:
5297            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5298            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5299            //   envelope_size bytes, there is always sufficient room.
5300            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>>, D>(
5301            self.uris.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>> as fidl::encoding::ValueTypeMarker>::borrow),
5302            encoder, offset + cur_offset, depth
5303        )?;
5304
5305            _prev_end_offset = cur_offset + envelope_size;
5306            if 8 > max_ordinal {
5307                return Ok(());
5308            }
5309
5310            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5311            // are envelope_size bytes.
5312            let cur_offset: usize = (8 - 1) * envelope_size;
5313
5314            // Zero reserved fields.
5315            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5316
5317            // Safety:
5318            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5319            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5320            //   envelope_size bytes, there is always sufficient room.
5321            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5322                self.include_tx_power_level
5323                    .as_ref()
5324                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5325                encoder,
5326                offset + cur_offset,
5327                depth,
5328            )?;
5329
5330            _prev_end_offset = cur_offset + envelope_size;
5331            if 9 > max_ordinal {
5332                return Ok(());
5333            }
5334
5335            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5336            // are envelope_size bytes.
5337            let cur_offset: usize = (9 - 1) * envelope_size;
5338
5339            // Zero reserved fields.
5340            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5341
5342            // Safety:
5343            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5344            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5345            //   envelope_size bytes, there is always sufficient room.
5346            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 6>, D>(
5347                self.resolvable_set_identifier
5348                    .as_ref()
5349                    .map(<fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow),
5350                encoder,
5351                offset + cur_offset,
5352                depth,
5353            )?;
5354
5355            _prev_end_offset = cur_offset + envelope_size;
5356            if 10 > max_ordinal {
5357                return Ok(());
5358            }
5359
5360            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5361            // are envelope_size bytes.
5362            let cur_offset: usize = (10 - 1) * envelope_size;
5363
5364            // Zero reserved fields.
5365            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5366
5367            // Safety:
5368            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5369            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5370            //   envelope_size bytes, there is always sufficient room.
5371            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
5372                self.broadcast_name.as_ref().map(
5373                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
5374                ),
5375                encoder,
5376                offset + cur_offset,
5377                depth,
5378            )?;
5379
5380            _prev_end_offset = cur_offset + envelope_size;
5381
5382            Ok(())
5383        }
5384    }
5385
5386    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdvertisingData {
5387        #[inline(always)]
5388        fn new_empty() -> Self {
5389            Self::default()
5390        }
5391
5392        unsafe fn decode(
5393            &mut self,
5394            decoder: &mut fidl::encoding::Decoder<'_, D>,
5395            offset: usize,
5396            mut depth: fidl::encoding::Depth,
5397        ) -> fidl::Result<()> {
5398            decoder.debug_check_bounds::<Self>(offset);
5399            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5400                None => return Err(fidl::Error::NotNullable),
5401                Some(len) => len,
5402            };
5403            // Calling decoder.out_of_line_offset(0) is not allowed.
5404            if len == 0 {
5405                return Ok(());
5406            };
5407            depth.increment()?;
5408            let envelope_size = 8;
5409            let bytes_len = len * envelope_size;
5410            let offset = decoder.out_of_line_offset(bytes_len)?;
5411            // Decode the envelope for each type.
5412            let mut _next_ordinal_to_read = 0;
5413            let mut next_offset = offset;
5414            let end_offset = offset + bytes_len;
5415            _next_ordinal_to_read += 1;
5416            if next_offset >= end_offset {
5417                return Ok(());
5418            }
5419
5420            // Decode unknown envelopes for gaps in ordinals.
5421            while _next_ordinal_to_read < 1 {
5422                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5423                _next_ordinal_to_read += 1;
5424                next_offset += envelope_size;
5425            }
5426
5427            let next_out_of_line = decoder.next_out_of_line();
5428            let handles_before = decoder.remaining_handles();
5429            if let Some((inlined, num_bytes, num_handles)) =
5430                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5431            {
5432                let member_inline_size =
5433                    <fidl::encoding::BoundedString<248> as fidl::encoding::TypeMarker>::inline_size(
5434                        decoder.context,
5435                    );
5436                if inlined != (member_inline_size <= 4) {
5437                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5438                }
5439                let inner_offset;
5440                let mut inner_depth = depth.clone();
5441                if inlined {
5442                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5443                    inner_offset = next_offset;
5444                } else {
5445                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5446                    inner_depth.increment()?;
5447                }
5448                let val_ref = self
5449                    .name
5450                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<248>, D));
5451                fidl::decode!(
5452                    fidl::encoding::BoundedString<248>,
5453                    D,
5454                    val_ref,
5455                    decoder,
5456                    inner_offset,
5457                    inner_depth
5458                )?;
5459                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5460                {
5461                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5462                }
5463                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5464                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5465                }
5466            }
5467
5468            next_offset += envelope_size;
5469            _next_ordinal_to_read += 1;
5470            if next_offset >= end_offset {
5471                return Ok(());
5472            }
5473
5474            // Decode unknown envelopes for gaps in ordinals.
5475            while _next_ordinal_to_read < 2 {
5476                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5477                _next_ordinal_to_read += 1;
5478                next_offset += envelope_size;
5479            }
5480
5481            let next_out_of_line = decoder.next_out_of_line();
5482            let handles_before = decoder.remaining_handles();
5483            if let Some((inlined, num_bytes, num_handles)) =
5484                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5485            {
5486                let member_inline_size = <fidl_fuchsia_bluetooth__common::Appearance as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5487                if inlined != (member_inline_size <= 4) {
5488                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5489                }
5490                let inner_offset;
5491                let mut inner_depth = depth.clone();
5492                if inlined {
5493                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5494                    inner_offset = next_offset;
5495                } else {
5496                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5497                    inner_depth.increment()?;
5498                }
5499                let val_ref = self.appearance.get_or_insert_with(|| {
5500                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Appearance, D)
5501                });
5502                fidl::decode!(
5503                    fidl_fuchsia_bluetooth__common::Appearance,
5504                    D,
5505                    val_ref,
5506                    decoder,
5507                    inner_offset,
5508                    inner_depth
5509                )?;
5510                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5511                {
5512                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5513                }
5514                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5515                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5516                }
5517            }
5518
5519            next_offset += envelope_size;
5520            _next_ordinal_to_read += 1;
5521            if next_offset >= end_offset {
5522                return Ok(());
5523            }
5524
5525            // Decode unknown envelopes for gaps in ordinals.
5526            while _next_ordinal_to_read < 3 {
5527                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5528                _next_ordinal_to_read += 1;
5529                next_offset += envelope_size;
5530            }
5531
5532            let next_out_of_line = decoder.next_out_of_line();
5533            let handles_before = decoder.remaining_handles();
5534            if let Some((inlined, num_bytes, num_handles)) =
5535                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5536            {
5537                let member_inline_size =
5538                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5539                if inlined != (member_inline_size <= 4) {
5540                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5541                }
5542                let inner_offset;
5543                let mut inner_depth = depth.clone();
5544                if inlined {
5545                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5546                    inner_offset = next_offset;
5547                } else {
5548                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5549                    inner_depth.increment()?;
5550                }
5551                let val_ref = self.tx_power_level.get_or_insert_with(|| fidl::new_empty!(i8, D));
5552                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
5553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5554                {
5555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5556                }
5557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5559                }
5560            }
5561
5562            next_offset += envelope_size;
5563            _next_ordinal_to_read += 1;
5564            if next_offset >= end_offset {
5565                return Ok(());
5566            }
5567
5568            // Decode unknown envelopes for gaps in ordinals.
5569            while _next_ordinal_to_read < 4 {
5570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5571                _next_ordinal_to_read += 1;
5572                next_offset += envelope_size;
5573            }
5574
5575            let next_out_of_line = decoder.next_out_of_line();
5576            let handles_before = decoder.remaining_handles();
5577            if let Some((inlined, num_bytes, num_handles)) =
5578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5579            {
5580                let member_inline_size = <fidl::encoding::UnboundedVector<
5581                    fidl_fuchsia_bluetooth__common::Uuid,
5582                > as fidl::encoding::TypeMarker>::inline_size(
5583                    decoder.context
5584                );
5585                if inlined != (member_inline_size <= 4) {
5586                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5587                }
5588                let inner_offset;
5589                let mut inner_depth = depth.clone();
5590                if inlined {
5591                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5592                    inner_offset = next_offset;
5593                } else {
5594                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5595                    inner_depth.increment()?;
5596                }
5597                let val_ref = self.service_uuids.get_or_insert_with(|| {
5598                    fidl::new_empty!(
5599                        fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid>,
5600                        D
5601                    )
5602                });
5603                fidl::decode!(
5604                    fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid>,
5605                    D,
5606                    val_ref,
5607                    decoder,
5608                    inner_offset,
5609                    inner_depth
5610                )?;
5611                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5612                {
5613                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5614                }
5615                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5616                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5617                }
5618            }
5619
5620            next_offset += envelope_size;
5621            _next_ordinal_to_read += 1;
5622            if next_offset >= end_offset {
5623                return Ok(());
5624            }
5625
5626            // Decode unknown envelopes for gaps in ordinals.
5627            while _next_ordinal_to_read < 5 {
5628                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5629                _next_ordinal_to_read += 1;
5630                next_offset += envelope_size;
5631            }
5632
5633            let next_out_of_line = decoder.next_out_of_line();
5634            let handles_before = decoder.remaining_handles();
5635            if let Some((inlined, num_bytes, num_handles)) =
5636                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5637            {
5638                let member_inline_size = <fidl::encoding::UnboundedVector<ServiceData> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5639                if inlined != (member_inline_size <= 4) {
5640                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5641                }
5642                let inner_offset;
5643                let mut inner_depth = depth.clone();
5644                if inlined {
5645                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5646                    inner_offset = next_offset;
5647                } else {
5648                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5649                    inner_depth.increment()?;
5650                }
5651                let val_ref = self.service_data.get_or_insert_with(|| {
5652                    fidl::new_empty!(fidl::encoding::UnboundedVector<ServiceData>, D)
5653                });
5654                fidl::decode!(
5655                    fidl::encoding::UnboundedVector<ServiceData>,
5656                    D,
5657                    val_ref,
5658                    decoder,
5659                    inner_offset,
5660                    inner_depth
5661                )?;
5662                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5663                {
5664                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5665                }
5666                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5667                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5668                }
5669            }
5670
5671            next_offset += envelope_size;
5672            _next_ordinal_to_read += 1;
5673            if next_offset >= end_offset {
5674                return Ok(());
5675            }
5676
5677            // Decode unknown envelopes for gaps in ordinals.
5678            while _next_ordinal_to_read < 6 {
5679                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5680                _next_ordinal_to_read += 1;
5681                next_offset += envelope_size;
5682            }
5683
5684            let next_out_of_line = decoder.next_out_of_line();
5685            let handles_before = decoder.remaining_handles();
5686            if let Some((inlined, num_bytes, num_handles)) =
5687                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5688            {
5689                let member_inline_size = <fidl::encoding::UnboundedVector<ManufacturerData> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5690                if inlined != (member_inline_size <= 4) {
5691                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5692                }
5693                let inner_offset;
5694                let mut inner_depth = depth.clone();
5695                if inlined {
5696                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5697                    inner_offset = next_offset;
5698                } else {
5699                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5700                    inner_depth.increment()?;
5701                }
5702                let val_ref = self.manufacturer_data.get_or_insert_with(|| {
5703                    fidl::new_empty!(fidl::encoding::UnboundedVector<ManufacturerData>, D)
5704                });
5705                fidl::decode!(
5706                    fidl::encoding::UnboundedVector<ManufacturerData>,
5707                    D,
5708                    val_ref,
5709                    decoder,
5710                    inner_offset,
5711                    inner_depth
5712                )?;
5713                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5714                {
5715                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5716                }
5717                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5718                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5719                }
5720            }
5721
5722            next_offset += envelope_size;
5723            _next_ordinal_to_read += 1;
5724            if next_offset >= end_offset {
5725                return Ok(());
5726            }
5727
5728            // Decode unknown envelopes for gaps in ordinals.
5729            while _next_ordinal_to_read < 7 {
5730                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5731                _next_ordinal_to_read += 1;
5732                next_offset += envelope_size;
5733            }
5734
5735            let next_out_of_line = decoder.next_out_of_line();
5736            let handles_before = decoder.remaining_handles();
5737            if let Some((inlined, num_bytes, num_handles)) =
5738                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5739            {
5740                let member_inline_size = <fidl::encoding::UnboundedVector<
5741                    fidl::encoding::BoundedString<278>,
5742                > as fidl::encoding::TypeMarker>::inline_size(
5743                    decoder.context
5744                );
5745                if inlined != (member_inline_size <= 4) {
5746                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5747                }
5748                let inner_offset;
5749                let mut inner_depth = depth.clone();
5750                if inlined {
5751                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5752                    inner_offset = next_offset;
5753                } else {
5754                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5755                    inner_depth.increment()?;
5756                }
5757                let val_ref = self.uris.get_or_insert_with(|| {
5758                    fidl::new_empty!(
5759                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>>,
5760                        D
5761                    )
5762                });
5763                fidl::decode!(
5764                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>>,
5765                    D,
5766                    val_ref,
5767                    decoder,
5768                    inner_offset,
5769                    inner_depth
5770                )?;
5771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5772                {
5773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5774                }
5775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5777                }
5778            }
5779
5780            next_offset += envelope_size;
5781            _next_ordinal_to_read += 1;
5782            if next_offset >= end_offset {
5783                return Ok(());
5784            }
5785
5786            // Decode unknown envelopes for gaps in ordinals.
5787            while _next_ordinal_to_read < 8 {
5788                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5789                _next_ordinal_to_read += 1;
5790                next_offset += envelope_size;
5791            }
5792
5793            let next_out_of_line = decoder.next_out_of_line();
5794            let handles_before = decoder.remaining_handles();
5795            if let Some((inlined, num_bytes, num_handles)) =
5796                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5797            {
5798                let member_inline_size =
5799                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5800                if inlined != (member_inline_size <= 4) {
5801                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5802                }
5803                let inner_offset;
5804                let mut inner_depth = depth.clone();
5805                if inlined {
5806                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5807                    inner_offset = next_offset;
5808                } else {
5809                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5810                    inner_depth.increment()?;
5811                }
5812                let val_ref =
5813                    self.include_tx_power_level.get_or_insert_with(|| fidl::new_empty!(bool, D));
5814                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5815                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5816                {
5817                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5818                }
5819                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5820                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5821                }
5822            }
5823
5824            next_offset += envelope_size;
5825            _next_ordinal_to_read += 1;
5826            if next_offset >= end_offset {
5827                return Ok(());
5828            }
5829
5830            // Decode unknown envelopes for gaps in ordinals.
5831            while _next_ordinal_to_read < 9 {
5832                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5833                _next_ordinal_to_read += 1;
5834                next_offset += envelope_size;
5835            }
5836
5837            let next_out_of_line = decoder.next_out_of_line();
5838            let handles_before = decoder.remaining_handles();
5839            if let Some((inlined, num_bytes, num_handles)) =
5840                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5841            {
5842                let member_inline_size =
5843                    <fidl::encoding::Array<u8, 6> as fidl::encoding::TypeMarker>::inline_size(
5844                        decoder.context,
5845                    );
5846                if inlined != (member_inline_size <= 4) {
5847                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5848                }
5849                let inner_offset;
5850                let mut inner_depth = depth.clone();
5851                if inlined {
5852                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5853                    inner_offset = next_offset;
5854                } else {
5855                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5856                    inner_depth.increment()?;
5857                }
5858                let val_ref = self
5859                    .resolvable_set_identifier
5860                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 6>, D));
5861                fidl::decode!(fidl::encoding::Array<u8, 6>, D, val_ref, decoder, inner_offset, inner_depth)?;
5862                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5863                {
5864                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5865                }
5866                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5867                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5868                }
5869            }
5870
5871            next_offset += envelope_size;
5872            _next_ordinal_to_read += 1;
5873            if next_offset >= end_offset {
5874                return Ok(());
5875            }
5876
5877            // Decode unknown envelopes for gaps in ordinals.
5878            while _next_ordinal_to_read < 10 {
5879                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5880                _next_ordinal_to_read += 1;
5881                next_offset += envelope_size;
5882            }
5883
5884            let next_out_of_line = decoder.next_out_of_line();
5885            let handles_before = decoder.remaining_handles();
5886            if let Some((inlined, num_bytes, num_handles)) =
5887                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5888            {
5889                let member_inline_size =
5890                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
5891                        decoder.context,
5892                    );
5893                if inlined != (member_inline_size <= 4) {
5894                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5895                }
5896                let inner_offset;
5897                let mut inner_depth = depth.clone();
5898                if inlined {
5899                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5900                    inner_offset = next_offset;
5901                } else {
5902                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5903                    inner_depth.increment()?;
5904                }
5905                let val_ref = self
5906                    .broadcast_name
5907                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
5908                fidl::decode!(
5909                    fidl::encoding::BoundedString<128>,
5910                    D,
5911                    val_ref,
5912                    decoder,
5913                    inner_offset,
5914                    inner_depth
5915                )?;
5916                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5917                {
5918                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5919                }
5920                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5921                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5922                }
5923            }
5924
5925            next_offset += envelope_size;
5926
5927            // Decode the remaining unknown envelopes.
5928            while next_offset < end_offset {
5929                _next_ordinal_to_read += 1;
5930                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5931                next_offset += envelope_size;
5932            }
5933
5934            Ok(())
5935        }
5936    }
5937
5938    impl AdvertisingParameters {
5939        #[inline(always)]
5940        fn max_ordinal_present(&self) -> u64 {
5941            if let Some(_) = self.address_type {
5942                return 7;
5943            }
5944            if let Some(_) = self.advertising_procedure {
5945                return 6;
5946            }
5947            if let Some(_) = self.connection_options {
5948                return 5;
5949            }
5950            if let Some(_) = self.connectable {
5951                return 4;
5952            }
5953            if let Some(_) = self.mode_hint {
5954                return 3;
5955            }
5956            if let Some(_) = self.scan_response {
5957                return 2;
5958            }
5959            if let Some(_) = self.data {
5960                return 1;
5961            }
5962            0
5963        }
5964    }
5965
5966    impl fidl::encoding::ValueTypeMarker for AdvertisingParameters {
5967        type Borrowed<'a> = &'a Self;
5968        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5969            value
5970        }
5971    }
5972
5973    unsafe impl fidl::encoding::TypeMarker for AdvertisingParameters {
5974        type Owned = Self;
5975
5976        #[inline(always)]
5977        fn inline_align(_context: fidl::encoding::Context) -> usize {
5978            8
5979        }
5980
5981        #[inline(always)]
5982        fn inline_size(_context: fidl::encoding::Context) -> usize {
5983            16
5984        }
5985    }
5986
5987    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdvertisingParameters, D>
5988        for &AdvertisingParameters
5989    {
5990        unsafe fn encode(
5991            self,
5992            encoder: &mut fidl::encoding::Encoder<'_, D>,
5993            offset: usize,
5994            mut depth: fidl::encoding::Depth,
5995        ) -> fidl::Result<()> {
5996            encoder.debug_check_bounds::<AdvertisingParameters>(offset);
5997            // Vector header
5998            let max_ordinal: u64 = self.max_ordinal_present();
5999            encoder.write_num(max_ordinal, offset);
6000            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6001            // Calling encoder.out_of_line_offset(0) is not allowed.
6002            if max_ordinal == 0 {
6003                return Ok(());
6004            }
6005            depth.increment()?;
6006            let envelope_size = 8;
6007            let bytes_len = max_ordinal as usize * envelope_size;
6008            #[allow(unused_variables)]
6009            let offset = encoder.out_of_line_offset(bytes_len);
6010            let mut _prev_end_offset: usize = 0;
6011            if 1 > max_ordinal {
6012                return Ok(());
6013            }
6014
6015            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6016            // are envelope_size bytes.
6017            let cur_offset: usize = (1 - 1) * envelope_size;
6018
6019            // Zero reserved fields.
6020            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6021
6022            // Safety:
6023            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6024            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6025            //   envelope_size bytes, there is always sufficient room.
6026            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
6027                self.data
6028                    .as_ref()
6029                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
6030                encoder,
6031                offset + cur_offset,
6032                depth,
6033            )?;
6034
6035            _prev_end_offset = cur_offset + envelope_size;
6036            if 2 > max_ordinal {
6037                return Ok(());
6038            }
6039
6040            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6041            // are envelope_size bytes.
6042            let cur_offset: usize = (2 - 1) * envelope_size;
6043
6044            // Zero reserved fields.
6045            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6046
6047            // Safety:
6048            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6049            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6050            //   envelope_size bytes, there is always sufficient room.
6051            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
6052                self.scan_response
6053                    .as_ref()
6054                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
6055                encoder,
6056                offset + cur_offset,
6057                depth,
6058            )?;
6059
6060            _prev_end_offset = cur_offset + envelope_size;
6061            if 3 > max_ordinal {
6062                return Ok(());
6063            }
6064
6065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6066            // are envelope_size bytes.
6067            let cur_offset: usize = (3 - 1) * envelope_size;
6068
6069            // Zero reserved fields.
6070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6071
6072            // Safety:
6073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6075            //   envelope_size bytes, there is always sufficient room.
6076            fidl::encoding::encode_in_envelope_optional::<AdvertisingModeHint, D>(
6077                self.mode_hint
6078                    .as_ref()
6079                    .map(<AdvertisingModeHint as fidl::encoding::ValueTypeMarker>::borrow),
6080                encoder,
6081                offset + cur_offset,
6082                depth,
6083            )?;
6084
6085            _prev_end_offset = cur_offset + envelope_size;
6086            if 4 > max_ordinal {
6087                return Ok(());
6088            }
6089
6090            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6091            // are envelope_size bytes.
6092            let cur_offset: usize = (4 - 1) * envelope_size;
6093
6094            // Zero reserved fields.
6095            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6096
6097            // Safety:
6098            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6099            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6100            //   envelope_size bytes, there is always sufficient room.
6101            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6102                self.connectable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6103                encoder,
6104                offset + cur_offset,
6105                depth,
6106            )?;
6107
6108            _prev_end_offset = cur_offset + envelope_size;
6109            if 5 > max_ordinal {
6110                return Ok(());
6111            }
6112
6113            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6114            // are envelope_size bytes.
6115            let cur_offset: usize = (5 - 1) * envelope_size;
6116
6117            // Zero reserved fields.
6118            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6119
6120            // Safety:
6121            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6122            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6123            //   envelope_size bytes, there is always sufficient room.
6124            fidl::encoding::encode_in_envelope_optional::<ConnectionOptions, D>(
6125                self.connection_options
6126                    .as_ref()
6127                    .map(<ConnectionOptions as fidl::encoding::ValueTypeMarker>::borrow),
6128                encoder,
6129                offset + cur_offset,
6130                depth,
6131            )?;
6132
6133            _prev_end_offset = cur_offset + envelope_size;
6134            if 6 > max_ordinal {
6135                return Ok(());
6136            }
6137
6138            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6139            // are envelope_size bytes.
6140            let cur_offset: usize = (6 - 1) * envelope_size;
6141
6142            // Zero reserved fields.
6143            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6144
6145            // Safety:
6146            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6147            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6148            //   envelope_size bytes, there is always sufficient room.
6149            fidl::encoding::encode_in_envelope_optional::<AdvertisingProcedure, D>(
6150                self.advertising_procedure
6151                    .as_ref()
6152                    .map(<AdvertisingProcedure as fidl::encoding::ValueTypeMarker>::borrow),
6153                encoder,
6154                offset + cur_offset,
6155                depth,
6156            )?;
6157
6158            _prev_end_offset = cur_offset + envelope_size;
6159            if 7 > max_ordinal {
6160                return Ok(());
6161            }
6162
6163            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6164            // are envelope_size bytes.
6165            let cur_offset: usize = (7 - 1) * envelope_size;
6166
6167            // Zero reserved fields.
6168            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6169
6170            // Safety:
6171            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6172            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6173            //   envelope_size bytes, there is always sufficient room.
6174            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::AddressType, D>(
6175            self.address_type.as_ref().map(<fidl_fuchsia_bluetooth__common::AddressType as fidl::encoding::ValueTypeMarker>::borrow),
6176            encoder, offset + cur_offset, depth
6177        )?;
6178
6179            _prev_end_offset = cur_offset + envelope_size;
6180
6181            Ok(())
6182        }
6183    }
6184
6185    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdvertisingParameters {
6186        #[inline(always)]
6187        fn new_empty() -> Self {
6188            Self::default()
6189        }
6190
6191        unsafe fn decode(
6192            &mut self,
6193            decoder: &mut fidl::encoding::Decoder<'_, D>,
6194            offset: usize,
6195            mut depth: fidl::encoding::Depth,
6196        ) -> fidl::Result<()> {
6197            decoder.debug_check_bounds::<Self>(offset);
6198            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6199                None => return Err(fidl::Error::NotNullable),
6200                Some(len) => len,
6201            };
6202            // Calling decoder.out_of_line_offset(0) is not allowed.
6203            if len == 0 {
6204                return Ok(());
6205            };
6206            depth.increment()?;
6207            let envelope_size = 8;
6208            let bytes_len = len * envelope_size;
6209            let offset = decoder.out_of_line_offset(bytes_len)?;
6210            // Decode the envelope for each type.
6211            let mut _next_ordinal_to_read = 0;
6212            let mut next_offset = offset;
6213            let end_offset = offset + bytes_len;
6214            _next_ordinal_to_read += 1;
6215            if next_offset >= end_offset {
6216                return Ok(());
6217            }
6218
6219            // Decode unknown envelopes for gaps in ordinals.
6220            while _next_ordinal_to_read < 1 {
6221                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6222                _next_ordinal_to_read += 1;
6223                next_offset += envelope_size;
6224            }
6225
6226            let next_out_of_line = decoder.next_out_of_line();
6227            let handles_before = decoder.remaining_handles();
6228            if let Some((inlined, num_bytes, num_handles)) =
6229                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6230            {
6231                let member_inline_size =
6232                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6233                if inlined != (member_inline_size <= 4) {
6234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6235                }
6236                let inner_offset;
6237                let mut inner_depth = depth.clone();
6238                if inlined {
6239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6240                    inner_offset = next_offset;
6241                } else {
6242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6243                    inner_depth.increment()?;
6244                }
6245                let val_ref = self.data.get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
6246                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
6247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6248                {
6249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6250                }
6251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6253                }
6254            }
6255
6256            next_offset += envelope_size;
6257            _next_ordinal_to_read += 1;
6258            if next_offset >= end_offset {
6259                return Ok(());
6260            }
6261
6262            // Decode unknown envelopes for gaps in ordinals.
6263            while _next_ordinal_to_read < 2 {
6264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6265                _next_ordinal_to_read += 1;
6266                next_offset += envelope_size;
6267            }
6268
6269            let next_out_of_line = decoder.next_out_of_line();
6270            let handles_before = decoder.remaining_handles();
6271            if let Some((inlined, num_bytes, num_handles)) =
6272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6273            {
6274                let member_inline_size =
6275                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6276                if inlined != (member_inline_size <= 4) {
6277                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6278                }
6279                let inner_offset;
6280                let mut inner_depth = depth.clone();
6281                if inlined {
6282                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6283                    inner_offset = next_offset;
6284                } else {
6285                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6286                    inner_depth.increment()?;
6287                }
6288                let val_ref =
6289                    self.scan_response.get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
6290                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
6291                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6292                {
6293                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6294                }
6295                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6296                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6297                }
6298            }
6299
6300            next_offset += envelope_size;
6301            _next_ordinal_to_read += 1;
6302            if next_offset >= end_offset {
6303                return Ok(());
6304            }
6305
6306            // Decode unknown envelopes for gaps in ordinals.
6307            while _next_ordinal_to_read < 3 {
6308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6309                _next_ordinal_to_read += 1;
6310                next_offset += envelope_size;
6311            }
6312
6313            let next_out_of_line = decoder.next_out_of_line();
6314            let handles_before = decoder.remaining_handles();
6315            if let Some((inlined, num_bytes, num_handles)) =
6316                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6317            {
6318                let member_inline_size =
6319                    <AdvertisingModeHint as fidl::encoding::TypeMarker>::inline_size(
6320                        decoder.context,
6321                    );
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.mode_hint.get_or_insert_with(|| fidl::new_empty!(AdvertisingModeHint, D));
6336                fidl::decode!(AdvertisingModeHint, 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 < 4 {
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                    <bool 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 = self.connectable.get_or_insert_with(|| fidl::new_empty!(bool, D));
6379                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6380                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6381                {
6382                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6383                }
6384                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6385                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6386                }
6387            }
6388
6389            next_offset += envelope_size;
6390            _next_ordinal_to_read += 1;
6391            if next_offset >= end_offset {
6392                return Ok(());
6393            }
6394
6395            // Decode unknown envelopes for gaps in ordinals.
6396            while _next_ordinal_to_read < 5 {
6397                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6398                _next_ordinal_to_read += 1;
6399                next_offset += envelope_size;
6400            }
6401
6402            let next_out_of_line = decoder.next_out_of_line();
6403            let handles_before = decoder.remaining_handles();
6404            if let Some((inlined, num_bytes, num_handles)) =
6405                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6406            {
6407                let member_inline_size =
6408                    <ConnectionOptions as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6409                if inlined != (member_inline_size <= 4) {
6410                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6411                }
6412                let inner_offset;
6413                let mut inner_depth = depth.clone();
6414                if inlined {
6415                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6416                    inner_offset = next_offset;
6417                } else {
6418                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6419                    inner_depth.increment()?;
6420                }
6421                let val_ref = self
6422                    .connection_options
6423                    .get_or_insert_with(|| fidl::new_empty!(ConnectionOptions, D));
6424                fidl::decode!(ConnectionOptions, D, val_ref, decoder, inner_offset, inner_depth)?;
6425                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6426                {
6427                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6428                }
6429                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6430                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6431                }
6432            }
6433
6434            next_offset += envelope_size;
6435            _next_ordinal_to_read += 1;
6436            if next_offset >= end_offset {
6437                return Ok(());
6438            }
6439
6440            // Decode unknown envelopes for gaps in ordinals.
6441            while _next_ordinal_to_read < 6 {
6442                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6443                _next_ordinal_to_read += 1;
6444                next_offset += envelope_size;
6445            }
6446
6447            let next_out_of_line = decoder.next_out_of_line();
6448            let handles_before = decoder.remaining_handles();
6449            if let Some((inlined, num_bytes, num_handles)) =
6450                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6451            {
6452                let member_inline_size =
6453                    <AdvertisingProcedure as fidl::encoding::TypeMarker>::inline_size(
6454                        decoder.context,
6455                    );
6456                if inlined != (member_inline_size <= 4) {
6457                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6458                }
6459                let inner_offset;
6460                let mut inner_depth = depth.clone();
6461                if inlined {
6462                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6463                    inner_offset = next_offset;
6464                } else {
6465                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6466                    inner_depth.increment()?;
6467                }
6468                let val_ref = self
6469                    .advertising_procedure
6470                    .get_or_insert_with(|| fidl::new_empty!(AdvertisingProcedure, D));
6471                fidl::decode!(
6472                    AdvertisingProcedure,
6473                    D,
6474                    val_ref,
6475                    decoder,
6476                    inner_offset,
6477                    inner_depth
6478                )?;
6479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6480                {
6481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6482                }
6483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6485                }
6486            }
6487
6488            next_offset += envelope_size;
6489            _next_ordinal_to_read += 1;
6490            if next_offset >= end_offset {
6491                return Ok(());
6492            }
6493
6494            // Decode unknown envelopes for gaps in ordinals.
6495            while _next_ordinal_to_read < 7 {
6496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6497                _next_ordinal_to_read += 1;
6498                next_offset += envelope_size;
6499            }
6500
6501            let next_out_of_line = decoder.next_out_of_line();
6502            let handles_before = decoder.remaining_handles();
6503            if let Some((inlined, num_bytes, num_handles)) =
6504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6505            {
6506                let member_inline_size = <fidl_fuchsia_bluetooth__common::AddressType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6507                if inlined != (member_inline_size <= 4) {
6508                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6509                }
6510                let inner_offset;
6511                let mut inner_depth = depth.clone();
6512                if inlined {
6513                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6514                    inner_offset = next_offset;
6515                } else {
6516                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6517                    inner_depth.increment()?;
6518                }
6519                let val_ref = self.address_type.get_or_insert_with(|| {
6520                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::AddressType, D)
6521                });
6522                fidl::decode!(
6523                    fidl_fuchsia_bluetooth__common::AddressType,
6524                    D,
6525                    val_ref,
6526                    decoder,
6527                    inner_offset,
6528                    inner_depth
6529                )?;
6530                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6531                {
6532                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6533                }
6534                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6535                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6536                }
6537            }
6538
6539            next_offset += envelope_size;
6540
6541            // Decode the remaining unknown envelopes.
6542            while next_offset < end_offset {
6543                _next_ordinal_to_read += 1;
6544                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6545                next_offset += envelope_size;
6546            }
6547
6548            Ok(())
6549        }
6550    }
6551
6552    impl BroadcastIsochronousGroupInfo {
6553        #[inline(always)]
6554        fn max_ordinal_present(&self) -> u64 {
6555            if let Some(_) = self.encryption {
6556                return 4;
6557            }
6558            if let Some(_) = self.phy {
6559                return 3;
6560            }
6561            if let Some(_) = self.max_sdu_size {
6562                return 2;
6563            }
6564            if let Some(_) = self.streams_count {
6565                return 1;
6566            }
6567            0
6568        }
6569    }
6570
6571    impl fidl::encoding::ValueTypeMarker for BroadcastIsochronousGroupInfo {
6572        type Borrowed<'a> = &'a Self;
6573        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6574            value
6575        }
6576    }
6577
6578    unsafe impl fidl::encoding::TypeMarker for BroadcastIsochronousGroupInfo {
6579        type Owned = Self;
6580
6581        #[inline(always)]
6582        fn inline_align(_context: fidl::encoding::Context) -> usize {
6583            8
6584        }
6585
6586        #[inline(always)]
6587        fn inline_size(_context: fidl::encoding::Context) -> usize {
6588            16
6589        }
6590    }
6591
6592    unsafe impl<D: fidl::encoding::ResourceDialect>
6593        fidl::encoding::Encode<BroadcastIsochronousGroupInfo, D>
6594        for &BroadcastIsochronousGroupInfo
6595    {
6596        unsafe fn encode(
6597            self,
6598            encoder: &mut fidl::encoding::Encoder<'_, D>,
6599            offset: usize,
6600            mut depth: fidl::encoding::Depth,
6601        ) -> fidl::Result<()> {
6602            encoder.debug_check_bounds::<BroadcastIsochronousGroupInfo>(offset);
6603            // Vector header
6604            let max_ordinal: u64 = self.max_ordinal_present();
6605            encoder.write_num(max_ordinal, offset);
6606            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6607            // Calling encoder.out_of_line_offset(0) is not allowed.
6608            if max_ordinal == 0 {
6609                return Ok(());
6610            }
6611            depth.increment()?;
6612            let envelope_size = 8;
6613            let bytes_len = max_ordinal as usize * envelope_size;
6614            #[allow(unused_variables)]
6615            let offset = encoder.out_of_line_offset(bytes_len);
6616            let mut _prev_end_offset: usize = 0;
6617            if 1 > max_ordinal {
6618                return Ok(());
6619            }
6620
6621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6622            // are envelope_size bytes.
6623            let cur_offset: usize = (1 - 1) * envelope_size;
6624
6625            // Zero reserved fields.
6626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6627
6628            // Safety:
6629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6631            //   envelope_size bytes, there is always sufficient room.
6632            fidl::encoding::encode_in_envelope_optional::<u8, D>(
6633                self.streams_count.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
6634                encoder,
6635                offset + cur_offset,
6636                depth,
6637            )?;
6638
6639            _prev_end_offset = cur_offset + envelope_size;
6640            if 2 > max_ordinal {
6641                return Ok(());
6642            }
6643
6644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6645            // are envelope_size bytes.
6646            let cur_offset: usize = (2 - 1) * envelope_size;
6647
6648            // Zero reserved fields.
6649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6650
6651            // Safety:
6652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6654            //   envelope_size bytes, there is always sufficient room.
6655            fidl::encoding::encode_in_envelope_optional::<u16, D>(
6656                self.max_sdu_size.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
6657                encoder,
6658                offset + cur_offset,
6659                depth,
6660            )?;
6661
6662            _prev_end_offset = cur_offset + envelope_size;
6663            if 3 > max_ordinal {
6664                return Ok(());
6665            }
6666
6667            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6668            // are envelope_size bytes.
6669            let cur_offset: usize = (3 - 1) * envelope_size;
6670
6671            // Zero reserved fields.
6672            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6673
6674            // Safety:
6675            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6676            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6677            //   envelope_size bytes, there is always sufficient room.
6678            fidl::encoding::encode_in_envelope_optional::<PhysicalLayer, D>(
6679                self.phy.as_ref().map(<PhysicalLayer as fidl::encoding::ValueTypeMarker>::borrow),
6680                encoder,
6681                offset + cur_offset,
6682                depth,
6683            )?;
6684
6685            _prev_end_offset = cur_offset + envelope_size;
6686            if 4 > max_ordinal {
6687                return Ok(());
6688            }
6689
6690            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6691            // are envelope_size bytes.
6692            let cur_offset: usize = (4 - 1) * envelope_size;
6693
6694            // Zero reserved fields.
6695            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6696
6697            // Safety:
6698            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6699            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6700            //   envelope_size bytes, there is always sufficient room.
6701            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6702                self.encryption.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6703                encoder,
6704                offset + cur_offset,
6705                depth,
6706            )?;
6707
6708            _prev_end_offset = cur_offset + envelope_size;
6709
6710            Ok(())
6711        }
6712    }
6713
6714    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6715        for BroadcastIsochronousGroupInfo
6716    {
6717        #[inline(always)]
6718        fn new_empty() -> Self {
6719            Self::default()
6720        }
6721
6722        unsafe fn decode(
6723            &mut self,
6724            decoder: &mut fidl::encoding::Decoder<'_, D>,
6725            offset: usize,
6726            mut depth: fidl::encoding::Depth,
6727        ) -> fidl::Result<()> {
6728            decoder.debug_check_bounds::<Self>(offset);
6729            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6730                None => return Err(fidl::Error::NotNullable),
6731                Some(len) => len,
6732            };
6733            // Calling decoder.out_of_line_offset(0) is not allowed.
6734            if len == 0 {
6735                return Ok(());
6736            };
6737            depth.increment()?;
6738            let envelope_size = 8;
6739            let bytes_len = len * envelope_size;
6740            let offset = decoder.out_of_line_offset(bytes_len)?;
6741            // Decode the envelope for each type.
6742            let mut _next_ordinal_to_read = 0;
6743            let mut next_offset = offset;
6744            let end_offset = offset + bytes_len;
6745            _next_ordinal_to_read += 1;
6746            if next_offset >= end_offset {
6747                return Ok(());
6748            }
6749
6750            // Decode unknown envelopes for gaps in ordinals.
6751            while _next_ordinal_to_read < 1 {
6752                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6753                _next_ordinal_to_read += 1;
6754                next_offset += envelope_size;
6755            }
6756
6757            let next_out_of_line = decoder.next_out_of_line();
6758            let handles_before = decoder.remaining_handles();
6759            if let Some((inlined, num_bytes, num_handles)) =
6760                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6761            {
6762                let member_inline_size =
6763                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6764                if inlined != (member_inline_size <= 4) {
6765                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6766                }
6767                let inner_offset;
6768                let mut inner_depth = depth.clone();
6769                if inlined {
6770                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6771                    inner_offset = next_offset;
6772                } else {
6773                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6774                    inner_depth.increment()?;
6775                }
6776                let val_ref = self.streams_count.get_or_insert_with(|| fidl::new_empty!(u8, D));
6777                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
6778                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6779                {
6780                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6781                }
6782                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6783                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6784                }
6785            }
6786
6787            next_offset += envelope_size;
6788            _next_ordinal_to_read += 1;
6789            if next_offset >= end_offset {
6790                return Ok(());
6791            }
6792
6793            // Decode unknown envelopes for gaps in ordinals.
6794            while _next_ordinal_to_read < 2 {
6795                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6796                _next_ordinal_to_read += 1;
6797                next_offset += envelope_size;
6798            }
6799
6800            let next_out_of_line = decoder.next_out_of_line();
6801            let handles_before = decoder.remaining_handles();
6802            if let Some((inlined, num_bytes, num_handles)) =
6803                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6804            {
6805                let member_inline_size =
6806                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6807                if inlined != (member_inline_size <= 4) {
6808                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6809                }
6810                let inner_offset;
6811                let mut inner_depth = depth.clone();
6812                if inlined {
6813                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6814                    inner_offset = next_offset;
6815                } else {
6816                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6817                    inner_depth.increment()?;
6818                }
6819                let val_ref = self.max_sdu_size.get_or_insert_with(|| fidl::new_empty!(u16, D));
6820                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6821                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6822                {
6823                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6824                }
6825                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6826                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6827                }
6828            }
6829
6830            next_offset += envelope_size;
6831            _next_ordinal_to_read += 1;
6832            if next_offset >= end_offset {
6833                return Ok(());
6834            }
6835
6836            // Decode unknown envelopes for gaps in ordinals.
6837            while _next_ordinal_to_read < 3 {
6838                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6839                _next_ordinal_to_read += 1;
6840                next_offset += envelope_size;
6841            }
6842
6843            let next_out_of_line = decoder.next_out_of_line();
6844            let handles_before = decoder.remaining_handles();
6845            if let Some((inlined, num_bytes, num_handles)) =
6846                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6847            {
6848                let member_inline_size =
6849                    <PhysicalLayer as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6850                if inlined != (member_inline_size <= 4) {
6851                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6852                }
6853                let inner_offset;
6854                let mut inner_depth = depth.clone();
6855                if inlined {
6856                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6857                    inner_offset = next_offset;
6858                } else {
6859                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6860                    inner_depth.increment()?;
6861                }
6862                let val_ref = self.phy.get_or_insert_with(|| fidl::new_empty!(PhysicalLayer, D));
6863                fidl::decode!(PhysicalLayer, D, val_ref, decoder, inner_offset, inner_depth)?;
6864                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6865                {
6866                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6867                }
6868                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6869                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6870                }
6871            }
6872
6873            next_offset += envelope_size;
6874            _next_ordinal_to_read += 1;
6875            if next_offset >= end_offset {
6876                return Ok(());
6877            }
6878
6879            // Decode unknown envelopes for gaps in ordinals.
6880            while _next_ordinal_to_read < 4 {
6881                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6882                _next_ordinal_to_read += 1;
6883                next_offset += envelope_size;
6884            }
6885
6886            let next_out_of_line = decoder.next_out_of_line();
6887            let handles_before = decoder.remaining_handles();
6888            if let Some((inlined, num_bytes, num_handles)) =
6889                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6890            {
6891                let member_inline_size =
6892                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6893                if inlined != (member_inline_size <= 4) {
6894                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6895                }
6896                let inner_offset;
6897                let mut inner_depth = depth.clone();
6898                if inlined {
6899                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6900                    inner_offset = next_offset;
6901                } else {
6902                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6903                    inner_depth.increment()?;
6904                }
6905                let val_ref = self.encryption.get_or_insert_with(|| fidl::new_empty!(bool, D));
6906                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6907                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6908                {
6909                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6910                }
6911                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6912                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6913                }
6914            }
6915
6916            next_offset += envelope_size;
6917
6918            // Decode the remaining unknown envelopes.
6919            while next_offset < end_offset {
6920                _next_ordinal_to_read += 1;
6921                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6922                next_offset += envelope_size;
6923            }
6924
6925            Ok(())
6926        }
6927    }
6928
6929    impl BroadcastIsochronousGroupInfoReport {
6930        #[inline(always)]
6931        fn max_ordinal_present(&self) -> u64 {
6932            if let Some(_) = self.timestamp {
6933                return 2;
6934            }
6935            if let Some(_) = self.info {
6936                return 1;
6937            }
6938            0
6939        }
6940    }
6941
6942    impl fidl::encoding::ValueTypeMarker for BroadcastIsochronousGroupInfoReport {
6943        type Borrowed<'a> = &'a Self;
6944        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6945            value
6946        }
6947    }
6948
6949    unsafe impl fidl::encoding::TypeMarker for BroadcastIsochronousGroupInfoReport {
6950        type Owned = Self;
6951
6952        #[inline(always)]
6953        fn inline_align(_context: fidl::encoding::Context) -> usize {
6954            8
6955        }
6956
6957        #[inline(always)]
6958        fn inline_size(_context: fidl::encoding::Context) -> usize {
6959            16
6960        }
6961    }
6962
6963    unsafe impl<D: fidl::encoding::ResourceDialect>
6964        fidl::encoding::Encode<BroadcastIsochronousGroupInfoReport, D>
6965        for &BroadcastIsochronousGroupInfoReport
6966    {
6967        unsafe fn encode(
6968            self,
6969            encoder: &mut fidl::encoding::Encoder<'_, D>,
6970            offset: usize,
6971            mut depth: fidl::encoding::Depth,
6972        ) -> fidl::Result<()> {
6973            encoder.debug_check_bounds::<BroadcastIsochronousGroupInfoReport>(offset);
6974            // Vector header
6975            let max_ordinal: u64 = self.max_ordinal_present();
6976            encoder.write_num(max_ordinal, offset);
6977            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6978            // Calling encoder.out_of_line_offset(0) is not allowed.
6979            if max_ordinal == 0 {
6980                return Ok(());
6981            }
6982            depth.increment()?;
6983            let envelope_size = 8;
6984            let bytes_len = max_ordinal as usize * envelope_size;
6985            #[allow(unused_variables)]
6986            let offset = encoder.out_of_line_offset(bytes_len);
6987            let mut _prev_end_offset: usize = 0;
6988            if 1 > max_ordinal {
6989                return Ok(());
6990            }
6991
6992            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6993            // are envelope_size bytes.
6994            let cur_offset: usize = (1 - 1) * envelope_size;
6995
6996            // Zero reserved fields.
6997            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6998
6999            // Safety:
7000            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7001            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7002            //   envelope_size bytes, there is always sufficient room.
7003            fidl::encoding::encode_in_envelope_optional::<BroadcastIsochronousGroupInfo, D>(
7004                self.info.as_ref().map(
7005                    <BroadcastIsochronousGroupInfo as fidl::encoding::ValueTypeMarker>::borrow,
7006                ),
7007                encoder,
7008                offset + cur_offset,
7009                depth,
7010            )?;
7011
7012            _prev_end_offset = cur_offset + envelope_size;
7013            if 2 > max_ordinal {
7014                return Ok(());
7015            }
7016
7017            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7018            // are envelope_size bytes.
7019            let cur_offset: usize = (2 - 1) * envelope_size;
7020
7021            // Zero reserved fields.
7022            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7023
7024            // Safety:
7025            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7026            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7027            //   envelope_size bytes, there is always sufficient room.
7028            fidl::encoding::encode_in_envelope_optional::<i64, D>(
7029                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7030                encoder,
7031                offset + cur_offset,
7032                depth,
7033            )?;
7034
7035            _prev_end_offset = cur_offset + envelope_size;
7036
7037            Ok(())
7038        }
7039    }
7040
7041    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7042        for BroadcastIsochronousGroupInfoReport
7043    {
7044        #[inline(always)]
7045        fn new_empty() -> Self {
7046            Self::default()
7047        }
7048
7049        unsafe fn decode(
7050            &mut self,
7051            decoder: &mut fidl::encoding::Decoder<'_, D>,
7052            offset: usize,
7053            mut depth: fidl::encoding::Depth,
7054        ) -> fidl::Result<()> {
7055            decoder.debug_check_bounds::<Self>(offset);
7056            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7057                None => return Err(fidl::Error::NotNullable),
7058                Some(len) => len,
7059            };
7060            // Calling decoder.out_of_line_offset(0) is not allowed.
7061            if len == 0 {
7062                return Ok(());
7063            };
7064            depth.increment()?;
7065            let envelope_size = 8;
7066            let bytes_len = len * envelope_size;
7067            let offset = decoder.out_of_line_offset(bytes_len)?;
7068            // Decode the envelope for each type.
7069            let mut _next_ordinal_to_read = 0;
7070            let mut next_offset = offset;
7071            let end_offset = offset + bytes_len;
7072            _next_ordinal_to_read += 1;
7073            if next_offset >= end_offset {
7074                return Ok(());
7075            }
7076
7077            // Decode unknown envelopes for gaps in ordinals.
7078            while _next_ordinal_to_read < 1 {
7079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7080                _next_ordinal_to_read += 1;
7081                next_offset += envelope_size;
7082            }
7083
7084            let next_out_of_line = decoder.next_out_of_line();
7085            let handles_before = decoder.remaining_handles();
7086            if let Some((inlined, num_bytes, num_handles)) =
7087                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7088            {
7089                let member_inline_size =
7090                    <BroadcastIsochronousGroupInfo as fidl::encoding::TypeMarker>::inline_size(
7091                        decoder.context,
7092                    );
7093                if inlined != (member_inline_size <= 4) {
7094                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7095                }
7096                let inner_offset;
7097                let mut inner_depth = depth.clone();
7098                if inlined {
7099                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7100                    inner_offset = next_offset;
7101                } else {
7102                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7103                    inner_depth.increment()?;
7104                }
7105                let val_ref = self
7106                    .info
7107                    .get_or_insert_with(|| fidl::new_empty!(BroadcastIsochronousGroupInfo, D));
7108                fidl::decode!(
7109                    BroadcastIsochronousGroupInfo,
7110                    D,
7111                    val_ref,
7112                    decoder,
7113                    inner_offset,
7114                    inner_depth
7115                )?;
7116                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7117                {
7118                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7119                }
7120                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7121                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7122                }
7123            }
7124
7125            next_offset += envelope_size;
7126            _next_ordinal_to_read += 1;
7127            if next_offset >= end_offset {
7128                return Ok(());
7129            }
7130
7131            // Decode unknown envelopes for gaps in ordinals.
7132            while _next_ordinal_to_read < 2 {
7133                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7134                _next_ordinal_to_read += 1;
7135                next_offset += envelope_size;
7136            }
7137
7138            let next_out_of_line = decoder.next_out_of_line();
7139            let handles_before = decoder.remaining_handles();
7140            if let Some((inlined, num_bytes, num_handles)) =
7141                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7142            {
7143                let member_inline_size =
7144                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7145                if inlined != (member_inline_size <= 4) {
7146                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7147                }
7148                let inner_offset;
7149                let mut inner_depth = depth.clone();
7150                if inlined {
7151                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7152                    inner_offset = next_offset;
7153                } else {
7154                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7155                    inner_depth.increment()?;
7156                }
7157                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
7158                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7159                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7160                {
7161                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7162                }
7163                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7164                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7165                }
7166            }
7167
7168            next_offset += envelope_size;
7169
7170            // Decode the remaining unknown envelopes.
7171            while next_offset < end_offset {
7172                _next_ordinal_to_read += 1;
7173                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7174                next_offset += envelope_size;
7175            }
7176
7177            Ok(())
7178        }
7179    }
7180
7181    impl CentralCreateConnectedIsochronousGroupResponse {
7182        #[inline(always)]
7183        fn max_ordinal_present(&self) -> u64 {
7184            if let Some(_) = self.cig_id {
7185                return 1;
7186            }
7187            0
7188        }
7189    }
7190
7191    impl fidl::encoding::ValueTypeMarker for CentralCreateConnectedIsochronousGroupResponse {
7192        type Borrowed<'a> = &'a Self;
7193        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7194            value
7195        }
7196    }
7197
7198    unsafe impl fidl::encoding::TypeMarker for CentralCreateConnectedIsochronousGroupResponse {
7199        type Owned = Self;
7200
7201        #[inline(always)]
7202        fn inline_align(_context: fidl::encoding::Context) -> usize {
7203            8
7204        }
7205
7206        #[inline(always)]
7207        fn inline_size(_context: fidl::encoding::Context) -> usize {
7208            16
7209        }
7210    }
7211
7212    unsafe impl<D: fidl::encoding::ResourceDialect>
7213        fidl::encoding::Encode<CentralCreateConnectedIsochronousGroupResponse, D>
7214        for &CentralCreateConnectedIsochronousGroupResponse
7215    {
7216        unsafe fn encode(
7217            self,
7218            encoder: &mut fidl::encoding::Encoder<'_, D>,
7219            offset: usize,
7220            mut depth: fidl::encoding::Depth,
7221        ) -> fidl::Result<()> {
7222            encoder.debug_check_bounds::<CentralCreateConnectedIsochronousGroupResponse>(offset);
7223            // Vector header
7224            let max_ordinal: u64 = self.max_ordinal_present();
7225            encoder.write_num(max_ordinal, offset);
7226            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7227            // Calling encoder.out_of_line_offset(0) is not allowed.
7228            if max_ordinal == 0 {
7229                return Ok(());
7230            }
7231            depth.increment()?;
7232            let envelope_size = 8;
7233            let bytes_len = max_ordinal as usize * envelope_size;
7234            #[allow(unused_variables)]
7235            let offset = encoder.out_of_line_offset(bytes_len);
7236            let mut _prev_end_offset: usize = 0;
7237            if 1 > max_ordinal {
7238                return Ok(());
7239            }
7240
7241            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7242            // are envelope_size bytes.
7243            let cur_offset: usize = (1 - 1) * envelope_size;
7244
7245            // Zero reserved fields.
7246            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7247
7248            // Safety:
7249            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7250            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7251            //   envelope_size bytes, there is always sufficient room.
7252            fidl::encoding::encode_in_envelope_optional::<u8, D>(
7253                self.cig_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
7254                encoder,
7255                offset + cur_offset,
7256                depth,
7257            )?;
7258
7259            _prev_end_offset = cur_offset + envelope_size;
7260
7261            Ok(())
7262        }
7263    }
7264
7265    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7266        for CentralCreateConnectedIsochronousGroupResponse
7267    {
7268        #[inline(always)]
7269        fn new_empty() -> Self {
7270            Self::default()
7271        }
7272
7273        unsafe fn decode(
7274            &mut self,
7275            decoder: &mut fidl::encoding::Decoder<'_, D>,
7276            offset: usize,
7277            mut depth: fidl::encoding::Depth,
7278        ) -> fidl::Result<()> {
7279            decoder.debug_check_bounds::<Self>(offset);
7280            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7281                None => return Err(fidl::Error::NotNullable),
7282                Some(len) => len,
7283            };
7284            // Calling decoder.out_of_line_offset(0) is not allowed.
7285            if len == 0 {
7286                return Ok(());
7287            };
7288            depth.increment()?;
7289            let envelope_size = 8;
7290            let bytes_len = len * envelope_size;
7291            let offset = decoder.out_of_line_offset(bytes_len)?;
7292            // Decode the envelope for each type.
7293            let mut _next_ordinal_to_read = 0;
7294            let mut next_offset = offset;
7295            let end_offset = offset + bytes_len;
7296            _next_ordinal_to_read += 1;
7297            if next_offset >= end_offset {
7298                return Ok(());
7299            }
7300
7301            // Decode unknown envelopes for gaps in ordinals.
7302            while _next_ordinal_to_read < 1 {
7303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7304                _next_ordinal_to_read += 1;
7305                next_offset += envelope_size;
7306            }
7307
7308            let next_out_of_line = decoder.next_out_of_line();
7309            let handles_before = decoder.remaining_handles();
7310            if let Some((inlined, num_bytes, num_handles)) =
7311                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7312            {
7313                let member_inline_size =
7314                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7315                if inlined != (member_inline_size <= 4) {
7316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7317                }
7318                let inner_offset;
7319                let mut inner_depth = depth.clone();
7320                if inlined {
7321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7322                    inner_offset = next_offset;
7323                } else {
7324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7325                    inner_depth.increment()?;
7326                }
7327                let val_ref = self.cig_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
7328                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7330                {
7331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7332                }
7333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7335                }
7336            }
7337
7338            next_offset += envelope_size;
7339
7340            // Decode the remaining unknown envelopes.
7341            while next_offset < end_offset {
7342                _next_ordinal_to_read += 1;
7343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7344                next_offset += envelope_size;
7345            }
7346
7347            Ok(())
7348        }
7349    }
7350
7351    impl ChannelListenerRegistryListenL2capResponse {
7352        #[inline(always)]
7353        fn max_ordinal_present(&self) -> u64 {
7354            if let Some(_) = self.psm {
7355                return 1;
7356            }
7357            0
7358        }
7359    }
7360
7361    impl fidl::encoding::ValueTypeMarker for ChannelListenerRegistryListenL2capResponse {
7362        type Borrowed<'a> = &'a Self;
7363        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7364            value
7365        }
7366    }
7367
7368    unsafe impl fidl::encoding::TypeMarker for ChannelListenerRegistryListenL2capResponse {
7369        type Owned = Self;
7370
7371        #[inline(always)]
7372        fn inline_align(_context: fidl::encoding::Context) -> usize {
7373            8
7374        }
7375
7376        #[inline(always)]
7377        fn inline_size(_context: fidl::encoding::Context) -> usize {
7378            16
7379        }
7380    }
7381
7382    unsafe impl<D: fidl::encoding::ResourceDialect>
7383        fidl::encoding::Encode<ChannelListenerRegistryListenL2capResponse, D>
7384        for &ChannelListenerRegistryListenL2capResponse
7385    {
7386        unsafe fn encode(
7387            self,
7388            encoder: &mut fidl::encoding::Encoder<'_, D>,
7389            offset: usize,
7390            mut depth: fidl::encoding::Depth,
7391        ) -> fidl::Result<()> {
7392            encoder.debug_check_bounds::<ChannelListenerRegistryListenL2capResponse>(offset);
7393            // Vector header
7394            let max_ordinal: u64 = self.max_ordinal_present();
7395            encoder.write_num(max_ordinal, offset);
7396            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7397            // Calling encoder.out_of_line_offset(0) is not allowed.
7398            if max_ordinal == 0 {
7399                return Ok(());
7400            }
7401            depth.increment()?;
7402            let envelope_size = 8;
7403            let bytes_len = max_ordinal as usize * envelope_size;
7404            #[allow(unused_variables)]
7405            let offset = encoder.out_of_line_offset(bytes_len);
7406            let mut _prev_end_offset: usize = 0;
7407            if 1 > max_ordinal {
7408                return Ok(());
7409            }
7410
7411            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7412            // are envelope_size bytes.
7413            let cur_offset: usize = (1 - 1) * envelope_size;
7414
7415            // Zero reserved fields.
7416            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7417
7418            // Safety:
7419            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7420            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7421            //   envelope_size bytes, there is always sufficient room.
7422            fidl::encoding::encode_in_envelope_optional::<u16, D>(
7423                self.psm.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
7424                encoder,
7425                offset + cur_offset,
7426                depth,
7427            )?;
7428
7429            _prev_end_offset = cur_offset + envelope_size;
7430
7431            Ok(())
7432        }
7433    }
7434
7435    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7436        for ChannelListenerRegistryListenL2capResponse
7437    {
7438        #[inline(always)]
7439        fn new_empty() -> Self {
7440            Self::default()
7441        }
7442
7443        unsafe fn decode(
7444            &mut self,
7445            decoder: &mut fidl::encoding::Decoder<'_, D>,
7446            offset: usize,
7447            mut depth: fidl::encoding::Depth,
7448        ) -> fidl::Result<()> {
7449            decoder.debug_check_bounds::<Self>(offset);
7450            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7451                None => return Err(fidl::Error::NotNullable),
7452                Some(len) => len,
7453            };
7454            // Calling decoder.out_of_line_offset(0) is not allowed.
7455            if len == 0 {
7456                return Ok(());
7457            };
7458            depth.increment()?;
7459            let envelope_size = 8;
7460            let bytes_len = len * envelope_size;
7461            let offset = decoder.out_of_line_offset(bytes_len)?;
7462            // Decode the envelope for each type.
7463            let mut _next_ordinal_to_read = 0;
7464            let mut next_offset = offset;
7465            let end_offset = offset + bytes_len;
7466            _next_ordinal_to_read += 1;
7467            if next_offset >= end_offset {
7468                return Ok(());
7469            }
7470
7471            // Decode unknown envelopes for gaps in ordinals.
7472            while _next_ordinal_to_read < 1 {
7473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7474                _next_ordinal_to_read += 1;
7475                next_offset += envelope_size;
7476            }
7477
7478            let next_out_of_line = decoder.next_out_of_line();
7479            let handles_before = decoder.remaining_handles();
7480            if let Some((inlined, num_bytes, num_handles)) =
7481                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7482            {
7483                let member_inline_size =
7484                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7485                if inlined != (member_inline_size <= 4) {
7486                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7487                }
7488                let inner_offset;
7489                let mut inner_depth = depth.clone();
7490                if inlined {
7491                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7492                    inner_offset = next_offset;
7493                } else {
7494                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7495                    inner_depth.increment()?;
7496                }
7497                let val_ref = self.psm.get_or_insert_with(|| fidl::new_empty!(u16, D));
7498                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
7499                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7500                {
7501                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7502                }
7503                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7504                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7505                }
7506            }
7507
7508            next_offset += envelope_size;
7509
7510            // Decode the remaining unknown envelopes.
7511            while next_offset < end_offset {
7512                _next_ordinal_to_read += 1;
7513                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7514                next_offset += envelope_size;
7515            }
7516
7517            Ok(())
7518        }
7519    }
7520
7521    impl ChannelOffloadExtStartOffloadRequest {
7522        #[inline(always)]
7523        fn max_ordinal_present(&self) -> u64 {
7524            0
7525        }
7526    }
7527
7528    impl fidl::encoding::ValueTypeMarker for ChannelOffloadExtStartOffloadRequest {
7529        type Borrowed<'a> = &'a Self;
7530        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7531            value
7532        }
7533    }
7534
7535    unsafe impl fidl::encoding::TypeMarker for ChannelOffloadExtStartOffloadRequest {
7536        type Owned = Self;
7537
7538        #[inline(always)]
7539        fn inline_align(_context: fidl::encoding::Context) -> usize {
7540            8
7541        }
7542
7543        #[inline(always)]
7544        fn inline_size(_context: fidl::encoding::Context) -> usize {
7545            16
7546        }
7547    }
7548
7549    unsafe impl<D: fidl::encoding::ResourceDialect>
7550        fidl::encoding::Encode<ChannelOffloadExtStartOffloadRequest, D>
7551        for &ChannelOffloadExtStartOffloadRequest
7552    {
7553        unsafe fn encode(
7554            self,
7555            encoder: &mut fidl::encoding::Encoder<'_, D>,
7556            offset: usize,
7557            mut depth: fidl::encoding::Depth,
7558        ) -> fidl::Result<()> {
7559            encoder.debug_check_bounds::<ChannelOffloadExtStartOffloadRequest>(offset);
7560            // Vector header
7561            let max_ordinal: u64 = self.max_ordinal_present();
7562            encoder.write_num(max_ordinal, offset);
7563            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7564            // Calling encoder.out_of_line_offset(0) is not allowed.
7565            if max_ordinal == 0 {
7566                return Ok(());
7567            }
7568            depth.increment()?;
7569            let envelope_size = 8;
7570            let bytes_len = max_ordinal as usize * envelope_size;
7571            #[allow(unused_variables)]
7572            let offset = encoder.out_of_line_offset(bytes_len);
7573            let mut _prev_end_offset: usize = 0;
7574
7575            Ok(())
7576        }
7577    }
7578
7579    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7580        for ChannelOffloadExtStartOffloadRequest
7581    {
7582        #[inline(always)]
7583        fn new_empty() -> Self {
7584            Self::default()
7585        }
7586
7587        unsafe fn decode(
7588            &mut self,
7589            decoder: &mut fidl::encoding::Decoder<'_, D>,
7590            offset: usize,
7591            mut depth: fidl::encoding::Depth,
7592        ) -> fidl::Result<()> {
7593            decoder.debug_check_bounds::<Self>(offset);
7594            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7595                None => return Err(fidl::Error::NotNullable),
7596                Some(len) => len,
7597            };
7598            // Calling decoder.out_of_line_offset(0) is not allowed.
7599            if len == 0 {
7600                return Ok(());
7601            };
7602            depth.increment()?;
7603            let envelope_size = 8;
7604            let bytes_len = len * envelope_size;
7605            let offset = decoder.out_of_line_offset(bytes_len)?;
7606            // Decode the envelope for each type.
7607            let mut _next_ordinal_to_read = 0;
7608            let mut next_offset = offset;
7609            let end_offset = offset + bytes_len;
7610
7611            // Decode the remaining unknown envelopes.
7612            while next_offset < end_offset {
7613                _next_ordinal_to_read += 1;
7614                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7615                next_offset += envelope_size;
7616            }
7617
7618            Ok(())
7619        }
7620    }
7621
7622    impl ChannelOffloadExtStartOffloadResponse {
7623        #[inline(always)]
7624        fn max_ordinal_present(&self) -> u64 {
7625            if let Some(_) = self.offload_parameters {
7626                return 1;
7627            }
7628            0
7629        }
7630    }
7631
7632    impl fidl::encoding::ValueTypeMarker for ChannelOffloadExtStartOffloadResponse {
7633        type Borrowed<'a> = &'a Self;
7634        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7635            value
7636        }
7637    }
7638
7639    unsafe impl fidl::encoding::TypeMarker for ChannelOffloadExtStartOffloadResponse {
7640        type Owned = Self;
7641
7642        #[inline(always)]
7643        fn inline_align(_context: fidl::encoding::Context) -> usize {
7644            8
7645        }
7646
7647        #[inline(always)]
7648        fn inline_size(_context: fidl::encoding::Context) -> usize {
7649            16
7650        }
7651    }
7652
7653    unsafe impl<D: fidl::encoding::ResourceDialect>
7654        fidl::encoding::Encode<ChannelOffloadExtStartOffloadResponse, D>
7655        for &ChannelOffloadExtStartOffloadResponse
7656    {
7657        unsafe fn encode(
7658            self,
7659            encoder: &mut fidl::encoding::Encoder<'_, D>,
7660            offset: usize,
7661            mut depth: fidl::encoding::Depth,
7662        ) -> fidl::Result<()> {
7663            encoder.debug_check_bounds::<ChannelOffloadExtStartOffloadResponse>(offset);
7664            // Vector header
7665            let max_ordinal: u64 = self.max_ordinal_present();
7666            encoder.write_num(max_ordinal, offset);
7667            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7668            // Calling encoder.out_of_line_offset(0) is not allowed.
7669            if max_ordinal == 0 {
7670                return Ok(());
7671            }
7672            depth.increment()?;
7673            let envelope_size = 8;
7674            let bytes_len = max_ordinal as usize * envelope_size;
7675            #[allow(unused_variables)]
7676            let offset = encoder.out_of_line_offset(bytes_len);
7677            let mut _prev_end_offset: usize = 0;
7678            if 1 > max_ordinal {
7679                return Ok(());
7680            }
7681
7682            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7683            // are envelope_size bytes.
7684            let cur_offset: usize = (1 - 1) * envelope_size;
7685
7686            // Zero reserved fields.
7687            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7688
7689            // Safety:
7690            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7691            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7692            //   envelope_size bytes, there is always sufficient room.
7693            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::L2capChannelOffloadParameters, D>(
7694            self.offload_parameters.as_ref().map(<fidl_fuchsia_bluetooth__common::L2capChannelOffloadParameters as fidl::encoding::ValueTypeMarker>::borrow),
7695            encoder, offset + cur_offset, depth
7696        )?;
7697
7698            _prev_end_offset = cur_offset + envelope_size;
7699
7700            Ok(())
7701        }
7702    }
7703
7704    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
7705        for ChannelOffloadExtStartOffloadResponse
7706    {
7707        #[inline(always)]
7708        fn new_empty() -> Self {
7709            Self::default()
7710        }
7711
7712        unsafe fn decode(
7713            &mut self,
7714            decoder: &mut fidl::encoding::Decoder<'_, D>,
7715            offset: usize,
7716            mut depth: fidl::encoding::Depth,
7717        ) -> fidl::Result<()> {
7718            decoder.debug_check_bounds::<Self>(offset);
7719            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7720                None => return Err(fidl::Error::NotNullable),
7721                Some(len) => len,
7722            };
7723            // Calling decoder.out_of_line_offset(0) is not allowed.
7724            if len == 0 {
7725                return Ok(());
7726            };
7727            depth.increment()?;
7728            let envelope_size = 8;
7729            let bytes_len = len * envelope_size;
7730            let offset = decoder.out_of_line_offset(bytes_len)?;
7731            // Decode the envelope for each type.
7732            let mut _next_ordinal_to_read = 0;
7733            let mut next_offset = offset;
7734            let end_offset = offset + bytes_len;
7735            _next_ordinal_to_read += 1;
7736            if next_offset >= end_offset {
7737                return Ok(());
7738            }
7739
7740            // Decode unknown envelopes for gaps in ordinals.
7741            while _next_ordinal_to_read < 1 {
7742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7743                _next_ordinal_to_read += 1;
7744                next_offset += envelope_size;
7745            }
7746
7747            let next_out_of_line = decoder.next_out_of_line();
7748            let handles_before = decoder.remaining_handles();
7749            if let Some((inlined, num_bytes, num_handles)) =
7750                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7751            {
7752                let member_inline_size = <fidl_fuchsia_bluetooth__common::L2capChannelOffloadParameters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7753                if inlined != (member_inline_size <= 4) {
7754                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7755                }
7756                let inner_offset;
7757                let mut inner_depth = depth.clone();
7758                if inlined {
7759                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7760                    inner_offset = next_offset;
7761                } else {
7762                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7763                    inner_depth.increment()?;
7764                }
7765                let val_ref = self.offload_parameters.get_or_insert_with(|| {
7766                    fidl::new_empty!(
7767                        fidl_fuchsia_bluetooth__common::L2capChannelOffloadParameters,
7768                        D
7769                    )
7770                });
7771                fidl::decode!(
7772                    fidl_fuchsia_bluetooth__common::L2capChannelOffloadParameters,
7773                    D,
7774                    val_ref,
7775                    decoder,
7776                    inner_offset,
7777                    inner_depth
7778                )?;
7779                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7780                {
7781                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7782                }
7783                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7784                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7785                }
7786            }
7787
7788            next_offset += envelope_size;
7789
7790            // Decode the remaining unknown envelopes.
7791            while next_offset < end_offset {
7792                _next_ordinal_to_read += 1;
7793                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7794                next_offset += envelope_size;
7795            }
7796
7797            Ok(())
7798        }
7799    }
7800
7801    impl CigParameters {
7802        #[inline(always)]
7803        fn max_ordinal_present(&self) -> u64 {
7804            if let Some(_) = self.max_transport_latency_p_to_c {
7805                return 6;
7806            }
7807            if let Some(_) = self.max_transport_latency_c_to_p {
7808                return 5;
7809            }
7810            if let Some(_) = self.framing {
7811                return 4;
7812            }
7813            if let Some(_) = self.packing {
7814                return 3;
7815            }
7816            if let Some(_) = self.sdu_interval_p_to_c {
7817                return 2;
7818            }
7819            if let Some(_) = self.sdu_interval_c_to_p {
7820                return 1;
7821            }
7822            0
7823        }
7824    }
7825
7826    impl fidl::encoding::ValueTypeMarker for CigParameters {
7827        type Borrowed<'a> = &'a Self;
7828        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7829            value
7830        }
7831    }
7832
7833    unsafe impl fidl::encoding::TypeMarker for CigParameters {
7834        type Owned = Self;
7835
7836        #[inline(always)]
7837        fn inline_align(_context: fidl::encoding::Context) -> usize {
7838            8
7839        }
7840
7841        #[inline(always)]
7842        fn inline_size(_context: fidl::encoding::Context) -> usize {
7843            16
7844        }
7845    }
7846
7847    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CigParameters, D>
7848        for &CigParameters
7849    {
7850        unsafe fn encode(
7851            self,
7852            encoder: &mut fidl::encoding::Encoder<'_, D>,
7853            offset: usize,
7854            mut depth: fidl::encoding::Depth,
7855        ) -> fidl::Result<()> {
7856            encoder.debug_check_bounds::<CigParameters>(offset);
7857            // Vector header
7858            let max_ordinal: u64 = self.max_ordinal_present();
7859            encoder.write_num(max_ordinal, offset);
7860            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7861            // Calling encoder.out_of_line_offset(0) is not allowed.
7862            if max_ordinal == 0 {
7863                return Ok(());
7864            }
7865            depth.increment()?;
7866            let envelope_size = 8;
7867            let bytes_len = max_ordinal as usize * envelope_size;
7868            #[allow(unused_variables)]
7869            let offset = encoder.out_of_line_offset(bytes_len);
7870            let mut _prev_end_offset: usize = 0;
7871            if 1 > max_ordinal {
7872                return Ok(());
7873            }
7874
7875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7876            // are envelope_size bytes.
7877            let cur_offset: usize = (1 - 1) * envelope_size;
7878
7879            // Zero reserved fields.
7880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7881
7882            // Safety:
7883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7885            //   envelope_size bytes, there is always sufficient room.
7886            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7887                self.sdu_interval_c_to_p
7888                    .as_ref()
7889                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7890                encoder,
7891                offset + cur_offset,
7892                depth,
7893            )?;
7894
7895            _prev_end_offset = cur_offset + envelope_size;
7896            if 2 > max_ordinal {
7897                return Ok(());
7898            }
7899
7900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7901            // are envelope_size bytes.
7902            let cur_offset: usize = (2 - 1) * envelope_size;
7903
7904            // Zero reserved fields.
7905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7906
7907            // Safety:
7908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7910            //   envelope_size bytes, there is always sufficient room.
7911            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7912                self.sdu_interval_p_to_c
7913                    .as_ref()
7914                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7915                encoder,
7916                offset + cur_offset,
7917                depth,
7918            )?;
7919
7920            _prev_end_offset = cur_offset + envelope_size;
7921            if 3 > max_ordinal {
7922                return Ok(());
7923            }
7924
7925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7926            // are envelope_size bytes.
7927            let cur_offset: usize = (3 - 1) * envelope_size;
7928
7929            // Zero reserved fields.
7930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7931
7932            // Safety:
7933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7935            //   envelope_size bytes, there is always sufficient room.
7936            fidl::encoding::encode_in_envelope_optional::<CigPacking, D>(
7937                self.packing.as_ref().map(<CigPacking as fidl::encoding::ValueTypeMarker>::borrow),
7938                encoder,
7939                offset + cur_offset,
7940                depth,
7941            )?;
7942
7943            _prev_end_offset = cur_offset + envelope_size;
7944            if 4 > max_ordinal {
7945                return Ok(());
7946            }
7947
7948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7949            // are envelope_size bytes.
7950            let cur_offset: usize = (4 - 1) * envelope_size;
7951
7952            // Zero reserved fields.
7953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7954
7955            // Safety:
7956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7958            //   envelope_size bytes, there is always sufficient room.
7959            fidl::encoding::encode_in_envelope_optional::<CigFramingOptions, D>(
7960                self.framing
7961                    .as_ref()
7962                    .map(<CigFramingOptions as fidl::encoding::ValueTypeMarker>::borrow),
7963                encoder,
7964                offset + cur_offset,
7965                depth,
7966            )?;
7967
7968            _prev_end_offset = cur_offset + envelope_size;
7969            if 5 > max_ordinal {
7970                return Ok(());
7971            }
7972
7973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7974            // are envelope_size bytes.
7975            let cur_offset: usize = (5 - 1) * envelope_size;
7976
7977            // Zero reserved fields.
7978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7979
7980            // Safety:
7981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7983            //   envelope_size bytes, there is always sufficient room.
7984            fidl::encoding::encode_in_envelope_optional::<u16, D>(
7985                self.max_transport_latency_c_to_p
7986                    .as_ref()
7987                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
7988                encoder,
7989                offset + cur_offset,
7990                depth,
7991            )?;
7992
7993            _prev_end_offset = cur_offset + envelope_size;
7994            if 6 > max_ordinal {
7995                return Ok(());
7996            }
7997
7998            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7999            // are envelope_size bytes.
8000            let cur_offset: usize = (6 - 1) * envelope_size;
8001
8002            // Zero reserved fields.
8003            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8004
8005            // Safety:
8006            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8007            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8008            //   envelope_size bytes, there is always sufficient room.
8009            fidl::encoding::encode_in_envelope_optional::<u16, D>(
8010                self.max_transport_latency_p_to_c
8011                    .as_ref()
8012                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
8013                encoder,
8014                offset + cur_offset,
8015                depth,
8016            )?;
8017
8018            _prev_end_offset = cur_offset + envelope_size;
8019
8020            Ok(())
8021        }
8022    }
8023
8024    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CigParameters {
8025        #[inline(always)]
8026        fn new_empty() -> Self {
8027            Self::default()
8028        }
8029
8030        unsafe fn decode(
8031            &mut self,
8032            decoder: &mut fidl::encoding::Decoder<'_, D>,
8033            offset: usize,
8034            mut depth: fidl::encoding::Depth,
8035        ) -> fidl::Result<()> {
8036            decoder.debug_check_bounds::<Self>(offset);
8037            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8038                None => return Err(fidl::Error::NotNullable),
8039                Some(len) => len,
8040            };
8041            // Calling decoder.out_of_line_offset(0) is not allowed.
8042            if len == 0 {
8043                return Ok(());
8044            };
8045            depth.increment()?;
8046            let envelope_size = 8;
8047            let bytes_len = len * envelope_size;
8048            let offset = decoder.out_of_line_offset(bytes_len)?;
8049            // Decode the envelope for each type.
8050            let mut _next_ordinal_to_read = 0;
8051            let mut next_offset = offset;
8052            let end_offset = offset + bytes_len;
8053            _next_ordinal_to_read += 1;
8054            if next_offset >= end_offset {
8055                return Ok(());
8056            }
8057
8058            // Decode unknown envelopes for gaps in ordinals.
8059            while _next_ordinal_to_read < 1 {
8060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8061                _next_ordinal_to_read += 1;
8062                next_offset += envelope_size;
8063            }
8064
8065            let next_out_of_line = decoder.next_out_of_line();
8066            let handles_before = decoder.remaining_handles();
8067            if let Some((inlined, num_bytes, num_handles)) =
8068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8069            {
8070                let member_inline_size =
8071                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8072                if inlined != (member_inline_size <= 4) {
8073                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8074                }
8075                let inner_offset;
8076                let mut inner_depth = depth.clone();
8077                if inlined {
8078                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8079                    inner_offset = next_offset;
8080                } else {
8081                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8082                    inner_depth.increment()?;
8083                }
8084                let val_ref =
8085                    self.sdu_interval_c_to_p.get_or_insert_with(|| fidl::new_empty!(u32, D));
8086                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8087                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8088                {
8089                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8090                }
8091                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8092                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8093                }
8094            }
8095
8096            next_offset += envelope_size;
8097            _next_ordinal_to_read += 1;
8098            if next_offset >= end_offset {
8099                return Ok(());
8100            }
8101
8102            // Decode unknown envelopes for gaps in ordinals.
8103            while _next_ordinal_to_read < 2 {
8104                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8105                _next_ordinal_to_read += 1;
8106                next_offset += envelope_size;
8107            }
8108
8109            let next_out_of_line = decoder.next_out_of_line();
8110            let handles_before = decoder.remaining_handles();
8111            if let Some((inlined, num_bytes, num_handles)) =
8112                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8113            {
8114                let member_inline_size =
8115                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8116                if inlined != (member_inline_size <= 4) {
8117                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8118                }
8119                let inner_offset;
8120                let mut inner_depth = depth.clone();
8121                if inlined {
8122                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8123                    inner_offset = next_offset;
8124                } else {
8125                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8126                    inner_depth.increment()?;
8127                }
8128                let val_ref =
8129                    self.sdu_interval_p_to_c.get_or_insert_with(|| fidl::new_empty!(u32, D));
8130                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8131                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8132                {
8133                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8134                }
8135                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8136                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8137                }
8138            }
8139
8140            next_offset += envelope_size;
8141            _next_ordinal_to_read += 1;
8142            if next_offset >= end_offset {
8143                return Ok(());
8144            }
8145
8146            // Decode unknown envelopes for gaps in ordinals.
8147            while _next_ordinal_to_read < 3 {
8148                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8149                _next_ordinal_to_read += 1;
8150                next_offset += envelope_size;
8151            }
8152
8153            let next_out_of_line = decoder.next_out_of_line();
8154            let handles_before = decoder.remaining_handles();
8155            if let Some((inlined, num_bytes, num_handles)) =
8156                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8157            {
8158                let member_inline_size =
8159                    <CigPacking as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8160                if inlined != (member_inline_size <= 4) {
8161                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8162                }
8163                let inner_offset;
8164                let mut inner_depth = depth.clone();
8165                if inlined {
8166                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8167                    inner_offset = next_offset;
8168                } else {
8169                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8170                    inner_depth.increment()?;
8171                }
8172                let val_ref = self.packing.get_or_insert_with(|| fidl::new_empty!(CigPacking, D));
8173                fidl::decode!(CigPacking, D, val_ref, decoder, inner_offset, inner_depth)?;
8174                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8175                {
8176                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8177                }
8178                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8179                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8180                }
8181            }
8182
8183            next_offset += envelope_size;
8184            _next_ordinal_to_read += 1;
8185            if next_offset >= end_offset {
8186                return Ok(());
8187            }
8188
8189            // Decode unknown envelopes for gaps in ordinals.
8190            while _next_ordinal_to_read < 4 {
8191                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8192                _next_ordinal_to_read += 1;
8193                next_offset += envelope_size;
8194            }
8195
8196            let next_out_of_line = decoder.next_out_of_line();
8197            let handles_before = decoder.remaining_handles();
8198            if let Some((inlined, num_bytes, num_handles)) =
8199                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8200            {
8201                let member_inline_size =
8202                    <CigFramingOptions as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8203                if inlined != (member_inline_size <= 4) {
8204                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8205                }
8206                let inner_offset;
8207                let mut inner_depth = depth.clone();
8208                if inlined {
8209                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8210                    inner_offset = next_offset;
8211                } else {
8212                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8213                    inner_depth.increment()?;
8214                }
8215                let val_ref =
8216                    self.framing.get_or_insert_with(|| fidl::new_empty!(CigFramingOptions, D));
8217                fidl::decode!(CigFramingOptions, D, val_ref, decoder, inner_offset, inner_depth)?;
8218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8219                {
8220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8221                }
8222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8224                }
8225            }
8226
8227            next_offset += envelope_size;
8228            _next_ordinal_to_read += 1;
8229            if next_offset >= end_offset {
8230                return Ok(());
8231            }
8232
8233            // Decode unknown envelopes for gaps in ordinals.
8234            while _next_ordinal_to_read < 5 {
8235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8236                _next_ordinal_to_read += 1;
8237                next_offset += envelope_size;
8238            }
8239
8240            let next_out_of_line = decoder.next_out_of_line();
8241            let handles_before = decoder.remaining_handles();
8242            if let Some((inlined, num_bytes, num_handles)) =
8243                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8244            {
8245                let member_inline_size =
8246                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8247                if inlined != (member_inline_size <= 4) {
8248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8249                }
8250                let inner_offset;
8251                let mut inner_depth = depth.clone();
8252                if inlined {
8253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8254                    inner_offset = next_offset;
8255                } else {
8256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8257                    inner_depth.increment()?;
8258                }
8259                let val_ref = self
8260                    .max_transport_latency_c_to_p
8261                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
8262                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
8263                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8264                {
8265                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8266                }
8267                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8268                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8269                }
8270            }
8271
8272            next_offset += envelope_size;
8273            _next_ordinal_to_read += 1;
8274            if next_offset >= end_offset {
8275                return Ok(());
8276            }
8277
8278            // Decode unknown envelopes for gaps in ordinals.
8279            while _next_ordinal_to_read < 6 {
8280                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8281                _next_ordinal_to_read += 1;
8282                next_offset += envelope_size;
8283            }
8284
8285            let next_out_of_line = decoder.next_out_of_line();
8286            let handles_before = decoder.remaining_handles();
8287            if let Some((inlined, num_bytes, num_handles)) =
8288                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8289            {
8290                let member_inline_size =
8291                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8292                if inlined != (member_inline_size <= 4) {
8293                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8294                }
8295                let inner_offset;
8296                let mut inner_depth = depth.clone();
8297                if inlined {
8298                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8299                    inner_offset = next_offset;
8300                } else {
8301                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8302                    inner_depth.increment()?;
8303                }
8304                let val_ref = self
8305                    .max_transport_latency_p_to_c
8306                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
8307                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
8308                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8309                {
8310                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8311                }
8312                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8313                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8314                }
8315            }
8316
8317            next_offset += envelope_size;
8318
8319            // Decode the remaining unknown envelopes.
8320            while next_offset < end_offset {
8321                _next_ordinal_to_read += 1;
8322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8323                next_offset += envelope_size;
8324            }
8325
8326            Ok(())
8327        }
8328    }
8329
8330    impl CisEstablishedParameters {
8331        #[inline(always)]
8332        fn max_ordinal_present(&self) -> u64 {
8333            if let Some(_) = self.peripheral_to_central_params {
8334                return 6;
8335            }
8336            if let Some(_) = self.central_to_peripheral_params {
8337                return 5;
8338            }
8339            if let Some(_) = self.iso_interval {
8340                return 4;
8341            }
8342            if let Some(_) = self.max_subevents {
8343                return 3;
8344            }
8345            if let Some(_) = self.cis_sync_delay {
8346                return 2;
8347            }
8348            if let Some(_) = self.cig_sync_delay {
8349                return 1;
8350            }
8351            0
8352        }
8353    }
8354
8355    impl fidl::encoding::ValueTypeMarker for CisEstablishedParameters {
8356        type Borrowed<'a> = &'a Self;
8357        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8358            value
8359        }
8360    }
8361
8362    unsafe impl fidl::encoding::TypeMarker for CisEstablishedParameters {
8363        type Owned = Self;
8364
8365        #[inline(always)]
8366        fn inline_align(_context: fidl::encoding::Context) -> usize {
8367            8
8368        }
8369
8370        #[inline(always)]
8371        fn inline_size(_context: fidl::encoding::Context) -> usize {
8372            16
8373        }
8374    }
8375
8376    unsafe impl<D: fidl::encoding::ResourceDialect>
8377        fidl::encoding::Encode<CisEstablishedParameters, D> for &CisEstablishedParameters
8378    {
8379        unsafe fn encode(
8380            self,
8381            encoder: &mut fidl::encoding::Encoder<'_, D>,
8382            offset: usize,
8383            mut depth: fidl::encoding::Depth,
8384        ) -> fidl::Result<()> {
8385            encoder.debug_check_bounds::<CisEstablishedParameters>(offset);
8386            // Vector header
8387            let max_ordinal: u64 = self.max_ordinal_present();
8388            encoder.write_num(max_ordinal, offset);
8389            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8390            // Calling encoder.out_of_line_offset(0) is not allowed.
8391            if max_ordinal == 0 {
8392                return Ok(());
8393            }
8394            depth.increment()?;
8395            let envelope_size = 8;
8396            let bytes_len = max_ordinal as usize * envelope_size;
8397            #[allow(unused_variables)]
8398            let offset = encoder.out_of_line_offset(bytes_len);
8399            let mut _prev_end_offset: usize = 0;
8400            if 1 > max_ordinal {
8401                return Ok(());
8402            }
8403
8404            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8405            // are envelope_size bytes.
8406            let cur_offset: usize = (1 - 1) * envelope_size;
8407
8408            // Zero reserved fields.
8409            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8410
8411            // Safety:
8412            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8413            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8414            //   envelope_size bytes, there is always sufficient room.
8415            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8416                self.cig_sync_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8417                encoder,
8418                offset + cur_offset,
8419                depth,
8420            )?;
8421
8422            _prev_end_offset = cur_offset + envelope_size;
8423            if 2 > max_ordinal {
8424                return Ok(());
8425            }
8426
8427            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8428            // are envelope_size bytes.
8429            let cur_offset: usize = (2 - 1) * envelope_size;
8430
8431            // Zero reserved fields.
8432            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8433
8434            // Safety:
8435            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8436            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8437            //   envelope_size bytes, there is always sufficient room.
8438            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8439                self.cis_sync_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8440                encoder,
8441                offset + cur_offset,
8442                depth,
8443            )?;
8444
8445            _prev_end_offset = cur_offset + envelope_size;
8446            if 3 > max_ordinal {
8447                return Ok(());
8448            }
8449
8450            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8451            // are envelope_size bytes.
8452            let cur_offset: usize = (3 - 1) * envelope_size;
8453
8454            // Zero reserved fields.
8455            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8456
8457            // Safety:
8458            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8459            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8460            //   envelope_size bytes, there is always sufficient room.
8461            fidl::encoding::encode_in_envelope_optional::<u8, D>(
8462                self.max_subevents.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
8463                encoder,
8464                offset + cur_offset,
8465                depth,
8466            )?;
8467
8468            _prev_end_offset = cur_offset + envelope_size;
8469            if 4 > max_ordinal {
8470                return Ok(());
8471            }
8472
8473            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8474            // are envelope_size bytes.
8475            let cur_offset: usize = (4 - 1) * envelope_size;
8476
8477            // Zero reserved fields.
8478            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8479
8480            // Safety:
8481            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8482            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8483            //   envelope_size bytes, there is always sufficient room.
8484            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8485                self.iso_interval.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8486                encoder,
8487                offset + cur_offset,
8488                depth,
8489            )?;
8490
8491            _prev_end_offset = cur_offset + envelope_size;
8492            if 5 > max_ordinal {
8493                return Ok(());
8494            }
8495
8496            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8497            // are envelope_size bytes.
8498            let cur_offset: usize = (5 - 1) * envelope_size;
8499
8500            // Zero reserved fields.
8501            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8502
8503            // Safety:
8504            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8505            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8506            //   envelope_size bytes, there is always sufficient room.
8507            fidl::encoding::encode_in_envelope_optional::<CisUnidirectionalParams, D>(
8508                self.central_to_peripheral_params
8509                    .as_ref()
8510                    .map(<CisUnidirectionalParams as fidl::encoding::ValueTypeMarker>::borrow),
8511                encoder,
8512                offset + cur_offset,
8513                depth,
8514            )?;
8515
8516            _prev_end_offset = cur_offset + envelope_size;
8517            if 6 > max_ordinal {
8518                return Ok(());
8519            }
8520
8521            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8522            // are envelope_size bytes.
8523            let cur_offset: usize = (6 - 1) * envelope_size;
8524
8525            // Zero reserved fields.
8526            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8527
8528            // Safety:
8529            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8530            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8531            //   envelope_size bytes, there is always sufficient room.
8532            fidl::encoding::encode_in_envelope_optional::<CisUnidirectionalParams, D>(
8533                self.peripheral_to_central_params
8534                    .as_ref()
8535                    .map(<CisUnidirectionalParams as fidl::encoding::ValueTypeMarker>::borrow),
8536                encoder,
8537                offset + cur_offset,
8538                depth,
8539            )?;
8540
8541            _prev_end_offset = cur_offset + envelope_size;
8542
8543            Ok(())
8544        }
8545    }
8546
8547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8548        for CisEstablishedParameters
8549    {
8550        #[inline(always)]
8551        fn new_empty() -> Self {
8552            Self::default()
8553        }
8554
8555        unsafe fn decode(
8556            &mut self,
8557            decoder: &mut fidl::encoding::Decoder<'_, D>,
8558            offset: usize,
8559            mut depth: fidl::encoding::Depth,
8560        ) -> fidl::Result<()> {
8561            decoder.debug_check_bounds::<Self>(offset);
8562            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8563                None => return Err(fidl::Error::NotNullable),
8564                Some(len) => len,
8565            };
8566            // Calling decoder.out_of_line_offset(0) is not allowed.
8567            if len == 0 {
8568                return Ok(());
8569            };
8570            depth.increment()?;
8571            let envelope_size = 8;
8572            let bytes_len = len * envelope_size;
8573            let offset = decoder.out_of_line_offset(bytes_len)?;
8574            // Decode the envelope for each type.
8575            let mut _next_ordinal_to_read = 0;
8576            let mut next_offset = offset;
8577            let end_offset = offset + bytes_len;
8578            _next_ordinal_to_read += 1;
8579            if next_offset >= end_offset {
8580                return Ok(());
8581            }
8582
8583            // Decode unknown envelopes for gaps in ordinals.
8584            while _next_ordinal_to_read < 1 {
8585                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8586                _next_ordinal_to_read += 1;
8587                next_offset += envelope_size;
8588            }
8589
8590            let next_out_of_line = decoder.next_out_of_line();
8591            let handles_before = decoder.remaining_handles();
8592            if let Some((inlined, num_bytes, num_handles)) =
8593                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8594            {
8595                let member_inline_size =
8596                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8597                if inlined != (member_inline_size <= 4) {
8598                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8599                }
8600                let inner_offset;
8601                let mut inner_depth = depth.clone();
8602                if inlined {
8603                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8604                    inner_offset = next_offset;
8605                } else {
8606                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8607                    inner_depth.increment()?;
8608                }
8609                let val_ref = self.cig_sync_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8610                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8611                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8612                {
8613                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8614                }
8615                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8616                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8617                }
8618            }
8619
8620            next_offset += envelope_size;
8621            _next_ordinal_to_read += 1;
8622            if next_offset >= end_offset {
8623                return Ok(());
8624            }
8625
8626            // Decode unknown envelopes for gaps in ordinals.
8627            while _next_ordinal_to_read < 2 {
8628                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8629                _next_ordinal_to_read += 1;
8630                next_offset += envelope_size;
8631            }
8632
8633            let next_out_of_line = decoder.next_out_of_line();
8634            let handles_before = decoder.remaining_handles();
8635            if let Some((inlined, num_bytes, num_handles)) =
8636                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8637            {
8638                let member_inline_size =
8639                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8640                if inlined != (member_inline_size <= 4) {
8641                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8642                }
8643                let inner_offset;
8644                let mut inner_depth = depth.clone();
8645                if inlined {
8646                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8647                    inner_offset = next_offset;
8648                } else {
8649                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8650                    inner_depth.increment()?;
8651                }
8652                let val_ref = self.cis_sync_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8653                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8654                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8655                {
8656                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8657                }
8658                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8659                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8660                }
8661            }
8662
8663            next_offset += envelope_size;
8664            _next_ordinal_to_read += 1;
8665            if next_offset >= end_offset {
8666                return Ok(());
8667            }
8668
8669            // Decode unknown envelopes for gaps in ordinals.
8670            while _next_ordinal_to_read < 3 {
8671                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8672                _next_ordinal_to_read += 1;
8673                next_offset += envelope_size;
8674            }
8675
8676            let next_out_of_line = decoder.next_out_of_line();
8677            let handles_before = decoder.remaining_handles();
8678            if let Some((inlined, num_bytes, num_handles)) =
8679                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8680            {
8681                let member_inline_size =
8682                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8683                if inlined != (member_inline_size <= 4) {
8684                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8685                }
8686                let inner_offset;
8687                let mut inner_depth = depth.clone();
8688                if inlined {
8689                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8690                    inner_offset = next_offset;
8691                } else {
8692                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8693                    inner_depth.increment()?;
8694                }
8695                let val_ref = self.max_subevents.get_or_insert_with(|| fidl::new_empty!(u8, D));
8696                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
8697                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8698                {
8699                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8700                }
8701                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8702                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8703                }
8704            }
8705
8706            next_offset += envelope_size;
8707            _next_ordinal_to_read += 1;
8708            if next_offset >= end_offset {
8709                return Ok(());
8710            }
8711
8712            // Decode unknown envelopes for gaps in ordinals.
8713            while _next_ordinal_to_read < 4 {
8714                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8715                _next_ordinal_to_read += 1;
8716                next_offset += envelope_size;
8717            }
8718
8719            let next_out_of_line = decoder.next_out_of_line();
8720            let handles_before = decoder.remaining_handles();
8721            if let Some((inlined, num_bytes, num_handles)) =
8722                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8723            {
8724                let member_inline_size =
8725                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8726                if inlined != (member_inline_size <= 4) {
8727                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8728                }
8729                let inner_offset;
8730                let mut inner_depth = depth.clone();
8731                if inlined {
8732                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8733                    inner_offset = next_offset;
8734                } else {
8735                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8736                    inner_depth.increment()?;
8737                }
8738                let val_ref = self.iso_interval.get_or_insert_with(|| fidl::new_empty!(i64, D));
8739                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8740                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8741                {
8742                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8743                }
8744                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8745                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8746                }
8747            }
8748
8749            next_offset += envelope_size;
8750            _next_ordinal_to_read += 1;
8751            if next_offset >= end_offset {
8752                return Ok(());
8753            }
8754
8755            // Decode unknown envelopes for gaps in ordinals.
8756            while _next_ordinal_to_read < 5 {
8757                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8758                _next_ordinal_to_read += 1;
8759                next_offset += envelope_size;
8760            }
8761
8762            let next_out_of_line = decoder.next_out_of_line();
8763            let handles_before = decoder.remaining_handles();
8764            if let Some((inlined, num_bytes, num_handles)) =
8765                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8766            {
8767                let member_inline_size =
8768                    <CisUnidirectionalParams as fidl::encoding::TypeMarker>::inline_size(
8769                        decoder.context,
8770                    );
8771                if inlined != (member_inline_size <= 4) {
8772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8773                }
8774                let inner_offset;
8775                let mut inner_depth = depth.clone();
8776                if inlined {
8777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8778                    inner_offset = next_offset;
8779                } else {
8780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8781                    inner_depth.increment()?;
8782                }
8783                let val_ref = self
8784                    .central_to_peripheral_params
8785                    .get_or_insert_with(|| fidl::new_empty!(CisUnidirectionalParams, D));
8786                fidl::decode!(
8787                    CisUnidirectionalParams,
8788                    D,
8789                    val_ref,
8790                    decoder,
8791                    inner_offset,
8792                    inner_depth
8793                )?;
8794                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8795                {
8796                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8797                }
8798                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8799                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8800                }
8801            }
8802
8803            next_offset += envelope_size;
8804            _next_ordinal_to_read += 1;
8805            if next_offset >= end_offset {
8806                return Ok(());
8807            }
8808
8809            // Decode unknown envelopes for gaps in ordinals.
8810            while _next_ordinal_to_read < 6 {
8811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8812                _next_ordinal_to_read += 1;
8813                next_offset += envelope_size;
8814            }
8815
8816            let next_out_of_line = decoder.next_out_of_line();
8817            let handles_before = decoder.remaining_handles();
8818            if let Some((inlined, num_bytes, num_handles)) =
8819                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8820            {
8821                let member_inline_size =
8822                    <CisUnidirectionalParams as fidl::encoding::TypeMarker>::inline_size(
8823                        decoder.context,
8824                    );
8825                if inlined != (member_inline_size <= 4) {
8826                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8827                }
8828                let inner_offset;
8829                let mut inner_depth = depth.clone();
8830                if inlined {
8831                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8832                    inner_offset = next_offset;
8833                } else {
8834                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8835                    inner_depth.increment()?;
8836                }
8837                let val_ref = self
8838                    .peripheral_to_central_params
8839                    .get_or_insert_with(|| fidl::new_empty!(CisUnidirectionalParams, D));
8840                fidl::decode!(
8841                    CisUnidirectionalParams,
8842                    D,
8843                    val_ref,
8844                    decoder,
8845                    inner_offset,
8846                    inner_depth
8847                )?;
8848                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8849                {
8850                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8851                }
8852                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8853                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8854                }
8855            }
8856
8857            next_offset += envelope_size;
8858
8859            // Decode the remaining unknown envelopes.
8860            while next_offset < end_offset {
8861                _next_ordinal_to_read += 1;
8862                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8863                next_offset += envelope_size;
8864            }
8865
8866            Ok(())
8867        }
8868    }
8869
8870    impl CisParameters {
8871        #[inline(always)]
8872        fn max_ordinal_present(&self) -> u64 {
8873            if let Some(_) = self.id {
8874                return 2;
8875            }
8876            if let Some(_) = self.cis_id {
8877                return 1;
8878            }
8879            0
8880        }
8881    }
8882
8883    impl fidl::encoding::ValueTypeMarker for CisParameters {
8884        type Borrowed<'a> = &'a Self;
8885        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8886            value
8887        }
8888    }
8889
8890    unsafe impl fidl::encoding::TypeMarker for CisParameters {
8891        type Owned = Self;
8892
8893        #[inline(always)]
8894        fn inline_align(_context: fidl::encoding::Context) -> usize {
8895            8
8896        }
8897
8898        #[inline(always)]
8899        fn inline_size(_context: fidl::encoding::Context) -> usize {
8900            16
8901        }
8902    }
8903
8904    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CisParameters, D>
8905        for &CisParameters
8906    {
8907        unsafe fn encode(
8908            self,
8909            encoder: &mut fidl::encoding::Encoder<'_, D>,
8910            offset: usize,
8911            mut depth: fidl::encoding::Depth,
8912        ) -> fidl::Result<()> {
8913            encoder.debug_check_bounds::<CisParameters>(offset);
8914            // Vector header
8915            let max_ordinal: u64 = self.max_ordinal_present();
8916            encoder.write_num(max_ordinal, offset);
8917            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8918            // Calling encoder.out_of_line_offset(0) is not allowed.
8919            if max_ordinal == 0 {
8920                return Ok(());
8921            }
8922            depth.increment()?;
8923            let envelope_size = 8;
8924            let bytes_len = max_ordinal as usize * envelope_size;
8925            #[allow(unused_variables)]
8926            let offset = encoder.out_of_line_offset(bytes_len);
8927            let mut _prev_end_offset: usize = 0;
8928            if 1 > max_ordinal {
8929                return Ok(());
8930            }
8931
8932            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8933            // are envelope_size bytes.
8934            let cur_offset: usize = (1 - 1) * envelope_size;
8935
8936            // Zero reserved fields.
8937            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8938
8939            // Safety:
8940            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8941            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8942            //   envelope_size bytes, there is always sufficient room.
8943            fidl::encoding::encode_in_envelope_optional::<u8, D>(
8944                self.cis_id.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
8945                encoder,
8946                offset + cur_offset,
8947                depth,
8948            )?;
8949
8950            _prev_end_offset = cur_offset + envelope_size;
8951            if 2 > max_ordinal {
8952                return Ok(());
8953            }
8954
8955            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8956            // are envelope_size bytes.
8957            let cur_offset: usize = (2 - 1) * envelope_size;
8958
8959            // Zero reserved fields.
8960            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8961
8962            // Safety:
8963            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8964            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8965            //   envelope_size bytes, there is always sufficient room.
8966            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::PeerId, D>(
8967            self.id.as_ref().map(<fidl_fuchsia_bluetooth__common::PeerId as fidl::encoding::ValueTypeMarker>::borrow),
8968            encoder, offset + cur_offset, depth
8969        )?;
8970
8971            _prev_end_offset = cur_offset + envelope_size;
8972
8973            Ok(())
8974        }
8975    }
8976
8977    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CisParameters {
8978        #[inline(always)]
8979        fn new_empty() -> Self {
8980            Self::default()
8981        }
8982
8983        unsafe fn decode(
8984            &mut self,
8985            decoder: &mut fidl::encoding::Decoder<'_, D>,
8986            offset: usize,
8987            mut depth: fidl::encoding::Depth,
8988        ) -> fidl::Result<()> {
8989            decoder.debug_check_bounds::<Self>(offset);
8990            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8991                None => return Err(fidl::Error::NotNullable),
8992                Some(len) => len,
8993            };
8994            // Calling decoder.out_of_line_offset(0) is not allowed.
8995            if len == 0 {
8996                return Ok(());
8997            };
8998            depth.increment()?;
8999            let envelope_size = 8;
9000            let bytes_len = len * envelope_size;
9001            let offset = decoder.out_of_line_offset(bytes_len)?;
9002            // Decode the envelope for each type.
9003            let mut _next_ordinal_to_read = 0;
9004            let mut next_offset = offset;
9005            let end_offset = offset + bytes_len;
9006            _next_ordinal_to_read += 1;
9007            if next_offset >= end_offset {
9008                return Ok(());
9009            }
9010
9011            // Decode unknown envelopes for gaps in ordinals.
9012            while _next_ordinal_to_read < 1 {
9013                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9014                _next_ordinal_to_read += 1;
9015                next_offset += envelope_size;
9016            }
9017
9018            let next_out_of_line = decoder.next_out_of_line();
9019            let handles_before = decoder.remaining_handles();
9020            if let Some((inlined, num_bytes, num_handles)) =
9021                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9022            {
9023                let member_inline_size =
9024                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9025                if inlined != (member_inline_size <= 4) {
9026                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9027                }
9028                let inner_offset;
9029                let mut inner_depth = depth.clone();
9030                if inlined {
9031                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9032                    inner_offset = next_offset;
9033                } else {
9034                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9035                    inner_depth.increment()?;
9036                }
9037                let val_ref = self.cis_id.get_or_insert_with(|| fidl::new_empty!(u8, D));
9038                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9039                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9040                {
9041                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9042                }
9043                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9044                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9045                }
9046            }
9047
9048            next_offset += envelope_size;
9049            _next_ordinal_to_read += 1;
9050            if next_offset >= end_offset {
9051                return Ok(());
9052            }
9053
9054            // Decode unknown envelopes for gaps in ordinals.
9055            while _next_ordinal_to_read < 2 {
9056                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9057                _next_ordinal_to_read += 1;
9058                next_offset += envelope_size;
9059            }
9060
9061            let next_out_of_line = decoder.next_out_of_line();
9062            let handles_before = decoder.remaining_handles();
9063            if let Some((inlined, num_bytes, num_handles)) =
9064                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9065            {
9066                let member_inline_size = <fidl_fuchsia_bluetooth__common::PeerId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9067                if inlined != (member_inline_size <= 4) {
9068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9069                }
9070                let inner_offset;
9071                let mut inner_depth = depth.clone();
9072                if inlined {
9073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9074                    inner_offset = next_offset;
9075                } else {
9076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9077                    inner_depth.increment()?;
9078                }
9079                let val_ref = self.id.get_or_insert_with(|| {
9080                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::PeerId, D)
9081                });
9082                fidl::decode!(
9083                    fidl_fuchsia_bluetooth__common::PeerId,
9084                    D,
9085                    val_ref,
9086                    decoder,
9087                    inner_offset,
9088                    inner_depth
9089                )?;
9090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9091                {
9092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9093                }
9094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9096                }
9097            }
9098
9099            next_offset += envelope_size;
9100
9101            // Decode the remaining unknown envelopes.
9102            while next_offset < end_offset {
9103                _next_ordinal_to_read += 1;
9104                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9105                next_offset += envelope_size;
9106            }
9107
9108            Ok(())
9109        }
9110    }
9111
9112    impl CisUnidirectionalParams {
9113        #[inline(always)]
9114        fn max_ordinal_present(&self) -> u64 {
9115            if let Some(_) = self.flush_timeout {
9116                return 3;
9117            }
9118            if let Some(_) = self.burst_number {
9119                return 2;
9120            }
9121            if let Some(_) = self.transport_latency {
9122                return 1;
9123            }
9124            0
9125        }
9126    }
9127
9128    impl fidl::encoding::ValueTypeMarker for CisUnidirectionalParams {
9129        type Borrowed<'a> = &'a Self;
9130        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9131            value
9132        }
9133    }
9134
9135    unsafe impl fidl::encoding::TypeMarker for CisUnidirectionalParams {
9136        type Owned = Self;
9137
9138        #[inline(always)]
9139        fn inline_align(_context: fidl::encoding::Context) -> usize {
9140            8
9141        }
9142
9143        #[inline(always)]
9144        fn inline_size(_context: fidl::encoding::Context) -> usize {
9145            16
9146        }
9147    }
9148
9149    unsafe impl<D: fidl::encoding::ResourceDialect>
9150        fidl::encoding::Encode<CisUnidirectionalParams, D> for &CisUnidirectionalParams
9151    {
9152        unsafe fn encode(
9153            self,
9154            encoder: &mut fidl::encoding::Encoder<'_, D>,
9155            offset: usize,
9156            mut depth: fidl::encoding::Depth,
9157        ) -> fidl::Result<()> {
9158            encoder.debug_check_bounds::<CisUnidirectionalParams>(offset);
9159            // Vector header
9160            let max_ordinal: u64 = self.max_ordinal_present();
9161            encoder.write_num(max_ordinal, offset);
9162            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9163            // Calling encoder.out_of_line_offset(0) is not allowed.
9164            if max_ordinal == 0 {
9165                return Ok(());
9166            }
9167            depth.increment()?;
9168            let envelope_size = 8;
9169            let bytes_len = max_ordinal as usize * envelope_size;
9170            #[allow(unused_variables)]
9171            let offset = encoder.out_of_line_offset(bytes_len);
9172            let mut _prev_end_offset: usize = 0;
9173            if 1 > max_ordinal {
9174                return Ok(());
9175            }
9176
9177            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9178            // are envelope_size bytes.
9179            let cur_offset: usize = (1 - 1) * envelope_size;
9180
9181            // Zero reserved fields.
9182            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9183
9184            // Safety:
9185            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9186            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9187            //   envelope_size bytes, there is always sufficient room.
9188            fidl::encoding::encode_in_envelope_optional::<i64, D>(
9189                self.transport_latency
9190                    .as_ref()
9191                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
9192                encoder,
9193                offset + cur_offset,
9194                depth,
9195            )?;
9196
9197            _prev_end_offset = cur_offset + envelope_size;
9198            if 2 > max_ordinal {
9199                return Ok(());
9200            }
9201
9202            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9203            // are envelope_size bytes.
9204            let cur_offset: usize = (2 - 1) * envelope_size;
9205
9206            // Zero reserved fields.
9207            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9208
9209            // Safety:
9210            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9211            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9212            //   envelope_size bytes, there is always sufficient room.
9213            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9214                self.burst_number.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9215                encoder,
9216                offset + cur_offset,
9217                depth,
9218            )?;
9219
9220            _prev_end_offset = cur_offset + envelope_size;
9221            if 3 > max_ordinal {
9222                return Ok(());
9223            }
9224
9225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9226            // are envelope_size bytes.
9227            let cur_offset: usize = (3 - 1) * envelope_size;
9228
9229            // Zero reserved fields.
9230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9231
9232            // Safety:
9233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9235            //   envelope_size bytes, there is always sufficient room.
9236            fidl::encoding::encode_in_envelope_optional::<u8, D>(
9237                self.flush_timeout.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
9238                encoder,
9239                offset + cur_offset,
9240                depth,
9241            )?;
9242
9243            _prev_end_offset = cur_offset + envelope_size;
9244
9245            Ok(())
9246        }
9247    }
9248
9249    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9250        for CisUnidirectionalParams
9251    {
9252        #[inline(always)]
9253        fn new_empty() -> Self {
9254            Self::default()
9255        }
9256
9257        unsafe fn decode(
9258            &mut self,
9259            decoder: &mut fidl::encoding::Decoder<'_, D>,
9260            offset: usize,
9261            mut depth: fidl::encoding::Depth,
9262        ) -> fidl::Result<()> {
9263            decoder.debug_check_bounds::<Self>(offset);
9264            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9265                None => return Err(fidl::Error::NotNullable),
9266                Some(len) => len,
9267            };
9268            // Calling decoder.out_of_line_offset(0) is not allowed.
9269            if len == 0 {
9270                return Ok(());
9271            };
9272            depth.increment()?;
9273            let envelope_size = 8;
9274            let bytes_len = len * envelope_size;
9275            let offset = decoder.out_of_line_offset(bytes_len)?;
9276            // Decode the envelope for each type.
9277            let mut _next_ordinal_to_read = 0;
9278            let mut next_offset = offset;
9279            let end_offset = offset + bytes_len;
9280            _next_ordinal_to_read += 1;
9281            if next_offset >= end_offset {
9282                return Ok(());
9283            }
9284
9285            // Decode unknown envelopes for gaps in ordinals.
9286            while _next_ordinal_to_read < 1 {
9287                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9288                _next_ordinal_to_read += 1;
9289                next_offset += envelope_size;
9290            }
9291
9292            let next_out_of_line = decoder.next_out_of_line();
9293            let handles_before = decoder.remaining_handles();
9294            if let Some((inlined, num_bytes, num_handles)) =
9295                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9296            {
9297                let member_inline_size =
9298                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9299                if inlined != (member_inline_size <= 4) {
9300                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9301                }
9302                let inner_offset;
9303                let mut inner_depth = depth.clone();
9304                if inlined {
9305                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9306                    inner_offset = next_offset;
9307                } else {
9308                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9309                    inner_depth.increment()?;
9310                }
9311                let val_ref =
9312                    self.transport_latency.get_or_insert_with(|| fidl::new_empty!(i64, D));
9313                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9314                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9315                {
9316                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9317                }
9318                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9319                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9320                }
9321            }
9322
9323            next_offset += envelope_size;
9324            _next_ordinal_to_read += 1;
9325            if next_offset >= end_offset {
9326                return Ok(());
9327            }
9328
9329            // Decode unknown envelopes for gaps in ordinals.
9330            while _next_ordinal_to_read < 2 {
9331                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9332                _next_ordinal_to_read += 1;
9333                next_offset += envelope_size;
9334            }
9335
9336            let next_out_of_line = decoder.next_out_of_line();
9337            let handles_before = decoder.remaining_handles();
9338            if let Some((inlined, num_bytes, num_handles)) =
9339                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9340            {
9341                let member_inline_size =
9342                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9343                if inlined != (member_inline_size <= 4) {
9344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9345                }
9346                let inner_offset;
9347                let mut inner_depth = depth.clone();
9348                if inlined {
9349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9350                    inner_offset = next_offset;
9351                } else {
9352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9353                    inner_depth.increment()?;
9354                }
9355                let val_ref = self.burst_number.get_or_insert_with(|| fidl::new_empty!(u8, D));
9356                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9357                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9358                {
9359                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9360                }
9361                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9362                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9363                }
9364            }
9365
9366            next_offset += envelope_size;
9367            _next_ordinal_to_read += 1;
9368            if next_offset >= end_offset {
9369                return Ok(());
9370            }
9371
9372            // Decode unknown envelopes for gaps in ordinals.
9373            while _next_ordinal_to_read < 3 {
9374                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9375                _next_ordinal_to_read += 1;
9376                next_offset += envelope_size;
9377            }
9378
9379            let next_out_of_line = decoder.next_out_of_line();
9380            let handles_before = decoder.remaining_handles();
9381            if let Some((inlined, num_bytes, num_handles)) =
9382                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9383            {
9384                let member_inline_size =
9385                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9386                if inlined != (member_inline_size <= 4) {
9387                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9388                }
9389                let inner_offset;
9390                let mut inner_depth = depth.clone();
9391                if inlined {
9392                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9393                    inner_offset = next_offset;
9394                } else {
9395                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9396                    inner_depth.increment()?;
9397                }
9398                let val_ref = self.flush_timeout.get_or_insert_with(|| fidl::new_empty!(u8, D));
9399                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
9400                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9401                {
9402                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9403                }
9404                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9405                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9406                }
9407            }
9408
9409            next_offset += envelope_size;
9410
9411            // Decode the remaining unknown envelopes.
9412            while next_offset < end_offset {
9413                _next_ordinal_to_read += 1;
9414                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9415                next_offset += envelope_size;
9416            }
9417
9418            Ok(())
9419        }
9420    }
9421
9422    impl CodecDelayGetCodecLocalDelayRangeRequest {
9423        #[inline(always)]
9424        fn max_ordinal_present(&self) -> u64 {
9425            if let Some(_) = self.codec_attributes {
9426                return 3;
9427            }
9428            if let Some(_) = self.data_direction {
9429                return 2;
9430            }
9431            if let Some(_) = self.logical_transport_type {
9432                return 1;
9433            }
9434            0
9435        }
9436    }
9437
9438    impl fidl::encoding::ValueTypeMarker for CodecDelayGetCodecLocalDelayRangeRequest {
9439        type Borrowed<'a> = &'a Self;
9440        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9441            value
9442        }
9443    }
9444
9445    unsafe impl fidl::encoding::TypeMarker for CodecDelayGetCodecLocalDelayRangeRequest {
9446        type Owned = Self;
9447
9448        #[inline(always)]
9449        fn inline_align(_context: fidl::encoding::Context) -> usize {
9450            8
9451        }
9452
9453        #[inline(always)]
9454        fn inline_size(_context: fidl::encoding::Context) -> usize {
9455            16
9456        }
9457    }
9458
9459    unsafe impl<D: fidl::encoding::ResourceDialect>
9460        fidl::encoding::Encode<CodecDelayGetCodecLocalDelayRangeRequest, D>
9461        for &CodecDelayGetCodecLocalDelayRangeRequest
9462    {
9463        unsafe fn encode(
9464            self,
9465            encoder: &mut fidl::encoding::Encoder<'_, D>,
9466            offset: usize,
9467            mut depth: fidl::encoding::Depth,
9468        ) -> fidl::Result<()> {
9469            encoder.debug_check_bounds::<CodecDelayGetCodecLocalDelayRangeRequest>(offset);
9470            // Vector header
9471            let max_ordinal: u64 = self.max_ordinal_present();
9472            encoder.write_num(max_ordinal, offset);
9473            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9474            // Calling encoder.out_of_line_offset(0) is not allowed.
9475            if max_ordinal == 0 {
9476                return Ok(());
9477            }
9478            depth.increment()?;
9479            let envelope_size = 8;
9480            let bytes_len = max_ordinal as usize * envelope_size;
9481            #[allow(unused_variables)]
9482            let offset = encoder.out_of_line_offset(bytes_len);
9483            let mut _prev_end_offset: usize = 0;
9484            if 1 > max_ordinal {
9485                return Ok(());
9486            }
9487
9488            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9489            // are envelope_size bytes.
9490            let cur_offset: usize = (1 - 1) * envelope_size;
9491
9492            // Zero reserved fields.
9493            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9494
9495            // Safety:
9496            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9497            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9498            //   envelope_size bytes, there is always sufficient room.
9499            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::LogicalTransportType, D>(
9500            self.logical_transport_type.as_ref().map(<fidl_fuchsia_bluetooth__common::LogicalTransportType as fidl::encoding::ValueTypeMarker>::borrow),
9501            encoder, offset + cur_offset, depth
9502        )?;
9503
9504            _prev_end_offset = cur_offset + envelope_size;
9505            if 2 > max_ordinal {
9506                return Ok(());
9507            }
9508
9509            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9510            // are envelope_size bytes.
9511            let cur_offset: usize = (2 - 1) * envelope_size;
9512
9513            // Zero reserved fields.
9514            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9515
9516            // Safety:
9517            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9518            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9519            //   envelope_size bytes, there is always sufficient room.
9520            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::DataDirection, D>(
9521            self.data_direction.as_ref().map(<fidl_fuchsia_bluetooth__common::DataDirection as fidl::encoding::ValueTypeMarker>::borrow),
9522            encoder, offset + cur_offset, depth
9523        )?;
9524
9525            _prev_end_offset = cur_offset + envelope_size;
9526            if 3 > max_ordinal {
9527                return Ok(());
9528            }
9529
9530            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9531            // are envelope_size bytes.
9532            let cur_offset: usize = (3 - 1) * envelope_size;
9533
9534            // Zero reserved fields.
9535            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9536
9537            // Safety:
9538            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9539            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9540            //   envelope_size bytes, there is always sufficient room.
9541            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::CodecAttributes, D>(
9542            self.codec_attributes.as_ref().map(<fidl_fuchsia_bluetooth__common::CodecAttributes as fidl::encoding::ValueTypeMarker>::borrow),
9543            encoder, offset + cur_offset, depth
9544        )?;
9545
9546            _prev_end_offset = cur_offset + envelope_size;
9547
9548            Ok(())
9549        }
9550    }
9551
9552    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9553        for CodecDelayGetCodecLocalDelayRangeRequest
9554    {
9555        #[inline(always)]
9556        fn new_empty() -> Self {
9557            Self::default()
9558        }
9559
9560        unsafe fn decode(
9561            &mut self,
9562            decoder: &mut fidl::encoding::Decoder<'_, D>,
9563            offset: usize,
9564            mut depth: fidl::encoding::Depth,
9565        ) -> fidl::Result<()> {
9566            decoder.debug_check_bounds::<Self>(offset);
9567            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9568                None => return Err(fidl::Error::NotNullable),
9569                Some(len) => len,
9570            };
9571            // Calling decoder.out_of_line_offset(0) is not allowed.
9572            if len == 0 {
9573                return Ok(());
9574            };
9575            depth.increment()?;
9576            let envelope_size = 8;
9577            let bytes_len = len * envelope_size;
9578            let offset = decoder.out_of_line_offset(bytes_len)?;
9579            // Decode the envelope for each type.
9580            let mut _next_ordinal_to_read = 0;
9581            let mut next_offset = offset;
9582            let end_offset = offset + bytes_len;
9583            _next_ordinal_to_read += 1;
9584            if next_offset >= end_offset {
9585                return Ok(());
9586            }
9587
9588            // Decode unknown envelopes for gaps in ordinals.
9589            while _next_ordinal_to_read < 1 {
9590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9591                _next_ordinal_to_read += 1;
9592                next_offset += envelope_size;
9593            }
9594
9595            let next_out_of_line = decoder.next_out_of_line();
9596            let handles_before = decoder.remaining_handles();
9597            if let Some((inlined, num_bytes, num_handles)) =
9598                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9599            {
9600                let member_inline_size = <fidl_fuchsia_bluetooth__common::LogicalTransportType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9601                if inlined != (member_inline_size <= 4) {
9602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9603                }
9604                let inner_offset;
9605                let mut inner_depth = depth.clone();
9606                if inlined {
9607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9608                    inner_offset = next_offset;
9609                } else {
9610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9611                    inner_depth.increment()?;
9612                }
9613                let val_ref = self.logical_transport_type.get_or_insert_with(|| {
9614                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::LogicalTransportType, D)
9615                });
9616                fidl::decode!(
9617                    fidl_fuchsia_bluetooth__common::LogicalTransportType,
9618                    D,
9619                    val_ref,
9620                    decoder,
9621                    inner_offset,
9622                    inner_depth
9623                )?;
9624                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9625                {
9626                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9627                }
9628                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9629                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9630                }
9631            }
9632
9633            next_offset += envelope_size;
9634            _next_ordinal_to_read += 1;
9635            if next_offset >= end_offset {
9636                return Ok(());
9637            }
9638
9639            // Decode unknown envelopes for gaps in ordinals.
9640            while _next_ordinal_to_read < 2 {
9641                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9642                _next_ordinal_to_read += 1;
9643                next_offset += envelope_size;
9644            }
9645
9646            let next_out_of_line = decoder.next_out_of_line();
9647            let handles_before = decoder.remaining_handles();
9648            if let Some((inlined, num_bytes, num_handles)) =
9649                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9650            {
9651                let member_inline_size = <fidl_fuchsia_bluetooth__common::DataDirection as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9652                if inlined != (member_inline_size <= 4) {
9653                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9654                }
9655                let inner_offset;
9656                let mut inner_depth = depth.clone();
9657                if inlined {
9658                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9659                    inner_offset = next_offset;
9660                } else {
9661                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9662                    inner_depth.increment()?;
9663                }
9664                let val_ref = self.data_direction.get_or_insert_with(|| {
9665                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::DataDirection, D)
9666                });
9667                fidl::decode!(
9668                    fidl_fuchsia_bluetooth__common::DataDirection,
9669                    D,
9670                    val_ref,
9671                    decoder,
9672                    inner_offset,
9673                    inner_depth
9674                )?;
9675                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9676                {
9677                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9678                }
9679                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9680                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9681                }
9682            }
9683
9684            next_offset += envelope_size;
9685            _next_ordinal_to_read += 1;
9686            if next_offset >= end_offset {
9687                return Ok(());
9688            }
9689
9690            // Decode unknown envelopes for gaps in ordinals.
9691            while _next_ordinal_to_read < 3 {
9692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9693                _next_ordinal_to_read += 1;
9694                next_offset += envelope_size;
9695            }
9696
9697            let next_out_of_line = decoder.next_out_of_line();
9698            let handles_before = decoder.remaining_handles();
9699            if let Some((inlined, num_bytes, num_handles)) =
9700                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9701            {
9702                let member_inline_size = <fidl_fuchsia_bluetooth__common::CodecAttributes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9703                if inlined != (member_inline_size <= 4) {
9704                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9705                }
9706                let inner_offset;
9707                let mut inner_depth = depth.clone();
9708                if inlined {
9709                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9710                    inner_offset = next_offset;
9711                } else {
9712                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9713                    inner_depth.increment()?;
9714                }
9715                let val_ref = self.codec_attributes.get_or_insert_with(|| {
9716                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::CodecAttributes, D)
9717                });
9718                fidl::decode!(
9719                    fidl_fuchsia_bluetooth__common::CodecAttributes,
9720                    D,
9721                    val_ref,
9722                    decoder,
9723                    inner_offset,
9724                    inner_depth
9725                )?;
9726                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9727                {
9728                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9729                }
9730                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9731                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9732                }
9733            }
9734
9735            next_offset += envelope_size;
9736
9737            // Decode the remaining unknown envelopes.
9738            while next_offset < end_offset {
9739                _next_ordinal_to_read += 1;
9740                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9741                next_offset += envelope_size;
9742            }
9743
9744            Ok(())
9745        }
9746    }
9747
9748    impl CodecDelayGetCodecLocalDelayRangeResponse {
9749        #[inline(always)]
9750        fn max_ordinal_present(&self) -> u64 {
9751            if let Some(_) = self.max_controller_delay {
9752                return 2;
9753            }
9754            if let Some(_) = self.min_controller_delay {
9755                return 1;
9756            }
9757            0
9758        }
9759    }
9760
9761    impl fidl::encoding::ValueTypeMarker for CodecDelayGetCodecLocalDelayRangeResponse {
9762        type Borrowed<'a> = &'a Self;
9763        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9764            value
9765        }
9766    }
9767
9768    unsafe impl fidl::encoding::TypeMarker for CodecDelayGetCodecLocalDelayRangeResponse {
9769        type Owned = Self;
9770
9771        #[inline(always)]
9772        fn inline_align(_context: fidl::encoding::Context) -> usize {
9773            8
9774        }
9775
9776        #[inline(always)]
9777        fn inline_size(_context: fidl::encoding::Context) -> usize {
9778            16
9779        }
9780    }
9781
9782    unsafe impl<D: fidl::encoding::ResourceDialect>
9783        fidl::encoding::Encode<CodecDelayGetCodecLocalDelayRangeResponse, D>
9784        for &CodecDelayGetCodecLocalDelayRangeResponse
9785    {
9786        unsafe fn encode(
9787            self,
9788            encoder: &mut fidl::encoding::Encoder<'_, D>,
9789            offset: usize,
9790            mut depth: fidl::encoding::Depth,
9791        ) -> fidl::Result<()> {
9792            encoder.debug_check_bounds::<CodecDelayGetCodecLocalDelayRangeResponse>(offset);
9793            // Vector header
9794            let max_ordinal: u64 = self.max_ordinal_present();
9795            encoder.write_num(max_ordinal, offset);
9796            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9797            // Calling encoder.out_of_line_offset(0) is not allowed.
9798            if max_ordinal == 0 {
9799                return Ok(());
9800            }
9801            depth.increment()?;
9802            let envelope_size = 8;
9803            let bytes_len = max_ordinal as usize * envelope_size;
9804            #[allow(unused_variables)]
9805            let offset = encoder.out_of_line_offset(bytes_len);
9806            let mut _prev_end_offset: usize = 0;
9807            if 1 > max_ordinal {
9808                return Ok(());
9809            }
9810
9811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9812            // are envelope_size bytes.
9813            let cur_offset: usize = (1 - 1) * envelope_size;
9814
9815            // Zero reserved fields.
9816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9817
9818            // Safety:
9819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9821            //   envelope_size bytes, there is always sufficient room.
9822            fidl::encoding::encode_in_envelope_optional::<i64, D>(
9823                self.min_controller_delay
9824                    .as_ref()
9825                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
9826                encoder,
9827                offset + cur_offset,
9828                depth,
9829            )?;
9830
9831            _prev_end_offset = cur_offset + envelope_size;
9832            if 2 > max_ordinal {
9833                return Ok(());
9834            }
9835
9836            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9837            // are envelope_size bytes.
9838            let cur_offset: usize = (2 - 1) * envelope_size;
9839
9840            // Zero reserved fields.
9841            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9842
9843            // Safety:
9844            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9845            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9846            //   envelope_size bytes, there is always sufficient room.
9847            fidl::encoding::encode_in_envelope_optional::<i64, D>(
9848                self.max_controller_delay
9849                    .as_ref()
9850                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
9851                encoder,
9852                offset + cur_offset,
9853                depth,
9854            )?;
9855
9856            _prev_end_offset = cur_offset + envelope_size;
9857
9858            Ok(())
9859        }
9860    }
9861
9862    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9863        for CodecDelayGetCodecLocalDelayRangeResponse
9864    {
9865        #[inline(always)]
9866        fn new_empty() -> Self {
9867            Self::default()
9868        }
9869
9870        unsafe fn decode(
9871            &mut self,
9872            decoder: &mut fidl::encoding::Decoder<'_, D>,
9873            offset: usize,
9874            mut depth: fidl::encoding::Depth,
9875        ) -> fidl::Result<()> {
9876            decoder.debug_check_bounds::<Self>(offset);
9877            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9878                None => return Err(fidl::Error::NotNullable),
9879                Some(len) => len,
9880            };
9881            // Calling decoder.out_of_line_offset(0) is not allowed.
9882            if len == 0 {
9883                return Ok(());
9884            };
9885            depth.increment()?;
9886            let envelope_size = 8;
9887            let bytes_len = len * envelope_size;
9888            let offset = decoder.out_of_line_offset(bytes_len)?;
9889            // Decode the envelope for each type.
9890            let mut _next_ordinal_to_read = 0;
9891            let mut next_offset = offset;
9892            let end_offset = offset + bytes_len;
9893            _next_ordinal_to_read += 1;
9894            if next_offset >= end_offset {
9895                return Ok(());
9896            }
9897
9898            // Decode unknown envelopes for gaps in ordinals.
9899            while _next_ordinal_to_read < 1 {
9900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9901                _next_ordinal_to_read += 1;
9902                next_offset += envelope_size;
9903            }
9904
9905            let next_out_of_line = decoder.next_out_of_line();
9906            let handles_before = decoder.remaining_handles();
9907            if let Some((inlined, num_bytes, num_handles)) =
9908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9909            {
9910                let member_inline_size =
9911                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9912                if inlined != (member_inline_size <= 4) {
9913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9914                }
9915                let inner_offset;
9916                let mut inner_depth = depth.clone();
9917                if inlined {
9918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9919                    inner_offset = next_offset;
9920                } else {
9921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9922                    inner_depth.increment()?;
9923                }
9924                let val_ref =
9925                    self.min_controller_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
9926                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9927                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9928                {
9929                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9930                }
9931                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9932                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9933                }
9934            }
9935
9936            next_offset += envelope_size;
9937            _next_ordinal_to_read += 1;
9938            if next_offset >= end_offset {
9939                return Ok(());
9940            }
9941
9942            // Decode unknown envelopes for gaps in ordinals.
9943            while _next_ordinal_to_read < 2 {
9944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9945                _next_ordinal_to_read += 1;
9946                next_offset += envelope_size;
9947            }
9948
9949            let next_out_of_line = decoder.next_out_of_line();
9950            let handles_before = decoder.remaining_handles();
9951            if let Some((inlined, num_bytes, num_handles)) =
9952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9953            {
9954                let member_inline_size =
9955                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9956                if inlined != (member_inline_size <= 4) {
9957                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9958                }
9959                let inner_offset;
9960                let mut inner_depth = depth.clone();
9961                if inlined {
9962                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9963                    inner_offset = next_offset;
9964                } else {
9965                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9966                    inner_depth.increment()?;
9967                }
9968                let val_ref =
9969                    self.max_controller_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
9970                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
9971                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9972                {
9973                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9974                }
9975                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9976                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9977                }
9978            }
9979
9980            next_offset += envelope_size;
9981
9982            // Decode the remaining unknown envelopes.
9983            while next_offset < end_offset {
9984                _next_ordinal_to_read += 1;
9985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9986                next_offset += envelope_size;
9987            }
9988
9989            Ok(())
9990        }
9991    }
9992
9993    impl ConnectedIsochronousGroupEstablishStreamsRequest {
9994        #[inline(always)]
9995        fn max_ordinal_present(&self) -> u64 {
9996            if let Some(_) = self.cis_params {
9997                return 1;
9998            }
9999            0
10000        }
10001    }
10002
10003    impl fidl::encoding::ValueTypeMarker for ConnectedIsochronousGroupEstablishStreamsRequest {
10004        type Borrowed<'a> = &'a Self;
10005        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10006            value
10007        }
10008    }
10009
10010    unsafe impl fidl::encoding::TypeMarker for ConnectedIsochronousGroupEstablishStreamsRequest {
10011        type Owned = Self;
10012
10013        #[inline(always)]
10014        fn inline_align(_context: fidl::encoding::Context) -> usize {
10015            8
10016        }
10017
10018        #[inline(always)]
10019        fn inline_size(_context: fidl::encoding::Context) -> usize {
10020            16
10021        }
10022    }
10023
10024    unsafe impl<D: fidl::encoding::ResourceDialect>
10025        fidl::encoding::Encode<ConnectedIsochronousGroupEstablishStreamsRequest, D>
10026        for &ConnectedIsochronousGroupEstablishStreamsRequest
10027    {
10028        unsafe fn encode(
10029            self,
10030            encoder: &mut fidl::encoding::Encoder<'_, D>,
10031            offset: usize,
10032            mut depth: fidl::encoding::Depth,
10033        ) -> fidl::Result<()> {
10034            encoder.debug_check_bounds::<ConnectedIsochronousGroupEstablishStreamsRequest>(offset);
10035            // Vector header
10036            let max_ordinal: u64 = self.max_ordinal_present();
10037            encoder.write_num(max_ordinal, offset);
10038            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10039            // Calling encoder.out_of_line_offset(0) is not allowed.
10040            if max_ordinal == 0 {
10041                return Ok(());
10042            }
10043            depth.increment()?;
10044            let envelope_size = 8;
10045            let bytes_len = max_ordinal as usize * envelope_size;
10046            #[allow(unused_variables)]
10047            let offset = encoder.out_of_line_offset(bytes_len);
10048            let mut _prev_end_offset: usize = 0;
10049            if 1 > max_ordinal {
10050                return Ok(());
10051            }
10052
10053            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10054            // are envelope_size bytes.
10055            let cur_offset: usize = (1 - 1) * envelope_size;
10056
10057            // Zero reserved fields.
10058            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10059
10060            // Safety:
10061            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10062            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10063            //   envelope_size bytes, there is always sufficient room.
10064            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<CisParameters, 31>, D>(
10065            self.cis_params.as_ref().map(<fidl::encoding::Vector<CisParameters, 31> as fidl::encoding::ValueTypeMarker>::borrow),
10066            encoder, offset + cur_offset, depth
10067        )?;
10068
10069            _prev_end_offset = cur_offset + envelope_size;
10070
10071            Ok(())
10072        }
10073    }
10074
10075    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10076        for ConnectedIsochronousGroupEstablishStreamsRequest
10077    {
10078        #[inline(always)]
10079        fn new_empty() -> Self {
10080            Self::default()
10081        }
10082
10083        unsafe fn decode(
10084            &mut self,
10085            decoder: &mut fidl::encoding::Decoder<'_, D>,
10086            offset: usize,
10087            mut depth: fidl::encoding::Depth,
10088        ) -> fidl::Result<()> {
10089            decoder.debug_check_bounds::<Self>(offset);
10090            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10091                None => return Err(fidl::Error::NotNullable),
10092                Some(len) => len,
10093            };
10094            // Calling decoder.out_of_line_offset(0) is not allowed.
10095            if len == 0 {
10096                return Ok(());
10097            };
10098            depth.increment()?;
10099            let envelope_size = 8;
10100            let bytes_len = len * envelope_size;
10101            let offset = decoder.out_of_line_offset(bytes_len)?;
10102            // Decode the envelope for each type.
10103            let mut _next_ordinal_to_read = 0;
10104            let mut next_offset = offset;
10105            let end_offset = offset + bytes_len;
10106            _next_ordinal_to_read += 1;
10107            if next_offset >= end_offset {
10108                return Ok(());
10109            }
10110
10111            // Decode unknown envelopes for gaps in ordinals.
10112            while _next_ordinal_to_read < 1 {
10113                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10114                _next_ordinal_to_read += 1;
10115                next_offset += envelope_size;
10116            }
10117
10118            let next_out_of_line = decoder.next_out_of_line();
10119            let handles_before = decoder.remaining_handles();
10120            if let Some((inlined, num_bytes, num_handles)) =
10121                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10122            {
10123                let member_inline_size = <fidl::encoding::Vector<CisParameters, 31> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10124                if inlined != (member_inline_size <= 4) {
10125                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10126                }
10127                let inner_offset;
10128                let mut inner_depth = depth.clone();
10129                if inlined {
10130                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10131                    inner_offset = next_offset;
10132                } else {
10133                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10134                    inner_depth.increment()?;
10135                }
10136                let val_ref = self.cis_params.get_or_insert_with(
10137                    || fidl::new_empty!(fidl::encoding::Vector<CisParameters, 31>, D),
10138                );
10139                fidl::decode!(fidl::encoding::Vector<CisParameters, 31>, D, val_ref, decoder, inner_offset, inner_depth)?;
10140                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10141                {
10142                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10143                }
10144                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10145                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10146                }
10147            }
10148
10149            next_offset += envelope_size;
10150
10151            // Decode the remaining unknown envelopes.
10152            while next_offset < end_offset {
10153                _next_ordinal_to_read += 1;
10154                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10155                next_offset += envelope_size;
10156            }
10157
10158            Ok(())
10159        }
10160    }
10161
10162    impl ConnectionOptions {
10163        #[inline(always)]
10164        fn max_ordinal_present(&self) -> u64 {
10165            if let Some(_) = self.service_filter {
10166                return 2;
10167            }
10168            if let Some(_) = self.bondable_mode {
10169                return 1;
10170            }
10171            0
10172        }
10173    }
10174
10175    impl fidl::encoding::ValueTypeMarker for ConnectionOptions {
10176        type Borrowed<'a> = &'a Self;
10177        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10178            value
10179        }
10180    }
10181
10182    unsafe impl fidl::encoding::TypeMarker for ConnectionOptions {
10183        type Owned = Self;
10184
10185        #[inline(always)]
10186        fn inline_align(_context: fidl::encoding::Context) -> usize {
10187            8
10188        }
10189
10190        #[inline(always)]
10191        fn inline_size(_context: fidl::encoding::Context) -> usize {
10192            16
10193        }
10194    }
10195
10196    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConnectionOptions, D>
10197        for &ConnectionOptions
10198    {
10199        unsafe fn encode(
10200            self,
10201            encoder: &mut fidl::encoding::Encoder<'_, D>,
10202            offset: usize,
10203            mut depth: fidl::encoding::Depth,
10204        ) -> fidl::Result<()> {
10205            encoder.debug_check_bounds::<ConnectionOptions>(offset);
10206            // Vector header
10207            let max_ordinal: u64 = self.max_ordinal_present();
10208            encoder.write_num(max_ordinal, offset);
10209            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10210            // Calling encoder.out_of_line_offset(0) is not allowed.
10211            if max_ordinal == 0 {
10212                return Ok(());
10213            }
10214            depth.increment()?;
10215            let envelope_size = 8;
10216            let bytes_len = max_ordinal as usize * envelope_size;
10217            #[allow(unused_variables)]
10218            let offset = encoder.out_of_line_offset(bytes_len);
10219            let mut _prev_end_offset: usize = 0;
10220            if 1 > max_ordinal {
10221                return Ok(());
10222            }
10223
10224            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10225            // are envelope_size bytes.
10226            let cur_offset: usize = (1 - 1) * envelope_size;
10227
10228            // Zero reserved fields.
10229            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10230
10231            // Safety:
10232            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10233            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10234            //   envelope_size bytes, there is always sufficient room.
10235            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10236                self.bondable_mode.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10237                encoder,
10238                offset + cur_offset,
10239                depth,
10240            )?;
10241
10242            _prev_end_offset = cur_offset + envelope_size;
10243            if 2 > max_ordinal {
10244                return Ok(());
10245            }
10246
10247            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10248            // are envelope_size bytes.
10249            let cur_offset: usize = (2 - 1) * envelope_size;
10250
10251            // Zero reserved fields.
10252            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10253
10254            // Safety:
10255            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10256            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10257            //   envelope_size bytes, there is always sufficient room.
10258            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Uuid, D>(
10259            self.service_filter.as_ref().map(<fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::ValueTypeMarker>::borrow),
10260            encoder, offset + cur_offset, depth
10261        )?;
10262
10263            _prev_end_offset = cur_offset + envelope_size;
10264
10265            Ok(())
10266        }
10267    }
10268
10269    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectionOptions {
10270        #[inline(always)]
10271        fn new_empty() -> Self {
10272            Self::default()
10273        }
10274
10275        unsafe fn decode(
10276            &mut self,
10277            decoder: &mut fidl::encoding::Decoder<'_, D>,
10278            offset: usize,
10279            mut depth: fidl::encoding::Depth,
10280        ) -> fidl::Result<()> {
10281            decoder.debug_check_bounds::<Self>(offset);
10282            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10283                None => return Err(fidl::Error::NotNullable),
10284                Some(len) => len,
10285            };
10286            // Calling decoder.out_of_line_offset(0) is not allowed.
10287            if len == 0 {
10288                return Ok(());
10289            };
10290            depth.increment()?;
10291            let envelope_size = 8;
10292            let bytes_len = len * envelope_size;
10293            let offset = decoder.out_of_line_offset(bytes_len)?;
10294            // Decode the envelope for each type.
10295            let mut _next_ordinal_to_read = 0;
10296            let mut next_offset = offset;
10297            let end_offset = offset + bytes_len;
10298            _next_ordinal_to_read += 1;
10299            if next_offset >= end_offset {
10300                return Ok(());
10301            }
10302
10303            // Decode unknown envelopes for gaps in ordinals.
10304            while _next_ordinal_to_read < 1 {
10305                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10306                _next_ordinal_to_read += 1;
10307                next_offset += envelope_size;
10308            }
10309
10310            let next_out_of_line = decoder.next_out_of_line();
10311            let handles_before = decoder.remaining_handles();
10312            if let Some((inlined, num_bytes, num_handles)) =
10313                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10314            {
10315                let member_inline_size =
10316                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10317                if inlined != (member_inline_size <= 4) {
10318                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10319                }
10320                let inner_offset;
10321                let mut inner_depth = depth.clone();
10322                if inlined {
10323                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10324                    inner_offset = next_offset;
10325                } else {
10326                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10327                    inner_depth.increment()?;
10328                }
10329                let val_ref = self.bondable_mode.get_or_insert_with(|| fidl::new_empty!(bool, D));
10330                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10331                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10332                {
10333                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10334                }
10335                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10336                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10337                }
10338            }
10339
10340            next_offset += envelope_size;
10341            _next_ordinal_to_read += 1;
10342            if next_offset >= end_offset {
10343                return Ok(());
10344            }
10345
10346            // Decode unknown envelopes for gaps in ordinals.
10347            while _next_ordinal_to_read < 2 {
10348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10349                _next_ordinal_to_read += 1;
10350                next_offset += envelope_size;
10351            }
10352
10353            let next_out_of_line = decoder.next_out_of_line();
10354            let handles_before = decoder.remaining_handles();
10355            if let Some((inlined, num_bytes, num_handles)) =
10356                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10357            {
10358                let member_inline_size = <fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10359                if inlined != (member_inline_size <= 4) {
10360                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10361                }
10362                let inner_offset;
10363                let mut inner_depth = depth.clone();
10364                if inlined {
10365                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10366                    inner_offset = next_offset;
10367                } else {
10368                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10369                    inner_depth.increment()?;
10370                }
10371                let val_ref = self.service_filter.get_or_insert_with(|| {
10372                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Uuid, D)
10373                });
10374                fidl::decode!(
10375                    fidl_fuchsia_bluetooth__common::Uuid,
10376                    D,
10377                    val_ref,
10378                    decoder,
10379                    inner_offset,
10380                    inner_depth
10381                )?;
10382                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10383                {
10384                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10385                }
10386                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10387                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10388                }
10389            }
10390
10391            next_offset += envelope_size;
10392
10393            // Decode the remaining unknown envelopes.
10394            while next_offset < end_offset {
10395                _next_ordinal_to_read += 1;
10396                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10397                next_offset += envelope_size;
10398            }
10399
10400            Ok(())
10401        }
10402    }
10403
10404    impl ConnectionTransferPeriodicAdvertisingSyncRequest {
10405        #[inline(always)]
10406        fn max_ordinal_present(&self) -> u64 {
10407            if let Some(_) = self.service_data {
10408                return 2;
10409            }
10410            if let Some(_) = self.sync_id {
10411                return 1;
10412            }
10413            0
10414        }
10415    }
10416
10417    impl fidl::encoding::ValueTypeMarker for ConnectionTransferPeriodicAdvertisingSyncRequest {
10418        type Borrowed<'a> = &'a Self;
10419        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10420            value
10421        }
10422    }
10423
10424    unsafe impl fidl::encoding::TypeMarker for ConnectionTransferPeriodicAdvertisingSyncRequest {
10425        type Owned = Self;
10426
10427        #[inline(always)]
10428        fn inline_align(_context: fidl::encoding::Context) -> usize {
10429            8
10430        }
10431
10432        #[inline(always)]
10433        fn inline_size(_context: fidl::encoding::Context) -> usize {
10434            16
10435        }
10436    }
10437
10438    unsafe impl<D: fidl::encoding::ResourceDialect>
10439        fidl::encoding::Encode<ConnectionTransferPeriodicAdvertisingSyncRequest, D>
10440        for &ConnectionTransferPeriodicAdvertisingSyncRequest
10441    {
10442        unsafe fn encode(
10443            self,
10444            encoder: &mut fidl::encoding::Encoder<'_, D>,
10445            offset: usize,
10446            mut depth: fidl::encoding::Depth,
10447        ) -> fidl::Result<()> {
10448            encoder.debug_check_bounds::<ConnectionTransferPeriodicAdvertisingSyncRequest>(offset);
10449            // Vector header
10450            let max_ordinal: u64 = self.max_ordinal_present();
10451            encoder.write_num(max_ordinal, offset);
10452            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10453            // Calling encoder.out_of_line_offset(0) is not allowed.
10454            if max_ordinal == 0 {
10455                return Ok(());
10456            }
10457            depth.increment()?;
10458            let envelope_size = 8;
10459            let bytes_len = max_ordinal as usize * envelope_size;
10460            #[allow(unused_variables)]
10461            let offset = encoder.out_of_line_offset(bytes_len);
10462            let mut _prev_end_offset: usize = 0;
10463            if 1 > max_ordinal {
10464                return Ok(());
10465            }
10466
10467            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10468            // are envelope_size bytes.
10469            let cur_offset: usize = (1 - 1) * envelope_size;
10470
10471            // Zero reserved fields.
10472            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10473
10474            // Safety:
10475            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10476            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10477            //   envelope_size bytes, there is always sufficient room.
10478            fidl::encoding::encode_in_envelope_optional::<PeriodicAdvertisingSyncId, D>(
10479                self.sync_id
10480                    .as_ref()
10481                    .map(<PeriodicAdvertisingSyncId as fidl::encoding::ValueTypeMarker>::borrow),
10482                encoder,
10483                offset + cur_offset,
10484                depth,
10485            )?;
10486
10487            _prev_end_offset = cur_offset + envelope_size;
10488            if 2 > max_ordinal {
10489                return Ok(());
10490            }
10491
10492            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10493            // are envelope_size bytes.
10494            let cur_offset: usize = (2 - 1) * envelope_size;
10495
10496            // Zero reserved fields.
10497            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10498
10499            // Safety:
10500            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10501            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10502            //   envelope_size bytes, there is always sufficient room.
10503            fidl::encoding::encode_in_envelope_optional::<u16, D>(
10504                self.service_data.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10505                encoder,
10506                offset + cur_offset,
10507                depth,
10508            )?;
10509
10510            _prev_end_offset = cur_offset + envelope_size;
10511
10512            Ok(())
10513        }
10514    }
10515
10516    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
10517        for ConnectionTransferPeriodicAdvertisingSyncRequest
10518    {
10519        #[inline(always)]
10520        fn new_empty() -> Self {
10521            Self::default()
10522        }
10523
10524        unsafe fn decode(
10525            &mut self,
10526            decoder: &mut fidl::encoding::Decoder<'_, D>,
10527            offset: usize,
10528            mut depth: fidl::encoding::Depth,
10529        ) -> fidl::Result<()> {
10530            decoder.debug_check_bounds::<Self>(offset);
10531            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10532                None => return Err(fidl::Error::NotNullable),
10533                Some(len) => len,
10534            };
10535            // Calling decoder.out_of_line_offset(0) is not allowed.
10536            if len == 0 {
10537                return Ok(());
10538            };
10539            depth.increment()?;
10540            let envelope_size = 8;
10541            let bytes_len = len * envelope_size;
10542            let offset = decoder.out_of_line_offset(bytes_len)?;
10543            // Decode the envelope for each type.
10544            let mut _next_ordinal_to_read = 0;
10545            let mut next_offset = offset;
10546            let end_offset = offset + bytes_len;
10547            _next_ordinal_to_read += 1;
10548            if next_offset >= end_offset {
10549                return Ok(());
10550            }
10551
10552            // Decode unknown envelopes for gaps in ordinals.
10553            while _next_ordinal_to_read < 1 {
10554                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10555                _next_ordinal_to_read += 1;
10556                next_offset += envelope_size;
10557            }
10558
10559            let next_out_of_line = decoder.next_out_of_line();
10560            let handles_before = decoder.remaining_handles();
10561            if let Some((inlined, num_bytes, num_handles)) =
10562                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10563            {
10564                let member_inline_size =
10565                    <PeriodicAdvertisingSyncId as fidl::encoding::TypeMarker>::inline_size(
10566                        decoder.context,
10567                    );
10568                if inlined != (member_inline_size <= 4) {
10569                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10570                }
10571                let inner_offset;
10572                let mut inner_depth = depth.clone();
10573                if inlined {
10574                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10575                    inner_offset = next_offset;
10576                } else {
10577                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10578                    inner_depth.increment()?;
10579                }
10580                let val_ref = self
10581                    .sync_id
10582                    .get_or_insert_with(|| fidl::new_empty!(PeriodicAdvertisingSyncId, D));
10583                fidl::decode!(
10584                    PeriodicAdvertisingSyncId,
10585                    D,
10586                    val_ref,
10587                    decoder,
10588                    inner_offset,
10589                    inner_depth
10590                )?;
10591                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10592                {
10593                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10594                }
10595                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10596                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10597                }
10598            }
10599
10600            next_offset += envelope_size;
10601            _next_ordinal_to_read += 1;
10602            if next_offset >= end_offset {
10603                return Ok(());
10604            }
10605
10606            // Decode unknown envelopes for gaps in ordinals.
10607            while _next_ordinal_to_read < 2 {
10608                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10609                _next_ordinal_to_read += 1;
10610                next_offset += envelope_size;
10611            }
10612
10613            let next_out_of_line = decoder.next_out_of_line();
10614            let handles_before = decoder.remaining_handles();
10615            if let Some((inlined, num_bytes, num_handles)) =
10616                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10617            {
10618                let member_inline_size =
10619                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10620                if inlined != (member_inline_size <= 4) {
10621                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10622                }
10623                let inner_offset;
10624                let mut inner_depth = depth.clone();
10625                if inlined {
10626                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10627                    inner_offset = next_offset;
10628                } else {
10629                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10630                    inner_depth.increment()?;
10631                }
10632                let val_ref = self.service_data.get_or_insert_with(|| fidl::new_empty!(u16, D));
10633                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
10634                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10635                {
10636                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10637                }
10638                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10639                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10640                }
10641            }
10642
10643            next_offset += envelope_size;
10644
10645            // Decode the remaining unknown envelopes.
10646            while next_offset < end_offset {
10647                _next_ordinal_to_read += 1;
10648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10649                next_offset += envelope_size;
10650            }
10651
10652            Ok(())
10653        }
10654    }
10655
10656    impl Extended {
10657        #[inline(always)]
10658        fn max_ordinal_present(&self) -> u64 {
10659            0
10660        }
10661    }
10662
10663    impl fidl::encoding::ValueTypeMarker for Extended {
10664        type Borrowed<'a> = &'a Self;
10665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10666            value
10667        }
10668    }
10669
10670    unsafe impl fidl::encoding::TypeMarker for Extended {
10671        type Owned = Self;
10672
10673        #[inline(always)]
10674        fn inline_align(_context: fidl::encoding::Context) -> usize {
10675            8
10676        }
10677
10678        #[inline(always)]
10679        fn inline_size(_context: fidl::encoding::Context) -> usize {
10680            16
10681        }
10682    }
10683
10684    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Extended, D> for &Extended {
10685        unsafe fn encode(
10686            self,
10687            encoder: &mut fidl::encoding::Encoder<'_, D>,
10688            offset: usize,
10689            mut depth: fidl::encoding::Depth,
10690        ) -> fidl::Result<()> {
10691            encoder.debug_check_bounds::<Extended>(offset);
10692            // Vector header
10693            let max_ordinal: u64 = self.max_ordinal_present();
10694            encoder.write_num(max_ordinal, offset);
10695            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10696            // Calling encoder.out_of_line_offset(0) is not allowed.
10697            if max_ordinal == 0 {
10698                return Ok(());
10699            }
10700            depth.increment()?;
10701            let envelope_size = 8;
10702            let bytes_len = max_ordinal as usize * envelope_size;
10703            #[allow(unused_variables)]
10704            let offset = encoder.out_of_line_offset(bytes_len);
10705            let mut _prev_end_offset: usize = 0;
10706
10707            Ok(())
10708        }
10709    }
10710
10711    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Extended {
10712        #[inline(always)]
10713        fn new_empty() -> Self {
10714            Self::default()
10715        }
10716
10717        unsafe fn decode(
10718            &mut self,
10719            decoder: &mut fidl::encoding::Decoder<'_, D>,
10720            offset: usize,
10721            mut depth: fidl::encoding::Depth,
10722        ) -> fidl::Result<()> {
10723            decoder.debug_check_bounds::<Self>(offset);
10724            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10725                None => return Err(fidl::Error::NotNullable),
10726                Some(len) => len,
10727            };
10728            // Calling decoder.out_of_line_offset(0) is not allowed.
10729            if len == 0 {
10730                return Ok(());
10731            };
10732            depth.increment()?;
10733            let envelope_size = 8;
10734            let bytes_len = len * envelope_size;
10735            let offset = decoder.out_of_line_offset(bytes_len)?;
10736            // Decode the envelope for each type.
10737            let mut _next_ordinal_to_read = 0;
10738            let mut next_offset = offset;
10739            let end_offset = offset + bytes_len;
10740
10741            // Decode the remaining unknown envelopes.
10742            while next_offset < end_offset {
10743                _next_ordinal_to_read += 1;
10744                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10745                next_offset += envelope_size;
10746            }
10747
10748            Ok(())
10749        }
10750    }
10751
10752    impl Filter {
10753        #[inline(always)]
10754        fn max_ordinal_present(&self) -> u64 {
10755            if let Some(_) = self.solicitation_uuid {
10756                return 7;
10757            }
10758            if let Some(_) = self.max_path_loss {
10759                return 6;
10760            }
10761            if let Some(_) = self.name {
10762                return 5;
10763            }
10764            if let Some(_) = self.connectable {
10765                return 4;
10766            }
10767            if let Some(_) = self.manufacturer_id {
10768                return 3;
10769            }
10770            if let Some(_) = self.service_data_uuid {
10771                return 2;
10772            }
10773            if let Some(_) = self.service_uuid {
10774                return 1;
10775            }
10776            0
10777        }
10778    }
10779
10780    impl fidl::encoding::ValueTypeMarker for Filter {
10781        type Borrowed<'a> = &'a Self;
10782        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10783            value
10784        }
10785    }
10786
10787    unsafe impl fidl::encoding::TypeMarker for Filter {
10788        type Owned = Self;
10789
10790        #[inline(always)]
10791        fn inline_align(_context: fidl::encoding::Context) -> usize {
10792            8
10793        }
10794
10795        #[inline(always)]
10796        fn inline_size(_context: fidl::encoding::Context) -> usize {
10797            16
10798        }
10799    }
10800
10801    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Filter, D> for &Filter {
10802        unsafe fn encode(
10803            self,
10804            encoder: &mut fidl::encoding::Encoder<'_, D>,
10805            offset: usize,
10806            mut depth: fidl::encoding::Depth,
10807        ) -> fidl::Result<()> {
10808            encoder.debug_check_bounds::<Filter>(offset);
10809            // Vector header
10810            let max_ordinal: u64 = self.max_ordinal_present();
10811            encoder.write_num(max_ordinal, offset);
10812            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10813            // Calling encoder.out_of_line_offset(0) is not allowed.
10814            if max_ordinal == 0 {
10815                return Ok(());
10816            }
10817            depth.increment()?;
10818            let envelope_size = 8;
10819            let bytes_len = max_ordinal as usize * envelope_size;
10820            #[allow(unused_variables)]
10821            let offset = encoder.out_of_line_offset(bytes_len);
10822            let mut _prev_end_offset: usize = 0;
10823            if 1 > max_ordinal {
10824                return Ok(());
10825            }
10826
10827            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10828            // are envelope_size bytes.
10829            let cur_offset: usize = (1 - 1) * envelope_size;
10830
10831            // Zero reserved fields.
10832            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10833
10834            // Safety:
10835            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10836            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10837            //   envelope_size bytes, there is always sufficient room.
10838            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Uuid, D>(
10839            self.service_uuid.as_ref().map(<fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::ValueTypeMarker>::borrow),
10840            encoder, offset + cur_offset, depth
10841        )?;
10842
10843            _prev_end_offset = cur_offset + envelope_size;
10844            if 2 > max_ordinal {
10845                return Ok(());
10846            }
10847
10848            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10849            // are envelope_size bytes.
10850            let cur_offset: usize = (2 - 1) * envelope_size;
10851
10852            // Zero reserved fields.
10853            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10854
10855            // Safety:
10856            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10857            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10858            //   envelope_size bytes, there is always sufficient room.
10859            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Uuid, D>(
10860            self.service_data_uuid.as_ref().map(<fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::ValueTypeMarker>::borrow),
10861            encoder, offset + cur_offset, depth
10862        )?;
10863
10864            _prev_end_offset = cur_offset + envelope_size;
10865            if 3 > max_ordinal {
10866                return Ok(());
10867            }
10868
10869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10870            // are envelope_size bytes.
10871            let cur_offset: usize = (3 - 1) * envelope_size;
10872
10873            // Zero reserved fields.
10874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10875
10876            // Safety:
10877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10879            //   envelope_size bytes, there is always sufficient room.
10880            fidl::encoding::encode_in_envelope_optional::<u16, D>(
10881                self.manufacturer_id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
10882                encoder,
10883                offset + cur_offset,
10884                depth,
10885            )?;
10886
10887            _prev_end_offset = cur_offset + envelope_size;
10888            if 4 > max_ordinal {
10889                return Ok(());
10890            }
10891
10892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10893            // are envelope_size bytes.
10894            let cur_offset: usize = (4 - 1) * envelope_size;
10895
10896            // Zero reserved fields.
10897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10898
10899            // Safety:
10900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10902            //   envelope_size bytes, there is always sufficient room.
10903            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10904                self.connectable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10905                encoder,
10906                offset + cur_offset,
10907                depth,
10908            )?;
10909
10910            _prev_end_offset = cur_offset + envelope_size;
10911            if 5 > max_ordinal {
10912                return Ok(());
10913            }
10914
10915            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10916            // are envelope_size bytes.
10917            let cur_offset: usize = (5 - 1) * envelope_size;
10918
10919            // Zero reserved fields.
10920            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10921
10922            // Safety:
10923            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10924            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10925            //   envelope_size bytes, there is always sufficient room.
10926            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<248>, D>(
10927                self.name.as_ref().map(
10928                    <fidl::encoding::BoundedString<248> as fidl::encoding::ValueTypeMarker>::borrow,
10929                ),
10930                encoder,
10931                offset + cur_offset,
10932                depth,
10933            )?;
10934
10935            _prev_end_offset = cur_offset + envelope_size;
10936            if 6 > max_ordinal {
10937                return Ok(());
10938            }
10939
10940            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10941            // are envelope_size bytes.
10942            let cur_offset: usize = (6 - 1) * envelope_size;
10943
10944            // Zero reserved fields.
10945            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10946
10947            // Safety:
10948            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10949            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10950            //   envelope_size bytes, there is always sufficient room.
10951            fidl::encoding::encode_in_envelope_optional::<i8, D>(
10952                self.max_path_loss.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
10953                encoder,
10954                offset + cur_offset,
10955                depth,
10956            )?;
10957
10958            _prev_end_offset = cur_offset + envelope_size;
10959            if 7 > max_ordinal {
10960                return Ok(());
10961            }
10962
10963            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10964            // are envelope_size bytes.
10965            let cur_offset: usize = (7 - 1) * envelope_size;
10966
10967            // Zero reserved fields.
10968            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10969
10970            // Safety:
10971            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10972            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10973            //   envelope_size bytes, there is always sufficient room.
10974            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Uuid, D>(
10975            self.solicitation_uuid.as_ref().map(<fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::ValueTypeMarker>::borrow),
10976            encoder, offset + cur_offset, depth
10977        )?;
10978
10979            _prev_end_offset = cur_offset + envelope_size;
10980
10981            Ok(())
10982        }
10983    }
10984
10985    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Filter {
10986        #[inline(always)]
10987        fn new_empty() -> Self {
10988            Self::default()
10989        }
10990
10991        unsafe fn decode(
10992            &mut self,
10993            decoder: &mut fidl::encoding::Decoder<'_, D>,
10994            offset: usize,
10995            mut depth: fidl::encoding::Depth,
10996        ) -> fidl::Result<()> {
10997            decoder.debug_check_bounds::<Self>(offset);
10998            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10999                None => return Err(fidl::Error::NotNullable),
11000                Some(len) => len,
11001            };
11002            // Calling decoder.out_of_line_offset(0) is not allowed.
11003            if len == 0 {
11004                return Ok(());
11005            };
11006            depth.increment()?;
11007            let envelope_size = 8;
11008            let bytes_len = len * envelope_size;
11009            let offset = decoder.out_of_line_offset(bytes_len)?;
11010            // Decode the envelope for each type.
11011            let mut _next_ordinal_to_read = 0;
11012            let mut next_offset = offset;
11013            let end_offset = offset + bytes_len;
11014            _next_ordinal_to_read += 1;
11015            if next_offset >= end_offset {
11016                return Ok(());
11017            }
11018
11019            // Decode unknown envelopes for gaps in ordinals.
11020            while _next_ordinal_to_read < 1 {
11021                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11022                _next_ordinal_to_read += 1;
11023                next_offset += envelope_size;
11024            }
11025
11026            let next_out_of_line = decoder.next_out_of_line();
11027            let handles_before = decoder.remaining_handles();
11028            if let Some((inlined, num_bytes, num_handles)) =
11029                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11030            {
11031                let member_inline_size = <fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11032                if inlined != (member_inline_size <= 4) {
11033                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11034                }
11035                let inner_offset;
11036                let mut inner_depth = depth.clone();
11037                if inlined {
11038                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11039                    inner_offset = next_offset;
11040                } else {
11041                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11042                    inner_depth.increment()?;
11043                }
11044                let val_ref = self.service_uuid.get_or_insert_with(|| {
11045                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Uuid, D)
11046                });
11047                fidl::decode!(
11048                    fidl_fuchsia_bluetooth__common::Uuid,
11049                    D,
11050                    val_ref,
11051                    decoder,
11052                    inner_offset,
11053                    inner_depth
11054                )?;
11055                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11056                {
11057                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11058                }
11059                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11060                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11061                }
11062            }
11063
11064            next_offset += envelope_size;
11065            _next_ordinal_to_read += 1;
11066            if next_offset >= end_offset {
11067                return Ok(());
11068            }
11069
11070            // Decode unknown envelopes for gaps in ordinals.
11071            while _next_ordinal_to_read < 2 {
11072                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11073                _next_ordinal_to_read += 1;
11074                next_offset += envelope_size;
11075            }
11076
11077            let next_out_of_line = decoder.next_out_of_line();
11078            let handles_before = decoder.remaining_handles();
11079            if let Some((inlined, num_bytes, num_handles)) =
11080                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11081            {
11082                let member_inline_size = <fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11083                if inlined != (member_inline_size <= 4) {
11084                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11085                }
11086                let inner_offset;
11087                let mut inner_depth = depth.clone();
11088                if inlined {
11089                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11090                    inner_offset = next_offset;
11091                } else {
11092                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11093                    inner_depth.increment()?;
11094                }
11095                let val_ref = self.service_data_uuid.get_or_insert_with(|| {
11096                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Uuid, D)
11097                });
11098                fidl::decode!(
11099                    fidl_fuchsia_bluetooth__common::Uuid,
11100                    D,
11101                    val_ref,
11102                    decoder,
11103                    inner_offset,
11104                    inner_depth
11105                )?;
11106                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11107                {
11108                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11109                }
11110                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11111                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11112                }
11113            }
11114
11115            next_offset += envelope_size;
11116            _next_ordinal_to_read += 1;
11117            if next_offset >= end_offset {
11118                return Ok(());
11119            }
11120
11121            // Decode unknown envelopes for gaps in ordinals.
11122            while _next_ordinal_to_read < 3 {
11123                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11124                _next_ordinal_to_read += 1;
11125                next_offset += envelope_size;
11126            }
11127
11128            let next_out_of_line = decoder.next_out_of_line();
11129            let handles_before = decoder.remaining_handles();
11130            if let Some((inlined, num_bytes, num_handles)) =
11131                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11132            {
11133                let member_inline_size =
11134                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11135                if inlined != (member_inline_size <= 4) {
11136                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11137                }
11138                let inner_offset;
11139                let mut inner_depth = depth.clone();
11140                if inlined {
11141                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11142                    inner_offset = next_offset;
11143                } else {
11144                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11145                    inner_depth.increment()?;
11146                }
11147                let val_ref = self.manufacturer_id.get_or_insert_with(|| fidl::new_empty!(u16, D));
11148                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
11149                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11150                {
11151                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11152                }
11153                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11154                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11155                }
11156            }
11157
11158            next_offset += envelope_size;
11159            _next_ordinal_to_read += 1;
11160            if next_offset >= end_offset {
11161                return Ok(());
11162            }
11163
11164            // Decode unknown envelopes for gaps in ordinals.
11165            while _next_ordinal_to_read < 4 {
11166                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11167                _next_ordinal_to_read += 1;
11168                next_offset += envelope_size;
11169            }
11170
11171            let next_out_of_line = decoder.next_out_of_line();
11172            let handles_before = decoder.remaining_handles();
11173            if let Some((inlined, num_bytes, num_handles)) =
11174                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11175            {
11176                let member_inline_size =
11177                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11178                if inlined != (member_inline_size <= 4) {
11179                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11180                }
11181                let inner_offset;
11182                let mut inner_depth = depth.clone();
11183                if inlined {
11184                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11185                    inner_offset = next_offset;
11186                } else {
11187                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11188                    inner_depth.increment()?;
11189                }
11190                let val_ref = self.connectable.get_or_insert_with(|| fidl::new_empty!(bool, D));
11191                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11192                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11193                {
11194                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11195                }
11196                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11197                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11198                }
11199            }
11200
11201            next_offset += envelope_size;
11202            _next_ordinal_to_read += 1;
11203            if next_offset >= end_offset {
11204                return Ok(());
11205            }
11206
11207            // Decode unknown envelopes for gaps in ordinals.
11208            while _next_ordinal_to_read < 5 {
11209                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11210                _next_ordinal_to_read += 1;
11211                next_offset += envelope_size;
11212            }
11213
11214            let next_out_of_line = decoder.next_out_of_line();
11215            let handles_before = decoder.remaining_handles();
11216            if let Some((inlined, num_bytes, num_handles)) =
11217                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11218            {
11219                let member_inline_size =
11220                    <fidl::encoding::BoundedString<248> as fidl::encoding::TypeMarker>::inline_size(
11221                        decoder.context,
11222                    );
11223                if inlined != (member_inline_size <= 4) {
11224                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11225                }
11226                let inner_offset;
11227                let mut inner_depth = depth.clone();
11228                if inlined {
11229                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11230                    inner_offset = next_offset;
11231                } else {
11232                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11233                    inner_depth.increment()?;
11234                }
11235                let val_ref = self
11236                    .name
11237                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<248>, D));
11238                fidl::decode!(
11239                    fidl::encoding::BoundedString<248>,
11240                    D,
11241                    val_ref,
11242                    decoder,
11243                    inner_offset,
11244                    inner_depth
11245                )?;
11246                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11247                {
11248                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11249                }
11250                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11251                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11252                }
11253            }
11254
11255            next_offset += envelope_size;
11256            _next_ordinal_to_read += 1;
11257            if next_offset >= end_offset {
11258                return Ok(());
11259            }
11260
11261            // Decode unknown envelopes for gaps in ordinals.
11262            while _next_ordinal_to_read < 6 {
11263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11264                _next_ordinal_to_read += 1;
11265                next_offset += envelope_size;
11266            }
11267
11268            let next_out_of_line = decoder.next_out_of_line();
11269            let handles_before = decoder.remaining_handles();
11270            if let Some((inlined, num_bytes, num_handles)) =
11271                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11272            {
11273                let member_inline_size =
11274                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11275                if inlined != (member_inline_size <= 4) {
11276                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11277                }
11278                let inner_offset;
11279                let mut inner_depth = depth.clone();
11280                if inlined {
11281                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11282                    inner_offset = next_offset;
11283                } else {
11284                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11285                    inner_depth.increment()?;
11286                }
11287                let val_ref = self.max_path_loss.get_or_insert_with(|| fidl::new_empty!(i8, D));
11288                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
11289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11290                {
11291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11292                }
11293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11295                }
11296            }
11297
11298            next_offset += envelope_size;
11299            _next_ordinal_to_read += 1;
11300            if next_offset >= end_offset {
11301                return Ok(());
11302            }
11303
11304            // Decode unknown envelopes for gaps in ordinals.
11305            while _next_ordinal_to_read < 7 {
11306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11307                _next_ordinal_to_read += 1;
11308                next_offset += envelope_size;
11309            }
11310
11311            let next_out_of_line = decoder.next_out_of_line();
11312            let handles_before = decoder.remaining_handles();
11313            if let Some((inlined, num_bytes, num_handles)) =
11314                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11315            {
11316                let member_inline_size = <fidl_fuchsia_bluetooth__common::Uuid as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11317                if inlined != (member_inline_size <= 4) {
11318                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11319                }
11320                let inner_offset;
11321                let mut inner_depth = depth.clone();
11322                if inlined {
11323                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11324                    inner_offset = next_offset;
11325                } else {
11326                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11327                    inner_depth.increment()?;
11328                }
11329                let val_ref = self.solicitation_uuid.get_or_insert_with(|| {
11330                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Uuid, D)
11331                });
11332                fidl::decode!(
11333                    fidl_fuchsia_bluetooth__common::Uuid,
11334                    D,
11335                    val_ref,
11336                    decoder,
11337                    inner_offset,
11338                    inner_depth
11339                )?;
11340                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11341                {
11342                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11343                }
11344                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11345                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11346                }
11347            }
11348
11349            next_offset += envelope_size;
11350
11351            // Decode the remaining unknown envelopes.
11352            while next_offset < end_offset {
11353                _next_ordinal_to_read += 1;
11354                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11355                next_offset += envelope_size;
11356            }
11357
11358            Ok(())
11359        }
11360    }
11361
11362    impl IsochronousStreamOnEstablishedRequest {
11363        #[inline(always)]
11364        fn max_ordinal_present(&self) -> u64 {
11365            if let Some(_) = self.established_params {
11366                return 2;
11367            }
11368            if let Some(_) = self.result {
11369                return 1;
11370            }
11371            0
11372        }
11373    }
11374
11375    impl fidl::encoding::ValueTypeMarker for IsochronousStreamOnEstablishedRequest {
11376        type Borrowed<'a> = &'a Self;
11377        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11378            value
11379        }
11380    }
11381
11382    unsafe impl fidl::encoding::TypeMarker for IsochronousStreamOnEstablishedRequest {
11383        type Owned = Self;
11384
11385        #[inline(always)]
11386        fn inline_align(_context: fidl::encoding::Context) -> usize {
11387            8
11388        }
11389
11390        #[inline(always)]
11391        fn inline_size(_context: fidl::encoding::Context) -> usize {
11392            16
11393        }
11394    }
11395
11396    unsafe impl<D: fidl::encoding::ResourceDialect>
11397        fidl::encoding::Encode<IsochronousStreamOnEstablishedRequest, D>
11398        for &IsochronousStreamOnEstablishedRequest
11399    {
11400        unsafe fn encode(
11401            self,
11402            encoder: &mut fidl::encoding::Encoder<'_, D>,
11403            offset: usize,
11404            mut depth: fidl::encoding::Depth,
11405        ) -> fidl::Result<()> {
11406            encoder.debug_check_bounds::<IsochronousStreamOnEstablishedRequest>(offset);
11407            // Vector header
11408            let max_ordinal: u64 = self.max_ordinal_present();
11409            encoder.write_num(max_ordinal, offset);
11410            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11411            // Calling encoder.out_of_line_offset(0) is not allowed.
11412            if max_ordinal == 0 {
11413                return Ok(());
11414            }
11415            depth.increment()?;
11416            let envelope_size = 8;
11417            let bytes_len = max_ordinal as usize * envelope_size;
11418            #[allow(unused_variables)]
11419            let offset = encoder.out_of_line_offset(bytes_len);
11420            let mut _prev_end_offset: usize = 0;
11421            if 1 > max_ordinal {
11422                return Ok(());
11423            }
11424
11425            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11426            // are envelope_size bytes.
11427            let cur_offset: usize = (1 - 1) * envelope_size;
11428
11429            // Zero reserved fields.
11430            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11431
11432            // Safety:
11433            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11434            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11435            //   envelope_size bytes, there is always sufficient room.
11436            fidl::encoding::encode_in_envelope_optional::<i32, D>(
11437                self.result.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
11438                encoder,
11439                offset + cur_offset,
11440                depth,
11441            )?;
11442
11443            _prev_end_offset = cur_offset + envelope_size;
11444            if 2 > max_ordinal {
11445                return Ok(());
11446            }
11447
11448            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11449            // are envelope_size bytes.
11450            let cur_offset: usize = (2 - 1) * envelope_size;
11451
11452            // Zero reserved fields.
11453            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11454
11455            // Safety:
11456            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11457            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11458            //   envelope_size bytes, there is always sufficient room.
11459            fidl::encoding::encode_in_envelope_optional::<CisEstablishedParameters, D>(
11460                self.established_params
11461                    .as_ref()
11462                    .map(<CisEstablishedParameters as fidl::encoding::ValueTypeMarker>::borrow),
11463                encoder,
11464                offset + cur_offset,
11465                depth,
11466            )?;
11467
11468            _prev_end_offset = cur_offset + envelope_size;
11469
11470            Ok(())
11471        }
11472    }
11473
11474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11475        for IsochronousStreamOnEstablishedRequest
11476    {
11477        #[inline(always)]
11478        fn new_empty() -> Self {
11479            Self::default()
11480        }
11481
11482        unsafe fn decode(
11483            &mut self,
11484            decoder: &mut fidl::encoding::Decoder<'_, D>,
11485            offset: usize,
11486            mut depth: fidl::encoding::Depth,
11487        ) -> fidl::Result<()> {
11488            decoder.debug_check_bounds::<Self>(offset);
11489            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11490                None => return Err(fidl::Error::NotNullable),
11491                Some(len) => len,
11492            };
11493            // Calling decoder.out_of_line_offset(0) is not allowed.
11494            if len == 0 {
11495                return Ok(());
11496            };
11497            depth.increment()?;
11498            let envelope_size = 8;
11499            let bytes_len = len * envelope_size;
11500            let offset = decoder.out_of_line_offset(bytes_len)?;
11501            // Decode the envelope for each type.
11502            let mut _next_ordinal_to_read = 0;
11503            let mut next_offset = offset;
11504            let end_offset = offset + bytes_len;
11505            _next_ordinal_to_read += 1;
11506            if next_offset >= end_offset {
11507                return Ok(());
11508            }
11509
11510            // Decode unknown envelopes for gaps in ordinals.
11511            while _next_ordinal_to_read < 1 {
11512                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11513                _next_ordinal_to_read += 1;
11514                next_offset += envelope_size;
11515            }
11516
11517            let next_out_of_line = decoder.next_out_of_line();
11518            let handles_before = decoder.remaining_handles();
11519            if let Some((inlined, num_bytes, num_handles)) =
11520                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11521            {
11522                let member_inline_size =
11523                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11524                if inlined != (member_inline_size <= 4) {
11525                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11526                }
11527                let inner_offset;
11528                let mut inner_depth = depth.clone();
11529                if inlined {
11530                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11531                    inner_offset = next_offset;
11532                } else {
11533                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11534                    inner_depth.increment()?;
11535                }
11536                let val_ref = self.result.get_or_insert_with(|| fidl::new_empty!(i32, D));
11537                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
11538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11539                {
11540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11541                }
11542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11544                }
11545            }
11546
11547            next_offset += envelope_size;
11548            _next_ordinal_to_read += 1;
11549            if next_offset >= end_offset {
11550                return Ok(());
11551            }
11552
11553            // Decode unknown envelopes for gaps in ordinals.
11554            while _next_ordinal_to_read < 2 {
11555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11556                _next_ordinal_to_read += 1;
11557                next_offset += envelope_size;
11558            }
11559
11560            let next_out_of_line = decoder.next_out_of_line();
11561            let handles_before = decoder.remaining_handles();
11562            if let Some((inlined, num_bytes, num_handles)) =
11563                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11564            {
11565                let member_inline_size =
11566                    <CisEstablishedParameters as fidl::encoding::TypeMarker>::inline_size(
11567                        decoder.context,
11568                    );
11569                if inlined != (member_inline_size <= 4) {
11570                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11571                }
11572                let inner_offset;
11573                let mut inner_depth = depth.clone();
11574                if inlined {
11575                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11576                    inner_offset = next_offset;
11577                } else {
11578                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11579                    inner_depth.increment()?;
11580                }
11581                let val_ref = self
11582                    .established_params
11583                    .get_or_insert_with(|| fidl::new_empty!(CisEstablishedParameters, D));
11584                fidl::decode!(
11585                    CisEstablishedParameters,
11586                    D,
11587                    val_ref,
11588                    decoder,
11589                    inner_offset,
11590                    inner_depth
11591                )?;
11592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11593                {
11594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11595                }
11596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11598                }
11599            }
11600
11601            next_offset += envelope_size;
11602
11603            // Decode the remaining unknown envelopes.
11604            while next_offset < end_offset {
11605                _next_ordinal_to_read += 1;
11606                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11607                next_offset += envelope_size;
11608            }
11609
11610            Ok(())
11611        }
11612    }
11613
11614    impl IsochronousStreamSetupDataPathRequest {
11615        #[inline(always)]
11616        fn max_ordinal_present(&self) -> u64 {
11617            if let Some(_) = self.controller_delay {
11618                return 3;
11619            }
11620            if let Some(_) = self.codec_attributes {
11621                return 2;
11622            }
11623            if let Some(_) = self.data_direction {
11624                return 1;
11625            }
11626            0
11627        }
11628    }
11629
11630    impl fidl::encoding::ValueTypeMarker for IsochronousStreamSetupDataPathRequest {
11631        type Borrowed<'a> = &'a Self;
11632        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11633            value
11634        }
11635    }
11636
11637    unsafe impl fidl::encoding::TypeMarker for IsochronousStreamSetupDataPathRequest {
11638        type Owned = Self;
11639
11640        #[inline(always)]
11641        fn inline_align(_context: fidl::encoding::Context) -> usize {
11642            8
11643        }
11644
11645        #[inline(always)]
11646        fn inline_size(_context: fidl::encoding::Context) -> usize {
11647            16
11648        }
11649    }
11650
11651    unsafe impl<D: fidl::encoding::ResourceDialect>
11652        fidl::encoding::Encode<IsochronousStreamSetupDataPathRequest, D>
11653        for &IsochronousStreamSetupDataPathRequest
11654    {
11655        unsafe fn encode(
11656            self,
11657            encoder: &mut fidl::encoding::Encoder<'_, D>,
11658            offset: usize,
11659            mut depth: fidl::encoding::Depth,
11660        ) -> fidl::Result<()> {
11661            encoder.debug_check_bounds::<IsochronousStreamSetupDataPathRequest>(offset);
11662            // Vector header
11663            let max_ordinal: u64 = self.max_ordinal_present();
11664            encoder.write_num(max_ordinal, offset);
11665            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11666            // Calling encoder.out_of_line_offset(0) is not allowed.
11667            if max_ordinal == 0 {
11668                return Ok(());
11669            }
11670            depth.increment()?;
11671            let envelope_size = 8;
11672            let bytes_len = max_ordinal as usize * envelope_size;
11673            #[allow(unused_variables)]
11674            let offset = encoder.out_of_line_offset(bytes_len);
11675            let mut _prev_end_offset: usize = 0;
11676            if 1 > max_ordinal {
11677                return Ok(());
11678            }
11679
11680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11681            // are envelope_size bytes.
11682            let cur_offset: usize = (1 - 1) * envelope_size;
11683
11684            // Zero reserved fields.
11685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11686
11687            // Safety:
11688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11690            //   envelope_size bytes, there is always sufficient room.
11691            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::DataDirection, D>(
11692            self.data_direction.as_ref().map(<fidl_fuchsia_bluetooth__common::DataDirection as fidl::encoding::ValueTypeMarker>::borrow),
11693            encoder, offset + cur_offset, depth
11694        )?;
11695
11696            _prev_end_offset = cur_offset + envelope_size;
11697            if 2 > max_ordinal {
11698                return Ok(());
11699            }
11700
11701            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11702            // are envelope_size bytes.
11703            let cur_offset: usize = (2 - 1) * envelope_size;
11704
11705            // Zero reserved fields.
11706            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11707
11708            // Safety:
11709            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11710            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11711            //   envelope_size bytes, there is always sufficient room.
11712            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::CodecAttributes, D>(
11713            self.codec_attributes.as_ref().map(<fidl_fuchsia_bluetooth__common::CodecAttributes as fidl::encoding::ValueTypeMarker>::borrow),
11714            encoder, offset + cur_offset, depth
11715        )?;
11716
11717            _prev_end_offset = cur_offset + envelope_size;
11718            if 3 > max_ordinal {
11719                return Ok(());
11720            }
11721
11722            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11723            // are envelope_size bytes.
11724            let cur_offset: usize = (3 - 1) * envelope_size;
11725
11726            // Zero reserved fields.
11727            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11728
11729            // Safety:
11730            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11731            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11732            //   envelope_size bytes, there is always sufficient room.
11733            fidl::encoding::encode_in_envelope_optional::<i64, D>(
11734                self.controller_delay
11735                    .as_ref()
11736                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
11737                encoder,
11738                offset + cur_offset,
11739                depth,
11740            )?;
11741
11742            _prev_end_offset = cur_offset + envelope_size;
11743
11744            Ok(())
11745        }
11746    }
11747
11748    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
11749        for IsochronousStreamSetupDataPathRequest
11750    {
11751        #[inline(always)]
11752        fn new_empty() -> Self {
11753            Self::default()
11754        }
11755
11756        unsafe fn decode(
11757            &mut self,
11758            decoder: &mut fidl::encoding::Decoder<'_, D>,
11759            offset: usize,
11760            mut depth: fidl::encoding::Depth,
11761        ) -> fidl::Result<()> {
11762            decoder.debug_check_bounds::<Self>(offset);
11763            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11764                None => return Err(fidl::Error::NotNullable),
11765                Some(len) => len,
11766            };
11767            // Calling decoder.out_of_line_offset(0) is not allowed.
11768            if len == 0 {
11769                return Ok(());
11770            };
11771            depth.increment()?;
11772            let envelope_size = 8;
11773            let bytes_len = len * envelope_size;
11774            let offset = decoder.out_of_line_offset(bytes_len)?;
11775            // Decode the envelope for each type.
11776            let mut _next_ordinal_to_read = 0;
11777            let mut next_offset = offset;
11778            let end_offset = offset + bytes_len;
11779            _next_ordinal_to_read += 1;
11780            if next_offset >= end_offset {
11781                return Ok(());
11782            }
11783
11784            // Decode unknown envelopes for gaps in ordinals.
11785            while _next_ordinal_to_read < 1 {
11786                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11787                _next_ordinal_to_read += 1;
11788                next_offset += envelope_size;
11789            }
11790
11791            let next_out_of_line = decoder.next_out_of_line();
11792            let handles_before = decoder.remaining_handles();
11793            if let Some((inlined, num_bytes, num_handles)) =
11794                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11795            {
11796                let member_inline_size = <fidl_fuchsia_bluetooth__common::DataDirection as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11797                if inlined != (member_inline_size <= 4) {
11798                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11799                }
11800                let inner_offset;
11801                let mut inner_depth = depth.clone();
11802                if inlined {
11803                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11804                    inner_offset = next_offset;
11805                } else {
11806                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11807                    inner_depth.increment()?;
11808                }
11809                let val_ref = self.data_direction.get_or_insert_with(|| {
11810                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::DataDirection, D)
11811                });
11812                fidl::decode!(
11813                    fidl_fuchsia_bluetooth__common::DataDirection,
11814                    D,
11815                    val_ref,
11816                    decoder,
11817                    inner_offset,
11818                    inner_depth
11819                )?;
11820                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11821                {
11822                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11823                }
11824                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11825                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11826                }
11827            }
11828
11829            next_offset += envelope_size;
11830            _next_ordinal_to_read += 1;
11831            if next_offset >= end_offset {
11832                return Ok(());
11833            }
11834
11835            // Decode unknown envelopes for gaps in ordinals.
11836            while _next_ordinal_to_read < 2 {
11837                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11838                _next_ordinal_to_read += 1;
11839                next_offset += envelope_size;
11840            }
11841
11842            let next_out_of_line = decoder.next_out_of_line();
11843            let handles_before = decoder.remaining_handles();
11844            if let Some((inlined, num_bytes, num_handles)) =
11845                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11846            {
11847                let member_inline_size = <fidl_fuchsia_bluetooth__common::CodecAttributes as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11848                if inlined != (member_inline_size <= 4) {
11849                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11850                }
11851                let inner_offset;
11852                let mut inner_depth = depth.clone();
11853                if inlined {
11854                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11855                    inner_offset = next_offset;
11856                } else {
11857                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11858                    inner_depth.increment()?;
11859                }
11860                let val_ref = self.codec_attributes.get_or_insert_with(|| {
11861                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::CodecAttributes, D)
11862                });
11863                fidl::decode!(
11864                    fidl_fuchsia_bluetooth__common::CodecAttributes,
11865                    D,
11866                    val_ref,
11867                    decoder,
11868                    inner_offset,
11869                    inner_depth
11870                )?;
11871                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11872                {
11873                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11874                }
11875                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11876                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11877                }
11878            }
11879
11880            next_offset += envelope_size;
11881            _next_ordinal_to_read += 1;
11882            if next_offset >= end_offset {
11883                return Ok(());
11884            }
11885
11886            // Decode unknown envelopes for gaps in ordinals.
11887            while _next_ordinal_to_read < 3 {
11888                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11889                _next_ordinal_to_read += 1;
11890                next_offset += envelope_size;
11891            }
11892
11893            let next_out_of_line = decoder.next_out_of_line();
11894            let handles_before = decoder.remaining_handles();
11895            if let Some((inlined, num_bytes, num_handles)) =
11896                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11897            {
11898                let member_inline_size =
11899                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11900                if inlined != (member_inline_size <= 4) {
11901                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11902                }
11903                let inner_offset;
11904                let mut inner_depth = depth.clone();
11905                if inlined {
11906                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11907                    inner_offset = next_offset;
11908                } else {
11909                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11910                    inner_depth.increment()?;
11911                }
11912                let val_ref = self.controller_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
11913                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
11914                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11915                {
11916                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11917                }
11918                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11919                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11920                }
11921            }
11922
11923            next_offset += envelope_size;
11924
11925            // Decode the remaining unknown envelopes.
11926            while next_offset < end_offset {
11927                _next_ordinal_to_read += 1;
11928                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11929                next_offset += envelope_size;
11930            }
11931
11932            Ok(())
11933        }
11934    }
11935
11936    impl IsochronousStreamWriteRequest {
11937        #[inline(always)]
11938        fn max_ordinal_present(&self) -> u64 {
11939            if let Some(_) = self.data {
11940                return 1;
11941            }
11942            0
11943        }
11944    }
11945
11946    impl fidl::encoding::ValueTypeMarker for IsochronousStreamWriteRequest {
11947        type Borrowed<'a> = &'a Self;
11948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11949            value
11950        }
11951    }
11952
11953    unsafe impl fidl::encoding::TypeMarker for IsochronousStreamWriteRequest {
11954        type Owned = Self;
11955
11956        #[inline(always)]
11957        fn inline_align(_context: fidl::encoding::Context) -> usize {
11958            8
11959        }
11960
11961        #[inline(always)]
11962        fn inline_size(_context: fidl::encoding::Context) -> usize {
11963            16
11964        }
11965    }
11966
11967    unsafe impl<D: fidl::encoding::ResourceDialect>
11968        fidl::encoding::Encode<IsochronousStreamWriteRequest, D>
11969        for &IsochronousStreamWriteRequest
11970    {
11971        unsafe fn encode(
11972            self,
11973            encoder: &mut fidl::encoding::Encoder<'_, D>,
11974            offset: usize,
11975            mut depth: fidl::encoding::Depth,
11976        ) -> fidl::Result<()> {
11977            encoder.debug_check_bounds::<IsochronousStreamWriteRequest>(offset);
11978            // Vector header
11979            let max_ordinal: u64 = self.max_ordinal_present();
11980            encoder.write_num(max_ordinal, offset);
11981            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11982            // Calling encoder.out_of_line_offset(0) is not allowed.
11983            if max_ordinal == 0 {
11984                return Ok(());
11985            }
11986            depth.increment()?;
11987            let envelope_size = 8;
11988            let bytes_len = max_ordinal as usize * envelope_size;
11989            #[allow(unused_variables)]
11990            let offset = encoder.out_of_line_offset(bytes_len);
11991            let mut _prev_end_offset: usize = 0;
11992            if 1 > max_ordinal {
11993                return Ok(());
11994            }
11995
11996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11997            // are envelope_size bytes.
11998            let cur_offset: usize = (1 - 1) * envelope_size;
11999
12000            // Zero reserved fields.
12001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12002
12003            // Safety:
12004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12006            //   envelope_size bytes, there is always sufficient room.
12007            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 4095>, D>(
12008                self.data.as_ref().map(
12009                    <fidl::encoding::Vector<u8, 4095> as fidl::encoding::ValueTypeMarker>::borrow,
12010                ),
12011                encoder,
12012                offset + cur_offset,
12013                depth,
12014            )?;
12015
12016            _prev_end_offset = cur_offset + envelope_size;
12017
12018            Ok(())
12019        }
12020    }
12021
12022    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12023        for IsochronousStreamWriteRequest
12024    {
12025        #[inline(always)]
12026        fn new_empty() -> Self {
12027            Self::default()
12028        }
12029
12030        unsafe fn decode(
12031            &mut self,
12032            decoder: &mut fidl::encoding::Decoder<'_, D>,
12033            offset: usize,
12034            mut depth: fidl::encoding::Depth,
12035        ) -> fidl::Result<()> {
12036            decoder.debug_check_bounds::<Self>(offset);
12037            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12038                None => return Err(fidl::Error::NotNullable),
12039                Some(len) => len,
12040            };
12041            // Calling decoder.out_of_line_offset(0) is not allowed.
12042            if len == 0 {
12043                return Ok(());
12044            };
12045            depth.increment()?;
12046            let envelope_size = 8;
12047            let bytes_len = len * envelope_size;
12048            let offset = decoder.out_of_line_offset(bytes_len)?;
12049            // Decode the envelope for each type.
12050            let mut _next_ordinal_to_read = 0;
12051            let mut next_offset = offset;
12052            let end_offset = offset + bytes_len;
12053            _next_ordinal_to_read += 1;
12054            if next_offset >= end_offset {
12055                return Ok(());
12056            }
12057
12058            // Decode unknown envelopes for gaps in ordinals.
12059            while _next_ordinal_to_read < 1 {
12060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12061                _next_ordinal_to_read += 1;
12062                next_offset += envelope_size;
12063            }
12064
12065            let next_out_of_line = decoder.next_out_of_line();
12066            let handles_before = decoder.remaining_handles();
12067            if let Some((inlined, num_bytes, num_handles)) =
12068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12069            {
12070                let member_inline_size =
12071                    <fidl::encoding::Vector<u8, 4095> as fidl::encoding::TypeMarker>::inline_size(
12072                        decoder.context,
12073                    );
12074                if inlined != (member_inline_size <= 4) {
12075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12076                }
12077                let inner_offset;
12078                let mut inner_depth = depth.clone();
12079                if inlined {
12080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12081                    inner_offset = next_offset;
12082                } else {
12083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12084                    inner_depth.increment()?;
12085                }
12086                let val_ref = self
12087                    .data
12088                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 4095>, D));
12089                fidl::decode!(fidl::encoding::Vector<u8, 4095>, D, val_ref, decoder, inner_offset, inner_depth)?;
12090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12091                {
12092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12093                }
12094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12096                }
12097            }
12098
12099            next_offset += envelope_size;
12100
12101            // Decode the remaining unknown envelopes.
12102            while next_offset < end_offset {
12103                _next_ordinal_to_read += 1;
12104                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12105                next_offset += envelope_size;
12106            }
12107
12108            Ok(())
12109        }
12110    }
12111
12112    impl IsochronousStreamReadResponse {
12113        #[inline(always)]
12114        fn max_ordinal_present(&self) -> u64 {
12115            if let Some(_) = self.timestamp {
12116                return 4;
12117            }
12118            if let Some(_) = self.status_flag {
12119                return 3;
12120            }
12121            if let Some(_) = self.sequence_number {
12122                return 2;
12123            }
12124            if let Some(_) = self.data {
12125                return 1;
12126            }
12127            0
12128        }
12129    }
12130
12131    impl fidl::encoding::ValueTypeMarker for IsochronousStreamReadResponse {
12132        type Borrowed<'a> = &'a Self;
12133        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12134            value
12135        }
12136    }
12137
12138    unsafe impl fidl::encoding::TypeMarker for IsochronousStreamReadResponse {
12139        type Owned = Self;
12140
12141        #[inline(always)]
12142        fn inline_align(_context: fidl::encoding::Context) -> usize {
12143            8
12144        }
12145
12146        #[inline(always)]
12147        fn inline_size(_context: fidl::encoding::Context) -> usize {
12148            16
12149        }
12150    }
12151
12152    unsafe impl<D: fidl::encoding::ResourceDialect>
12153        fidl::encoding::Encode<IsochronousStreamReadResponse, D>
12154        for &IsochronousStreamReadResponse
12155    {
12156        unsafe fn encode(
12157            self,
12158            encoder: &mut fidl::encoding::Encoder<'_, D>,
12159            offset: usize,
12160            mut depth: fidl::encoding::Depth,
12161        ) -> fidl::Result<()> {
12162            encoder.debug_check_bounds::<IsochronousStreamReadResponse>(offset);
12163            // Vector header
12164            let max_ordinal: u64 = self.max_ordinal_present();
12165            encoder.write_num(max_ordinal, offset);
12166            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12167            // Calling encoder.out_of_line_offset(0) is not allowed.
12168            if max_ordinal == 0 {
12169                return Ok(());
12170            }
12171            depth.increment()?;
12172            let envelope_size = 8;
12173            let bytes_len = max_ordinal as usize * envelope_size;
12174            #[allow(unused_variables)]
12175            let offset = encoder.out_of_line_offset(bytes_len);
12176            let mut _prev_end_offset: usize = 0;
12177            if 1 > max_ordinal {
12178                return Ok(());
12179            }
12180
12181            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12182            // are envelope_size bytes.
12183            let cur_offset: usize = (1 - 1) * envelope_size;
12184
12185            // Zero reserved fields.
12186            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12187
12188            // Safety:
12189            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12190            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12191            //   envelope_size bytes, there is always sufficient room.
12192            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
12193            self.data.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
12194            encoder, offset + cur_offset, depth
12195        )?;
12196
12197            _prev_end_offset = cur_offset + envelope_size;
12198            if 2 > max_ordinal {
12199                return Ok(());
12200            }
12201
12202            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12203            // are envelope_size bytes.
12204            let cur_offset: usize = (2 - 1) * envelope_size;
12205
12206            // Zero reserved fields.
12207            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12208
12209            // Safety:
12210            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12211            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12212            //   envelope_size bytes, there is always sufficient room.
12213            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12214                self.sequence_number.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12215                encoder,
12216                offset + cur_offset,
12217                depth,
12218            )?;
12219
12220            _prev_end_offset = cur_offset + envelope_size;
12221            if 3 > max_ordinal {
12222                return Ok(());
12223            }
12224
12225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12226            // are envelope_size bytes.
12227            let cur_offset: usize = (3 - 1) * envelope_size;
12228
12229            // Zero reserved fields.
12230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12231
12232            // Safety:
12233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12235            //   envelope_size bytes, there is always sufficient room.
12236            fidl::encoding::encode_in_envelope_optional::<IsoPacketStatusFlag, D>(
12237                self.status_flag
12238                    .as_ref()
12239                    .map(<IsoPacketStatusFlag as fidl::encoding::ValueTypeMarker>::borrow),
12240                encoder,
12241                offset + cur_offset,
12242                depth,
12243            )?;
12244
12245            _prev_end_offset = cur_offset + envelope_size;
12246            if 4 > max_ordinal {
12247                return Ok(());
12248            }
12249
12250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12251            // are envelope_size bytes.
12252            let cur_offset: usize = (4 - 1) * envelope_size;
12253
12254            // Zero reserved fields.
12255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12256
12257            // Safety:
12258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12260            //   envelope_size bytes, there is always sufficient room.
12261            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12262                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12263                encoder,
12264                offset + cur_offset,
12265                depth,
12266            )?;
12267
12268            _prev_end_offset = cur_offset + envelope_size;
12269
12270            Ok(())
12271        }
12272    }
12273
12274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
12275        for IsochronousStreamReadResponse
12276    {
12277        #[inline(always)]
12278        fn new_empty() -> Self {
12279            Self::default()
12280        }
12281
12282        unsafe fn decode(
12283            &mut self,
12284            decoder: &mut fidl::encoding::Decoder<'_, D>,
12285            offset: usize,
12286            mut depth: fidl::encoding::Depth,
12287        ) -> fidl::Result<()> {
12288            decoder.debug_check_bounds::<Self>(offset);
12289            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12290                None => return Err(fidl::Error::NotNullable),
12291                Some(len) => len,
12292            };
12293            // Calling decoder.out_of_line_offset(0) is not allowed.
12294            if len == 0 {
12295                return Ok(());
12296            };
12297            depth.increment()?;
12298            let envelope_size = 8;
12299            let bytes_len = len * envelope_size;
12300            let offset = decoder.out_of_line_offset(bytes_len)?;
12301            // Decode the envelope for each type.
12302            let mut _next_ordinal_to_read = 0;
12303            let mut next_offset = offset;
12304            let end_offset = offset + bytes_len;
12305            _next_ordinal_to_read += 1;
12306            if next_offset >= end_offset {
12307                return Ok(());
12308            }
12309
12310            // Decode unknown envelopes for gaps in ordinals.
12311            while _next_ordinal_to_read < 1 {
12312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12313                _next_ordinal_to_read += 1;
12314                next_offset += envelope_size;
12315            }
12316
12317            let next_out_of_line = decoder.next_out_of_line();
12318            let handles_before = decoder.remaining_handles();
12319            if let Some((inlined, num_bytes, num_handles)) =
12320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12321            {
12322                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12323                if inlined != (member_inline_size <= 4) {
12324                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12325                }
12326                let inner_offset;
12327                let mut inner_depth = depth.clone();
12328                if inlined {
12329                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12330                    inner_offset = next_offset;
12331                } else {
12332                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12333                    inner_depth.increment()?;
12334                }
12335                let val_ref = self.data.get_or_insert_with(|| {
12336                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
12337                });
12338                fidl::decode!(
12339                    fidl::encoding::UnboundedVector<u8>,
12340                    D,
12341                    val_ref,
12342                    decoder,
12343                    inner_offset,
12344                    inner_depth
12345                )?;
12346                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12347                {
12348                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12349                }
12350                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12351                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12352                }
12353            }
12354
12355            next_offset += envelope_size;
12356            _next_ordinal_to_read += 1;
12357            if next_offset >= end_offset {
12358                return Ok(());
12359            }
12360
12361            // Decode unknown envelopes for gaps in ordinals.
12362            while _next_ordinal_to_read < 2 {
12363                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12364                _next_ordinal_to_read += 1;
12365                next_offset += envelope_size;
12366            }
12367
12368            let next_out_of_line = decoder.next_out_of_line();
12369            let handles_before = decoder.remaining_handles();
12370            if let Some((inlined, num_bytes, num_handles)) =
12371                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12372            {
12373                let member_inline_size =
12374                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12375                if inlined != (member_inline_size <= 4) {
12376                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12377                }
12378                let inner_offset;
12379                let mut inner_depth = depth.clone();
12380                if inlined {
12381                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12382                    inner_offset = next_offset;
12383                } else {
12384                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12385                    inner_depth.increment()?;
12386                }
12387                let val_ref = self.sequence_number.get_or_insert_with(|| fidl::new_empty!(u16, D));
12388                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
12389                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12390                {
12391                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12392                }
12393                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12394                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12395                }
12396            }
12397
12398            next_offset += envelope_size;
12399            _next_ordinal_to_read += 1;
12400            if next_offset >= end_offset {
12401                return Ok(());
12402            }
12403
12404            // Decode unknown envelopes for gaps in ordinals.
12405            while _next_ordinal_to_read < 3 {
12406                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12407                _next_ordinal_to_read += 1;
12408                next_offset += envelope_size;
12409            }
12410
12411            let next_out_of_line = decoder.next_out_of_line();
12412            let handles_before = decoder.remaining_handles();
12413            if let Some((inlined, num_bytes, num_handles)) =
12414                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12415            {
12416                let member_inline_size =
12417                    <IsoPacketStatusFlag as fidl::encoding::TypeMarker>::inline_size(
12418                        decoder.context,
12419                    );
12420                if inlined != (member_inline_size <= 4) {
12421                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12422                }
12423                let inner_offset;
12424                let mut inner_depth = depth.clone();
12425                if inlined {
12426                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12427                    inner_offset = next_offset;
12428                } else {
12429                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12430                    inner_depth.increment()?;
12431                }
12432                let val_ref = self
12433                    .status_flag
12434                    .get_or_insert_with(|| fidl::new_empty!(IsoPacketStatusFlag, D));
12435                fidl::decode!(IsoPacketStatusFlag, D, val_ref, decoder, inner_offset, inner_depth)?;
12436                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12437                {
12438                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12439                }
12440                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12441                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12442                }
12443            }
12444
12445            next_offset += envelope_size;
12446            _next_ordinal_to_read += 1;
12447            if next_offset >= end_offset {
12448                return Ok(());
12449            }
12450
12451            // Decode unknown envelopes for gaps in ordinals.
12452            while _next_ordinal_to_read < 4 {
12453                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12454                _next_ordinal_to_read += 1;
12455                next_offset += envelope_size;
12456            }
12457
12458            let next_out_of_line = decoder.next_out_of_line();
12459            let handles_before = decoder.remaining_handles();
12460            if let Some((inlined, num_bytes, num_handles)) =
12461                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12462            {
12463                let member_inline_size =
12464                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12465                if inlined != (member_inline_size <= 4) {
12466                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12467                }
12468                let inner_offset;
12469                let mut inner_depth = depth.clone();
12470                if inlined {
12471                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12472                    inner_offset = next_offset;
12473                } else {
12474                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12475                    inner_depth.increment()?;
12476                }
12477                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
12478                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
12479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12480                {
12481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12482                }
12483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12485                }
12486            }
12487
12488            next_offset += envelope_size;
12489
12490            // Decode the remaining unknown envelopes.
12491            while next_offset < end_offset {
12492                _next_ordinal_to_read += 1;
12493                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12494                next_offset += envelope_size;
12495            }
12496
12497            Ok(())
12498        }
12499    }
12500
12501    impl Legacy {
12502        #[inline(always)]
12503        fn max_ordinal_present(&self) -> u64 {
12504            0
12505        }
12506    }
12507
12508    impl fidl::encoding::ValueTypeMarker for Legacy {
12509        type Borrowed<'a> = &'a Self;
12510        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12511            value
12512        }
12513    }
12514
12515    unsafe impl fidl::encoding::TypeMarker for Legacy {
12516        type Owned = Self;
12517
12518        #[inline(always)]
12519        fn inline_align(_context: fidl::encoding::Context) -> usize {
12520            8
12521        }
12522
12523        #[inline(always)]
12524        fn inline_size(_context: fidl::encoding::Context) -> usize {
12525            16
12526        }
12527    }
12528
12529    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Legacy, D> for &Legacy {
12530        unsafe fn encode(
12531            self,
12532            encoder: &mut fidl::encoding::Encoder<'_, D>,
12533            offset: usize,
12534            mut depth: fidl::encoding::Depth,
12535        ) -> fidl::Result<()> {
12536            encoder.debug_check_bounds::<Legacy>(offset);
12537            // Vector header
12538            let max_ordinal: u64 = self.max_ordinal_present();
12539            encoder.write_num(max_ordinal, offset);
12540            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12541            // Calling encoder.out_of_line_offset(0) is not allowed.
12542            if max_ordinal == 0 {
12543                return Ok(());
12544            }
12545            depth.increment()?;
12546            let envelope_size = 8;
12547            let bytes_len = max_ordinal as usize * envelope_size;
12548            #[allow(unused_variables)]
12549            let offset = encoder.out_of_line_offset(bytes_len);
12550            let mut _prev_end_offset: usize = 0;
12551
12552            Ok(())
12553        }
12554    }
12555
12556    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Legacy {
12557        #[inline(always)]
12558        fn new_empty() -> Self {
12559            Self::default()
12560        }
12561
12562        unsafe fn decode(
12563            &mut self,
12564            decoder: &mut fidl::encoding::Decoder<'_, D>,
12565            offset: usize,
12566            mut depth: fidl::encoding::Depth,
12567        ) -> fidl::Result<()> {
12568            decoder.debug_check_bounds::<Self>(offset);
12569            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12570                None => return Err(fidl::Error::NotNullable),
12571                Some(len) => len,
12572            };
12573            // Calling decoder.out_of_line_offset(0) is not allowed.
12574            if len == 0 {
12575                return Ok(());
12576            };
12577            depth.increment()?;
12578            let envelope_size = 8;
12579            let bytes_len = len * envelope_size;
12580            let offset = decoder.out_of_line_offset(bytes_len)?;
12581            // Decode the envelope for each type.
12582            let mut _next_ordinal_to_read = 0;
12583            let mut next_offset = offset;
12584            let end_offset = offset + bytes_len;
12585
12586            // Decode the remaining unknown envelopes.
12587            while next_offset < end_offset {
12588                _next_ordinal_to_read += 1;
12589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12590                next_offset += envelope_size;
12591            }
12592
12593            Ok(())
12594        }
12595    }
12596
12597    impl Peer {
12598        #[inline(always)]
12599        fn max_ordinal_present(&self) -> u64 {
12600            if let Some(_) = self.periodic_advertising_interval {
12601                return 10;
12602            }
12603            if let Some(_) = self.advertising_sid {
12604                return 9;
12605            }
12606            if let Some(_) = self.last_updated {
12607                return 8;
12608            }
12609            if let Some(_) = self.bonded {
12610                return 7;
12611            }
12612            if let Some(_) = self.data {
12613                return 6;
12614            }
12615            if let Some(_) = self.name {
12616                return 5;
12617            }
12618            if let Some(_) = self.advertising_data {
12619                return 4;
12620            }
12621            if let Some(_) = self.rssi {
12622                return 3;
12623            }
12624            if let Some(_) = self.connectable {
12625                return 2;
12626            }
12627            if let Some(_) = self.id {
12628                return 1;
12629            }
12630            0
12631        }
12632    }
12633
12634    impl fidl::encoding::ValueTypeMarker for Peer {
12635        type Borrowed<'a> = &'a Self;
12636        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12637            value
12638        }
12639    }
12640
12641    unsafe impl fidl::encoding::TypeMarker for Peer {
12642        type Owned = Self;
12643
12644        #[inline(always)]
12645        fn inline_align(_context: fidl::encoding::Context) -> usize {
12646            8
12647        }
12648
12649        #[inline(always)]
12650        fn inline_size(_context: fidl::encoding::Context) -> usize {
12651            16
12652        }
12653    }
12654
12655    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Peer, D> for &Peer {
12656        unsafe fn encode(
12657            self,
12658            encoder: &mut fidl::encoding::Encoder<'_, D>,
12659            offset: usize,
12660            mut depth: fidl::encoding::Depth,
12661        ) -> fidl::Result<()> {
12662            encoder.debug_check_bounds::<Peer>(offset);
12663            // Vector header
12664            let max_ordinal: u64 = self.max_ordinal_present();
12665            encoder.write_num(max_ordinal, offset);
12666            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12667            // Calling encoder.out_of_line_offset(0) is not allowed.
12668            if max_ordinal == 0 {
12669                return Ok(());
12670            }
12671            depth.increment()?;
12672            let envelope_size = 8;
12673            let bytes_len = max_ordinal as usize * envelope_size;
12674            #[allow(unused_variables)]
12675            let offset = encoder.out_of_line_offset(bytes_len);
12676            let mut _prev_end_offset: usize = 0;
12677            if 1 > max_ordinal {
12678                return Ok(());
12679            }
12680
12681            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12682            // are envelope_size bytes.
12683            let cur_offset: usize = (1 - 1) * envelope_size;
12684
12685            // Zero reserved fields.
12686            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12687
12688            // Safety:
12689            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12690            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12691            //   envelope_size bytes, there is always sufficient room.
12692            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::PeerId, D>(
12693            self.id.as_ref().map(<fidl_fuchsia_bluetooth__common::PeerId as fidl::encoding::ValueTypeMarker>::borrow),
12694            encoder, offset + cur_offset, depth
12695        )?;
12696
12697            _prev_end_offset = cur_offset + envelope_size;
12698            if 2 > max_ordinal {
12699                return Ok(());
12700            }
12701
12702            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12703            // are envelope_size bytes.
12704            let cur_offset: usize = (2 - 1) * envelope_size;
12705
12706            // Zero reserved fields.
12707            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12708
12709            // Safety:
12710            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12711            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12712            //   envelope_size bytes, there is always sufficient room.
12713            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12714                self.connectable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12715                encoder,
12716                offset + cur_offset,
12717                depth,
12718            )?;
12719
12720            _prev_end_offset = cur_offset + envelope_size;
12721            if 3 > max_ordinal {
12722                return Ok(());
12723            }
12724
12725            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12726            // are envelope_size bytes.
12727            let cur_offset: usize = (3 - 1) * envelope_size;
12728
12729            // Zero reserved fields.
12730            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12731
12732            // Safety:
12733            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12734            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12735            //   envelope_size bytes, there is always sufficient room.
12736            fidl::encoding::encode_in_envelope_optional::<i8, D>(
12737                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
12738                encoder,
12739                offset + cur_offset,
12740                depth,
12741            )?;
12742
12743            _prev_end_offset = cur_offset + envelope_size;
12744            if 4 > max_ordinal {
12745                return Ok(());
12746            }
12747
12748            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12749            // are envelope_size bytes.
12750            let cur_offset: usize = (4 - 1) * envelope_size;
12751
12752            // Zero reserved fields.
12753            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12754
12755            // Safety:
12756            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12757            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12758            //   envelope_size bytes, there is always sufficient room.
12759            fidl::encoding::encode_in_envelope_optional::<AdvertisingData, D>(
12760                self.advertising_data
12761                    .as_ref()
12762                    .map(<AdvertisingData as fidl::encoding::ValueTypeMarker>::borrow),
12763                encoder,
12764                offset + cur_offset,
12765                depth,
12766            )?;
12767
12768            _prev_end_offset = cur_offset + envelope_size;
12769            if 5 > max_ordinal {
12770                return Ok(());
12771            }
12772
12773            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12774            // are envelope_size bytes.
12775            let cur_offset: usize = (5 - 1) * envelope_size;
12776
12777            // Zero reserved fields.
12778            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12779
12780            // Safety:
12781            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12782            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12783            //   envelope_size bytes, there is always sufficient room.
12784            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<248>, D>(
12785                self.name.as_ref().map(
12786                    <fidl::encoding::BoundedString<248> as fidl::encoding::ValueTypeMarker>::borrow,
12787                ),
12788                encoder,
12789                offset + cur_offset,
12790                depth,
12791            )?;
12792
12793            _prev_end_offset = cur_offset + envelope_size;
12794            if 6 > max_ordinal {
12795                return Ok(());
12796            }
12797
12798            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12799            // are envelope_size bytes.
12800            let cur_offset: usize = (6 - 1) * envelope_size;
12801
12802            // Zero reserved fields.
12803            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12804
12805            // Safety:
12806            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12807            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12808            //   envelope_size bytes, there is always sufficient room.
12809            fidl::encoding::encode_in_envelope_optional::<ScanData, D>(
12810                self.data.as_ref().map(<ScanData as fidl::encoding::ValueTypeMarker>::borrow),
12811                encoder,
12812                offset + cur_offset,
12813                depth,
12814            )?;
12815
12816            _prev_end_offset = cur_offset + envelope_size;
12817            if 7 > max_ordinal {
12818                return Ok(());
12819            }
12820
12821            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12822            // are envelope_size bytes.
12823            let cur_offset: usize = (7 - 1) * envelope_size;
12824
12825            // Zero reserved fields.
12826            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12827
12828            // Safety:
12829            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12830            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12831            //   envelope_size bytes, there is always sufficient room.
12832            fidl::encoding::encode_in_envelope_optional::<bool, D>(
12833                self.bonded.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
12834                encoder,
12835                offset + cur_offset,
12836                depth,
12837            )?;
12838
12839            _prev_end_offset = cur_offset + envelope_size;
12840            if 8 > max_ordinal {
12841                return Ok(());
12842            }
12843
12844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12845            // are envelope_size bytes.
12846            let cur_offset: usize = (8 - 1) * envelope_size;
12847
12848            // Zero reserved fields.
12849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12850
12851            // Safety:
12852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12854            //   envelope_size bytes, there is always sufficient room.
12855            fidl::encoding::encode_in_envelope_optional::<i64, D>(
12856                self.last_updated.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
12857                encoder,
12858                offset + cur_offset,
12859                depth,
12860            )?;
12861
12862            _prev_end_offset = cur_offset + envelope_size;
12863            if 9 > max_ordinal {
12864                return Ok(());
12865            }
12866
12867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12868            // are envelope_size bytes.
12869            let cur_offset: usize = (9 - 1) * envelope_size;
12870
12871            // Zero reserved fields.
12872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12873
12874            // Safety:
12875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12877            //   envelope_size bytes, there is always sufficient room.
12878            fidl::encoding::encode_in_envelope_optional::<u8, D>(
12879                self.advertising_sid.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
12880                encoder,
12881                offset + cur_offset,
12882                depth,
12883            )?;
12884
12885            _prev_end_offset = cur_offset + envelope_size;
12886            if 10 > max_ordinal {
12887                return Ok(());
12888            }
12889
12890            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12891            // are envelope_size bytes.
12892            let cur_offset: usize = (10 - 1) * envelope_size;
12893
12894            // Zero reserved fields.
12895            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12896
12897            // Safety:
12898            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12899            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12900            //   envelope_size bytes, there is always sufficient room.
12901            fidl::encoding::encode_in_envelope_optional::<u16, D>(
12902                self.periodic_advertising_interval
12903                    .as_ref()
12904                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
12905                encoder,
12906                offset + cur_offset,
12907                depth,
12908            )?;
12909
12910            _prev_end_offset = cur_offset + envelope_size;
12911
12912            Ok(())
12913        }
12914    }
12915
12916    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Peer {
12917        #[inline(always)]
12918        fn new_empty() -> Self {
12919            Self::default()
12920        }
12921
12922        unsafe fn decode(
12923            &mut self,
12924            decoder: &mut fidl::encoding::Decoder<'_, D>,
12925            offset: usize,
12926            mut depth: fidl::encoding::Depth,
12927        ) -> fidl::Result<()> {
12928            decoder.debug_check_bounds::<Self>(offset);
12929            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12930                None => return Err(fidl::Error::NotNullable),
12931                Some(len) => len,
12932            };
12933            // Calling decoder.out_of_line_offset(0) is not allowed.
12934            if len == 0 {
12935                return Ok(());
12936            };
12937            depth.increment()?;
12938            let envelope_size = 8;
12939            let bytes_len = len * envelope_size;
12940            let offset = decoder.out_of_line_offset(bytes_len)?;
12941            // Decode the envelope for each type.
12942            let mut _next_ordinal_to_read = 0;
12943            let mut next_offset = offset;
12944            let end_offset = offset + bytes_len;
12945            _next_ordinal_to_read += 1;
12946            if next_offset >= end_offset {
12947                return Ok(());
12948            }
12949
12950            // Decode unknown envelopes for gaps in ordinals.
12951            while _next_ordinal_to_read < 1 {
12952                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12953                _next_ordinal_to_read += 1;
12954                next_offset += envelope_size;
12955            }
12956
12957            let next_out_of_line = decoder.next_out_of_line();
12958            let handles_before = decoder.remaining_handles();
12959            if let Some((inlined, num_bytes, num_handles)) =
12960                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12961            {
12962                let member_inline_size = <fidl_fuchsia_bluetooth__common::PeerId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12963                if inlined != (member_inline_size <= 4) {
12964                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12965                }
12966                let inner_offset;
12967                let mut inner_depth = depth.clone();
12968                if inlined {
12969                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12970                    inner_offset = next_offset;
12971                } else {
12972                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12973                    inner_depth.increment()?;
12974                }
12975                let val_ref = self.id.get_or_insert_with(|| {
12976                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::PeerId, D)
12977                });
12978                fidl::decode!(
12979                    fidl_fuchsia_bluetooth__common::PeerId,
12980                    D,
12981                    val_ref,
12982                    decoder,
12983                    inner_offset,
12984                    inner_depth
12985                )?;
12986                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12987                {
12988                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12989                }
12990                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12991                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12992                }
12993            }
12994
12995            next_offset += envelope_size;
12996            _next_ordinal_to_read += 1;
12997            if next_offset >= end_offset {
12998                return Ok(());
12999            }
13000
13001            // Decode unknown envelopes for gaps in ordinals.
13002            while _next_ordinal_to_read < 2 {
13003                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13004                _next_ordinal_to_read += 1;
13005                next_offset += envelope_size;
13006            }
13007
13008            let next_out_of_line = decoder.next_out_of_line();
13009            let handles_before = decoder.remaining_handles();
13010            if let Some((inlined, num_bytes, num_handles)) =
13011                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13012            {
13013                let member_inline_size =
13014                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13015                if inlined != (member_inline_size <= 4) {
13016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13017                }
13018                let inner_offset;
13019                let mut inner_depth = depth.clone();
13020                if inlined {
13021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13022                    inner_offset = next_offset;
13023                } else {
13024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13025                    inner_depth.increment()?;
13026                }
13027                let val_ref = self.connectable.get_or_insert_with(|| fidl::new_empty!(bool, D));
13028                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13029                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13030                {
13031                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13032                }
13033                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13034                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13035                }
13036            }
13037
13038            next_offset += envelope_size;
13039            _next_ordinal_to_read += 1;
13040            if next_offset >= end_offset {
13041                return Ok(());
13042            }
13043
13044            // Decode unknown envelopes for gaps in ordinals.
13045            while _next_ordinal_to_read < 3 {
13046                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13047                _next_ordinal_to_read += 1;
13048                next_offset += envelope_size;
13049            }
13050
13051            let next_out_of_line = decoder.next_out_of_line();
13052            let handles_before = decoder.remaining_handles();
13053            if let Some((inlined, num_bytes, num_handles)) =
13054                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13055            {
13056                let member_inline_size =
13057                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13058                if inlined != (member_inline_size <= 4) {
13059                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13060                }
13061                let inner_offset;
13062                let mut inner_depth = depth.clone();
13063                if inlined {
13064                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13065                    inner_offset = next_offset;
13066                } else {
13067                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13068                    inner_depth.increment()?;
13069                }
13070                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
13071                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13072                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13073                {
13074                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13075                }
13076                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13077                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13078                }
13079            }
13080
13081            next_offset += envelope_size;
13082            _next_ordinal_to_read += 1;
13083            if next_offset >= end_offset {
13084                return Ok(());
13085            }
13086
13087            // Decode unknown envelopes for gaps in ordinals.
13088            while _next_ordinal_to_read < 4 {
13089                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13090                _next_ordinal_to_read += 1;
13091                next_offset += envelope_size;
13092            }
13093
13094            let next_out_of_line = decoder.next_out_of_line();
13095            let handles_before = decoder.remaining_handles();
13096            if let Some((inlined, num_bytes, num_handles)) =
13097                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13098            {
13099                let member_inline_size =
13100                    <AdvertisingData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13101                if inlined != (member_inline_size <= 4) {
13102                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13103                }
13104                let inner_offset;
13105                let mut inner_depth = depth.clone();
13106                if inlined {
13107                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13108                    inner_offset = next_offset;
13109                } else {
13110                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13111                    inner_depth.increment()?;
13112                }
13113                let val_ref = self
13114                    .advertising_data
13115                    .get_or_insert_with(|| fidl::new_empty!(AdvertisingData, D));
13116                fidl::decode!(AdvertisingData, D, val_ref, decoder, inner_offset, inner_depth)?;
13117                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13118                {
13119                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13120                }
13121                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13122                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13123                }
13124            }
13125
13126            next_offset += envelope_size;
13127            _next_ordinal_to_read += 1;
13128            if next_offset >= end_offset {
13129                return Ok(());
13130            }
13131
13132            // Decode unknown envelopes for gaps in ordinals.
13133            while _next_ordinal_to_read < 5 {
13134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13135                _next_ordinal_to_read += 1;
13136                next_offset += envelope_size;
13137            }
13138
13139            let next_out_of_line = decoder.next_out_of_line();
13140            let handles_before = decoder.remaining_handles();
13141            if let Some((inlined, num_bytes, num_handles)) =
13142                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13143            {
13144                let member_inline_size =
13145                    <fidl::encoding::BoundedString<248> as fidl::encoding::TypeMarker>::inline_size(
13146                        decoder.context,
13147                    );
13148                if inlined != (member_inline_size <= 4) {
13149                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13150                }
13151                let inner_offset;
13152                let mut inner_depth = depth.clone();
13153                if inlined {
13154                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13155                    inner_offset = next_offset;
13156                } else {
13157                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13158                    inner_depth.increment()?;
13159                }
13160                let val_ref = self
13161                    .name
13162                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<248>, D));
13163                fidl::decode!(
13164                    fidl::encoding::BoundedString<248>,
13165                    D,
13166                    val_ref,
13167                    decoder,
13168                    inner_offset,
13169                    inner_depth
13170                )?;
13171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13172                {
13173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13174                }
13175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13177                }
13178            }
13179
13180            next_offset += envelope_size;
13181            _next_ordinal_to_read += 1;
13182            if next_offset >= end_offset {
13183                return Ok(());
13184            }
13185
13186            // Decode unknown envelopes for gaps in ordinals.
13187            while _next_ordinal_to_read < 6 {
13188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13189                _next_ordinal_to_read += 1;
13190                next_offset += envelope_size;
13191            }
13192
13193            let next_out_of_line = decoder.next_out_of_line();
13194            let handles_before = decoder.remaining_handles();
13195            if let Some((inlined, num_bytes, num_handles)) =
13196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13197            {
13198                let member_inline_size =
13199                    <ScanData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13200                if inlined != (member_inline_size <= 4) {
13201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13202                }
13203                let inner_offset;
13204                let mut inner_depth = depth.clone();
13205                if inlined {
13206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13207                    inner_offset = next_offset;
13208                } else {
13209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13210                    inner_depth.increment()?;
13211                }
13212                let val_ref = self.data.get_or_insert_with(|| fidl::new_empty!(ScanData, D));
13213                fidl::decode!(ScanData, D, val_ref, decoder, inner_offset, inner_depth)?;
13214                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13215                {
13216                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13217                }
13218                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13219                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13220                }
13221            }
13222
13223            next_offset += envelope_size;
13224            _next_ordinal_to_read += 1;
13225            if next_offset >= end_offset {
13226                return Ok(());
13227            }
13228
13229            // Decode unknown envelopes for gaps in ordinals.
13230            while _next_ordinal_to_read < 7 {
13231                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13232                _next_ordinal_to_read += 1;
13233                next_offset += envelope_size;
13234            }
13235
13236            let next_out_of_line = decoder.next_out_of_line();
13237            let handles_before = decoder.remaining_handles();
13238            if let Some((inlined, num_bytes, num_handles)) =
13239                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13240            {
13241                let member_inline_size =
13242                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13243                if inlined != (member_inline_size <= 4) {
13244                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13245                }
13246                let inner_offset;
13247                let mut inner_depth = depth.clone();
13248                if inlined {
13249                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13250                    inner_offset = next_offset;
13251                } else {
13252                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13253                    inner_depth.increment()?;
13254                }
13255                let val_ref = self.bonded.get_or_insert_with(|| fidl::new_empty!(bool, D));
13256                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
13257                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13258                {
13259                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13260                }
13261                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13262                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13263                }
13264            }
13265
13266            next_offset += envelope_size;
13267            _next_ordinal_to_read += 1;
13268            if next_offset >= end_offset {
13269                return Ok(());
13270            }
13271
13272            // Decode unknown envelopes for gaps in ordinals.
13273            while _next_ordinal_to_read < 8 {
13274                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13275                _next_ordinal_to_read += 1;
13276                next_offset += envelope_size;
13277            }
13278
13279            let next_out_of_line = decoder.next_out_of_line();
13280            let handles_before = decoder.remaining_handles();
13281            if let Some((inlined, num_bytes, num_handles)) =
13282                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13283            {
13284                let member_inline_size =
13285                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13286                if inlined != (member_inline_size <= 4) {
13287                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13288                }
13289                let inner_offset;
13290                let mut inner_depth = depth.clone();
13291                if inlined {
13292                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13293                    inner_offset = next_offset;
13294                } else {
13295                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13296                    inner_depth.increment()?;
13297                }
13298                let val_ref = self.last_updated.get_or_insert_with(|| fidl::new_empty!(i64, D));
13299                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13300                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13301                {
13302                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13303                }
13304                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13305                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13306                }
13307            }
13308
13309            next_offset += envelope_size;
13310            _next_ordinal_to_read += 1;
13311            if next_offset >= end_offset {
13312                return Ok(());
13313            }
13314
13315            // Decode unknown envelopes for gaps in ordinals.
13316            while _next_ordinal_to_read < 9 {
13317                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13318                _next_ordinal_to_read += 1;
13319                next_offset += envelope_size;
13320            }
13321
13322            let next_out_of_line = decoder.next_out_of_line();
13323            let handles_before = decoder.remaining_handles();
13324            if let Some((inlined, num_bytes, num_handles)) =
13325                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13326            {
13327                let member_inline_size =
13328                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13329                if inlined != (member_inline_size <= 4) {
13330                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13331                }
13332                let inner_offset;
13333                let mut inner_depth = depth.clone();
13334                if inlined {
13335                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13336                    inner_offset = next_offset;
13337                } else {
13338                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13339                    inner_depth.increment()?;
13340                }
13341                let val_ref = self.advertising_sid.get_or_insert_with(|| fidl::new_empty!(u8, D));
13342                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
13343                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13344                {
13345                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13346                }
13347                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13348                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13349                }
13350            }
13351
13352            next_offset += envelope_size;
13353            _next_ordinal_to_read += 1;
13354            if next_offset >= end_offset {
13355                return Ok(());
13356            }
13357
13358            // Decode unknown envelopes for gaps in ordinals.
13359            while _next_ordinal_to_read < 10 {
13360                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13361                _next_ordinal_to_read += 1;
13362                next_offset += envelope_size;
13363            }
13364
13365            let next_out_of_line = decoder.next_out_of_line();
13366            let handles_before = decoder.remaining_handles();
13367            if let Some((inlined, num_bytes, num_handles)) =
13368                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13369            {
13370                let member_inline_size =
13371                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13372                if inlined != (member_inline_size <= 4) {
13373                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13374                }
13375                let inner_offset;
13376                let mut inner_depth = depth.clone();
13377                if inlined {
13378                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13379                    inner_offset = next_offset;
13380                } else {
13381                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13382                    inner_depth.increment()?;
13383                }
13384                let val_ref = self
13385                    .periodic_advertising_interval
13386                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
13387                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13389                {
13390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13391                }
13392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13394                }
13395            }
13396
13397            next_offset += envelope_size;
13398
13399            // Decode the remaining unknown envelopes.
13400            while next_offset < end_offset {
13401                _next_ordinal_to_read += 1;
13402                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13403                next_offset += envelope_size;
13404            }
13405
13406            Ok(())
13407        }
13408    }
13409
13410    impl PeriodicAdvertisingReport {
13411        #[inline(always)]
13412        fn max_ordinal_present(&self) -> u64 {
13413            if let Some(_) = self.timestamp {
13414                return 5;
13415            }
13416            if let Some(_) = self.subevent {
13417                return 4;
13418            }
13419            if let Some(_) = self.event_counter {
13420                return 3;
13421            }
13422            if let Some(_) = self.data {
13423                return 2;
13424            }
13425            if let Some(_) = self.rssi {
13426                return 1;
13427            }
13428            0
13429        }
13430    }
13431
13432    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingReport {
13433        type Borrowed<'a> = &'a Self;
13434        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13435            value
13436        }
13437    }
13438
13439    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingReport {
13440        type Owned = Self;
13441
13442        #[inline(always)]
13443        fn inline_align(_context: fidl::encoding::Context) -> usize {
13444            8
13445        }
13446
13447        #[inline(always)]
13448        fn inline_size(_context: fidl::encoding::Context) -> usize {
13449            16
13450        }
13451    }
13452
13453    unsafe impl<D: fidl::encoding::ResourceDialect>
13454        fidl::encoding::Encode<PeriodicAdvertisingReport, D> for &PeriodicAdvertisingReport
13455    {
13456        unsafe fn encode(
13457            self,
13458            encoder: &mut fidl::encoding::Encoder<'_, D>,
13459            offset: usize,
13460            mut depth: fidl::encoding::Depth,
13461        ) -> fidl::Result<()> {
13462            encoder.debug_check_bounds::<PeriodicAdvertisingReport>(offset);
13463            // Vector header
13464            let max_ordinal: u64 = self.max_ordinal_present();
13465            encoder.write_num(max_ordinal, offset);
13466            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13467            // Calling encoder.out_of_line_offset(0) is not allowed.
13468            if max_ordinal == 0 {
13469                return Ok(());
13470            }
13471            depth.increment()?;
13472            let envelope_size = 8;
13473            let bytes_len = max_ordinal as usize * envelope_size;
13474            #[allow(unused_variables)]
13475            let offset = encoder.out_of_line_offset(bytes_len);
13476            let mut _prev_end_offset: usize = 0;
13477            if 1 > max_ordinal {
13478                return Ok(());
13479            }
13480
13481            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13482            // are envelope_size bytes.
13483            let cur_offset: usize = (1 - 1) * envelope_size;
13484
13485            // Zero reserved fields.
13486            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13487
13488            // Safety:
13489            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13490            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13491            //   envelope_size bytes, there is always sufficient room.
13492            fidl::encoding::encode_in_envelope_optional::<i8, D>(
13493                self.rssi.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
13494                encoder,
13495                offset + cur_offset,
13496                depth,
13497            )?;
13498
13499            _prev_end_offset = cur_offset + envelope_size;
13500            if 2 > max_ordinal {
13501                return Ok(());
13502            }
13503
13504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13505            // are envelope_size bytes.
13506            let cur_offset: usize = (2 - 1) * envelope_size;
13507
13508            // Zero reserved fields.
13509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13510
13511            // Safety:
13512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13514            //   envelope_size bytes, there is always sufficient room.
13515            fidl::encoding::encode_in_envelope_optional::<ScanData, D>(
13516                self.data.as_ref().map(<ScanData as fidl::encoding::ValueTypeMarker>::borrow),
13517                encoder,
13518                offset + cur_offset,
13519                depth,
13520            )?;
13521
13522            _prev_end_offset = cur_offset + envelope_size;
13523            if 3 > max_ordinal {
13524                return Ok(());
13525            }
13526
13527            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13528            // are envelope_size bytes.
13529            let cur_offset: usize = (3 - 1) * envelope_size;
13530
13531            // Zero reserved fields.
13532            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13533
13534            // Safety:
13535            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13536            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13537            //   envelope_size bytes, there is always sufficient room.
13538            fidl::encoding::encode_in_envelope_optional::<u16, D>(
13539                self.event_counter.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
13540                encoder,
13541                offset + cur_offset,
13542                depth,
13543            )?;
13544
13545            _prev_end_offset = cur_offset + envelope_size;
13546            if 4 > max_ordinal {
13547                return Ok(());
13548            }
13549
13550            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13551            // are envelope_size bytes.
13552            let cur_offset: usize = (4 - 1) * envelope_size;
13553
13554            // Zero reserved fields.
13555            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13556
13557            // Safety:
13558            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13559            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13560            //   envelope_size bytes, there is always sufficient room.
13561            fidl::encoding::encode_in_envelope_optional::<u8, D>(
13562                self.subevent.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
13563                encoder,
13564                offset + cur_offset,
13565                depth,
13566            )?;
13567
13568            _prev_end_offset = cur_offset + envelope_size;
13569            if 5 > max_ordinal {
13570                return Ok(());
13571            }
13572
13573            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13574            // are envelope_size bytes.
13575            let cur_offset: usize = (5 - 1) * envelope_size;
13576
13577            // Zero reserved fields.
13578            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13579
13580            // Safety:
13581            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13582            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13583            //   envelope_size bytes, there is always sufficient room.
13584            fidl::encoding::encode_in_envelope_optional::<i64, D>(
13585                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
13586                encoder,
13587                offset + cur_offset,
13588                depth,
13589            )?;
13590
13591            _prev_end_offset = cur_offset + envelope_size;
13592
13593            Ok(())
13594        }
13595    }
13596
13597    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13598        for PeriodicAdvertisingReport
13599    {
13600        #[inline(always)]
13601        fn new_empty() -> Self {
13602            Self::default()
13603        }
13604
13605        unsafe fn decode(
13606            &mut self,
13607            decoder: &mut fidl::encoding::Decoder<'_, D>,
13608            offset: usize,
13609            mut depth: fidl::encoding::Depth,
13610        ) -> fidl::Result<()> {
13611            decoder.debug_check_bounds::<Self>(offset);
13612            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13613                None => return Err(fidl::Error::NotNullable),
13614                Some(len) => len,
13615            };
13616            // Calling decoder.out_of_line_offset(0) is not allowed.
13617            if len == 0 {
13618                return Ok(());
13619            };
13620            depth.increment()?;
13621            let envelope_size = 8;
13622            let bytes_len = len * envelope_size;
13623            let offset = decoder.out_of_line_offset(bytes_len)?;
13624            // Decode the envelope for each type.
13625            let mut _next_ordinal_to_read = 0;
13626            let mut next_offset = offset;
13627            let end_offset = offset + bytes_len;
13628            _next_ordinal_to_read += 1;
13629            if next_offset >= end_offset {
13630                return Ok(());
13631            }
13632
13633            // Decode unknown envelopes for gaps in ordinals.
13634            while _next_ordinal_to_read < 1 {
13635                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13636                _next_ordinal_to_read += 1;
13637                next_offset += envelope_size;
13638            }
13639
13640            let next_out_of_line = decoder.next_out_of_line();
13641            let handles_before = decoder.remaining_handles();
13642            if let Some((inlined, num_bytes, num_handles)) =
13643                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13644            {
13645                let member_inline_size =
13646                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13647                if inlined != (member_inline_size <= 4) {
13648                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13649                }
13650                let inner_offset;
13651                let mut inner_depth = depth.clone();
13652                if inlined {
13653                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13654                    inner_offset = next_offset;
13655                } else {
13656                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13657                    inner_depth.increment()?;
13658                }
13659                let val_ref = self.rssi.get_or_insert_with(|| fidl::new_empty!(i8, D));
13660                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
13661                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13662                {
13663                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13664                }
13665                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13666                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13667                }
13668            }
13669
13670            next_offset += envelope_size;
13671            _next_ordinal_to_read += 1;
13672            if next_offset >= end_offset {
13673                return Ok(());
13674            }
13675
13676            // Decode unknown envelopes for gaps in ordinals.
13677            while _next_ordinal_to_read < 2 {
13678                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13679                _next_ordinal_to_read += 1;
13680                next_offset += envelope_size;
13681            }
13682
13683            let next_out_of_line = decoder.next_out_of_line();
13684            let handles_before = decoder.remaining_handles();
13685            if let Some((inlined, num_bytes, num_handles)) =
13686                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13687            {
13688                let member_inline_size =
13689                    <ScanData as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13690                if inlined != (member_inline_size <= 4) {
13691                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13692                }
13693                let inner_offset;
13694                let mut inner_depth = depth.clone();
13695                if inlined {
13696                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13697                    inner_offset = next_offset;
13698                } else {
13699                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13700                    inner_depth.increment()?;
13701                }
13702                let val_ref = self.data.get_or_insert_with(|| fidl::new_empty!(ScanData, D));
13703                fidl::decode!(ScanData, D, val_ref, decoder, inner_offset, inner_depth)?;
13704                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13705                {
13706                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13707                }
13708                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13709                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13710                }
13711            }
13712
13713            next_offset += envelope_size;
13714            _next_ordinal_to_read += 1;
13715            if next_offset >= end_offset {
13716                return Ok(());
13717            }
13718
13719            // Decode unknown envelopes for gaps in ordinals.
13720            while _next_ordinal_to_read < 3 {
13721                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13722                _next_ordinal_to_read += 1;
13723                next_offset += envelope_size;
13724            }
13725
13726            let next_out_of_line = decoder.next_out_of_line();
13727            let handles_before = decoder.remaining_handles();
13728            if let Some((inlined, num_bytes, num_handles)) =
13729                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13730            {
13731                let member_inline_size =
13732                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13733                if inlined != (member_inline_size <= 4) {
13734                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13735                }
13736                let inner_offset;
13737                let mut inner_depth = depth.clone();
13738                if inlined {
13739                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13740                    inner_offset = next_offset;
13741                } else {
13742                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13743                    inner_depth.increment()?;
13744                }
13745                let val_ref = self.event_counter.get_or_insert_with(|| fidl::new_empty!(u16, D));
13746                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
13747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13748                {
13749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13750                }
13751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13753                }
13754            }
13755
13756            next_offset += envelope_size;
13757            _next_ordinal_to_read += 1;
13758            if next_offset >= end_offset {
13759                return Ok(());
13760            }
13761
13762            // Decode unknown envelopes for gaps in ordinals.
13763            while _next_ordinal_to_read < 4 {
13764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13765                _next_ordinal_to_read += 1;
13766                next_offset += envelope_size;
13767            }
13768
13769            let next_out_of_line = decoder.next_out_of_line();
13770            let handles_before = decoder.remaining_handles();
13771            if let Some((inlined, num_bytes, num_handles)) =
13772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13773            {
13774                let member_inline_size =
13775                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13776                if inlined != (member_inline_size <= 4) {
13777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13778                }
13779                let inner_offset;
13780                let mut inner_depth = depth.clone();
13781                if inlined {
13782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13783                    inner_offset = next_offset;
13784                } else {
13785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13786                    inner_depth.increment()?;
13787                }
13788                let val_ref = self.subevent.get_or_insert_with(|| fidl::new_empty!(u8, D));
13789                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
13790                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13791                {
13792                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13793                }
13794                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13795                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13796                }
13797            }
13798
13799            next_offset += envelope_size;
13800            _next_ordinal_to_read += 1;
13801            if next_offset >= end_offset {
13802                return Ok(());
13803            }
13804
13805            // Decode unknown envelopes for gaps in ordinals.
13806            while _next_ordinal_to_read < 5 {
13807                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13808                _next_ordinal_to_read += 1;
13809                next_offset += envelope_size;
13810            }
13811
13812            let next_out_of_line = decoder.next_out_of_line();
13813            let handles_before = decoder.remaining_handles();
13814            if let Some((inlined, num_bytes, num_handles)) =
13815                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13816            {
13817                let member_inline_size =
13818                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13819                if inlined != (member_inline_size <= 4) {
13820                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13821                }
13822                let inner_offset;
13823                let mut inner_depth = depth.clone();
13824                if inlined {
13825                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13826                    inner_offset = next_offset;
13827                } else {
13828                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
13829                    inner_depth.increment()?;
13830                }
13831                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
13832                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
13833                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
13834                {
13835                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
13836                }
13837                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
13838                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
13839                }
13840            }
13841
13842            next_offset += envelope_size;
13843
13844            // Decode the remaining unknown envelopes.
13845            while next_offset < end_offset {
13846                _next_ordinal_to_read += 1;
13847                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13848                next_offset += envelope_size;
13849            }
13850
13851            Ok(())
13852        }
13853    }
13854
13855    impl PeriodicAdvertisingSyncConfiguration {
13856        #[inline(always)]
13857        fn max_ordinal_present(&self) -> u64 {
13858            if let Some(_) = self.filter_duplicates {
13859                return 1;
13860            }
13861            0
13862        }
13863    }
13864
13865    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncConfiguration {
13866        type Borrowed<'a> = &'a Self;
13867        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
13868            value
13869        }
13870    }
13871
13872    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncConfiguration {
13873        type Owned = Self;
13874
13875        #[inline(always)]
13876        fn inline_align(_context: fidl::encoding::Context) -> usize {
13877            8
13878        }
13879
13880        #[inline(always)]
13881        fn inline_size(_context: fidl::encoding::Context) -> usize {
13882            16
13883        }
13884    }
13885
13886    unsafe impl<D: fidl::encoding::ResourceDialect>
13887        fidl::encoding::Encode<PeriodicAdvertisingSyncConfiguration, D>
13888        for &PeriodicAdvertisingSyncConfiguration
13889    {
13890        unsafe fn encode(
13891            self,
13892            encoder: &mut fidl::encoding::Encoder<'_, D>,
13893            offset: usize,
13894            mut depth: fidl::encoding::Depth,
13895        ) -> fidl::Result<()> {
13896            encoder.debug_check_bounds::<PeriodicAdvertisingSyncConfiguration>(offset);
13897            // Vector header
13898            let max_ordinal: u64 = self.max_ordinal_present();
13899            encoder.write_num(max_ordinal, offset);
13900            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
13901            // Calling encoder.out_of_line_offset(0) is not allowed.
13902            if max_ordinal == 0 {
13903                return Ok(());
13904            }
13905            depth.increment()?;
13906            let envelope_size = 8;
13907            let bytes_len = max_ordinal as usize * envelope_size;
13908            #[allow(unused_variables)]
13909            let offset = encoder.out_of_line_offset(bytes_len);
13910            let mut _prev_end_offset: usize = 0;
13911            if 1 > max_ordinal {
13912                return Ok(());
13913            }
13914
13915            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
13916            // are envelope_size bytes.
13917            let cur_offset: usize = (1 - 1) * envelope_size;
13918
13919            // Zero reserved fields.
13920            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
13921
13922            // Safety:
13923            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
13924            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
13925            //   envelope_size bytes, there is always sufficient room.
13926            fidl::encoding::encode_in_envelope_optional::<bool, D>(
13927                self.filter_duplicates
13928                    .as_ref()
13929                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
13930                encoder,
13931                offset + cur_offset,
13932                depth,
13933            )?;
13934
13935            _prev_end_offset = cur_offset + envelope_size;
13936
13937            Ok(())
13938        }
13939    }
13940
13941    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
13942        for PeriodicAdvertisingSyncConfiguration
13943    {
13944        #[inline(always)]
13945        fn new_empty() -> Self {
13946            Self::default()
13947        }
13948
13949        unsafe fn decode(
13950            &mut self,
13951            decoder: &mut fidl::encoding::Decoder<'_, D>,
13952            offset: usize,
13953            mut depth: fidl::encoding::Depth,
13954        ) -> fidl::Result<()> {
13955            decoder.debug_check_bounds::<Self>(offset);
13956            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
13957                None => return Err(fidl::Error::NotNullable),
13958                Some(len) => len,
13959            };
13960            // Calling decoder.out_of_line_offset(0) is not allowed.
13961            if len == 0 {
13962                return Ok(());
13963            };
13964            depth.increment()?;
13965            let envelope_size = 8;
13966            let bytes_len = len * envelope_size;
13967            let offset = decoder.out_of_line_offset(bytes_len)?;
13968            // Decode the envelope for each type.
13969            let mut _next_ordinal_to_read = 0;
13970            let mut next_offset = offset;
13971            let end_offset = offset + bytes_len;
13972            _next_ordinal_to_read += 1;
13973            if next_offset >= end_offset {
13974                return Ok(());
13975            }
13976
13977            // Decode unknown envelopes for gaps in ordinals.
13978            while _next_ordinal_to_read < 1 {
13979                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
13980                _next_ordinal_to_read += 1;
13981                next_offset += envelope_size;
13982            }
13983
13984            let next_out_of_line = decoder.next_out_of_line();
13985            let handles_before = decoder.remaining_handles();
13986            if let Some((inlined, num_bytes, num_handles)) =
13987                fidl::encoding::decode_envelope_header(decoder, next_offset)?
13988            {
13989                let member_inline_size =
13990                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
13991                if inlined != (member_inline_size <= 4) {
13992                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
13993                }
13994                let inner_offset;
13995                let mut inner_depth = depth.clone();
13996                if inlined {
13997                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
13998                    inner_offset = next_offset;
13999                } else {
14000                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14001                    inner_depth.increment()?;
14002                }
14003                let val_ref =
14004                    self.filter_duplicates.get_or_insert_with(|| fidl::new_empty!(bool, D));
14005                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
14006                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14007                {
14008                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14009                }
14010                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14011                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14012                }
14013            }
14014
14015            next_offset += envelope_size;
14016
14017            // Decode the remaining unknown envelopes.
14018            while next_offset < end_offset {
14019                _next_ordinal_to_read += 1;
14020                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14021                next_offset += envelope_size;
14022            }
14023
14024            Ok(())
14025        }
14026    }
14027
14028    impl PeriodicAdvertisingSyncOnEstablishedRequest {
14029        #[inline(always)]
14030        fn max_ordinal_present(&self) -> u64 {
14031            if let Some(_) = self.periodic_advertising_interval {
14032                return 7;
14033            }
14034            if let Some(_) = self.phy {
14035                return 6;
14036            }
14037            if let Some(_) = self.advertising_sid {
14038                return 5;
14039            }
14040            if let Some(_) = self.service_data {
14041                return 4;
14042            }
14043            if let Some(_) = self.peer_id {
14044                return 3;
14045            }
14046            if let Some(_) = self.subevents_count {
14047                return 2;
14048            }
14049            if let Some(_) = self.id {
14050                return 1;
14051            }
14052            0
14053        }
14054    }
14055
14056    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncOnEstablishedRequest {
14057        type Borrowed<'a> = &'a Self;
14058        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14059            value
14060        }
14061    }
14062
14063    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncOnEstablishedRequest {
14064        type Owned = Self;
14065
14066        #[inline(always)]
14067        fn inline_align(_context: fidl::encoding::Context) -> usize {
14068            8
14069        }
14070
14071        #[inline(always)]
14072        fn inline_size(_context: fidl::encoding::Context) -> usize {
14073            16
14074        }
14075    }
14076
14077    unsafe impl<D: fidl::encoding::ResourceDialect>
14078        fidl::encoding::Encode<PeriodicAdvertisingSyncOnEstablishedRequest, D>
14079        for &PeriodicAdvertisingSyncOnEstablishedRequest
14080    {
14081        unsafe fn encode(
14082            self,
14083            encoder: &mut fidl::encoding::Encoder<'_, D>,
14084            offset: usize,
14085            mut depth: fidl::encoding::Depth,
14086        ) -> fidl::Result<()> {
14087            encoder.debug_check_bounds::<PeriodicAdvertisingSyncOnEstablishedRequest>(offset);
14088            // Vector header
14089            let max_ordinal: u64 = self.max_ordinal_present();
14090            encoder.write_num(max_ordinal, offset);
14091            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14092            // Calling encoder.out_of_line_offset(0) is not allowed.
14093            if max_ordinal == 0 {
14094                return Ok(());
14095            }
14096            depth.increment()?;
14097            let envelope_size = 8;
14098            let bytes_len = max_ordinal as usize * envelope_size;
14099            #[allow(unused_variables)]
14100            let offset = encoder.out_of_line_offset(bytes_len);
14101            let mut _prev_end_offset: usize = 0;
14102            if 1 > max_ordinal {
14103                return Ok(());
14104            }
14105
14106            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14107            // are envelope_size bytes.
14108            let cur_offset: usize = (1 - 1) * envelope_size;
14109
14110            // Zero reserved fields.
14111            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14112
14113            // Safety:
14114            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14115            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14116            //   envelope_size bytes, there is always sufficient room.
14117            fidl::encoding::encode_in_envelope_optional::<PeriodicAdvertisingSyncId, D>(
14118                self.id
14119                    .as_ref()
14120                    .map(<PeriodicAdvertisingSyncId as fidl::encoding::ValueTypeMarker>::borrow),
14121                encoder,
14122                offset + cur_offset,
14123                depth,
14124            )?;
14125
14126            _prev_end_offset = cur_offset + envelope_size;
14127            if 2 > max_ordinal {
14128                return Ok(());
14129            }
14130
14131            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14132            // are envelope_size bytes.
14133            let cur_offset: usize = (2 - 1) * envelope_size;
14134
14135            // Zero reserved fields.
14136            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14137
14138            // Safety:
14139            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14140            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14141            //   envelope_size bytes, there is always sufficient room.
14142            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14143                self.subevents_count.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14144                encoder,
14145                offset + cur_offset,
14146                depth,
14147            )?;
14148
14149            _prev_end_offset = cur_offset + envelope_size;
14150            if 3 > max_ordinal {
14151                return Ok(());
14152            }
14153
14154            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14155            // are envelope_size bytes.
14156            let cur_offset: usize = (3 - 1) * envelope_size;
14157
14158            // Zero reserved fields.
14159            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14160
14161            // Safety:
14162            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14163            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14164            //   envelope_size bytes, there is always sufficient room.
14165            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::PeerId, D>(
14166            self.peer_id.as_ref().map(<fidl_fuchsia_bluetooth__common::PeerId as fidl::encoding::ValueTypeMarker>::borrow),
14167            encoder, offset + cur_offset, depth
14168        )?;
14169
14170            _prev_end_offset = cur_offset + envelope_size;
14171            if 4 > max_ordinal {
14172                return Ok(());
14173            }
14174
14175            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14176            // are envelope_size bytes.
14177            let cur_offset: usize = (4 - 1) * envelope_size;
14178
14179            // Zero reserved fields.
14180            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14181
14182            // Safety:
14183            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14184            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14185            //   envelope_size bytes, there is always sufficient room.
14186            fidl::encoding::encode_in_envelope_optional::<u16, D>(
14187                self.service_data.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
14188                encoder,
14189                offset + cur_offset,
14190                depth,
14191            )?;
14192
14193            _prev_end_offset = cur_offset + envelope_size;
14194            if 5 > max_ordinal {
14195                return Ok(());
14196            }
14197
14198            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14199            // are envelope_size bytes.
14200            let cur_offset: usize = (5 - 1) * envelope_size;
14201
14202            // Zero reserved fields.
14203            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14204
14205            // Safety:
14206            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14207            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14208            //   envelope_size bytes, there is always sufficient room.
14209            fidl::encoding::encode_in_envelope_optional::<u8, D>(
14210                self.advertising_sid.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
14211                encoder,
14212                offset + cur_offset,
14213                depth,
14214            )?;
14215
14216            _prev_end_offset = cur_offset + envelope_size;
14217            if 6 > max_ordinal {
14218                return Ok(());
14219            }
14220
14221            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14222            // are envelope_size bytes.
14223            let cur_offset: usize = (6 - 1) * envelope_size;
14224
14225            // Zero reserved fields.
14226            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14227
14228            // Safety:
14229            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14230            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14231            //   envelope_size bytes, there is always sufficient room.
14232            fidl::encoding::encode_in_envelope_optional::<PhysicalLayer, D>(
14233                self.phy.as_ref().map(<PhysicalLayer as fidl::encoding::ValueTypeMarker>::borrow),
14234                encoder,
14235                offset + cur_offset,
14236                depth,
14237            )?;
14238
14239            _prev_end_offset = cur_offset + envelope_size;
14240            if 7 > max_ordinal {
14241                return Ok(());
14242            }
14243
14244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14245            // are envelope_size bytes.
14246            let cur_offset: usize = (7 - 1) * envelope_size;
14247
14248            // Zero reserved fields.
14249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14250
14251            // Safety:
14252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14254            //   envelope_size bytes, there is always sufficient room.
14255            fidl::encoding::encode_in_envelope_optional::<u16, D>(
14256                self.periodic_advertising_interval
14257                    .as_ref()
14258                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
14259                encoder,
14260                offset + cur_offset,
14261                depth,
14262            )?;
14263
14264            _prev_end_offset = cur_offset + envelope_size;
14265
14266            Ok(())
14267        }
14268    }
14269
14270    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14271        for PeriodicAdvertisingSyncOnEstablishedRequest
14272    {
14273        #[inline(always)]
14274        fn new_empty() -> Self {
14275            Self::default()
14276        }
14277
14278        unsafe fn decode(
14279            &mut self,
14280            decoder: &mut fidl::encoding::Decoder<'_, D>,
14281            offset: usize,
14282            mut depth: fidl::encoding::Depth,
14283        ) -> fidl::Result<()> {
14284            decoder.debug_check_bounds::<Self>(offset);
14285            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14286                None => return Err(fidl::Error::NotNullable),
14287                Some(len) => len,
14288            };
14289            // Calling decoder.out_of_line_offset(0) is not allowed.
14290            if len == 0 {
14291                return Ok(());
14292            };
14293            depth.increment()?;
14294            let envelope_size = 8;
14295            let bytes_len = len * envelope_size;
14296            let offset = decoder.out_of_line_offset(bytes_len)?;
14297            // Decode the envelope for each type.
14298            let mut _next_ordinal_to_read = 0;
14299            let mut next_offset = offset;
14300            let end_offset = offset + bytes_len;
14301            _next_ordinal_to_read += 1;
14302            if next_offset >= end_offset {
14303                return Ok(());
14304            }
14305
14306            // Decode unknown envelopes for gaps in ordinals.
14307            while _next_ordinal_to_read < 1 {
14308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14309                _next_ordinal_to_read += 1;
14310                next_offset += envelope_size;
14311            }
14312
14313            let next_out_of_line = decoder.next_out_of_line();
14314            let handles_before = decoder.remaining_handles();
14315            if let Some((inlined, num_bytes, num_handles)) =
14316                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14317            {
14318                let member_inline_size =
14319                    <PeriodicAdvertisingSyncId as fidl::encoding::TypeMarker>::inline_size(
14320                        decoder.context,
14321                    );
14322                if inlined != (member_inline_size <= 4) {
14323                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14324                }
14325                let inner_offset;
14326                let mut inner_depth = depth.clone();
14327                if inlined {
14328                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14329                    inner_offset = next_offset;
14330                } else {
14331                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14332                    inner_depth.increment()?;
14333                }
14334                let val_ref =
14335                    self.id.get_or_insert_with(|| fidl::new_empty!(PeriodicAdvertisingSyncId, D));
14336                fidl::decode!(
14337                    PeriodicAdvertisingSyncId,
14338                    D,
14339                    val_ref,
14340                    decoder,
14341                    inner_offset,
14342                    inner_depth
14343                )?;
14344                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14345                {
14346                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14347                }
14348                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14349                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14350                }
14351            }
14352
14353            next_offset += envelope_size;
14354            _next_ordinal_to_read += 1;
14355            if next_offset >= end_offset {
14356                return Ok(());
14357            }
14358
14359            // Decode unknown envelopes for gaps in ordinals.
14360            while _next_ordinal_to_read < 2 {
14361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14362                _next_ordinal_to_read += 1;
14363                next_offset += envelope_size;
14364            }
14365
14366            let next_out_of_line = decoder.next_out_of_line();
14367            let handles_before = decoder.remaining_handles();
14368            if let Some((inlined, num_bytes, num_handles)) =
14369                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14370            {
14371                let member_inline_size =
14372                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14373                if inlined != (member_inline_size <= 4) {
14374                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14375                }
14376                let inner_offset;
14377                let mut inner_depth = depth.clone();
14378                if inlined {
14379                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14380                    inner_offset = next_offset;
14381                } else {
14382                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14383                    inner_depth.increment()?;
14384                }
14385                let val_ref = self.subevents_count.get_or_insert_with(|| fidl::new_empty!(u8, D));
14386                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14387                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14388                {
14389                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14390                }
14391                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14392                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14393                }
14394            }
14395
14396            next_offset += envelope_size;
14397            _next_ordinal_to_read += 1;
14398            if next_offset >= end_offset {
14399                return Ok(());
14400            }
14401
14402            // Decode unknown envelopes for gaps in ordinals.
14403            while _next_ordinal_to_read < 3 {
14404                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14405                _next_ordinal_to_read += 1;
14406                next_offset += envelope_size;
14407            }
14408
14409            let next_out_of_line = decoder.next_out_of_line();
14410            let handles_before = decoder.remaining_handles();
14411            if let Some((inlined, num_bytes, num_handles)) =
14412                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14413            {
14414                let member_inline_size = <fidl_fuchsia_bluetooth__common::PeerId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14415                if inlined != (member_inline_size <= 4) {
14416                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14417                }
14418                let inner_offset;
14419                let mut inner_depth = depth.clone();
14420                if inlined {
14421                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14422                    inner_offset = next_offset;
14423                } else {
14424                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14425                    inner_depth.increment()?;
14426                }
14427                let val_ref = self.peer_id.get_or_insert_with(|| {
14428                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::PeerId, D)
14429                });
14430                fidl::decode!(
14431                    fidl_fuchsia_bluetooth__common::PeerId,
14432                    D,
14433                    val_ref,
14434                    decoder,
14435                    inner_offset,
14436                    inner_depth
14437                )?;
14438                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14439                {
14440                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14441                }
14442                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14443                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14444                }
14445            }
14446
14447            next_offset += envelope_size;
14448            _next_ordinal_to_read += 1;
14449            if next_offset >= end_offset {
14450                return Ok(());
14451            }
14452
14453            // Decode unknown envelopes for gaps in ordinals.
14454            while _next_ordinal_to_read < 4 {
14455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14456                _next_ordinal_to_read += 1;
14457                next_offset += envelope_size;
14458            }
14459
14460            let next_out_of_line = decoder.next_out_of_line();
14461            let handles_before = decoder.remaining_handles();
14462            if let Some((inlined, num_bytes, num_handles)) =
14463                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14464            {
14465                let member_inline_size =
14466                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14467                if inlined != (member_inline_size <= 4) {
14468                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14469                }
14470                let inner_offset;
14471                let mut inner_depth = depth.clone();
14472                if inlined {
14473                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14474                    inner_offset = next_offset;
14475                } else {
14476                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14477                    inner_depth.increment()?;
14478                }
14479                let val_ref = self.service_data.get_or_insert_with(|| fidl::new_empty!(u16, D));
14480                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14481                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14482                {
14483                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14484                }
14485                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14486                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14487                }
14488            }
14489
14490            next_offset += envelope_size;
14491            _next_ordinal_to_read += 1;
14492            if next_offset >= end_offset {
14493                return Ok(());
14494            }
14495
14496            // Decode unknown envelopes for gaps in ordinals.
14497            while _next_ordinal_to_read < 5 {
14498                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14499                _next_ordinal_to_read += 1;
14500                next_offset += envelope_size;
14501            }
14502
14503            let next_out_of_line = decoder.next_out_of_line();
14504            let handles_before = decoder.remaining_handles();
14505            if let Some((inlined, num_bytes, num_handles)) =
14506                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14507            {
14508                let member_inline_size =
14509                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14510                if inlined != (member_inline_size <= 4) {
14511                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14512                }
14513                let inner_offset;
14514                let mut inner_depth = depth.clone();
14515                if inlined {
14516                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14517                    inner_offset = next_offset;
14518                } else {
14519                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14520                    inner_depth.increment()?;
14521                }
14522                let val_ref = self.advertising_sid.get_or_insert_with(|| fidl::new_empty!(u8, D));
14523                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
14524                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14525                {
14526                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14527                }
14528                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14529                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14530                }
14531            }
14532
14533            next_offset += envelope_size;
14534            _next_ordinal_to_read += 1;
14535            if next_offset >= end_offset {
14536                return Ok(());
14537            }
14538
14539            // Decode unknown envelopes for gaps in ordinals.
14540            while _next_ordinal_to_read < 6 {
14541                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14542                _next_ordinal_to_read += 1;
14543                next_offset += envelope_size;
14544            }
14545
14546            let next_out_of_line = decoder.next_out_of_line();
14547            let handles_before = decoder.remaining_handles();
14548            if let Some((inlined, num_bytes, num_handles)) =
14549                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14550            {
14551                let member_inline_size =
14552                    <PhysicalLayer as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14553                if inlined != (member_inline_size <= 4) {
14554                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14555                }
14556                let inner_offset;
14557                let mut inner_depth = depth.clone();
14558                if inlined {
14559                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14560                    inner_offset = next_offset;
14561                } else {
14562                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14563                    inner_depth.increment()?;
14564                }
14565                let val_ref = self.phy.get_or_insert_with(|| fidl::new_empty!(PhysicalLayer, D));
14566                fidl::decode!(PhysicalLayer, D, val_ref, decoder, inner_offset, inner_depth)?;
14567                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14568                {
14569                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14570                }
14571                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14572                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14573                }
14574            }
14575
14576            next_offset += envelope_size;
14577            _next_ordinal_to_read += 1;
14578            if next_offset >= end_offset {
14579                return Ok(());
14580            }
14581
14582            // Decode unknown envelopes for gaps in ordinals.
14583            while _next_ordinal_to_read < 7 {
14584                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14585                _next_ordinal_to_read += 1;
14586                next_offset += envelope_size;
14587            }
14588
14589            let next_out_of_line = decoder.next_out_of_line();
14590            let handles_before = decoder.remaining_handles();
14591            if let Some((inlined, num_bytes, num_handles)) =
14592                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14593            {
14594                let member_inline_size =
14595                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14596                if inlined != (member_inline_size <= 4) {
14597                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14598                }
14599                let inner_offset;
14600                let mut inner_depth = depth.clone();
14601                if inlined {
14602                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14603                    inner_offset = next_offset;
14604                } else {
14605                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14606                    inner_depth.increment()?;
14607                }
14608                let val_ref = self
14609                    .periodic_advertising_interval
14610                    .get_or_insert_with(|| fidl::new_empty!(u16, D));
14611                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
14612                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14613                {
14614                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14615                }
14616                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14617                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14618                }
14619            }
14620
14621            next_offset += envelope_size;
14622
14623            // Decode the remaining unknown envelopes.
14624            while next_offset < end_offset {
14625                _next_ordinal_to_read += 1;
14626                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14627                next_offset += envelope_size;
14628            }
14629
14630            Ok(())
14631        }
14632    }
14633
14634    impl PeriodicAdvertisingSyncSyncToSubeventsRequest {
14635        #[inline(always)]
14636        fn max_ordinal_present(&self) -> u64 {
14637            if let Some(_) = self.subevents {
14638                return 1;
14639            }
14640            0
14641        }
14642    }
14643
14644    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncSyncToSubeventsRequest {
14645        type Borrowed<'a> = &'a Self;
14646        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14647            value
14648        }
14649    }
14650
14651    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncSyncToSubeventsRequest {
14652        type Owned = Self;
14653
14654        #[inline(always)]
14655        fn inline_align(_context: fidl::encoding::Context) -> usize {
14656            8
14657        }
14658
14659        #[inline(always)]
14660        fn inline_size(_context: fidl::encoding::Context) -> usize {
14661            16
14662        }
14663    }
14664
14665    unsafe impl<D: fidl::encoding::ResourceDialect>
14666        fidl::encoding::Encode<PeriodicAdvertisingSyncSyncToSubeventsRequest, D>
14667        for &PeriodicAdvertisingSyncSyncToSubeventsRequest
14668    {
14669        unsafe fn encode(
14670            self,
14671            encoder: &mut fidl::encoding::Encoder<'_, D>,
14672            offset: usize,
14673            mut depth: fidl::encoding::Depth,
14674        ) -> fidl::Result<()> {
14675            encoder.debug_check_bounds::<PeriodicAdvertisingSyncSyncToSubeventsRequest>(offset);
14676            // Vector header
14677            let max_ordinal: u64 = self.max_ordinal_present();
14678            encoder.write_num(max_ordinal, offset);
14679            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14680            // Calling encoder.out_of_line_offset(0) is not allowed.
14681            if max_ordinal == 0 {
14682                return Ok(());
14683            }
14684            depth.increment()?;
14685            let envelope_size = 8;
14686            let bytes_len = max_ordinal as usize * envelope_size;
14687            #[allow(unused_variables)]
14688            let offset = encoder.out_of_line_offset(bytes_len);
14689            let mut _prev_end_offset: usize = 0;
14690            if 1 > max_ordinal {
14691                return Ok(());
14692            }
14693
14694            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14695            // are envelope_size bytes.
14696            let cur_offset: usize = (1 - 1) * envelope_size;
14697
14698            // Zero reserved fields.
14699            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14700
14701            // Safety:
14702            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14703            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14704            //   envelope_size bytes, there is always sufficient room.
14705            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 128>, D>(
14706                self.subevents.as_ref().map(
14707                    <fidl::encoding::Vector<u8, 128> as fidl::encoding::ValueTypeMarker>::borrow,
14708                ),
14709                encoder,
14710                offset + cur_offset,
14711                depth,
14712            )?;
14713
14714            _prev_end_offset = cur_offset + envelope_size;
14715
14716            Ok(())
14717        }
14718    }
14719
14720    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14721        for PeriodicAdvertisingSyncSyncToSubeventsRequest
14722    {
14723        #[inline(always)]
14724        fn new_empty() -> Self {
14725            Self::default()
14726        }
14727
14728        unsafe fn decode(
14729            &mut self,
14730            decoder: &mut fidl::encoding::Decoder<'_, D>,
14731            offset: usize,
14732            mut depth: fidl::encoding::Depth,
14733        ) -> fidl::Result<()> {
14734            decoder.debug_check_bounds::<Self>(offset);
14735            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14736                None => return Err(fidl::Error::NotNullable),
14737                Some(len) => len,
14738            };
14739            // Calling decoder.out_of_line_offset(0) is not allowed.
14740            if len == 0 {
14741                return Ok(());
14742            };
14743            depth.increment()?;
14744            let envelope_size = 8;
14745            let bytes_len = len * envelope_size;
14746            let offset = decoder.out_of_line_offset(bytes_len)?;
14747            // Decode the envelope for each type.
14748            let mut _next_ordinal_to_read = 0;
14749            let mut next_offset = offset;
14750            let end_offset = offset + bytes_len;
14751            _next_ordinal_to_read += 1;
14752            if next_offset >= end_offset {
14753                return Ok(());
14754            }
14755
14756            // Decode unknown envelopes for gaps in ordinals.
14757            while _next_ordinal_to_read < 1 {
14758                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14759                _next_ordinal_to_read += 1;
14760                next_offset += envelope_size;
14761            }
14762
14763            let next_out_of_line = decoder.next_out_of_line();
14764            let handles_before = decoder.remaining_handles();
14765            if let Some((inlined, num_bytes, num_handles)) =
14766                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14767            {
14768                let member_inline_size =
14769                    <fidl::encoding::Vector<u8, 128> as fidl::encoding::TypeMarker>::inline_size(
14770                        decoder.context,
14771                    );
14772                if inlined != (member_inline_size <= 4) {
14773                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14774                }
14775                let inner_offset;
14776                let mut inner_depth = depth.clone();
14777                if inlined {
14778                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14779                    inner_offset = next_offset;
14780                } else {
14781                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14782                    inner_depth.increment()?;
14783                }
14784                let val_ref = self
14785                    .subevents
14786                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 128>, D));
14787                fidl::decode!(fidl::encoding::Vector<u8, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
14788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14789                {
14790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14791                }
14792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14794                }
14795            }
14796
14797            next_offset += envelope_size;
14798
14799            // Decode the remaining unknown envelopes.
14800            while next_offset < end_offset {
14801                _next_ordinal_to_read += 1;
14802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14803                next_offset += envelope_size;
14804            }
14805
14806            Ok(())
14807        }
14808    }
14809
14810    impl PeriodicAdvertisingSyncWatchAdvertisingReportResponse {
14811        #[inline(always)]
14812        fn max_ordinal_present(&self) -> u64 {
14813            if let Some(_) = self.reports {
14814                return 1;
14815            }
14816            0
14817        }
14818    }
14819
14820    impl fidl::encoding::ValueTypeMarker for PeriodicAdvertisingSyncWatchAdvertisingReportResponse {
14821        type Borrowed<'a> = &'a Self;
14822        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
14823            value
14824        }
14825    }
14826
14827    unsafe impl fidl::encoding::TypeMarker for PeriodicAdvertisingSyncWatchAdvertisingReportResponse {
14828        type Owned = Self;
14829
14830        #[inline(always)]
14831        fn inline_align(_context: fidl::encoding::Context) -> usize {
14832            8
14833        }
14834
14835        #[inline(always)]
14836        fn inline_size(_context: fidl::encoding::Context) -> usize {
14837            16
14838        }
14839    }
14840
14841    unsafe impl<D: fidl::encoding::ResourceDialect>
14842        fidl::encoding::Encode<PeriodicAdvertisingSyncWatchAdvertisingReportResponse, D>
14843        for &PeriodicAdvertisingSyncWatchAdvertisingReportResponse
14844    {
14845        unsafe fn encode(
14846            self,
14847            encoder: &mut fidl::encoding::Encoder<'_, D>,
14848            offset: usize,
14849            mut depth: fidl::encoding::Depth,
14850        ) -> fidl::Result<()> {
14851            encoder.debug_check_bounds::<PeriodicAdvertisingSyncWatchAdvertisingReportResponse>(
14852                offset,
14853            );
14854            // Vector header
14855            let max_ordinal: u64 = self.max_ordinal_present();
14856            encoder.write_num(max_ordinal, offset);
14857            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
14858            // Calling encoder.out_of_line_offset(0) is not allowed.
14859            if max_ordinal == 0 {
14860                return Ok(());
14861            }
14862            depth.increment()?;
14863            let envelope_size = 8;
14864            let bytes_len = max_ordinal as usize * envelope_size;
14865            #[allow(unused_variables)]
14866            let offset = encoder.out_of_line_offset(bytes_len);
14867            let mut _prev_end_offset: usize = 0;
14868            if 1 > max_ordinal {
14869                return Ok(());
14870            }
14871
14872            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
14873            // are envelope_size bytes.
14874            let cur_offset: usize = (1 - 1) * envelope_size;
14875
14876            // Zero reserved fields.
14877            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
14878
14879            // Safety:
14880            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
14881            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
14882            //   envelope_size bytes, there is always sufficient room.
14883            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<SyncReport>, D>(
14884            self.reports.as_ref().map(<fidl::encoding::UnboundedVector<SyncReport> as fidl::encoding::ValueTypeMarker>::borrow),
14885            encoder, offset + cur_offset, depth
14886        )?;
14887
14888            _prev_end_offset = cur_offset + envelope_size;
14889
14890            Ok(())
14891        }
14892    }
14893
14894    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
14895        for PeriodicAdvertisingSyncWatchAdvertisingReportResponse
14896    {
14897        #[inline(always)]
14898        fn new_empty() -> Self {
14899            Self::default()
14900        }
14901
14902        unsafe fn decode(
14903            &mut self,
14904            decoder: &mut fidl::encoding::Decoder<'_, D>,
14905            offset: usize,
14906            mut depth: fidl::encoding::Depth,
14907        ) -> fidl::Result<()> {
14908            decoder.debug_check_bounds::<Self>(offset);
14909            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
14910                None => return Err(fidl::Error::NotNullable),
14911                Some(len) => len,
14912            };
14913            // Calling decoder.out_of_line_offset(0) is not allowed.
14914            if len == 0 {
14915                return Ok(());
14916            };
14917            depth.increment()?;
14918            let envelope_size = 8;
14919            let bytes_len = len * envelope_size;
14920            let offset = decoder.out_of_line_offset(bytes_len)?;
14921            // Decode the envelope for each type.
14922            let mut _next_ordinal_to_read = 0;
14923            let mut next_offset = offset;
14924            let end_offset = offset + bytes_len;
14925            _next_ordinal_to_read += 1;
14926            if next_offset >= end_offset {
14927                return Ok(());
14928            }
14929
14930            // Decode unknown envelopes for gaps in ordinals.
14931            while _next_ordinal_to_read < 1 {
14932                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14933                _next_ordinal_to_read += 1;
14934                next_offset += envelope_size;
14935            }
14936
14937            let next_out_of_line = decoder.next_out_of_line();
14938            let handles_before = decoder.remaining_handles();
14939            if let Some((inlined, num_bytes, num_handles)) =
14940                fidl::encoding::decode_envelope_header(decoder, next_offset)?
14941            {
14942                let member_inline_size = <fidl::encoding::UnboundedVector<SyncReport> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
14943                if inlined != (member_inline_size <= 4) {
14944                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
14945                }
14946                let inner_offset;
14947                let mut inner_depth = depth.clone();
14948                if inlined {
14949                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
14950                    inner_offset = next_offset;
14951                } else {
14952                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
14953                    inner_depth.increment()?;
14954                }
14955                let val_ref = self.reports.get_or_insert_with(|| {
14956                    fidl::new_empty!(fidl::encoding::UnboundedVector<SyncReport>, D)
14957                });
14958                fidl::decode!(
14959                    fidl::encoding::UnboundedVector<SyncReport>,
14960                    D,
14961                    val_ref,
14962                    decoder,
14963                    inner_offset,
14964                    inner_depth
14965                )?;
14966                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
14967                {
14968                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
14969                }
14970                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
14971                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
14972                }
14973            }
14974
14975            next_offset += envelope_size;
14976
14977            // Decode the remaining unknown envelopes.
14978            while next_offset < end_offset {
14979                _next_ordinal_to_read += 1;
14980                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
14981                next_offset += envelope_size;
14982            }
14983
14984            Ok(())
14985        }
14986    }
14987
14988    impl ScanData {
14989        #[inline(always)]
14990        fn max_ordinal_present(&self) -> u64 {
14991            if let Some(_) = self.broadcast_name {
14992                return 9;
14993            }
14994            if let Some(_) = self.resolvable_set_identifier {
14995                return 8;
14996            }
14997            if let Some(_) = self.timestamp {
14998                return 7;
14999            }
15000            if let Some(_) = self.uris {
15001                return 6;
15002            }
15003            if let Some(_) = self.manufacturer_data {
15004                return 5;
15005            }
15006            if let Some(_) = self.service_data {
15007                return 4;
15008            }
15009            if let Some(_) = self.service_uuids {
15010                return 3;
15011            }
15012            if let Some(_) = self.appearance {
15013                return 2;
15014            }
15015            if let Some(_) = self.tx_power {
15016                return 1;
15017            }
15018            0
15019        }
15020    }
15021
15022    impl fidl::encoding::ValueTypeMarker for ScanData {
15023        type Borrowed<'a> = &'a Self;
15024        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15025            value
15026        }
15027    }
15028
15029    unsafe impl fidl::encoding::TypeMarker for ScanData {
15030        type Owned = Self;
15031
15032        #[inline(always)]
15033        fn inline_align(_context: fidl::encoding::Context) -> usize {
15034            8
15035        }
15036
15037        #[inline(always)]
15038        fn inline_size(_context: fidl::encoding::Context) -> usize {
15039            16
15040        }
15041    }
15042
15043    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScanData, D> for &ScanData {
15044        unsafe fn encode(
15045            self,
15046            encoder: &mut fidl::encoding::Encoder<'_, D>,
15047            offset: usize,
15048            mut depth: fidl::encoding::Depth,
15049        ) -> fidl::Result<()> {
15050            encoder.debug_check_bounds::<ScanData>(offset);
15051            // Vector header
15052            let max_ordinal: u64 = self.max_ordinal_present();
15053            encoder.write_num(max_ordinal, offset);
15054            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15055            // Calling encoder.out_of_line_offset(0) is not allowed.
15056            if max_ordinal == 0 {
15057                return Ok(());
15058            }
15059            depth.increment()?;
15060            let envelope_size = 8;
15061            let bytes_len = max_ordinal as usize * envelope_size;
15062            #[allow(unused_variables)]
15063            let offset = encoder.out_of_line_offset(bytes_len);
15064            let mut _prev_end_offset: usize = 0;
15065            if 1 > max_ordinal {
15066                return Ok(());
15067            }
15068
15069            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15070            // are envelope_size bytes.
15071            let cur_offset: usize = (1 - 1) * envelope_size;
15072
15073            // Zero reserved fields.
15074            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15075
15076            // Safety:
15077            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15078            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15079            //   envelope_size bytes, there is always sufficient room.
15080            fidl::encoding::encode_in_envelope_optional::<i8, D>(
15081                self.tx_power.as_ref().map(<i8 as fidl::encoding::ValueTypeMarker>::borrow),
15082                encoder,
15083                offset + cur_offset,
15084                depth,
15085            )?;
15086
15087            _prev_end_offset = cur_offset + envelope_size;
15088            if 2 > max_ordinal {
15089                return Ok(());
15090            }
15091
15092            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15093            // are envelope_size bytes.
15094            let cur_offset: usize = (2 - 1) * envelope_size;
15095
15096            // Zero reserved fields.
15097            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15098
15099            // Safety:
15100            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15101            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15102            //   envelope_size bytes, there is always sufficient room.
15103            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth__common::Appearance, D>(
15104            self.appearance.as_ref().map(<fidl_fuchsia_bluetooth__common::Appearance as fidl::encoding::ValueTypeMarker>::borrow),
15105            encoder, offset + cur_offset, depth
15106        )?;
15107
15108            _prev_end_offset = cur_offset + envelope_size;
15109            if 3 > max_ordinal {
15110                return Ok(());
15111            }
15112
15113            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15114            // are envelope_size bytes.
15115            let cur_offset: usize = (3 - 1) * envelope_size;
15116
15117            // Zero reserved fields.
15118            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15119
15120            // Safety:
15121            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15122            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15123            //   envelope_size bytes, there is always sufficient room.
15124            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid>, D>(
15125            self.service_uuids.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid> as fidl::encoding::ValueTypeMarker>::borrow),
15126            encoder, offset + cur_offset, depth
15127        )?;
15128
15129            _prev_end_offset = cur_offset + envelope_size;
15130            if 4 > max_ordinal {
15131                return Ok(());
15132            }
15133
15134            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15135            // are envelope_size bytes.
15136            let cur_offset: usize = (4 - 1) * envelope_size;
15137
15138            // Zero reserved fields.
15139            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15140
15141            // Safety:
15142            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15143            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15144            //   envelope_size bytes, there is always sufficient room.
15145            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ServiceData>, D>(
15146            self.service_data.as_ref().map(<fidl::encoding::UnboundedVector<ServiceData> as fidl::encoding::ValueTypeMarker>::borrow),
15147            encoder, offset + cur_offset, depth
15148        )?;
15149
15150            _prev_end_offset = cur_offset + envelope_size;
15151            if 5 > max_ordinal {
15152                return Ok(());
15153            }
15154
15155            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15156            // are envelope_size bytes.
15157            let cur_offset: usize = (5 - 1) * envelope_size;
15158
15159            // Zero reserved fields.
15160            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15161
15162            // Safety:
15163            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15164            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15165            //   envelope_size bytes, there is always sufficient room.
15166            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ManufacturerData>, D>(
15167            self.manufacturer_data.as_ref().map(<fidl::encoding::UnboundedVector<ManufacturerData> as fidl::encoding::ValueTypeMarker>::borrow),
15168            encoder, offset + cur_offset, depth
15169        )?;
15170
15171            _prev_end_offset = cur_offset + envelope_size;
15172            if 6 > max_ordinal {
15173                return Ok(());
15174            }
15175
15176            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15177            // are envelope_size bytes.
15178            let cur_offset: usize = (6 - 1) * envelope_size;
15179
15180            // Zero reserved fields.
15181            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15182
15183            // Safety:
15184            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15185            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15186            //   envelope_size bytes, there is always sufficient room.
15187            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>>, D>(
15188            self.uris.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>> as fidl::encoding::ValueTypeMarker>::borrow),
15189            encoder, offset + cur_offset, depth
15190        )?;
15191
15192            _prev_end_offset = cur_offset + envelope_size;
15193            if 7 > max_ordinal {
15194                return Ok(());
15195            }
15196
15197            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15198            // are envelope_size bytes.
15199            let cur_offset: usize = (7 - 1) * envelope_size;
15200
15201            // Zero reserved fields.
15202            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15203
15204            // Safety:
15205            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15206            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15207            //   envelope_size bytes, there is always sufficient room.
15208            fidl::encoding::encode_in_envelope_optional::<i64, D>(
15209                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
15210                encoder,
15211                offset + cur_offset,
15212                depth,
15213            )?;
15214
15215            _prev_end_offset = cur_offset + envelope_size;
15216            if 8 > max_ordinal {
15217                return Ok(());
15218            }
15219
15220            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15221            // are envelope_size bytes.
15222            let cur_offset: usize = (8 - 1) * envelope_size;
15223
15224            // Zero reserved fields.
15225            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15226
15227            // Safety:
15228            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15229            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15230            //   envelope_size bytes, there is always sufficient room.
15231            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 6>, D>(
15232                self.resolvable_set_identifier
15233                    .as_ref()
15234                    .map(<fidl::encoding::Array<u8, 6> as fidl::encoding::ValueTypeMarker>::borrow),
15235                encoder,
15236                offset + cur_offset,
15237                depth,
15238            )?;
15239
15240            _prev_end_offset = cur_offset + envelope_size;
15241            if 9 > max_ordinal {
15242                return Ok(());
15243            }
15244
15245            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15246            // are envelope_size bytes.
15247            let cur_offset: usize = (9 - 1) * envelope_size;
15248
15249            // Zero reserved fields.
15250            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15251
15252            // Safety:
15253            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15254            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15255            //   envelope_size bytes, there is always sufficient room.
15256            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
15257                self.broadcast_name.as_ref().map(
15258                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
15259                ),
15260                encoder,
15261                offset + cur_offset,
15262                depth,
15263            )?;
15264
15265            _prev_end_offset = cur_offset + envelope_size;
15266
15267            Ok(())
15268        }
15269    }
15270
15271    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanData {
15272        #[inline(always)]
15273        fn new_empty() -> Self {
15274            Self::default()
15275        }
15276
15277        unsafe fn decode(
15278            &mut self,
15279            decoder: &mut fidl::encoding::Decoder<'_, D>,
15280            offset: usize,
15281            mut depth: fidl::encoding::Depth,
15282        ) -> fidl::Result<()> {
15283            decoder.debug_check_bounds::<Self>(offset);
15284            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15285                None => return Err(fidl::Error::NotNullable),
15286                Some(len) => len,
15287            };
15288            // Calling decoder.out_of_line_offset(0) is not allowed.
15289            if len == 0 {
15290                return Ok(());
15291            };
15292            depth.increment()?;
15293            let envelope_size = 8;
15294            let bytes_len = len * envelope_size;
15295            let offset = decoder.out_of_line_offset(bytes_len)?;
15296            // Decode the envelope for each type.
15297            let mut _next_ordinal_to_read = 0;
15298            let mut next_offset = offset;
15299            let end_offset = offset + bytes_len;
15300            _next_ordinal_to_read += 1;
15301            if next_offset >= end_offset {
15302                return Ok(());
15303            }
15304
15305            // Decode unknown envelopes for gaps in ordinals.
15306            while _next_ordinal_to_read < 1 {
15307                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15308                _next_ordinal_to_read += 1;
15309                next_offset += envelope_size;
15310            }
15311
15312            let next_out_of_line = decoder.next_out_of_line();
15313            let handles_before = decoder.remaining_handles();
15314            if let Some((inlined, num_bytes, num_handles)) =
15315                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15316            {
15317                let member_inline_size =
15318                    <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15319                if inlined != (member_inline_size <= 4) {
15320                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15321                }
15322                let inner_offset;
15323                let mut inner_depth = depth.clone();
15324                if inlined {
15325                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15326                    inner_offset = next_offset;
15327                } else {
15328                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15329                    inner_depth.increment()?;
15330                }
15331                let val_ref = self.tx_power.get_or_insert_with(|| fidl::new_empty!(i8, D));
15332                fidl::decode!(i8, D, val_ref, decoder, inner_offset, inner_depth)?;
15333                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15334                {
15335                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15336                }
15337                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15338                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15339                }
15340            }
15341
15342            next_offset += envelope_size;
15343            _next_ordinal_to_read += 1;
15344            if next_offset >= end_offset {
15345                return Ok(());
15346            }
15347
15348            // Decode unknown envelopes for gaps in ordinals.
15349            while _next_ordinal_to_read < 2 {
15350                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15351                _next_ordinal_to_read += 1;
15352                next_offset += envelope_size;
15353            }
15354
15355            let next_out_of_line = decoder.next_out_of_line();
15356            let handles_before = decoder.remaining_handles();
15357            if let Some((inlined, num_bytes, num_handles)) =
15358                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15359            {
15360                let member_inline_size = <fidl_fuchsia_bluetooth__common::Appearance as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15361                if inlined != (member_inline_size <= 4) {
15362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15363                }
15364                let inner_offset;
15365                let mut inner_depth = depth.clone();
15366                if inlined {
15367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15368                    inner_offset = next_offset;
15369                } else {
15370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15371                    inner_depth.increment()?;
15372                }
15373                let val_ref = self.appearance.get_or_insert_with(|| {
15374                    fidl::new_empty!(fidl_fuchsia_bluetooth__common::Appearance, D)
15375                });
15376                fidl::decode!(
15377                    fidl_fuchsia_bluetooth__common::Appearance,
15378                    D,
15379                    val_ref,
15380                    decoder,
15381                    inner_offset,
15382                    inner_depth
15383                )?;
15384                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15385                {
15386                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15387                }
15388                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15389                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15390                }
15391            }
15392
15393            next_offset += envelope_size;
15394            _next_ordinal_to_read += 1;
15395            if next_offset >= end_offset {
15396                return Ok(());
15397            }
15398
15399            // Decode unknown envelopes for gaps in ordinals.
15400            while _next_ordinal_to_read < 3 {
15401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15402                _next_ordinal_to_read += 1;
15403                next_offset += envelope_size;
15404            }
15405
15406            let next_out_of_line = decoder.next_out_of_line();
15407            let handles_before = decoder.remaining_handles();
15408            if let Some((inlined, num_bytes, num_handles)) =
15409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15410            {
15411                let member_inline_size = <fidl::encoding::UnboundedVector<
15412                    fidl_fuchsia_bluetooth__common::Uuid,
15413                > as fidl::encoding::TypeMarker>::inline_size(
15414                    decoder.context
15415                );
15416                if inlined != (member_inline_size <= 4) {
15417                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15418                }
15419                let inner_offset;
15420                let mut inner_depth = depth.clone();
15421                if inlined {
15422                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15423                    inner_offset = next_offset;
15424                } else {
15425                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15426                    inner_depth.increment()?;
15427                }
15428                let val_ref = self.service_uuids.get_or_insert_with(|| {
15429                    fidl::new_empty!(
15430                        fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid>,
15431                        D
15432                    )
15433                });
15434                fidl::decode!(
15435                    fidl::encoding::UnboundedVector<fidl_fuchsia_bluetooth__common::Uuid>,
15436                    D,
15437                    val_ref,
15438                    decoder,
15439                    inner_offset,
15440                    inner_depth
15441                )?;
15442                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15443                {
15444                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15445                }
15446                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15447                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15448                }
15449            }
15450
15451            next_offset += envelope_size;
15452            _next_ordinal_to_read += 1;
15453            if next_offset >= end_offset {
15454                return Ok(());
15455            }
15456
15457            // Decode unknown envelopes for gaps in ordinals.
15458            while _next_ordinal_to_read < 4 {
15459                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15460                _next_ordinal_to_read += 1;
15461                next_offset += envelope_size;
15462            }
15463
15464            let next_out_of_line = decoder.next_out_of_line();
15465            let handles_before = decoder.remaining_handles();
15466            if let Some((inlined, num_bytes, num_handles)) =
15467                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15468            {
15469                let member_inline_size = <fidl::encoding::UnboundedVector<ServiceData> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15470                if inlined != (member_inline_size <= 4) {
15471                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15472                }
15473                let inner_offset;
15474                let mut inner_depth = depth.clone();
15475                if inlined {
15476                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15477                    inner_offset = next_offset;
15478                } else {
15479                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15480                    inner_depth.increment()?;
15481                }
15482                let val_ref = self.service_data.get_or_insert_with(|| {
15483                    fidl::new_empty!(fidl::encoding::UnboundedVector<ServiceData>, D)
15484                });
15485                fidl::decode!(
15486                    fidl::encoding::UnboundedVector<ServiceData>,
15487                    D,
15488                    val_ref,
15489                    decoder,
15490                    inner_offset,
15491                    inner_depth
15492                )?;
15493                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15494                {
15495                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15496                }
15497                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15498                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15499                }
15500            }
15501
15502            next_offset += envelope_size;
15503            _next_ordinal_to_read += 1;
15504            if next_offset >= end_offset {
15505                return Ok(());
15506            }
15507
15508            // Decode unknown envelopes for gaps in ordinals.
15509            while _next_ordinal_to_read < 5 {
15510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15511                _next_ordinal_to_read += 1;
15512                next_offset += envelope_size;
15513            }
15514
15515            let next_out_of_line = decoder.next_out_of_line();
15516            let handles_before = decoder.remaining_handles();
15517            if let Some((inlined, num_bytes, num_handles)) =
15518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15519            {
15520                let member_inline_size = <fidl::encoding::UnboundedVector<ManufacturerData> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15521                if inlined != (member_inline_size <= 4) {
15522                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15523                }
15524                let inner_offset;
15525                let mut inner_depth = depth.clone();
15526                if inlined {
15527                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15528                    inner_offset = next_offset;
15529                } else {
15530                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15531                    inner_depth.increment()?;
15532                }
15533                let val_ref = self.manufacturer_data.get_or_insert_with(|| {
15534                    fidl::new_empty!(fidl::encoding::UnboundedVector<ManufacturerData>, D)
15535                });
15536                fidl::decode!(
15537                    fidl::encoding::UnboundedVector<ManufacturerData>,
15538                    D,
15539                    val_ref,
15540                    decoder,
15541                    inner_offset,
15542                    inner_depth
15543                )?;
15544                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15545                {
15546                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15547                }
15548                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15549                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15550                }
15551            }
15552
15553            next_offset += envelope_size;
15554            _next_ordinal_to_read += 1;
15555            if next_offset >= end_offset {
15556                return Ok(());
15557            }
15558
15559            // Decode unknown envelopes for gaps in ordinals.
15560            while _next_ordinal_to_read < 6 {
15561                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15562                _next_ordinal_to_read += 1;
15563                next_offset += envelope_size;
15564            }
15565
15566            let next_out_of_line = decoder.next_out_of_line();
15567            let handles_before = decoder.remaining_handles();
15568            if let Some((inlined, num_bytes, num_handles)) =
15569                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15570            {
15571                let member_inline_size = <fidl::encoding::UnboundedVector<
15572                    fidl::encoding::BoundedString<278>,
15573                > as fidl::encoding::TypeMarker>::inline_size(
15574                    decoder.context
15575                );
15576                if inlined != (member_inline_size <= 4) {
15577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15578                }
15579                let inner_offset;
15580                let mut inner_depth = depth.clone();
15581                if inlined {
15582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15583                    inner_offset = next_offset;
15584                } else {
15585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15586                    inner_depth.increment()?;
15587                }
15588                let val_ref = self.uris.get_or_insert_with(|| {
15589                    fidl::new_empty!(
15590                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>>,
15591                        D
15592                    )
15593                });
15594                fidl::decode!(
15595                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<278>>,
15596                    D,
15597                    val_ref,
15598                    decoder,
15599                    inner_offset,
15600                    inner_depth
15601                )?;
15602                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15603                {
15604                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15605                }
15606                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15607                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15608                }
15609            }
15610
15611            next_offset += envelope_size;
15612            _next_ordinal_to_read += 1;
15613            if next_offset >= end_offset {
15614                return Ok(());
15615            }
15616
15617            // Decode unknown envelopes for gaps in ordinals.
15618            while _next_ordinal_to_read < 7 {
15619                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15620                _next_ordinal_to_read += 1;
15621                next_offset += envelope_size;
15622            }
15623
15624            let next_out_of_line = decoder.next_out_of_line();
15625            let handles_before = decoder.remaining_handles();
15626            if let Some((inlined, num_bytes, num_handles)) =
15627                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15628            {
15629                let member_inline_size =
15630                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15631                if inlined != (member_inline_size <= 4) {
15632                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15633                }
15634                let inner_offset;
15635                let mut inner_depth = depth.clone();
15636                if inlined {
15637                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15638                    inner_offset = next_offset;
15639                } else {
15640                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15641                    inner_depth.increment()?;
15642                }
15643                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
15644                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
15645                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15646                {
15647                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15648                }
15649                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15650                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15651                }
15652            }
15653
15654            next_offset += envelope_size;
15655            _next_ordinal_to_read += 1;
15656            if next_offset >= end_offset {
15657                return Ok(());
15658            }
15659
15660            // Decode unknown envelopes for gaps in ordinals.
15661            while _next_ordinal_to_read < 8 {
15662                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15663                _next_ordinal_to_read += 1;
15664                next_offset += envelope_size;
15665            }
15666
15667            let next_out_of_line = decoder.next_out_of_line();
15668            let handles_before = decoder.remaining_handles();
15669            if let Some((inlined, num_bytes, num_handles)) =
15670                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15671            {
15672                let member_inline_size =
15673                    <fidl::encoding::Array<u8, 6> as fidl::encoding::TypeMarker>::inline_size(
15674                        decoder.context,
15675                    );
15676                if inlined != (member_inline_size <= 4) {
15677                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15678                }
15679                let inner_offset;
15680                let mut inner_depth = depth.clone();
15681                if inlined {
15682                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15683                    inner_offset = next_offset;
15684                } else {
15685                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15686                    inner_depth.increment()?;
15687                }
15688                let val_ref = self
15689                    .resolvable_set_identifier
15690                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 6>, D));
15691                fidl::decode!(fidl::encoding::Array<u8, 6>, D, val_ref, decoder, inner_offset, inner_depth)?;
15692                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15693                {
15694                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15695                }
15696                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15697                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15698                }
15699            }
15700
15701            next_offset += envelope_size;
15702            _next_ordinal_to_read += 1;
15703            if next_offset >= end_offset {
15704                return Ok(());
15705            }
15706
15707            // Decode unknown envelopes for gaps in ordinals.
15708            while _next_ordinal_to_read < 9 {
15709                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15710                _next_ordinal_to_read += 1;
15711                next_offset += envelope_size;
15712            }
15713
15714            let next_out_of_line = decoder.next_out_of_line();
15715            let handles_before = decoder.remaining_handles();
15716            if let Some((inlined, num_bytes, num_handles)) =
15717                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15718            {
15719                let member_inline_size =
15720                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
15721                        decoder.context,
15722                    );
15723                if inlined != (member_inline_size <= 4) {
15724                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15725                }
15726                let inner_offset;
15727                let mut inner_depth = depth.clone();
15728                if inlined {
15729                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15730                    inner_offset = next_offset;
15731                } else {
15732                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15733                    inner_depth.increment()?;
15734                }
15735                let val_ref = self
15736                    .broadcast_name
15737                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
15738                fidl::decode!(
15739                    fidl::encoding::BoundedString<128>,
15740                    D,
15741                    val_ref,
15742                    decoder,
15743                    inner_offset,
15744                    inner_depth
15745                )?;
15746                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15747                {
15748                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15749                }
15750                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15751                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15752                }
15753            }
15754
15755            next_offset += envelope_size;
15756
15757            // Decode the remaining unknown envelopes.
15758            while next_offset < end_offset {
15759                _next_ordinal_to_read += 1;
15760                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15761                next_offset += envelope_size;
15762            }
15763
15764            Ok(())
15765        }
15766    }
15767
15768    impl ScanOptions {
15769        #[inline(always)]
15770        fn max_ordinal_present(&self) -> u64 {
15771            if let Some(_) = self.filters {
15772                return 1;
15773            }
15774            0
15775        }
15776    }
15777
15778    impl fidl::encoding::ValueTypeMarker for ScanOptions {
15779        type Borrowed<'a> = &'a Self;
15780        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15781            value
15782        }
15783    }
15784
15785    unsafe impl fidl::encoding::TypeMarker for ScanOptions {
15786        type Owned = Self;
15787
15788        #[inline(always)]
15789        fn inline_align(_context: fidl::encoding::Context) -> usize {
15790            8
15791        }
15792
15793        #[inline(always)]
15794        fn inline_size(_context: fidl::encoding::Context) -> usize {
15795            16
15796        }
15797    }
15798
15799    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ScanOptions, D>
15800        for &ScanOptions
15801    {
15802        unsafe fn encode(
15803            self,
15804            encoder: &mut fidl::encoding::Encoder<'_, D>,
15805            offset: usize,
15806            mut depth: fidl::encoding::Depth,
15807        ) -> fidl::Result<()> {
15808            encoder.debug_check_bounds::<ScanOptions>(offset);
15809            // Vector header
15810            let max_ordinal: u64 = self.max_ordinal_present();
15811            encoder.write_num(max_ordinal, offset);
15812            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
15813            // Calling encoder.out_of_line_offset(0) is not allowed.
15814            if max_ordinal == 0 {
15815                return Ok(());
15816            }
15817            depth.increment()?;
15818            let envelope_size = 8;
15819            let bytes_len = max_ordinal as usize * envelope_size;
15820            #[allow(unused_variables)]
15821            let offset = encoder.out_of_line_offset(bytes_len);
15822            let mut _prev_end_offset: usize = 0;
15823            if 1 > max_ordinal {
15824                return Ok(());
15825            }
15826
15827            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
15828            // are envelope_size bytes.
15829            let cur_offset: usize = (1 - 1) * envelope_size;
15830
15831            // Zero reserved fields.
15832            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
15833
15834            // Safety:
15835            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
15836            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
15837            //   envelope_size bytes, there is always sufficient room.
15838            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Filter>, D>(
15839            self.filters.as_ref().map(<fidl::encoding::UnboundedVector<Filter> as fidl::encoding::ValueTypeMarker>::borrow),
15840            encoder, offset + cur_offset, depth
15841        )?;
15842
15843            _prev_end_offset = cur_offset + envelope_size;
15844
15845            Ok(())
15846        }
15847    }
15848
15849    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScanOptions {
15850        #[inline(always)]
15851        fn new_empty() -> Self {
15852            Self::default()
15853        }
15854
15855        unsafe fn decode(
15856            &mut self,
15857            decoder: &mut fidl::encoding::Decoder<'_, D>,
15858            offset: usize,
15859            mut depth: fidl::encoding::Depth,
15860        ) -> fidl::Result<()> {
15861            decoder.debug_check_bounds::<Self>(offset);
15862            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
15863                None => return Err(fidl::Error::NotNullable),
15864                Some(len) => len,
15865            };
15866            // Calling decoder.out_of_line_offset(0) is not allowed.
15867            if len == 0 {
15868                return Ok(());
15869            };
15870            depth.increment()?;
15871            let envelope_size = 8;
15872            let bytes_len = len * envelope_size;
15873            let offset = decoder.out_of_line_offset(bytes_len)?;
15874            // Decode the envelope for each type.
15875            let mut _next_ordinal_to_read = 0;
15876            let mut next_offset = offset;
15877            let end_offset = offset + bytes_len;
15878            _next_ordinal_to_read += 1;
15879            if next_offset >= end_offset {
15880                return Ok(());
15881            }
15882
15883            // Decode unknown envelopes for gaps in ordinals.
15884            while _next_ordinal_to_read < 1 {
15885                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15886                _next_ordinal_to_read += 1;
15887                next_offset += envelope_size;
15888            }
15889
15890            let next_out_of_line = decoder.next_out_of_line();
15891            let handles_before = decoder.remaining_handles();
15892            if let Some((inlined, num_bytes, num_handles)) =
15893                fidl::encoding::decode_envelope_header(decoder, next_offset)?
15894            {
15895                let member_inline_size = <fidl::encoding::UnboundedVector<Filter> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
15896                if inlined != (member_inline_size <= 4) {
15897                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
15898                }
15899                let inner_offset;
15900                let mut inner_depth = depth.clone();
15901                if inlined {
15902                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
15903                    inner_offset = next_offset;
15904                } else {
15905                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
15906                    inner_depth.increment()?;
15907                }
15908                let val_ref = self.filters.get_or_insert_with(|| {
15909                    fidl::new_empty!(fidl::encoding::UnboundedVector<Filter>, D)
15910                });
15911                fidl::decode!(
15912                    fidl::encoding::UnboundedVector<Filter>,
15913                    D,
15914                    val_ref,
15915                    decoder,
15916                    inner_offset,
15917                    inner_depth
15918                )?;
15919                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
15920                {
15921                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
15922                }
15923                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
15924                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
15925                }
15926            }
15927
15928            next_offset += envelope_size;
15929
15930            // Decode the remaining unknown envelopes.
15931            while next_offset < end_offset {
15932                _next_ordinal_to_read += 1;
15933                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
15934                next_offset += envelope_size;
15935            }
15936
15937            Ok(())
15938        }
15939    }
15940
15941    impl fidl::encoding::ValueTypeMarker for AdvertisingProcedure {
15942        type Borrowed<'a> = &'a Self;
15943        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
15944            value
15945        }
15946    }
15947
15948    unsafe impl fidl::encoding::TypeMarker for AdvertisingProcedure {
15949        type Owned = Self;
15950
15951        #[inline(always)]
15952        fn inline_align(_context: fidl::encoding::Context) -> usize {
15953            8
15954        }
15955
15956        #[inline(always)]
15957        fn inline_size(_context: fidl::encoding::Context) -> usize {
15958            16
15959        }
15960    }
15961
15962    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdvertisingProcedure, D>
15963        for &AdvertisingProcedure
15964    {
15965        #[inline]
15966        unsafe fn encode(
15967            self,
15968            encoder: &mut fidl::encoding::Encoder<'_, D>,
15969            offset: usize,
15970            _depth: fidl::encoding::Depth,
15971        ) -> fidl::Result<()> {
15972            encoder.debug_check_bounds::<AdvertisingProcedure>(offset);
15973            encoder.write_num::<u64>(self.ordinal(), offset);
15974            match self {
15975                AdvertisingProcedure::Legacy(ref val) => {
15976                    fidl::encoding::encode_in_envelope::<Legacy, D>(
15977                        <Legacy as fidl::encoding::ValueTypeMarker>::borrow(val),
15978                        encoder,
15979                        offset + 8,
15980                        _depth,
15981                    )
15982                }
15983                AdvertisingProcedure::Extended(ref val) => {
15984                    fidl::encoding::encode_in_envelope::<Extended, D>(
15985                        <Extended as fidl::encoding::ValueTypeMarker>::borrow(val),
15986                        encoder,
15987                        offset + 8,
15988                        _depth,
15989                    )
15990                }
15991                AdvertisingProcedure::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
15992            }
15993        }
15994    }
15995
15996    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdvertisingProcedure {
15997        #[inline(always)]
15998        fn new_empty() -> Self {
15999            Self::__SourceBreaking { unknown_ordinal: 0 }
16000        }
16001
16002        #[inline]
16003        unsafe fn decode(
16004            &mut self,
16005            decoder: &mut fidl::encoding::Decoder<'_, D>,
16006            offset: usize,
16007            mut depth: fidl::encoding::Depth,
16008        ) -> fidl::Result<()> {
16009            decoder.debug_check_bounds::<Self>(offset);
16010            #[allow(unused_variables)]
16011            let next_out_of_line = decoder.next_out_of_line();
16012            let handles_before = decoder.remaining_handles();
16013            let (ordinal, inlined, num_bytes, num_handles) =
16014                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16015
16016            let member_inline_size = match ordinal {
16017                1 => <Legacy as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16018                2 => <Extended as fidl::encoding::TypeMarker>::inline_size(decoder.context),
16019                0 => return Err(fidl::Error::UnknownUnionTag),
16020                _ => num_bytes as usize,
16021            };
16022
16023            if inlined != (member_inline_size <= 4) {
16024                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16025            }
16026            let _inner_offset;
16027            if inlined {
16028                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16029                _inner_offset = offset + 8;
16030            } else {
16031                depth.increment()?;
16032                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16033            }
16034            match ordinal {
16035                1 => {
16036                    #[allow(irrefutable_let_patterns)]
16037                    if let AdvertisingProcedure::Legacy(_) = self {
16038                        // Do nothing, read the value into the object
16039                    } else {
16040                        // Initialize `self` to the right variant
16041                        *self = AdvertisingProcedure::Legacy(fidl::new_empty!(Legacy, D));
16042                    }
16043                    #[allow(irrefutable_let_patterns)]
16044                    if let AdvertisingProcedure::Legacy(ref mut val) = self {
16045                        fidl::decode!(Legacy, D, val, decoder, _inner_offset, depth)?;
16046                    } else {
16047                        unreachable!()
16048                    }
16049                }
16050                2 => {
16051                    #[allow(irrefutable_let_patterns)]
16052                    if let AdvertisingProcedure::Extended(_) = self {
16053                        // Do nothing, read the value into the object
16054                    } else {
16055                        // Initialize `self` to the right variant
16056                        *self = AdvertisingProcedure::Extended(fidl::new_empty!(Extended, D));
16057                    }
16058                    #[allow(irrefutable_let_patterns)]
16059                    if let AdvertisingProcedure::Extended(ref mut val) = self {
16060                        fidl::decode!(Extended, D, val, decoder, _inner_offset, depth)?;
16061                    } else {
16062                        unreachable!()
16063                    }
16064                }
16065                #[allow(deprecated)]
16066                ordinal => {
16067                    for _ in 0..num_handles {
16068                        decoder.drop_next_handle()?;
16069                    }
16070                    *self = AdvertisingProcedure::__SourceBreaking { unknown_ordinal: ordinal };
16071                }
16072            }
16073            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16074                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16075            }
16076            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16077                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16078            }
16079            Ok(())
16080        }
16081    }
16082
16083    impl fidl::encoding::ValueTypeMarker for SyncReport {
16084        type Borrowed<'a> = &'a Self;
16085        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
16086            value
16087        }
16088    }
16089
16090    unsafe impl fidl::encoding::TypeMarker for SyncReport {
16091        type Owned = Self;
16092
16093        #[inline(always)]
16094        fn inline_align(_context: fidl::encoding::Context) -> usize {
16095            8
16096        }
16097
16098        #[inline(always)]
16099        fn inline_size(_context: fidl::encoding::Context) -> usize {
16100            16
16101        }
16102    }
16103
16104    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SyncReport, D>
16105        for &SyncReport
16106    {
16107        #[inline]
16108        unsafe fn encode(
16109            self,
16110            encoder: &mut fidl::encoding::Encoder<'_, D>,
16111            offset: usize,
16112            _depth: fidl::encoding::Depth,
16113        ) -> fidl::Result<()> {
16114            encoder.debug_check_bounds::<SyncReport>(offset);
16115            encoder.write_num::<u64>(self.ordinal(), offset);
16116            match self {
16117            SyncReport::PeriodicAdvertisingReport(ref val) => {
16118                fidl::encoding::encode_in_envelope::<PeriodicAdvertisingReport, D>(
16119                    <PeriodicAdvertisingReport as fidl::encoding::ValueTypeMarker>::borrow(val),
16120                    encoder, offset + 8, _depth
16121                )
16122            }
16123            SyncReport::BroadcastIsochronousGroupInfoReport(ref val) => {
16124                fidl::encoding::encode_in_envelope::<BroadcastIsochronousGroupInfoReport, D>(
16125                    <BroadcastIsochronousGroupInfoReport as fidl::encoding::ValueTypeMarker>::borrow(val),
16126                    encoder, offset + 8, _depth
16127                )
16128            }
16129            SyncReport::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
16130        }
16131        }
16132    }
16133
16134    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SyncReport {
16135        #[inline(always)]
16136        fn new_empty() -> Self {
16137            Self::__SourceBreaking { unknown_ordinal: 0 }
16138        }
16139
16140        #[inline]
16141        unsafe fn decode(
16142            &mut self,
16143            decoder: &mut fidl::encoding::Decoder<'_, D>,
16144            offset: usize,
16145            mut depth: fidl::encoding::Depth,
16146        ) -> fidl::Result<()> {
16147            decoder.debug_check_bounds::<Self>(offset);
16148            #[allow(unused_variables)]
16149            let next_out_of_line = decoder.next_out_of_line();
16150            let handles_before = decoder.remaining_handles();
16151            let (ordinal, inlined, num_bytes, num_handles) =
16152                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
16153
16154            let member_inline_size = match ordinal {
16155                1 => <PeriodicAdvertisingReport as fidl::encoding::TypeMarker>::inline_size(
16156                    decoder.context,
16157                ),
16158                2 => {
16159                    <BroadcastIsochronousGroupInfoReport as fidl::encoding::TypeMarker>::inline_size(
16160                        decoder.context,
16161                    )
16162                }
16163                0 => return Err(fidl::Error::UnknownUnionTag),
16164                _ => num_bytes as usize,
16165            };
16166
16167            if inlined != (member_inline_size <= 4) {
16168                return Err(fidl::Error::InvalidInlineBitInEnvelope);
16169            }
16170            let _inner_offset;
16171            if inlined {
16172                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
16173                _inner_offset = offset + 8;
16174            } else {
16175                depth.increment()?;
16176                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
16177            }
16178            match ordinal {
16179                1 => {
16180                    #[allow(irrefutable_let_patterns)]
16181                    if let SyncReport::PeriodicAdvertisingReport(_) = self {
16182                        // Do nothing, read the value into the object
16183                    } else {
16184                        // Initialize `self` to the right variant
16185                        *self = SyncReport::PeriodicAdvertisingReport(fidl::new_empty!(
16186                            PeriodicAdvertisingReport,
16187                            D
16188                        ));
16189                    }
16190                    #[allow(irrefutable_let_patterns)]
16191                    if let SyncReport::PeriodicAdvertisingReport(ref mut val) = self {
16192                        fidl::decode!(
16193                            PeriodicAdvertisingReport,
16194                            D,
16195                            val,
16196                            decoder,
16197                            _inner_offset,
16198                            depth
16199                        )?;
16200                    } else {
16201                        unreachable!()
16202                    }
16203                }
16204                2 => {
16205                    #[allow(irrefutable_let_patterns)]
16206                    if let SyncReport::BroadcastIsochronousGroupInfoReport(_) = self {
16207                        // Do nothing, read the value into the object
16208                    } else {
16209                        // Initialize `self` to the right variant
16210                        *self = SyncReport::BroadcastIsochronousGroupInfoReport(fidl::new_empty!(
16211                            BroadcastIsochronousGroupInfoReport,
16212                            D
16213                        ));
16214                    }
16215                    #[allow(irrefutable_let_patterns)]
16216                    if let SyncReport::BroadcastIsochronousGroupInfoReport(ref mut val) = self {
16217                        fidl::decode!(
16218                            BroadcastIsochronousGroupInfoReport,
16219                            D,
16220                            val,
16221                            decoder,
16222                            _inner_offset,
16223                            depth
16224                        )?;
16225                    } else {
16226                        unreachable!()
16227                    }
16228                }
16229                #[allow(deprecated)]
16230                ordinal => {
16231                    for _ in 0..num_handles {
16232                        decoder.drop_next_handle()?;
16233                    }
16234                    *self = SyncReport::__SourceBreaking { unknown_ordinal: ordinal };
16235                }
16236            }
16237            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
16238                return Err(fidl::Error::InvalidNumBytesInEnvelope);
16239            }
16240            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
16241                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
16242            }
16243            Ok(())
16244        }
16245    }
16246}