fidl_fuchsia_bluetooth_bredr__common/
fidl_fuchsia_bluetooth_bredr__common.rs

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