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::ChannelMode;
12
13pub type ChannelParameters = fidl_fuchsia_bluetooth::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::ChannelParameters,
900}
901
902impl fidl::Persistable for L2capParametersExtRequestParametersRequest {}
903
904#[derive(Clone, Debug, PartialEq)]
905pub struct L2capParametersExtRequestParametersResponse {
906    pub new: fidl_fuchsia_bluetooth::ChannelParameters,
907}
908
909impl fidl::Persistable for L2capParametersExtRequestParametersResponse {}
910
911#[derive(Clone, Debug, PartialEq)]
912pub struct ProfileConnectRequest {
913    pub peer_id: fidl_fuchsia_bluetooth::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::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::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::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::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::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::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::SbcEncoderSettings),
1164    Aac(fidl_fuchsia_media::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::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
1441mod internal {
1442    use super::*;
1443    unsafe impl fidl::encoding::TypeMarker for A2dpDirectionPriority {
1444        type Owned = Self;
1445
1446        #[inline(always)]
1447        fn inline_align(_context: fidl::encoding::Context) -> usize {
1448            std::mem::align_of::<u32>()
1449        }
1450
1451        #[inline(always)]
1452        fn inline_size(_context: fidl::encoding::Context) -> usize {
1453            std::mem::size_of::<u32>()
1454        }
1455
1456        #[inline(always)]
1457        fn encode_is_copy() -> bool {
1458            true
1459        }
1460
1461        #[inline(always)]
1462        fn decode_is_copy() -> bool {
1463            false
1464        }
1465    }
1466
1467    impl fidl::encoding::ValueTypeMarker for A2dpDirectionPriority {
1468        type Borrowed<'a> = Self;
1469        #[inline(always)]
1470        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1471            *value
1472        }
1473    }
1474
1475    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1476        for A2dpDirectionPriority
1477    {
1478        #[inline]
1479        unsafe fn encode(
1480            self,
1481            encoder: &mut fidl::encoding::Encoder<'_, D>,
1482            offset: usize,
1483            _depth: fidl::encoding::Depth,
1484        ) -> fidl::Result<()> {
1485            encoder.debug_check_bounds::<Self>(offset);
1486            encoder.write_num(self.into_primitive(), offset);
1487            Ok(())
1488        }
1489    }
1490
1491    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for A2dpDirectionPriority {
1492        #[inline(always)]
1493        fn new_empty() -> Self {
1494            Self::Normal
1495        }
1496
1497        #[inline]
1498        unsafe fn decode(
1499            &mut self,
1500            decoder: &mut fidl::encoding::Decoder<'_, D>,
1501            offset: usize,
1502            _depth: fidl::encoding::Depth,
1503        ) -> fidl::Result<()> {
1504            decoder.debug_check_bounds::<Self>(offset);
1505            let prim = decoder.read_num::<u32>(offset);
1506
1507            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1508            Ok(())
1509        }
1510    }
1511    unsafe impl fidl::encoding::TypeMarker for AudioBitsPerSample {
1512        type Owned = Self;
1513
1514        #[inline(always)]
1515        fn inline_align(_context: fidl::encoding::Context) -> usize {
1516            std::mem::align_of::<u8>()
1517        }
1518
1519        #[inline(always)]
1520        fn inline_size(_context: fidl::encoding::Context) -> usize {
1521            std::mem::size_of::<u8>()
1522        }
1523
1524        #[inline(always)]
1525        fn encode_is_copy() -> bool {
1526            false
1527        }
1528
1529        #[inline(always)]
1530        fn decode_is_copy() -> bool {
1531            false
1532        }
1533    }
1534
1535    impl fidl::encoding::ValueTypeMarker for AudioBitsPerSample {
1536        type Borrowed<'a> = Self;
1537        #[inline(always)]
1538        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1539            *value
1540        }
1541    }
1542
1543    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1544        for AudioBitsPerSample
1545    {
1546        #[inline]
1547        unsafe fn encode(
1548            self,
1549            encoder: &mut fidl::encoding::Encoder<'_, D>,
1550            offset: usize,
1551            _depth: fidl::encoding::Depth,
1552        ) -> fidl::Result<()> {
1553            encoder.debug_check_bounds::<Self>(offset);
1554            encoder.write_num(self.into_primitive(), offset);
1555            Ok(())
1556        }
1557    }
1558
1559    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioBitsPerSample {
1560        #[inline(always)]
1561        fn new_empty() -> Self {
1562            Self::unknown()
1563        }
1564
1565        #[inline]
1566        unsafe fn decode(
1567            &mut self,
1568            decoder: &mut fidl::encoding::Decoder<'_, D>,
1569            offset: usize,
1570            _depth: fidl::encoding::Depth,
1571        ) -> fidl::Result<()> {
1572            decoder.debug_check_bounds::<Self>(offset);
1573            let prim = decoder.read_num::<u8>(offset);
1574
1575            *self = Self::from_primitive_allow_unknown(prim);
1576            Ok(())
1577        }
1578    }
1579    unsafe impl fidl::encoding::TypeMarker for AudioChannelMode {
1580        type Owned = Self;
1581
1582        #[inline(always)]
1583        fn inline_align(_context: fidl::encoding::Context) -> usize {
1584            std::mem::align_of::<u8>()
1585        }
1586
1587        #[inline(always)]
1588        fn inline_size(_context: fidl::encoding::Context) -> usize {
1589            std::mem::size_of::<u8>()
1590        }
1591
1592        #[inline(always)]
1593        fn encode_is_copy() -> bool {
1594            false
1595        }
1596
1597        #[inline(always)]
1598        fn decode_is_copy() -> bool {
1599            false
1600        }
1601    }
1602
1603    impl fidl::encoding::ValueTypeMarker for AudioChannelMode {
1604        type Borrowed<'a> = Self;
1605        #[inline(always)]
1606        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1607            *value
1608        }
1609    }
1610
1611    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1612        for AudioChannelMode
1613    {
1614        #[inline]
1615        unsafe fn encode(
1616            self,
1617            encoder: &mut fidl::encoding::Encoder<'_, D>,
1618            offset: usize,
1619            _depth: fidl::encoding::Depth,
1620        ) -> fidl::Result<()> {
1621            encoder.debug_check_bounds::<Self>(offset);
1622            encoder.write_num(self.into_primitive(), offset);
1623            Ok(())
1624        }
1625    }
1626
1627    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioChannelMode {
1628        #[inline(always)]
1629        fn new_empty() -> Self {
1630            Self::unknown()
1631        }
1632
1633        #[inline]
1634        unsafe fn decode(
1635            &mut self,
1636            decoder: &mut fidl::encoding::Decoder<'_, D>,
1637            offset: usize,
1638            _depth: fidl::encoding::Depth,
1639        ) -> fidl::Result<()> {
1640            decoder.debug_check_bounds::<Self>(offset);
1641            let prim = decoder.read_num::<u8>(offset);
1642
1643            *self = Self::from_primitive_allow_unknown(prim);
1644            Ok(())
1645        }
1646    }
1647    unsafe impl fidl::encoding::TypeMarker for AudioSamplingFrequency {
1648        type Owned = Self;
1649
1650        #[inline(always)]
1651        fn inline_align(_context: fidl::encoding::Context) -> usize {
1652            std::mem::align_of::<u8>()
1653        }
1654
1655        #[inline(always)]
1656        fn inline_size(_context: fidl::encoding::Context) -> usize {
1657            std::mem::size_of::<u8>()
1658        }
1659
1660        #[inline(always)]
1661        fn encode_is_copy() -> bool {
1662            false
1663        }
1664
1665        #[inline(always)]
1666        fn decode_is_copy() -> bool {
1667            false
1668        }
1669    }
1670
1671    impl fidl::encoding::ValueTypeMarker for AudioSamplingFrequency {
1672        type Borrowed<'a> = Self;
1673        #[inline(always)]
1674        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1675            *value
1676        }
1677    }
1678
1679    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1680        for AudioSamplingFrequency
1681    {
1682        #[inline]
1683        unsafe fn encode(
1684            self,
1685            encoder: &mut fidl::encoding::Encoder<'_, D>,
1686            offset: usize,
1687            _depth: fidl::encoding::Depth,
1688        ) -> fidl::Result<()> {
1689            encoder.debug_check_bounds::<Self>(offset);
1690            encoder.write_num(self.into_primitive(), offset);
1691            Ok(())
1692        }
1693    }
1694
1695    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1696        for AudioSamplingFrequency
1697    {
1698        #[inline(always)]
1699        fn new_empty() -> Self {
1700            Self::unknown()
1701        }
1702
1703        #[inline]
1704        unsafe fn decode(
1705            &mut self,
1706            decoder: &mut fidl::encoding::Decoder<'_, D>,
1707            offset: usize,
1708            _depth: fidl::encoding::Depth,
1709        ) -> fidl::Result<()> {
1710            decoder.debug_check_bounds::<Self>(offset);
1711            let prim = decoder.read_num::<u8>(offset);
1712
1713            *self = Self::from_primitive_allow_unknown(prim);
1714            Ok(())
1715        }
1716    }
1717    unsafe impl fidl::encoding::TypeMarker for DataPath {
1718        type Owned = Self;
1719
1720        #[inline(always)]
1721        fn inline_align(_context: fidl::encoding::Context) -> usize {
1722            std::mem::align_of::<u8>()
1723        }
1724
1725        #[inline(always)]
1726        fn inline_size(_context: fidl::encoding::Context) -> usize {
1727            std::mem::size_of::<u8>()
1728        }
1729
1730        #[inline(always)]
1731        fn encode_is_copy() -> bool {
1732            true
1733        }
1734
1735        #[inline(always)]
1736        fn decode_is_copy() -> bool {
1737            false
1738        }
1739    }
1740
1741    impl fidl::encoding::ValueTypeMarker for DataPath {
1742        type Borrowed<'a> = Self;
1743        #[inline(always)]
1744        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1745            *value
1746        }
1747    }
1748
1749    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DataPath {
1750        #[inline]
1751        unsafe fn encode(
1752            self,
1753            encoder: &mut fidl::encoding::Encoder<'_, D>,
1754            offset: usize,
1755            _depth: fidl::encoding::Depth,
1756        ) -> fidl::Result<()> {
1757            encoder.debug_check_bounds::<Self>(offset);
1758            encoder.write_num(self.into_primitive(), offset);
1759            Ok(())
1760        }
1761    }
1762
1763    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataPath {
1764        #[inline(always)]
1765        fn new_empty() -> Self {
1766            Self::Host
1767        }
1768
1769        #[inline]
1770        unsafe fn decode(
1771            &mut self,
1772            decoder: &mut fidl::encoding::Decoder<'_, D>,
1773            offset: usize,
1774            _depth: fidl::encoding::Depth,
1775        ) -> fidl::Result<()> {
1776            decoder.debug_check_bounds::<Self>(offset);
1777            let prim = decoder.read_num::<u8>(offset);
1778
1779            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1780            Ok(())
1781        }
1782    }
1783    unsafe impl fidl::encoding::TypeMarker for HfpParameterSet {
1784        type Owned = Self;
1785
1786        #[inline(always)]
1787        fn inline_align(_context: fidl::encoding::Context) -> usize {
1788            std::mem::align_of::<u8>()
1789        }
1790
1791        #[inline(always)]
1792        fn inline_size(_context: fidl::encoding::Context) -> usize {
1793            std::mem::size_of::<u8>()
1794        }
1795
1796        #[inline(always)]
1797        fn encode_is_copy() -> bool {
1798            false
1799        }
1800
1801        #[inline(always)]
1802        fn decode_is_copy() -> bool {
1803            false
1804        }
1805    }
1806
1807    impl fidl::encoding::ValueTypeMarker for HfpParameterSet {
1808        type Borrowed<'a> = Self;
1809        #[inline(always)]
1810        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1811            *value
1812        }
1813    }
1814
1815    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1816        for HfpParameterSet
1817    {
1818        #[inline]
1819        unsafe fn encode(
1820            self,
1821            encoder: &mut fidl::encoding::Encoder<'_, D>,
1822            offset: usize,
1823            _depth: fidl::encoding::Depth,
1824        ) -> fidl::Result<()> {
1825            encoder.debug_check_bounds::<Self>(offset);
1826            encoder.write_num(self.into_primitive(), offset);
1827            Ok(())
1828        }
1829    }
1830
1831    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HfpParameterSet {
1832        #[inline(always)]
1833        fn new_empty() -> Self {
1834            Self::unknown()
1835        }
1836
1837        #[inline]
1838        unsafe fn decode(
1839            &mut self,
1840            decoder: &mut fidl::encoding::Decoder<'_, D>,
1841            offset: usize,
1842            _depth: fidl::encoding::Depth,
1843        ) -> fidl::Result<()> {
1844            decoder.debug_check_bounds::<Self>(offset);
1845            let prim = decoder.read_num::<u8>(offset);
1846
1847            *self = Self::from_primitive_allow_unknown(prim);
1848            Ok(())
1849        }
1850    }
1851    unsafe impl fidl::encoding::TypeMarker for ProtocolIdentifier {
1852        type Owned = Self;
1853
1854        #[inline(always)]
1855        fn inline_align(_context: fidl::encoding::Context) -> usize {
1856            std::mem::align_of::<u16>()
1857        }
1858
1859        #[inline(always)]
1860        fn inline_size(_context: fidl::encoding::Context) -> usize {
1861            std::mem::size_of::<u16>()
1862        }
1863
1864        #[inline(always)]
1865        fn encode_is_copy() -> bool {
1866            false
1867        }
1868
1869        #[inline(always)]
1870        fn decode_is_copy() -> bool {
1871            false
1872        }
1873    }
1874
1875    impl fidl::encoding::ValueTypeMarker for ProtocolIdentifier {
1876        type Borrowed<'a> = Self;
1877        #[inline(always)]
1878        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1879            *value
1880        }
1881    }
1882
1883    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1884        for ProtocolIdentifier
1885    {
1886        #[inline]
1887        unsafe fn encode(
1888            self,
1889            encoder: &mut fidl::encoding::Encoder<'_, D>,
1890            offset: usize,
1891            _depth: fidl::encoding::Depth,
1892        ) -> fidl::Result<()> {
1893            encoder.debug_check_bounds::<Self>(offset);
1894            encoder.write_num(self.into_primitive(), offset);
1895            Ok(())
1896        }
1897    }
1898
1899    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProtocolIdentifier {
1900        #[inline(always)]
1901        fn new_empty() -> Self {
1902            Self::unknown()
1903        }
1904
1905        #[inline]
1906        unsafe fn decode(
1907            &mut self,
1908            decoder: &mut fidl::encoding::Decoder<'_, D>,
1909            offset: usize,
1910            _depth: fidl::encoding::Depth,
1911        ) -> fidl::Result<()> {
1912            decoder.debug_check_bounds::<Self>(offset);
1913            let prim = decoder.read_num::<u16>(offset);
1914
1915            *self = Self::from_primitive_allow_unknown(prim);
1916            Ok(())
1917        }
1918    }
1919    unsafe impl fidl::encoding::TypeMarker for RxPacketStatus {
1920        type Owned = Self;
1921
1922        #[inline(always)]
1923        fn inline_align(_context: fidl::encoding::Context) -> usize {
1924            std::mem::align_of::<u8>()
1925        }
1926
1927        #[inline(always)]
1928        fn inline_size(_context: fidl::encoding::Context) -> usize {
1929            std::mem::size_of::<u8>()
1930        }
1931
1932        #[inline(always)]
1933        fn encode_is_copy() -> bool {
1934            true
1935        }
1936
1937        #[inline(always)]
1938        fn decode_is_copy() -> bool {
1939            false
1940        }
1941    }
1942
1943    impl fidl::encoding::ValueTypeMarker for RxPacketStatus {
1944        type Borrowed<'a> = Self;
1945        #[inline(always)]
1946        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1947            *value
1948        }
1949    }
1950
1951    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RxPacketStatus {
1952        #[inline]
1953        unsafe fn encode(
1954            self,
1955            encoder: &mut fidl::encoding::Encoder<'_, D>,
1956            offset: usize,
1957            _depth: fidl::encoding::Depth,
1958        ) -> fidl::Result<()> {
1959            encoder.debug_check_bounds::<Self>(offset);
1960            encoder.write_num(self.into_primitive(), offset);
1961            Ok(())
1962        }
1963    }
1964
1965    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RxPacketStatus {
1966        #[inline(always)]
1967        fn new_empty() -> Self {
1968            Self::CorrectlyReceivedData
1969        }
1970
1971        #[inline]
1972        unsafe fn decode(
1973            &mut self,
1974            decoder: &mut fidl::encoding::Decoder<'_, D>,
1975            offset: usize,
1976            _depth: fidl::encoding::Depth,
1977        ) -> fidl::Result<()> {
1978            decoder.debug_check_bounds::<Self>(offset);
1979            let prim = decoder.read_num::<u8>(offset);
1980
1981            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1982            Ok(())
1983        }
1984    }
1985    unsafe impl fidl::encoding::TypeMarker for ScoErrorCode {
1986        type Owned = Self;
1987
1988        #[inline(always)]
1989        fn inline_align(_context: fidl::encoding::Context) -> usize {
1990            std::mem::align_of::<u32>()
1991        }
1992
1993        #[inline(always)]
1994        fn inline_size(_context: fidl::encoding::Context) -> usize {
1995            std::mem::size_of::<u32>()
1996        }
1997
1998        #[inline(always)]
1999        fn encode_is_copy() -> bool {
2000            false
2001        }
2002
2003        #[inline(always)]
2004        fn decode_is_copy() -> bool {
2005            false
2006        }
2007    }
2008
2009    impl fidl::encoding::ValueTypeMarker for ScoErrorCode {
2010        type Borrowed<'a> = Self;
2011        #[inline(always)]
2012        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2013            *value
2014        }
2015    }
2016
2017    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ScoErrorCode {
2018        #[inline]
2019        unsafe fn encode(
2020            self,
2021            encoder: &mut fidl::encoding::Encoder<'_, D>,
2022            offset: usize,
2023            _depth: fidl::encoding::Depth,
2024        ) -> fidl::Result<()> {
2025            encoder.debug_check_bounds::<Self>(offset);
2026            encoder.write_num(self.into_primitive(), offset);
2027            Ok(())
2028        }
2029    }
2030
2031    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ScoErrorCode {
2032        #[inline(always)]
2033        fn new_empty() -> Self {
2034            Self::unknown()
2035        }
2036
2037        #[inline]
2038        unsafe fn decode(
2039            &mut self,
2040            decoder: &mut fidl::encoding::Decoder<'_, D>,
2041            offset: usize,
2042            _depth: fidl::encoding::Depth,
2043        ) -> fidl::Result<()> {
2044            decoder.debug_check_bounds::<Self>(offset);
2045            let prim = decoder.read_num::<u32>(offset);
2046
2047            *self = Self::from_primitive_allow_unknown(prim);
2048            Ok(())
2049        }
2050    }
2051    unsafe impl fidl::encoding::TypeMarker for ServiceClassProfileIdentifier {
2052        type Owned = Self;
2053
2054        #[inline(always)]
2055        fn inline_align(_context: fidl::encoding::Context) -> usize {
2056            std::mem::align_of::<u16>()
2057        }
2058
2059        #[inline(always)]
2060        fn inline_size(_context: fidl::encoding::Context) -> usize {
2061            std::mem::size_of::<u16>()
2062        }
2063
2064        #[inline(always)]
2065        fn encode_is_copy() -> bool {
2066            false
2067        }
2068
2069        #[inline(always)]
2070        fn decode_is_copy() -> bool {
2071            false
2072        }
2073    }
2074
2075    impl fidl::encoding::ValueTypeMarker for ServiceClassProfileIdentifier {
2076        type Borrowed<'a> = Self;
2077        #[inline(always)]
2078        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2079            *value
2080        }
2081    }
2082
2083    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2084        for ServiceClassProfileIdentifier
2085    {
2086        #[inline]
2087        unsafe fn encode(
2088            self,
2089            encoder: &mut fidl::encoding::Encoder<'_, D>,
2090            offset: usize,
2091            _depth: fidl::encoding::Depth,
2092        ) -> fidl::Result<()> {
2093            encoder.debug_check_bounds::<Self>(offset);
2094            encoder.write_num(self.into_primitive(), offset);
2095            Ok(())
2096        }
2097    }
2098
2099    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2100        for ServiceClassProfileIdentifier
2101    {
2102        #[inline(always)]
2103        fn new_empty() -> Self {
2104            Self::unknown()
2105        }
2106
2107        #[inline]
2108        unsafe fn decode(
2109            &mut self,
2110            decoder: &mut fidl::encoding::Decoder<'_, D>,
2111            offset: usize,
2112            _depth: fidl::encoding::Depth,
2113        ) -> fidl::Result<()> {
2114            decoder.debug_check_bounds::<Self>(offset);
2115            let prim = decoder.read_num::<u16>(offset);
2116
2117            *self = Self::from_primitive_allow_unknown(prim);
2118            Ok(())
2119        }
2120    }
2121
2122    impl fidl::encoding::ValueTypeMarker for AudioDirectionExtSetPriorityRequest {
2123        type Borrowed<'a> = &'a Self;
2124        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2125            value
2126        }
2127    }
2128
2129    unsafe impl fidl::encoding::TypeMarker for AudioDirectionExtSetPriorityRequest {
2130        type Owned = Self;
2131
2132        #[inline(always)]
2133        fn inline_align(_context: fidl::encoding::Context) -> usize {
2134            4
2135        }
2136
2137        #[inline(always)]
2138        fn inline_size(_context: fidl::encoding::Context) -> usize {
2139            4
2140        }
2141    }
2142
2143    unsafe impl<D: fidl::encoding::ResourceDialect>
2144        fidl::encoding::Encode<AudioDirectionExtSetPriorityRequest, D>
2145        for &AudioDirectionExtSetPriorityRequest
2146    {
2147        #[inline]
2148        unsafe fn encode(
2149            self,
2150            encoder: &mut fidl::encoding::Encoder<'_, D>,
2151            offset: usize,
2152            _depth: fidl::encoding::Depth,
2153        ) -> fidl::Result<()> {
2154            encoder.debug_check_bounds::<AudioDirectionExtSetPriorityRequest>(offset);
2155            // Delegate to tuple encoding.
2156            fidl::encoding::Encode::<AudioDirectionExtSetPriorityRequest, D>::encode(
2157                (<A2dpDirectionPriority as fidl::encoding::ValueTypeMarker>::borrow(
2158                    &self.priority,
2159                ),),
2160                encoder,
2161                offset,
2162                _depth,
2163            )
2164        }
2165    }
2166    unsafe impl<
2167            D: fidl::encoding::ResourceDialect,
2168            T0: fidl::encoding::Encode<A2dpDirectionPriority, D>,
2169        > fidl::encoding::Encode<AudioDirectionExtSetPriorityRequest, D> for (T0,)
2170    {
2171        #[inline]
2172        unsafe fn encode(
2173            self,
2174            encoder: &mut fidl::encoding::Encoder<'_, D>,
2175            offset: usize,
2176            depth: fidl::encoding::Depth,
2177        ) -> fidl::Result<()> {
2178            encoder.debug_check_bounds::<AudioDirectionExtSetPriorityRequest>(offset);
2179            // Zero out padding regions. There's no need to apply masks
2180            // because the unmasked parts will be overwritten by fields.
2181            // Write the fields.
2182            self.0.encode(encoder, offset + 0, depth)?;
2183            Ok(())
2184        }
2185    }
2186
2187    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2188        for AudioDirectionExtSetPriorityRequest
2189    {
2190        #[inline(always)]
2191        fn new_empty() -> Self {
2192            Self { priority: fidl::new_empty!(A2dpDirectionPriority, D) }
2193        }
2194
2195        #[inline]
2196        unsafe fn decode(
2197            &mut self,
2198            decoder: &mut fidl::encoding::Decoder<'_, D>,
2199            offset: usize,
2200            _depth: fidl::encoding::Depth,
2201        ) -> fidl::Result<()> {
2202            decoder.debug_check_bounds::<Self>(offset);
2203            // Verify that padding bytes are zero.
2204            fidl::decode!(
2205                A2dpDirectionPriority,
2206                D,
2207                &mut self.priority,
2208                decoder,
2209                offset + 0,
2210                _depth
2211            )?;
2212            Ok(())
2213        }
2214    }
2215
2216    impl fidl::encoding::ValueTypeMarker for L2capParametersExtRequestParametersRequest {
2217        type Borrowed<'a> = &'a Self;
2218        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2219            value
2220        }
2221    }
2222
2223    unsafe impl fidl::encoding::TypeMarker for L2capParametersExtRequestParametersRequest {
2224        type Owned = Self;
2225
2226        #[inline(always)]
2227        fn inline_align(_context: fidl::encoding::Context) -> usize {
2228            8
2229        }
2230
2231        #[inline(always)]
2232        fn inline_size(_context: fidl::encoding::Context) -> usize {
2233            16
2234        }
2235    }
2236
2237    unsafe impl<D: fidl::encoding::ResourceDialect>
2238        fidl::encoding::Encode<L2capParametersExtRequestParametersRequest, D>
2239        for &L2capParametersExtRequestParametersRequest
2240    {
2241        #[inline]
2242        unsafe fn encode(
2243            self,
2244            encoder: &mut fidl::encoding::Encoder<'_, D>,
2245            offset: usize,
2246            _depth: fidl::encoding::Depth,
2247        ) -> fidl::Result<()> {
2248            encoder.debug_check_bounds::<L2capParametersExtRequestParametersRequest>(offset);
2249            // Delegate to tuple encoding.
2250            fidl::encoding::Encode::<L2capParametersExtRequestParametersRequest, D>::encode(
2251                (
2252                    <fidl_fuchsia_bluetooth::ChannelParameters as fidl::encoding::ValueTypeMarker>::borrow(&self.request),
2253                ),
2254                encoder, offset, _depth
2255            )
2256        }
2257    }
2258    unsafe impl<
2259            D: fidl::encoding::ResourceDialect,
2260            T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth::ChannelParameters, D>,
2261        > fidl::encoding::Encode<L2capParametersExtRequestParametersRequest, D> for (T0,)
2262    {
2263        #[inline]
2264        unsafe fn encode(
2265            self,
2266            encoder: &mut fidl::encoding::Encoder<'_, D>,
2267            offset: usize,
2268            depth: fidl::encoding::Depth,
2269        ) -> fidl::Result<()> {
2270            encoder.debug_check_bounds::<L2capParametersExtRequestParametersRequest>(offset);
2271            // Zero out padding regions. There's no need to apply masks
2272            // because the unmasked parts will be overwritten by fields.
2273            // Write the fields.
2274            self.0.encode(encoder, offset + 0, depth)?;
2275            Ok(())
2276        }
2277    }
2278
2279    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2280        for L2capParametersExtRequestParametersRequest
2281    {
2282        #[inline(always)]
2283        fn new_empty() -> Self {
2284            Self { request: fidl::new_empty!(fidl_fuchsia_bluetooth::ChannelParameters, D) }
2285        }
2286
2287        #[inline]
2288        unsafe fn decode(
2289            &mut self,
2290            decoder: &mut fidl::encoding::Decoder<'_, D>,
2291            offset: usize,
2292            _depth: fidl::encoding::Depth,
2293        ) -> fidl::Result<()> {
2294            decoder.debug_check_bounds::<Self>(offset);
2295            // Verify that padding bytes are zero.
2296            fidl::decode!(
2297                fidl_fuchsia_bluetooth::ChannelParameters,
2298                D,
2299                &mut self.request,
2300                decoder,
2301                offset + 0,
2302                _depth
2303            )?;
2304            Ok(())
2305        }
2306    }
2307
2308    impl fidl::encoding::ValueTypeMarker for L2capParametersExtRequestParametersResponse {
2309        type Borrowed<'a> = &'a Self;
2310        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2311            value
2312        }
2313    }
2314
2315    unsafe impl fidl::encoding::TypeMarker for L2capParametersExtRequestParametersResponse {
2316        type Owned = Self;
2317
2318        #[inline(always)]
2319        fn inline_align(_context: fidl::encoding::Context) -> usize {
2320            8
2321        }
2322
2323        #[inline(always)]
2324        fn inline_size(_context: fidl::encoding::Context) -> usize {
2325            16
2326        }
2327    }
2328
2329    unsafe impl<D: fidl::encoding::ResourceDialect>
2330        fidl::encoding::Encode<L2capParametersExtRequestParametersResponse, D>
2331        for &L2capParametersExtRequestParametersResponse
2332    {
2333        #[inline]
2334        unsafe fn encode(
2335            self,
2336            encoder: &mut fidl::encoding::Encoder<'_, D>,
2337            offset: usize,
2338            _depth: fidl::encoding::Depth,
2339        ) -> fidl::Result<()> {
2340            encoder.debug_check_bounds::<L2capParametersExtRequestParametersResponse>(offset);
2341            // Delegate to tuple encoding.
2342            fidl::encoding::Encode::<L2capParametersExtRequestParametersResponse, D>::encode(
2343                (
2344                    <fidl_fuchsia_bluetooth::ChannelParameters as fidl::encoding::ValueTypeMarker>::borrow(&self.new),
2345                ),
2346                encoder, offset, _depth
2347            )
2348        }
2349    }
2350    unsafe impl<
2351            D: fidl::encoding::ResourceDialect,
2352            T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth::ChannelParameters, D>,
2353        > fidl::encoding::Encode<L2capParametersExtRequestParametersResponse, D> for (T0,)
2354    {
2355        #[inline]
2356        unsafe fn encode(
2357            self,
2358            encoder: &mut fidl::encoding::Encoder<'_, D>,
2359            offset: usize,
2360            depth: fidl::encoding::Depth,
2361        ) -> fidl::Result<()> {
2362            encoder.debug_check_bounds::<L2capParametersExtRequestParametersResponse>(offset);
2363            // Zero out padding regions. There's no need to apply masks
2364            // because the unmasked parts will be overwritten by fields.
2365            // Write the fields.
2366            self.0.encode(encoder, offset + 0, depth)?;
2367            Ok(())
2368        }
2369    }
2370
2371    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2372        for L2capParametersExtRequestParametersResponse
2373    {
2374        #[inline(always)]
2375        fn new_empty() -> Self {
2376            Self { new: fidl::new_empty!(fidl_fuchsia_bluetooth::ChannelParameters, D) }
2377        }
2378
2379        #[inline]
2380        unsafe fn decode(
2381            &mut self,
2382            decoder: &mut fidl::encoding::Decoder<'_, D>,
2383            offset: usize,
2384            _depth: fidl::encoding::Depth,
2385        ) -> fidl::Result<()> {
2386            decoder.debug_check_bounds::<Self>(offset);
2387            // Verify that padding bytes are zero.
2388            fidl::decode!(
2389                fidl_fuchsia_bluetooth::ChannelParameters,
2390                D,
2391                &mut self.new,
2392                decoder,
2393                offset + 0,
2394                _depth
2395            )?;
2396            Ok(())
2397        }
2398    }
2399
2400    impl fidl::encoding::ValueTypeMarker for ProfileConnectRequest {
2401        type Borrowed<'a> = &'a Self;
2402        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2403            value
2404        }
2405    }
2406
2407    unsafe impl fidl::encoding::TypeMarker for ProfileConnectRequest {
2408        type Owned = Self;
2409
2410        #[inline(always)]
2411        fn inline_align(_context: fidl::encoding::Context) -> usize {
2412            8
2413        }
2414
2415        #[inline(always)]
2416        fn inline_size(_context: fidl::encoding::Context) -> usize {
2417            24
2418        }
2419    }
2420
2421    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProfileConnectRequest, D>
2422        for &ProfileConnectRequest
2423    {
2424        #[inline]
2425        unsafe fn encode(
2426            self,
2427            encoder: &mut fidl::encoding::Encoder<'_, D>,
2428            offset: usize,
2429            _depth: fidl::encoding::Depth,
2430        ) -> fidl::Result<()> {
2431            encoder.debug_check_bounds::<ProfileConnectRequest>(offset);
2432            // Delegate to tuple encoding.
2433            fidl::encoding::Encode::<ProfileConnectRequest, D>::encode(
2434                (
2435                    <fidl_fuchsia_bluetooth::PeerId as fidl::encoding::ValueTypeMarker>::borrow(
2436                        &self.peer_id,
2437                    ),
2438                    <ConnectParameters as fidl::encoding::ValueTypeMarker>::borrow(
2439                        &self.connection,
2440                    ),
2441                ),
2442                encoder,
2443                offset,
2444                _depth,
2445            )
2446        }
2447    }
2448    unsafe impl<
2449            D: fidl::encoding::ResourceDialect,
2450            T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth::PeerId, D>,
2451            T1: fidl::encoding::Encode<ConnectParameters, D>,
2452        > fidl::encoding::Encode<ProfileConnectRequest, D> for (T0, T1)
2453    {
2454        #[inline]
2455        unsafe fn encode(
2456            self,
2457            encoder: &mut fidl::encoding::Encoder<'_, D>,
2458            offset: usize,
2459            depth: fidl::encoding::Depth,
2460        ) -> fidl::Result<()> {
2461            encoder.debug_check_bounds::<ProfileConnectRequest>(offset);
2462            // Zero out padding regions. There's no need to apply masks
2463            // because the unmasked parts will be overwritten by fields.
2464            // Write the fields.
2465            self.0.encode(encoder, offset + 0, depth)?;
2466            self.1.encode(encoder, offset + 8, depth)?;
2467            Ok(())
2468        }
2469    }
2470
2471    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProfileConnectRequest {
2472        #[inline(always)]
2473        fn new_empty() -> Self {
2474            Self {
2475                peer_id: fidl::new_empty!(fidl_fuchsia_bluetooth::PeerId, D),
2476                connection: fidl::new_empty!(ConnectParameters, D),
2477            }
2478        }
2479
2480        #[inline]
2481        unsafe fn decode(
2482            &mut self,
2483            decoder: &mut fidl::encoding::Decoder<'_, D>,
2484            offset: usize,
2485            _depth: fidl::encoding::Depth,
2486        ) -> fidl::Result<()> {
2487            decoder.debug_check_bounds::<Self>(offset);
2488            // Verify that padding bytes are zero.
2489            fidl::decode!(
2490                fidl_fuchsia_bluetooth::PeerId,
2491                D,
2492                &mut self.peer_id,
2493                decoder,
2494                offset + 0,
2495                _depth
2496            )?;
2497            fidl::decode!(ConnectParameters, D, &mut self.connection, decoder, offset + 8, _depth)?;
2498            Ok(())
2499        }
2500    }
2501
2502    impl fidl::encoding::ValueTypeMarker for SearchResultsServiceFoundRequest {
2503        type Borrowed<'a> = &'a Self;
2504        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2505            value
2506        }
2507    }
2508
2509    unsafe impl fidl::encoding::TypeMarker for SearchResultsServiceFoundRequest {
2510        type Owned = Self;
2511
2512        #[inline(always)]
2513        fn inline_align(_context: fidl::encoding::Context) -> usize {
2514            8
2515        }
2516
2517        #[inline(always)]
2518        fn inline_size(_context: fidl::encoding::Context) -> usize {
2519            40
2520        }
2521    }
2522
2523    unsafe impl<D: fidl::encoding::ResourceDialect>
2524        fidl::encoding::Encode<SearchResultsServiceFoundRequest, D>
2525        for &SearchResultsServiceFoundRequest
2526    {
2527        #[inline]
2528        unsafe fn encode(
2529            self,
2530            encoder: &mut fidl::encoding::Encoder<'_, D>,
2531            offset: usize,
2532            _depth: fidl::encoding::Depth,
2533        ) -> fidl::Result<()> {
2534            encoder.debug_check_bounds::<SearchResultsServiceFoundRequest>(offset);
2535            // Delegate to tuple encoding.
2536            fidl::encoding::Encode::<SearchResultsServiceFoundRequest, D>::encode(
2537                (
2538                    <fidl_fuchsia_bluetooth::PeerId as fidl::encoding::ValueTypeMarker>::borrow(&self.peer_id),
2539                    <fidl::encoding::Optional<fidl::encoding::Vector<ProtocolDescriptor, 255>> as fidl::encoding::ValueTypeMarker>::borrow(&self.protocol),
2540                    <fidl::encoding::Vector<Attribute, 512> as fidl::encoding::ValueTypeMarker>::borrow(&self.attributes),
2541                ),
2542                encoder, offset, _depth
2543            )
2544        }
2545    }
2546    unsafe impl<
2547            D: fidl::encoding::ResourceDialect,
2548            T0: fidl::encoding::Encode<fidl_fuchsia_bluetooth::PeerId, D>,
2549            T1: fidl::encoding::Encode<
2550                fidl::encoding::Optional<fidl::encoding::Vector<ProtocolDescriptor, 255>>,
2551                D,
2552            >,
2553            T2: fidl::encoding::Encode<fidl::encoding::Vector<Attribute, 512>, D>,
2554        > fidl::encoding::Encode<SearchResultsServiceFoundRequest, D> for (T0, T1, T2)
2555    {
2556        #[inline]
2557        unsafe fn encode(
2558            self,
2559            encoder: &mut fidl::encoding::Encoder<'_, D>,
2560            offset: usize,
2561            depth: fidl::encoding::Depth,
2562        ) -> fidl::Result<()> {
2563            encoder.debug_check_bounds::<SearchResultsServiceFoundRequest>(offset);
2564            // Zero out padding regions. There's no need to apply masks
2565            // because the unmasked parts will be overwritten by fields.
2566            // Write the fields.
2567            self.0.encode(encoder, offset + 0, depth)?;
2568            self.1.encode(encoder, offset + 8, depth)?;
2569            self.2.encode(encoder, offset + 24, depth)?;
2570            Ok(())
2571        }
2572    }
2573
2574    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2575        for SearchResultsServiceFoundRequest
2576    {
2577        #[inline(always)]
2578        fn new_empty() -> Self {
2579            Self {
2580                peer_id: fidl::new_empty!(fidl_fuchsia_bluetooth::PeerId, D),
2581                protocol: fidl::new_empty!(
2582                    fidl::encoding::Optional<fidl::encoding::Vector<ProtocolDescriptor, 255>>,
2583                    D
2584                ),
2585                attributes: fidl::new_empty!(fidl::encoding::Vector<Attribute, 512>, D),
2586            }
2587        }
2588
2589        #[inline]
2590        unsafe fn decode(
2591            &mut self,
2592            decoder: &mut fidl::encoding::Decoder<'_, D>,
2593            offset: usize,
2594            _depth: fidl::encoding::Depth,
2595        ) -> fidl::Result<()> {
2596            decoder.debug_check_bounds::<Self>(offset);
2597            // Verify that padding bytes are zero.
2598            fidl::decode!(
2599                fidl_fuchsia_bluetooth::PeerId,
2600                D,
2601                &mut self.peer_id,
2602                decoder,
2603                offset + 0,
2604                _depth
2605            )?;
2606            fidl::decode!(
2607                fidl::encoding::Optional<fidl::encoding::Vector<ProtocolDescriptor, 255>>,
2608                D,
2609                &mut self.protocol,
2610                decoder,
2611                offset + 8,
2612                _depth
2613            )?;
2614            fidl::decode!(fidl::encoding::Vector<Attribute, 512>, D, &mut self.attributes, decoder, offset + 24, _depth)?;
2615            Ok(())
2616        }
2617    }
2618
2619    impl Attribute {
2620        #[inline(always)]
2621        fn max_ordinal_present(&self) -> u64 {
2622            if let Some(_) = self.element {
2623                return 2;
2624            }
2625            if let Some(_) = self.id {
2626                return 1;
2627            }
2628            0
2629        }
2630    }
2631
2632    impl fidl::encoding::ValueTypeMarker for Attribute {
2633        type Borrowed<'a> = &'a Self;
2634        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2635            value
2636        }
2637    }
2638
2639    unsafe impl fidl::encoding::TypeMarker for Attribute {
2640        type Owned = Self;
2641
2642        #[inline(always)]
2643        fn inline_align(_context: fidl::encoding::Context) -> usize {
2644            8
2645        }
2646
2647        #[inline(always)]
2648        fn inline_size(_context: fidl::encoding::Context) -> usize {
2649            16
2650        }
2651    }
2652
2653    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Attribute, D>
2654        for &Attribute
2655    {
2656        unsafe fn encode(
2657            self,
2658            encoder: &mut fidl::encoding::Encoder<'_, D>,
2659            offset: usize,
2660            mut depth: fidl::encoding::Depth,
2661        ) -> fidl::Result<()> {
2662            encoder.debug_check_bounds::<Attribute>(offset);
2663            // Vector header
2664            let max_ordinal: u64 = self.max_ordinal_present();
2665            encoder.write_num(max_ordinal, offset);
2666            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2667            // Calling encoder.out_of_line_offset(0) is not allowed.
2668            if max_ordinal == 0 {
2669                return Ok(());
2670            }
2671            depth.increment()?;
2672            let envelope_size = 8;
2673            let bytes_len = max_ordinal as usize * envelope_size;
2674            #[allow(unused_variables)]
2675            let offset = encoder.out_of_line_offset(bytes_len);
2676            let mut _prev_end_offset: usize = 0;
2677            if 1 > max_ordinal {
2678                return Ok(());
2679            }
2680
2681            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2682            // are envelope_size bytes.
2683            let cur_offset: usize = (1 - 1) * envelope_size;
2684
2685            // Zero reserved fields.
2686            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2687
2688            // Safety:
2689            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2690            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2691            //   envelope_size bytes, there is always sufficient room.
2692            fidl::encoding::encode_in_envelope_optional::<u16, D>(
2693                self.id.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
2694                encoder,
2695                offset + cur_offset,
2696                depth,
2697            )?;
2698
2699            _prev_end_offset = cur_offset + envelope_size;
2700            if 2 > max_ordinal {
2701                return Ok(());
2702            }
2703
2704            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2705            // are envelope_size bytes.
2706            let cur_offset: usize = (2 - 1) * envelope_size;
2707
2708            // Zero reserved fields.
2709            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2710
2711            // Safety:
2712            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2713            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2714            //   envelope_size bytes, there is always sufficient room.
2715            fidl::encoding::encode_in_envelope_optional::<DataElement, D>(
2716                self.element.as_ref().map(<DataElement as fidl::encoding::ValueTypeMarker>::borrow),
2717                encoder,
2718                offset + cur_offset,
2719                depth,
2720            )?;
2721
2722            _prev_end_offset = cur_offset + envelope_size;
2723
2724            Ok(())
2725        }
2726    }
2727
2728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Attribute {
2729        #[inline(always)]
2730        fn new_empty() -> Self {
2731            Self::default()
2732        }
2733
2734        unsafe fn decode(
2735            &mut self,
2736            decoder: &mut fidl::encoding::Decoder<'_, D>,
2737            offset: usize,
2738            mut depth: fidl::encoding::Depth,
2739        ) -> fidl::Result<()> {
2740            decoder.debug_check_bounds::<Self>(offset);
2741            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2742                None => return Err(fidl::Error::NotNullable),
2743                Some(len) => len,
2744            };
2745            // Calling decoder.out_of_line_offset(0) is not allowed.
2746            if len == 0 {
2747                return Ok(());
2748            };
2749            depth.increment()?;
2750            let envelope_size = 8;
2751            let bytes_len = len * envelope_size;
2752            let offset = decoder.out_of_line_offset(bytes_len)?;
2753            // Decode the envelope for each type.
2754            let mut _next_ordinal_to_read = 0;
2755            let mut next_offset = offset;
2756            let end_offset = offset + bytes_len;
2757            _next_ordinal_to_read += 1;
2758            if next_offset >= end_offset {
2759                return Ok(());
2760            }
2761
2762            // Decode unknown envelopes for gaps in ordinals.
2763            while _next_ordinal_to_read < 1 {
2764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2765                _next_ordinal_to_read += 1;
2766                next_offset += envelope_size;
2767            }
2768
2769            let next_out_of_line = decoder.next_out_of_line();
2770            let handles_before = decoder.remaining_handles();
2771            if let Some((inlined, num_bytes, num_handles)) =
2772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2773            {
2774                let member_inline_size =
2775                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2776                if inlined != (member_inline_size <= 4) {
2777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2778                }
2779                let inner_offset;
2780                let mut inner_depth = depth.clone();
2781                if inlined {
2782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2783                    inner_offset = next_offset;
2784                } else {
2785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2786                    inner_depth.increment()?;
2787                }
2788                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u16, D));
2789                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
2790                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2791                {
2792                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2793                }
2794                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2795                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2796                }
2797            }
2798
2799            next_offset += envelope_size;
2800            _next_ordinal_to_read += 1;
2801            if next_offset >= end_offset {
2802                return Ok(());
2803            }
2804
2805            // Decode unknown envelopes for gaps in ordinals.
2806            while _next_ordinal_to_read < 2 {
2807                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2808                _next_ordinal_to_read += 1;
2809                next_offset += envelope_size;
2810            }
2811
2812            let next_out_of_line = decoder.next_out_of_line();
2813            let handles_before = decoder.remaining_handles();
2814            if let Some((inlined, num_bytes, num_handles)) =
2815                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2816            {
2817                let member_inline_size =
2818                    <DataElement as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2819                if inlined != (member_inline_size <= 4) {
2820                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2821                }
2822                let inner_offset;
2823                let mut inner_depth = depth.clone();
2824                if inlined {
2825                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2826                    inner_offset = next_offset;
2827                } else {
2828                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2829                    inner_depth.increment()?;
2830                }
2831                let val_ref = self.element.get_or_insert_with(|| fidl::new_empty!(DataElement, D));
2832                fidl::decode!(DataElement, D, val_ref, decoder, inner_offset, inner_depth)?;
2833                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2834                {
2835                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2836                }
2837                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2838                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2839                }
2840            }
2841
2842            next_offset += envelope_size;
2843
2844            // Decode the remaining unknown envelopes.
2845            while next_offset < end_offset {
2846                _next_ordinal_to_read += 1;
2847                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2848                next_offset += envelope_size;
2849            }
2850
2851            Ok(())
2852        }
2853    }
2854
2855    impl AudioAacSupport {
2856        #[inline(always)]
2857        fn max_ordinal_present(&self) -> u64 {
2858            0
2859        }
2860    }
2861
2862    impl fidl::encoding::ValueTypeMarker for AudioAacSupport {
2863        type Borrowed<'a> = &'a Self;
2864        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2865            value
2866        }
2867    }
2868
2869    unsafe impl fidl::encoding::TypeMarker for AudioAacSupport {
2870        type Owned = Self;
2871
2872        #[inline(always)]
2873        fn inline_align(_context: fidl::encoding::Context) -> usize {
2874            8
2875        }
2876
2877        #[inline(always)]
2878        fn inline_size(_context: fidl::encoding::Context) -> usize {
2879            16
2880        }
2881    }
2882
2883    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioAacSupport, D>
2884        for &AudioAacSupport
2885    {
2886        unsafe fn encode(
2887            self,
2888            encoder: &mut fidl::encoding::Encoder<'_, D>,
2889            offset: usize,
2890            mut depth: fidl::encoding::Depth,
2891        ) -> fidl::Result<()> {
2892            encoder.debug_check_bounds::<AudioAacSupport>(offset);
2893            // Vector header
2894            let max_ordinal: u64 = self.max_ordinal_present();
2895            encoder.write_num(max_ordinal, offset);
2896            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2897            // Calling encoder.out_of_line_offset(0) is not allowed.
2898            if max_ordinal == 0 {
2899                return Ok(());
2900            }
2901            depth.increment()?;
2902            let envelope_size = 8;
2903            let bytes_len = max_ordinal as usize * envelope_size;
2904            #[allow(unused_variables)]
2905            let offset = encoder.out_of_line_offset(bytes_len);
2906            let mut _prev_end_offset: usize = 0;
2907
2908            Ok(())
2909        }
2910    }
2911
2912    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioAacSupport {
2913        #[inline(always)]
2914        fn new_empty() -> Self {
2915            Self::default()
2916        }
2917
2918        unsafe fn decode(
2919            &mut self,
2920            decoder: &mut fidl::encoding::Decoder<'_, D>,
2921            offset: usize,
2922            mut depth: fidl::encoding::Depth,
2923        ) -> fidl::Result<()> {
2924            decoder.debug_check_bounds::<Self>(offset);
2925            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2926                None => return Err(fidl::Error::NotNullable),
2927                Some(len) => len,
2928            };
2929            // Calling decoder.out_of_line_offset(0) is not allowed.
2930            if len == 0 {
2931                return Ok(());
2932            };
2933            depth.increment()?;
2934            let envelope_size = 8;
2935            let bytes_len = len * envelope_size;
2936            let offset = decoder.out_of_line_offset(bytes_len)?;
2937            // Decode the envelope for each type.
2938            let mut _next_ordinal_to_read = 0;
2939            let mut next_offset = offset;
2940            let end_offset = offset + bytes_len;
2941
2942            // Decode the remaining unknown envelopes.
2943            while next_offset < end_offset {
2944                _next_ordinal_to_read += 1;
2945                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2946                next_offset += envelope_size;
2947            }
2948
2949            Ok(())
2950        }
2951    }
2952
2953    impl AudioOffloadConfiguration {
2954        #[inline(always)]
2955        fn max_ordinal_present(&self) -> u64 {
2956            if let Some(_) = self.encoder_settings {
2957                return 8;
2958            }
2959            if let Some(_) = self.encoded_bit_rate {
2960                return 7;
2961            }
2962            if let Some(_) = self.channel_mode {
2963                return 6;
2964            }
2965            if let Some(_) = self.bits_per_sample {
2966                return 5;
2967            }
2968            if let Some(_) = self.sampling_frequency {
2969                return 4;
2970            }
2971            if let Some(_) = self.scms_t_enable {
2972                return 3;
2973            }
2974            if let Some(_) = self.max_latency {
2975                return 2;
2976            }
2977            if let Some(_) = self.codec {
2978                return 1;
2979            }
2980            0
2981        }
2982    }
2983
2984    impl fidl::encoding::ValueTypeMarker for AudioOffloadConfiguration {
2985        type Borrowed<'a> = &'a Self;
2986        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2987            value
2988        }
2989    }
2990
2991    unsafe impl fidl::encoding::TypeMarker for AudioOffloadConfiguration {
2992        type Owned = Self;
2993
2994        #[inline(always)]
2995        fn inline_align(_context: fidl::encoding::Context) -> usize {
2996            8
2997        }
2998
2999        #[inline(always)]
3000        fn inline_size(_context: fidl::encoding::Context) -> usize {
3001            16
3002        }
3003    }
3004
3005    unsafe impl<D: fidl::encoding::ResourceDialect>
3006        fidl::encoding::Encode<AudioOffloadConfiguration, D> for &AudioOffloadConfiguration
3007    {
3008        unsafe fn encode(
3009            self,
3010            encoder: &mut fidl::encoding::Encoder<'_, D>,
3011            offset: usize,
3012            mut depth: fidl::encoding::Depth,
3013        ) -> fidl::Result<()> {
3014            encoder.debug_check_bounds::<AudioOffloadConfiguration>(offset);
3015            // Vector header
3016            let max_ordinal: u64 = self.max_ordinal_present();
3017            encoder.write_num(max_ordinal, offset);
3018            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3019            // Calling encoder.out_of_line_offset(0) is not allowed.
3020            if max_ordinal == 0 {
3021                return Ok(());
3022            }
3023            depth.increment()?;
3024            let envelope_size = 8;
3025            let bytes_len = max_ordinal as usize * envelope_size;
3026            #[allow(unused_variables)]
3027            let offset = encoder.out_of_line_offset(bytes_len);
3028            let mut _prev_end_offset: usize = 0;
3029            if 1 > max_ordinal {
3030                return Ok(());
3031            }
3032
3033            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3034            // are envelope_size bytes.
3035            let cur_offset: usize = (1 - 1) * envelope_size;
3036
3037            // Zero reserved fields.
3038            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3039
3040            // Safety:
3041            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3042            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3043            //   envelope_size bytes, there is always sufficient room.
3044            fidl::encoding::encode_in_envelope_optional::<AudioOffloadFeatures, D>(
3045                self.codec
3046                    .as_ref()
3047                    .map(<AudioOffloadFeatures as fidl::encoding::ValueTypeMarker>::borrow),
3048                encoder,
3049                offset + cur_offset,
3050                depth,
3051            )?;
3052
3053            _prev_end_offset = cur_offset + envelope_size;
3054            if 2 > max_ordinal {
3055                return Ok(());
3056            }
3057
3058            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3059            // are envelope_size bytes.
3060            let cur_offset: usize = (2 - 1) * envelope_size;
3061
3062            // Zero reserved fields.
3063            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3064
3065            // Safety:
3066            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3067            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3068            //   envelope_size bytes, there is always sufficient room.
3069            fidl::encoding::encode_in_envelope_optional::<u16, D>(
3070                self.max_latency.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
3071                encoder,
3072                offset + cur_offset,
3073                depth,
3074            )?;
3075
3076            _prev_end_offset = cur_offset + envelope_size;
3077            if 3 > max_ordinal {
3078                return Ok(());
3079            }
3080
3081            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3082            // are envelope_size bytes.
3083            let cur_offset: usize = (3 - 1) * envelope_size;
3084
3085            // Zero reserved fields.
3086            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3087
3088            // Safety:
3089            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3090            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3091            //   envelope_size bytes, there is always sufficient room.
3092            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3093                self.scms_t_enable.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3094                encoder,
3095                offset + cur_offset,
3096                depth,
3097            )?;
3098
3099            _prev_end_offset = cur_offset + envelope_size;
3100            if 4 > max_ordinal {
3101                return Ok(());
3102            }
3103
3104            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3105            // are envelope_size bytes.
3106            let cur_offset: usize = (4 - 1) * envelope_size;
3107
3108            // Zero reserved fields.
3109            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3110
3111            // Safety:
3112            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3113            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3114            //   envelope_size bytes, there is always sufficient room.
3115            fidl::encoding::encode_in_envelope_optional::<AudioSamplingFrequency, D>(
3116                self.sampling_frequency
3117                    .as_ref()
3118                    .map(<AudioSamplingFrequency as fidl::encoding::ValueTypeMarker>::borrow),
3119                encoder,
3120                offset + cur_offset,
3121                depth,
3122            )?;
3123
3124            _prev_end_offset = cur_offset + envelope_size;
3125            if 5 > max_ordinal {
3126                return Ok(());
3127            }
3128
3129            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3130            // are envelope_size bytes.
3131            let cur_offset: usize = (5 - 1) * envelope_size;
3132
3133            // Zero reserved fields.
3134            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3135
3136            // Safety:
3137            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3138            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3139            //   envelope_size bytes, there is always sufficient room.
3140            fidl::encoding::encode_in_envelope_optional::<AudioBitsPerSample, D>(
3141                self.bits_per_sample
3142                    .as_ref()
3143                    .map(<AudioBitsPerSample as fidl::encoding::ValueTypeMarker>::borrow),
3144                encoder,
3145                offset + cur_offset,
3146                depth,
3147            )?;
3148
3149            _prev_end_offset = cur_offset + envelope_size;
3150            if 6 > max_ordinal {
3151                return Ok(());
3152            }
3153
3154            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3155            // are envelope_size bytes.
3156            let cur_offset: usize = (6 - 1) * envelope_size;
3157
3158            // Zero reserved fields.
3159            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3160
3161            // Safety:
3162            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3163            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3164            //   envelope_size bytes, there is always sufficient room.
3165            fidl::encoding::encode_in_envelope_optional::<AudioChannelMode, D>(
3166                self.channel_mode
3167                    .as_ref()
3168                    .map(<AudioChannelMode as fidl::encoding::ValueTypeMarker>::borrow),
3169                encoder,
3170                offset + cur_offset,
3171                depth,
3172            )?;
3173
3174            _prev_end_offset = cur_offset + envelope_size;
3175            if 7 > max_ordinal {
3176                return Ok(());
3177            }
3178
3179            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3180            // are envelope_size bytes.
3181            let cur_offset: usize = (7 - 1) * envelope_size;
3182
3183            // Zero reserved fields.
3184            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3185
3186            // Safety:
3187            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3188            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3189            //   envelope_size bytes, there is always sufficient room.
3190            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3191                self.encoded_bit_rate
3192                    .as_ref()
3193                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3194                encoder,
3195                offset + cur_offset,
3196                depth,
3197            )?;
3198
3199            _prev_end_offset = cur_offset + envelope_size;
3200            if 8 > max_ordinal {
3201                return Ok(());
3202            }
3203
3204            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3205            // are envelope_size bytes.
3206            let cur_offset: usize = (8 - 1) * envelope_size;
3207
3208            // Zero reserved fields.
3209            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3210
3211            // Safety:
3212            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3213            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3214            //   envelope_size bytes, there is always sufficient room.
3215            fidl::encoding::encode_in_envelope_optional::<AudioEncoderSettings, D>(
3216                self.encoder_settings
3217                    .as_ref()
3218                    .map(<AudioEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow),
3219                encoder,
3220                offset + cur_offset,
3221                depth,
3222            )?;
3223
3224            _prev_end_offset = cur_offset + envelope_size;
3225
3226            Ok(())
3227        }
3228    }
3229
3230    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3231        for AudioOffloadConfiguration
3232    {
3233        #[inline(always)]
3234        fn new_empty() -> Self {
3235            Self::default()
3236        }
3237
3238        unsafe fn decode(
3239            &mut self,
3240            decoder: &mut fidl::encoding::Decoder<'_, D>,
3241            offset: usize,
3242            mut depth: fidl::encoding::Depth,
3243        ) -> fidl::Result<()> {
3244            decoder.debug_check_bounds::<Self>(offset);
3245            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3246                None => return Err(fidl::Error::NotNullable),
3247                Some(len) => len,
3248            };
3249            // Calling decoder.out_of_line_offset(0) is not allowed.
3250            if len == 0 {
3251                return Ok(());
3252            };
3253            depth.increment()?;
3254            let envelope_size = 8;
3255            let bytes_len = len * envelope_size;
3256            let offset = decoder.out_of_line_offset(bytes_len)?;
3257            // Decode the envelope for each type.
3258            let mut _next_ordinal_to_read = 0;
3259            let mut next_offset = offset;
3260            let end_offset = offset + bytes_len;
3261            _next_ordinal_to_read += 1;
3262            if next_offset >= end_offset {
3263                return Ok(());
3264            }
3265
3266            // Decode unknown envelopes for gaps in ordinals.
3267            while _next_ordinal_to_read < 1 {
3268                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3269                _next_ordinal_to_read += 1;
3270                next_offset += envelope_size;
3271            }
3272
3273            let next_out_of_line = decoder.next_out_of_line();
3274            let handles_before = decoder.remaining_handles();
3275            if let Some((inlined, num_bytes, num_handles)) =
3276                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3277            {
3278                let member_inline_size =
3279                    <AudioOffloadFeatures as fidl::encoding::TypeMarker>::inline_size(
3280                        decoder.context,
3281                    );
3282                if inlined != (member_inline_size <= 4) {
3283                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3284                }
3285                let inner_offset;
3286                let mut inner_depth = depth.clone();
3287                if inlined {
3288                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3289                    inner_offset = next_offset;
3290                } else {
3291                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3292                    inner_depth.increment()?;
3293                }
3294                let val_ref =
3295                    self.codec.get_or_insert_with(|| fidl::new_empty!(AudioOffloadFeatures, D));
3296                fidl::decode!(
3297                    AudioOffloadFeatures,
3298                    D,
3299                    val_ref,
3300                    decoder,
3301                    inner_offset,
3302                    inner_depth
3303                )?;
3304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3305                {
3306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3307                }
3308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3310                }
3311            }
3312
3313            next_offset += envelope_size;
3314            _next_ordinal_to_read += 1;
3315            if next_offset >= end_offset {
3316                return Ok(());
3317            }
3318
3319            // Decode unknown envelopes for gaps in ordinals.
3320            while _next_ordinal_to_read < 2 {
3321                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3322                _next_ordinal_to_read += 1;
3323                next_offset += envelope_size;
3324            }
3325
3326            let next_out_of_line = decoder.next_out_of_line();
3327            let handles_before = decoder.remaining_handles();
3328            if let Some((inlined, num_bytes, num_handles)) =
3329                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3330            {
3331                let member_inline_size =
3332                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3333                if inlined != (member_inline_size <= 4) {
3334                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3335                }
3336                let inner_offset;
3337                let mut inner_depth = depth.clone();
3338                if inlined {
3339                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3340                    inner_offset = next_offset;
3341                } else {
3342                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3343                    inner_depth.increment()?;
3344                }
3345                let val_ref = self.max_latency.get_or_insert_with(|| fidl::new_empty!(u16, D));
3346                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
3347                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3348                {
3349                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3350                }
3351                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3352                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3353                }
3354            }
3355
3356            next_offset += envelope_size;
3357            _next_ordinal_to_read += 1;
3358            if next_offset >= end_offset {
3359                return Ok(());
3360            }
3361
3362            // Decode unknown envelopes for gaps in ordinals.
3363            while _next_ordinal_to_read < 3 {
3364                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3365                _next_ordinal_to_read += 1;
3366                next_offset += envelope_size;
3367            }
3368
3369            let next_out_of_line = decoder.next_out_of_line();
3370            let handles_before = decoder.remaining_handles();
3371            if let Some((inlined, num_bytes, num_handles)) =
3372                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3373            {
3374                let member_inline_size =
3375                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3376                if inlined != (member_inline_size <= 4) {
3377                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3378                }
3379                let inner_offset;
3380                let mut inner_depth = depth.clone();
3381                if inlined {
3382                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3383                    inner_offset = next_offset;
3384                } else {
3385                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3386                    inner_depth.increment()?;
3387                }
3388                let val_ref = self.scms_t_enable.get_or_insert_with(|| fidl::new_empty!(bool, D));
3389                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3390                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3391                {
3392                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3393                }
3394                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3395                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3396                }
3397            }
3398
3399            next_offset += envelope_size;
3400            _next_ordinal_to_read += 1;
3401            if next_offset >= end_offset {
3402                return Ok(());
3403            }
3404
3405            // Decode unknown envelopes for gaps in ordinals.
3406            while _next_ordinal_to_read < 4 {
3407                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3408                _next_ordinal_to_read += 1;
3409                next_offset += envelope_size;
3410            }
3411
3412            let next_out_of_line = decoder.next_out_of_line();
3413            let handles_before = decoder.remaining_handles();
3414            if let Some((inlined, num_bytes, num_handles)) =
3415                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3416            {
3417                let member_inline_size =
3418                    <AudioSamplingFrequency as fidl::encoding::TypeMarker>::inline_size(
3419                        decoder.context,
3420                    );
3421                if inlined != (member_inline_size <= 4) {
3422                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3423                }
3424                let inner_offset;
3425                let mut inner_depth = depth.clone();
3426                if inlined {
3427                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3428                    inner_offset = next_offset;
3429                } else {
3430                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3431                    inner_depth.increment()?;
3432                }
3433                let val_ref = self
3434                    .sampling_frequency
3435                    .get_or_insert_with(|| fidl::new_empty!(AudioSamplingFrequency, D));
3436                fidl::decode!(
3437                    AudioSamplingFrequency,
3438                    D,
3439                    val_ref,
3440                    decoder,
3441                    inner_offset,
3442                    inner_depth
3443                )?;
3444                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3445                {
3446                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3447                }
3448                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3449                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3450                }
3451            }
3452
3453            next_offset += envelope_size;
3454            _next_ordinal_to_read += 1;
3455            if next_offset >= end_offset {
3456                return Ok(());
3457            }
3458
3459            // Decode unknown envelopes for gaps in ordinals.
3460            while _next_ordinal_to_read < 5 {
3461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3462                _next_ordinal_to_read += 1;
3463                next_offset += envelope_size;
3464            }
3465
3466            let next_out_of_line = decoder.next_out_of_line();
3467            let handles_before = decoder.remaining_handles();
3468            if let Some((inlined, num_bytes, num_handles)) =
3469                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3470            {
3471                let member_inline_size =
3472                    <AudioBitsPerSample as fidl::encoding::TypeMarker>::inline_size(
3473                        decoder.context,
3474                    );
3475                if inlined != (member_inline_size <= 4) {
3476                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3477                }
3478                let inner_offset;
3479                let mut inner_depth = depth.clone();
3480                if inlined {
3481                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3482                    inner_offset = next_offset;
3483                } else {
3484                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3485                    inner_depth.increment()?;
3486                }
3487                let val_ref = self
3488                    .bits_per_sample
3489                    .get_or_insert_with(|| fidl::new_empty!(AudioBitsPerSample, D));
3490                fidl::decode!(AudioBitsPerSample, D, val_ref, decoder, inner_offset, inner_depth)?;
3491                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3492                {
3493                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3494                }
3495                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3496                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3497                }
3498            }
3499
3500            next_offset += envelope_size;
3501            _next_ordinal_to_read += 1;
3502            if next_offset >= end_offset {
3503                return Ok(());
3504            }
3505
3506            // Decode unknown envelopes for gaps in ordinals.
3507            while _next_ordinal_to_read < 6 {
3508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3509                _next_ordinal_to_read += 1;
3510                next_offset += envelope_size;
3511            }
3512
3513            let next_out_of_line = decoder.next_out_of_line();
3514            let handles_before = decoder.remaining_handles();
3515            if let Some((inlined, num_bytes, num_handles)) =
3516                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3517            {
3518                let member_inline_size =
3519                    <AudioChannelMode as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3520                if inlined != (member_inline_size <= 4) {
3521                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3522                }
3523                let inner_offset;
3524                let mut inner_depth = depth.clone();
3525                if inlined {
3526                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3527                    inner_offset = next_offset;
3528                } else {
3529                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3530                    inner_depth.increment()?;
3531                }
3532                let val_ref =
3533                    self.channel_mode.get_or_insert_with(|| fidl::new_empty!(AudioChannelMode, D));
3534                fidl::decode!(AudioChannelMode, D, val_ref, decoder, inner_offset, inner_depth)?;
3535                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3536                {
3537                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3538                }
3539                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3540                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3541                }
3542            }
3543
3544            next_offset += envelope_size;
3545            _next_ordinal_to_read += 1;
3546            if next_offset >= end_offset {
3547                return Ok(());
3548            }
3549
3550            // Decode unknown envelopes for gaps in ordinals.
3551            while _next_ordinal_to_read < 7 {
3552                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3553                _next_ordinal_to_read += 1;
3554                next_offset += envelope_size;
3555            }
3556
3557            let next_out_of_line = decoder.next_out_of_line();
3558            let handles_before = decoder.remaining_handles();
3559            if let Some((inlined, num_bytes, num_handles)) =
3560                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3561            {
3562                let member_inline_size =
3563                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3564                if inlined != (member_inline_size <= 4) {
3565                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3566                }
3567                let inner_offset;
3568                let mut inner_depth = depth.clone();
3569                if inlined {
3570                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3571                    inner_offset = next_offset;
3572                } else {
3573                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3574                    inner_depth.increment()?;
3575                }
3576                let val_ref = self.encoded_bit_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
3577                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3578                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3579                {
3580                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3581                }
3582                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3583                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3584                }
3585            }
3586
3587            next_offset += envelope_size;
3588            _next_ordinal_to_read += 1;
3589            if next_offset >= end_offset {
3590                return Ok(());
3591            }
3592
3593            // Decode unknown envelopes for gaps in ordinals.
3594            while _next_ordinal_to_read < 8 {
3595                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3596                _next_ordinal_to_read += 1;
3597                next_offset += envelope_size;
3598            }
3599
3600            let next_out_of_line = decoder.next_out_of_line();
3601            let handles_before = decoder.remaining_handles();
3602            if let Some((inlined, num_bytes, num_handles)) =
3603                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3604            {
3605                let member_inline_size =
3606                    <AudioEncoderSettings as fidl::encoding::TypeMarker>::inline_size(
3607                        decoder.context,
3608                    );
3609                if inlined != (member_inline_size <= 4) {
3610                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3611                }
3612                let inner_offset;
3613                let mut inner_depth = depth.clone();
3614                if inlined {
3615                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3616                    inner_offset = next_offset;
3617                } else {
3618                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3619                    inner_depth.increment()?;
3620                }
3621                let val_ref = self
3622                    .encoder_settings
3623                    .get_or_insert_with(|| fidl::new_empty!(AudioEncoderSettings, D));
3624                fidl::decode!(
3625                    AudioEncoderSettings,
3626                    D,
3627                    val_ref,
3628                    decoder,
3629                    inner_offset,
3630                    inner_depth
3631                )?;
3632                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3633                {
3634                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3635                }
3636                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3637                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3638                }
3639            }
3640
3641            next_offset += envelope_size;
3642
3643            // Decode the remaining unknown envelopes.
3644            while next_offset < end_offset {
3645                _next_ordinal_to_read += 1;
3646                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3647                next_offset += envelope_size;
3648            }
3649
3650            Ok(())
3651        }
3652    }
3653
3654    impl AudioOffloadExtGetSupportedFeaturesResponse {
3655        #[inline(always)]
3656        fn max_ordinal_present(&self) -> u64 {
3657            if let Some(_) = self.audio_offload_features {
3658                return 1;
3659            }
3660            0
3661        }
3662    }
3663
3664    impl fidl::encoding::ValueTypeMarker for AudioOffloadExtGetSupportedFeaturesResponse {
3665        type Borrowed<'a> = &'a Self;
3666        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3667            value
3668        }
3669    }
3670
3671    unsafe impl fidl::encoding::TypeMarker for AudioOffloadExtGetSupportedFeaturesResponse {
3672        type Owned = Self;
3673
3674        #[inline(always)]
3675        fn inline_align(_context: fidl::encoding::Context) -> usize {
3676            8
3677        }
3678
3679        #[inline(always)]
3680        fn inline_size(_context: fidl::encoding::Context) -> usize {
3681            16
3682        }
3683    }
3684
3685    unsafe impl<D: fidl::encoding::ResourceDialect>
3686        fidl::encoding::Encode<AudioOffloadExtGetSupportedFeaturesResponse, D>
3687        for &AudioOffloadExtGetSupportedFeaturesResponse
3688    {
3689        unsafe fn encode(
3690            self,
3691            encoder: &mut fidl::encoding::Encoder<'_, D>,
3692            offset: usize,
3693            mut depth: fidl::encoding::Depth,
3694        ) -> fidl::Result<()> {
3695            encoder.debug_check_bounds::<AudioOffloadExtGetSupportedFeaturesResponse>(offset);
3696            // Vector header
3697            let max_ordinal: u64 = self.max_ordinal_present();
3698            encoder.write_num(max_ordinal, offset);
3699            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3700            // Calling encoder.out_of_line_offset(0) is not allowed.
3701            if max_ordinal == 0 {
3702                return Ok(());
3703            }
3704            depth.increment()?;
3705            let envelope_size = 8;
3706            let bytes_len = max_ordinal as usize * envelope_size;
3707            #[allow(unused_variables)]
3708            let offset = encoder.out_of_line_offset(bytes_len);
3709            let mut _prev_end_offset: usize = 0;
3710            if 1 > max_ordinal {
3711                return Ok(());
3712            }
3713
3714            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3715            // are envelope_size bytes.
3716            let cur_offset: usize = (1 - 1) * envelope_size;
3717
3718            // Zero reserved fields.
3719            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3720
3721            // Safety:
3722            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3723            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3724            //   envelope_size bytes, there is always sufficient room.
3725            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<AudioOffloadFeatures>, D>(
3726            self.audio_offload_features.as_ref().map(<fidl::encoding::UnboundedVector<AudioOffloadFeatures> as fidl::encoding::ValueTypeMarker>::borrow),
3727            encoder, offset + cur_offset, depth
3728        )?;
3729
3730            _prev_end_offset = cur_offset + envelope_size;
3731
3732            Ok(())
3733        }
3734    }
3735
3736    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3737        for AudioOffloadExtGetSupportedFeaturesResponse
3738    {
3739        #[inline(always)]
3740        fn new_empty() -> Self {
3741            Self::default()
3742        }
3743
3744        unsafe fn decode(
3745            &mut self,
3746            decoder: &mut fidl::encoding::Decoder<'_, D>,
3747            offset: usize,
3748            mut depth: fidl::encoding::Depth,
3749        ) -> fidl::Result<()> {
3750            decoder.debug_check_bounds::<Self>(offset);
3751            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3752                None => return Err(fidl::Error::NotNullable),
3753                Some(len) => len,
3754            };
3755            // Calling decoder.out_of_line_offset(0) is not allowed.
3756            if len == 0 {
3757                return Ok(());
3758            };
3759            depth.increment()?;
3760            let envelope_size = 8;
3761            let bytes_len = len * envelope_size;
3762            let offset = decoder.out_of_line_offset(bytes_len)?;
3763            // Decode the envelope for each type.
3764            let mut _next_ordinal_to_read = 0;
3765            let mut next_offset = offset;
3766            let end_offset = offset + bytes_len;
3767            _next_ordinal_to_read += 1;
3768            if next_offset >= end_offset {
3769                return Ok(());
3770            }
3771
3772            // Decode unknown envelopes for gaps in ordinals.
3773            while _next_ordinal_to_read < 1 {
3774                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3775                _next_ordinal_to_read += 1;
3776                next_offset += envelope_size;
3777            }
3778
3779            let next_out_of_line = decoder.next_out_of_line();
3780            let handles_before = decoder.remaining_handles();
3781            if let Some((inlined, num_bytes, num_handles)) =
3782                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3783            {
3784                let member_inline_size = <fidl::encoding::UnboundedVector<AudioOffloadFeatures> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3785                if inlined != (member_inline_size <= 4) {
3786                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3787                }
3788                let inner_offset;
3789                let mut inner_depth = depth.clone();
3790                if inlined {
3791                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3792                    inner_offset = next_offset;
3793                } else {
3794                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3795                    inner_depth.increment()?;
3796                }
3797                let val_ref = self.audio_offload_features.get_or_insert_with(|| {
3798                    fidl::new_empty!(fidl::encoding::UnboundedVector<AudioOffloadFeatures>, D)
3799                });
3800                fidl::decode!(
3801                    fidl::encoding::UnboundedVector<AudioOffloadFeatures>,
3802                    D,
3803                    val_ref,
3804                    decoder,
3805                    inner_offset,
3806                    inner_depth
3807                )?;
3808                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3809                {
3810                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3811                }
3812                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3813                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3814                }
3815            }
3816
3817            next_offset += envelope_size;
3818
3819            // Decode the remaining unknown envelopes.
3820            while next_offset < end_offset {
3821                _next_ordinal_to_read += 1;
3822                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3823                next_offset += envelope_size;
3824            }
3825
3826            Ok(())
3827        }
3828    }
3829
3830    impl AudioSbcSupport {
3831        #[inline(always)]
3832        fn max_ordinal_present(&self) -> u64 {
3833            0
3834        }
3835    }
3836
3837    impl fidl::encoding::ValueTypeMarker for AudioSbcSupport {
3838        type Borrowed<'a> = &'a Self;
3839        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3840            value
3841        }
3842    }
3843
3844    unsafe impl fidl::encoding::TypeMarker for AudioSbcSupport {
3845        type Owned = Self;
3846
3847        #[inline(always)]
3848        fn inline_align(_context: fidl::encoding::Context) -> usize {
3849            8
3850        }
3851
3852        #[inline(always)]
3853        fn inline_size(_context: fidl::encoding::Context) -> usize {
3854            16
3855        }
3856    }
3857
3858    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioSbcSupport, D>
3859        for &AudioSbcSupport
3860    {
3861        unsafe fn encode(
3862            self,
3863            encoder: &mut fidl::encoding::Encoder<'_, D>,
3864            offset: usize,
3865            mut depth: fidl::encoding::Depth,
3866        ) -> fidl::Result<()> {
3867            encoder.debug_check_bounds::<AudioSbcSupport>(offset);
3868            // Vector header
3869            let max_ordinal: u64 = self.max_ordinal_present();
3870            encoder.write_num(max_ordinal, offset);
3871            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3872            // Calling encoder.out_of_line_offset(0) is not allowed.
3873            if max_ordinal == 0 {
3874                return Ok(());
3875            }
3876            depth.increment()?;
3877            let envelope_size = 8;
3878            let bytes_len = max_ordinal as usize * envelope_size;
3879            #[allow(unused_variables)]
3880            let offset = encoder.out_of_line_offset(bytes_len);
3881            let mut _prev_end_offset: usize = 0;
3882
3883            Ok(())
3884        }
3885    }
3886
3887    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioSbcSupport {
3888        #[inline(always)]
3889        fn new_empty() -> Self {
3890            Self::default()
3891        }
3892
3893        unsafe fn decode(
3894            &mut self,
3895            decoder: &mut fidl::encoding::Decoder<'_, D>,
3896            offset: usize,
3897            mut depth: fidl::encoding::Depth,
3898        ) -> fidl::Result<()> {
3899            decoder.debug_check_bounds::<Self>(offset);
3900            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3901                None => return Err(fidl::Error::NotNullable),
3902                Some(len) => len,
3903            };
3904            // Calling decoder.out_of_line_offset(0) is not allowed.
3905            if len == 0 {
3906                return Ok(());
3907            };
3908            depth.increment()?;
3909            let envelope_size = 8;
3910            let bytes_len = len * envelope_size;
3911            let offset = decoder.out_of_line_offset(bytes_len)?;
3912            // Decode the envelope for each type.
3913            let mut _next_ordinal_to_read = 0;
3914            let mut next_offset = offset;
3915            let end_offset = offset + bytes_len;
3916
3917            // Decode the remaining unknown envelopes.
3918            while next_offset < end_offset {
3919                _next_ordinal_to_read += 1;
3920                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3921                next_offset += envelope_size;
3922            }
3923
3924            Ok(())
3925        }
3926    }
3927
3928    impl Information {
3929        #[inline(always)]
3930        fn max_ordinal_present(&self) -> u64 {
3931            if let Some(_) = self.provider {
3932                return 4;
3933            }
3934            if let Some(_) = self.description {
3935                return 3;
3936            }
3937            if let Some(_) = self.name {
3938                return 2;
3939            }
3940            if let Some(_) = self.language {
3941                return 1;
3942            }
3943            0
3944        }
3945    }
3946
3947    impl fidl::encoding::ValueTypeMarker for Information {
3948        type Borrowed<'a> = &'a Self;
3949        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3950            value
3951        }
3952    }
3953
3954    unsafe impl fidl::encoding::TypeMarker for Information {
3955        type Owned = Self;
3956
3957        #[inline(always)]
3958        fn inline_align(_context: fidl::encoding::Context) -> usize {
3959            8
3960        }
3961
3962        #[inline(always)]
3963        fn inline_size(_context: fidl::encoding::Context) -> usize {
3964            16
3965        }
3966    }
3967
3968    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Information, D>
3969        for &Information
3970    {
3971        unsafe fn encode(
3972            self,
3973            encoder: &mut fidl::encoding::Encoder<'_, D>,
3974            offset: usize,
3975            mut depth: fidl::encoding::Depth,
3976        ) -> fidl::Result<()> {
3977            encoder.debug_check_bounds::<Information>(offset);
3978            // Vector header
3979            let max_ordinal: u64 = self.max_ordinal_present();
3980            encoder.write_num(max_ordinal, offset);
3981            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3982            // Calling encoder.out_of_line_offset(0) is not allowed.
3983            if max_ordinal == 0 {
3984                return Ok(());
3985            }
3986            depth.increment()?;
3987            let envelope_size = 8;
3988            let bytes_len = max_ordinal as usize * envelope_size;
3989            #[allow(unused_variables)]
3990            let offset = encoder.out_of_line_offset(bytes_len);
3991            let mut _prev_end_offset: usize = 0;
3992            if 1 > max_ordinal {
3993                return Ok(());
3994            }
3995
3996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3997            // are envelope_size bytes.
3998            let cur_offset: usize = (1 - 1) * envelope_size;
3999
4000            // Zero reserved fields.
4001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4002
4003            // Safety:
4004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4006            //   envelope_size bytes, there is always sufficient room.
4007            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<2>, D>(
4008                self.language.as_ref().map(
4009                    <fidl::encoding::BoundedString<2> as fidl::encoding::ValueTypeMarker>::borrow,
4010                ),
4011                encoder,
4012                offset + cur_offset,
4013                depth,
4014            )?;
4015
4016            _prev_end_offset = cur_offset + envelope_size;
4017            if 2 > max_ordinal {
4018                return Ok(());
4019            }
4020
4021            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4022            // are envelope_size bytes.
4023            let cur_offset: usize = (2 - 1) * envelope_size;
4024
4025            // Zero reserved fields.
4026            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4027
4028            // Safety:
4029            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4030            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4031            //   envelope_size bytes, there is always sufficient room.
4032            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
4033            self.name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
4034            encoder, offset + cur_offset, depth
4035        )?;
4036
4037            _prev_end_offset = cur_offset + envelope_size;
4038            if 3 > max_ordinal {
4039                return Ok(());
4040            }
4041
4042            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4043            // are envelope_size bytes.
4044            let cur_offset: usize = (3 - 1) * envelope_size;
4045
4046            // Zero reserved fields.
4047            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4048
4049            // Safety:
4050            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4051            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4052            //   envelope_size bytes, there is always sufficient room.
4053            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
4054            self.description.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
4055            encoder, offset + cur_offset, depth
4056        )?;
4057
4058            _prev_end_offset = cur_offset + envelope_size;
4059            if 4 > max_ordinal {
4060                return Ok(());
4061            }
4062
4063            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4064            // are envelope_size bytes.
4065            let cur_offset: usize = (4 - 1) * envelope_size;
4066
4067            // Zero reserved fields.
4068            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4069
4070            // Safety:
4071            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4072            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4073            //   envelope_size bytes, there is always sufficient room.
4074            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
4075            self.provider.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
4076            encoder, offset + cur_offset, depth
4077        )?;
4078
4079            _prev_end_offset = cur_offset + envelope_size;
4080
4081            Ok(())
4082        }
4083    }
4084
4085    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Information {
4086        #[inline(always)]
4087        fn new_empty() -> Self {
4088            Self::default()
4089        }
4090
4091        unsafe fn decode(
4092            &mut self,
4093            decoder: &mut fidl::encoding::Decoder<'_, D>,
4094            offset: usize,
4095            mut depth: fidl::encoding::Depth,
4096        ) -> fidl::Result<()> {
4097            decoder.debug_check_bounds::<Self>(offset);
4098            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4099                None => return Err(fidl::Error::NotNullable),
4100                Some(len) => len,
4101            };
4102            // Calling decoder.out_of_line_offset(0) is not allowed.
4103            if len == 0 {
4104                return Ok(());
4105            };
4106            depth.increment()?;
4107            let envelope_size = 8;
4108            let bytes_len = len * envelope_size;
4109            let offset = decoder.out_of_line_offset(bytes_len)?;
4110            // Decode the envelope for each type.
4111            let mut _next_ordinal_to_read = 0;
4112            let mut next_offset = offset;
4113            let end_offset = offset + bytes_len;
4114            _next_ordinal_to_read += 1;
4115            if next_offset >= end_offset {
4116                return Ok(());
4117            }
4118
4119            // Decode unknown envelopes for gaps in ordinals.
4120            while _next_ordinal_to_read < 1 {
4121                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4122                _next_ordinal_to_read += 1;
4123                next_offset += envelope_size;
4124            }
4125
4126            let next_out_of_line = decoder.next_out_of_line();
4127            let handles_before = decoder.remaining_handles();
4128            if let Some((inlined, num_bytes, num_handles)) =
4129                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4130            {
4131                let member_inline_size =
4132                    <fidl::encoding::BoundedString<2> as fidl::encoding::TypeMarker>::inline_size(
4133                        decoder.context,
4134                    );
4135                if inlined != (member_inline_size <= 4) {
4136                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4137                }
4138                let inner_offset;
4139                let mut inner_depth = depth.clone();
4140                if inlined {
4141                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4142                    inner_offset = next_offset;
4143                } else {
4144                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4145                    inner_depth.increment()?;
4146                }
4147                let val_ref = self
4148                    .language
4149                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<2>, D));
4150                fidl::decode!(
4151                    fidl::encoding::BoundedString<2>,
4152                    D,
4153                    val_ref,
4154                    decoder,
4155                    inner_offset,
4156                    inner_depth
4157                )?;
4158                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4159                {
4160                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4161                }
4162                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4163                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4164                }
4165            }
4166
4167            next_offset += envelope_size;
4168            _next_ordinal_to_read += 1;
4169            if next_offset >= end_offset {
4170                return Ok(());
4171            }
4172
4173            // Decode unknown envelopes for gaps in ordinals.
4174            while _next_ordinal_to_read < 2 {
4175                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4176                _next_ordinal_to_read += 1;
4177                next_offset += envelope_size;
4178            }
4179
4180            let next_out_of_line = decoder.next_out_of_line();
4181            let handles_before = decoder.remaining_handles();
4182            if let Some((inlined, num_bytes, num_handles)) =
4183                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4184            {
4185                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4186                if inlined != (member_inline_size <= 4) {
4187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4188                }
4189                let inner_offset;
4190                let mut inner_depth = depth.clone();
4191                if inlined {
4192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4193                    inner_offset = next_offset;
4194                } else {
4195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4196                    inner_depth.increment()?;
4197                }
4198                let val_ref = self.name.get_or_insert_with(|| {
4199                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4200                });
4201                fidl::decode!(
4202                    fidl::encoding::BoundedString<1024>,
4203                    D,
4204                    val_ref,
4205                    decoder,
4206                    inner_offset,
4207                    inner_depth
4208                )?;
4209                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4210                {
4211                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4212                }
4213                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4214                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4215                }
4216            }
4217
4218            next_offset += envelope_size;
4219            _next_ordinal_to_read += 1;
4220            if next_offset >= end_offset {
4221                return Ok(());
4222            }
4223
4224            // Decode unknown envelopes for gaps in ordinals.
4225            while _next_ordinal_to_read < 3 {
4226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4227                _next_ordinal_to_read += 1;
4228                next_offset += envelope_size;
4229            }
4230
4231            let next_out_of_line = decoder.next_out_of_line();
4232            let handles_before = decoder.remaining_handles();
4233            if let Some((inlined, num_bytes, num_handles)) =
4234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4235            {
4236                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4237                if inlined != (member_inline_size <= 4) {
4238                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4239                }
4240                let inner_offset;
4241                let mut inner_depth = depth.clone();
4242                if inlined {
4243                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4244                    inner_offset = next_offset;
4245                } else {
4246                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4247                    inner_depth.increment()?;
4248                }
4249                let val_ref = self.description.get_or_insert_with(|| {
4250                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4251                });
4252                fidl::decode!(
4253                    fidl::encoding::BoundedString<1024>,
4254                    D,
4255                    val_ref,
4256                    decoder,
4257                    inner_offset,
4258                    inner_depth
4259                )?;
4260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4261                {
4262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4263                }
4264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4266                }
4267            }
4268
4269            next_offset += envelope_size;
4270            _next_ordinal_to_read += 1;
4271            if next_offset >= end_offset {
4272                return Ok(());
4273            }
4274
4275            // Decode unknown envelopes for gaps in ordinals.
4276            while _next_ordinal_to_read < 4 {
4277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4278                _next_ordinal_to_read += 1;
4279                next_offset += envelope_size;
4280            }
4281
4282            let next_out_of_line = decoder.next_out_of_line();
4283            let handles_before = decoder.remaining_handles();
4284            if let Some((inlined, num_bytes, num_handles)) =
4285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4286            {
4287                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4288                if inlined != (member_inline_size <= 4) {
4289                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4290                }
4291                let inner_offset;
4292                let mut inner_depth = depth.clone();
4293                if inlined {
4294                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4295                    inner_offset = next_offset;
4296                } else {
4297                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4298                    inner_depth.increment()?;
4299                }
4300                let val_ref = self.provider.get_or_insert_with(|| {
4301                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4302                });
4303                fidl::decode!(
4304                    fidl::encoding::BoundedString<1024>,
4305                    D,
4306                    val_ref,
4307                    decoder,
4308                    inner_offset,
4309                    inner_depth
4310                )?;
4311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4312                {
4313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4314                }
4315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4317                }
4318            }
4319
4320            next_offset += envelope_size;
4321
4322            // Decode the remaining unknown envelopes.
4323            while next_offset < end_offset {
4324                _next_ordinal_to_read += 1;
4325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4326                next_offset += envelope_size;
4327            }
4328
4329            Ok(())
4330        }
4331    }
4332
4333    impl L2capParameters {
4334        #[inline(always)]
4335        fn max_ordinal_present(&self) -> u64 {
4336            if let Some(_) = self.parameters {
4337                return 2;
4338            }
4339            if let Some(_) = self.psm {
4340                return 1;
4341            }
4342            0
4343        }
4344    }
4345
4346    impl fidl::encoding::ValueTypeMarker for L2capParameters {
4347        type Borrowed<'a> = &'a Self;
4348        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4349            value
4350        }
4351    }
4352
4353    unsafe impl fidl::encoding::TypeMarker for L2capParameters {
4354        type Owned = Self;
4355
4356        #[inline(always)]
4357        fn inline_align(_context: fidl::encoding::Context) -> usize {
4358            8
4359        }
4360
4361        #[inline(always)]
4362        fn inline_size(_context: fidl::encoding::Context) -> usize {
4363            16
4364        }
4365    }
4366
4367    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<L2capParameters, D>
4368        for &L2capParameters
4369    {
4370        unsafe fn encode(
4371            self,
4372            encoder: &mut fidl::encoding::Encoder<'_, D>,
4373            offset: usize,
4374            mut depth: fidl::encoding::Depth,
4375        ) -> fidl::Result<()> {
4376            encoder.debug_check_bounds::<L2capParameters>(offset);
4377            // Vector header
4378            let max_ordinal: u64 = self.max_ordinal_present();
4379            encoder.write_num(max_ordinal, offset);
4380            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4381            // Calling encoder.out_of_line_offset(0) is not allowed.
4382            if max_ordinal == 0 {
4383                return Ok(());
4384            }
4385            depth.increment()?;
4386            let envelope_size = 8;
4387            let bytes_len = max_ordinal as usize * envelope_size;
4388            #[allow(unused_variables)]
4389            let offset = encoder.out_of_line_offset(bytes_len);
4390            let mut _prev_end_offset: usize = 0;
4391            if 1 > max_ordinal {
4392                return Ok(());
4393            }
4394
4395            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4396            // are envelope_size bytes.
4397            let cur_offset: usize = (1 - 1) * envelope_size;
4398
4399            // Zero reserved fields.
4400            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4401
4402            // Safety:
4403            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4404            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4405            //   envelope_size bytes, there is always sufficient room.
4406            fidl::encoding::encode_in_envelope_optional::<u16, D>(
4407                self.psm.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
4408                encoder,
4409                offset + cur_offset,
4410                depth,
4411            )?;
4412
4413            _prev_end_offset = cur_offset + envelope_size;
4414            if 2 > max_ordinal {
4415                return Ok(());
4416            }
4417
4418            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4419            // are envelope_size bytes.
4420            let cur_offset: usize = (2 - 1) * envelope_size;
4421
4422            // Zero reserved fields.
4423            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4424
4425            // Safety:
4426            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4427            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4428            //   envelope_size bytes, there is always sufficient room.
4429            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth::ChannelParameters, D>(
4430            self.parameters.as_ref().map(<fidl_fuchsia_bluetooth::ChannelParameters as fidl::encoding::ValueTypeMarker>::borrow),
4431            encoder, offset + cur_offset, depth
4432        )?;
4433
4434            _prev_end_offset = cur_offset + envelope_size;
4435
4436            Ok(())
4437        }
4438    }
4439
4440    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for L2capParameters {
4441        #[inline(always)]
4442        fn new_empty() -> Self {
4443            Self::default()
4444        }
4445
4446        unsafe fn decode(
4447            &mut self,
4448            decoder: &mut fidl::encoding::Decoder<'_, D>,
4449            offset: usize,
4450            mut depth: fidl::encoding::Depth,
4451        ) -> fidl::Result<()> {
4452            decoder.debug_check_bounds::<Self>(offset);
4453            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4454                None => return Err(fidl::Error::NotNullable),
4455                Some(len) => len,
4456            };
4457            // Calling decoder.out_of_line_offset(0) is not allowed.
4458            if len == 0 {
4459                return Ok(());
4460            };
4461            depth.increment()?;
4462            let envelope_size = 8;
4463            let bytes_len = len * envelope_size;
4464            let offset = decoder.out_of_line_offset(bytes_len)?;
4465            // Decode the envelope for each type.
4466            let mut _next_ordinal_to_read = 0;
4467            let mut next_offset = offset;
4468            let end_offset = offset + bytes_len;
4469            _next_ordinal_to_read += 1;
4470            if next_offset >= end_offset {
4471                return Ok(());
4472            }
4473
4474            // Decode unknown envelopes for gaps in ordinals.
4475            while _next_ordinal_to_read < 1 {
4476                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4477                _next_ordinal_to_read += 1;
4478                next_offset += envelope_size;
4479            }
4480
4481            let next_out_of_line = decoder.next_out_of_line();
4482            let handles_before = decoder.remaining_handles();
4483            if let Some((inlined, num_bytes, num_handles)) =
4484                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4485            {
4486                let member_inline_size =
4487                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4488                if inlined != (member_inline_size <= 4) {
4489                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4490                }
4491                let inner_offset;
4492                let mut inner_depth = depth.clone();
4493                if inlined {
4494                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4495                    inner_offset = next_offset;
4496                } else {
4497                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4498                    inner_depth.increment()?;
4499                }
4500                let val_ref = self.psm.get_or_insert_with(|| fidl::new_empty!(u16, D));
4501                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
4502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4503                {
4504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4505                }
4506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4508                }
4509            }
4510
4511            next_offset += envelope_size;
4512            _next_ordinal_to_read += 1;
4513            if next_offset >= end_offset {
4514                return Ok(());
4515            }
4516
4517            // Decode unknown envelopes for gaps in ordinals.
4518            while _next_ordinal_to_read < 2 {
4519                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4520                _next_ordinal_to_read += 1;
4521                next_offset += envelope_size;
4522            }
4523
4524            let next_out_of_line = decoder.next_out_of_line();
4525            let handles_before = decoder.remaining_handles();
4526            if let Some((inlined, num_bytes, num_handles)) =
4527                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4528            {
4529                let member_inline_size = <fidl_fuchsia_bluetooth::ChannelParameters as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4530                if inlined != (member_inline_size <= 4) {
4531                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4532                }
4533                let inner_offset;
4534                let mut inner_depth = depth.clone();
4535                if inlined {
4536                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4537                    inner_offset = next_offset;
4538                } else {
4539                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4540                    inner_depth.increment()?;
4541                }
4542                let val_ref = self.parameters.get_or_insert_with(|| {
4543                    fidl::new_empty!(fidl_fuchsia_bluetooth::ChannelParameters, D)
4544                });
4545                fidl::decode!(
4546                    fidl_fuchsia_bluetooth::ChannelParameters,
4547                    D,
4548                    val_ref,
4549                    decoder,
4550                    inner_offset,
4551                    inner_depth
4552                )?;
4553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4554                {
4555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4556                }
4557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4559                }
4560            }
4561
4562            next_offset += envelope_size;
4563
4564            // Decode the remaining unknown envelopes.
4565            while next_offset < end_offset {
4566                _next_ordinal_to_read += 1;
4567                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4568                next_offset += envelope_size;
4569            }
4570
4571            Ok(())
4572        }
4573    }
4574
4575    impl ProfileDescriptor {
4576        #[inline(always)]
4577        fn max_ordinal_present(&self) -> u64 {
4578            if let Some(_) = self.minor_version {
4579                return 3;
4580            }
4581            if let Some(_) = self.major_version {
4582                return 2;
4583            }
4584            if let Some(_) = self.profile_id {
4585                return 1;
4586            }
4587            0
4588        }
4589    }
4590
4591    impl fidl::encoding::ValueTypeMarker for ProfileDescriptor {
4592        type Borrowed<'a> = &'a Self;
4593        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4594            value
4595        }
4596    }
4597
4598    unsafe impl fidl::encoding::TypeMarker for ProfileDescriptor {
4599        type Owned = Self;
4600
4601        #[inline(always)]
4602        fn inline_align(_context: fidl::encoding::Context) -> usize {
4603            8
4604        }
4605
4606        #[inline(always)]
4607        fn inline_size(_context: fidl::encoding::Context) -> usize {
4608            16
4609        }
4610    }
4611
4612    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProfileDescriptor, D>
4613        for &ProfileDescriptor
4614    {
4615        unsafe fn encode(
4616            self,
4617            encoder: &mut fidl::encoding::Encoder<'_, D>,
4618            offset: usize,
4619            mut depth: fidl::encoding::Depth,
4620        ) -> fidl::Result<()> {
4621            encoder.debug_check_bounds::<ProfileDescriptor>(offset);
4622            // Vector header
4623            let max_ordinal: u64 = self.max_ordinal_present();
4624            encoder.write_num(max_ordinal, offset);
4625            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4626            // Calling encoder.out_of_line_offset(0) is not allowed.
4627            if max_ordinal == 0 {
4628                return Ok(());
4629            }
4630            depth.increment()?;
4631            let envelope_size = 8;
4632            let bytes_len = max_ordinal as usize * envelope_size;
4633            #[allow(unused_variables)]
4634            let offset = encoder.out_of_line_offset(bytes_len);
4635            let mut _prev_end_offset: usize = 0;
4636            if 1 > max_ordinal {
4637                return Ok(());
4638            }
4639
4640            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4641            // are envelope_size bytes.
4642            let cur_offset: usize = (1 - 1) * envelope_size;
4643
4644            // Zero reserved fields.
4645            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4646
4647            // Safety:
4648            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4649            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4650            //   envelope_size bytes, there is always sufficient room.
4651            fidl::encoding::encode_in_envelope_optional::<ServiceClassProfileIdentifier, D>(
4652                self.profile_id.as_ref().map(
4653                    <ServiceClassProfileIdentifier as fidl::encoding::ValueTypeMarker>::borrow,
4654                ),
4655                encoder,
4656                offset + cur_offset,
4657                depth,
4658            )?;
4659
4660            _prev_end_offset = cur_offset + envelope_size;
4661            if 2 > max_ordinal {
4662                return Ok(());
4663            }
4664
4665            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4666            // are envelope_size bytes.
4667            let cur_offset: usize = (2 - 1) * envelope_size;
4668
4669            // Zero reserved fields.
4670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4671
4672            // Safety:
4673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4675            //   envelope_size bytes, there is always sufficient room.
4676            fidl::encoding::encode_in_envelope_optional::<u8, D>(
4677                self.major_version.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
4678                encoder,
4679                offset + cur_offset,
4680                depth,
4681            )?;
4682
4683            _prev_end_offset = cur_offset + envelope_size;
4684            if 3 > max_ordinal {
4685                return Ok(());
4686            }
4687
4688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4689            // are envelope_size bytes.
4690            let cur_offset: usize = (3 - 1) * envelope_size;
4691
4692            // Zero reserved fields.
4693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4694
4695            // Safety:
4696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4698            //   envelope_size bytes, there is always sufficient room.
4699            fidl::encoding::encode_in_envelope_optional::<u8, D>(
4700                self.minor_version.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
4701                encoder,
4702                offset + cur_offset,
4703                depth,
4704            )?;
4705
4706            _prev_end_offset = cur_offset + envelope_size;
4707
4708            Ok(())
4709        }
4710    }
4711
4712    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProfileDescriptor {
4713        #[inline(always)]
4714        fn new_empty() -> Self {
4715            Self::default()
4716        }
4717
4718        unsafe fn decode(
4719            &mut self,
4720            decoder: &mut fidl::encoding::Decoder<'_, D>,
4721            offset: usize,
4722            mut depth: fidl::encoding::Depth,
4723        ) -> fidl::Result<()> {
4724            decoder.debug_check_bounds::<Self>(offset);
4725            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4726                None => return Err(fidl::Error::NotNullable),
4727                Some(len) => len,
4728            };
4729            // Calling decoder.out_of_line_offset(0) is not allowed.
4730            if len == 0 {
4731                return Ok(());
4732            };
4733            depth.increment()?;
4734            let envelope_size = 8;
4735            let bytes_len = len * envelope_size;
4736            let offset = decoder.out_of_line_offset(bytes_len)?;
4737            // Decode the envelope for each type.
4738            let mut _next_ordinal_to_read = 0;
4739            let mut next_offset = offset;
4740            let end_offset = offset + bytes_len;
4741            _next_ordinal_to_read += 1;
4742            if next_offset >= end_offset {
4743                return Ok(());
4744            }
4745
4746            // Decode unknown envelopes for gaps in ordinals.
4747            while _next_ordinal_to_read < 1 {
4748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4749                _next_ordinal_to_read += 1;
4750                next_offset += envelope_size;
4751            }
4752
4753            let next_out_of_line = decoder.next_out_of_line();
4754            let handles_before = decoder.remaining_handles();
4755            if let Some((inlined, num_bytes, num_handles)) =
4756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4757            {
4758                let member_inline_size =
4759                    <ServiceClassProfileIdentifier as fidl::encoding::TypeMarker>::inline_size(
4760                        decoder.context,
4761                    );
4762                if inlined != (member_inline_size <= 4) {
4763                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4764                }
4765                let inner_offset;
4766                let mut inner_depth = depth.clone();
4767                if inlined {
4768                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4769                    inner_offset = next_offset;
4770                } else {
4771                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4772                    inner_depth.increment()?;
4773                }
4774                let val_ref = self
4775                    .profile_id
4776                    .get_or_insert_with(|| fidl::new_empty!(ServiceClassProfileIdentifier, D));
4777                fidl::decode!(
4778                    ServiceClassProfileIdentifier,
4779                    D,
4780                    val_ref,
4781                    decoder,
4782                    inner_offset,
4783                    inner_depth
4784                )?;
4785                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4786                {
4787                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4788                }
4789                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4790                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4791                }
4792            }
4793
4794            next_offset += envelope_size;
4795            _next_ordinal_to_read += 1;
4796            if next_offset >= end_offset {
4797                return Ok(());
4798            }
4799
4800            // Decode unknown envelopes for gaps in ordinals.
4801            while _next_ordinal_to_read < 2 {
4802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4803                _next_ordinal_to_read += 1;
4804                next_offset += envelope_size;
4805            }
4806
4807            let next_out_of_line = decoder.next_out_of_line();
4808            let handles_before = decoder.remaining_handles();
4809            if let Some((inlined, num_bytes, num_handles)) =
4810                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4811            {
4812                let member_inline_size =
4813                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4814                if inlined != (member_inline_size <= 4) {
4815                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4816                }
4817                let inner_offset;
4818                let mut inner_depth = depth.clone();
4819                if inlined {
4820                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4821                    inner_offset = next_offset;
4822                } else {
4823                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4824                    inner_depth.increment()?;
4825                }
4826                let val_ref = self.major_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
4827                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4828                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4829                {
4830                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4831                }
4832                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4833                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4834                }
4835            }
4836
4837            next_offset += envelope_size;
4838            _next_ordinal_to_read += 1;
4839            if next_offset >= end_offset {
4840                return Ok(());
4841            }
4842
4843            // Decode unknown envelopes for gaps in ordinals.
4844            while _next_ordinal_to_read < 3 {
4845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4846                _next_ordinal_to_read += 1;
4847                next_offset += envelope_size;
4848            }
4849
4850            let next_out_of_line = decoder.next_out_of_line();
4851            let handles_before = decoder.remaining_handles();
4852            if let Some((inlined, num_bytes, num_handles)) =
4853                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4854            {
4855                let member_inline_size =
4856                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4857                if inlined != (member_inline_size <= 4) {
4858                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4859                }
4860                let inner_offset;
4861                let mut inner_depth = depth.clone();
4862                if inlined {
4863                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4864                    inner_offset = next_offset;
4865                } else {
4866                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4867                    inner_depth.increment()?;
4868                }
4869                let val_ref = self.minor_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
4870                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4871                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4872                {
4873                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4874                }
4875                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4876                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4877                }
4878            }
4879
4880            next_offset += envelope_size;
4881
4882            // Decode the remaining unknown envelopes.
4883            while next_offset < end_offset {
4884                _next_ordinal_to_read += 1;
4885                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4886                next_offset += envelope_size;
4887            }
4888
4889            Ok(())
4890        }
4891    }
4892
4893    impl ProfileAdvertiseResponse {
4894        #[inline(always)]
4895        fn max_ordinal_present(&self) -> u64 {
4896            if let Some(_) = self.services {
4897                return 1;
4898            }
4899            0
4900        }
4901    }
4902
4903    impl fidl::encoding::ValueTypeMarker for ProfileAdvertiseResponse {
4904        type Borrowed<'a> = &'a Self;
4905        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4906            value
4907        }
4908    }
4909
4910    unsafe impl fidl::encoding::TypeMarker for ProfileAdvertiseResponse {
4911        type Owned = Self;
4912
4913        #[inline(always)]
4914        fn inline_align(_context: fidl::encoding::Context) -> usize {
4915            8
4916        }
4917
4918        #[inline(always)]
4919        fn inline_size(_context: fidl::encoding::Context) -> usize {
4920            16
4921        }
4922    }
4923
4924    unsafe impl<D: fidl::encoding::ResourceDialect>
4925        fidl::encoding::Encode<ProfileAdvertiseResponse, D> for &ProfileAdvertiseResponse
4926    {
4927        unsafe fn encode(
4928            self,
4929            encoder: &mut fidl::encoding::Encoder<'_, D>,
4930            offset: usize,
4931            mut depth: fidl::encoding::Depth,
4932        ) -> fidl::Result<()> {
4933            encoder.debug_check_bounds::<ProfileAdvertiseResponse>(offset);
4934            // Vector header
4935            let max_ordinal: u64 = self.max_ordinal_present();
4936            encoder.write_num(max_ordinal, offset);
4937            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4938            // Calling encoder.out_of_line_offset(0) is not allowed.
4939            if max_ordinal == 0 {
4940                return Ok(());
4941            }
4942            depth.increment()?;
4943            let envelope_size = 8;
4944            let bytes_len = max_ordinal as usize * envelope_size;
4945            #[allow(unused_variables)]
4946            let offset = encoder.out_of_line_offset(bytes_len);
4947            let mut _prev_end_offset: usize = 0;
4948            if 1 > max_ordinal {
4949                return Ok(());
4950            }
4951
4952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4953            // are envelope_size bytes.
4954            let cur_offset: usize = (1 - 1) * envelope_size;
4955
4956            // Zero reserved fields.
4957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4958
4959            // Safety:
4960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4962            //   envelope_size bytes, there is always sufficient room.
4963            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ServiceDefinition, 32>, D>(
4964            self.services.as_ref().map(<fidl::encoding::Vector<ServiceDefinition, 32> as fidl::encoding::ValueTypeMarker>::borrow),
4965            encoder, offset + cur_offset, depth
4966        )?;
4967
4968            _prev_end_offset = cur_offset + envelope_size;
4969
4970            Ok(())
4971        }
4972    }
4973
4974    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4975        for ProfileAdvertiseResponse
4976    {
4977        #[inline(always)]
4978        fn new_empty() -> Self {
4979            Self::default()
4980        }
4981
4982        unsafe fn decode(
4983            &mut self,
4984            decoder: &mut fidl::encoding::Decoder<'_, D>,
4985            offset: usize,
4986            mut depth: fidl::encoding::Depth,
4987        ) -> fidl::Result<()> {
4988            decoder.debug_check_bounds::<Self>(offset);
4989            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4990                None => return Err(fidl::Error::NotNullable),
4991                Some(len) => len,
4992            };
4993            // Calling decoder.out_of_line_offset(0) is not allowed.
4994            if len == 0 {
4995                return Ok(());
4996            };
4997            depth.increment()?;
4998            let envelope_size = 8;
4999            let bytes_len = len * envelope_size;
5000            let offset = decoder.out_of_line_offset(bytes_len)?;
5001            // Decode the envelope for each type.
5002            let mut _next_ordinal_to_read = 0;
5003            let mut next_offset = offset;
5004            let end_offset = offset + bytes_len;
5005            _next_ordinal_to_read += 1;
5006            if next_offset >= end_offset {
5007                return Ok(());
5008            }
5009
5010            // Decode unknown envelopes for gaps in ordinals.
5011            while _next_ordinal_to_read < 1 {
5012                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5013                _next_ordinal_to_read += 1;
5014                next_offset += envelope_size;
5015            }
5016
5017            let next_out_of_line = decoder.next_out_of_line();
5018            let handles_before = decoder.remaining_handles();
5019            if let Some((inlined, num_bytes, num_handles)) =
5020                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5021            {
5022                let member_inline_size = <fidl::encoding::Vector<ServiceDefinition, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5023                if inlined != (member_inline_size <= 4) {
5024                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5025                }
5026                let inner_offset;
5027                let mut inner_depth = depth.clone();
5028                if inlined {
5029                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5030                    inner_offset = next_offset;
5031                } else {
5032                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5033                    inner_depth.increment()?;
5034                }
5035                let val_ref = self.services.get_or_insert_with(
5036                    || fidl::new_empty!(fidl::encoding::Vector<ServiceDefinition, 32>, D),
5037                );
5038                fidl::decode!(fidl::encoding::Vector<ServiceDefinition, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
5039                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5040                {
5041                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5042                }
5043                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5044                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5045                }
5046            }
5047
5048            next_offset += envelope_size;
5049
5050            // Decode the remaining unknown envelopes.
5051            while next_offset < end_offset {
5052                _next_ordinal_to_read += 1;
5053                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5054                next_offset += envelope_size;
5055            }
5056
5057            Ok(())
5058        }
5059    }
5060
5061    impl ProtocolDescriptor {
5062        #[inline(always)]
5063        fn max_ordinal_present(&self) -> u64 {
5064            if let Some(_) = self.params {
5065                return 2;
5066            }
5067            if let Some(_) = self.protocol {
5068                return 1;
5069            }
5070            0
5071        }
5072    }
5073
5074    impl fidl::encoding::ValueTypeMarker for ProtocolDescriptor {
5075        type Borrowed<'a> = &'a Self;
5076        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5077            value
5078        }
5079    }
5080
5081    unsafe impl fidl::encoding::TypeMarker for ProtocolDescriptor {
5082        type Owned = Self;
5083
5084        #[inline(always)]
5085        fn inline_align(_context: fidl::encoding::Context) -> usize {
5086            8
5087        }
5088
5089        #[inline(always)]
5090        fn inline_size(_context: fidl::encoding::Context) -> usize {
5091            16
5092        }
5093    }
5094
5095    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProtocolDescriptor, D>
5096        for &ProtocolDescriptor
5097    {
5098        unsafe fn encode(
5099            self,
5100            encoder: &mut fidl::encoding::Encoder<'_, D>,
5101            offset: usize,
5102            mut depth: fidl::encoding::Depth,
5103        ) -> fidl::Result<()> {
5104            encoder.debug_check_bounds::<ProtocolDescriptor>(offset);
5105            // Vector header
5106            let max_ordinal: u64 = self.max_ordinal_present();
5107            encoder.write_num(max_ordinal, offset);
5108            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5109            // Calling encoder.out_of_line_offset(0) is not allowed.
5110            if max_ordinal == 0 {
5111                return Ok(());
5112            }
5113            depth.increment()?;
5114            let envelope_size = 8;
5115            let bytes_len = max_ordinal as usize * envelope_size;
5116            #[allow(unused_variables)]
5117            let offset = encoder.out_of_line_offset(bytes_len);
5118            let mut _prev_end_offset: usize = 0;
5119            if 1 > max_ordinal {
5120                return Ok(());
5121            }
5122
5123            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5124            // are envelope_size bytes.
5125            let cur_offset: usize = (1 - 1) * envelope_size;
5126
5127            // Zero reserved fields.
5128            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5129
5130            // Safety:
5131            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5132            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5133            //   envelope_size bytes, there is always sufficient room.
5134            fidl::encoding::encode_in_envelope_optional::<ProtocolIdentifier, D>(
5135                self.protocol
5136                    .as_ref()
5137                    .map(<ProtocolIdentifier as fidl::encoding::ValueTypeMarker>::borrow),
5138                encoder,
5139                offset + cur_offset,
5140                depth,
5141            )?;
5142
5143            _prev_end_offset = cur_offset + envelope_size;
5144            if 2 > max_ordinal {
5145                return Ok(());
5146            }
5147
5148            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5149            // are envelope_size bytes.
5150            let cur_offset: usize = (2 - 1) * envelope_size;
5151
5152            // Zero reserved fields.
5153            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5154
5155            // Safety:
5156            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5157            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5158            //   envelope_size bytes, there is always sufficient room.
5159            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<DataElement, 255>, D>(
5160            self.params.as_ref().map(<fidl::encoding::Vector<DataElement, 255> as fidl::encoding::ValueTypeMarker>::borrow),
5161            encoder, offset + cur_offset, depth
5162        )?;
5163
5164            _prev_end_offset = cur_offset + envelope_size;
5165
5166            Ok(())
5167        }
5168    }
5169
5170    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProtocolDescriptor {
5171        #[inline(always)]
5172        fn new_empty() -> Self {
5173            Self::default()
5174        }
5175
5176        unsafe fn decode(
5177            &mut self,
5178            decoder: &mut fidl::encoding::Decoder<'_, D>,
5179            offset: usize,
5180            mut depth: fidl::encoding::Depth,
5181        ) -> fidl::Result<()> {
5182            decoder.debug_check_bounds::<Self>(offset);
5183            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5184                None => return Err(fidl::Error::NotNullable),
5185                Some(len) => len,
5186            };
5187            // Calling decoder.out_of_line_offset(0) is not allowed.
5188            if len == 0 {
5189                return Ok(());
5190            };
5191            depth.increment()?;
5192            let envelope_size = 8;
5193            let bytes_len = len * envelope_size;
5194            let offset = decoder.out_of_line_offset(bytes_len)?;
5195            // Decode the envelope for each type.
5196            let mut _next_ordinal_to_read = 0;
5197            let mut next_offset = offset;
5198            let end_offset = offset + bytes_len;
5199            _next_ordinal_to_read += 1;
5200            if next_offset >= end_offset {
5201                return Ok(());
5202            }
5203
5204            // Decode unknown envelopes for gaps in ordinals.
5205            while _next_ordinal_to_read < 1 {
5206                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5207                _next_ordinal_to_read += 1;
5208                next_offset += envelope_size;
5209            }
5210
5211            let next_out_of_line = decoder.next_out_of_line();
5212            let handles_before = decoder.remaining_handles();
5213            if let Some((inlined, num_bytes, num_handles)) =
5214                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5215            {
5216                let member_inline_size =
5217                    <ProtocolIdentifier as fidl::encoding::TypeMarker>::inline_size(
5218                        decoder.context,
5219                    );
5220                if inlined != (member_inline_size <= 4) {
5221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5222                }
5223                let inner_offset;
5224                let mut inner_depth = depth.clone();
5225                if inlined {
5226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5227                    inner_offset = next_offset;
5228                } else {
5229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5230                    inner_depth.increment()?;
5231                }
5232                let val_ref =
5233                    self.protocol.get_or_insert_with(|| fidl::new_empty!(ProtocolIdentifier, D));
5234                fidl::decode!(ProtocolIdentifier, D, val_ref, decoder, inner_offset, inner_depth)?;
5235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5236                {
5237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5238                }
5239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5241                }
5242            }
5243
5244            next_offset += envelope_size;
5245            _next_ordinal_to_read += 1;
5246            if next_offset >= end_offset {
5247                return Ok(());
5248            }
5249
5250            // Decode unknown envelopes for gaps in ordinals.
5251            while _next_ordinal_to_read < 2 {
5252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5253                _next_ordinal_to_read += 1;
5254                next_offset += envelope_size;
5255            }
5256
5257            let next_out_of_line = decoder.next_out_of_line();
5258            let handles_before = decoder.remaining_handles();
5259            if let Some((inlined, num_bytes, num_handles)) =
5260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5261            {
5262                let member_inline_size = <fidl::encoding::Vector<DataElement, 255> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5263                if inlined != (member_inline_size <= 4) {
5264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5265                }
5266                let inner_offset;
5267                let mut inner_depth = depth.clone();
5268                if inlined {
5269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5270                    inner_offset = next_offset;
5271                } else {
5272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5273                    inner_depth.increment()?;
5274                }
5275                let val_ref = self.params.get_or_insert_with(
5276                    || fidl::new_empty!(fidl::encoding::Vector<DataElement, 255>, D),
5277                );
5278                fidl::decode!(fidl::encoding::Vector<DataElement, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
5279                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5280                {
5281                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5282                }
5283                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5284                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5285                }
5286            }
5287
5288            next_offset += envelope_size;
5289
5290            // Decode the remaining unknown envelopes.
5291            while next_offset < end_offset {
5292                _next_ordinal_to_read += 1;
5293                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5294                next_offset += envelope_size;
5295            }
5296
5297            Ok(())
5298        }
5299    }
5300
5301    impl RfcommParameters {
5302        #[inline(always)]
5303        fn max_ordinal_present(&self) -> u64 {
5304            if let Some(_) = self.channel {
5305                return 1;
5306            }
5307            0
5308        }
5309    }
5310
5311    impl fidl::encoding::ValueTypeMarker for RfcommParameters {
5312        type Borrowed<'a> = &'a Self;
5313        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5314            value
5315        }
5316    }
5317
5318    unsafe impl fidl::encoding::TypeMarker for RfcommParameters {
5319        type Owned = Self;
5320
5321        #[inline(always)]
5322        fn inline_align(_context: fidl::encoding::Context) -> usize {
5323            8
5324        }
5325
5326        #[inline(always)]
5327        fn inline_size(_context: fidl::encoding::Context) -> usize {
5328            16
5329        }
5330    }
5331
5332    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RfcommParameters, D>
5333        for &RfcommParameters
5334    {
5335        unsafe fn encode(
5336            self,
5337            encoder: &mut fidl::encoding::Encoder<'_, D>,
5338            offset: usize,
5339            mut depth: fidl::encoding::Depth,
5340        ) -> fidl::Result<()> {
5341            encoder.debug_check_bounds::<RfcommParameters>(offset);
5342            // Vector header
5343            let max_ordinal: u64 = self.max_ordinal_present();
5344            encoder.write_num(max_ordinal, offset);
5345            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5346            // Calling encoder.out_of_line_offset(0) is not allowed.
5347            if max_ordinal == 0 {
5348                return Ok(());
5349            }
5350            depth.increment()?;
5351            let envelope_size = 8;
5352            let bytes_len = max_ordinal as usize * envelope_size;
5353            #[allow(unused_variables)]
5354            let offset = encoder.out_of_line_offset(bytes_len);
5355            let mut _prev_end_offset: usize = 0;
5356            if 1 > max_ordinal {
5357                return Ok(());
5358            }
5359
5360            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5361            // are envelope_size bytes.
5362            let cur_offset: usize = (1 - 1) * envelope_size;
5363
5364            // Zero reserved fields.
5365            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5366
5367            // Safety:
5368            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5369            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5370            //   envelope_size bytes, there is always sufficient room.
5371            fidl::encoding::encode_in_envelope_optional::<u8, D>(
5372                self.channel.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
5373                encoder,
5374                offset + cur_offset,
5375                depth,
5376            )?;
5377
5378            _prev_end_offset = cur_offset + envelope_size;
5379
5380            Ok(())
5381        }
5382    }
5383
5384    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RfcommParameters {
5385        #[inline(always)]
5386        fn new_empty() -> Self {
5387            Self::default()
5388        }
5389
5390        unsafe fn decode(
5391            &mut self,
5392            decoder: &mut fidl::encoding::Decoder<'_, D>,
5393            offset: usize,
5394            mut depth: fidl::encoding::Depth,
5395        ) -> fidl::Result<()> {
5396            decoder.debug_check_bounds::<Self>(offset);
5397            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5398                None => return Err(fidl::Error::NotNullable),
5399                Some(len) => len,
5400            };
5401            // Calling decoder.out_of_line_offset(0) is not allowed.
5402            if len == 0 {
5403                return Ok(());
5404            };
5405            depth.increment()?;
5406            let envelope_size = 8;
5407            let bytes_len = len * envelope_size;
5408            let offset = decoder.out_of_line_offset(bytes_len)?;
5409            // Decode the envelope for each type.
5410            let mut _next_ordinal_to_read = 0;
5411            let mut next_offset = offset;
5412            let end_offset = offset + bytes_len;
5413            _next_ordinal_to_read += 1;
5414            if next_offset >= end_offset {
5415                return Ok(());
5416            }
5417
5418            // Decode unknown envelopes for gaps in ordinals.
5419            while _next_ordinal_to_read < 1 {
5420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5421                _next_ordinal_to_read += 1;
5422                next_offset += envelope_size;
5423            }
5424
5425            let next_out_of_line = decoder.next_out_of_line();
5426            let handles_before = decoder.remaining_handles();
5427            if let Some((inlined, num_bytes, num_handles)) =
5428                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5429            {
5430                let member_inline_size =
5431                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5432                if inlined != (member_inline_size <= 4) {
5433                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5434                }
5435                let inner_offset;
5436                let mut inner_depth = depth.clone();
5437                if inlined {
5438                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5439                    inner_offset = next_offset;
5440                } else {
5441                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5442                    inner_depth.increment()?;
5443                }
5444                let val_ref = self.channel.get_or_insert_with(|| fidl::new_empty!(u8, D));
5445                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
5446                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5447                {
5448                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5449                }
5450                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5451                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5452                }
5453            }
5454
5455            next_offset += envelope_size;
5456
5457            // Decode the remaining unknown envelopes.
5458            while next_offset < end_offset {
5459                _next_ordinal_to_read += 1;
5460                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5461                next_offset += envelope_size;
5462            }
5463
5464            Ok(())
5465        }
5466    }
5467
5468    impl ScoConnectionParameters {
5469        #[inline(always)]
5470        fn max_ordinal_present(&self) -> u64 {
5471            if let Some(_) = self.max_tx_data_size {
5472                return 10;
5473            }
5474            if let Some(_) = self.path {
5475                return 9;
5476            }
5477            if let Some(_) = self.io_pcm_sample_payload_msb_position {
5478                return 8;
5479            }
5480            if let Some(_) = self.io_pcm_data_format {
5481                return 7;
5482            }
5483            if let Some(_) = self.io_frame_size {
5484                return 6;
5485            }
5486            if let Some(_) = self.io_coding_format {
5487                return 5;
5488            }
5489            if let Some(_) = self.io_bandwidth {
5490                return 4;
5491            }
5492            if let Some(_) = self.air_frame_size {
5493                return 3;
5494            }
5495            if let Some(_) = self.air_coding_format {
5496                return 2;
5497            }
5498            if let Some(_) = self.parameter_set {
5499                return 1;
5500            }
5501            0
5502        }
5503    }
5504
5505    impl fidl::encoding::ValueTypeMarker for ScoConnectionParameters {
5506        type Borrowed<'a> = &'a Self;
5507        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5508            value
5509        }
5510    }
5511
5512    unsafe impl fidl::encoding::TypeMarker for ScoConnectionParameters {
5513        type Owned = Self;
5514
5515        #[inline(always)]
5516        fn inline_align(_context: fidl::encoding::Context) -> usize {
5517            8
5518        }
5519
5520        #[inline(always)]
5521        fn inline_size(_context: fidl::encoding::Context) -> usize {
5522            16
5523        }
5524    }
5525
5526    unsafe impl<D: fidl::encoding::ResourceDialect>
5527        fidl::encoding::Encode<ScoConnectionParameters, D> for &ScoConnectionParameters
5528    {
5529        unsafe fn encode(
5530            self,
5531            encoder: &mut fidl::encoding::Encoder<'_, D>,
5532            offset: usize,
5533            mut depth: fidl::encoding::Depth,
5534        ) -> fidl::Result<()> {
5535            encoder.debug_check_bounds::<ScoConnectionParameters>(offset);
5536            // Vector header
5537            let max_ordinal: u64 = self.max_ordinal_present();
5538            encoder.write_num(max_ordinal, offset);
5539            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5540            // Calling encoder.out_of_line_offset(0) is not allowed.
5541            if max_ordinal == 0 {
5542                return Ok(());
5543            }
5544            depth.increment()?;
5545            let envelope_size = 8;
5546            let bytes_len = max_ordinal as usize * envelope_size;
5547            #[allow(unused_variables)]
5548            let offset = encoder.out_of_line_offset(bytes_len);
5549            let mut _prev_end_offset: usize = 0;
5550            if 1 > max_ordinal {
5551                return Ok(());
5552            }
5553
5554            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5555            // are envelope_size bytes.
5556            let cur_offset: usize = (1 - 1) * envelope_size;
5557
5558            // Zero reserved fields.
5559            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5560
5561            // Safety:
5562            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5563            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5564            //   envelope_size bytes, there is always sufficient room.
5565            fidl::encoding::encode_in_envelope_optional::<HfpParameterSet, D>(
5566                self.parameter_set
5567                    .as_ref()
5568                    .map(<HfpParameterSet as fidl::encoding::ValueTypeMarker>::borrow),
5569                encoder,
5570                offset + cur_offset,
5571                depth,
5572            )?;
5573
5574            _prev_end_offset = cur_offset + envelope_size;
5575            if 2 > max_ordinal {
5576                return Ok(());
5577            }
5578
5579            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5580            // are envelope_size bytes.
5581            let cur_offset: usize = (2 - 1) * envelope_size;
5582
5583            // Zero reserved fields.
5584            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5585
5586            // Safety:
5587            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5588            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5589            //   envelope_size bytes, there is always sufficient room.
5590            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth::AssignedCodingFormat, D>(
5591            self.air_coding_format.as_ref().map(<fidl_fuchsia_bluetooth::AssignedCodingFormat as fidl::encoding::ValueTypeMarker>::borrow),
5592            encoder, offset + cur_offset, depth
5593        )?;
5594
5595            _prev_end_offset = cur_offset + envelope_size;
5596            if 3 > max_ordinal {
5597                return Ok(());
5598            }
5599
5600            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5601            // are envelope_size bytes.
5602            let cur_offset: usize = (3 - 1) * envelope_size;
5603
5604            // Zero reserved fields.
5605            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5606
5607            // Safety:
5608            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5609            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5610            //   envelope_size bytes, there is always sufficient room.
5611            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5612                self.air_frame_size.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5613                encoder,
5614                offset + cur_offset,
5615                depth,
5616            )?;
5617
5618            _prev_end_offset = cur_offset + envelope_size;
5619            if 4 > max_ordinal {
5620                return Ok(());
5621            }
5622
5623            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5624            // are envelope_size bytes.
5625            let cur_offset: usize = (4 - 1) * envelope_size;
5626
5627            // Zero reserved fields.
5628            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5629
5630            // Safety:
5631            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5632            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5633            //   envelope_size bytes, there is always sufficient room.
5634            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5635                self.io_bandwidth.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5636                encoder,
5637                offset + cur_offset,
5638                depth,
5639            )?;
5640
5641            _prev_end_offset = cur_offset + envelope_size;
5642            if 5 > max_ordinal {
5643                return Ok(());
5644            }
5645
5646            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5647            // are envelope_size bytes.
5648            let cur_offset: usize = (5 - 1) * envelope_size;
5649
5650            // Zero reserved fields.
5651            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5652
5653            // Safety:
5654            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5655            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5656            //   envelope_size bytes, there is always sufficient room.
5657            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_bluetooth::AssignedCodingFormat, D>(
5658            self.io_coding_format.as_ref().map(<fidl_fuchsia_bluetooth::AssignedCodingFormat as fidl::encoding::ValueTypeMarker>::borrow),
5659            encoder, offset + cur_offset, depth
5660        )?;
5661
5662            _prev_end_offset = cur_offset + envelope_size;
5663            if 6 > max_ordinal {
5664                return Ok(());
5665            }
5666
5667            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5668            // are envelope_size bytes.
5669            let cur_offset: usize = (6 - 1) * envelope_size;
5670
5671            // Zero reserved fields.
5672            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5673
5674            // Safety:
5675            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5676            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5677            //   envelope_size bytes, there is always sufficient room.
5678            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5679                self.io_frame_size.as_ref().map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5680                encoder,
5681                offset + cur_offset,
5682                depth,
5683            )?;
5684
5685            _prev_end_offset = cur_offset + envelope_size;
5686            if 7 > max_ordinal {
5687                return Ok(());
5688            }
5689
5690            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5691            // are envelope_size bytes.
5692            let cur_offset: usize = (7 - 1) * envelope_size;
5693
5694            // Zero reserved fields.
5695            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5696
5697            // Safety:
5698            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5699            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5700            //   envelope_size bytes, there is always sufficient room.
5701            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_audio::SampleFormat, D>(
5702            self.io_pcm_data_format.as_ref().map(<fidl_fuchsia_hardware_audio::SampleFormat as fidl::encoding::ValueTypeMarker>::borrow),
5703            encoder, offset + cur_offset, depth
5704        )?;
5705
5706            _prev_end_offset = cur_offset + envelope_size;
5707            if 8 > max_ordinal {
5708                return Ok(());
5709            }
5710
5711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5712            // are envelope_size bytes.
5713            let cur_offset: usize = (8 - 1) * envelope_size;
5714
5715            // Zero reserved fields.
5716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5717
5718            // Safety:
5719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5721            //   envelope_size bytes, there is always sufficient room.
5722            fidl::encoding::encode_in_envelope_optional::<u8, D>(
5723                self.io_pcm_sample_payload_msb_position
5724                    .as_ref()
5725                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
5726                encoder,
5727                offset + cur_offset,
5728                depth,
5729            )?;
5730
5731            _prev_end_offset = cur_offset + envelope_size;
5732            if 9 > max_ordinal {
5733                return Ok(());
5734            }
5735
5736            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5737            // are envelope_size bytes.
5738            let cur_offset: usize = (9 - 1) * envelope_size;
5739
5740            // Zero reserved fields.
5741            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5742
5743            // Safety:
5744            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5745            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5746            //   envelope_size bytes, there is always sufficient room.
5747            fidl::encoding::encode_in_envelope_optional::<DataPath, D>(
5748                self.path.as_ref().map(<DataPath as fidl::encoding::ValueTypeMarker>::borrow),
5749                encoder,
5750                offset + cur_offset,
5751                depth,
5752            )?;
5753
5754            _prev_end_offset = cur_offset + envelope_size;
5755            if 10 > max_ordinal {
5756                return Ok(());
5757            }
5758
5759            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5760            // are envelope_size bytes.
5761            let cur_offset: usize = (10 - 1) * envelope_size;
5762
5763            // Zero reserved fields.
5764            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5765
5766            // Safety:
5767            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5768            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5769            //   envelope_size bytes, there is always sufficient room.
5770            fidl::encoding::encode_in_envelope_optional::<u16, D>(
5771                self.max_tx_data_size
5772                    .as_ref()
5773                    .map(<u16 as fidl::encoding::ValueTypeMarker>::borrow),
5774                encoder,
5775                offset + cur_offset,
5776                depth,
5777            )?;
5778
5779            _prev_end_offset = cur_offset + envelope_size;
5780
5781            Ok(())
5782        }
5783    }
5784
5785    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5786        for ScoConnectionParameters
5787    {
5788        #[inline(always)]
5789        fn new_empty() -> Self {
5790            Self::default()
5791        }
5792
5793        unsafe fn decode(
5794            &mut self,
5795            decoder: &mut fidl::encoding::Decoder<'_, D>,
5796            offset: usize,
5797            mut depth: fidl::encoding::Depth,
5798        ) -> fidl::Result<()> {
5799            decoder.debug_check_bounds::<Self>(offset);
5800            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5801                None => return Err(fidl::Error::NotNullable),
5802                Some(len) => len,
5803            };
5804            // Calling decoder.out_of_line_offset(0) is not allowed.
5805            if len == 0 {
5806                return Ok(());
5807            };
5808            depth.increment()?;
5809            let envelope_size = 8;
5810            let bytes_len = len * envelope_size;
5811            let offset = decoder.out_of_line_offset(bytes_len)?;
5812            // Decode the envelope for each type.
5813            let mut _next_ordinal_to_read = 0;
5814            let mut next_offset = offset;
5815            let end_offset = offset + bytes_len;
5816            _next_ordinal_to_read += 1;
5817            if next_offset >= end_offset {
5818                return Ok(());
5819            }
5820
5821            // Decode unknown envelopes for gaps in ordinals.
5822            while _next_ordinal_to_read < 1 {
5823                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5824                _next_ordinal_to_read += 1;
5825                next_offset += envelope_size;
5826            }
5827
5828            let next_out_of_line = decoder.next_out_of_line();
5829            let handles_before = decoder.remaining_handles();
5830            if let Some((inlined, num_bytes, num_handles)) =
5831                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5832            {
5833                let member_inline_size =
5834                    <HfpParameterSet as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5835                if inlined != (member_inline_size <= 4) {
5836                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5837                }
5838                let inner_offset;
5839                let mut inner_depth = depth.clone();
5840                if inlined {
5841                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5842                    inner_offset = next_offset;
5843                } else {
5844                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5845                    inner_depth.increment()?;
5846                }
5847                let val_ref =
5848                    self.parameter_set.get_or_insert_with(|| fidl::new_empty!(HfpParameterSet, D));
5849                fidl::decode!(HfpParameterSet, D, val_ref, decoder, inner_offset, inner_depth)?;
5850                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5851                {
5852                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5853                }
5854                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5855                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5856                }
5857            }
5858
5859            next_offset += envelope_size;
5860            _next_ordinal_to_read += 1;
5861            if next_offset >= end_offset {
5862                return Ok(());
5863            }
5864
5865            // Decode unknown envelopes for gaps in ordinals.
5866            while _next_ordinal_to_read < 2 {
5867                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5868                _next_ordinal_to_read += 1;
5869                next_offset += envelope_size;
5870            }
5871
5872            let next_out_of_line = decoder.next_out_of_line();
5873            let handles_before = decoder.remaining_handles();
5874            if let Some((inlined, num_bytes, num_handles)) =
5875                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5876            {
5877                let member_inline_size = <fidl_fuchsia_bluetooth::AssignedCodingFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5878                if inlined != (member_inline_size <= 4) {
5879                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5880                }
5881                let inner_offset;
5882                let mut inner_depth = depth.clone();
5883                if inlined {
5884                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5885                    inner_offset = next_offset;
5886                } else {
5887                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5888                    inner_depth.increment()?;
5889                }
5890                let val_ref = self.air_coding_format.get_or_insert_with(|| {
5891                    fidl::new_empty!(fidl_fuchsia_bluetooth::AssignedCodingFormat, D)
5892                });
5893                fidl::decode!(
5894                    fidl_fuchsia_bluetooth::AssignedCodingFormat,
5895                    D,
5896                    val_ref,
5897                    decoder,
5898                    inner_offset,
5899                    inner_depth
5900                )?;
5901                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5902                {
5903                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5904                }
5905                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5906                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5907                }
5908            }
5909
5910            next_offset += envelope_size;
5911            _next_ordinal_to_read += 1;
5912            if next_offset >= end_offset {
5913                return Ok(());
5914            }
5915
5916            // Decode unknown envelopes for gaps in ordinals.
5917            while _next_ordinal_to_read < 3 {
5918                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5919                _next_ordinal_to_read += 1;
5920                next_offset += envelope_size;
5921            }
5922
5923            let next_out_of_line = decoder.next_out_of_line();
5924            let handles_before = decoder.remaining_handles();
5925            if let Some((inlined, num_bytes, num_handles)) =
5926                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5927            {
5928                let member_inline_size =
5929                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5930                if inlined != (member_inline_size <= 4) {
5931                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5932                }
5933                let inner_offset;
5934                let mut inner_depth = depth.clone();
5935                if inlined {
5936                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5937                    inner_offset = next_offset;
5938                } else {
5939                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5940                    inner_depth.increment()?;
5941                }
5942                let val_ref = self.air_frame_size.get_or_insert_with(|| fidl::new_empty!(u16, D));
5943                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
5944                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5945                {
5946                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5947                }
5948                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5949                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5950                }
5951            }
5952
5953            next_offset += envelope_size;
5954            _next_ordinal_to_read += 1;
5955            if next_offset >= end_offset {
5956                return Ok(());
5957            }
5958
5959            // Decode unknown envelopes for gaps in ordinals.
5960            while _next_ordinal_to_read < 4 {
5961                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5962                _next_ordinal_to_read += 1;
5963                next_offset += envelope_size;
5964            }
5965
5966            let next_out_of_line = decoder.next_out_of_line();
5967            let handles_before = decoder.remaining_handles();
5968            if let Some((inlined, num_bytes, num_handles)) =
5969                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5970            {
5971                let member_inline_size =
5972                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5973                if inlined != (member_inline_size <= 4) {
5974                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5975                }
5976                let inner_offset;
5977                let mut inner_depth = depth.clone();
5978                if inlined {
5979                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5980                    inner_offset = next_offset;
5981                } else {
5982                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5983                    inner_depth.increment()?;
5984                }
5985                let val_ref = self.io_bandwidth.get_or_insert_with(|| fidl::new_empty!(u32, D));
5986                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5987                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5988                {
5989                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5990                }
5991                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5992                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5993                }
5994            }
5995
5996            next_offset += envelope_size;
5997            _next_ordinal_to_read += 1;
5998            if next_offset >= end_offset {
5999                return Ok(());
6000            }
6001
6002            // Decode unknown envelopes for gaps in ordinals.
6003            while _next_ordinal_to_read < 5 {
6004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6005                _next_ordinal_to_read += 1;
6006                next_offset += envelope_size;
6007            }
6008
6009            let next_out_of_line = decoder.next_out_of_line();
6010            let handles_before = decoder.remaining_handles();
6011            if let Some((inlined, num_bytes, num_handles)) =
6012                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6013            {
6014                let member_inline_size = <fidl_fuchsia_bluetooth::AssignedCodingFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6015                if inlined != (member_inline_size <= 4) {
6016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6017                }
6018                let inner_offset;
6019                let mut inner_depth = depth.clone();
6020                if inlined {
6021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6022                    inner_offset = next_offset;
6023                } else {
6024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6025                    inner_depth.increment()?;
6026                }
6027                let val_ref = self.io_coding_format.get_or_insert_with(|| {
6028                    fidl::new_empty!(fidl_fuchsia_bluetooth::AssignedCodingFormat, D)
6029                });
6030                fidl::decode!(
6031                    fidl_fuchsia_bluetooth::AssignedCodingFormat,
6032                    D,
6033                    val_ref,
6034                    decoder,
6035                    inner_offset,
6036                    inner_depth
6037                )?;
6038                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6039                {
6040                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6041                }
6042                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6043                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6044                }
6045            }
6046
6047            next_offset += envelope_size;
6048            _next_ordinal_to_read += 1;
6049            if next_offset >= end_offset {
6050                return Ok(());
6051            }
6052
6053            // Decode unknown envelopes for gaps in ordinals.
6054            while _next_ordinal_to_read < 6 {
6055                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6056                _next_ordinal_to_read += 1;
6057                next_offset += envelope_size;
6058            }
6059
6060            let next_out_of_line = decoder.next_out_of_line();
6061            let handles_before = decoder.remaining_handles();
6062            if let Some((inlined, num_bytes, num_handles)) =
6063                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6064            {
6065                let member_inline_size =
6066                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6067                if inlined != (member_inline_size <= 4) {
6068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6069                }
6070                let inner_offset;
6071                let mut inner_depth = depth.clone();
6072                if inlined {
6073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6074                    inner_offset = next_offset;
6075                } else {
6076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6077                    inner_depth.increment()?;
6078                }
6079                let val_ref = self.io_frame_size.get_or_insert_with(|| fidl::new_empty!(u16, D));
6080                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6082                {
6083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6084                }
6085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6087                }
6088            }
6089
6090            next_offset += envelope_size;
6091            _next_ordinal_to_read += 1;
6092            if next_offset >= end_offset {
6093                return Ok(());
6094            }
6095
6096            // Decode unknown envelopes for gaps in ordinals.
6097            while _next_ordinal_to_read < 7 {
6098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6099                _next_ordinal_to_read += 1;
6100                next_offset += envelope_size;
6101            }
6102
6103            let next_out_of_line = decoder.next_out_of_line();
6104            let handles_before = decoder.remaining_handles();
6105            if let Some((inlined, num_bytes, num_handles)) =
6106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6107            {
6108                let member_inline_size = <fidl_fuchsia_hardware_audio::SampleFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6109                if inlined != (member_inline_size <= 4) {
6110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6111                }
6112                let inner_offset;
6113                let mut inner_depth = depth.clone();
6114                if inlined {
6115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6116                    inner_offset = next_offset;
6117                } else {
6118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6119                    inner_depth.increment()?;
6120                }
6121                let val_ref = self.io_pcm_data_format.get_or_insert_with(|| {
6122                    fidl::new_empty!(fidl_fuchsia_hardware_audio::SampleFormat, D)
6123                });
6124                fidl::decode!(
6125                    fidl_fuchsia_hardware_audio::SampleFormat,
6126                    D,
6127                    val_ref,
6128                    decoder,
6129                    inner_offset,
6130                    inner_depth
6131                )?;
6132                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6133                {
6134                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6135                }
6136                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6137                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6138                }
6139            }
6140
6141            next_offset += envelope_size;
6142            _next_ordinal_to_read += 1;
6143            if next_offset >= end_offset {
6144                return Ok(());
6145            }
6146
6147            // Decode unknown envelopes for gaps in ordinals.
6148            while _next_ordinal_to_read < 8 {
6149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6150                _next_ordinal_to_read += 1;
6151                next_offset += envelope_size;
6152            }
6153
6154            let next_out_of_line = decoder.next_out_of_line();
6155            let handles_before = decoder.remaining_handles();
6156            if let Some((inlined, num_bytes, num_handles)) =
6157                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6158            {
6159                let member_inline_size =
6160                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6161                if inlined != (member_inline_size <= 4) {
6162                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6163                }
6164                let inner_offset;
6165                let mut inner_depth = depth.clone();
6166                if inlined {
6167                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6168                    inner_offset = next_offset;
6169                } else {
6170                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6171                    inner_depth.increment()?;
6172                }
6173                let val_ref = self
6174                    .io_pcm_sample_payload_msb_position
6175                    .get_or_insert_with(|| fidl::new_empty!(u8, D));
6176                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
6177                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6178                {
6179                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6180                }
6181                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6182                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6183                }
6184            }
6185
6186            next_offset += envelope_size;
6187            _next_ordinal_to_read += 1;
6188            if next_offset >= end_offset {
6189                return Ok(());
6190            }
6191
6192            // Decode unknown envelopes for gaps in ordinals.
6193            while _next_ordinal_to_read < 9 {
6194                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6195                _next_ordinal_to_read += 1;
6196                next_offset += envelope_size;
6197            }
6198
6199            let next_out_of_line = decoder.next_out_of_line();
6200            let handles_before = decoder.remaining_handles();
6201            if let Some((inlined, num_bytes, num_handles)) =
6202                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6203            {
6204                let member_inline_size =
6205                    <DataPath as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6206                if inlined != (member_inline_size <= 4) {
6207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6208                }
6209                let inner_offset;
6210                let mut inner_depth = depth.clone();
6211                if inlined {
6212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6213                    inner_offset = next_offset;
6214                } else {
6215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6216                    inner_depth.increment()?;
6217                }
6218                let val_ref = self.path.get_or_insert_with(|| fidl::new_empty!(DataPath, D));
6219                fidl::decode!(DataPath, D, val_ref, decoder, inner_offset, inner_depth)?;
6220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6221                {
6222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6223                }
6224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6226                }
6227            }
6228
6229            next_offset += envelope_size;
6230            _next_ordinal_to_read += 1;
6231            if next_offset >= end_offset {
6232                return Ok(());
6233            }
6234
6235            // Decode unknown envelopes for gaps in ordinals.
6236            while _next_ordinal_to_read < 10 {
6237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6238                _next_ordinal_to_read += 1;
6239                next_offset += envelope_size;
6240            }
6241
6242            let next_out_of_line = decoder.next_out_of_line();
6243            let handles_before = decoder.remaining_handles();
6244            if let Some((inlined, num_bytes, num_handles)) =
6245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6246            {
6247                let member_inline_size =
6248                    <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6249                if inlined != (member_inline_size <= 4) {
6250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6251                }
6252                let inner_offset;
6253                let mut inner_depth = depth.clone();
6254                if inlined {
6255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6256                    inner_offset = next_offset;
6257                } else {
6258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6259                    inner_depth.increment()?;
6260                }
6261                let val_ref = self.max_tx_data_size.get_or_insert_with(|| fidl::new_empty!(u16, D));
6262                fidl::decode!(u16, D, val_ref, decoder, inner_offset, inner_depth)?;
6263                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6264                {
6265                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6266                }
6267                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6268                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6269                }
6270            }
6271
6272            next_offset += envelope_size;
6273
6274            // Decode the remaining unknown envelopes.
6275            while next_offset < end_offset {
6276                _next_ordinal_to_read += 1;
6277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6278                next_offset += envelope_size;
6279            }
6280
6281            Ok(())
6282        }
6283    }
6284
6285    impl ScoConnectionWriteRequest {
6286        #[inline(always)]
6287        fn max_ordinal_present(&self) -> u64 {
6288            if let Some(_) = self.data {
6289                return 1;
6290            }
6291            0
6292        }
6293    }
6294
6295    impl fidl::encoding::ValueTypeMarker for ScoConnectionWriteRequest {
6296        type Borrowed<'a> = &'a Self;
6297        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6298            value
6299        }
6300    }
6301
6302    unsafe impl fidl::encoding::TypeMarker for ScoConnectionWriteRequest {
6303        type Owned = Self;
6304
6305        #[inline(always)]
6306        fn inline_align(_context: fidl::encoding::Context) -> usize {
6307            8
6308        }
6309
6310        #[inline(always)]
6311        fn inline_size(_context: fidl::encoding::Context) -> usize {
6312            16
6313        }
6314    }
6315
6316    unsafe impl<D: fidl::encoding::ResourceDialect>
6317        fidl::encoding::Encode<ScoConnectionWriteRequest, D> for &ScoConnectionWriteRequest
6318    {
6319        unsafe fn encode(
6320            self,
6321            encoder: &mut fidl::encoding::Encoder<'_, D>,
6322            offset: usize,
6323            mut depth: fidl::encoding::Depth,
6324        ) -> fidl::Result<()> {
6325            encoder.debug_check_bounds::<ScoConnectionWriteRequest>(offset);
6326            // Vector header
6327            let max_ordinal: u64 = self.max_ordinal_present();
6328            encoder.write_num(max_ordinal, offset);
6329            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6330            // Calling encoder.out_of_line_offset(0) is not allowed.
6331            if max_ordinal == 0 {
6332                return Ok(());
6333            }
6334            depth.increment()?;
6335            let envelope_size = 8;
6336            let bytes_len = max_ordinal as usize * envelope_size;
6337            #[allow(unused_variables)]
6338            let offset = encoder.out_of_line_offset(bytes_len);
6339            let mut _prev_end_offset: usize = 0;
6340            if 1 > max_ordinal {
6341                return Ok(());
6342            }
6343
6344            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6345            // are envelope_size bytes.
6346            let cur_offset: usize = (1 - 1) * envelope_size;
6347
6348            // Zero reserved fields.
6349            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6350
6351            // Safety:
6352            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6353            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6354            //   envelope_size bytes, there is always sufficient room.
6355            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
6356            self.data.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
6357            encoder, offset + cur_offset, depth
6358        )?;
6359
6360            _prev_end_offset = cur_offset + envelope_size;
6361
6362            Ok(())
6363        }
6364    }
6365
6366    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6367        for ScoConnectionWriteRequest
6368    {
6369        #[inline(always)]
6370        fn new_empty() -> Self {
6371            Self::default()
6372        }
6373
6374        unsafe fn decode(
6375            &mut self,
6376            decoder: &mut fidl::encoding::Decoder<'_, D>,
6377            offset: usize,
6378            mut depth: fidl::encoding::Depth,
6379        ) -> fidl::Result<()> {
6380            decoder.debug_check_bounds::<Self>(offset);
6381            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6382                None => return Err(fidl::Error::NotNullable),
6383                Some(len) => len,
6384            };
6385            // Calling decoder.out_of_line_offset(0) is not allowed.
6386            if len == 0 {
6387                return Ok(());
6388            };
6389            depth.increment()?;
6390            let envelope_size = 8;
6391            let bytes_len = len * envelope_size;
6392            let offset = decoder.out_of_line_offset(bytes_len)?;
6393            // Decode the envelope for each type.
6394            let mut _next_ordinal_to_read = 0;
6395            let mut next_offset = offset;
6396            let end_offset = offset + bytes_len;
6397            _next_ordinal_to_read += 1;
6398            if next_offset >= end_offset {
6399                return Ok(());
6400            }
6401
6402            // Decode unknown envelopes for gaps in ordinals.
6403            while _next_ordinal_to_read < 1 {
6404                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6405                _next_ordinal_to_read += 1;
6406                next_offset += envelope_size;
6407            }
6408
6409            let next_out_of_line = decoder.next_out_of_line();
6410            let handles_before = decoder.remaining_handles();
6411            if let Some((inlined, num_bytes, num_handles)) =
6412                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6413            {
6414                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6415                if inlined != (member_inline_size <= 4) {
6416                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6417                }
6418                let inner_offset;
6419                let mut inner_depth = depth.clone();
6420                if inlined {
6421                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6422                    inner_offset = next_offset;
6423                } else {
6424                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6425                    inner_depth.increment()?;
6426                }
6427                let val_ref = self.data.get_or_insert_with(|| {
6428                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
6429                });
6430                fidl::decode!(
6431                    fidl::encoding::UnboundedVector<u8>,
6432                    D,
6433                    val_ref,
6434                    decoder,
6435                    inner_offset,
6436                    inner_depth
6437                )?;
6438                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6439                {
6440                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6441                }
6442                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6443                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6444                }
6445            }
6446
6447            next_offset += envelope_size;
6448
6449            // Decode the remaining unknown envelopes.
6450            while next_offset < end_offset {
6451                _next_ordinal_to_read += 1;
6452                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6453                next_offset += envelope_size;
6454            }
6455
6456            Ok(())
6457        }
6458    }
6459
6460    impl ScoConnectionReadResponse {
6461        #[inline(always)]
6462        fn max_ordinal_present(&self) -> u64 {
6463            if let Some(_) = self.data {
6464                return 2;
6465            }
6466            if let Some(_) = self.status_flag {
6467                return 1;
6468            }
6469            0
6470        }
6471    }
6472
6473    impl fidl::encoding::ValueTypeMarker for ScoConnectionReadResponse {
6474        type Borrowed<'a> = &'a Self;
6475        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6476            value
6477        }
6478    }
6479
6480    unsafe impl fidl::encoding::TypeMarker for ScoConnectionReadResponse {
6481        type Owned = Self;
6482
6483        #[inline(always)]
6484        fn inline_align(_context: fidl::encoding::Context) -> usize {
6485            8
6486        }
6487
6488        #[inline(always)]
6489        fn inline_size(_context: fidl::encoding::Context) -> usize {
6490            16
6491        }
6492    }
6493
6494    unsafe impl<D: fidl::encoding::ResourceDialect>
6495        fidl::encoding::Encode<ScoConnectionReadResponse, D> for &ScoConnectionReadResponse
6496    {
6497        unsafe fn encode(
6498            self,
6499            encoder: &mut fidl::encoding::Encoder<'_, D>,
6500            offset: usize,
6501            mut depth: fidl::encoding::Depth,
6502        ) -> fidl::Result<()> {
6503            encoder.debug_check_bounds::<ScoConnectionReadResponse>(offset);
6504            // Vector header
6505            let max_ordinal: u64 = self.max_ordinal_present();
6506            encoder.write_num(max_ordinal, offset);
6507            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6508            // Calling encoder.out_of_line_offset(0) is not allowed.
6509            if max_ordinal == 0 {
6510                return Ok(());
6511            }
6512            depth.increment()?;
6513            let envelope_size = 8;
6514            let bytes_len = max_ordinal as usize * envelope_size;
6515            #[allow(unused_variables)]
6516            let offset = encoder.out_of_line_offset(bytes_len);
6517            let mut _prev_end_offset: usize = 0;
6518            if 1 > max_ordinal {
6519                return Ok(());
6520            }
6521
6522            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6523            // are envelope_size bytes.
6524            let cur_offset: usize = (1 - 1) * envelope_size;
6525
6526            // Zero reserved fields.
6527            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6528
6529            // Safety:
6530            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6531            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6532            //   envelope_size bytes, there is always sufficient room.
6533            fidl::encoding::encode_in_envelope_optional::<RxPacketStatus, D>(
6534                self.status_flag
6535                    .as_ref()
6536                    .map(<RxPacketStatus as fidl::encoding::ValueTypeMarker>::borrow),
6537                encoder,
6538                offset + cur_offset,
6539                depth,
6540            )?;
6541
6542            _prev_end_offset = cur_offset + envelope_size;
6543            if 2 > max_ordinal {
6544                return Ok(());
6545            }
6546
6547            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6548            // are envelope_size bytes.
6549            let cur_offset: usize = (2 - 1) * envelope_size;
6550
6551            // Zero reserved fields.
6552            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6553
6554            // Safety:
6555            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6556            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6557            //   envelope_size bytes, there is always sufficient room.
6558            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
6559            self.data.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
6560            encoder, offset + cur_offset, depth
6561        )?;
6562
6563            _prev_end_offset = cur_offset + envelope_size;
6564
6565            Ok(())
6566        }
6567    }
6568
6569    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6570        for ScoConnectionReadResponse
6571    {
6572        #[inline(always)]
6573        fn new_empty() -> Self {
6574            Self::default()
6575        }
6576
6577        unsafe fn decode(
6578            &mut self,
6579            decoder: &mut fidl::encoding::Decoder<'_, D>,
6580            offset: usize,
6581            mut depth: fidl::encoding::Depth,
6582        ) -> fidl::Result<()> {
6583            decoder.debug_check_bounds::<Self>(offset);
6584            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6585                None => return Err(fidl::Error::NotNullable),
6586                Some(len) => len,
6587            };
6588            // Calling decoder.out_of_line_offset(0) is not allowed.
6589            if len == 0 {
6590                return Ok(());
6591            };
6592            depth.increment()?;
6593            let envelope_size = 8;
6594            let bytes_len = len * envelope_size;
6595            let offset = decoder.out_of_line_offset(bytes_len)?;
6596            // Decode the envelope for each type.
6597            let mut _next_ordinal_to_read = 0;
6598            let mut next_offset = offset;
6599            let end_offset = offset + bytes_len;
6600            _next_ordinal_to_read += 1;
6601            if next_offset >= end_offset {
6602                return Ok(());
6603            }
6604
6605            // Decode unknown envelopes for gaps in ordinals.
6606            while _next_ordinal_to_read < 1 {
6607                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6608                _next_ordinal_to_read += 1;
6609                next_offset += envelope_size;
6610            }
6611
6612            let next_out_of_line = decoder.next_out_of_line();
6613            let handles_before = decoder.remaining_handles();
6614            if let Some((inlined, num_bytes, num_handles)) =
6615                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6616            {
6617                let member_inline_size =
6618                    <RxPacketStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6619                if inlined != (member_inline_size <= 4) {
6620                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6621                }
6622                let inner_offset;
6623                let mut inner_depth = depth.clone();
6624                if inlined {
6625                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6626                    inner_offset = next_offset;
6627                } else {
6628                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6629                    inner_depth.increment()?;
6630                }
6631                let val_ref =
6632                    self.status_flag.get_or_insert_with(|| fidl::new_empty!(RxPacketStatus, D));
6633                fidl::decode!(RxPacketStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
6634                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6635                {
6636                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6637                }
6638                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6639                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6640                }
6641            }
6642
6643            next_offset += envelope_size;
6644            _next_ordinal_to_read += 1;
6645            if next_offset >= end_offset {
6646                return Ok(());
6647            }
6648
6649            // Decode unknown envelopes for gaps in ordinals.
6650            while _next_ordinal_to_read < 2 {
6651                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6652                _next_ordinal_to_read += 1;
6653                next_offset += envelope_size;
6654            }
6655
6656            let next_out_of_line = decoder.next_out_of_line();
6657            let handles_before = decoder.remaining_handles();
6658            if let Some((inlined, num_bytes, num_handles)) =
6659                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6660            {
6661                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6662                if inlined != (member_inline_size <= 4) {
6663                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6664                }
6665                let inner_offset;
6666                let mut inner_depth = depth.clone();
6667                if inlined {
6668                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6669                    inner_offset = next_offset;
6670                } else {
6671                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6672                    inner_depth.increment()?;
6673                }
6674                let val_ref = self.data.get_or_insert_with(|| {
6675                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
6676                });
6677                fidl::decode!(
6678                    fidl::encoding::UnboundedVector<u8>,
6679                    D,
6680                    val_ref,
6681                    decoder,
6682                    inner_offset,
6683                    inner_depth
6684                )?;
6685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6686                {
6687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6688                }
6689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6691                }
6692            }
6693
6694            next_offset += envelope_size;
6695
6696            // Decode the remaining unknown envelopes.
6697            while next_offset < end_offset {
6698                _next_ordinal_to_read += 1;
6699                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6700                next_offset += envelope_size;
6701            }
6702
6703            Ok(())
6704        }
6705    }
6706
6707    impl ServiceDefinition {
6708        #[inline(always)]
6709        fn max_ordinal_present(&self) -> u64 {
6710            if let Some(_) = self.additional_attributes {
6711                return 6;
6712            }
6713            if let Some(_) = self.information {
6714                return 5;
6715            }
6716            if let Some(_) = self.profile_descriptors {
6717                return 4;
6718            }
6719            if let Some(_) = self.additional_protocol_descriptor_lists {
6720                return 3;
6721            }
6722            if let Some(_) = self.protocol_descriptor_list {
6723                return 2;
6724            }
6725            if let Some(_) = self.service_class_uuids {
6726                return 1;
6727            }
6728            0
6729        }
6730    }
6731
6732    impl fidl::encoding::ValueTypeMarker for ServiceDefinition {
6733        type Borrowed<'a> = &'a Self;
6734        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6735            value
6736        }
6737    }
6738
6739    unsafe impl fidl::encoding::TypeMarker for ServiceDefinition {
6740        type Owned = Self;
6741
6742        #[inline(always)]
6743        fn inline_align(_context: fidl::encoding::Context) -> usize {
6744            8
6745        }
6746
6747        #[inline(always)]
6748        fn inline_size(_context: fidl::encoding::Context) -> usize {
6749            16
6750        }
6751    }
6752
6753    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ServiceDefinition, D>
6754        for &ServiceDefinition
6755    {
6756        unsafe fn encode(
6757            self,
6758            encoder: &mut fidl::encoding::Encoder<'_, D>,
6759            offset: usize,
6760            mut depth: fidl::encoding::Depth,
6761        ) -> fidl::Result<()> {
6762            encoder.debug_check_bounds::<ServiceDefinition>(offset);
6763            // Vector header
6764            let max_ordinal: u64 = self.max_ordinal_present();
6765            encoder.write_num(max_ordinal, offset);
6766            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6767            // Calling encoder.out_of_line_offset(0) is not allowed.
6768            if max_ordinal == 0 {
6769                return Ok(());
6770            }
6771            depth.increment()?;
6772            let envelope_size = 8;
6773            let bytes_len = max_ordinal as usize * envelope_size;
6774            #[allow(unused_variables)]
6775            let offset = encoder.out_of_line_offset(bytes_len);
6776            let mut _prev_end_offset: usize = 0;
6777            if 1 > max_ordinal {
6778                return Ok(());
6779            }
6780
6781            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6782            // are envelope_size bytes.
6783            let cur_offset: usize = (1 - 1) * envelope_size;
6784
6785            // Zero reserved fields.
6786            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6787
6788            // Safety:
6789            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6790            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6791            //   envelope_size bytes, there is always sufficient room.
6792            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_bluetooth::Uuid, 255>, D>(
6793            self.service_class_uuids.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_bluetooth::Uuid, 255> as fidl::encoding::ValueTypeMarker>::borrow),
6794            encoder, offset + cur_offset, depth
6795        )?;
6796
6797            _prev_end_offset = cur_offset + envelope_size;
6798            if 2 > max_ordinal {
6799                return Ok(());
6800            }
6801
6802            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6803            // are envelope_size bytes.
6804            let cur_offset: usize = (2 - 1) * envelope_size;
6805
6806            // Zero reserved fields.
6807            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6808
6809            // Safety:
6810            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6811            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6812            //   envelope_size bytes, there is always sufficient room.
6813            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ProtocolDescriptor, 255>, D>(
6814            self.protocol_descriptor_list.as_ref().map(<fidl::encoding::Vector<ProtocolDescriptor, 255> as fidl::encoding::ValueTypeMarker>::borrow),
6815            encoder, offset + cur_offset, depth
6816        )?;
6817
6818            _prev_end_offset = cur_offset + envelope_size;
6819            if 3 > max_ordinal {
6820                return Ok(());
6821            }
6822
6823            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6824            // are envelope_size bytes.
6825            let cur_offset: usize = (3 - 1) * envelope_size;
6826
6827            // Zero reserved fields.
6828            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6829
6830            // Safety:
6831            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6832            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6833            //   envelope_size bytes, there is always sufficient room.
6834            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::Vector<ProtocolDescriptor, 255>, 255>, D>(
6835            self.additional_protocol_descriptor_lists.as_ref().map(<fidl::encoding::Vector<fidl::encoding::Vector<ProtocolDescriptor, 255>, 255> as fidl::encoding::ValueTypeMarker>::borrow),
6836            encoder, offset + cur_offset, depth
6837        )?;
6838
6839            _prev_end_offset = cur_offset + envelope_size;
6840            if 4 > max_ordinal {
6841                return Ok(());
6842            }
6843
6844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6845            // are envelope_size bytes.
6846            let cur_offset: usize = (4 - 1) * envelope_size;
6847
6848            // Zero reserved fields.
6849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6850
6851            // Safety:
6852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6854            //   envelope_size bytes, there is always sufficient room.
6855            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ProfileDescriptor, 255>, D>(
6856            self.profile_descriptors.as_ref().map(<fidl::encoding::Vector<ProfileDescriptor, 255> as fidl::encoding::ValueTypeMarker>::borrow),
6857            encoder, offset + cur_offset, depth
6858        )?;
6859
6860            _prev_end_offset = cur_offset + envelope_size;
6861            if 5 > max_ordinal {
6862                return Ok(());
6863            }
6864
6865            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6866            // are envelope_size bytes.
6867            let cur_offset: usize = (5 - 1) * envelope_size;
6868
6869            // Zero reserved fields.
6870            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6871
6872            // Safety:
6873            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6874            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6875            //   envelope_size bytes, there is always sufficient room.
6876            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Information, 85>, D>(
6877            self.information.as_ref().map(<fidl::encoding::Vector<Information, 85> as fidl::encoding::ValueTypeMarker>::borrow),
6878            encoder, offset + cur_offset, depth
6879        )?;
6880
6881            _prev_end_offset = cur_offset + envelope_size;
6882            if 6 > max_ordinal {
6883                return Ok(());
6884            }
6885
6886            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6887            // are envelope_size bytes.
6888            let cur_offset: usize = (6 - 1) * envelope_size;
6889
6890            // Zero reserved fields.
6891            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6892
6893            // Safety:
6894            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6895            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6896            //   envelope_size bytes, there is always sufficient room.
6897            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Attribute, 65023>, D>(
6898            self.additional_attributes.as_ref().map(<fidl::encoding::Vector<Attribute, 65023> as fidl::encoding::ValueTypeMarker>::borrow),
6899            encoder, offset + cur_offset, depth
6900        )?;
6901
6902            _prev_end_offset = cur_offset + envelope_size;
6903
6904            Ok(())
6905        }
6906    }
6907
6908    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ServiceDefinition {
6909        #[inline(always)]
6910        fn new_empty() -> Self {
6911            Self::default()
6912        }
6913
6914        unsafe fn decode(
6915            &mut self,
6916            decoder: &mut fidl::encoding::Decoder<'_, D>,
6917            offset: usize,
6918            mut depth: fidl::encoding::Depth,
6919        ) -> fidl::Result<()> {
6920            decoder.debug_check_bounds::<Self>(offset);
6921            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6922                None => return Err(fidl::Error::NotNullable),
6923                Some(len) => len,
6924            };
6925            // Calling decoder.out_of_line_offset(0) is not allowed.
6926            if len == 0 {
6927                return Ok(());
6928            };
6929            depth.increment()?;
6930            let envelope_size = 8;
6931            let bytes_len = len * envelope_size;
6932            let offset = decoder.out_of_line_offset(bytes_len)?;
6933            // Decode the envelope for each type.
6934            let mut _next_ordinal_to_read = 0;
6935            let mut next_offset = offset;
6936            let end_offset = offset + bytes_len;
6937            _next_ordinal_to_read += 1;
6938            if next_offset >= end_offset {
6939                return Ok(());
6940            }
6941
6942            // Decode unknown envelopes for gaps in ordinals.
6943            while _next_ordinal_to_read < 1 {
6944                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6945                _next_ordinal_to_read += 1;
6946                next_offset += envelope_size;
6947            }
6948
6949            let next_out_of_line = decoder.next_out_of_line();
6950            let handles_before = decoder.remaining_handles();
6951            if let Some((inlined, num_bytes, num_handles)) =
6952                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6953            {
6954                let member_inline_size = <fidl::encoding::Vector<fidl_fuchsia_bluetooth::Uuid, 255> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6955                if inlined != (member_inline_size <= 4) {
6956                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6957                }
6958                let inner_offset;
6959                let mut inner_depth = depth.clone();
6960                if inlined {
6961                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6962                    inner_offset = next_offset;
6963                } else {
6964                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6965                    inner_depth.increment()?;
6966                }
6967                let val_ref =
6968                self.service_class_uuids.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_bluetooth::Uuid, 255>, D));
6969                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_bluetooth::Uuid, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
6970                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6971                {
6972                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6973                }
6974                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6975                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6976                }
6977            }
6978
6979            next_offset += envelope_size;
6980            _next_ordinal_to_read += 1;
6981            if next_offset >= end_offset {
6982                return Ok(());
6983            }
6984
6985            // Decode unknown envelopes for gaps in ordinals.
6986            while _next_ordinal_to_read < 2 {
6987                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6988                _next_ordinal_to_read += 1;
6989                next_offset += envelope_size;
6990            }
6991
6992            let next_out_of_line = decoder.next_out_of_line();
6993            let handles_before = decoder.remaining_handles();
6994            if let Some((inlined, num_bytes, num_handles)) =
6995                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6996            {
6997                let member_inline_size = <fidl::encoding::Vector<ProtocolDescriptor, 255> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6998                if inlined != (member_inline_size <= 4) {
6999                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7000                }
7001                let inner_offset;
7002                let mut inner_depth = depth.clone();
7003                if inlined {
7004                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7005                    inner_offset = next_offset;
7006                } else {
7007                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7008                    inner_depth.increment()?;
7009                }
7010                let val_ref = self.protocol_descriptor_list.get_or_insert_with(
7011                    || fidl::new_empty!(fidl::encoding::Vector<ProtocolDescriptor, 255>, D),
7012                );
7013                fidl::decode!(fidl::encoding::Vector<ProtocolDescriptor, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
7014                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7015                {
7016                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7017                }
7018                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7019                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7020                }
7021            }
7022
7023            next_offset += envelope_size;
7024            _next_ordinal_to_read += 1;
7025            if next_offset >= end_offset {
7026                return Ok(());
7027            }
7028
7029            // Decode unknown envelopes for gaps in ordinals.
7030            while _next_ordinal_to_read < 3 {
7031                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7032                _next_ordinal_to_read += 1;
7033                next_offset += envelope_size;
7034            }
7035
7036            let next_out_of_line = decoder.next_out_of_line();
7037            let handles_before = decoder.remaining_handles();
7038            if let Some((inlined, num_bytes, num_handles)) =
7039                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7040            {
7041                let member_inline_size = <fidl::encoding::Vector<
7042                    fidl::encoding::Vector<ProtocolDescriptor, 255>,
7043                    255,
7044                > as fidl::encoding::TypeMarker>::inline_size(
7045                    decoder.context
7046                );
7047                if inlined != (member_inline_size <= 4) {
7048                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7049                }
7050                let inner_offset;
7051                let mut inner_depth = depth.clone();
7052                if inlined {
7053                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7054                    inner_offset = next_offset;
7055                } else {
7056                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7057                    inner_depth.increment()?;
7058                }
7059                let val_ref = self.additional_protocol_descriptor_lists.get_or_insert_with(|| {
7060                    fidl::new_empty!(
7061                        fidl::encoding::Vector<
7062                            fidl::encoding::Vector<ProtocolDescriptor, 255>,
7063                            255,
7064                        >,
7065                        D
7066                    )
7067                });
7068                fidl::decode!(
7069                    fidl::encoding::Vector<fidl::encoding::Vector<ProtocolDescriptor, 255>, 255>,
7070                    D,
7071                    val_ref,
7072                    decoder,
7073                    inner_offset,
7074                    inner_depth
7075                )?;
7076                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7077                {
7078                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7079                }
7080                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7081                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7082                }
7083            }
7084
7085            next_offset += envelope_size;
7086            _next_ordinal_to_read += 1;
7087            if next_offset >= end_offset {
7088                return Ok(());
7089            }
7090
7091            // Decode unknown envelopes for gaps in ordinals.
7092            while _next_ordinal_to_read < 4 {
7093                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7094                _next_ordinal_to_read += 1;
7095                next_offset += envelope_size;
7096            }
7097
7098            let next_out_of_line = decoder.next_out_of_line();
7099            let handles_before = decoder.remaining_handles();
7100            if let Some((inlined, num_bytes, num_handles)) =
7101                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7102            {
7103                let member_inline_size = <fidl::encoding::Vector<ProfileDescriptor, 255> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7104                if inlined != (member_inline_size <= 4) {
7105                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7106                }
7107                let inner_offset;
7108                let mut inner_depth = depth.clone();
7109                if inlined {
7110                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7111                    inner_offset = next_offset;
7112                } else {
7113                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7114                    inner_depth.increment()?;
7115                }
7116                let val_ref = self.profile_descriptors.get_or_insert_with(
7117                    || fidl::new_empty!(fidl::encoding::Vector<ProfileDescriptor, 255>, D),
7118                );
7119                fidl::decode!(fidl::encoding::Vector<ProfileDescriptor, 255>, D, val_ref, decoder, inner_offset, inner_depth)?;
7120                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7121                {
7122                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7123                }
7124                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7125                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7126                }
7127            }
7128
7129            next_offset += envelope_size;
7130            _next_ordinal_to_read += 1;
7131            if next_offset >= end_offset {
7132                return Ok(());
7133            }
7134
7135            // Decode unknown envelopes for gaps in ordinals.
7136            while _next_ordinal_to_read < 5 {
7137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7138                _next_ordinal_to_read += 1;
7139                next_offset += envelope_size;
7140            }
7141
7142            let next_out_of_line = decoder.next_out_of_line();
7143            let handles_before = decoder.remaining_handles();
7144            if let Some((inlined, num_bytes, num_handles)) =
7145                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7146            {
7147                let member_inline_size = <fidl::encoding::Vector<Information, 85> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7148                if inlined != (member_inline_size <= 4) {
7149                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7150                }
7151                let inner_offset;
7152                let mut inner_depth = depth.clone();
7153                if inlined {
7154                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7155                    inner_offset = next_offset;
7156                } else {
7157                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7158                    inner_depth.increment()?;
7159                }
7160                let val_ref = self.information.get_or_insert_with(
7161                    || fidl::new_empty!(fidl::encoding::Vector<Information, 85>, D),
7162                );
7163                fidl::decode!(fidl::encoding::Vector<Information, 85>, D, val_ref, decoder, inner_offset, inner_depth)?;
7164                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7165                {
7166                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7167                }
7168                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7169                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7170                }
7171            }
7172
7173            next_offset += envelope_size;
7174            _next_ordinal_to_read += 1;
7175            if next_offset >= end_offset {
7176                return Ok(());
7177            }
7178
7179            // Decode unknown envelopes for gaps in ordinals.
7180            while _next_ordinal_to_read < 6 {
7181                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7182                _next_ordinal_to_read += 1;
7183                next_offset += envelope_size;
7184            }
7185
7186            let next_out_of_line = decoder.next_out_of_line();
7187            let handles_before = decoder.remaining_handles();
7188            if let Some((inlined, num_bytes, num_handles)) =
7189                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7190            {
7191                let member_inline_size = <fidl::encoding::Vector<Attribute, 65023> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7192                if inlined != (member_inline_size <= 4) {
7193                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7194                }
7195                let inner_offset;
7196                let mut inner_depth = depth.clone();
7197                if inlined {
7198                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7199                    inner_offset = next_offset;
7200                } else {
7201                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7202                    inner_depth.increment()?;
7203                }
7204                let val_ref = self.additional_attributes.get_or_insert_with(
7205                    || fidl::new_empty!(fidl::encoding::Vector<Attribute, 65023>, D),
7206                );
7207                fidl::decode!(fidl::encoding::Vector<Attribute, 65023>, D, val_ref, decoder, inner_offset, inner_depth)?;
7208                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7209                {
7210                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7211                }
7212                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7213                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7214                }
7215            }
7216
7217            next_offset += envelope_size;
7218
7219            // Decode the remaining unknown envelopes.
7220            while next_offset < end_offset {
7221                _next_ordinal_to_read += 1;
7222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7223                next_offset += envelope_size;
7224            }
7225
7226            Ok(())
7227        }
7228    }
7229
7230    impl fidl::encoding::ValueTypeMarker for AudioEncoderSettings {
7231        type Borrowed<'a> = &'a Self;
7232        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7233            value
7234        }
7235    }
7236
7237    unsafe impl fidl::encoding::TypeMarker for AudioEncoderSettings {
7238        type Owned = Self;
7239
7240        #[inline(always)]
7241        fn inline_align(_context: fidl::encoding::Context) -> usize {
7242            8
7243        }
7244
7245        #[inline(always)]
7246        fn inline_size(_context: fidl::encoding::Context) -> usize {
7247            16
7248        }
7249    }
7250
7251    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioEncoderSettings, D>
7252        for &AudioEncoderSettings
7253    {
7254        #[inline]
7255        unsafe fn encode(
7256            self,
7257            encoder: &mut fidl::encoding::Encoder<'_, D>,
7258            offset: usize,
7259            _depth: fidl::encoding::Depth,
7260        ) -> fidl::Result<()> {
7261            encoder.debug_check_bounds::<AudioEncoderSettings>(offset);
7262            encoder.write_num::<u64>(self.ordinal(), offset);
7263            match self {
7264            AudioEncoderSettings::Sbc(ref val) => {
7265                fidl::encoding::encode_in_envelope::<fidl_fuchsia_media::SbcEncoderSettings, D>(
7266                    <fidl_fuchsia_media::SbcEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
7267                    encoder, offset + 8, _depth
7268                )
7269            }
7270            AudioEncoderSettings::Aac(ref val) => {
7271                fidl::encoding::encode_in_envelope::<fidl_fuchsia_media::AacEncoderSettings, D>(
7272                    <fidl_fuchsia_media::AacEncoderSettings as fidl::encoding::ValueTypeMarker>::borrow(val),
7273                    encoder, offset + 8, _depth
7274                )
7275            }
7276            AudioEncoderSettings::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7277        }
7278        }
7279    }
7280
7281    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioEncoderSettings {
7282        #[inline(always)]
7283        fn new_empty() -> Self {
7284            Self::__SourceBreaking { unknown_ordinal: 0 }
7285        }
7286
7287        #[inline]
7288        unsafe fn decode(
7289            &mut self,
7290            decoder: &mut fidl::encoding::Decoder<'_, D>,
7291            offset: usize,
7292            mut depth: fidl::encoding::Depth,
7293        ) -> fidl::Result<()> {
7294            decoder.debug_check_bounds::<Self>(offset);
7295            #[allow(unused_variables)]
7296            let next_out_of_line = decoder.next_out_of_line();
7297            let handles_before = decoder.remaining_handles();
7298            let (ordinal, inlined, num_bytes, num_handles) =
7299                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7300
7301            let member_inline_size = match ordinal {
7302            1 => <fidl_fuchsia_media::SbcEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7303            2 => <fidl_fuchsia_media::AacEncoderSettings as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7304            0 => return Err(fidl::Error::UnknownUnionTag),
7305            _ => num_bytes as usize,
7306        };
7307
7308            if inlined != (member_inline_size <= 4) {
7309                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7310            }
7311            let _inner_offset;
7312            if inlined {
7313                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7314                _inner_offset = offset + 8;
7315            } else {
7316                depth.increment()?;
7317                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7318            }
7319            match ordinal {
7320                1 => {
7321                    #[allow(irrefutable_let_patterns)]
7322                    if let AudioEncoderSettings::Sbc(_) = self {
7323                        // Do nothing, read the value into the object
7324                    } else {
7325                        // Initialize `self` to the right variant
7326                        *self = AudioEncoderSettings::Sbc(fidl::new_empty!(
7327                            fidl_fuchsia_media::SbcEncoderSettings,
7328                            D
7329                        ));
7330                    }
7331                    #[allow(irrefutable_let_patterns)]
7332                    if let AudioEncoderSettings::Sbc(ref mut val) = self {
7333                        fidl::decode!(
7334                            fidl_fuchsia_media::SbcEncoderSettings,
7335                            D,
7336                            val,
7337                            decoder,
7338                            _inner_offset,
7339                            depth
7340                        )?;
7341                    } else {
7342                        unreachable!()
7343                    }
7344                }
7345                2 => {
7346                    #[allow(irrefutable_let_patterns)]
7347                    if let AudioEncoderSettings::Aac(_) = self {
7348                        // Do nothing, read the value into the object
7349                    } else {
7350                        // Initialize `self` to the right variant
7351                        *self = AudioEncoderSettings::Aac(fidl::new_empty!(
7352                            fidl_fuchsia_media::AacEncoderSettings,
7353                            D
7354                        ));
7355                    }
7356                    #[allow(irrefutable_let_patterns)]
7357                    if let AudioEncoderSettings::Aac(ref mut val) = self {
7358                        fidl::decode!(
7359                            fidl_fuchsia_media::AacEncoderSettings,
7360                            D,
7361                            val,
7362                            decoder,
7363                            _inner_offset,
7364                            depth
7365                        )?;
7366                    } else {
7367                        unreachable!()
7368                    }
7369                }
7370                #[allow(deprecated)]
7371                ordinal => {
7372                    for _ in 0..num_handles {
7373                        decoder.drop_next_handle()?;
7374                    }
7375                    *self = AudioEncoderSettings::__SourceBreaking { unknown_ordinal: ordinal };
7376                }
7377            }
7378            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
7379                return Err(fidl::Error::InvalidNumBytesInEnvelope);
7380            }
7381            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7382                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7383            }
7384            Ok(())
7385        }
7386    }
7387
7388    impl fidl::encoding::ValueTypeMarker for AudioOffloadFeatures {
7389        type Borrowed<'a> = &'a Self;
7390        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7391            value
7392        }
7393    }
7394
7395    unsafe impl fidl::encoding::TypeMarker for AudioOffloadFeatures {
7396        type Owned = Self;
7397
7398        #[inline(always)]
7399        fn inline_align(_context: fidl::encoding::Context) -> usize {
7400            8
7401        }
7402
7403        #[inline(always)]
7404        fn inline_size(_context: fidl::encoding::Context) -> usize {
7405            16
7406        }
7407    }
7408
7409    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AudioOffloadFeatures, D>
7410        for &AudioOffloadFeatures
7411    {
7412        #[inline]
7413        unsafe fn encode(
7414            self,
7415            encoder: &mut fidl::encoding::Encoder<'_, D>,
7416            offset: usize,
7417            _depth: fidl::encoding::Depth,
7418        ) -> fidl::Result<()> {
7419            encoder.debug_check_bounds::<AudioOffloadFeatures>(offset);
7420            encoder.write_num::<u64>(self.ordinal(), offset);
7421            match self {
7422                AudioOffloadFeatures::Sbc(ref val) => {
7423                    fidl::encoding::encode_in_envelope::<AudioSbcSupport, D>(
7424                        <AudioSbcSupport as fidl::encoding::ValueTypeMarker>::borrow(val),
7425                        encoder,
7426                        offset + 8,
7427                        _depth,
7428                    )
7429                }
7430                AudioOffloadFeatures::Aac(ref val) => {
7431                    fidl::encoding::encode_in_envelope::<AudioAacSupport, D>(
7432                        <AudioAacSupport as fidl::encoding::ValueTypeMarker>::borrow(val),
7433                        encoder,
7434                        offset + 8,
7435                        _depth,
7436                    )
7437                }
7438                AudioOffloadFeatures::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7439            }
7440        }
7441    }
7442
7443    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AudioOffloadFeatures {
7444        #[inline(always)]
7445        fn new_empty() -> Self {
7446            Self::__SourceBreaking { unknown_ordinal: 0 }
7447        }
7448
7449        #[inline]
7450        unsafe fn decode(
7451            &mut self,
7452            decoder: &mut fidl::encoding::Decoder<'_, D>,
7453            offset: usize,
7454            mut depth: fidl::encoding::Depth,
7455        ) -> fidl::Result<()> {
7456            decoder.debug_check_bounds::<Self>(offset);
7457            #[allow(unused_variables)]
7458            let next_out_of_line = decoder.next_out_of_line();
7459            let handles_before = decoder.remaining_handles();
7460            let (ordinal, inlined, num_bytes, num_handles) =
7461                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7462
7463            let member_inline_size = match ordinal {
7464                1 => <AudioSbcSupport as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7465                2 => <AudioAacSupport as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7466                0 => return Err(fidl::Error::UnknownUnionTag),
7467                _ => num_bytes as usize,
7468            };
7469
7470            if inlined != (member_inline_size <= 4) {
7471                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7472            }
7473            let _inner_offset;
7474            if inlined {
7475                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7476                _inner_offset = offset + 8;
7477            } else {
7478                depth.increment()?;
7479                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7480            }
7481            match ordinal {
7482                1 => {
7483                    #[allow(irrefutable_let_patterns)]
7484                    if let AudioOffloadFeatures::Sbc(_) = self {
7485                        // Do nothing, read the value into the object
7486                    } else {
7487                        // Initialize `self` to the right variant
7488                        *self = AudioOffloadFeatures::Sbc(fidl::new_empty!(AudioSbcSupport, D));
7489                    }
7490                    #[allow(irrefutable_let_patterns)]
7491                    if let AudioOffloadFeatures::Sbc(ref mut val) = self {
7492                        fidl::decode!(AudioSbcSupport, D, val, decoder, _inner_offset, depth)?;
7493                    } else {
7494                        unreachable!()
7495                    }
7496                }
7497                2 => {
7498                    #[allow(irrefutable_let_patterns)]
7499                    if let AudioOffloadFeatures::Aac(_) = self {
7500                        // Do nothing, read the value into the object
7501                    } else {
7502                        // Initialize `self` to the right variant
7503                        *self = AudioOffloadFeatures::Aac(fidl::new_empty!(AudioAacSupport, D));
7504                    }
7505                    #[allow(irrefutable_let_patterns)]
7506                    if let AudioOffloadFeatures::Aac(ref mut val) = self {
7507                        fidl::decode!(AudioAacSupport, D, val, decoder, _inner_offset, depth)?;
7508                    } else {
7509                        unreachable!()
7510                    }
7511                }
7512                #[allow(deprecated)]
7513                ordinal => {
7514                    for _ in 0..num_handles {
7515                        decoder.drop_next_handle()?;
7516                    }
7517                    *self = AudioOffloadFeatures::__SourceBreaking { unknown_ordinal: ordinal };
7518                }
7519            }
7520            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
7521                return Err(fidl::Error::InvalidNumBytesInEnvelope);
7522            }
7523            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7524                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7525            }
7526            Ok(())
7527        }
7528    }
7529
7530    impl fidl::encoding::ValueTypeMarker for ConnectParameters {
7531        type Borrowed<'a> = &'a Self;
7532        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7533            value
7534        }
7535    }
7536
7537    unsafe impl fidl::encoding::TypeMarker for ConnectParameters {
7538        type Owned = Self;
7539
7540        #[inline(always)]
7541        fn inline_align(_context: fidl::encoding::Context) -> usize {
7542            8
7543        }
7544
7545        #[inline(always)]
7546        fn inline_size(_context: fidl::encoding::Context) -> usize {
7547            16
7548        }
7549    }
7550
7551    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ConnectParameters, D>
7552        for &ConnectParameters
7553    {
7554        #[inline]
7555        unsafe fn encode(
7556            self,
7557            encoder: &mut fidl::encoding::Encoder<'_, D>,
7558            offset: usize,
7559            _depth: fidl::encoding::Depth,
7560        ) -> fidl::Result<()> {
7561            encoder.debug_check_bounds::<ConnectParameters>(offset);
7562            encoder.write_num::<u64>(self.ordinal(), offset);
7563            match self {
7564                ConnectParameters::L2cap(ref val) => {
7565                    fidl::encoding::encode_in_envelope::<L2capParameters, D>(
7566                        <L2capParameters as fidl::encoding::ValueTypeMarker>::borrow(val),
7567                        encoder,
7568                        offset + 8,
7569                        _depth,
7570                    )
7571                }
7572                ConnectParameters::Rfcomm(ref val) => {
7573                    fidl::encoding::encode_in_envelope::<RfcommParameters, D>(
7574                        <RfcommParameters as fidl::encoding::ValueTypeMarker>::borrow(val),
7575                        encoder,
7576                        offset + 8,
7577                        _depth,
7578                    )
7579                }
7580            }
7581        }
7582    }
7583
7584    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ConnectParameters {
7585        #[inline(always)]
7586        fn new_empty() -> Self {
7587            Self::L2cap(fidl::new_empty!(L2capParameters, D))
7588        }
7589
7590        #[inline]
7591        unsafe fn decode(
7592            &mut self,
7593            decoder: &mut fidl::encoding::Decoder<'_, D>,
7594            offset: usize,
7595            mut depth: fidl::encoding::Depth,
7596        ) -> fidl::Result<()> {
7597            decoder.debug_check_bounds::<Self>(offset);
7598            #[allow(unused_variables)]
7599            let next_out_of_line = decoder.next_out_of_line();
7600            let handles_before = decoder.remaining_handles();
7601            let (ordinal, inlined, num_bytes, num_handles) =
7602                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7603
7604            let member_inline_size = match ordinal {
7605                1 => <L2capParameters as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7606                2 => <RfcommParameters as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7607                _ => return Err(fidl::Error::UnknownUnionTag),
7608            };
7609
7610            if inlined != (member_inline_size <= 4) {
7611                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7612            }
7613            let _inner_offset;
7614            if inlined {
7615                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7616                _inner_offset = offset + 8;
7617            } else {
7618                depth.increment()?;
7619                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7620            }
7621            match ordinal {
7622                1 => {
7623                    #[allow(irrefutable_let_patterns)]
7624                    if let ConnectParameters::L2cap(_) = self {
7625                        // Do nothing, read the value into the object
7626                    } else {
7627                        // Initialize `self` to the right variant
7628                        *self = ConnectParameters::L2cap(fidl::new_empty!(L2capParameters, D));
7629                    }
7630                    #[allow(irrefutable_let_patterns)]
7631                    if let ConnectParameters::L2cap(ref mut val) = self {
7632                        fidl::decode!(L2capParameters, D, val, decoder, _inner_offset, depth)?;
7633                    } else {
7634                        unreachable!()
7635                    }
7636                }
7637                2 => {
7638                    #[allow(irrefutable_let_patterns)]
7639                    if let ConnectParameters::Rfcomm(_) = self {
7640                        // Do nothing, read the value into the object
7641                    } else {
7642                        // Initialize `self` to the right variant
7643                        *self = ConnectParameters::Rfcomm(fidl::new_empty!(RfcommParameters, D));
7644                    }
7645                    #[allow(irrefutable_let_patterns)]
7646                    if let ConnectParameters::Rfcomm(ref mut val) = self {
7647                        fidl::decode!(RfcommParameters, D, val, decoder, _inner_offset, depth)?;
7648                    } else {
7649                        unreachable!()
7650                    }
7651                }
7652                ordinal => panic!("unexpected ordinal {:?}", ordinal),
7653            }
7654            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
7655                return Err(fidl::Error::InvalidNumBytesInEnvelope);
7656            }
7657            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7658                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7659            }
7660            Ok(())
7661        }
7662    }
7663
7664    impl fidl::encoding::ValueTypeMarker for DataElement {
7665        type Borrowed<'a> = &'a Self;
7666        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7667            value
7668        }
7669    }
7670
7671    unsafe impl fidl::encoding::TypeMarker for DataElement {
7672        type Owned = Self;
7673
7674        #[inline(always)]
7675        fn inline_align(_context: fidl::encoding::Context) -> usize {
7676            8
7677        }
7678
7679        #[inline(always)]
7680        fn inline_size(_context: fidl::encoding::Context) -> usize {
7681            16
7682        }
7683    }
7684
7685    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DataElement, D>
7686        for &DataElement
7687    {
7688        #[inline]
7689        unsafe fn encode(
7690            self,
7691            encoder: &mut fidl::encoding::Encoder<'_, D>,
7692            offset: usize,
7693            _depth: fidl::encoding::Depth,
7694        ) -> fidl::Result<()> {
7695            encoder.debug_check_bounds::<DataElement>(offset);
7696            encoder.write_num::<u64>(self.ordinal(), offset);
7697            match self {
7698            DataElement::Int8(ref val) => {
7699                fidl::encoding::encode_in_envelope::<i8, D>(
7700                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(val),
7701                    encoder, offset + 8, _depth
7702                )
7703            }
7704            DataElement::Int16(ref val) => {
7705                fidl::encoding::encode_in_envelope::<i16, D>(
7706                    <i16 as fidl::encoding::ValueTypeMarker>::borrow(val),
7707                    encoder, offset + 8, _depth
7708                )
7709            }
7710            DataElement::Int32(ref val) => {
7711                fidl::encoding::encode_in_envelope::<i32, D>(
7712                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(val),
7713                    encoder, offset + 8, _depth
7714                )
7715            }
7716            DataElement::Int64(ref val) => {
7717                fidl::encoding::encode_in_envelope::<i64, D>(
7718                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
7719                    encoder, offset + 8, _depth
7720                )
7721            }
7722            DataElement::Uint8(ref val) => {
7723                fidl::encoding::encode_in_envelope::<u8, D>(
7724                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(val),
7725                    encoder, offset + 8, _depth
7726                )
7727            }
7728            DataElement::Uint16(ref val) => {
7729                fidl::encoding::encode_in_envelope::<u16, D>(
7730                    <u16 as fidl::encoding::ValueTypeMarker>::borrow(val),
7731                    encoder, offset + 8, _depth
7732                )
7733            }
7734            DataElement::Uint32(ref val) => {
7735                fidl::encoding::encode_in_envelope::<u32, D>(
7736                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
7737                    encoder, offset + 8, _depth
7738                )
7739            }
7740            DataElement::Uint64(ref val) => {
7741                fidl::encoding::encode_in_envelope::<u64, D>(
7742                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
7743                    encoder, offset + 8, _depth
7744                )
7745            }
7746            DataElement::Str(ref val) => {
7747                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<u8, 1024>, D>(
7748                    <fidl::encoding::Vector<u8, 1024> as fidl::encoding::ValueTypeMarker>::borrow(val),
7749                    encoder, offset + 8, _depth
7750                )
7751            }
7752            DataElement::Url(ref val) => {
7753                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4096>, D>(
7754                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(val),
7755                    encoder, offset + 8, _depth
7756                )
7757            }
7758            DataElement::Uuid(ref val) => {
7759                fidl::encoding::encode_in_envelope::<fidl_fuchsia_bluetooth::Uuid, D>(
7760                    <fidl_fuchsia_bluetooth::Uuid as fidl::encoding::ValueTypeMarker>::borrow(val),
7761                    encoder, offset + 8, _depth
7762                )
7763            }
7764            DataElement::B(ref val) => {
7765                fidl::encoding::encode_in_envelope::<bool, D>(
7766                    <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
7767                    encoder, offset + 8, _depth
7768                )
7769            }
7770            DataElement::Sequence(ref val) => {
7771                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255>, D>(
7772                    <fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255> as fidl::encoding::ValueTypeMarker>::borrow(val),
7773                    encoder, offset + 8, _depth
7774                )
7775            }
7776            DataElement::Alternatives(ref val) => {
7777                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255>, D>(
7778                    <fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255> as fidl::encoding::ValueTypeMarker>::borrow(val),
7779                    encoder, offset + 8, _depth
7780                )
7781            }
7782            DataElement::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7783        }
7784        }
7785    }
7786
7787    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DataElement {
7788        #[inline(always)]
7789        fn new_empty() -> Self {
7790            Self::__SourceBreaking { unknown_ordinal: 0 }
7791        }
7792
7793        #[inline]
7794        unsafe fn decode(
7795            &mut self,
7796            decoder: &mut fidl::encoding::Decoder<'_, D>,
7797            offset: usize,
7798            mut depth: fidl::encoding::Depth,
7799        ) -> fidl::Result<()> {
7800            decoder.debug_check_bounds::<Self>(offset);
7801            #[allow(unused_variables)]
7802            let next_out_of_line = decoder.next_out_of_line();
7803            let handles_before = decoder.remaining_handles();
7804            let (ordinal, inlined, num_bytes, num_handles) =
7805                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7806
7807            let member_inline_size = match ordinal {
7808            1 => <i8 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7809            2 => <i16 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7810            3 => <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7811            4 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7812            5 => <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7813            6 => <u16 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7814            7 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7815            8 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7816            9 => <fidl::encoding::Vector<u8, 1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7817            10 => <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7818            11 => <fidl_fuchsia_bluetooth::Uuid as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7819            12 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7820            13 => <fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7821            14 => <fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7822            0 => return Err(fidl::Error::UnknownUnionTag),
7823            _ => num_bytes as usize,
7824        };
7825
7826            if inlined != (member_inline_size <= 4) {
7827                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7828            }
7829            let _inner_offset;
7830            if inlined {
7831                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7832                _inner_offset = offset + 8;
7833            } else {
7834                depth.increment()?;
7835                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7836            }
7837            match ordinal {
7838                1 => {
7839                    #[allow(irrefutable_let_patterns)]
7840                    if let DataElement::Int8(_) = self {
7841                        // Do nothing, read the value into the object
7842                    } else {
7843                        // Initialize `self` to the right variant
7844                        *self = DataElement::Int8(fidl::new_empty!(i8, D));
7845                    }
7846                    #[allow(irrefutable_let_patterns)]
7847                    if let DataElement::Int8(ref mut val) = self {
7848                        fidl::decode!(i8, D, val, decoder, _inner_offset, depth)?;
7849                    } else {
7850                        unreachable!()
7851                    }
7852                }
7853                2 => {
7854                    #[allow(irrefutable_let_patterns)]
7855                    if let DataElement::Int16(_) = self {
7856                        // Do nothing, read the value into the object
7857                    } else {
7858                        // Initialize `self` to the right variant
7859                        *self = DataElement::Int16(fidl::new_empty!(i16, D));
7860                    }
7861                    #[allow(irrefutable_let_patterns)]
7862                    if let DataElement::Int16(ref mut val) = self {
7863                        fidl::decode!(i16, D, val, decoder, _inner_offset, depth)?;
7864                    } else {
7865                        unreachable!()
7866                    }
7867                }
7868                3 => {
7869                    #[allow(irrefutable_let_patterns)]
7870                    if let DataElement::Int32(_) = self {
7871                        // Do nothing, read the value into the object
7872                    } else {
7873                        // Initialize `self` to the right variant
7874                        *self = DataElement::Int32(fidl::new_empty!(i32, D));
7875                    }
7876                    #[allow(irrefutable_let_patterns)]
7877                    if let DataElement::Int32(ref mut val) = self {
7878                        fidl::decode!(i32, D, val, decoder, _inner_offset, depth)?;
7879                    } else {
7880                        unreachable!()
7881                    }
7882                }
7883                4 => {
7884                    #[allow(irrefutable_let_patterns)]
7885                    if let DataElement::Int64(_) = self {
7886                        // Do nothing, read the value into the object
7887                    } else {
7888                        // Initialize `self` to the right variant
7889                        *self = DataElement::Int64(fidl::new_empty!(i64, D));
7890                    }
7891                    #[allow(irrefutable_let_patterns)]
7892                    if let DataElement::Int64(ref mut val) = self {
7893                        fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
7894                    } else {
7895                        unreachable!()
7896                    }
7897                }
7898                5 => {
7899                    #[allow(irrefutable_let_patterns)]
7900                    if let DataElement::Uint8(_) = self {
7901                        // Do nothing, read the value into the object
7902                    } else {
7903                        // Initialize `self` to the right variant
7904                        *self = DataElement::Uint8(fidl::new_empty!(u8, D));
7905                    }
7906                    #[allow(irrefutable_let_patterns)]
7907                    if let DataElement::Uint8(ref mut val) = self {
7908                        fidl::decode!(u8, D, val, decoder, _inner_offset, depth)?;
7909                    } else {
7910                        unreachable!()
7911                    }
7912                }
7913                6 => {
7914                    #[allow(irrefutable_let_patterns)]
7915                    if let DataElement::Uint16(_) = self {
7916                        // Do nothing, read the value into the object
7917                    } else {
7918                        // Initialize `self` to the right variant
7919                        *self = DataElement::Uint16(fidl::new_empty!(u16, D));
7920                    }
7921                    #[allow(irrefutable_let_patterns)]
7922                    if let DataElement::Uint16(ref mut val) = self {
7923                        fidl::decode!(u16, D, val, decoder, _inner_offset, depth)?;
7924                    } else {
7925                        unreachable!()
7926                    }
7927                }
7928                7 => {
7929                    #[allow(irrefutable_let_patterns)]
7930                    if let DataElement::Uint32(_) = self {
7931                        // Do nothing, read the value into the object
7932                    } else {
7933                        // Initialize `self` to the right variant
7934                        *self = DataElement::Uint32(fidl::new_empty!(u32, D));
7935                    }
7936                    #[allow(irrefutable_let_patterns)]
7937                    if let DataElement::Uint32(ref mut val) = self {
7938                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
7939                    } else {
7940                        unreachable!()
7941                    }
7942                }
7943                8 => {
7944                    #[allow(irrefutable_let_patterns)]
7945                    if let DataElement::Uint64(_) = self {
7946                        // Do nothing, read the value into the object
7947                    } else {
7948                        // Initialize `self` to the right variant
7949                        *self = DataElement::Uint64(fidl::new_empty!(u64, D));
7950                    }
7951                    #[allow(irrefutable_let_patterns)]
7952                    if let DataElement::Uint64(ref mut val) = self {
7953                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
7954                    } else {
7955                        unreachable!()
7956                    }
7957                }
7958                9 => {
7959                    #[allow(irrefutable_let_patterns)]
7960                    if let DataElement::Str(_) = self {
7961                        // Do nothing, read the value into the object
7962                    } else {
7963                        // Initialize `self` to the right variant
7964                        *self =
7965                            DataElement::Str(fidl::new_empty!(fidl::encoding::Vector<u8, 1024>, D));
7966                    }
7967                    #[allow(irrefutable_let_patterns)]
7968                    if let DataElement::Str(ref mut val) = self {
7969                        fidl::decode!(fidl::encoding::Vector<u8, 1024>, D, val, decoder, _inner_offset, depth)?;
7970                    } else {
7971                        unreachable!()
7972                    }
7973                }
7974                10 => {
7975                    #[allow(irrefutable_let_patterns)]
7976                    if let DataElement::Url(_) = self {
7977                        // Do nothing, read the value into the object
7978                    } else {
7979                        // Initialize `self` to the right variant
7980                        *self = DataElement::Url(fidl::new_empty!(
7981                            fidl::encoding::BoundedString<4096>,
7982                            D
7983                        ));
7984                    }
7985                    #[allow(irrefutable_let_patterns)]
7986                    if let DataElement::Url(ref mut val) = self {
7987                        fidl::decode!(
7988                            fidl::encoding::BoundedString<4096>,
7989                            D,
7990                            val,
7991                            decoder,
7992                            _inner_offset,
7993                            depth
7994                        )?;
7995                    } else {
7996                        unreachable!()
7997                    }
7998                }
7999                11 => {
8000                    #[allow(irrefutable_let_patterns)]
8001                    if let DataElement::Uuid(_) = self {
8002                        // Do nothing, read the value into the object
8003                    } else {
8004                        // Initialize `self` to the right variant
8005                        *self =
8006                            DataElement::Uuid(fidl::new_empty!(fidl_fuchsia_bluetooth::Uuid, D));
8007                    }
8008                    #[allow(irrefutable_let_patterns)]
8009                    if let DataElement::Uuid(ref mut val) = self {
8010                        fidl::decode!(
8011                            fidl_fuchsia_bluetooth::Uuid,
8012                            D,
8013                            val,
8014                            decoder,
8015                            _inner_offset,
8016                            depth
8017                        )?;
8018                    } else {
8019                        unreachable!()
8020                    }
8021                }
8022                12 => {
8023                    #[allow(irrefutable_let_patterns)]
8024                    if let DataElement::B(_) = self {
8025                        // Do nothing, read the value into the object
8026                    } else {
8027                        // Initialize `self` to the right variant
8028                        *self = DataElement::B(fidl::new_empty!(bool, D));
8029                    }
8030                    #[allow(irrefutable_let_patterns)]
8031                    if let DataElement::B(ref mut val) = self {
8032                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
8033                    } else {
8034                        unreachable!()
8035                    }
8036                }
8037                13 => {
8038                    #[allow(irrefutable_let_patterns)]
8039                    if let DataElement::Sequence(_) = self {
8040                        // Do nothing, read the value into the object
8041                    } else {
8042                        // Initialize `self` to the right variant
8043                        *self = DataElement::Sequence(fidl::new_empty!(
8044                            fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255>,
8045                            D
8046                        ));
8047                    }
8048                    #[allow(irrefutable_let_patterns)]
8049                    if let DataElement::Sequence(ref mut val) = self {
8050                        fidl::decode!(
8051                            fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255>,
8052                            D,
8053                            val,
8054                            decoder,
8055                            _inner_offset,
8056                            depth
8057                        )?;
8058                    } else {
8059                        unreachable!()
8060                    }
8061                }
8062                14 => {
8063                    #[allow(irrefutable_let_patterns)]
8064                    if let DataElement::Alternatives(_) = self {
8065                        // Do nothing, read the value into the object
8066                    } else {
8067                        // Initialize `self` to the right variant
8068                        *self = DataElement::Alternatives(fidl::new_empty!(
8069                            fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255>,
8070                            D
8071                        ));
8072                    }
8073                    #[allow(irrefutable_let_patterns)]
8074                    if let DataElement::Alternatives(ref mut val) = self {
8075                        fidl::decode!(
8076                            fidl::encoding::Vector<fidl::encoding::OptionalUnion<DataElement>, 255>,
8077                            D,
8078                            val,
8079                            decoder,
8080                            _inner_offset,
8081                            depth
8082                        )?;
8083                    } else {
8084                        unreachable!()
8085                    }
8086                }
8087                #[allow(deprecated)]
8088                ordinal => {
8089                    for _ in 0..num_handles {
8090                        decoder.drop_next_handle()?;
8091                    }
8092                    *self = DataElement::__SourceBreaking { unknown_ordinal: ordinal };
8093                }
8094            }
8095            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8096                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8097            }
8098            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8099                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8100            }
8101            Ok(())
8102        }
8103    }
8104
8105    impl fidl::encoding::ValueTypeMarker for ScoConnectionOnConnectionCompleteRequest {
8106        type Borrowed<'a> = &'a Self;
8107        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8108            value
8109        }
8110    }
8111
8112    unsafe impl fidl::encoding::TypeMarker for ScoConnectionOnConnectionCompleteRequest {
8113        type Owned = Self;
8114
8115        #[inline(always)]
8116        fn inline_align(_context: fidl::encoding::Context) -> usize {
8117            8
8118        }
8119
8120        #[inline(always)]
8121        fn inline_size(_context: fidl::encoding::Context) -> usize {
8122            16
8123        }
8124    }
8125
8126    unsafe impl<D: fidl::encoding::ResourceDialect>
8127        fidl::encoding::Encode<ScoConnectionOnConnectionCompleteRequest, D>
8128        for &ScoConnectionOnConnectionCompleteRequest
8129    {
8130        #[inline]
8131        unsafe fn encode(
8132            self,
8133            encoder: &mut fidl::encoding::Encoder<'_, D>,
8134            offset: usize,
8135            _depth: fidl::encoding::Depth,
8136        ) -> fidl::Result<()> {
8137            encoder.debug_check_bounds::<ScoConnectionOnConnectionCompleteRequest>(offset);
8138            encoder.write_num::<u64>(self.ordinal(), offset);
8139            match self {
8140                ScoConnectionOnConnectionCompleteRequest::ConnectedParams(ref val) => {
8141                    fidl::encoding::encode_in_envelope::<ScoConnectionParameters, D>(
8142                        <ScoConnectionParameters as fidl::encoding::ValueTypeMarker>::borrow(val),
8143                        encoder,
8144                        offset + 8,
8145                        _depth,
8146                    )
8147                }
8148                ScoConnectionOnConnectionCompleteRequest::Error(ref val) => {
8149                    fidl::encoding::encode_in_envelope::<ScoErrorCode, D>(
8150                        <ScoErrorCode as fidl::encoding::ValueTypeMarker>::borrow(val),
8151                        encoder,
8152                        offset + 8,
8153                        _depth,
8154                    )
8155                }
8156                ScoConnectionOnConnectionCompleteRequest::__SourceBreaking { .. } => {
8157                    Err(fidl::Error::UnknownUnionTag)
8158                }
8159            }
8160        }
8161    }
8162
8163    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
8164        for ScoConnectionOnConnectionCompleteRequest
8165    {
8166        #[inline(always)]
8167        fn new_empty() -> Self {
8168            Self::__SourceBreaking { unknown_ordinal: 0 }
8169        }
8170
8171        #[inline]
8172        unsafe fn decode(
8173            &mut self,
8174            decoder: &mut fidl::encoding::Decoder<'_, D>,
8175            offset: usize,
8176            mut depth: fidl::encoding::Depth,
8177        ) -> fidl::Result<()> {
8178            decoder.debug_check_bounds::<Self>(offset);
8179            #[allow(unused_variables)]
8180            let next_out_of_line = decoder.next_out_of_line();
8181            let handles_before = decoder.remaining_handles();
8182            let (ordinal, inlined, num_bytes, num_handles) =
8183                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8184
8185            let member_inline_size = match ordinal {
8186                1 => <ScoConnectionParameters as fidl::encoding::TypeMarker>::inline_size(
8187                    decoder.context,
8188                ),
8189                2 => <ScoErrorCode as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8190                0 => return Err(fidl::Error::UnknownUnionTag),
8191                _ => num_bytes as usize,
8192            };
8193
8194            if inlined != (member_inline_size <= 4) {
8195                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8196            }
8197            let _inner_offset;
8198            if inlined {
8199                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8200                _inner_offset = offset + 8;
8201            } else {
8202                depth.increment()?;
8203                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8204            }
8205            match ordinal {
8206                1 => {
8207                    #[allow(irrefutable_let_patterns)]
8208                    if let ScoConnectionOnConnectionCompleteRequest::ConnectedParams(_) = self {
8209                        // Do nothing, read the value into the object
8210                    } else {
8211                        // Initialize `self` to the right variant
8212                        *self = ScoConnectionOnConnectionCompleteRequest::ConnectedParams(
8213                            fidl::new_empty!(ScoConnectionParameters, D),
8214                        );
8215                    }
8216                    #[allow(irrefutable_let_patterns)]
8217                    if let ScoConnectionOnConnectionCompleteRequest::ConnectedParams(ref mut val) =
8218                        self
8219                    {
8220                        fidl::decode!(
8221                            ScoConnectionParameters,
8222                            D,
8223                            val,
8224                            decoder,
8225                            _inner_offset,
8226                            depth
8227                        )?;
8228                    } else {
8229                        unreachable!()
8230                    }
8231                }
8232                2 => {
8233                    #[allow(irrefutable_let_patterns)]
8234                    if let ScoConnectionOnConnectionCompleteRequest::Error(_) = self {
8235                        // Do nothing, read the value into the object
8236                    } else {
8237                        // Initialize `self` to the right variant
8238                        *self = ScoConnectionOnConnectionCompleteRequest::Error(fidl::new_empty!(
8239                            ScoErrorCode,
8240                            D
8241                        ));
8242                    }
8243                    #[allow(irrefutable_let_patterns)]
8244                    if let ScoConnectionOnConnectionCompleteRequest::Error(ref mut val) = self {
8245                        fidl::decode!(ScoErrorCode, D, val, decoder, _inner_offset, depth)?;
8246                    } else {
8247                        unreachable!()
8248                    }
8249                }
8250                #[allow(deprecated)]
8251                ordinal => {
8252                    for _ in 0..num_handles {
8253                        decoder.drop_next_handle()?;
8254                    }
8255                    *self = ScoConnectionOnConnectionCompleteRequest::__SourceBreaking {
8256                        unknown_ordinal: ordinal,
8257                    };
8258                }
8259            }
8260            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8261                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8262            }
8263            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8264                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8265            }
8266            Ok(())
8267        }
8268    }
8269}