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