Skip to main content

fidl_fuchsia_hardware_audio__common/
fidl_fuchsia_hardware_audio__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 ClockDomain = u32;
12
13pub type ElementId = u64;
14
15pub type TopologyId = u64;
16
17/// UniqueId arrays starting with 0x42, 0x54, ... (or `BT` in ASCII) are
18/// reserved for drivers implementing Bluetooth technologies.
19/// UniqueId arrays starting with 0x55, 0x53, 0x42, ... (or `USB` in ASCII) are
20/// reserved for drivers implementing USB technologies.
21/// Note that even though the above values map to readable ASCII characters, array
22/// values can span the entire uint8 range (0-255).
23pub type UniqueId = [u8; 16];
24
25pub type VmoId = u64;
26
27pub const CLOCK_DOMAIN_EXTERNAL: u32 = 4294967295;
28
29pub const CLOCK_DOMAIN_MONOTONIC: u32 = 0;
30
31pub const MAX_COUNT_CHANNELS_IN_RING_BUFFER: u32 = 64;
32
33pub const MAX_COUNT_CHANNEL_SETS: u32 = 64;
34
35pub const MAX_COUNT_DAI_FORMATS: u32 = MAX_COUNT_FORMATS as u32;
36
37pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SAMPLE: u32 = 8;
38
39pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SLOT: u32 = 8;
40
41pub const MAX_COUNT_DAI_SUPPORTED_FRAME_FORMATS: u32 = 64;
42
43pub const MAX_COUNT_DAI_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
44
45pub const MAX_COUNT_DAI_SUPPORTED_RATES: u32 = 64;
46
47pub const MAX_COUNT_DAI_SUPPORTED_SAMPLE_FORMATS: u32 = 4;
48
49pub const MAX_COUNT_ENCODED_CHANNEL_SETS: u32 = 64;
50
51pub const MAX_COUNT_ENCODED_SUPPORTED_RATES: u32 = 64;
52
53pub const MAX_COUNT_ENCODED_TYPES: u32 = 64;
54
55pub const MAX_COUNT_FORMATS: u32 = 64;
56
57pub const MAX_COUNT_SUPPORTED_BYTES_PER_SAMPLE: u32 = 8;
58
59pub const MAX_COUNT_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
60
61pub const MAX_COUNT_SUPPORTED_RATES: u32 = 64;
62
63pub const MAX_COUNT_SUPPORTED_SAMPLE_FORMATS: u32 = 3;
64
65pub const MAX_COUNT_SUPPORTED_VALID_BITS_PER_SAMPLE: u32 = 8;
66
67pub const MAX_DAI_UI_STRING_SIZE: u32 = 256;
68
69pub const MAX_INLINE_TRANSFER_SIZE: u64 = 8192;
70
71pub const MAX_UI_STRING_SIZE: u32 = 256;
72
73pub const UNIQUE_ID_SIZE: u32 = 16;
74
75/// The maximum number of VMOs that can be registered or allocated.
76pub const VMO_VECTOR_MAX: u32 = 256;
77
78bitflags! {
79    /// Types of buffer ownership/transfer supported by the stream.
80    /// Multiple values can be supported by the driver.
81    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
82    pub struct BufferType: u64 {
83        /// The client allocates the VMO and registers it with the driver.
84        const CLIENT_OWNED = 1;
85        /// The driver allocates the VMO and passes handles to the client.
86        const DRIVER_OWNED = 2;
87        /// Data is sent inline within the FIDL message.
88        /// This can be used exclusively (standalone) without allocating or registering VMOs,
89        /// or mixed in-stream with packets of other buffer types.
90        const INLINE = 4;
91    }
92}
93
94impl BufferType {
95    #[inline(always)]
96    pub fn from_bits_allow_unknown(bits: u64) -> Self {
97        Self::from_bits_retain(bits)
98    }
99
100    #[inline(always)]
101    pub fn has_unknown_bits(&self) -> bool {
102        self.get_unknown_bits() != 0
103    }
104
105    #[inline(always)]
106    pub fn get_unknown_bits(&self) -> u64 {
107        self.bits() & !Self::all().bits()
108    }
109}
110
111/// Standard Frame format.
112#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
113#[repr(u8)]
114pub enum DaiFrameFormatStandard {
115    /// No frame format as in samples without a frame sync like PDM.
116    None = 1,
117    /// Format as specified in the I2S specification (left justified, 2 channels, 32 bits per
118    /// sample, frame sync stays low for the left channel and high for the right channel, data
119    /// starts one clock cycle after frame sync changes clocked out at the falling edge of sclk).
120    I2S = 2,
121    /// Left justified, 2 channels. Data starts at frame sync changes from low to high clocked out
122    /// at the falling edge of sclk. The frame sync must stay high for `bits_per_sample` bits for
123    /// the first channel and low for `bits_per_sample` bits for the second channel.
124    StereoLeft = 3,
125    /// Right justified, 2 channels. The frame sync must stay high for `bits_per_sample` bits for
126    /// the first channel and low for `bits_per_sample` bits for the second channel.
127    StereoRight = 4,
128    /// Left justified, variable number of channels, data starts at frame sync changes from low to
129    /// high clocked out at the rising edge of sclk. The frame sync must stay high for exactly 1
130    /// clock cycle.
131    Tdm1 = 5,
132    /// Left justified, variable number of channels, data starts one clock cycle after the frame
133    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
134    /// stay high for exactly 1 clock cycle.
135    Tdm2 = 6,
136    /// Left justified, variable number of channels, data starts two clock cycles after the frame
137    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
138    /// stay high for exactly 1 clock cycle.
139    Tdm3 = 7,
140}
141
142impl DaiFrameFormatStandard {
143    #[inline]
144    pub fn from_primitive(prim: u8) -> Option<Self> {
145        match prim {
146            1 => Some(Self::None),
147            2 => Some(Self::I2S),
148            3 => Some(Self::StereoLeft),
149            4 => Some(Self::StereoRight),
150            5 => Some(Self::Tdm1),
151            6 => Some(Self::Tdm2),
152            7 => Some(Self::Tdm3),
153            _ => None,
154        }
155    }
156
157    #[inline]
158    pub const fn into_primitive(self) -> u8 {
159        self as u8
160    }
161}
162
163#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
164#[repr(u8)]
165pub enum DaiSampleFormat {
166    /// Pulse Density Modulation samples.
167    Pdm = 1,
168    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
169    PcmSigned = 2,
170    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
171    PcmUnsigned = 3,
172    /// Floating point samples, encoded per the IEEE-754 standard.
173    PcmFloat = 4,
174}
175
176impl DaiSampleFormat {
177    #[inline]
178    pub fn from_primitive(prim: u8) -> Option<Self> {
179        match prim {
180            1 => Some(Self::Pdm),
181            2 => Some(Self::PcmSigned),
182            3 => Some(Self::PcmUnsigned),
183            4 => Some(Self::PcmFloat),
184            _ => None,
185        }
186    }
187
188    #[inline]
189    pub const fn into_primitive(self) -> u8 {
190        self as u8
191    }
192}
193
194#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
195pub enum DeviceType {
196    /// Device supports the fuchsia.hardware.audio/StreamConfig protocol.
197    StreamConfig,
198    /// Device supports the fuchsia.hardware.audio/Dai protocol.
199    Dai,
200    /// Device supports the fuchsia.hardware.audio/Codec protocol.
201    Codec,
202    /// Device supports the fuchsia.hardware.audio/Composite protocol.
203    Composite,
204    #[doc(hidden)]
205    __SourceBreaking { unknown_ordinal: u32 },
206}
207
208/// Pattern that matches an unknown `DeviceType` member.
209#[macro_export]
210macro_rules! DeviceTypeUnknown {
211    () => {
212        _
213    };
214}
215
216impl DeviceType {
217    #[inline]
218    pub fn from_primitive(prim: u32) -> Option<Self> {
219        match prim {
220            1 => Some(Self::StreamConfig),
221            2 => Some(Self::Dai),
222            3 => Some(Self::Codec),
223            4 => Some(Self::Composite),
224            _ => None,
225        }
226    }
227
228    #[inline]
229    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
230        match prim {
231            1 => Self::StreamConfig,
232            2 => Self::Dai,
233            3 => Self::Codec,
234            4 => Self::Composite,
235            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
236        }
237    }
238
239    #[inline]
240    pub fn unknown() -> Self {
241        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
242    }
243
244    #[inline]
245    pub const fn into_primitive(self) -> u32 {
246        match self {
247            Self::StreamConfig => 1,
248            Self::Dai => 2,
249            Self::Codec => 3,
250            Self::Composite => 4,
251            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
252        }
253    }
254
255    #[inline]
256    pub fn is_unknown(&self) -> bool {
257        match self {
258            Self::__SourceBreaking { unknown_ordinal: _ } => true,
259            _ => false,
260        }
261    }
262}
263
264#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
265pub enum DriverError {
266    /// The driver encountered an otherwise unspecified error while performing the operation.
267    InternalError,
268    /// The operation is not implemented, supported, or enabled.
269    NotSupported,
270    /// An argument is invalid.
271    InvalidArgs,
272    /// The subject of the operation is the wrong type to perform the operation.
273    WrongType,
274    /// The operation cannot be performed currently but potentially could succeed if
275    /// the caller waits for a prerequisite to be satisfied.
276    ShouldWait,
277    /// A fatal error has occurred in the driver. The connection is no longer
278    /// usable and the client should close it.
279    FatalError,
280    #[doc(hidden)]
281    __SourceBreaking { unknown_ordinal: u32 },
282}
283
284/// Pattern that matches an unknown `DriverError` member.
285#[macro_export]
286macro_rules! DriverErrorUnknown {
287    () => {
288        _
289    };
290}
291
292impl DriverError {
293    #[inline]
294    pub fn from_primitive(prim: u32) -> Option<Self> {
295        match prim {
296            1 => Some(Self::InternalError),
297            2 => Some(Self::NotSupported),
298            3 => Some(Self::InvalidArgs),
299            4 => Some(Self::WrongType),
300            5 => Some(Self::ShouldWait),
301            6 => Some(Self::FatalError),
302            _ => None,
303        }
304    }
305
306    #[inline]
307    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
308        match prim {
309            1 => Self::InternalError,
310            2 => Self::NotSupported,
311            3 => Self::InvalidArgs,
312            4 => Self::WrongType,
313            5 => Self::ShouldWait,
314            6 => Self::FatalError,
315            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
316        }
317    }
318
319    #[inline]
320    pub fn unknown() -> Self {
321        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
322    }
323
324    #[inline]
325    pub const fn into_primitive(self) -> u32 {
326        match self {
327            Self::InternalError => 1,
328            Self::NotSupported => 2,
329            Self::InvalidArgs => 3,
330            Self::WrongType => 4,
331            Self::ShouldWait => 5,
332            Self::FatalError => 6,
333            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
334        }
335    }
336
337    #[inline]
338    pub fn is_unknown(&self) -> bool {
339        match self {
340            Self::__SourceBreaking { unknown_ordinal: _ } => true,
341            _ => false,
342        }
343    }
344}
345
346/// The type of encoding used for the stream.
347#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
348pub enum EncodingType {
349    Aac,
350    Sbc,
351    #[doc(hidden)]
352    __SourceBreaking {
353        unknown_ordinal: u32,
354    },
355}
356
357/// Pattern that matches an unknown `EncodingType` member.
358#[macro_export]
359macro_rules! EncodingTypeUnknown {
360    () => {
361        _
362    };
363}
364
365impl EncodingType {
366    #[inline]
367    pub fn from_primitive(prim: u32) -> Option<Self> {
368        match prim {
369            1 => Some(Self::Aac),
370            2 => Some(Self::Sbc),
371            _ => None,
372        }
373    }
374
375    #[inline]
376    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
377        match prim {
378            1 => Self::Aac,
379            2 => Self::Sbc,
380            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
381        }
382    }
383
384    #[inline]
385    pub fn unknown() -> Self {
386        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
387    }
388
389    #[inline]
390    pub const fn into_primitive(self) -> u32 {
391        match self {
392            Self::Aac => 1,
393            Self::Sbc => 2,
394            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
395        }
396    }
397
398    #[inline]
399    pub fn is_unknown(&self) -> bool {
400        match self {
401            Self::__SourceBreaking { unknown_ordinal: _ } => true,
402            _ => false,
403        }
404    }
405}
406
407#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
408#[repr(u32)]
409pub enum GetVmoError {
410    /// The ring buffer setup failed due to an invalid argument, e.g. min_frames is too big.
411    InvalidArgs = 1,
412    /// The ring buffer setup failed due to an internal error.
413    InternalError = 2,
414}
415
416impl GetVmoError {
417    #[inline]
418    pub fn from_primitive(prim: u32) -> Option<Self> {
419        match prim {
420            1 => Some(Self::InvalidArgs),
421            2 => Some(Self::InternalError),
422            _ => None,
423        }
424    }
425
426    #[inline]
427    pub const fn into_primitive(self) -> u32 {
428        self as u32
429    }
430}
431
432#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
433#[repr(u32)]
434pub enum PlugDetectCapabilities {
435    /// Driver is hardwired (will always be plugged in).
436    Hardwired = 0,
437    /// Driver is able to asynchronously notify of plug state changes.
438    CanAsyncNotify = 1,
439}
440
441impl PlugDetectCapabilities {
442    #[inline]
443    pub fn from_primitive(prim: u32) -> Option<Self> {
444        match prim {
445            0 => Some(Self::Hardwired),
446            1 => Some(Self::CanAsyncNotify),
447            _ => None,
448        }
449    }
450
451    #[inline]
452    pub const fn into_primitive(self) -> u32 {
453        self as u32
454    }
455}
456
457#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
458#[repr(u8)]
459pub enum SampleFormat {
460    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
461    PcmSigned = 1,
462    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
463    PcmUnsigned = 2,
464    /// Floating point samples, encoded per the IEEE-754 standard.
465    PcmFloat = 3,
466}
467
468impl SampleFormat {
469    #[inline]
470    pub fn from_primitive(prim: u8) -> Option<Self> {
471        match prim {
472            1 => Some(Self::PcmSigned),
473            2 => Some(Self::PcmUnsigned),
474            3 => Some(Self::PcmFloat),
475            _ => None,
476        }
477    }
478
479    #[inline]
480    pub const fn into_primitive(self) -> u8 {
481        self as u8
482    }
483}
484
485/// Identifies devices that are unique within the system.
486/// A UniqueId for these devices consists of the enum value followed by (UNIQUE_ID_SIZE - 1) zeroes.
487#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
488pub enum SingularUniqueId {
489    Dsp,
490    BuiltinSpeaker,
491    BuiltinHeadphoneJack,
492    BuiltinMicrophone,
493    BuiltinHeadsetJack,
494    #[doc(hidden)]
495    __SourceBreaking {
496        unknown_ordinal: u8,
497    },
498}
499
500/// Pattern that matches an unknown `SingularUniqueId` member.
501#[macro_export]
502macro_rules! SingularUniqueIdUnknown {
503    () => {
504        _
505    };
506}
507
508impl SingularUniqueId {
509    #[inline]
510    pub fn from_primitive(prim: u8) -> Option<Self> {
511        match prim {
512            0 => Some(Self::Dsp),
513            1 => Some(Self::BuiltinSpeaker),
514            2 => Some(Self::BuiltinHeadphoneJack),
515            3 => Some(Self::BuiltinMicrophone),
516            4 => Some(Self::BuiltinHeadsetJack),
517            _ => None,
518        }
519    }
520
521    #[inline]
522    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
523        match prim {
524            0 => Self::Dsp,
525            1 => Self::BuiltinSpeaker,
526            2 => Self::BuiltinHeadphoneJack,
527            3 => Self::BuiltinMicrophone,
528            4 => Self::BuiltinHeadsetJack,
529            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
530        }
531    }
532
533    #[inline]
534    pub fn unknown() -> Self {
535        Self::__SourceBreaking { unknown_ordinal: 0xff }
536    }
537
538    #[inline]
539    pub const fn into_primitive(self) -> u8 {
540        match self {
541            Self::Dsp => 0,
542            Self::BuiltinSpeaker => 1,
543            Self::BuiltinHeadphoneJack => 2,
544            Self::BuiltinMicrophone => 3,
545            Self::BuiltinHeadsetJack => 4,
546            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
547        }
548    }
549
550    #[inline]
551    pub fn is_unknown(&self) -> bool {
552        match self {
553            Self::__SourceBreaking { unknown_ordinal: _ } => true,
554            _ => false,
555        }
556    }
557}
558
559#[derive(Clone, Debug, PartialEq)]
560pub struct CodecGetPropertiesResponse {
561    pub properties: CodecProperties,
562}
563
564impl fidl::Persistable for CodecGetPropertiesResponse {}
565
566#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
567pub struct CodecSetDaiFormatRequest {
568    pub format: DaiFormat,
569}
570
571impl fidl::Persistable for CodecSetDaiFormatRequest {}
572
573#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
574#[repr(C)]
575pub struct CodecStartResponse {
576    pub start_time: i64,
577}
578
579impl fidl::Persistable for CodecStartResponse {}
580
581#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
582#[repr(C)]
583pub struct CodecStopResponse {
584    pub stop_time: i64,
585}
586
587impl fidl::Persistable for CodecStopResponse {}
588
589#[derive(Clone, Debug, PartialEq)]
590pub struct CodecWatchPlugStateResponse {
591    pub plug_state: PlugState,
592}
593
594impl fidl::Persistable for CodecWatchPlugStateResponse {}
595
596#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
597pub struct CodecGetDaiFormatsResponse {
598    pub formats: Vec<DaiSupportedFormats>,
599}
600
601impl fidl::Persistable for CodecGetDaiFormatsResponse {}
602
603#[derive(Clone, Debug, PartialEq)]
604pub struct CodecSetDaiFormatResponse {
605    pub state: CodecFormatInfo,
606}
607
608impl fidl::Persistable for CodecSetDaiFormatResponse {}
609
610#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
611#[repr(C)]
612pub struct CompositeGetDaiFormatsRequest {
613    pub processing_element_id: u64,
614}
615
616impl fidl::Persistable for CompositeGetDaiFormatsRequest {}
617
618#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
619#[repr(C)]
620pub struct CompositeGetPacketStreamFormatsRequest {
621    pub processing_element_id: u64,
622}
623
624impl fidl::Persistable for CompositeGetPacketStreamFormatsRequest {}
625
626#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
627#[repr(C)]
628pub struct CompositeGetRingBufferFormatsRequest {
629    pub processing_element_id: u64,
630}
631
632impl fidl::Persistable for CompositeGetRingBufferFormatsRequest {}
633
634#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
635pub struct CompositeSetDaiFormatRequest {
636    pub processing_element_id: u64,
637    pub format: DaiFormat,
638}
639
640impl fidl::Persistable for CompositeSetDaiFormatRequest {}
641
642#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
643pub struct CompositeGetDaiFormatsResponse {
644    pub dai_formats: Vec<DaiSupportedFormats>,
645}
646
647impl fidl::Persistable for CompositeGetDaiFormatsResponse {}
648
649#[derive(Clone, Debug, PartialEq)]
650pub struct CompositeGetPacketStreamFormatsResponse {
651    pub packet_stream_formats: Vec<SupportedFormats2>,
652}
653
654impl fidl::Persistable for CompositeGetPacketStreamFormatsResponse {}
655
656#[derive(Clone, Debug, PartialEq)]
657pub struct CompositeGetPropertiesResponse {
658    pub properties: CompositeProperties,
659}
660
661impl fidl::Persistable for CompositeGetPropertiesResponse {}
662
663#[derive(Clone, Debug, PartialEq)]
664pub struct CompositeGetRingBufferFormatsResponse {
665    pub ring_buffer_formats: Vec<SupportedFormats2>,
666}
667
668impl fidl::Persistable for CompositeGetRingBufferFormatsResponse {}
669
670/// DAI format. Frames are made up of `number_of_channels` samples which have `bits_per_sample` bits
671/// of data within `bits_per_slot` arranged in `frame_format`. For more detailed information see
672/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
673#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
674pub struct DaiFormat {
675    /// Number of channels.
676    /// Must be 2, if `frame_format` is DaiFrameFormatStandard::I2S, STEREO_LEFT or STEREO_RIGHT.
677    pub number_of_channels: u32,
678    /// Sets which channels are active via a bitmask.
679    /// The least significant bit corresponds to channel index 0.
680    /// Must not set bits beyond the least-significant `number_of_channels` bits.
681    pub channels_to_use_bitmask: u64,
682    /// The sample format of all samples.
683    pub sample_format: DaiSampleFormat,
684    /// The frame format of all samples.
685    pub frame_format: DaiFrameFormat,
686    /// The frame rate for all samples.
687    pub frame_rate: u32,
688    /// The bits per slot for all channels.
689    pub bits_per_slot: u8,
690    /// The bits per sample for each channel.
691    /// Must be smaller than `bits_per_slot` for all samples to fit.
692    pub bits_per_sample: u8,
693}
694
695impl fidl::Persistable for DaiFormat {}
696
697/// Custom Frame format.
698#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
699pub struct DaiFrameFormatCustom {
700    /// Justification of the samples within a slot.
701    pub left_justified: bool,
702    /// Clocking of data samples and frame sync output on either raising or falling sclk.
703    /// If true then the sclk raises on the raising edge of the data and frame sync, i.e.
704    /// the data will be sampled on the falling edge of sclk (the middle of the sclk cycle).
705    /// Hence, if false then data will be sampled on the raising edge of sclk.
706    pub sclk_on_raising: bool,
707    /// Number of sclks between the beginning of a frame sync change and audio samples.
708    /// For example, for I2S set to 1 and for stereo left justified set to 0.
709    pub frame_sync_sclks_offset: i8,
710    /// Number of sclks the frame sync is high within a frame.
711    /// For example, for I2S with 32 bits slots set to 32, for TDM usually set to 1.
712    pub frame_sync_size: u8,
713}
714
715impl fidl::Persistable for DaiFrameFormatCustom {}
716
717#[derive(Clone, Debug, PartialEq)]
718pub struct DaiGetPropertiesResponse {
719    pub properties: DaiProperties,
720}
721
722impl fidl::Persistable for DaiGetPropertiesResponse {}
723
724/// Formats supported by the DAI. Frames are made up of `number_of_channels` samples which have
725/// `bits_per_sample` bits of data within `bits_per_slot` bits arranged in `frame_formats`.
726/// All values listed in each vector are supported. When not all combinations supported by the driver
727/// can be described with one `DaiSupportedFormats`, `GetDaiSupportedFormats` returns more than one
728/// `DaiSupportedFormats` in the returned vector.
729/// For more detailed information see
730/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
731#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
732pub struct DaiSupportedFormats {
733    /// Possible number of channels supported.
734    pub number_of_channels: Vec<u32>,
735    /// Sample formats supported.
736    pub sample_formats: Vec<DaiSampleFormat>,
737    /// Frame formats supported.
738    pub frame_formats: Vec<DaiFrameFormat>,
739    /// Rates supported. Values must be listed in ascending order.
740    pub frame_rates: Vec<u32>,
741    /// The bits per slot supported. Values must be listed in ascending order.
742    pub bits_per_slot: Vec<u8>,
743    /// Bits per sample supported. Values must be listed in ascending order.
744    pub bits_per_sample: Vec<u8>,
745}
746
747impl fidl::Persistable for DaiSupportedFormats {}
748
749#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
750pub struct DaiGetDaiFormatsResponse {
751    pub dai_formats: Vec<DaiSupportedFormats>,
752}
753
754impl fidl::Persistable for DaiGetDaiFormatsResponse {}
755
756#[derive(Clone, Debug, PartialEq)]
757pub struct DaiGetRingBufferFormatsResponse {
758    pub ring_buffer_formats: Vec<SupportedFormats>,
759}
760
761impl fidl::Persistable for DaiGetRingBufferFormatsResponse {}
762
763#[derive(Clone, Debug, PartialEq)]
764pub struct HealthGetHealthStateResponse {
765    pub state: HealthState,
766}
767
768impl fidl::Persistable for HealthGetHealthStateResponse {}
769
770#[derive(Clone, Debug, PartialEq)]
771pub struct PacketStreamControlGetPropertiesResponse {
772    pub properties: PacketStreamProperties,
773}
774
775impl fidl::Persistable for PacketStreamControlGetPropertiesResponse {}
776
777/// Format supporting PCM audio. Frames are made up of `number_of_channels` samples
778/// which have `valid_bits_per_sample` bits of most-significant (left-justified) data within
779/// `bytes_per_sample` bytes.
780///
781/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
782#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
783pub struct PcmFormat {
784    /// Number of channels.
785    pub number_of_channels: u8,
786    /// The format of all samples.
787    pub sample_format: SampleFormat,
788    /// Bytes allocated to hold a sample, must be greater than or equal to the valid sample size in
789    /// `valid_bits_per_sample`.
790    pub bytes_per_sample: u8,
791    /// Number of valid bits in a sample, must be less than or equal to `bytes_per_sample * 8`.
792    /// If less than `bytes_per_sample * 8`, the valid bits (those containing audio)
793    /// are left justified, and any additional bits must be ignored by the
794    /// receiver.
795    pub valid_bits_per_sample: u8,
796    /// The frame rate for all samples.
797    pub frame_rate: u32,
798}
799
800impl fidl::Persistable for PcmFormat {}
801
802#[derive(Clone, Debug, PartialEq)]
803pub struct RingBufferGetPropertiesResponse {
804    pub properties: RingBufferProperties,
805}
806
807impl fidl::Persistable for RingBufferGetPropertiesResponse {}
808
809#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
810#[repr(C)]
811pub struct RingBufferGetVmoRequest {
812    pub min_frames: u32,
813    pub clock_recovery_notifications_per_ring: u32,
814}
815
816impl fidl::Persistable for RingBufferGetVmoRequest {}
817
818#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
819#[repr(C)]
820pub struct RingBufferPositionInfo {
821    /// The driver's best estimate of the time (in the CLOCK_MONOTONIC timeline) at which the
822    /// playback/capture pointer reached the position indicated by `position`.
823    ///
824    /// `turn_on_delay` impact should not be incorporated into 'timestamp'.
825    /// No delays indicated in `DelayInfo` should be incorporated.
826    pub timestamp: i64,
827    /// The playback/capture pointer position (in bytes) in the ring buffer at time
828    /// `timestamp` as estimated by the driver.
829    pub position: u32,
830}
831
832impl fidl::Persistable for RingBufferPositionInfo {}
833
834#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
835#[repr(C)]
836pub struct RingBufferSetActiveChannelsRequest {
837    pub active_channels_bitmask: u64,
838}
839
840impl fidl::Persistable for RingBufferSetActiveChannelsRequest {}
841
842#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
843#[repr(C)]
844pub struct RingBufferStartResponse {
845    pub start_time: i64,
846}
847
848impl fidl::Persistable for RingBufferStartResponse {}
849
850#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
851#[repr(C)]
852pub struct RingBufferWatchClockRecoveryPositionInfoResponse {
853    pub position_info: RingBufferPositionInfo,
854}
855
856impl fidl::Persistable for RingBufferWatchClockRecoveryPositionInfoResponse {}
857
858#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
859#[repr(C)]
860pub struct RingBufferSetActiveChannelsResponse {
861    pub set_time: i64,
862}
863
864impl fidl::Persistable for RingBufferSetActiveChannelsResponse {}
865
866#[derive(Clone, Debug, PartialEq)]
867pub struct RingBufferWatchDelayInfoResponse {
868    pub delay_info: DelayInfo,
869}
870
871impl fidl::Persistable for RingBufferWatchDelayInfoResponse {}
872
873#[derive(Clone, Debug, PartialEq)]
874pub struct StreamConfigGetPropertiesResponse {
875    pub properties: StreamProperties,
876}
877
878impl fidl::Persistable for StreamConfigGetPropertiesResponse {}
879
880#[derive(Clone, Debug, PartialEq)]
881pub struct StreamConfigGetSupportedFormatsResponse {
882    pub supported_formats: Vec<SupportedFormats>,
883}
884
885impl fidl::Persistable for StreamConfigGetSupportedFormatsResponse {}
886
887#[derive(Clone, Debug, PartialEq)]
888pub struct StreamConfigSetGainRequest {
889    pub target_state: GainState,
890}
891
892impl fidl::Persistable for StreamConfigSetGainRequest {}
893
894#[derive(Clone, Debug, PartialEq)]
895pub struct StreamConfigWatchGainStateResponse {
896    pub gain_state: GainState,
897}
898
899impl fidl::Persistable for StreamConfigWatchGainStateResponse {}
900
901#[derive(Clone, Debug, PartialEq)]
902pub struct StreamConfigWatchPlugStateResponse {
903    pub plug_state: PlugState,
904}
905
906impl fidl::Persistable for StreamConfigWatchPlugStateResponse {}
907
908#[derive(Clone, Debug, Default, PartialEq)]
909pub struct AllocateVmosConfig {
910    /// The minimum size required for each VMO, in bytes.
911    ///
912    /// Required.
913    pub min_vmo_size: Option<u64>,
914    /// The number of VMOs to allocate.
915    ///
916    /// Required.
917    pub vmo_count: Option<u32>,
918    #[doc(hidden)]
919    pub __source_breaking: fidl::marker::SourceBreaking,
920}
921
922impl fidl::Persistable for AllocateVmosConfig {}
923
924/// The specification of a single channel, within the overall channel configuration.
925#[derive(Clone, Debug, Default, PartialEq)]
926pub struct ChannelAttributes {
927    /// Minimum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
928    /// If `min_frequency` is not included, then this channel is assumed to cover the entire
929    /// low-frequency range of this device.
930    ///
931    /// Optional.
932    pub min_frequency: Option<u32>,
933    /// Maximum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
934    /// If `max_frequency` is not included, then this channel is assumed to cover the entire
935    /// high-frequency range of this device.
936    ///
937    /// Optional.
938    pub max_frequency: Option<u32>,
939    #[doc(hidden)]
940    pub __source_breaking: fidl::marker::SourceBreaking,
941}
942
943impl fidl::Persistable for ChannelAttributes {}
944
945/// The specification of a channel configuration.
946#[derive(Clone, Debug, Default, PartialEq)]
947pub struct ChannelSet {
948    /// Describes attributes for this channel set.
949    /// The size of this vector defines the number of channels supported by this `ChannelSet`.
950    /// Each element of the `attributes` vector defines attributes of a single channel.
951    ///
952    /// Required.
953    pub attributes: Option<Vec<ChannelAttributes>>,
954    #[doc(hidden)]
955    pub __source_breaking: fidl::marker::SourceBreaking,
956}
957
958impl fidl::Persistable for ChannelSet {}
959
960/// Codec format information.
961#[derive(Clone, Debug, Default, PartialEq)]
962pub struct CodecFormatInfo {
963    /// The driver's best estimate of the external delay (in nanoseconds) present in the pipeline
964    /// for the chosen format. When precisely synchronizing presentation across multiple entities
965    /// (e.g. devices), the external delay should be taken into account.
966    /// If not included `external_delay` is unknown.
967    ///
968    /// Optional.
969    pub external_delay: Option<i64>,
970    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
971    /// actually start playback/capture after a `Start` command is issued.
972    /// It may take some time for the hardware to get into fully operational mode, for example due
973    /// a power state change. This delay must be taken into account if not getting the initial audio
974    /// samples played or captured is not acceptable.
975    /// If not included `turn_on_delay` is unknown.
976    ///
977    /// Optional.
978    pub turn_on_delay: Option<i64>,
979    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
980    /// actually stop playback/capture after a `Stop` command is issued.
981    /// It may take some time for the hardware to get into fully stopped mode, for example due
982    /// a power state change. This delay must be taken into account if playback/capture of samples
983    /// after a 'Stop' command is not acceptable.
984    /// If not included, the turn off delay is unknown.
985    ///
986    /// Optional.
987    pub turn_off_delay: Option<i64>,
988    #[doc(hidden)]
989    pub __source_breaking: fidl::marker::SourceBreaking,
990}
991
992impl fidl::Persistable for CodecFormatInfo {}
993
994#[derive(Clone, Debug, Default, PartialEq)]
995pub struct CodecProperties {
996    /// Driver type is input (true) or output (false)
997    /// If not included, then the driver may be used for both input and output.
998    ///
999    /// Optional.
1000    pub is_input: Option<bool>,
1001    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1002    /// If included, this string must be non-empty.
1003    ///
1004    /// Optional.
1005    pub manufacturer: Option<String>,
1006    /// UI string for the product name. If not included, the product name is unspecified.
1007    /// If included, this string must be non-empty.
1008    ///
1009    /// Optional.
1010    pub product: Option<String>,
1011    /// Unique identifier for the codec. If not included, there is no unique id for this Codec.
1012    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1013    ///
1014    /// Optional.
1015    pub unique_id: Option<[u8; 16]>,
1016    /// Plug Detect Capabilities.
1017    ///
1018    /// Required.
1019    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1020    #[doc(hidden)]
1021    pub __source_breaking: fidl::marker::SourceBreaking,
1022}
1023
1024impl fidl::Persistable for CodecProperties {}
1025
1026#[derive(Clone, Debug, Default, PartialEq)]
1027pub struct CompositeProperties {
1028    /// UI string for the manufacturer name. If not set, the manufacturer is unknown.
1029    /// If included, this string must be non-empty.
1030    ///
1031    /// Optional.
1032    pub manufacturer: Option<String>,
1033    /// UI string for the product name. If not set, the product name is unknown.
1034    /// If included, this string must be non-empty.
1035    ///
1036    /// Optional.
1037    pub product: Option<String>,
1038    /// A unique identifier. If not included, there is no unique id for this Device.
1039    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1040    ///
1041    /// Optional.
1042    pub unique_id: Option<[u8; 16]>,
1043    /// An identifier for the clock domain in which this hardware operates. If
1044    /// two hardware devices have the same clock domain, their clock rates are
1045    /// identical and perfectly synchronized. Although these two clocks have the
1046    /// same rate, the clock positions may be offset from each other by an
1047    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1048    /// system wide entity, such as a platform bus or global clock tree.
1049    ///
1050    /// There are two special values:
1051    ///
1052    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1053    ///    rate as the system montonic clock.
1054    ///
1055    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1056    ///    rate and is not synchronized with any known clock, not even with
1057    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1058    ///
1059    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1060    /// notification updates to recover the hardware's clock.
1061    ///
1062    /// Required.
1063    pub clock_domain: Option<u32>,
1064    #[doc(hidden)]
1065    pub __source_breaking: fidl::marker::SourceBreaking,
1066}
1067
1068impl fidl::Persistable for CompositeProperties {}
1069
1070#[derive(Clone, Debug, Default, PartialEq)]
1071pub struct DaiProperties {
1072    /// Driver type is input (true) or output (false)
1073    ///
1074    /// Required.
1075    pub is_input: Option<bool>,
1076    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1077    /// If included, this string must be non-empty.
1078    ///
1079    /// Optional.
1080    pub manufacturer: Option<String>,
1081    /// UI string for the product name. If not included, the product name is unspecified.
1082    /// If included, this string must be non-empty.
1083    ///
1084    /// Optional.
1085    pub product_name: Option<String>,
1086    /// A unique identifier for the DAI. If not included, there is no unique id for this DAI.
1087    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1088    ///
1089    /// Optional.
1090    pub unique_id: Option<[u8; 16]>,
1091    /// An identifier for the clock domain in which this hardware operates. If
1092    /// two hardware devices have the same clock domain, their clock rates are
1093    /// identical and perfectly synchronized. Although these two clocks have the
1094    /// same rate, the clock positions may be offset from each other by an
1095    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1096    /// system wide entity, such as a platform bus or global clock tree.
1097    ///
1098    /// There are two special values:
1099    ///
1100    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1101    ///    rate as the system montonic clock.
1102    ///
1103    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1104    ///    rate and is not synchronized with any known clock, not even with
1105    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1106    ///
1107    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1108    /// notification updates to recover the hardware's clock.
1109    ///
1110    /// Required.
1111    pub clock_domain: Option<u32>,
1112    #[doc(hidden)]
1113    pub __source_breaking: fidl::marker::SourceBreaking,
1114}
1115
1116impl fidl::Persistable for DaiProperties {}
1117
1118/// Delay information as returned by the driver.
1119#[derive(Clone, Debug, Default, PartialEq)]
1120pub struct DelayInfo {
1121    /// The driver's best estimate (for the chosen format) of the delay internal to the hardware it
1122    /// abstracts.
1123    ///
1124    /// "Internal" refers to the hardware between the DAI interconnect and the ring buffer (such as
1125    /// an SoC audio subsystem), whereas "external" refers to hardware on the far side of any DAI
1126    /// interconnect (such as hardware codecs).
1127    ///
1128    /// For a given frame during playback, this is any delay after the driver copies it out of the
1129    /// ring buffer, before it exits any interconnect.
1130    /// For a given frame during recording, this is any delay after it enters the interconnect,
1131    /// before the driver moves it into the ring buffer.
1132    ///
1133    /// `internal_delay` must be taken into account by the client when determining the requirements
1134    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1135    ///
1136    /// This delay must not include the inherent delay added by the temporary buffering needed
1137    /// to copy data in and out of the ring buffer, which is contained in `RingBufferProperties`
1138    /// field `driver_transfer_bytes`.
1139    ///
1140    /// Required.
1141    pub internal_delay: Option<i64>,
1142    /// The driver's best estimate (for the chosen format) of the delay external to the hardware it
1143    /// abstracts.
1144    ///
1145    /// "External" refers to hardware on the far side of any DAI interconnect (such as hardware
1146    /// codecs), whereas "internal" refers to hardware between the DAI interconnect and the ring
1147    /// buffer (such as an SoC audio subsystem).
1148    ///
1149    /// `external_delay` must be taken into account by the client when determining the requirements
1150    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1151    ///
1152    /// If not included, `external_delay` is unknown. If unknown, a client may treat it however it
1153    /// chooses (consider it zero or some large number, autodetect it, etc).
1154    ///
1155    /// Like `internal_delay`, this delay must not include the inherent delay added by the temporary
1156    /// buffering needed to copy data in and out of the ring buffer, which is contained in
1157    /// `RingBufferProperties` field `driver_transfer_bytes`.
1158    ///
1159    /// Optional.
1160    pub external_delay: Option<i64>,
1161    #[doc(hidden)]
1162    pub __source_breaking: fidl::marker::SourceBreaking,
1163}
1164
1165impl fidl::Persistable for DelayInfo {}
1166
1167/// Format specification for an encoded audio stream.
1168#[derive(Clone, Debug, Default, PartialEq)]
1169pub struct Encoding {
1170    /// Number of channels for the stream, once it is decoded.
1171    ///
1172    /// Required.
1173    pub decoded_channel_count: Option<u32>,
1174    /// The frame rate for the stream, once it is decoded. This is a hint for decoders.
1175    ///
1176    /// Optional.
1177    pub decoded_frame_rate: Option<u32>,
1178    /// The average bitrate of the stream in bits per second.
1179    ///
1180    /// Required.
1181    pub average_encoding_bitrate: Option<u32>,
1182    /// The encoding type for the stream.
1183    ///
1184    /// Required.
1185    pub encoding_type: Option<EncodingType>,
1186    #[doc(hidden)]
1187    pub __source_breaking: fidl::marker::SourceBreaking,
1188}
1189
1190impl fidl::Persistable for Encoding {}
1191
1192/// Deprecated: Use `Format2` instead.
1193#[derive(Clone, Debug, Default, PartialEq)]
1194pub struct Format {
1195    pub pcm_format: Option<PcmFormat>,
1196    #[doc(hidden)]
1197    pub __source_breaking: fidl::marker::SourceBreaking,
1198}
1199
1200impl fidl::Persistable for Format {}
1201
1202/// Gain state requested by the client or returned by the driver.
1203#[derive(Clone, Debug, Default, PartialEq)]
1204pub struct GainState {
1205    /// Current mute state. If not included, the state is unmuted.
1206    ///
1207    /// Optional.
1208    pub muted: Option<bool>,
1209    /// Current Automatic Gain Control (AGC) state. If not included, AGC is disabled.
1210    ///
1211    /// Optional.
1212    pub agc_enabled: Option<bool>,
1213    /// Current gain in decibels.
1214    ///
1215    /// Required.
1216    pub gain_db: Option<f32>,
1217    #[doc(hidden)]
1218    pub __source_breaking: fidl::marker::SourceBreaking,
1219}
1220
1221impl fidl::Persistable for GainState {}
1222
1223#[derive(Clone, Debug, Default, PartialEq)]
1224pub struct HealthState {
1225    /// Driver is currently healthy.
1226    /// No health information is provided if this field is not included.
1227    /// This allows drivers to signal their health state in scenarios where they have not enough
1228    /// capabilities or resources to recover on their own, for instance not able to power down the
1229    /// hardware via a GPIO or control over the power subsystem.
1230    ///
1231    /// Optional.
1232    pub healthy: Option<bool>,
1233    #[doc(hidden)]
1234    pub __source_breaking: fidl::marker::SourceBreaking,
1235}
1236
1237impl fidl::Persistable for HealthState {}
1238
1239/// Properties of the packet-stream. These values don't change once the packet-stream is created.
1240#[derive(Clone, Debug, Default, PartialEq)]
1241pub struct PacketStreamProperties {
1242    /// When set to true, indicates that the packet-stream runs in a different cache coherency
1243    /// domain. Clients must ensure data writes are flushed to main memory (during output)
1244    /// or invalidated before reading (during input).
1245    ///
1246    /// When set to false, the server and client are in the same coherency domain.
1247    /// Synchronization (e.g., fences) is still required to order reads and writes.
1248    ///
1249    /// Required.
1250    pub needs_cache_flush_or_invalidate: Option<bool>,
1251    /// The buffer methods supported by this driver.
1252    ///
1253    /// Required.
1254    pub supported_buffer_types: Option<BufferType>,
1255    #[doc(hidden)]
1256    pub __source_breaking: fidl::marker::SourceBreaking,
1257}
1258
1259impl fidl::Persistable for PacketStreamProperties {}
1260
1261#[derive(Clone, Debug, Default, PartialEq)]
1262pub struct PacketStreamSinkPutPacketResponse {
1263    #[doc(hidden)]
1264    pub __source_breaking: fidl::marker::SourceBreaking,
1265}
1266
1267impl fidl::Persistable for PacketStreamSinkPutPacketResponse {}
1268
1269/// Format supporting PCM audio. Each frame consists of one or more
1270/// (number_of_channels) samples, stored contiguously. Within the `bytes_per_sample` allocated for
1271/// each sample, `valid_bits_per_sample` bits of data are stored in the most-significant
1272/// (left-justified) portion.
1273///
1274/// All values listed in each vector are supported. This implies a cross-product: any listed
1275/// item in one vector is supported in combination with any listed item in another vector.
1276/// When not all combinations supported by the driver can be described with one
1277/// `PcmSupportedFormats` table, `GetSupportedFormats` must return a vector with multiple
1278/// `SupportedFormats` entries.
1279///
1280/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
1281#[derive(Clone, Debug, Default, PartialEq)]
1282pub struct PcmSupportedFormats {
1283    /// Vector of possible `ChannelSets` supported.
1284    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1285    /// of optional attributes.
1286    /// Only one `ChannelSet` is allowed for each unique channel-count. As a result, no two entries
1287    /// in `channel_sets` can contain `attributes` vectors with the same length.
1288    ///
1289    /// Required.
1290    pub channel_sets: Option<Vec<ChannelSet>>,
1291    /// Vector of possible `SampleFormat`s supported.
1292    /// Values in this vector must be unique.
1293    ///
1294    /// Required.
1295    pub sample_formats: Option<Vec<SampleFormat>>,
1296    /// Vector of possible bytes allocated for each sample. Values must be listed in ascending
1297    /// order. All values listed in `valid_bits_per_sample` must fit into at least the largest
1298    /// `bytes_per_sample` value.
1299    ///
1300    /// Required.
1301    pub bytes_per_sample: Option<Vec<u8>>,
1302    /// Vector of possible number of bits containing valid data, within the sample container defined
1303    /// by `bytes_per_sample`. Values must be listed in ascending order. All values listed must fit
1304    /// into the largest `bytes_per_sample` value. The valid data bits must be most-significant
1305    /// (left-justified) within the sample container, and any additional bits will be ignored.
1306    ///
1307    /// Required.
1308    pub valid_bits_per_sample: Option<Vec<u8>>,
1309    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1310    ///
1311    /// Required.
1312    pub frame_rates: Option<Vec<u32>>,
1313    #[doc(hidden)]
1314    pub __source_breaking: fidl::marker::SourceBreaking,
1315}
1316
1317impl fidl::Persistable for PcmSupportedFormats {}
1318
1319/// Plug state as returned by the driver.
1320/// If the driver reports a `plug_detect_capabilities` equal to HARDWIRED, then the driver should
1321/// respond to `WatchPlugState` only the first time it is called, with `plugged` set to true and
1322/// `plug_state_time` set to time '0'.
1323#[derive(Clone, Debug, Default, PartialEq)]
1324pub struct PlugState {
1325    /// Driver is currently plugged in. Required
1326    pub plugged: Option<bool>,
1327    /// Timestamps the information provided in the rest of the fields of this struct. Required.
1328    pub plug_state_time: Option<i64>,
1329    #[doc(hidden)]
1330    pub __source_breaking: fidl::marker::SourceBreaking,
1331}
1332
1333impl fidl::Persistable for PlugState {}
1334
1335/// Properties of the ring buffer. These values don't change once the ring buffer is created.
1336#[derive(Clone, Debug, Default, PartialEq)]
1337pub struct RingBufferProperties {
1338    /// When set to true, indicates that the ring buffer runs in a different cache coherency domain,
1339    /// and thus clients must ensure that their data writes are flushed all the way to main memory
1340    /// (during playback), or that their view of the ring buffer must be invalidated before any
1341    /// reads (during capture). This is because there may be hardware external to the CPUs that
1342    /// reads/writes main memory, bypassing the CPUs.
1343    ///
1344    /// When set to false, indicates that the ring buffer runs in the same cache coherency domain as
1345    /// the CPUs, hence the driver is not required to flush/invalidate the ring buffer.
1346    /// Note that in this case, the driver and client still must synchronize their data access, for
1347    /// instance by inserting the appropriate acquire fences before reading and releasing fences
1348    /// after writing, or (more commonly) by obeying the Producer/Consumer pattern described in
1349    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1350    ///
1351    /// Required.
1352    pub needs_cache_flush_or_invalidate: Option<bool>,
1353    /// The driver's best estimate of the time needed for the hardware to emit (during playback) or
1354    /// accept (during capture) frames, after a channel is activated by `SetActiveChannels`.
1355    ///
1356    /// The driver estimates that after `SetActiveChannels(channel)->(set_time)` enables a channel,
1357    /// its data will resume flowing at approximately `set_time` + `turn_on_delay`.
1358    /// Hardware can take time to become fully operational (e.g. due to a power state change, or
1359    /// communication delays between a Bluetooth driver's multiple hardware entities). The client
1360    /// must take this delay into account, if it is unacceptable to drop the actual audio frames
1361    /// and instead play/capture silence during this interval.
1362    /// If not included, `turn_on_delay` is unknown.
1363    ///
1364    /// Optional.
1365    pub turn_on_delay: Option<i64>,
1366    /// Size (in bytes) of the temporary buffers or FIFOs used by the driver when consuming or
1367    /// generating the ring buffer contents.
1368    ///
1369    /// The `driver_transfer_bytes` field is covered extensively in
1370    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1371    ///
1372    /// `driver_transfer_bytes` must not include the impact of delays caused by hardware or software
1373    /// processing abstracted by the driver. Those delays are communicated by `internal_delay` and
1374    /// `external_delay` fields in `DelayInfo`; they are orthogonal to this value.
1375    ///
1376    /// Required.
1377    pub driver_transfer_bytes: Option<u32>,
1378    #[doc(hidden)]
1379    pub __source_breaking: fidl::marker::SourceBreaking,
1380}
1381
1382impl fidl::Persistable for RingBufferProperties {}
1383
1384#[derive(Clone, Debug, Default, PartialEq)]
1385pub struct StreamProperties {
1386    /// A unique identifier. If not included, there is no unique id for this StreamConfig.
1387    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1388    ///
1389    /// Optional.
1390    pub unique_id: Option<[u8; 16]>,
1391    /// Driver type is input (true) or output (false)
1392    ///
1393    /// Required.
1394    pub is_input: Option<bool>,
1395    /// Gain mute capability. If not included, the StreamConfig can't mute.
1396    ///
1397    /// Optional.
1398    pub can_mute: Option<bool>,
1399    /// Automatic Gain Control (AGC) capability. If not included, the StreamConfig can't AGC.
1400    ///
1401    /// Optional.
1402    pub can_agc: Option<bool>,
1403    /// Minimum gain in decibels.
1404    ///
1405    /// Required.
1406    pub min_gain_db: Option<f32>,
1407    /// Maximum gain in decibels.
1408    ///
1409    /// Required.
1410    pub max_gain_db: Option<f32>,
1411    /// Gain step in decibels, this value must not be negative, but may be zero to convey an
1412    /// effectively continuous range of values. Must not exceed `max_gain_db` - `min_gain_db`.
1413    ///
1414    /// Required.
1415    pub gain_step_db: Option<f32>,
1416    /// Plug Detect Capabilities.
1417    ///
1418    /// Required.
1419    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1420    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1421    /// If included, this string must be non-empty.
1422    ///
1423    /// Optional.
1424    pub manufacturer: Option<String>,
1425    /// UI string for the product name. If not included, the product name is unspecified.
1426    /// If included, this string must be non-empty.
1427    ///
1428    /// Optional.
1429    pub product: Option<String>,
1430    /// An identifier for the clock domain in which this hardware operates. If
1431    /// two hardware devices have the same clock domain, their clock rates are
1432    /// identical and perfectly synchronized. Although these two clocks have the
1433    /// same rate, the clock positions may be offset from each other by an
1434    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1435    /// system wide entity, such as a platform bus or global clock tree.
1436    ///
1437    /// There are two special values:
1438    ///
1439    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1440    ///    rate as the system montonic clock.
1441    ///
1442    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1443    ///    rate and is not synchronized with any known clock, not even with
1444    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1445    ///
1446    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1447    /// notification updates to recover the hardware's clock.
1448    ///
1449    /// Required.
1450    pub clock_domain: Option<u32>,
1451    #[doc(hidden)]
1452    pub __source_breaking: fidl::marker::SourceBreaking,
1453}
1454
1455impl fidl::Persistable for StreamProperties {}
1456
1457/// Supported formats for encoded audio.
1458///
1459/// This table defines a valid set of configurations. All fields are independent, which
1460/// implies a cross-product: any listed `channel_set` is supported at any listed
1461/// `frame_rate` for any listed `encoded_type`.
1462///
1463/// If a device supports multiple encoders with *different* rate/channel constraints
1464/// (e.g. AAC supports 48kHz but SBC only supports 44.1kHz), the device must
1465/// report them as separate entries in the `SupportedFormats` vector.
1466#[derive(Clone, Debug, Default, PartialEq)]
1467pub struct SupportedEncodings {
1468    /// Vector of possible `ChannelSets` supported.
1469    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1470    /// of optional attributes.
1471    ///
1472    /// Each entry in this vector must describe a unique channel count. For example, this
1473    /// vector cannot contain two different `ChannelSet` entries that both apply to a
1474    /// 2-channel configuration.
1475    /// Values must be listed in ascending order of channel count.
1476    ///
1477    /// Required.
1478    pub decoded_channel_sets: Option<Vec<ChannelSet>>,
1479    /// Vector of possible frame rates supported.
1480    /// If present, must contain at least one value.
1481    /// Values must be listed in ascending order.
1482    ///
1483    /// Optional.
1484    pub decoded_frame_rates: Option<Vec<u32>>,
1485    /// The minimum encoding bitrate of the stream in bits per second.
1486    /// Cannot exceed 'max_encoding_bitrate', if both are present.
1487    ///
1488    /// Optional.
1489    pub min_encoding_bitrate: Option<u32>,
1490    /// The maximum encoding bitrate of the stream in bits per second.
1491    /// Cannot be less than 'min_encoding_bitrate', if both are present.
1492    ///
1493    /// Optional.
1494    pub max_encoding_bitrate: Option<u32>,
1495    /// The encoder types that support the configurations listed above.
1496    /// Must contain at least one value. Values in this vector must be unique.
1497    ///
1498    /// Required.
1499    pub encoding_types: Option<Vec<EncodingType>>,
1500    #[doc(hidden)]
1501    pub __source_breaking: fidl::marker::SourceBreaking,
1502}
1503
1504impl fidl::Persistable for SupportedEncodings {}
1505
1506/// Deprecated: Use `SupportedFormats2` instead.
1507#[derive(Clone, Debug, Default, PartialEq)]
1508pub struct SupportedFormats {
1509    pub pcm_supported_formats: Option<PcmSupportedFormats>,
1510    #[doc(hidden)]
1511    pub __source_breaking: fidl::marker::SourceBreaking,
1512}
1513
1514impl fidl::Persistable for SupportedFormats {}
1515
1516/// Either a standard or custom frame format.
1517#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1518pub enum DaiFrameFormat {
1519    /// The format type of all samples in the DAI, listed in `DaiFrameFormatStandard`.
1520    FrameFormatStandard(DaiFrameFormatStandard),
1521    /// The format type of all samples in the DAI, specified in `DaiFrameFormatCustom`.
1522    FrameFormatCustom(DaiFrameFormatCustom),
1523}
1524
1525impl DaiFrameFormat {
1526    #[inline]
1527    pub fn ordinal(&self) -> u64 {
1528        match *self {
1529            Self::FrameFormatStandard(_) => 1,
1530            Self::FrameFormatCustom(_) => 2,
1531        }
1532    }
1533}
1534
1535impl fidl::Persistable for DaiFrameFormat {}
1536
1537#[derive(Clone, Debug)]
1538pub enum Format2 {
1539    /// Format for linear PCM (uncompressed) samples.
1540    PcmFormat(PcmFormat),
1541    /// Format for encoded audio.
1542    Encoding(Encoding),
1543    #[doc(hidden)]
1544    __SourceBreaking { unknown_ordinal: u64 },
1545}
1546
1547/// Pattern that matches an unknown `Format2` member.
1548#[macro_export]
1549macro_rules! Format2Unknown {
1550    () => {
1551        _
1552    };
1553}
1554
1555// Custom PartialEq so that unknown variants are not equal to themselves.
1556impl PartialEq for Format2 {
1557    fn eq(&self, other: &Self) -> bool {
1558        match (self, other) {
1559            (Self::PcmFormat(x), Self::PcmFormat(y)) => *x == *y,
1560            (Self::Encoding(x), Self::Encoding(y)) => *x == *y,
1561            _ => false,
1562        }
1563    }
1564}
1565
1566impl Format2 {
1567    #[inline]
1568    pub fn ordinal(&self) -> u64 {
1569        match *self {
1570            Self::PcmFormat(_) => 1,
1571            Self::Encoding(_) => 2,
1572            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1573        }
1574    }
1575
1576    #[inline]
1577    pub fn unknown_variant_for_testing() -> Self {
1578        Self::__SourceBreaking { unknown_ordinal: 0 }
1579    }
1580
1581    #[inline]
1582    pub fn is_unknown(&self) -> bool {
1583        match self {
1584            Self::__SourceBreaking { .. } => true,
1585            _ => false,
1586        }
1587    }
1588}
1589
1590impl fidl::Persistable for Format2 {}
1591
1592/// All the possible formats supported by this device.
1593#[derive(Clone, Debug)]
1594pub enum SupportedFormats2 {
1595    /// Supported formats for linear PCM (uncompressed) samples, with attributes.
1596    PcmSupportedFormats(PcmSupportedFormats),
1597    /// Supported formats for non-LPCM encoded audio (e.g. AAC, MP3).
1598    SupportedEncodings(SupportedEncodings),
1599    #[doc(hidden)]
1600    __SourceBreaking { unknown_ordinal: u64 },
1601}
1602
1603/// Pattern that matches an unknown `SupportedFormats2` member.
1604#[macro_export]
1605macro_rules! SupportedFormats2Unknown {
1606    () => {
1607        _
1608    };
1609}
1610
1611// Custom PartialEq so that unknown variants are not equal to themselves.
1612impl PartialEq for SupportedFormats2 {
1613    fn eq(&self, other: &Self) -> bool {
1614        match (self, other) {
1615            (Self::PcmSupportedFormats(x), Self::PcmSupportedFormats(y)) => *x == *y,
1616            (Self::SupportedEncodings(x), Self::SupportedEncodings(y)) => *x == *y,
1617            _ => false,
1618        }
1619    }
1620}
1621
1622impl SupportedFormats2 {
1623    #[inline]
1624    pub fn ordinal(&self) -> u64 {
1625        match *self {
1626            Self::PcmSupportedFormats(_) => 1,
1627            Self::SupportedEncodings(_) => 2,
1628            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1629        }
1630    }
1631
1632    #[inline]
1633    pub fn unknown_variant_for_testing() -> Self {
1634        Self::__SourceBreaking { unknown_ordinal: 0 }
1635    }
1636
1637    #[inline]
1638    pub fn is_unknown(&self) -> bool {
1639        match self {
1640            Self::__SourceBreaking { .. } => true,
1641            _ => false,
1642        }
1643    }
1644}
1645
1646impl fidl::Persistable for SupportedFormats2 {}
1647
1648pub mod codec_ordinals {
1649    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1650    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1651    pub const RESET: u64 = 0x50757ae579a7bd6b;
1652    pub const GET_PROPERTIES: u64 = 0x7a0d138a6a1d9d90;
1653    pub const STOP: u64 = 0x5c2e380df1332dbd;
1654    pub const START: u64 = 0x329cdacb286ab00;
1655    pub const GET_DAI_FORMATS: u64 = 0xf8bbc46b4ba6a52;
1656    pub const SET_DAI_FORMAT: u64 = 0x2f829df9e5a7a1ea;
1657    pub const WATCH_PLUG_STATE: u64 = 0x182b87f935ca7326;
1658}
1659
1660pub mod codec_connector_ordinals {
1661    pub const CONNECT: u64 = 0x1413f551544026c9;
1662}
1663
1664pub mod composite_ordinals {
1665    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1666    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1667    pub const RESET: u64 = 0xac355fb98341996;
1668    pub const GET_PROPERTIES: u64 = 0x31846fa0a459942b;
1669    pub const GET_RING_BUFFER_FORMATS: u64 = 0x1d89b701b6816ac4;
1670    pub const CREATE_RING_BUFFER: u64 = 0x28c5685f85262033;
1671    pub const GET_DAI_FORMATS: u64 = 0x3cbeaed59c8f69b;
1672    pub const SET_DAI_FORMAT: u64 = 0x155acf5cc0dc8a84;
1673    pub const GET_PACKET_STREAM_FORMATS: u64 = 0x73cc47c6ad39bca7;
1674    pub const CREATE_PACKET_STREAM: u64 = 0x50e8902b756c707c;
1675}
1676
1677pub mod composite_connector_ordinals {
1678    pub const CONNECT: u64 = 0x7ee557529079e466;
1679}
1680
1681pub mod dai_ordinals {
1682    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1683    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1684    pub const RESET: u64 = 0x69e5fa9fa2f78c14;
1685    pub const GET_PROPERTIES: u64 = 0x2c25a1a66149510b;
1686    pub const GET_DAI_FORMATS: u64 = 0x1eb37b0cddf79d69;
1687    pub const GET_RING_BUFFER_FORMATS: u64 = 0x760371081d8c92e4;
1688    pub const CREATE_RING_BUFFER: u64 = 0x5af9760589a75257;
1689}
1690
1691pub mod dai_connector_ordinals {
1692    pub const CONNECT: u64 = 0x4e4db05c2eca1450;
1693}
1694
1695pub mod health_ordinals {
1696    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1697}
1698
1699pub mod packet_stream_control_ordinals {
1700    pub const GET_PROPERTIES: u64 = 0x586cf4f0f8d2771f;
1701    pub const ALLOCATE_VMOS: u64 = 0x7ff1473165ed344b;
1702    pub const DEALLOCATE_VMOS: u64 = 0x4db5cc85a7b8405b;
1703    pub const REGISTER_VMOS: u64 = 0x29c3b656a1020bfd;
1704    pub const UNREGISTER_VMOS: u64 = 0x3e3b4dbfe26b6094;
1705    pub const GET_PACKET_STREAM_SINK: u64 = 0x7394726463ebbc6a;
1706    pub const SET_PACKET_STREAM_SINK: u64 = 0xab88800e31dc0e4;
1707    pub const START: u64 = 0x3a584b94d8a6bfd0;
1708    pub const STOP: u64 = 0x703e4fafcdd7ef32;
1709}
1710
1711pub mod packet_stream_sink_ordinals {
1712    pub const PUT_PACKET: u64 = 0x25a8e35efba81f2b;
1713    pub const FLUSH_PACKETS: u64 = 0x13f16ca37ede8a4;
1714}
1715
1716pub mod ring_buffer_ordinals {
1717    pub const GET_PROPERTIES: u64 = 0x12947f061a8fe1;
1718    pub const WATCH_CLOCK_RECOVERY_POSITION_INFO: u64 = 0x694d5b898a4167e5;
1719    pub const GET_VMO: u64 = 0x44c8f4f5680e853a;
1720    pub const START: u64 = 0x5dd780a769a8892d;
1721    pub const STOP: u64 = 0x49a73d9cf1d4e110;
1722    pub const SET_ACTIVE_CHANNELS: u64 = 0x605464c1d384f309;
1723    pub const WATCH_DELAY_INFO: u64 = 0x6c1248db213fcf9f;
1724}
1725
1726pub mod stream_config_ordinals {
1727    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1728    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1729    pub const GET_PROPERTIES: u64 = 0x7d89c02f3e2d3c01;
1730    pub const GET_SUPPORTED_FORMATS: u64 = 0x448efa7850cafe7e;
1731    pub const CREATE_RING_BUFFER: u64 = 0x2afb19dd13faa1ba;
1732    pub const WATCH_GAIN_STATE: u64 = 0x4772506136ab65c1;
1733    pub const SET_GAIN: u64 = 0x3943b41498c6a384;
1734    pub const WATCH_PLUG_STATE: u64 = 0x497345a6f048b2a6;
1735}
1736
1737pub mod stream_config_connector_ordinals {
1738    pub const CONNECT: u64 = 0x22051ff3021eafec;
1739}
1740
1741mod internal {
1742    use super::*;
1743    unsafe impl fidl::encoding::TypeMarker for BufferType {
1744        type Owned = Self;
1745
1746        #[inline(always)]
1747        fn inline_align(_context: fidl::encoding::Context) -> usize {
1748            8
1749        }
1750
1751        #[inline(always)]
1752        fn inline_size(_context: fidl::encoding::Context) -> usize {
1753            8
1754        }
1755    }
1756
1757    impl fidl::encoding::ValueTypeMarker for BufferType {
1758        type Borrowed<'a> = Self;
1759        #[inline(always)]
1760        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1761            *value
1762        }
1763    }
1764
1765    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BufferType {
1766        #[inline]
1767        unsafe fn encode(
1768            self,
1769            encoder: &mut fidl::encoding::Encoder<'_, D>,
1770            offset: usize,
1771            _depth: fidl::encoding::Depth,
1772        ) -> fidl::Result<()> {
1773            encoder.debug_check_bounds::<Self>(offset);
1774            encoder.write_num(self.bits(), offset);
1775            Ok(())
1776        }
1777    }
1778
1779    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferType {
1780        #[inline(always)]
1781        fn new_empty() -> Self {
1782            Self::empty()
1783        }
1784
1785        #[inline]
1786        unsafe fn decode(
1787            &mut self,
1788            decoder: &mut fidl::encoding::Decoder<'_, D>,
1789            offset: usize,
1790            _depth: fidl::encoding::Depth,
1791        ) -> fidl::Result<()> {
1792            decoder.debug_check_bounds::<Self>(offset);
1793            let prim = decoder.read_num::<u64>(offset);
1794            *self = Self::from_bits_allow_unknown(prim);
1795            Ok(())
1796        }
1797    }
1798    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatStandard {
1799        type Owned = Self;
1800
1801        #[inline(always)]
1802        fn inline_align(_context: fidl::encoding::Context) -> usize {
1803            std::mem::align_of::<u8>()
1804        }
1805
1806        #[inline(always)]
1807        fn inline_size(_context: fidl::encoding::Context) -> usize {
1808            std::mem::size_of::<u8>()
1809        }
1810
1811        #[inline(always)]
1812        fn encode_is_copy() -> bool {
1813            true
1814        }
1815
1816        #[inline(always)]
1817        fn decode_is_copy() -> bool {
1818            false
1819        }
1820    }
1821
1822    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatStandard {
1823        type Borrowed<'a> = Self;
1824        #[inline(always)]
1825        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1826            *value
1827        }
1828    }
1829
1830    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1831        for DaiFrameFormatStandard
1832    {
1833        #[inline]
1834        unsafe fn encode(
1835            self,
1836            encoder: &mut fidl::encoding::Encoder<'_, D>,
1837            offset: usize,
1838            _depth: fidl::encoding::Depth,
1839        ) -> fidl::Result<()> {
1840            encoder.debug_check_bounds::<Self>(offset);
1841            encoder.write_num(self.into_primitive(), offset);
1842            Ok(())
1843        }
1844    }
1845
1846    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1847        for DaiFrameFormatStandard
1848    {
1849        #[inline(always)]
1850        fn new_empty() -> Self {
1851            Self::None
1852        }
1853
1854        #[inline]
1855        unsafe fn decode(
1856            &mut self,
1857            decoder: &mut fidl::encoding::Decoder<'_, D>,
1858            offset: usize,
1859            _depth: fidl::encoding::Depth,
1860        ) -> fidl::Result<()> {
1861            decoder.debug_check_bounds::<Self>(offset);
1862            let prim = decoder.read_num::<u8>(offset);
1863
1864            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1865            Ok(())
1866        }
1867    }
1868    unsafe impl fidl::encoding::TypeMarker for DaiSampleFormat {
1869        type Owned = Self;
1870
1871        #[inline(always)]
1872        fn inline_align(_context: fidl::encoding::Context) -> usize {
1873            std::mem::align_of::<u8>()
1874        }
1875
1876        #[inline(always)]
1877        fn inline_size(_context: fidl::encoding::Context) -> usize {
1878            std::mem::size_of::<u8>()
1879        }
1880
1881        #[inline(always)]
1882        fn encode_is_copy() -> bool {
1883            true
1884        }
1885
1886        #[inline(always)]
1887        fn decode_is_copy() -> bool {
1888            false
1889        }
1890    }
1891
1892    impl fidl::encoding::ValueTypeMarker for DaiSampleFormat {
1893        type Borrowed<'a> = Self;
1894        #[inline(always)]
1895        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1896            *value
1897        }
1898    }
1899
1900    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1901        for DaiSampleFormat
1902    {
1903        #[inline]
1904        unsafe fn encode(
1905            self,
1906            encoder: &mut fidl::encoding::Encoder<'_, D>,
1907            offset: usize,
1908            _depth: fidl::encoding::Depth,
1909        ) -> fidl::Result<()> {
1910            encoder.debug_check_bounds::<Self>(offset);
1911            encoder.write_num(self.into_primitive(), offset);
1912            Ok(())
1913        }
1914    }
1915
1916    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSampleFormat {
1917        #[inline(always)]
1918        fn new_empty() -> Self {
1919            Self::Pdm
1920        }
1921
1922        #[inline]
1923        unsafe fn decode(
1924            &mut self,
1925            decoder: &mut fidl::encoding::Decoder<'_, D>,
1926            offset: usize,
1927            _depth: fidl::encoding::Depth,
1928        ) -> fidl::Result<()> {
1929            decoder.debug_check_bounds::<Self>(offset);
1930            let prim = decoder.read_num::<u8>(offset);
1931
1932            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1933            Ok(())
1934        }
1935    }
1936    unsafe impl fidl::encoding::TypeMarker for DeviceType {
1937        type Owned = Self;
1938
1939        #[inline(always)]
1940        fn inline_align(_context: fidl::encoding::Context) -> usize {
1941            std::mem::align_of::<u32>()
1942        }
1943
1944        #[inline(always)]
1945        fn inline_size(_context: fidl::encoding::Context) -> usize {
1946            std::mem::size_of::<u32>()
1947        }
1948
1949        #[inline(always)]
1950        fn encode_is_copy() -> bool {
1951            false
1952        }
1953
1954        #[inline(always)]
1955        fn decode_is_copy() -> bool {
1956            false
1957        }
1958    }
1959
1960    impl fidl::encoding::ValueTypeMarker for DeviceType {
1961        type Borrowed<'a> = Self;
1962        #[inline(always)]
1963        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1964            *value
1965        }
1966    }
1967
1968    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
1969        #[inline]
1970        unsafe fn encode(
1971            self,
1972            encoder: &mut fidl::encoding::Encoder<'_, D>,
1973            offset: usize,
1974            _depth: fidl::encoding::Depth,
1975        ) -> fidl::Result<()> {
1976            encoder.debug_check_bounds::<Self>(offset);
1977            encoder.write_num(self.into_primitive(), offset);
1978            Ok(())
1979        }
1980    }
1981
1982    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
1983        #[inline(always)]
1984        fn new_empty() -> Self {
1985            Self::unknown()
1986        }
1987
1988        #[inline]
1989        unsafe fn decode(
1990            &mut self,
1991            decoder: &mut fidl::encoding::Decoder<'_, D>,
1992            offset: usize,
1993            _depth: fidl::encoding::Depth,
1994        ) -> fidl::Result<()> {
1995            decoder.debug_check_bounds::<Self>(offset);
1996            let prim = decoder.read_num::<u32>(offset);
1997
1998            *self = Self::from_primitive_allow_unknown(prim);
1999            Ok(())
2000        }
2001    }
2002    unsafe impl fidl::encoding::TypeMarker for DriverError {
2003        type Owned = Self;
2004
2005        #[inline(always)]
2006        fn inline_align(_context: fidl::encoding::Context) -> usize {
2007            std::mem::align_of::<u32>()
2008        }
2009
2010        #[inline(always)]
2011        fn inline_size(_context: fidl::encoding::Context) -> usize {
2012            std::mem::size_of::<u32>()
2013        }
2014
2015        #[inline(always)]
2016        fn encode_is_copy() -> bool {
2017            false
2018        }
2019
2020        #[inline(always)]
2021        fn decode_is_copy() -> bool {
2022            false
2023        }
2024    }
2025
2026    impl fidl::encoding::ValueTypeMarker for DriverError {
2027        type Borrowed<'a> = Self;
2028        #[inline(always)]
2029        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2030            *value
2031        }
2032    }
2033
2034    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DriverError {
2035        #[inline]
2036        unsafe fn encode(
2037            self,
2038            encoder: &mut fidl::encoding::Encoder<'_, D>,
2039            offset: usize,
2040            _depth: fidl::encoding::Depth,
2041        ) -> fidl::Result<()> {
2042            encoder.debug_check_bounds::<Self>(offset);
2043            encoder.write_num(self.into_primitive(), offset);
2044            Ok(())
2045        }
2046    }
2047
2048    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverError {
2049        #[inline(always)]
2050        fn new_empty() -> Self {
2051            Self::unknown()
2052        }
2053
2054        #[inline]
2055        unsafe fn decode(
2056            &mut self,
2057            decoder: &mut fidl::encoding::Decoder<'_, D>,
2058            offset: usize,
2059            _depth: fidl::encoding::Depth,
2060        ) -> fidl::Result<()> {
2061            decoder.debug_check_bounds::<Self>(offset);
2062            let prim = decoder.read_num::<u32>(offset);
2063
2064            *self = Self::from_primitive_allow_unknown(prim);
2065            Ok(())
2066        }
2067    }
2068    unsafe impl fidl::encoding::TypeMarker for EncodingType {
2069        type Owned = Self;
2070
2071        #[inline(always)]
2072        fn inline_align(_context: fidl::encoding::Context) -> usize {
2073            std::mem::align_of::<u32>()
2074        }
2075
2076        #[inline(always)]
2077        fn inline_size(_context: fidl::encoding::Context) -> usize {
2078            std::mem::size_of::<u32>()
2079        }
2080
2081        #[inline(always)]
2082        fn encode_is_copy() -> bool {
2083            false
2084        }
2085
2086        #[inline(always)]
2087        fn decode_is_copy() -> bool {
2088            false
2089        }
2090    }
2091
2092    impl fidl::encoding::ValueTypeMarker for EncodingType {
2093        type Borrowed<'a> = Self;
2094        #[inline(always)]
2095        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2096            *value
2097        }
2098    }
2099
2100    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EncodingType {
2101        #[inline]
2102        unsafe fn encode(
2103            self,
2104            encoder: &mut fidl::encoding::Encoder<'_, D>,
2105            offset: usize,
2106            _depth: fidl::encoding::Depth,
2107        ) -> fidl::Result<()> {
2108            encoder.debug_check_bounds::<Self>(offset);
2109            encoder.write_num(self.into_primitive(), offset);
2110            Ok(())
2111        }
2112    }
2113
2114    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncodingType {
2115        #[inline(always)]
2116        fn new_empty() -> Self {
2117            Self::unknown()
2118        }
2119
2120        #[inline]
2121        unsafe fn decode(
2122            &mut self,
2123            decoder: &mut fidl::encoding::Decoder<'_, D>,
2124            offset: usize,
2125            _depth: fidl::encoding::Depth,
2126        ) -> fidl::Result<()> {
2127            decoder.debug_check_bounds::<Self>(offset);
2128            let prim = decoder.read_num::<u32>(offset);
2129
2130            *self = Self::from_primitive_allow_unknown(prim);
2131            Ok(())
2132        }
2133    }
2134    unsafe impl fidl::encoding::TypeMarker for GetVmoError {
2135        type Owned = Self;
2136
2137        #[inline(always)]
2138        fn inline_align(_context: fidl::encoding::Context) -> usize {
2139            std::mem::align_of::<u32>()
2140        }
2141
2142        #[inline(always)]
2143        fn inline_size(_context: fidl::encoding::Context) -> usize {
2144            std::mem::size_of::<u32>()
2145        }
2146
2147        #[inline(always)]
2148        fn encode_is_copy() -> bool {
2149            true
2150        }
2151
2152        #[inline(always)]
2153        fn decode_is_copy() -> bool {
2154            false
2155        }
2156    }
2157
2158    impl fidl::encoding::ValueTypeMarker for GetVmoError {
2159        type Borrowed<'a> = Self;
2160        #[inline(always)]
2161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2162            *value
2163        }
2164    }
2165
2166    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GetVmoError {
2167        #[inline]
2168        unsafe fn encode(
2169            self,
2170            encoder: &mut fidl::encoding::Encoder<'_, D>,
2171            offset: usize,
2172            _depth: fidl::encoding::Depth,
2173        ) -> fidl::Result<()> {
2174            encoder.debug_check_bounds::<Self>(offset);
2175            encoder.write_num(self.into_primitive(), offset);
2176            Ok(())
2177        }
2178    }
2179
2180    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetVmoError {
2181        #[inline(always)]
2182        fn new_empty() -> Self {
2183            Self::InvalidArgs
2184        }
2185
2186        #[inline]
2187        unsafe fn decode(
2188            &mut self,
2189            decoder: &mut fidl::encoding::Decoder<'_, D>,
2190            offset: usize,
2191            _depth: fidl::encoding::Depth,
2192        ) -> fidl::Result<()> {
2193            decoder.debug_check_bounds::<Self>(offset);
2194            let prim = decoder.read_num::<u32>(offset);
2195
2196            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2197            Ok(())
2198        }
2199    }
2200    unsafe impl fidl::encoding::TypeMarker for PlugDetectCapabilities {
2201        type Owned = Self;
2202
2203        #[inline(always)]
2204        fn inline_align(_context: fidl::encoding::Context) -> usize {
2205            std::mem::align_of::<u32>()
2206        }
2207
2208        #[inline(always)]
2209        fn inline_size(_context: fidl::encoding::Context) -> usize {
2210            std::mem::size_of::<u32>()
2211        }
2212
2213        #[inline(always)]
2214        fn encode_is_copy() -> bool {
2215            true
2216        }
2217
2218        #[inline(always)]
2219        fn decode_is_copy() -> bool {
2220            false
2221        }
2222    }
2223
2224    impl fidl::encoding::ValueTypeMarker for PlugDetectCapabilities {
2225        type Borrowed<'a> = Self;
2226        #[inline(always)]
2227        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2228            *value
2229        }
2230    }
2231
2232    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2233        for PlugDetectCapabilities
2234    {
2235        #[inline]
2236        unsafe fn encode(
2237            self,
2238            encoder: &mut fidl::encoding::Encoder<'_, D>,
2239            offset: usize,
2240            _depth: fidl::encoding::Depth,
2241        ) -> fidl::Result<()> {
2242            encoder.debug_check_bounds::<Self>(offset);
2243            encoder.write_num(self.into_primitive(), offset);
2244            Ok(())
2245        }
2246    }
2247
2248    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2249        for PlugDetectCapabilities
2250    {
2251        #[inline(always)]
2252        fn new_empty() -> Self {
2253            Self::Hardwired
2254        }
2255
2256        #[inline]
2257        unsafe fn decode(
2258            &mut self,
2259            decoder: &mut fidl::encoding::Decoder<'_, D>,
2260            offset: usize,
2261            _depth: fidl::encoding::Depth,
2262        ) -> fidl::Result<()> {
2263            decoder.debug_check_bounds::<Self>(offset);
2264            let prim = decoder.read_num::<u32>(offset);
2265
2266            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2267            Ok(())
2268        }
2269    }
2270    unsafe impl fidl::encoding::TypeMarker for SampleFormat {
2271        type Owned = Self;
2272
2273        #[inline(always)]
2274        fn inline_align(_context: fidl::encoding::Context) -> usize {
2275            std::mem::align_of::<u8>()
2276        }
2277
2278        #[inline(always)]
2279        fn inline_size(_context: fidl::encoding::Context) -> usize {
2280            std::mem::size_of::<u8>()
2281        }
2282
2283        #[inline(always)]
2284        fn encode_is_copy() -> bool {
2285            true
2286        }
2287
2288        #[inline(always)]
2289        fn decode_is_copy() -> bool {
2290            false
2291        }
2292    }
2293
2294    impl fidl::encoding::ValueTypeMarker for SampleFormat {
2295        type Borrowed<'a> = Self;
2296        #[inline(always)]
2297        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2298            *value
2299        }
2300    }
2301
2302    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleFormat {
2303        #[inline]
2304        unsafe fn encode(
2305            self,
2306            encoder: &mut fidl::encoding::Encoder<'_, D>,
2307            offset: usize,
2308            _depth: fidl::encoding::Depth,
2309        ) -> fidl::Result<()> {
2310            encoder.debug_check_bounds::<Self>(offset);
2311            encoder.write_num(self.into_primitive(), offset);
2312            Ok(())
2313        }
2314    }
2315
2316    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleFormat {
2317        #[inline(always)]
2318        fn new_empty() -> Self {
2319            Self::PcmSigned
2320        }
2321
2322        #[inline]
2323        unsafe fn decode(
2324            &mut self,
2325            decoder: &mut fidl::encoding::Decoder<'_, D>,
2326            offset: usize,
2327            _depth: fidl::encoding::Depth,
2328        ) -> fidl::Result<()> {
2329            decoder.debug_check_bounds::<Self>(offset);
2330            let prim = decoder.read_num::<u8>(offset);
2331
2332            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2333            Ok(())
2334        }
2335    }
2336    unsafe impl fidl::encoding::TypeMarker for SingularUniqueId {
2337        type Owned = Self;
2338
2339        #[inline(always)]
2340        fn inline_align(_context: fidl::encoding::Context) -> usize {
2341            std::mem::align_of::<u8>()
2342        }
2343
2344        #[inline(always)]
2345        fn inline_size(_context: fidl::encoding::Context) -> usize {
2346            std::mem::size_of::<u8>()
2347        }
2348
2349        #[inline(always)]
2350        fn encode_is_copy() -> bool {
2351            false
2352        }
2353
2354        #[inline(always)]
2355        fn decode_is_copy() -> bool {
2356            false
2357        }
2358    }
2359
2360    impl fidl::encoding::ValueTypeMarker for SingularUniqueId {
2361        type Borrowed<'a> = Self;
2362        #[inline(always)]
2363        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2364            *value
2365        }
2366    }
2367
2368    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2369        for SingularUniqueId
2370    {
2371        #[inline]
2372        unsafe fn encode(
2373            self,
2374            encoder: &mut fidl::encoding::Encoder<'_, D>,
2375            offset: usize,
2376            _depth: fidl::encoding::Depth,
2377        ) -> fidl::Result<()> {
2378            encoder.debug_check_bounds::<Self>(offset);
2379            encoder.write_num(self.into_primitive(), offset);
2380            Ok(())
2381        }
2382    }
2383
2384    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SingularUniqueId {
2385        #[inline(always)]
2386        fn new_empty() -> Self {
2387            Self::unknown()
2388        }
2389
2390        #[inline]
2391        unsafe fn decode(
2392            &mut self,
2393            decoder: &mut fidl::encoding::Decoder<'_, D>,
2394            offset: usize,
2395            _depth: fidl::encoding::Depth,
2396        ) -> fidl::Result<()> {
2397            decoder.debug_check_bounds::<Self>(offset);
2398            let prim = decoder.read_num::<u8>(offset);
2399
2400            *self = Self::from_primitive_allow_unknown(prim);
2401            Ok(())
2402        }
2403    }
2404
2405    impl fidl::encoding::ValueTypeMarker for CodecGetPropertiesResponse {
2406        type Borrowed<'a> = &'a Self;
2407        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2408            value
2409        }
2410    }
2411
2412    unsafe impl fidl::encoding::TypeMarker for CodecGetPropertiesResponse {
2413        type Owned = Self;
2414
2415        #[inline(always)]
2416        fn inline_align(_context: fidl::encoding::Context) -> usize {
2417            8
2418        }
2419
2420        #[inline(always)]
2421        fn inline_size(_context: fidl::encoding::Context) -> usize {
2422            16
2423        }
2424    }
2425
2426    unsafe impl<D: fidl::encoding::ResourceDialect>
2427        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for &CodecGetPropertiesResponse
2428    {
2429        #[inline]
2430        unsafe fn encode(
2431            self,
2432            encoder: &mut fidl::encoding::Encoder<'_, D>,
2433            offset: usize,
2434            _depth: fidl::encoding::Depth,
2435        ) -> fidl::Result<()> {
2436            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2437            // Delegate to tuple encoding.
2438            fidl::encoding::Encode::<CodecGetPropertiesResponse, D>::encode(
2439                (<CodecProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
2440                encoder,
2441                offset,
2442                _depth,
2443            )
2444        }
2445    }
2446    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecProperties, D>>
2447        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for (T0,)
2448    {
2449        #[inline]
2450        unsafe fn encode(
2451            self,
2452            encoder: &mut fidl::encoding::Encoder<'_, D>,
2453            offset: usize,
2454            depth: fidl::encoding::Depth,
2455        ) -> fidl::Result<()> {
2456            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2457            // Zero out padding regions. There's no need to apply masks
2458            // because the unmasked parts will be overwritten by fields.
2459            // Write the fields.
2460            self.0.encode(encoder, offset + 0, depth)?;
2461            Ok(())
2462        }
2463    }
2464
2465    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2466        for CodecGetPropertiesResponse
2467    {
2468        #[inline(always)]
2469        fn new_empty() -> Self {
2470            Self { properties: fidl::new_empty!(CodecProperties, D) }
2471        }
2472
2473        #[inline]
2474        unsafe fn decode(
2475            &mut self,
2476            decoder: &mut fidl::encoding::Decoder<'_, D>,
2477            offset: usize,
2478            _depth: fidl::encoding::Depth,
2479        ) -> fidl::Result<()> {
2480            decoder.debug_check_bounds::<Self>(offset);
2481            // Verify that padding bytes are zero.
2482            fidl::decode!(CodecProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
2483            Ok(())
2484        }
2485    }
2486
2487    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatRequest {
2488        type Borrowed<'a> = &'a Self;
2489        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2490            value
2491        }
2492    }
2493
2494    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatRequest {
2495        type Owned = Self;
2496
2497        #[inline(always)]
2498        fn inline_align(_context: fidl::encoding::Context) -> usize {
2499            8
2500        }
2501
2502        #[inline(always)]
2503        fn inline_size(_context: fidl::encoding::Context) -> usize {
2504            48
2505        }
2506    }
2507
2508    unsafe impl<D: fidl::encoding::ResourceDialect>
2509        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for &CodecSetDaiFormatRequest
2510    {
2511        #[inline]
2512        unsafe fn encode(
2513            self,
2514            encoder: &mut fidl::encoding::Encoder<'_, D>,
2515            offset: usize,
2516            _depth: fidl::encoding::Depth,
2517        ) -> fidl::Result<()> {
2518            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2519            // Delegate to tuple encoding.
2520            fidl::encoding::Encode::<CodecSetDaiFormatRequest, D>::encode(
2521                (<DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),),
2522                encoder,
2523                offset,
2524                _depth,
2525            )
2526        }
2527    }
2528    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiFormat, D>>
2529        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for (T0,)
2530    {
2531        #[inline]
2532        unsafe fn encode(
2533            self,
2534            encoder: &mut fidl::encoding::Encoder<'_, D>,
2535            offset: usize,
2536            depth: fidl::encoding::Depth,
2537        ) -> fidl::Result<()> {
2538            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2539            // Zero out padding regions. There's no need to apply masks
2540            // because the unmasked parts will be overwritten by fields.
2541            // Write the fields.
2542            self.0.encode(encoder, offset + 0, depth)?;
2543            Ok(())
2544        }
2545    }
2546
2547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2548        for CodecSetDaiFormatRequest
2549    {
2550        #[inline(always)]
2551        fn new_empty() -> Self {
2552            Self { format: fidl::new_empty!(DaiFormat, D) }
2553        }
2554
2555        #[inline]
2556        unsafe fn decode(
2557            &mut self,
2558            decoder: &mut fidl::encoding::Decoder<'_, D>,
2559            offset: usize,
2560            _depth: fidl::encoding::Depth,
2561        ) -> fidl::Result<()> {
2562            decoder.debug_check_bounds::<Self>(offset);
2563            // Verify that padding bytes are zero.
2564            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 0, _depth)?;
2565            Ok(())
2566        }
2567    }
2568
2569    impl fidl::encoding::ValueTypeMarker for CodecStartResponse {
2570        type Borrowed<'a> = &'a Self;
2571        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2572            value
2573        }
2574    }
2575
2576    unsafe impl fidl::encoding::TypeMarker for CodecStartResponse {
2577        type Owned = Self;
2578
2579        #[inline(always)]
2580        fn inline_align(_context: fidl::encoding::Context) -> usize {
2581            8
2582        }
2583
2584        #[inline(always)]
2585        fn inline_size(_context: fidl::encoding::Context) -> usize {
2586            8
2587        }
2588        #[inline(always)]
2589        fn encode_is_copy() -> bool {
2590            true
2591        }
2592
2593        #[inline(always)]
2594        fn decode_is_copy() -> bool {
2595            true
2596        }
2597    }
2598
2599    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStartResponse, D>
2600        for &CodecStartResponse
2601    {
2602        #[inline]
2603        unsafe fn encode(
2604            self,
2605            encoder: &mut fidl::encoding::Encoder<'_, D>,
2606            offset: usize,
2607            _depth: fidl::encoding::Depth,
2608        ) -> fidl::Result<()> {
2609            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2610            unsafe {
2611                // Copy the object into the buffer.
2612                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2613                (buf_ptr as *mut CodecStartResponse)
2614                    .write_unaligned((self as *const CodecStartResponse).read());
2615                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2616                // done second because the memcpy will write garbage to these bytes.
2617            }
2618            Ok(())
2619        }
2620    }
2621    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2622        fidl::encoding::Encode<CodecStartResponse, D> for (T0,)
2623    {
2624        #[inline]
2625        unsafe fn encode(
2626            self,
2627            encoder: &mut fidl::encoding::Encoder<'_, D>,
2628            offset: usize,
2629            depth: fidl::encoding::Depth,
2630        ) -> fidl::Result<()> {
2631            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2632            // Zero out padding regions. There's no need to apply masks
2633            // because the unmasked parts will be overwritten by fields.
2634            // Write the fields.
2635            self.0.encode(encoder, offset + 0, depth)?;
2636            Ok(())
2637        }
2638    }
2639
2640    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStartResponse {
2641        #[inline(always)]
2642        fn new_empty() -> Self {
2643            Self { start_time: fidl::new_empty!(i64, D) }
2644        }
2645
2646        #[inline]
2647        unsafe fn decode(
2648            &mut self,
2649            decoder: &mut fidl::encoding::Decoder<'_, D>,
2650            offset: usize,
2651            _depth: fidl::encoding::Depth,
2652        ) -> fidl::Result<()> {
2653            decoder.debug_check_bounds::<Self>(offset);
2654            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2655            // Verify that padding bytes are zero.
2656            // Copy from the buffer into the object.
2657            unsafe {
2658                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2659            }
2660            Ok(())
2661        }
2662    }
2663
2664    impl fidl::encoding::ValueTypeMarker for CodecStopResponse {
2665        type Borrowed<'a> = &'a Self;
2666        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2667            value
2668        }
2669    }
2670
2671    unsafe impl fidl::encoding::TypeMarker for CodecStopResponse {
2672        type Owned = Self;
2673
2674        #[inline(always)]
2675        fn inline_align(_context: fidl::encoding::Context) -> usize {
2676            8
2677        }
2678
2679        #[inline(always)]
2680        fn inline_size(_context: fidl::encoding::Context) -> usize {
2681            8
2682        }
2683        #[inline(always)]
2684        fn encode_is_copy() -> bool {
2685            true
2686        }
2687
2688        #[inline(always)]
2689        fn decode_is_copy() -> bool {
2690            true
2691        }
2692    }
2693
2694    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStopResponse, D>
2695        for &CodecStopResponse
2696    {
2697        #[inline]
2698        unsafe fn encode(
2699            self,
2700            encoder: &mut fidl::encoding::Encoder<'_, D>,
2701            offset: usize,
2702            _depth: fidl::encoding::Depth,
2703        ) -> fidl::Result<()> {
2704            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2705            unsafe {
2706                // Copy the object into the buffer.
2707                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2708                (buf_ptr as *mut CodecStopResponse)
2709                    .write_unaligned((self as *const CodecStopResponse).read());
2710                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2711                // done second because the memcpy will write garbage to these bytes.
2712            }
2713            Ok(())
2714        }
2715    }
2716    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2717        fidl::encoding::Encode<CodecStopResponse, D> for (T0,)
2718    {
2719        #[inline]
2720        unsafe fn encode(
2721            self,
2722            encoder: &mut fidl::encoding::Encoder<'_, D>,
2723            offset: usize,
2724            depth: fidl::encoding::Depth,
2725        ) -> fidl::Result<()> {
2726            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2727            // Zero out padding regions. There's no need to apply masks
2728            // because the unmasked parts will be overwritten by fields.
2729            // Write the fields.
2730            self.0.encode(encoder, offset + 0, depth)?;
2731            Ok(())
2732        }
2733    }
2734
2735    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStopResponse {
2736        #[inline(always)]
2737        fn new_empty() -> Self {
2738            Self { stop_time: fidl::new_empty!(i64, D) }
2739        }
2740
2741        #[inline]
2742        unsafe fn decode(
2743            &mut self,
2744            decoder: &mut fidl::encoding::Decoder<'_, D>,
2745            offset: usize,
2746            _depth: fidl::encoding::Depth,
2747        ) -> fidl::Result<()> {
2748            decoder.debug_check_bounds::<Self>(offset);
2749            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2750            // Verify that padding bytes are zero.
2751            // Copy from the buffer into the object.
2752            unsafe {
2753                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2754            }
2755            Ok(())
2756        }
2757    }
2758
2759    impl fidl::encoding::ValueTypeMarker for CodecWatchPlugStateResponse {
2760        type Borrowed<'a> = &'a Self;
2761        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2762            value
2763        }
2764    }
2765
2766    unsafe impl fidl::encoding::TypeMarker for CodecWatchPlugStateResponse {
2767        type Owned = Self;
2768
2769        #[inline(always)]
2770        fn inline_align(_context: fidl::encoding::Context) -> usize {
2771            8
2772        }
2773
2774        #[inline(always)]
2775        fn inline_size(_context: fidl::encoding::Context) -> usize {
2776            16
2777        }
2778    }
2779
2780    unsafe impl<D: fidl::encoding::ResourceDialect>
2781        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for &CodecWatchPlugStateResponse
2782    {
2783        #[inline]
2784        unsafe fn encode(
2785            self,
2786            encoder: &mut fidl::encoding::Encoder<'_, D>,
2787            offset: usize,
2788            _depth: fidl::encoding::Depth,
2789        ) -> fidl::Result<()> {
2790            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2791            // Delegate to tuple encoding.
2792            fidl::encoding::Encode::<CodecWatchPlugStateResponse, D>::encode(
2793                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
2794                encoder,
2795                offset,
2796                _depth,
2797            )
2798        }
2799    }
2800    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
2801        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for (T0,)
2802    {
2803        #[inline]
2804        unsafe fn encode(
2805            self,
2806            encoder: &mut fidl::encoding::Encoder<'_, D>,
2807            offset: usize,
2808            depth: fidl::encoding::Depth,
2809        ) -> fidl::Result<()> {
2810            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2811            // Zero out padding regions. There's no need to apply masks
2812            // because the unmasked parts will be overwritten by fields.
2813            // Write the fields.
2814            self.0.encode(encoder, offset + 0, depth)?;
2815            Ok(())
2816        }
2817    }
2818
2819    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2820        for CodecWatchPlugStateResponse
2821    {
2822        #[inline(always)]
2823        fn new_empty() -> Self {
2824            Self { plug_state: fidl::new_empty!(PlugState, D) }
2825        }
2826
2827        #[inline]
2828        unsafe fn decode(
2829            &mut self,
2830            decoder: &mut fidl::encoding::Decoder<'_, D>,
2831            offset: usize,
2832            _depth: fidl::encoding::Depth,
2833        ) -> fidl::Result<()> {
2834            decoder.debug_check_bounds::<Self>(offset);
2835            // Verify that padding bytes are zero.
2836            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
2837            Ok(())
2838        }
2839    }
2840
2841    impl fidl::encoding::ValueTypeMarker for CodecGetDaiFormatsResponse {
2842        type Borrowed<'a> = &'a Self;
2843        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2844            value
2845        }
2846    }
2847
2848    unsafe impl fidl::encoding::TypeMarker for CodecGetDaiFormatsResponse {
2849        type Owned = Self;
2850
2851        #[inline(always)]
2852        fn inline_align(_context: fidl::encoding::Context) -> usize {
2853            8
2854        }
2855
2856        #[inline(always)]
2857        fn inline_size(_context: fidl::encoding::Context) -> usize {
2858            16
2859        }
2860    }
2861
2862    unsafe impl<D: fidl::encoding::ResourceDialect>
2863        fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for &CodecGetDaiFormatsResponse
2864    {
2865        #[inline]
2866        unsafe fn encode(
2867            self,
2868            encoder: &mut fidl::encoding::Encoder<'_, D>,
2869            offset: usize,
2870            _depth: fidl::encoding::Depth,
2871        ) -> fidl::Result<()> {
2872            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2873            // Delegate to tuple encoding.
2874            fidl::encoding::Encode::<CodecGetDaiFormatsResponse, D>::encode(
2875                (
2876                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.formats),
2877                ),
2878                encoder, offset, _depth
2879            )
2880        }
2881    }
2882    unsafe impl<
2883        D: fidl::encoding::ResourceDialect,
2884        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2885    > fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for (T0,)
2886    {
2887        #[inline]
2888        unsafe fn encode(
2889            self,
2890            encoder: &mut fidl::encoding::Encoder<'_, D>,
2891            offset: usize,
2892            depth: fidl::encoding::Depth,
2893        ) -> fidl::Result<()> {
2894            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2895            // Zero out padding regions. There's no need to apply masks
2896            // because the unmasked parts will be overwritten by fields.
2897            // Write the fields.
2898            self.0.encode(encoder, offset + 0, depth)?;
2899            Ok(())
2900        }
2901    }
2902
2903    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2904        for CodecGetDaiFormatsResponse
2905    {
2906        #[inline(always)]
2907        fn new_empty() -> Self {
2908            Self { formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D) }
2909        }
2910
2911        #[inline]
2912        unsafe fn decode(
2913            &mut self,
2914            decoder: &mut fidl::encoding::Decoder<'_, D>,
2915            offset: usize,
2916            _depth: fidl::encoding::Depth,
2917        ) -> fidl::Result<()> {
2918            decoder.debug_check_bounds::<Self>(offset);
2919            // Verify that padding bytes are zero.
2920            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.formats, decoder, offset + 0, _depth)?;
2921            Ok(())
2922        }
2923    }
2924
2925    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatResponse {
2926        type Borrowed<'a> = &'a Self;
2927        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2928            value
2929        }
2930    }
2931
2932    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatResponse {
2933        type Owned = Self;
2934
2935        #[inline(always)]
2936        fn inline_align(_context: fidl::encoding::Context) -> usize {
2937            8
2938        }
2939
2940        #[inline(always)]
2941        fn inline_size(_context: fidl::encoding::Context) -> usize {
2942            16
2943        }
2944    }
2945
2946    unsafe impl<D: fidl::encoding::ResourceDialect>
2947        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for &CodecSetDaiFormatResponse
2948    {
2949        #[inline]
2950        unsafe fn encode(
2951            self,
2952            encoder: &mut fidl::encoding::Encoder<'_, D>,
2953            offset: usize,
2954            _depth: fidl::encoding::Depth,
2955        ) -> fidl::Result<()> {
2956            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2957            // Delegate to tuple encoding.
2958            fidl::encoding::Encode::<CodecSetDaiFormatResponse, D>::encode(
2959                (<CodecFormatInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
2960                encoder,
2961                offset,
2962                _depth,
2963            )
2964        }
2965    }
2966    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecFormatInfo, D>>
2967        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for (T0,)
2968    {
2969        #[inline]
2970        unsafe fn encode(
2971            self,
2972            encoder: &mut fidl::encoding::Encoder<'_, D>,
2973            offset: usize,
2974            depth: fidl::encoding::Depth,
2975        ) -> fidl::Result<()> {
2976            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2977            // Zero out padding regions. There's no need to apply masks
2978            // because the unmasked parts will be overwritten by fields.
2979            // Write the fields.
2980            self.0.encode(encoder, offset + 0, depth)?;
2981            Ok(())
2982        }
2983    }
2984
2985    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2986        for CodecSetDaiFormatResponse
2987    {
2988        #[inline(always)]
2989        fn new_empty() -> Self {
2990            Self { state: fidl::new_empty!(CodecFormatInfo, D) }
2991        }
2992
2993        #[inline]
2994        unsafe fn decode(
2995            &mut self,
2996            decoder: &mut fidl::encoding::Decoder<'_, D>,
2997            offset: usize,
2998            _depth: fidl::encoding::Depth,
2999        ) -> fidl::Result<()> {
3000            decoder.debug_check_bounds::<Self>(offset);
3001            // Verify that padding bytes are zero.
3002            fidl::decode!(CodecFormatInfo, D, &mut self.state, decoder, offset + 0, _depth)?;
3003            Ok(())
3004        }
3005    }
3006
3007    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsRequest {
3008        type Borrowed<'a> = &'a Self;
3009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3010            value
3011        }
3012    }
3013
3014    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsRequest {
3015        type Owned = Self;
3016
3017        #[inline(always)]
3018        fn inline_align(_context: fidl::encoding::Context) -> usize {
3019            8
3020        }
3021
3022        #[inline(always)]
3023        fn inline_size(_context: fidl::encoding::Context) -> usize {
3024            8
3025        }
3026        #[inline(always)]
3027        fn encode_is_copy() -> bool {
3028            true
3029        }
3030
3031        #[inline(always)]
3032        fn decode_is_copy() -> bool {
3033            true
3034        }
3035    }
3036
3037    unsafe impl<D: fidl::encoding::ResourceDialect>
3038        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D>
3039        for &CompositeGetDaiFormatsRequest
3040    {
3041        #[inline]
3042        unsafe fn encode(
3043            self,
3044            encoder: &mut fidl::encoding::Encoder<'_, D>,
3045            offset: usize,
3046            _depth: fidl::encoding::Depth,
3047        ) -> fidl::Result<()> {
3048            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3049            unsafe {
3050                // Copy the object into the buffer.
3051                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3052                (buf_ptr as *mut CompositeGetDaiFormatsRequest)
3053                    .write_unaligned((self as *const CompositeGetDaiFormatsRequest).read());
3054                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3055                // done second because the memcpy will write garbage to these bytes.
3056            }
3057            Ok(())
3058        }
3059    }
3060    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3061        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D> for (T0,)
3062    {
3063        #[inline]
3064        unsafe fn encode(
3065            self,
3066            encoder: &mut fidl::encoding::Encoder<'_, D>,
3067            offset: usize,
3068            depth: fidl::encoding::Depth,
3069        ) -> fidl::Result<()> {
3070            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3071            // Zero out padding regions. There's no need to apply masks
3072            // because the unmasked parts will be overwritten by fields.
3073            // Write the fields.
3074            self.0.encode(encoder, offset + 0, depth)?;
3075            Ok(())
3076        }
3077    }
3078
3079    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3080        for CompositeGetDaiFormatsRequest
3081    {
3082        #[inline(always)]
3083        fn new_empty() -> Self {
3084            Self { processing_element_id: fidl::new_empty!(u64, D) }
3085        }
3086
3087        #[inline]
3088        unsafe fn decode(
3089            &mut self,
3090            decoder: &mut fidl::encoding::Decoder<'_, D>,
3091            offset: usize,
3092            _depth: fidl::encoding::Depth,
3093        ) -> fidl::Result<()> {
3094            decoder.debug_check_bounds::<Self>(offset);
3095            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3096            // Verify that padding bytes are zero.
3097            // Copy from the buffer into the object.
3098            unsafe {
3099                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3100            }
3101            Ok(())
3102        }
3103    }
3104
3105    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsRequest {
3106        type Borrowed<'a> = &'a Self;
3107        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3108            value
3109        }
3110    }
3111
3112    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsRequest {
3113        type Owned = Self;
3114
3115        #[inline(always)]
3116        fn inline_align(_context: fidl::encoding::Context) -> usize {
3117            8
3118        }
3119
3120        #[inline(always)]
3121        fn inline_size(_context: fidl::encoding::Context) -> usize {
3122            8
3123        }
3124        #[inline(always)]
3125        fn encode_is_copy() -> bool {
3126            true
3127        }
3128
3129        #[inline(always)]
3130        fn decode_is_copy() -> bool {
3131            true
3132        }
3133    }
3134
3135    unsafe impl<D: fidl::encoding::ResourceDialect>
3136        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D>
3137        for &CompositeGetPacketStreamFormatsRequest
3138    {
3139        #[inline]
3140        unsafe fn encode(
3141            self,
3142            encoder: &mut fidl::encoding::Encoder<'_, D>,
3143            offset: usize,
3144            _depth: fidl::encoding::Depth,
3145        ) -> fidl::Result<()> {
3146            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3147            unsafe {
3148                // Copy the object into the buffer.
3149                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3150                (buf_ptr as *mut CompositeGetPacketStreamFormatsRequest).write_unaligned(
3151                    (self as *const CompositeGetPacketStreamFormatsRequest).read(),
3152                );
3153                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3154                // done second because the memcpy will write garbage to these bytes.
3155            }
3156            Ok(())
3157        }
3158    }
3159    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3160        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D> for (T0,)
3161    {
3162        #[inline]
3163        unsafe fn encode(
3164            self,
3165            encoder: &mut fidl::encoding::Encoder<'_, D>,
3166            offset: usize,
3167            depth: fidl::encoding::Depth,
3168        ) -> fidl::Result<()> {
3169            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3170            // Zero out padding regions. There's no need to apply masks
3171            // because the unmasked parts will be overwritten by fields.
3172            // Write the fields.
3173            self.0.encode(encoder, offset + 0, depth)?;
3174            Ok(())
3175        }
3176    }
3177
3178    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3179        for CompositeGetPacketStreamFormatsRequest
3180    {
3181        #[inline(always)]
3182        fn new_empty() -> Self {
3183            Self { processing_element_id: fidl::new_empty!(u64, D) }
3184        }
3185
3186        #[inline]
3187        unsafe fn decode(
3188            &mut self,
3189            decoder: &mut fidl::encoding::Decoder<'_, D>,
3190            offset: usize,
3191            _depth: fidl::encoding::Depth,
3192        ) -> fidl::Result<()> {
3193            decoder.debug_check_bounds::<Self>(offset);
3194            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3195            // Verify that padding bytes are zero.
3196            // Copy from the buffer into the object.
3197            unsafe {
3198                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3199            }
3200            Ok(())
3201        }
3202    }
3203
3204    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsRequest {
3205        type Borrowed<'a> = &'a Self;
3206        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3207            value
3208        }
3209    }
3210
3211    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsRequest {
3212        type Owned = Self;
3213
3214        #[inline(always)]
3215        fn inline_align(_context: fidl::encoding::Context) -> usize {
3216            8
3217        }
3218
3219        #[inline(always)]
3220        fn inline_size(_context: fidl::encoding::Context) -> usize {
3221            8
3222        }
3223        #[inline(always)]
3224        fn encode_is_copy() -> bool {
3225            true
3226        }
3227
3228        #[inline(always)]
3229        fn decode_is_copy() -> bool {
3230            true
3231        }
3232    }
3233
3234    unsafe impl<D: fidl::encoding::ResourceDialect>
3235        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D>
3236        for &CompositeGetRingBufferFormatsRequest
3237    {
3238        #[inline]
3239        unsafe fn encode(
3240            self,
3241            encoder: &mut fidl::encoding::Encoder<'_, D>,
3242            offset: usize,
3243            _depth: fidl::encoding::Depth,
3244        ) -> fidl::Result<()> {
3245            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3246            unsafe {
3247                // Copy the object into the buffer.
3248                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3249                (buf_ptr as *mut CompositeGetRingBufferFormatsRequest)
3250                    .write_unaligned((self as *const CompositeGetRingBufferFormatsRequest).read());
3251                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3252                // done second because the memcpy will write garbage to these bytes.
3253            }
3254            Ok(())
3255        }
3256    }
3257    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3258        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D> for (T0,)
3259    {
3260        #[inline]
3261        unsafe fn encode(
3262            self,
3263            encoder: &mut fidl::encoding::Encoder<'_, D>,
3264            offset: usize,
3265            depth: fidl::encoding::Depth,
3266        ) -> fidl::Result<()> {
3267            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3268            // Zero out padding regions. There's no need to apply masks
3269            // because the unmasked parts will be overwritten by fields.
3270            // Write the fields.
3271            self.0.encode(encoder, offset + 0, depth)?;
3272            Ok(())
3273        }
3274    }
3275
3276    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3277        for CompositeGetRingBufferFormatsRequest
3278    {
3279        #[inline(always)]
3280        fn new_empty() -> Self {
3281            Self { processing_element_id: fidl::new_empty!(u64, D) }
3282        }
3283
3284        #[inline]
3285        unsafe fn decode(
3286            &mut self,
3287            decoder: &mut fidl::encoding::Decoder<'_, D>,
3288            offset: usize,
3289            _depth: fidl::encoding::Depth,
3290        ) -> fidl::Result<()> {
3291            decoder.debug_check_bounds::<Self>(offset);
3292            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3293            // Verify that padding bytes are zero.
3294            // Copy from the buffer into the object.
3295            unsafe {
3296                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3297            }
3298            Ok(())
3299        }
3300    }
3301
3302    impl fidl::encoding::ValueTypeMarker for CompositeSetDaiFormatRequest {
3303        type Borrowed<'a> = &'a Self;
3304        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3305            value
3306        }
3307    }
3308
3309    unsafe impl fidl::encoding::TypeMarker for CompositeSetDaiFormatRequest {
3310        type Owned = Self;
3311
3312        #[inline(always)]
3313        fn inline_align(_context: fidl::encoding::Context) -> usize {
3314            8
3315        }
3316
3317        #[inline(always)]
3318        fn inline_size(_context: fidl::encoding::Context) -> usize {
3319            56
3320        }
3321    }
3322
3323    unsafe impl<D: fidl::encoding::ResourceDialect>
3324        fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for &CompositeSetDaiFormatRequest
3325    {
3326        #[inline]
3327        unsafe fn encode(
3328            self,
3329            encoder: &mut fidl::encoding::Encoder<'_, D>,
3330            offset: usize,
3331            _depth: fidl::encoding::Depth,
3332        ) -> fidl::Result<()> {
3333            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3334            // Delegate to tuple encoding.
3335            fidl::encoding::Encode::<CompositeSetDaiFormatRequest, D>::encode(
3336                (
3337                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.processing_element_id),
3338                    <DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),
3339                ),
3340                encoder,
3341                offset,
3342                _depth,
3343            )
3344        }
3345    }
3346    unsafe impl<
3347        D: fidl::encoding::ResourceDialect,
3348        T0: fidl::encoding::Encode<u64, D>,
3349        T1: fidl::encoding::Encode<DaiFormat, D>,
3350    > fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for (T0, T1)
3351    {
3352        #[inline]
3353        unsafe fn encode(
3354            self,
3355            encoder: &mut fidl::encoding::Encoder<'_, D>,
3356            offset: usize,
3357            depth: fidl::encoding::Depth,
3358        ) -> fidl::Result<()> {
3359            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3360            // Zero out padding regions. There's no need to apply masks
3361            // because the unmasked parts will be overwritten by fields.
3362            // Write the fields.
3363            self.0.encode(encoder, offset + 0, depth)?;
3364            self.1.encode(encoder, offset + 8, depth)?;
3365            Ok(())
3366        }
3367    }
3368
3369    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3370        for CompositeSetDaiFormatRequest
3371    {
3372        #[inline(always)]
3373        fn new_empty() -> Self {
3374            Self {
3375                processing_element_id: fidl::new_empty!(u64, D),
3376                format: fidl::new_empty!(DaiFormat, D),
3377            }
3378        }
3379
3380        #[inline]
3381        unsafe fn decode(
3382            &mut self,
3383            decoder: &mut fidl::encoding::Decoder<'_, D>,
3384            offset: usize,
3385            _depth: fidl::encoding::Depth,
3386        ) -> fidl::Result<()> {
3387            decoder.debug_check_bounds::<Self>(offset);
3388            // Verify that padding bytes are zero.
3389            fidl::decode!(u64, D, &mut self.processing_element_id, decoder, offset + 0, _depth)?;
3390            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 8, _depth)?;
3391            Ok(())
3392        }
3393    }
3394
3395    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsResponse {
3396        type Borrowed<'a> = &'a Self;
3397        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3398            value
3399        }
3400    }
3401
3402    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsResponse {
3403        type Owned = Self;
3404
3405        #[inline(always)]
3406        fn inline_align(_context: fidl::encoding::Context) -> usize {
3407            8
3408        }
3409
3410        #[inline(always)]
3411        fn inline_size(_context: fidl::encoding::Context) -> usize {
3412            16
3413        }
3414    }
3415
3416    unsafe impl<D: fidl::encoding::ResourceDialect>
3417        fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D>
3418        for &CompositeGetDaiFormatsResponse
3419    {
3420        #[inline]
3421        unsafe fn encode(
3422            self,
3423            encoder: &mut fidl::encoding::Encoder<'_, D>,
3424            offset: usize,
3425            _depth: fidl::encoding::Depth,
3426        ) -> fidl::Result<()> {
3427            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3428            // Delegate to tuple encoding.
3429            fidl::encoding::Encode::<CompositeGetDaiFormatsResponse, D>::encode(
3430                (
3431                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
3432                ),
3433                encoder, offset, _depth
3434            )
3435        }
3436    }
3437    unsafe impl<
3438        D: fidl::encoding::ResourceDialect,
3439        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
3440    > fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D> for (T0,)
3441    {
3442        #[inline]
3443        unsafe fn encode(
3444            self,
3445            encoder: &mut fidl::encoding::Encoder<'_, D>,
3446            offset: usize,
3447            depth: fidl::encoding::Depth,
3448        ) -> fidl::Result<()> {
3449            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3450            // Zero out padding regions. There's no need to apply masks
3451            // because the unmasked parts will be overwritten by fields.
3452            // Write the fields.
3453            self.0.encode(encoder, offset + 0, depth)?;
3454            Ok(())
3455        }
3456    }
3457
3458    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3459        for CompositeGetDaiFormatsResponse
3460    {
3461        #[inline(always)]
3462        fn new_empty() -> Self {
3463            Self {
3464                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
3465            }
3466        }
3467
3468        #[inline]
3469        unsafe fn decode(
3470            &mut self,
3471            decoder: &mut fidl::encoding::Decoder<'_, D>,
3472            offset: usize,
3473            _depth: fidl::encoding::Depth,
3474        ) -> fidl::Result<()> {
3475            decoder.debug_check_bounds::<Self>(offset);
3476            // Verify that padding bytes are zero.
3477            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
3478            Ok(())
3479        }
3480    }
3481
3482    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsResponse {
3483        type Borrowed<'a> = &'a Self;
3484        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3485            value
3486        }
3487    }
3488
3489    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsResponse {
3490        type Owned = Self;
3491
3492        #[inline(always)]
3493        fn inline_align(_context: fidl::encoding::Context) -> usize {
3494            8
3495        }
3496
3497        #[inline(always)]
3498        fn inline_size(_context: fidl::encoding::Context) -> usize {
3499            16
3500        }
3501    }
3502
3503    unsafe impl<D: fidl::encoding::ResourceDialect>
3504        fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D>
3505        for &CompositeGetPacketStreamFormatsResponse
3506    {
3507        #[inline]
3508        unsafe fn encode(
3509            self,
3510            encoder: &mut fidl::encoding::Encoder<'_, D>,
3511            offset: usize,
3512            _depth: fidl::encoding::Depth,
3513        ) -> fidl::Result<()> {
3514            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3515            // Delegate to tuple encoding.
3516            fidl::encoding::Encode::<CompositeGetPacketStreamFormatsResponse, D>::encode(
3517                (
3518                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.packet_stream_formats),
3519                ),
3520                encoder, offset, _depth
3521            )
3522        }
3523    }
3524    unsafe impl<
3525        D: fidl::encoding::ResourceDialect,
3526        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3527    > fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D> for (T0,)
3528    {
3529        #[inline]
3530        unsafe fn encode(
3531            self,
3532            encoder: &mut fidl::encoding::Encoder<'_, D>,
3533            offset: usize,
3534            depth: fidl::encoding::Depth,
3535        ) -> fidl::Result<()> {
3536            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3537            // Zero out padding regions. There's no need to apply masks
3538            // because the unmasked parts will be overwritten by fields.
3539            // Write the fields.
3540            self.0.encode(encoder, offset + 0, depth)?;
3541            Ok(())
3542        }
3543    }
3544
3545    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3546        for CompositeGetPacketStreamFormatsResponse
3547    {
3548        #[inline(always)]
3549        fn new_empty() -> Self {
3550            Self {
3551                packet_stream_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3552            }
3553        }
3554
3555        #[inline]
3556        unsafe fn decode(
3557            &mut self,
3558            decoder: &mut fidl::encoding::Decoder<'_, D>,
3559            offset: usize,
3560            _depth: fidl::encoding::Depth,
3561        ) -> fidl::Result<()> {
3562            decoder.debug_check_bounds::<Self>(offset);
3563            // Verify that padding bytes are zero.
3564            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.packet_stream_formats, decoder, offset + 0, _depth)?;
3565            Ok(())
3566        }
3567    }
3568
3569    impl fidl::encoding::ValueTypeMarker for CompositeGetPropertiesResponse {
3570        type Borrowed<'a> = &'a Self;
3571        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3572            value
3573        }
3574    }
3575
3576    unsafe impl fidl::encoding::TypeMarker for CompositeGetPropertiesResponse {
3577        type Owned = Self;
3578
3579        #[inline(always)]
3580        fn inline_align(_context: fidl::encoding::Context) -> usize {
3581            8
3582        }
3583
3584        #[inline(always)]
3585        fn inline_size(_context: fidl::encoding::Context) -> usize {
3586            16
3587        }
3588    }
3589
3590    unsafe impl<D: fidl::encoding::ResourceDialect>
3591        fidl::encoding::Encode<CompositeGetPropertiesResponse, D>
3592        for &CompositeGetPropertiesResponse
3593    {
3594        #[inline]
3595        unsafe fn encode(
3596            self,
3597            encoder: &mut fidl::encoding::Encoder<'_, D>,
3598            offset: usize,
3599            _depth: fidl::encoding::Depth,
3600        ) -> fidl::Result<()> {
3601            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3602            // Delegate to tuple encoding.
3603            fidl::encoding::Encode::<CompositeGetPropertiesResponse, D>::encode(
3604                (<CompositeProperties as fidl::encoding::ValueTypeMarker>::borrow(
3605                    &self.properties,
3606                ),),
3607                encoder,
3608                offset,
3609                _depth,
3610            )
3611        }
3612    }
3613    unsafe impl<
3614        D: fidl::encoding::ResourceDialect,
3615        T0: fidl::encoding::Encode<CompositeProperties, D>,
3616    > fidl::encoding::Encode<CompositeGetPropertiesResponse, D> for (T0,)
3617    {
3618        #[inline]
3619        unsafe fn encode(
3620            self,
3621            encoder: &mut fidl::encoding::Encoder<'_, D>,
3622            offset: usize,
3623            depth: fidl::encoding::Depth,
3624        ) -> fidl::Result<()> {
3625            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3626            // Zero out padding regions. There's no need to apply masks
3627            // because the unmasked parts will be overwritten by fields.
3628            // Write the fields.
3629            self.0.encode(encoder, offset + 0, depth)?;
3630            Ok(())
3631        }
3632    }
3633
3634    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3635        for CompositeGetPropertiesResponse
3636    {
3637        #[inline(always)]
3638        fn new_empty() -> Self {
3639            Self { properties: fidl::new_empty!(CompositeProperties, D) }
3640        }
3641
3642        #[inline]
3643        unsafe fn decode(
3644            &mut self,
3645            decoder: &mut fidl::encoding::Decoder<'_, D>,
3646            offset: usize,
3647            _depth: fidl::encoding::Depth,
3648        ) -> fidl::Result<()> {
3649            decoder.debug_check_bounds::<Self>(offset);
3650            // Verify that padding bytes are zero.
3651            fidl::decode!(
3652                CompositeProperties,
3653                D,
3654                &mut self.properties,
3655                decoder,
3656                offset + 0,
3657                _depth
3658            )?;
3659            Ok(())
3660        }
3661    }
3662
3663    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsResponse {
3664        type Borrowed<'a> = &'a Self;
3665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3666            value
3667        }
3668    }
3669
3670    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsResponse {
3671        type Owned = Self;
3672
3673        #[inline(always)]
3674        fn inline_align(_context: fidl::encoding::Context) -> usize {
3675            8
3676        }
3677
3678        #[inline(always)]
3679        fn inline_size(_context: fidl::encoding::Context) -> usize {
3680            16
3681        }
3682    }
3683
3684    unsafe impl<D: fidl::encoding::ResourceDialect>
3685        fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D>
3686        for &CompositeGetRingBufferFormatsResponse
3687    {
3688        #[inline]
3689        unsafe fn encode(
3690            self,
3691            encoder: &mut fidl::encoding::Encoder<'_, D>,
3692            offset: usize,
3693            _depth: fidl::encoding::Depth,
3694        ) -> fidl::Result<()> {
3695            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3696            // Delegate to tuple encoding.
3697            fidl::encoding::Encode::<CompositeGetRingBufferFormatsResponse, D>::encode(
3698                (
3699                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
3700                ),
3701                encoder, offset, _depth
3702            )
3703        }
3704    }
3705    unsafe impl<
3706        D: fidl::encoding::ResourceDialect,
3707        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3708    > fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D> for (T0,)
3709    {
3710        #[inline]
3711        unsafe fn encode(
3712            self,
3713            encoder: &mut fidl::encoding::Encoder<'_, D>,
3714            offset: usize,
3715            depth: fidl::encoding::Depth,
3716        ) -> fidl::Result<()> {
3717            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3718            // Zero out padding regions. There's no need to apply masks
3719            // because the unmasked parts will be overwritten by fields.
3720            // Write the fields.
3721            self.0.encode(encoder, offset + 0, depth)?;
3722            Ok(())
3723        }
3724    }
3725
3726    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3727        for CompositeGetRingBufferFormatsResponse
3728    {
3729        #[inline(always)]
3730        fn new_empty() -> Self {
3731            Self {
3732                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3733            }
3734        }
3735
3736        #[inline]
3737        unsafe fn decode(
3738            &mut self,
3739            decoder: &mut fidl::encoding::Decoder<'_, D>,
3740            offset: usize,
3741            _depth: fidl::encoding::Depth,
3742        ) -> fidl::Result<()> {
3743            decoder.debug_check_bounds::<Self>(offset);
3744            // Verify that padding bytes are zero.
3745            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
3746            Ok(())
3747        }
3748    }
3749
3750    impl fidl::encoding::ValueTypeMarker for DaiFormat {
3751        type Borrowed<'a> = &'a Self;
3752        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3753            value
3754        }
3755    }
3756
3757    unsafe impl fidl::encoding::TypeMarker for DaiFormat {
3758        type Owned = Self;
3759
3760        #[inline(always)]
3761        fn inline_align(_context: fidl::encoding::Context) -> usize {
3762            8
3763        }
3764
3765        #[inline(always)]
3766        fn inline_size(_context: fidl::encoding::Context) -> usize {
3767            48
3768        }
3769    }
3770
3771    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFormat, D>
3772        for &DaiFormat
3773    {
3774        #[inline]
3775        unsafe fn encode(
3776            self,
3777            encoder: &mut fidl::encoding::Encoder<'_, D>,
3778            offset: usize,
3779            _depth: fidl::encoding::Depth,
3780        ) -> fidl::Result<()> {
3781            encoder.debug_check_bounds::<DaiFormat>(offset);
3782            // Delegate to tuple encoding.
3783            fidl::encoding::Encode::<DaiFormat, D>::encode(
3784                (
3785                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3786                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_to_use_bitmask),
3787                    <DaiSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
3788                        &self.sample_format,
3789                    ),
3790                    <DaiFrameFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_format),
3791                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
3792                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3793                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3794                ),
3795                encoder,
3796                offset,
3797                _depth,
3798            )
3799        }
3800    }
3801    unsafe impl<
3802        D: fidl::encoding::ResourceDialect,
3803        T0: fidl::encoding::Encode<u32, D>,
3804        T1: fidl::encoding::Encode<u64, D>,
3805        T2: fidl::encoding::Encode<DaiSampleFormat, D>,
3806        T3: fidl::encoding::Encode<DaiFrameFormat, D>,
3807        T4: fidl::encoding::Encode<u32, D>,
3808        T5: fidl::encoding::Encode<u8, D>,
3809        T6: fidl::encoding::Encode<u8, D>,
3810    > fidl::encoding::Encode<DaiFormat, D> for (T0, T1, T2, T3, T4, T5, T6)
3811    {
3812        #[inline]
3813        unsafe fn encode(
3814            self,
3815            encoder: &mut fidl::encoding::Encoder<'_, D>,
3816            offset: usize,
3817            depth: fidl::encoding::Depth,
3818        ) -> fidl::Result<()> {
3819            encoder.debug_check_bounds::<DaiFormat>(offset);
3820            // Zero out padding regions. There's no need to apply masks
3821            // because the unmasked parts will be overwritten by fields.
3822            unsafe {
3823                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3824                (ptr as *mut u64).write_unaligned(0);
3825            }
3826            unsafe {
3827                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3828                (ptr as *mut u64).write_unaligned(0);
3829            }
3830            unsafe {
3831                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
3832                (ptr as *mut u64).write_unaligned(0);
3833            }
3834            // Write the fields.
3835            self.0.encode(encoder, offset + 0, depth)?;
3836            self.1.encode(encoder, offset + 8, depth)?;
3837            self.2.encode(encoder, offset + 16, depth)?;
3838            self.3.encode(encoder, offset + 24, depth)?;
3839            self.4.encode(encoder, offset + 40, depth)?;
3840            self.5.encode(encoder, offset + 44, depth)?;
3841            self.6.encode(encoder, offset + 45, depth)?;
3842            Ok(())
3843        }
3844    }
3845
3846    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFormat {
3847        #[inline(always)]
3848        fn new_empty() -> Self {
3849            Self {
3850                number_of_channels: fidl::new_empty!(u32, D),
3851                channels_to_use_bitmask: fidl::new_empty!(u64, D),
3852                sample_format: fidl::new_empty!(DaiSampleFormat, D),
3853                frame_format: fidl::new_empty!(DaiFrameFormat, D),
3854                frame_rate: fidl::new_empty!(u32, D),
3855                bits_per_slot: fidl::new_empty!(u8, D),
3856                bits_per_sample: fidl::new_empty!(u8, D),
3857            }
3858        }
3859
3860        #[inline]
3861        unsafe fn decode(
3862            &mut self,
3863            decoder: &mut fidl::encoding::Decoder<'_, D>,
3864            offset: usize,
3865            _depth: fidl::encoding::Depth,
3866        ) -> fidl::Result<()> {
3867            decoder.debug_check_bounds::<Self>(offset);
3868            // Verify that padding bytes are zero.
3869            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3870            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3871            let mask = 0xffffffff00000000u64;
3872            let maskedval = padval & mask;
3873            if maskedval != 0 {
3874                return Err(fidl::Error::NonZeroPadding {
3875                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3876                });
3877            }
3878            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3879            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3880            let mask = 0xffffffffffffff00u64;
3881            let maskedval = padval & mask;
3882            if maskedval != 0 {
3883                return Err(fidl::Error::NonZeroPadding {
3884                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3885                });
3886            }
3887            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
3888            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3889            let mask = 0xffff000000000000u64;
3890            let maskedval = padval & mask;
3891            if maskedval != 0 {
3892                return Err(fidl::Error::NonZeroPadding {
3893                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
3894                });
3895            }
3896            fidl::decode!(u32, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3897            fidl::decode!(u64, D, &mut self.channels_to_use_bitmask, decoder, offset + 8, _depth)?;
3898            fidl::decode!(
3899                DaiSampleFormat,
3900                D,
3901                &mut self.sample_format,
3902                decoder,
3903                offset + 16,
3904                _depth
3905            )?;
3906            fidl::decode!(DaiFrameFormat, D, &mut self.frame_format, decoder, offset + 24, _depth)?;
3907            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 40, _depth)?;
3908            fidl::decode!(u8, D, &mut self.bits_per_slot, decoder, offset + 44, _depth)?;
3909            fidl::decode!(u8, D, &mut self.bits_per_sample, decoder, offset + 45, _depth)?;
3910            Ok(())
3911        }
3912    }
3913
3914    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatCustom {
3915        type Borrowed<'a> = &'a Self;
3916        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3917            value
3918        }
3919    }
3920
3921    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatCustom {
3922        type Owned = Self;
3923
3924        #[inline(always)]
3925        fn inline_align(_context: fidl::encoding::Context) -> usize {
3926            1
3927        }
3928
3929        #[inline(always)]
3930        fn inline_size(_context: fidl::encoding::Context) -> usize {
3931            4
3932        }
3933    }
3934
3935    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormatCustom, D>
3936        for &DaiFrameFormatCustom
3937    {
3938        #[inline]
3939        unsafe fn encode(
3940            self,
3941            encoder: &mut fidl::encoding::Encoder<'_, D>,
3942            offset: usize,
3943            _depth: fidl::encoding::Depth,
3944        ) -> fidl::Result<()> {
3945            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3946            // Delegate to tuple encoding.
3947            fidl::encoding::Encode::<DaiFrameFormatCustom, D>::encode(
3948                (
3949                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.left_justified),
3950                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.sclk_on_raising),
3951                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_sclks_offset),
3952                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_size),
3953                ),
3954                encoder,
3955                offset,
3956                _depth,
3957            )
3958        }
3959    }
3960    unsafe impl<
3961        D: fidl::encoding::ResourceDialect,
3962        T0: fidl::encoding::Encode<bool, D>,
3963        T1: fidl::encoding::Encode<bool, D>,
3964        T2: fidl::encoding::Encode<i8, D>,
3965        T3: fidl::encoding::Encode<u8, D>,
3966    > fidl::encoding::Encode<DaiFrameFormatCustom, D> for (T0, T1, T2, T3)
3967    {
3968        #[inline]
3969        unsafe fn encode(
3970            self,
3971            encoder: &mut fidl::encoding::Encoder<'_, D>,
3972            offset: usize,
3973            depth: fidl::encoding::Depth,
3974        ) -> fidl::Result<()> {
3975            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3976            // Zero out padding regions. There's no need to apply masks
3977            // because the unmasked parts will be overwritten by fields.
3978            // Write the fields.
3979            self.0.encode(encoder, offset + 0, depth)?;
3980            self.1.encode(encoder, offset + 1, depth)?;
3981            self.2.encode(encoder, offset + 2, depth)?;
3982            self.3.encode(encoder, offset + 3, depth)?;
3983            Ok(())
3984        }
3985    }
3986
3987    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormatCustom {
3988        #[inline(always)]
3989        fn new_empty() -> Self {
3990            Self {
3991                left_justified: fidl::new_empty!(bool, D),
3992                sclk_on_raising: fidl::new_empty!(bool, D),
3993                frame_sync_sclks_offset: fidl::new_empty!(i8, D),
3994                frame_sync_size: fidl::new_empty!(u8, D),
3995            }
3996        }
3997
3998        #[inline]
3999        unsafe fn decode(
4000            &mut self,
4001            decoder: &mut fidl::encoding::Decoder<'_, D>,
4002            offset: usize,
4003            _depth: fidl::encoding::Depth,
4004        ) -> fidl::Result<()> {
4005            decoder.debug_check_bounds::<Self>(offset);
4006            // Verify that padding bytes are zero.
4007            fidl::decode!(bool, D, &mut self.left_justified, decoder, offset + 0, _depth)?;
4008            fidl::decode!(bool, D, &mut self.sclk_on_raising, decoder, offset + 1, _depth)?;
4009            fidl::decode!(i8, D, &mut self.frame_sync_sclks_offset, decoder, offset + 2, _depth)?;
4010            fidl::decode!(u8, D, &mut self.frame_sync_size, decoder, offset + 3, _depth)?;
4011            Ok(())
4012        }
4013    }
4014
4015    impl fidl::encoding::ValueTypeMarker for DaiGetPropertiesResponse {
4016        type Borrowed<'a> = &'a Self;
4017        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4018            value
4019        }
4020    }
4021
4022    unsafe impl fidl::encoding::TypeMarker for DaiGetPropertiesResponse {
4023        type Owned = Self;
4024
4025        #[inline(always)]
4026        fn inline_align(_context: fidl::encoding::Context) -> usize {
4027            8
4028        }
4029
4030        #[inline(always)]
4031        fn inline_size(_context: fidl::encoding::Context) -> usize {
4032            16
4033        }
4034    }
4035
4036    unsafe impl<D: fidl::encoding::ResourceDialect>
4037        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for &DaiGetPropertiesResponse
4038    {
4039        #[inline]
4040        unsafe fn encode(
4041            self,
4042            encoder: &mut fidl::encoding::Encoder<'_, D>,
4043            offset: usize,
4044            _depth: fidl::encoding::Depth,
4045        ) -> fidl::Result<()> {
4046            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4047            // Delegate to tuple encoding.
4048            fidl::encoding::Encode::<DaiGetPropertiesResponse, D>::encode(
4049                (<DaiProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
4050                encoder,
4051                offset,
4052                _depth,
4053            )
4054        }
4055    }
4056    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiProperties, D>>
4057        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for (T0,)
4058    {
4059        #[inline]
4060        unsafe fn encode(
4061            self,
4062            encoder: &mut fidl::encoding::Encoder<'_, D>,
4063            offset: usize,
4064            depth: fidl::encoding::Depth,
4065        ) -> fidl::Result<()> {
4066            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4067            // Zero out padding regions. There's no need to apply masks
4068            // because the unmasked parts will be overwritten by fields.
4069            // Write the fields.
4070            self.0.encode(encoder, offset + 0, depth)?;
4071            Ok(())
4072        }
4073    }
4074
4075    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4076        for DaiGetPropertiesResponse
4077    {
4078        #[inline(always)]
4079        fn new_empty() -> Self {
4080            Self { properties: fidl::new_empty!(DaiProperties, D) }
4081        }
4082
4083        #[inline]
4084        unsafe fn decode(
4085            &mut self,
4086            decoder: &mut fidl::encoding::Decoder<'_, D>,
4087            offset: usize,
4088            _depth: fidl::encoding::Depth,
4089        ) -> fidl::Result<()> {
4090            decoder.debug_check_bounds::<Self>(offset);
4091            // Verify that padding bytes are zero.
4092            fidl::decode!(DaiProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
4093            Ok(())
4094        }
4095    }
4096
4097    impl fidl::encoding::ValueTypeMarker for DaiSupportedFormats {
4098        type Borrowed<'a> = &'a Self;
4099        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4100            value
4101        }
4102    }
4103
4104    unsafe impl fidl::encoding::TypeMarker for DaiSupportedFormats {
4105        type Owned = Self;
4106
4107        #[inline(always)]
4108        fn inline_align(_context: fidl::encoding::Context) -> usize {
4109            8
4110        }
4111
4112        #[inline(always)]
4113        fn inline_size(_context: fidl::encoding::Context) -> usize {
4114            96
4115        }
4116    }
4117
4118    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiSupportedFormats, D>
4119        for &DaiSupportedFormats
4120    {
4121        #[inline]
4122        unsafe fn encode(
4123            self,
4124            encoder: &mut fidl::encoding::Encoder<'_, D>,
4125            offset: usize,
4126            _depth: fidl::encoding::Depth,
4127        ) -> fidl::Result<()> {
4128            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4129            // Delegate to tuple encoding.
4130            fidl::encoding::Encode::<DaiSupportedFormats, D>::encode(
4131                (
4132                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4133                    <fidl::encoding::Vector<DaiSampleFormat, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_formats),
4134                    <fidl::encoding::Vector<DaiFrameFormat, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_formats),
4135                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rates),
4136                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
4137                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
4138                ),
4139                encoder, offset, _depth
4140            )
4141        }
4142    }
4143    unsafe impl<
4144        D: fidl::encoding::ResourceDialect,
4145        T0: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4146        T1: fidl::encoding::Encode<fidl::encoding::Vector<DaiSampleFormat, 4>, D>,
4147        T2: fidl::encoding::Encode<fidl::encoding::Vector<DaiFrameFormat, 64>, D>,
4148        T3: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4149        T4: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4150        T5: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4151    > fidl::encoding::Encode<DaiSupportedFormats, D> for (T0, T1, T2, T3, T4, T5)
4152    {
4153        #[inline]
4154        unsafe fn encode(
4155            self,
4156            encoder: &mut fidl::encoding::Encoder<'_, D>,
4157            offset: usize,
4158            depth: fidl::encoding::Depth,
4159        ) -> fidl::Result<()> {
4160            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4161            // Zero out padding regions. There's no need to apply masks
4162            // because the unmasked parts will be overwritten by fields.
4163            // Write the fields.
4164            self.0.encode(encoder, offset + 0, depth)?;
4165            self.1.encode(encoder, offset + 16, depth)?;
4166            self.2.encode(encoder, offset + 32, depth)?;
4167            self.3.encode(encoder, offset + 48, depth)?;
4168            self.4.encode(encoder, offset + 64, depth)?;
4169            self.5.encode(encoder, offset + 80, depth)?;
4170            Ok(())
4171        }
4172    }
4173
4174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSupportedFormats {
4175        #[inline(always)]
4176        fn new_empty() -> Self {
4177            Self {
4178                number_of_channels: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4179                sample_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSampleFormat, 4>, D),
4180                frame_formats: fidl::new_empty!(fidl::encoding::Vector<DaiFrameFormat, 64>, D),
4181                frame_rates: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4182                bits_per_slot: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4183                bits_per_sample: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4184            }
4185        }
4186
4187        #[inline]
4188        unsafe fn decode(
4189            &mut self,
4190            decoder: &mut fidl::encoding::Decoder<'_, D>,
4191            offset: usize,
4192            _depth: fidl::encoding::Depth,
4193        ) -> fidl::Result<()> {
4194            decoder.debug_check_bounds::<Self>(offset);
4195            // Verify that padding bytes are zero.
4196            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4197            fidl::decode!(fidl::encoding::Vector<DaiSampleFormat, 4>, D, &mut self.sample_formats, decoder, offset + 16, _depth)?;
4198            fidl::decode!(fidl::encoding::Vector<DaiFrameFormat, 64>, D, &mut self.frame_formats, decoder, offset + 32, _depth)?;
4199            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.frame_rates, decoder, offset + 48, _depth)?;
4200            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_slot, decoder, offset + 64, _depth)?;
4201            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_sample, decoder, offset + 80, _depth)?;
4202            Ok(())
4203        }
4204    }
4205
4206    impl fidl::encoding::ValueTypeMarker for DaiGetDaiFormatsResponse {
4207        type Borrowed<'a> = &'a Self;
4208        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4209            value
4210        }
4211    }
4212
4213    unsafe impl fidl::encoding::TypeMarker for DaiGetDaiFormatsResponse {
4214        type Owned = Self;
4215
4216        #[inline(always)]
4217        fn inline_align(_context: fidl::encoding::Context) -> usize {
4218            8
4219        }
4220
4221        #[inline(always)]
4222        fn inline_size(_context: fidl::encoding::Context) -> usize {
4223            16
4224        }
4225    }
4226
4227    unsafe impl<D: fidl::encoding::ResourceDialect>
4228        fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for &DaiGetDaiFormatsResponse
4229    {
4230        #[inline]
4231        unsafe fn encode(
4232            self,
4233            encoder: &mut fidl::encoding::Encoder<'_, D>,
4234            offset: usize,
4235            _depth: fidl::encoding::Depth,
4236        ) -> fidl::Result<()> {
4237            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4238            // Delegate to tuple encoding.
4239            fidl::encoding::Encode::<DaiGetDaiFormatsResponse, D>::encode(
4240                (
4241                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
4242                ),
4243                encoder, offset, _depth
4244            )
4245        }
4246    }
4247    unsafe impl<
4248        D: fidl::encoding::ResourceDialect,
4249        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
4250    > fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for (T0,)
4251    {
4252        #[inline]
4253        unsafe fn encode(
4254            self,
4255            encoder: &mut fidl::encoding::Encoder<'_, D>,
4256            offset: usize,
4257            depth: fidl::encoding::Depth,
4258        ) -> fidl::Result<()> {
4259            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4260            // Zero out padding regions. There's no need to apply masks
4261            // because the unmasked parts will be overwritten by fields.
4262            // Write the fields.
4263            self.0.encode(encoder, offset + 0, depth)?;
4264            Ok(())
4265        }
4266    }
4267
4268    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4269        for DaiGetDaiFormatsResponse
4270    {
4271        #[inline(always)]
4272        fn new_empty() -> Self {
4273            Self {
4274                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
4275            }
4276        }
4277
4278        #[inline]
4279        unsafe fn decode(
4280            &mut self,
4281            decoder: &mut fidl::encoding::Decoder<'_, D>,
4282            offset: usize,
4283            _depth: fidl::encoding::Depth,
4284        ) -> fidl::Result<()> {
4285            decoder.debug_check_bounds::<Self>(offset);
4286            // Verify that padding bytes are zero.
4287            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
4288            Ok(())
4289        }
4290    }
4291
4292    impl fidl::encoding::ValueTypeMarker for DaiGetRingBufferFormatsResponse {
4293        type Borrowed<'a> = &'a Self;
4294        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4295            value
4296        }
4297    }
4298
4299    unsafe impl fidl::encoding::TypeMarker for DaiGetRingBufferFormatsResponse {
4300        type Owned = Self;
4301
4302        #[inline(always)]
4303        fn inline_align(_context: fidl::encoding::Context) -> usize {
4304            8
4305        }
4306
4307        #[inline(always)]
4308        fn inline_size(_context: fidl::encoding::Context) -> usize {
4309            16
4310        }
4311    }
4312
4313    unsafe impl<D: fidl::encoding::ResourceDialect>
4314        fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D>
4315        for &DaiGetRingBufferFormatsResponse
4316    {
4317        #[inline]
4318        unsafe fn encode(
4319            self,
4320            encoder: &mut fidl::encoding::Encoder<'_, D>,
4321            offset: usize,
4322            _depth: fidl::encoding::Depth,
4323        ) -> fidl::Result<()> {
4324            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4325            // Delegate to tuple encoding.
4326            fidl::encoding::Encode::<DaiGetRingBufferFormatsResponse, D>::encode(
4327                (
4328                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
4329                ),
4330                encoder, offset, _depth
4331            )
4332        }
4333    }
4334    unsafe impl<
4335        D: fidl::encoding::ResourceDialect,
4336        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
4337    > fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D> for (T0,)
4338    {
4339        #[inline]
4340        unsafe fn encode(
4341            self,
4342            encoder: &mut fidl::encoding::Encoder<'_, D>,
4343            offset: usize,
4344            depth: fidl::encoding::Depth,
4345        ) -> fidl::Result<()> {
4346            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4347            // Zero out padding regions. There's no need to apply masks
4348            // because the unmasked parts will be overwritten by fields.
4349            // Write the fields.
4350            self.0.encode(encoder, offset + 0, depth)?;
4351            Ok(())
4352        }
4353    }
4354
4355    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4356        for DaiGetRingBufferFormatsResponse
4357    {
4358        #[inline(always)]
4359        fn new_empty() -> Self {
4360            Self {
4361                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
4362            }
4363        }
4364
4365        #[inline]
4366        unsafe fn decode(
4367            &mut self,
4368            decoder: &mut fidl::encoding::Decoder<'_, D>,
4369            offset: usize,
4370            _depth: fidl::encoding::Depth,
4371        ) -> fidl::Result<()> {
4372            decoder.debug_check_bounds::<Self>(offset);
4373            // Verify that padding bytes are zero.
4374            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
4375            Ok(())
4376        }
4377    }
4378
4379    impl fidl::encoding::ValueTypeMarker for HealthGetHealthStateResponse {
4380        type Borrowed<'a> = &'a Self;
4381        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4382            value
4383        }
4384    }
4385
4386    unsafe impl fidl::encoding::TypeMarker for HealthGetHealthStateResponse {
4387        type Owned = Self;
4388
4389        #[inline(always)]
4390        fn inline_align(_context: fidl::encoding::Context) -> usize {
4391            8
4392        }
4393
4394        #[inline(always)]
4395        fn inline_size(_context: fidl::encoding::Context) -> usize {
4396            16
4397        }
4398    }
4399
4400    unsafe impl<D: fidl::encoding::ResourceDialect>
4401        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for &HealthGetHealthStateResponse
4402    {
4403        #[inline]
4404        unsafe fn encode(
4405            self,
4406            encoder: &mut fidl::encoding::Encoder<'_, D>,
4407            offset: usize,
4408            _depth: fidl::encoding::Depth,
4409        ) -> fidl::Result<()> {
4410            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4411            // Delegate to tuple encoding.
4412            fidl::encoding::Encode::<HealthGetHealthStateResponse, D>::encode(
4413                (<HealthState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
4414                encoder,
4415                offset,
4416                _depth,
4417            )
4418        }
4419    }
4420    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HealthState, D>>
4421        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for (T0,)
4422    {
4423        #[inline]
4424        unsafe fn encode(
4425            self,
4426            encoder: &mut fidl::encoding::Encoder<'_, D>,
4427            offset: usize,
4428            depth: fidl::encoding::Depth,
4429        ) -> fidl::Result<()> {
4430            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4431            // Zero out padding regions. There's no need to apply masks
4432            // because the unmasked parts will be overwritten by fields.
4433            // Write the fields.
4434            self.0.encode(encoder, offset + 0, depth)?;
4435            Ok(())
4436        }
4437    }
4438
4439    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4440        for HealthGetHealthStateResponse
4441    {
4442        #[inline(always)]
4443        fn new_empty() -> Self {
4444            Self { state: fidl::new_empty!(HealthState, D) }
4445        }
4446
4447        #[inline]
4448        unsafe fn decode(
4449            &mut self,
4450            decoder: &mut fidl::encoding::Decoder<'_, D>,
4451            offset: usize,
4452            _depth: fidl::encoding::Depth,
4453        ) -> fidl::Result<()> {
4454            decoder.debug_check_bounds::<Self>(offset);
4455            // Verify that padding bytes are zero.
4456            fidl::decode!(HealthState, D, &mut self.state, decoder, offset + 0, _depth)?;
4457            Ok(())
4458        }
4459    }
4460
4461    impl fidl::encoding::ValueTypeMarker for PacketStreamControlGetPropertiesResponse {
4462        type Borrowed<'a> = &'a Self;
4463        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4464            value
4465        }
4466    }
4467
4468    unsafe impl fidl::encoding::TypeMarker for PacketStreamControlGetPropertiesResponse {
4469        type Owned = Self;
4470
4471        #[inline(always)]
4472        fn inline_align(_context: fidl::encoding::Context) -> usize {
4473            8
4474        }
4475
4476        #[inline(always)]
4477        fn inline_size(_context: fidl::encoding::Context) -> usize {
4478            16
4479        }
4480    }
4481
4482    unsafe impl<D: fidl::encoding::ResourceDialect>
4483        fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D>
4484        for &PacketStreamControlGetPropertiesResponse
4485    {
4486        #[inline]
4487        unsafe fn encode(
4488            self,
4489            encoder: &mut fidl::encoding::Encoder<'_, D>,
4490            offset: usize,
4491            _depth: fidl::encoding::Depth,
4492        ) -> fidl::Result<()> {
4493            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4494            // Delegate to tuple encoding.
4495            fidl::encoding::Encode::<PacketStreamControlGetPropertiesResponse, D>::encode(
4496                (<PacketStreamProperties as fidl::encoding::ValueTypeMarker>::borrow(
4497                    &self.properties,
4498                ),),
4499                encoder,
4500                offset,
4501                _depth,
4502            )
4503        }
4504    }
4505    unsafe impl<
4506        D: fidl::encoding::ResourceDialect,
4507        T0: fidl::encoding::Encode<PacketStreamProperties, D>,
4508    > fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D> for (T0,)
4509    {
4510        #[inline]
4511        unsafe fn encode(
4512            self,
4513            encoder: &mut fidl::encoding::Encoder<'_, D>,
4514            offset: usize,
4515            depth: fidl::encoding::Depth,
4516        ) -> fidl::Result<()> {
4517            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4518            // Zero out padding regions. There's no need to apply masks
4519            // because the unmasked parts will be overwritten by fields.
4520            // Write the fields.
4521            self.0.encode(encoder, offset + 0, depth)?;
4522            Ok(())
4523        }
4524    }
4525
4526    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4527        for PacketStreamControlGetPropertiesResponse
4528    {
4529        #[inline(always)]
4530        fn new_empty() -> Self {
4531            Self { properties: fidl::new_empty!(PacketStreamProperties, D) }
4532        }
4533
4534        #[inline]
4535        unsafe fn decode(
4536            &mut self,
4537            decoder: &mut fidl::encoding::Decoder<'_, D>,
4538            offset: usize,
4539            _depth: fidl::encoding::Depth,
4540        ) -> fidl::Result<()> {
4541            decoder.debug_check_bounds::<Self>(offset);
4542            // Verify that padding bytes are zero.
4543            fidl::decode!(
4544                PacketStreamProperties,
4545                D,
4546                &mut self.properties,
4547                decoder,
4548                offset + 0,
4549                _depth
4550            )?;
4551            Ok(())
4552        }
4553    }
4554
4555    impl fidl::encoding::ValueTypeMarker for PcmFormat {
4556        type Borrowed<'a> = &'a Self;
4557        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4558            value
4559        }
4560    }
4561
4562    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
4563        type Owned = Self;
4564
4565        #[inline(always)]
4566        fn inline_align(_context: fidl::encoding::Context) -> usize {
4567            4
4568        }
4569
4570        #[inline(always)]
4571        fn inline_size(_context: fidl::encoding::Context) -> usize {
4572            8
4573        }
4574    }
4575
4576    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
4577        for &PcmFormat
4578    {
4579        #[inline]
4580        unsafe fn encode(
4581            self,
4582            encoder: &mut fidl::encoding::Encoder<'_, D>,
4583            offset: usize,
4584            _depth: fidl::encoding::Depth,
4585        ) -> fidl::Result<()> {
4586            encoder.debug_check_bounds::<PcmFormat>(offset);
4587            // Delegate to tuple encoding.
4588            fidl::encoding::Encode::<PcmFormat, D>::encode(
4589                (
4590                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4591                    <SampleFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_format),
4592                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bytes_per_sample),
4593                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.valid_bits_per_sample),
4594                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
4595                ),
4596                encoder,
4597                offset,
4598                _depth,
4599            )
4600        }
4601    }
4602    unsafe impl<
4603        D: fidl::encoding::ResourceDialect,
4604        T0: fidl::encoding::Encode<u8, D>,
4605        T1: fidl::encoding::Encode<SampleFormat, D>,
4606        T2: fidl::encoding::Encode<u8, D>,
4607        T3: fidl::encoding::Encode<u8, D>,
4608        T4: fidl::encoding::Encode<u32, D>,
4609    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3, T4)
4610    {
4611        #[inline]
4612        unsafe fn encode(
4613            self,
4614            encoder: &mut fidl::encoding::Encoder<'_, D>,
4615            offset: usize,
4616            depth: fidl::encoding::Depth,
4617        ) -> fidl::Result<()> {
4618            encoder.debug_check_bounds::<PcmFormat>(offset);
4619            // Zero out padding regions. There's no need to apply masks
4620            // because the unmasked parts will be overwritten by fields.
4621            // Write the fields.
4622            self.0.encode(encoder, offset + 0, depth)?;
4623            self.1.encode(encoder, offset + 1, depth)?;
4624            self.2.encode(encoder, offset + 2, depth)?;
4625            self.3.encode(encoder, offset + 3, depth)?;
4626            self.4.encode(encoder, offset + 4, depth)?;
4627            Ok(())
4628        }
4629    }
4630
4631    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
4632        #[inline(always)]
4633        fn new_empty() -> Self {
4634            Self {
4635                number_of_channels: fidl::new_empty!(u8, D),
4636                sample_format: fidl::new_empty!(SampleFormat, D),
4637                bytes_per_sample: fidl::new_empty!(u8, D),
4638                valid_bits_per_sample: fidl::new_empty!(u8, D),
4639                frame_rate: fidl::new_empty!(u32, D),
4640            }
4641        }
4642
4643        #[inline]
4644        unsafe fn decode(
4645            &mut self,
4646            decoder: &mut fidl::encoding::Decoder<'_, D>,
4647            offset: usize,
4648            _depth: fidl::encoding::Depth,
4649        ) -> fidl::Result<()> {
4650            decoder.debug_check_bounds::<Self>(offset);
4651            // Verify that padding bytes are zero.
4652            fidl::decode!(u8, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4653            fidl::decode!(SampleFormat, D, &mut self.sample_format, decoder, offset + 1, _depth)?;
4654            fidl::decode!(u8, D, &mut self.bytes_per_sample, decoder, offset + 2, _depth)?;
4655            fidl::decode!(u8, D, &mut self.valid_bits_per_sample, decoder, offset + 3, _depth)?;
4656            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 4, _depth)?;
4657            Ok(())
4658        }
4659    }
4660
4661    impl fidl::encoding::ValueTypeMarker for RingBufferGetPropertiesResponse {
4662        type Borrowed<'a> = &'a Self;
4663        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4664            value
4665        }
4666    }
4667
4668    unsafe impl fidl::encoding::TypeMarker for RingBufferGetPropertiesResponse {
4669        type Owned = Self;
4670
4671        #[inline(always)]
4672        fn inline_align(_context: fidl::encoding::Context) -> usize {
4673            8
4674        }
4675
4676        #[inline(always)]
4677        fn inline_size(_context: fidl::encoding::Context) -> usize {
4678            16
4679        }
4680    }
4681
4682    unsafe impl<D: fidl::encoding::ResourceDialect>
4683        fidl::encoding::Encode<RingBufferGetPropertiesResponse, D>
4684        for &RingBufferGetPropertiesResponse
4685    {
4686        #[inline]
4687        unsafe fn encode(
4688            self,
4689            encoder: &mut fidl::encoding::Encoder<'_, D>,
4690            offset: usize,
4691            _depth: fidl::encoding::Depth,
4692        ) -> fidl::Result<()> {
4693            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4694            // Delegate to tuple encoding.
4695            fidl::encoding::Encode::<RingBufferGetPropertiesResponse, D>::encode(
4696                (<RingBufferProperties as fidl::encoding::ValueTypeMarker>::borrow(
4697                    &self.properties,
4698                ),),
4699                encoder,
4700                offset,
4701                _depth,
4702            )
4703        }
4704    }
4705    unsafe impl<
4706        D: fidl::encoding::ResourceDialect,
4707        T0: fidl::encoding::Encode<RingBufferProperties, D>,
4708    > fidl::encoding::Encode<RingBufferGetPropertiesResponse, D> for (T0,)
4709    {
4710        #[inline]
4711        unsafe fn encode(
4712            self,
4713            encoder: &mut fidl::encoding::Encoder<'_, D>,
4714            offset: usize,
4715            depth: fidl::encoding::Depth,
4716        ) -> fidl::Result<()> {
4717            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4718            // Zero out padding regions. There's no need to apply masks
4719            // because the unmasked parts will be overwritten by fields.
4720            // Write the fields.
4721            self.0.encode(encoder, offset + 0, depth)?;
4722            Ok(())
4723        }
4724    }
4725
4726    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4727        for RingBufferGetPropertiesResponse
4728    {
4729        #[inline(always)]
4730        fn new_empty() -> Self {
4731            Self { properties: fidl::new_empty!(RingBufferProperties, D) }
4732        }
4733
4734        #[inline]
4735        unsafe fn decode(
4736            &mut self,
4737            decoder: &mut fidl::encoding::Decoder<'_, D>,
4738            offset: usize,
4739            _depth: fidl::encoding::Depth,
4740        ) -> fidl::Result<()> {
4741            decoder.debug_check_bounds::<Self>(offset);
4742            // Verify that padding bytes are zero.
4743            fidl::decode!(
4744                RingBufferProperties,
4745                D,
4746                &mut self.properties,
4747                decoder,
4748                offset + 0,
4749                _depth
4750            )?;
4751            Ok(())
4752        }
4753    }
4754
4755    impl fidl::encoding::ValueTypeMarker for RingBufferGetVmoRequest {
4756        type Borrowed<'a> = &'a Self;
4757        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4758            value
4759        }
4760    }
4761
4762    unsafe impl fidl::encoding::TypeMarker for RingBufferGetVmoRequest {
4763        type Owned = Self;
4764
4765        #[inline(always)]
4766        fn inline_align(_context: fidl::encoding::Context) -> usize {
4767            4
4768        }
4769
4770        #[inline(always)]
4771        fn inline_size(_context: fidl::encoding::Context) -> usize {
4772            8
4773        }
4774        #[inline(always)]
4775        fn encode_is_copy() -> bool {
4776            true
4777        }
4778
4779        #[inline(always)]
4780        fn decode_is_copy() -> bool {
4781            true
4782        }
4783    }
4784
4785    unsafe impl<D: fidl::encoding::ResourceDialect>
4786        fidl::encoding::Encode<RingBufferGetVmoRequest, D> for &RingBufferGetVmoRequest
4787    {
4788        #[inline]
4789        unsafe fn encode(
4790            self,
4791            encoder: &mut fidl::encoding::Encoder<'_, D>,
4792            offset: usize,
4793            _depth: fidl::encoding::Depth,
4794        ) -> fidl::Result<()> {
4795            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4796            unsafe {
4797                // Copy the object into the buffer.
4798                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4799                (buf_ptr as *mut RingBufferGetVmoRequest)
4800                    .write_unaligned((self as *const RingBufferGetVmoRequest).read());
4801                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4802                // done second because the memcpy will write garbage to these bytes.
4803            }
4804            Ok(())
4805        }
4806    }
4807    unsafe impl<
4808        D: fidl::encoding::ResourceDialect,
4809        T0: fidl::encoding::Encode<u32, D>,
4810        T1: fidl::encoding::Encode<u32, D>,
4811    > fidl::encoding::Encode<RingBufferGetVmoRequest, D> for (T0, T1)
4812    {
4813        #[inline]
4814        unsafe fn encode(
4815            self,
4816            encoder: &mut fidl::encoding::Encoder<'_, D>,
4817            offset: usize,
4818            depth: fidl::encoding::Depth,
4819        ) -> fidl::Result<()> {
4820            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4821            // Zero out padding regions. There's no need to apply masks
4822            // because the unmasked parts will be overwritten by fields.
4823            // Write the fields.
4824            self.0.encode(encoder, offset + 0, depth)?;
4825            self.1.encode(encoder, offset + 4, depth)?;
4826            Ok(())
4827        }
4828    }
4829
4830    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4831        for RingBufferGetVmoRequest
4832    {
4833        #[inline(always)]
4834        fn new_empty() -> Self {
4835            Self {
4836                min_frames: fidl::new_empty!(u32, D),
4837                clock_recovery_notifications_per_ring: fidl::new_empty!(u32, D),
4838            }
4839        }
4840
4841        #[inline]
4842        unsafe fn decode(
4843            &mut self,
4844            decoder: &mut fidl::encoding::Decoder<'_, D>,
4845            offset: usize,
4846            _depth: fidl::encoding::Depth,
4847        ) -> fidl::Result<()> {
4848            decoder.debug_check_bounds::<Self>(offset);
4849            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4850            // Verify that padding bytes are zero.
4851            // Copy from the buffer into the object.
4852            unsafe {
4853                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4854            }
4855            Ok(())
4856        }
4857    }
4858
4859    impl fidl::encoding::ValueTypeMarker for RingBufferPositionInfo {
4860        type Borrowed<'a> = &'a Self;
4861        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4862            value
4863        }
4864    }
4865
4866    unsafe impl fidl::encoding::TypeMarker for RingBufferPositionInfo {
4867        type Owned = Self;
4868
4869        #[inline(always)]
4870        fn inline_align(_context: fidl::encoding::Context) -> usize {
4871            8
4872        }
4873
4874        #[inline(always)]
4875        fn inline_size(_context: fidl::encoding::Context) -> usize {
4876            16
4877        }
4878    }
4879
4880    unsafe impl<D: fidl::encoding::ResourceDialect>
4881        fidl::encoding::Encode<RingBufferPositionInfo, D> for &RingBufferPositionInfo
4882    {
4883        #[inline]
4884        unsafe fn encode(
4885            self,
4886            encoder: &mut fidl::encoding::Encoder<'_, D>,
4887            offset: usize,
4888            _depth: fidl::encoding::Depth,
4889        ) -> fidl::Result<()> {
4890            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4891            unsafe {
4892                // Copy the object into the buffer.
4893                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4894                (buf_ptr as *mut RingBufferPositionInfo)
4895                    .write_unaligned((self as *const RingBufferPositionInfo).read());
4896                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4897                // done second because the memcpy will write garbage to these bytes.
4898                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4899                let padding_mask = 0xffffffff00000000u64;
4900                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4901            }
4902            Ok(())
4903        }
4904    }
4905    unsafe impl<
4906        D: fidl::encoding::ResourceDialect,
4907        T0: fidl::encoding::Encode<i64, D>,
4908        T1: fidl::encoding::Encode<u32, D>,
4909    > fidl::encoding::Encode<RingBufferPositionInfo, D> for (T0, T1)
4910    {
4911        #[inline]
4912        unsafe fn encode(
4913            self,
4914            encoder: &mut fidl::encoding::Encoder<'_, D>,
4915            offset: usize,
4916            depth: fidl::encoding::Depth,
4917        ) -> fidl::Result<()> {
4918            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4919            // Zero out padding regions. There's no need to apply masks
4920            // because the unmasked parts will be overwritten by fields.
4921            unsafe {
4922                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4923                (ptr as *mut u64).write_unaligned(0);
4924            }
4925            // Write the fields.
4926            self.0.encode(encoder, offset + 0, depth)?;
4927            self.1.encode(encoder, offset + 8, depth)?;
4928            Ok(())
4929        }
4930    }
4931
4932    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4933        for RingBufferPositionInfo
4934    {
4935        #[inline(always)]
4936        fn new_empty() -> Self {
4937            Self { timestamp: fidl::new_empty!(i64, D), position: fidl::new_empty!(u32, D) }
4938        }
4939
4940        #[inline]
4941        unsafe fn decode(
4942            &mut self,
4943            decoder: &mut fidl::encoding::Decoder<'_, D>,
4944            offset: usize,
4945            _depth: fidl::encoding::Depth,
4946        ) -> fidl::Result<()> {
4947            decoder.debug_check_bounds::<Self>(offset);
4948            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4949            // Verify that padding bytes are zero.
4950            let ptr = unsafe { buf_ptr.offset(8) };
4951            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4952            let mask = 0xffffffff00000000u64;
4953            let maskedval = padval & mask;
4954            if maskedval != 0 {
4955                return Err(fidl::Error::NonZeroPadding {
4956                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4957                });
4958            }
4959            // Copy from the buffer into the object.
4960            unsafe {
4961                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4962            }
4963            Ok(())
4964        }
4965    }
4966
4967    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsRequest {
4968        type Borrowed<'a> = &'a Self;
4969        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4970            value
4971        }
4972    }
4973
4974    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsRequest {
4975        type Owned = Self;
4976
4977        #[inline(always)]
4978        fn inline_align(_context: fidl::encoding::Context) -> usize {
4979            8
4980        }
4981
4982        #[inline(always)]
4983        fn inline_size(_context: fidl::encoding::Context) -> usize {
4984            8
4985        }
4986        #[inline(always)]
4987        fn encode_is_copy() -> bool {
4988            true
4989        }
4990
4991        #[inline(always)]
4992        fn decode_is_copy() -> bool {
4993            true
4994        }
4995    }
4996
4997    unsafe impl<D: fidl::encoding::ResourceDialect>
4998        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D>
4999        for &RingBufferSetActiveChannelsRequest
5000    {
5001        #[inline]
5002        unsafe fn encode(
5003            self,
5004            encoder: &mut fidl::encoding::Encoder<'_, D>,
5005            offset: usize,
5006            _depth: fidl::encoding::Depth,
5007        ) -> fidl::Result<()> {
5008            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5009            unsafe {
5010                // Copy the object into the buffer.
5011                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5012                (buf_ptr as *mut RingBufferSetActiveChannelsRequest)
5013                    .write_unaligned((self as *const RingBufferSetActiveChannelsRequest).read());
5014                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5015                // done second because the memcpy will write garbage to these bytes.
5016            }
5017            Ok(())
5018        }
5019    }
5020    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
5021        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D> for (T0,)
5022    {
5023        #[inline]
5024        unsafe fn encode(
5025            self,
5026            encoder: &mut fidl::encoding::Encoder<'_, D>,
5027            offset: usize,
5028            depth: fidl::encoding::Depth,
5029        ) -> fidl::Result<()> {
5030            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5031            // Zero out padding regions. There's no need to apply masks
5032            // because the unmasked parts will be overwritten by fields.
5033            // Write the fields.
5034            self.0.encode(encoder, offset + 0, depth)?;
5035            Ok(())
5036        }
5037    }
5038
5039    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5040        for RingBufferSetActiveChannelsRequest
5041    {
5042        #[inline(always)]
5043        fn new_empty() -> Self {
5044            Self { active_channels_bitmask: fidl::new_empty!(u64, D) }
5045        }
5046
5047        #[inline]
5048        unsafe fn decode(
5049            &mut self,
5050            decoder: &mut fidl::encoding::Decoder<'_, D>,
5051            offset: usize,
5052            _depth: fidl::encoding::Depth,
5053        ) -> fidl::Result<()> {
5054            decoder.debug_check_bounds::<Self>(offset);
5055            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5056            // Verify that padding bytes are zero.
5057            // Copy from the buffer into the object.
5058            unsafe {
5059                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5060            }
5061            Ok(())
5062        }
5063    }
5064
5065    impl fidl::encoding::ValueTypeMarker for RingBufferStartResponse {
5066        type Borrowed<'a> = &'a Self;
5067        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5068            value
5069        }
5070    }
5071
5072    unsafe impl fidl::encoding::TypeMarker for RingBufferStartResponse {
5073        type Owned = Self;
5074
5075        #[inline(always)]
5076        fn inline_align(_context: fidl::encoding::Context) -> usize {
5077            8
5078        }
5079
5080        #[inline(always)]
5081        fn inline_size(_context: fidl::encoding::Context) -> usize {
5082            8
5083        }
5084        #[inline(always)]
5085        fn encode_is_copy() -> bool {
5086            true
5087        }
5088
5089        #[inline(always)]
5090        fn decode_is_copy() -> bool {
5091            true
5092        }
5093    }
5094
5095    unsafe impl<D: fidl::encoding::ResourceDialect>
5096        fidl::encoding::Encode<RingBufferStartResponse, D> for &RingBufferStartResponse
5097    {
5098        #[inline]
5099        unsafe fn encode(
5100            self,
5101            encoder: &mut fidl::encoding::Encoder<'_, D>,
5102            offset: usize,
5103            _depth: fidl::encoding::Depth,
5104        ) -> fidl::Result<()> {
5105            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5106            unsafe {
5107                // Copy the object into the buffer.
5108                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5109                (buf_ptr as *mut RingBufferStartResponse)
5110                    .write_unaligned((self as *const RingBufferStartResponse).read());
5111                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5112                // done second because the memcpy will write garbage to these bytes.
5113            }
5114            Ok(())
5115        }
5116    }
5117    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5118        fidl::encoding::Encode<RingBufferStartResponse, D> for (T0,)
5119    {
5120        #[inline]
5121        unsafe fn encode(
5122            self,
5123            encoder: &mut fidl::encoding::Encoder<'_, D>,
5124            offset: usize,
5125            depth: fidl::encoding::Depth,
5126        ) -> fidl::Result<()> {
5127            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5128            // Zero out padding regions. There's no need to apply masks
5129            // because the unmasked parts will be overwritten by fields.
5130            // Write the fields.
5131            self.0.encode(encoder, offset + 0, depth)?;
5132            Ok(())
5133        }
5134    }
5135
5136    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5137        for RingBufferStartResponse
5138    {
5139        #[inline(always)]
5140        fn new_empty() -> Self {
5141            Self { start_time: fidl::new_empty!(i64, D) }
5142        }
5143
5144        #[inline]
5145        unsafe fn decode(
5146            &mut self,
5147            decoder: &mut fidl::encoding::Decoder<'_, D>,
5148            offset: usize,
5149            _depth: fidl::encoding::Depth,
5150        ) -> fidl::Result<()> {
5151            decoder.debug_check_bounds::<Self>(offset);
5152            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5153            // Verify that padding bytes are zero.
5154            // Copy from the buffer into the object.
5155            unsafe {
5156                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5157            }
5158            Ok(())
5159        }
5160    }
5161
5162    impl fidl::encoding::ValueTypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5163        type Borrowed<'a> = &'a Self;
5164        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5165            value
5166        }
5167    }
5168
5169    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5170        type Owned = Self;
5171
5172        #[inline(always)]
5173        fn inline_align(_context: fidl::encoding::Context) -> usize {
5174            8
5175        }
5176
5177        #[inline(always)]
5178        fn inline_size(_context: fidl::encoding::Context) -> usize {
5179            16
5180        }
5181    }
5182
5183    unsafe impl<D: fidl::encoding::ResourceDialect>
5184        fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D>
5185        for &RingBufferWatchClockRecoveryPositionInfoResponse
5186    {
5187        #[inline]
5188        unsafe fn encode(
5189            self,
5190            encoder: &mut fidl::encoding::Encoder<'_, D>,
5191            offset: usize,
5192            _depth: fidl::encoding::Depth,
5193        ) -> fidl::Result<()> {
5194            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5195            unsafe {
5196                // Copy the object into the buffer.
5197                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5198                (buf_ptr as *mut RingBufferWatchClockRecoveryPositionInfoResponse).write_unaligned(
5199                    (self as *const RingBufferWatchClockRecoveryPositionInfoResponse).read(),
5200                );
5201                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5202                // done second because the memcpy will write garbage to these bytes.
5203                let padding_ptr = buf_ptr.offset(8) as *mut u64;
5204                let padding_mask = 0xffffffff00000000u64;
5205                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5206            }
5207            Ok(())
5208        }
5209    }
5210    unsafe impl<
5211        D: fidl::encoding::ResourceDialect,
5212        T0: fidl::encoding::Encode<RingBufferPositionInfo, D>,
5213    > fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D> for (T0,)
5214    {
5215        #[inline]
5216        unsafe fn encode(
5217            self,
5218            encoder: &mut fidl::encoding::Encoder<'_, D>,
5219            offset: usize,
5220            depth: fidl::encoding::Depth,
5221        ) -> fidl::Result<()> {
5222            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5223            // Zero out padding regions. There's no need to apply masks
5224            // because the unmasked parts will be overwritten by fields.
5225            // Write the fields.
5226            self.0.encode(encoder, offset + 0, depth)?;
5227            Ok(())
5228        }
5229    }
5230
5231    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5232        for RingBufferWatchClockRecoveryPositionInfoResponse
5233    {
5234        #[inline(always)]
5235        fn new_empty() -> Self {
5236            Self { position_info: fidl::new_empty!(RingBufferPositionInfo, D) }
5237        }
5238
5239        #[inline]
5240        unsafe fn decode(
5241            &mut self,
5242            decoder: &mut fidl::encoding::Decoder<'_, D>,
5243            offset: usize,
5244            _depth: fidl::encoding::Depth,
5245        ) -> fidl::Result<()> {
5246            decoder.debug_check_bounds::<Self>(offset);
5247            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5248            // Verify that padding bytes are zero.
5249            let ptr = unsafe { buf_ptr.offset(8) };
5250            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5251            let mask = 0xffffffff00000000u64;
5252            let maskedval = padval & mask;
5253            if maskedval != 0 {
5254                return Err(fidl::Error::NonZeroPadding {
5255                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
5256                });
5257            }
5258            // Copy from the buffer into the object.
5259            unsafe {
5260                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
5261            }
5262            Ok(())
5263        }
5264    }
5265
5266    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsResponse {
5267        type Borrowed<'a> = &'a Self;
5268        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5269            value
5270        }
5271    }
5272
5273    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsResponse {
5274        type Owned = Self;
5275
5276        #[inline(always)]
5277        fn inline_align(_context: fidl::encoding::Context) -> usize {
5278            8
5279        }
5280
5281        #[inline(always)]
5282        fn inline_size(_context: fidl::encoding::Context) -> usize {
5283            8
5284        }
5285        #[inline(always)]
5286        fn encode_is_copy() -> bool {
5287            true
5288        }
5289
5290        #[inline(always)]
5291        fn decode_is_copy() -> bool {
5292            true
5293        }
5294    }
5295
5296    unsafe impl<D: fidl::encoding::ResourceDialect>
5297        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D>
5298        for &RingBufferSetActiveChannelsResponse
5299    {
5300        #[inline]
5301        unsafe fn encode(
5302            self,
5303            encoder: &mut fidl::encoding::Encoder<'_, D>,
5304            offset: usize,
5305            _depth: fidl::encoding::Depth,
5306        ) -> fidl::Result<()> {
5307            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5308            unsafe {
5309                // Copy the object into the buffer.
5310                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5311                (buf_ptr as *mut RingBufferSetActiveChannelsResponse)
5312                    .write_unaligned((self as *const RingBufferSetActiveChannelsResponse).read());
5313                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5314                // done second because the memcpy will write garbage to these bytes.
5315            }
5316            Ok(())
5317        }
5318    }
5319    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5320        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D> for (T0,)
5321    {
5322        #[inline]
5323        unsafe fn encode(
5324            self,
5325            encoder: &mut fidl::encoding::Encoder<'_, D>,
5326            offset: usize,
5327            depth: fidl::encoding::Depth,
5328        ) -> fidl::Result<()> {
5329            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5330            // Zero out padding regions. There's no need to apply masks
5331            // because the unmasked parts will be overwritten by fields.
5332            // Write the fields.
5333            self.0.encode(encoder, offset + 0, depth)?;
5334            Ok(())
5335        }
5336    }
5337
5338    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5339        for RingBufferSetActiveChannelsResponse
5340    {
5341        #[inline(always)]
5342        fn new_empty() -> Self {
5343            Self { set_time: fidl::new_empty!(i64, D) }
5344        }
5345
5346        #[inline]
5347        unsafe fn decode(
5348            &mut self,
5349            decoder: &mut fidl::encoding::Decoder<'_, D>,
5350            offset: usize,
5351            _depth: fidl::encoding::Depth,
5352        ) -> fidl::Result<()> {
5353            decoder.debug_check_bounds::<Self>(offset);
5354            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5355            // Verify that padding bytes are zero.
5356            // Copy from the buffer into the object.
5357            unsafe {
5358                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5359            }
5360            Ok(())
5361        }
5362    }
5363
5364    impl fidl::encoding::ValueTypeMarker for RingBufferWatchDelayInfoResponse {
5365        type Borrowed<'a> = &'a Self;
5366        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5367            value
5368        }
5369    }
5370
5371    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchDelayInfoResponse {
5372        type Owned = Self;
5373
5374        #[inline(always)]
5375        fn inline_align(_context: fidl::encoding::Context) -> usize {
5376            8
5377        }
5378
5379        #[inline(always)]
5380        fn inline_size(_context: fidl::encoding::Context) -> usize {
5381            16
5382        }
5383    }
5384
5385    unsafe impl<D: fidl::encoding::ResourceDialect>
5386        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D>
5387        for &RingBufferWatchDelayInfoResponse
5388    {
5389        #[inline]
5390        unsafe fn encode(
5391            self,
5392            encoder: &mut fidl::encoding::Encoder<'_, D>,
5393            offset: usize,
5394            _depth: fidl::encoding::Depth,
5395        ) -> fidl::Result<()> {
5396            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5397            // Delegate to tuple encoding.
5398            fidl::encoding::Encode::<RingBufferWatchDelayInfoResponse, D>::encode(
5399                (<DelayInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.delay_info),),
5400                encoder,
5401                offset,
5402                _depth,
5403            )
5404        }
5405    }
5406    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DelayInfo, D>>
5407        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D> for (T0,)
5408    {
5409        #[inline]
5410        unsafe fn encode(
5411            self,
5412            encoder: &mut fidl::encoding::Encoder<'_, D>,
5413            offset: usize,
5414            depth: fidl::encoding::Depth,
5415        ) -> fidl::Result<()> {
5416            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5417            // Zero out padding regions. There's no need to apply masks
5418            // because the unmasked parts will be overwritten by fields.
5419            // Write the fields.
5420            self.0.encode(encoder, offset + 0, depth)?;
5421            Ok(())
5422        }
5423    }
5424
5425    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5426        for RingBufferWatchDelayInfoResponse
5427    {
5428        #[inline(always)]
5429        fn new_empty() -> Self {
5430            Self { delay_info: fidl::new_empty!(DelayInfo, D) }
5431        }
5432
5433        #[inline]
5434        unsafe fn decode(
5435            &mut self,
5436            decoder: &mut fidl::encoding::Decoder<'_, D>,
5437            offset: usize,
5438            _depth: fidl::encoding::Depth,
5439        ) -> fidl::Result<()> {
5440            decoder.debug_check_bounds::<Self>(offset);
5441            // Verify that padding bytes are zero.
5442            fidl::decode!(DelayInfo, D, &mut self.delay_info, decoder, offset + 0, _depth)?;
5443            Ok(())
5444        }
5445    }
5446
5447    impl fidl::encoding::ValueTypeMarker for StreamConfigGetPropertiesResponse {
5448        type Borrowed<'a> = &'a Self;
5449        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5450            value
5451        }
5452    }
5453
5454    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetPropertiesResponse {
5455        type Owned = Self;
5456
5457        #[inline(always)]
5458        fn inline_align(_context: fidl::encoding::Context) -> usize {
5459            8
5460        }
5461
5462        #[inline(always)]
5463        fn inline_size(_context: fidl::encoding::Context) -> usize {
5464            16
5465        }
5466    }
5467
5468    unsafe impl<D: fidl::encoding::ResourceDialect>
5469        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D>
5470        for &StreamConfigGetPropertiesResponse
5471    {
5472        #[inline]
5473        unsafe fn encode(
5474            self,
5475            encoder: &mut fidl::encoding::Encoder<'_, D>,
5476            offset: usize,
5477            _depth: fidl::encoding::Depth,
5478        ) -> fidl::Result<()> {
5479            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5480            // Delegate to tuple encoding.
5481            fidl::encoding::Encode::<StreamConfigGetPropertiesResponse, D>::encode(
5482                (<StreamProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
5483                encoder,
5484                offset,
5485                _depth,
5486            )
5487        }
5488    }
5489    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamProperties, D>>
5490        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D> for (T0,)
5491    {
5492        #[inline]
5493        unsafe fn encode(
5494            self,
5495            encoder: &mut fidl::encoding::Encoder<'_, D>,
5496            offset: usize,
5497            depth: fidl::encoding::Depth,
5498        ) -> fidl::Result<()> {
5499            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5500            // Zero out padding regions. There's no need to apply masks
5501            // because the unmasked parts will be overwritten by fields.
5502            // Write the fields.
5503            self.0.encode(encoder, offset + 0, depth)?;
5504            Ok(())
5505        }
5506    }
5507
5508    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5509        for StreamConfigGetPropertiesResponse
5510    {
5511        #[inline(always)]
5512        fn new_empty() -> Self {
5513            Self { properties: fidl::new_empty!(StreamProperties, D) }
5514        }
5515
5516        #[inline]
5517        unsafe fn decode(
5518            &mut self,
5519            decoder: &mut fidl::encoding::Decoder<'_, D>,
5520            offset: usize,
5521            _depth: fidl::encoding::Depth,
5522        ) -> fidl::Result<()> {
5523            decoder.debug_check_bounds::<Self>(offset);
5524            // Verify that padding bytes are zero.
5525            fidl::decode!(StreamProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
5526            Ok(())
5527        }
5528    }
5529
5530    impl fidl::encoding::ValueTypeMarker for StreamConfigGetSupportedFormatsResponse {
5531        type Borrowed<'a> = &'a Self;
5532        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5533            value
5534        }
5535    }
5536
5537    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetSupportedFormatsResponse {
5538        type Owned = Self;
5539
5540        #[inline(always)]
5541        fn inline_align(_context: fidl::encoding::Context) -> usize {
5542            8
5543        }
5544
5545        #[inline(always)]
5546        fn inline_size(_context: fidl::encoding::Context) -> usize {
5547            16
5548        }
5549    }
5550
5551    unsafe impl<D: fidl::encoding::ResourceDialect>
5552        fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D>
5553        for &StreamConfigGetSupportedFormatsResponse
5554    {
5555        #[inline]
5556        unsafe fn encode(
5557            self,
5558            encoder: &mut fidl::encoding::Encoder<'_, D>,
5559            offset: usize,
5560            _depth: fidl::encoding::Depth,
5561        ) -> fidl::Result<()> {
5562            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5563            // Delegate to tuple encoding.
5564            fidl::encoding::Encode::<StreamConfigGetSupportedFormatsResponse, D>::encode(
5565                (
5566                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.supported_formats),
5567                ),
5568                encoder, offset, _depth
5569            )
5570        }
5571    }
5572    unsafe impl<
5573        D: fidl::encoding::ResourceDialect,
5574        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
5575    > fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D> for (T0,)
5576    {
5577        #[inline]
5578        unsafe fn encode(
5579            self,
5580            encoder: &mut fidl::encoding::Encoder<'_, D>,
5581            offset: usize,
5582            depth: fidl::encoding::Depth,
5583        ) -> fidl::Result<()> {
5584            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5585            // Zero out padding regions. There's no need to apply masks
5586            // because the unmasked parts will be overwritten by fields.
5587            // Write the fields.
5588            self.0.encode(encoder, offset + 0, depth)?;
5589            Ok(())
5590        }
5591    }
5592
5593    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5594        for StreamConfigGetSupportedFormatsResponse
5595    {
5596        #[inline(always)]
5597        fn new_empty() -> Self {
5598            Self {
5599                supported_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
5600            }
5601        }
5602
5603        #[inline]
5604        unsafe fn decode(
5605            &mut self,
5606            decoder: &mut fidl::encoding::Decoder<'_, D>,
5607            offset: usize,
5608            _depth: fidl::encoding::Depth,
5609        ) -> fidl::Result<()> {
5610            decoder.debug_check_bounds::<Self>(offset);
5611            // Verify that padding bytes are zero.
5612            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.supported_formats, decoder, offset + 0, _depth)?;
5613            Ok(())
5614        }
5615    }
5616
5617    impl fidl::encoding::ValueTypeMarker for StreamConfigSetGainRequest {
5618        type Borrowed<'a> = &'a Self;
5619        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5620            value
5621        }
5622    }
5623
5624    unsafe impl fidl::encoding::TypeMarker for StreamConfigSetGainRequest {
5625        type Owned = Self;
5626
5627        #[inline(always)]
5628        fn inline_align(_context: fidl::encoding::Context) -> usize {
5629            8
5630        }
5631
5632        #[inline(always)]
5633        fn inline_size(_context: fidl::encoding::Context) -> usize {
5634            16
5635        }
5636    }
5637
5638    unsafe impl<D: fidl::encoding::ResourceDialect>
5639        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for &StreamConfigSetGainRequest
5640    {
5641        #[inline]
5642        unsafe fn encode(
5643            self,
5644            encoder: &mut fidl::encoding::Encoder<'_, D>,
5645            offset: usize,
5646            _depth: fidl::encoding::Depth,
5647        ) -> fidl::Result<()> {
5648            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5649            // Delegate to tuple encoding.
5650            fidl::encoding::Encode::<StreamConfigSetGainRequest, D>::encode(
5651                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.target_state),),
5652                encoder,
5653                offset,
5654                _depth,
5655            )
5656        }
5657    }
5658    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5659        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for (T0,)
5660    {
5661        #[inline]
5662        unsafe fn encode(
5663            self,
5664            encoder: &mut fidl::encoding::Encoder<'_, D>,
5665            offset: usize,
5666            depth: fidl::encoding::Depth,
5667        ) -> fidl::Result<()> {
5668            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5669            // Zero out padding regions. There's no need to apply masks
5670            // because the unmasked parts will be overwritten by fields.
5671            // Write the fields.
5672            self.0.encode(encoder, offset + 0, depth)?;
5673            Ok(())
5674        }
5675    }
5676
5677    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5678        for StreamConfigSetGainRequest
5679    {
5680        #[inline(always)]
5681        fn new_empty() -> Self {
5682            Self { target_state: fidl::new_empty!(GainState, D) }
5683        }
5684
5685        #[inline]
5686        unsafe fn decode(
5687            &mut self,
5688            decoder: &mut fidl::encoding::Decoder<'_, D>,
5689            offset: usize,
5690            _depth: fidl::encoding::Depth,
5691        ) -> fidl::Result<()> {
5692            decoder.debug_check_bounds::<Self>(offset);
5693            // Verify that padding bytes are zero.
5694            fidl::decode!(GainState, D, &mut self.target_state, decoder, offset + 0, _depth)?;
5695            Ok(())
5696        }
5697    }
5698
5699    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchGainStateResponse {
5700        type Borrowed<'a> = &'a Self;
5701        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5702            value
5703        }
5704    }
5705
5706    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchGainStateResponse {
5707        type Owned = Self;
5708
5709        #[inline(always)]
5710        fn inline_align(_context: fidl::encoding::Context) -> usize {
5711            8
5712        }
5713
5714        #[inline(always)]
5715        fn inline_size(_context: fidl::encoding::Context) -> usize {
5716            16
5717        }
5718    }
5719
5720    unsafe impl<D: fidl::encoding::ResourceDialect>
5721        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D>
5722        for &StreamConfigWatchGainStateResponse
5723    {
5724        #[inline]
5725        unsafe fn encode(
5726            self,
5727            encoder: &mut fidl::encoding::Encoder<'_, D>,
5728            offset: usize,
5729            _depth: fidl::encoding::Depth,
5730        ) -> fidl::Result<()> {
5731            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5732            // Delegate to tuple encoding.
5733            fidl::encoding::Encode::<StreamConfigWatchGainStateResponse, D>::encode(
5734                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_state),),
5735                encoder,
5736                offset,
5737                _depth,
5738            )
5739        }
5740    }
5741    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5742        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D> for (T0,)
5743    {
5744        #[inline]
5745        unsafe fn encode(
5746            self,
5747            encoder: &mut fidl::encoding::Encoder<'_, D>,
5748            offset: usize,
5749            depth: fidl::encoding::Depth,
5750        ) -> fidl::Result<()> {
5751            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5752            // Zero out padding regions. There's no need to apply masks
5753            // because the unmasked parts will be overwritten by fields.
5754            // Write the fields.
5755            self.0.encode(encoder, offset + 0, depth)?;
5756            Ok(())
5757        }
5758    }
5759
5760    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5761        for StreamConfigWatchGainStateResponse
5762    {
5763        #[inline(always)]
5764        fn new_empty() -> Self {
5765            Self { gain_state: fidl::new_empty!(GainState, D) }
5766        }
5767
5768        #[inline]
5769        unsafe fn decode(
5770            &mut self,
5771            decoder: &mut fidl::encoding::Decoder<'_, D>,
5772            offset: usize,
5773            _depth: fidl::encoding::Depth,
5774        ) -> fidl::Result<()> {
5775            decoder.debug_check_bounds::<Self>(offset);
5776            // Verify that padding bytes are zero.
5777            fidl::decode!(GainState, D, &mut self.gain_state, decoder, offset + 0, _depth)?;
5778            Ok(())
5779        }
5780    }
5781
5782    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchPlugStateResponse {
5783        type Borrowed<'a> = &'a Self;
5784        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5785            value
5786        }
5787    }
5788
5789    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchPlugStateResponse {
5790        type Owned = Self;
5791
5792        #[inline(always)]
5793        fn inline_align(_context: fidl::encoding::Context) -> usize {
5794            8
5795        }
5796
5797        #[inline(always)]
5798        fn inline_size(_context: fidl::encoding::Context) -> usize {
5799            16
5800        }
5801    }
5802
5803    unsafe impl<D: fidl::encoding::ResourceDialect>
5804        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D>
5805        for &StreamConfigWatchPlugStateResponse
5806    {
5807        #[inline]
5808        unsafe fn encode(
5809            self,
5810            encoder: &mut fidl::encoding::Encoder<'_, D>,
5811            offset: usize,
5812            _depth: fidl::encoding::Depth,
5813        ) -> fidl::Result<()> {
5814            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5815            // Delegate to tuple encoding.
5816            fidl::encoding::Encode::<StreamConfigWatchPlugStateResponse, D>::encode(
5817                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
5818                encoder,
5819                offset,
5820                _depth,
5821            )
5822        }
5823    }
5824    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
5825        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D> for (T0,)
5826    {
5827        #[inline]
5828        unsafe fn encode(
5829            self,
5830            encoder: &mut fidl::encoding::Encoder<'_, D>,
5831            offset: usize,
5832            depth: fidl::encoding::Depth,
5833        ) -> fidl::Result<()> {
5834            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5835            // Zero out padding regions. There's no need to apply masks
5836            // because the unmasked parts will be overwritten by fields.
5837            // Write the fields.
5838            self.0.encode(encoder, offset + 0, depth)?;
5839            Ok(())
5840        }
5841    }
5842
5843    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5844        for StreamConfigWatchPlugStateResponse
5845    {
5846        #[inline(always)]
5847        fn new_empty() -> Self {
5848            Self { plug_state: fidl::new_empty!(PlugState, D) }
5849        }
5850
5851        #[inline]
5852        unsafe fn decode(
5853            &mut self,
5854            decoder: &mut fidl::encoding::Decoder<'_, D>,
5855            offset: usize,
5856            _depth: fidl::encoding::Depth,
5857        ) -> fidl::Result<()> {
5858            decoder.debug_check_bounds::<Self>(offset);
5859            // Verify that padding bytes are zero.
5860            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
5861            Ok(())
5862        }
5863    }
5864
5865    impl AllocateVmosConfig {
5866        #[inline(always)]
5867        fn max_ordinal_present(&self) -> u64 {
5868            if let Some(_) = self.vmo_count {
5869                return 2;
5870            }
5871            if let Some(_) = self.min_vmo_size {
5872                return 1;
5873            }
5874            0
5875        }
5876    }
5877
5878    impl fidl::encoding::ValueTypeMarker for AllocateVmosConfig {
5879        type Borrowed<'a> = &'a Self;
5880        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5881            value
5882        }
5883    }
5884
5885    unsafe impl fidl::encoding::TypeMarker for AllocateVmosConfig {
5886        type Owned = Self;
5887
5888        #[inline(always)]
5889        fn inline_align(_context: fidl::encoding::Context) -> usize {
5890            8
5891        }
5892
5893        #[inline(always)]
5894        fn inline_size(_context: fidl::encoding::Context) -> usize {
5895            16
5896        }
5897    }
5898
5899    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AllocateVmosConfig, D>
5900        for &AllocateVmosConfig
5901    {
5902        unsafe fn encode(
5903            self,
5904            encoder: &mut fidl::encoding::Encoder<'_, D>,
5905            offset: usize,
5906            mut depth: fidl::encoding::Depth,
5907        ) -> fidl::Result<()> {
5908            encoder.debug_check_bounds::<AllocateVmosConfig>(offset);
5909            // Vector header
5910            let max_ordinal: u64 = self.max_ordinal_present();
5911            encoder.write_num(max_ordinal, offset);
5912            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5913            // Calling encoder.out_of_line_offset(0) is not allowed.
5914            if max_ordinal == 0 {
5915                return Ok(());
5916            }
5917            depth.increment()?;
5918            let envelope_size = 8;
5919            let bytes_len = max_ordinal as usize * envelope_size;
5920            #[allow(unused_variables)]
5921            let offset = encoder.out_of_line_offset(bytes_len);
5922            let mut _prev_end_offset: usize = 0;
5923            if 1 > max_ordinal {
5924                return Ok(());
5925            }
5926
5927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5928            // are envelope_size bytes.
5929            let cur_offset: usize = (1 - 1) * envelope_size;
5930
5931            // Zero reserved fields.
5932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5933
5934            // Safety:
5935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5937            //   envelope_size bytes, there is always sufficient room.
5938            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5939                self.min_vmo_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5940                encoder,
5941                offset + cur_offset,
5942                depth,
5943            )?;
5944
5945            _prev_end_offset = cur_offset + envelope_size;
5946            if 2 > max_ordinal {
5947                return Ok(());
5948            }
5949
5950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5951            // are envelope_size bytes.
5952            let cur_offset: usize = (2 - 1) * envelope_size;
5953
5954            // Zero reserved fields.
5955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5956
5957            // Safety:
5958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5960            //   envelope_size bytes, there is always sufficient room.
5961            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5962                self.vmo_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5963                encoder,
5964                offset + cur_offset,
5965                depth,
5966            )?;
5967
5968            _prev_end_offset = cur_offset + envelope_size;
5969
5970            Ok(())
5971        }
5972    }
5973
5974    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AllocateVmosConfig {
5975        #[inline(always)]
5976        fn new_empty() -> Self {
5977            Self::default()
5978        }
5979
5980        unsafe fn decode(
5981            &mut self,
5982            decoder: &mut fidl::encoding::Decoder<'_, D>,
5983            offset: usize,
5984            mut depth: fidl::encoding::Depth,
5985        ) -> fidl::Result<()> {
5986            decoder.debug_check_bounds::<Self>(offset);
5987            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5988                None => return Err(fidl::Error::NotNullable),
5989                Some(len) => len,
5990            };
5991            // Calling decoder.out_of_line_offset(0) is not allowed.
5992            if len == 0 {
5993                return Ok(());
5994            };
5995            depth.increment()?;
5996            let envelope_size = 8;
5997            let bytes_len = len * envelope_size;
5998            let offset = decoder.out_of_line_offset(bytes_len)?;
5999            // Decode the envelope for each type.
6000            let mut _next_ordinal_to_read = 0;
6001            let mut next_offset = offset;
6002            let end_offset = offset + bytes_len;
6003            _next_ordinal_to_read += 1;
6004            if next_offset >= end_offset {
6005                return Ok(());
6006            }
6007
6008            // Decode unknown envelopes for gaps in ordinals.
6009            while _next_ordinal_to_read < 1 {
6010                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6011                _next_ordinal_to_read += 1;
6012                next_offset += envelope_size;
6013            }
6014
6015            let next_out_of_line = decoder.next_out_of_line();
6016            let handles_before = decoder.remaining_handles();
6017            if let Some((inlined, num_bytes, num_handles)) =
6018                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6019            {
6020                let member_inline_size =
6021                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6022                if inlined != (member_inline_size <= 4) {
6023                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6024                }
6025                let inner_offset;
6026                let mut inner_depth = depth.clone();
6027                if inlined {
6028                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6029                    inner_offset = next_offset;
6030                } else {
6031                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6032                    inner_depth.increment()?;
6033                }
6034                let val_ref = self.min_vmo_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
6035                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6036                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6037                {
6038                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6039                }
6040                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6041                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6042                }
6043            }
6044
6045            next_offset += envelope_size;
6046            _next_ordinal_to_read += 1;
6047            if next_offset >= end_offset {
6048                return Ok(());
6049            }
6050
6051            // Decode unknown envelopes for gaps in ordinals.
6052            while _next_ordinal_to_read < 2 {
6053                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6054                _next_ordinal_to_read += 1;
6055                next_offset += envelope_size;
6056            }
6057
6058            let next_out_of_line = decoder.next_out_of_line();
6059            let handles_before = decoder.remaining_handles();
6060            if let Some((inlined, num_bytes, num_handles)) =
6061                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6062            {
6063                let member_inline_size =
6064                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6065                if inlined != (member_inline_size <= 4) {
6066                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6067                }
6068                let inner_offset;
6069                let mut inner_depth = depth.clone();
6070                if inlined {
6071                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6072                    inner_offset = next_offset;
6073                } else {
6074                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6075                    inner_depth.increment()?;
6076                }
6077                let val_ref = self.vmo_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
6078                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6079                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6080                {
6081                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6082                }
6083                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6084                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6085                }
6086            }
6087
6088            next_offset += envelope_size;
6089
6090            // Decode the remaining unknown envelopes.
6091            while next_offset < end_offset {
6092                _next_ordinal_to_read += 1;
6093                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6094                next_offset += envelope_size;
6095            }
6096
6097            Ok(())
6098        }
6099    }
6100
6101    impl ChannelAttributes {
6102        #[inline(always)]
6103        fn max_ordinal_present(&self) -> u64 {
6104            if let Some(_) = self.max_frequency {
6105                return 2;
6106            }
6107            if let Some(_) = self.min_frequency {
6108                return 1;
6109            }
6110            0
6111        }
6112    }
6113
6114    impl fidl::encoding::ValueTypeMarker for ChannelAttributes {
6115        type Borrowed<'a> = &'a Self;
6116        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6117            value
6118        }
6119    }
6120
6121    unsafe impl fidl::encoding::TypeMarker for ChannelAttributes {
6122        type Owned = Self;
6123
6124        #[inline(always)]
6125        fn inline_align(_context: fidl::encoding::Context) -> usize {
6126            8
6127        }
6128
6129        #[inline(always)]
6130        fn inline_size(_context: fidl::encoding::Context) -> usize {
6131            16
6132        }
6133    }
6134
6135    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelAttributes, D>
6136        for &ChannelAttributes
6137    {
6138        unsafe fn encode(
6139            self,
6140            encoder: &mut fidl::encoding::Encoder<'_, D>,
6141            offset: usize,
6142            mut depth: fidl::encoding::Depth,
6143        ) -> fidl::Result<()> {
6144            encoder.debug_check_bounds::<ChannelAttributes>(offset);
6145            // Vector header
6146            let max_ordinal: u64 = self.max_ordinal_present();
6147            encoder.write_num(max_ordinal, offset);
6148            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6149            // Calling encoder.out_of_line_offset(0) is not allowed.
6150            if max_ordinal == 0 {
6151                return Ok(());
6152            }
6153            depth.increment()?;
6154            let envelope_size = 8;
6155            let bytes_len = max_ordinal as usize * envelope_size;
6156            #[allow(unused_variables)]
6157            let offset = encoder.out_of_line_offset(bytes_len);
6158            let mut _prev_end_offset: usize = 0;
6159            if 1 > max_ordinal {
6160                return Ok(());
6161            }
6162
6163            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6164            // are envelope_size bytes.
6165            let cur_offset: usize = (1 - 1) * envelope_size;
6166
6167            // Zero reserved fields.
6168            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6169
6170            // Safety:
6171            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6172            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6173            //   envelope_size bytes, there is always sufficient room.
6174            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6175                self.min_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6176                encoder,
6177                offset + cur_offset,
6178                depth,
6179            )?;
6180
6181            _prev_end_offset = cur_offset + envelope_size;
6182            if 2 > max_ordinal {
6183                return Ok(());
6184            }
6185
6186            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6187            // are envelope_size bytes.
6188            let cur_offset: usize = (2 - 1) * envelope_size;
6189
6190            // Zero reserved fields.
6191            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6192
6193            // Safety:
6194            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6195            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6196            //   envelope_size bytes, there is always sufficient room.
6197            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6198                self.max_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6199                encoder,
6200                offset + cur_offset,
6201                depth,
6202            )?;
6203
6204            _prev_end_offset = cur_offset + envelope_size;
6205
6206            Ok(())
6207        }
6208    }
6209
6210    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelAttributes {
6211        #[inline(always)]
6212        fn new_empty() -> Self {
6213            Self::default()
6214        }
6215
6216        unsafe fn decode(
6217            &mut self,
6218            decoder: &mut fidl::encoding::Decoder<'_, D>,
6219            offset: usize,
6220            mut depth: fidl::encoding::Depth,
6221        ) -> fidl::Result<()> {
6222            decoder.debug_check_bounds::<Self>(offset);
6223            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6224                None => return Err(fidl::Error::NotNullable),
6225                Some(len) => len,
6226            };
6227            // Calling decoder.out_of_line_offset(0) is not allowed.
6228            if len == 0 {
6229                return Ok(());
6230            };
6231            depth.increment()?;
6232            let envelope_size = 8;
6233            let bytes_len = len * envelope_size;
6234            let offset = decoder.out_of_line_offset(bytes_len)?;
6235            // Decode the envelope for each type.
6236            let mut _next_ordinal_to_read = 0;
6237            let mut next_offset = offset;
6238            let end_offset = offset + bytes_len;
6239            _next_ordinal_to_read += 1;
6240            if next_offset >= end_offset {
6241                return Ok(());
6242            }
6243
6244            // Decode unknown envelopes for gaps in ordinals.
6245            while _next_ordinal_to_read < 1 {
6246                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6247                _next_ordinal_to_read += 1;
6248                next_offset += envelope_size;
6249            }
6250
6251            let next_out_of_line = decoder.next_out_of_line();
6252            let handles_before = decoder.remaining_handles();
6253            if let Some((inlined, num_bytes, num_handles)) =
6254                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6255            {
6256                let member_inline_size =
6257                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6258                if inlined != (member_inline_size <= 4) {
6259                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6260                }
6261                let inner_offset;
6262                let mut inner_depth = depth.clone();
6263                if inlined {
6264                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6265                    inner_offset = next_offset;
6266                } else {
6267                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6268                    inner_depth.increment()?;
6269                }
6270                let val_ref = self.min_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6271                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6272                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6273                {
6274                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6275                }
6276                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6277                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6278                }
6279            }
6280
6281            next_offset += envelope_size;
6282            _next_ordinal_to_read += 1;
6283            if next_offset >= end_offset {
6284                return Ok(());
6285            }
6286
6287            // Decode unknown envelopes for gaps in ordinals.
6288            while _next_ordinal_to_read < 2 {
6289                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6290                _next_ordinal_to_read += 1;
6291                next_offset += envelope_size;
6292            }
6293
6294            let next_out_of_line = decoder.next_out_of_line();
6295            let handles_before = decoder.remaining_handles();
6296            if let Some((inlined, num_bytes, num_handles)) =
6297                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6298            {
6299                let member_inline_size =
6300                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6301                if inlined != (member_inline_size <= 4) {
6302                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6303                }
6304                let inner_offset;
6305                let mut inner_depth = depth.clone();
6306                if inlined {
6307                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6308                    inner_offset = next_offset;
6309                } else {
6310                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6311                    inner_depth.increment()?;
6312                }
6313                let val_ref = self.max_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6314                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6315                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6316                {
6317                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6318                }
6319                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6320                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6321                }
6322            }
6323
6324            next_offset += envelope_size;
6325
6326            // Decode the remaining unknown envelopes.
6327            while next_offset < end_offset {
6328                _next_ordinal_to_read += 1;
6329                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6330                next_offset += envelope_size;
6331            }
6332
6333            Ok(())
6334        }
6335    }
6336
6337    impl ChannelSet {
6338        #[inline(always)]
6339        fn max_ordinal_present(&self) -> u64 {
6340            if let Some(_) = self.attributes {
6341                return 1;
6342            }
6343            0
6344        }
6345    }
6346
6347    impl fidl::encoding::ValueTypeMarker for ChannelSet {
6348        type Borrowed<'a> = &'a Self;
6349        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6350            value
6351        }
6352    }
6353
6354    unsafe impl fidl::encoding::TypeMarker for ChannelSet {
6355        type Owned = Self;
6356
6357        #[inline(always)]
6358        fn inline_align(_context: fidl::encoding::Context) -> usize {
6359            8
6360        }
6361
6362        #[inline(always)]
6363        fn inline_size(_context: fidl::encoding::Context) -> usize {
6364            16
6365        }
6366    }
6367
6368    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSet, D>
6369        for &ChannelSet
6370    {
6371        unsafe fn encode(
6372            self,
6373            encoder: &mut fidl::encoding::Encoder<'_, D>,
6374            offset: usize,
6375            mut depth: fidl::encoding::Depth,
6376        ) -> fidl::Result<()> {
6377            encoder.debug_check_bounds::<ChannelSet>(offset);
6378            // Vector header
6379            let max_ordinal: u64 = self.max_ordinal_present();
6380            encoder.write_num(max_ordinal, offset);
6381            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6382            // Calling encoder.out_of_line_offset(0) is not allowed.
6383            if max_ordinal == 0 {
6384                return Ok(());
6385            }
6386            depth.increment()?;
6387            let envelope_size = 8;
6388            let bytes_len = max_ordinal as usize * envelope_size;
6389            #[allow(unused_variables)]
6390            let offset = encoder.out_of_line_offset(bytes_len);
6391            let mut _prev_end_offset: usize = 0;
6392            if 1 > max_ordinal {
6393                return Ok(());
6394            }
6395
6396            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6397            // are envelope_size bytes.
6398            let cur_offset: usize = (1 - 1) * envelope_size;
6399
6400            // Zero reserved fields.
6401            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6402
6403            // Safety:
6404            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6405            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6406            //   envelope_size bytes, there is always sufficient room.
6407            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelAttributes, 64>, D>(
6408            self.attributes.as_ref().map(<fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::ValueTypeMarker>::borrow),
6409            encoder, offset + cur_offset, depth
6410        )?;
6411
6412            _prev_end_offset = cur_offset + envelope_size;
6413
6414            Ok(())
6415        }
6416    }
6417
6418    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSet {
6419        #[inline(always)]
6420        fn new_empty() -> Self {
6421            Self::default()
6422        }
6423
6424        unsafe fn decode(
6425            &mut self,
6426            decoder: &mut fidl::encoding::Decoder<'_, D>,
6427            offset: usize,
6428            mut depth: fidl::encoding::Depth,
6429        ) -> fidl::Result<()> {
6430            decoder.debug_check_bounds::<Self>(offset);
6431            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6432                None => return Err(fidl::Error::NotNullable),
6433                Some(len) => len,
6434            };
6435            // Calling decoder.out_of_line_offset(0) is not allowed.
6436            if len == 0 {
6437                return Ok(());
6438            };
6439            depth.increment()?;
6440            let envelope_size = 8;
6441            let bytes_len = len * envelope_size;
6442            let offset = decoder.out_of_line_offset(bytes_len)?;
6443            // Decode the envelope for each type.
6444            let mut _next_ordinal_to_read = 0;
6445            let mut next_offset = offset;
6446            let end_offset = offset + bytes_len;
6447            _next_ordinal_to_read += 1;
6448            if next_offset >= end_offset {
6449                return Ok(());
6450            }
6451
6452            // Decode unknown envelopes for gaps in ordinals.
6453            while _next_ordinal_to_read < 1 {
6454                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6455                _next_ordinal_to_read += 1;
6456                next_offset += envelope_size;
6457            }
6458
6459            let next_out_of_line = decoder.next_out_of_line();
6460            let handles_before = decoder.remaining_handles();
6461            if let Some((inlined, num_bytes, num_handles)) =
6462                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6463            {
6464                let member_inline_size = <fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6465                if inlined != (member_inline_size <= 4) {
6466                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6467                }
6468                let inner_offset;
6469                let mut inner_depth = depth.clone();
6470                if inlined {
6471                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6472                    inner_offset = next_offset;
6473                } else {
6474                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6475                    inner_depth.increment()?;
6476                }
6477                let val_ref = self.attributes.get_or_insert_with(
6478                    || fidl::new_empty!(fidl::encoding::Vector<ChannelAttributes, 64>, D),
6479                );
6480                fidl::decode!(fidl::encoding::Vector<ChannelAttributes, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
6481                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6482                {
6483                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6484                }
6485                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6486                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6487                }
6488            }
6489
6490            next_offset += envelope_size;
6491
6492            // Decode the remaining unknown envelopes.
6493            while next_offset < end_offset {
6494                _next_ordinal_to_read += 1;
6495                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6496                next_offset += envelope_size;
6497            }
6498
6499            Ok(())
6500        }
6501    }
6502
6503    impl CodecFormatInfo {
6504        #[inline(always)]
6505        fn max_ordinal_present(&self) -> u64 {
6506            if let Some(_) = self.turn_off_delay {
6507                return 3;
6508            }
6509            if let Some(_) = self.turn_on_delay {
6510                return 2;
6511            }
6512            if let Some(_) = self.external_delay {
6513                return 1;
6514            }
6515            0
6516        }
6517    }
6518
6519    impl fidl::encoding::ValueTypeMarker for CodecFormatInfo {
6520        type Borrowed<'a> = &'a Self;
6521        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6522            value
6523        }
6524    }
6525
6526    unsafe impl fidl::encoding::TypeMarker for CodecFormatInfo {
6527        type Owned = Self;
6528
6529        #[inline(always)]
6530        fn inline_align(_context: fidl::encoding::Context) -> usize {
6531            8
6532        }
6533
6534        #[inline(always)]
6535        fn inline_size(_context: fidl::encoding::Context) -> usize {
6536            16
6537        }
6538    }
6539
6540    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecFormatInfo, D>
6541        for &CodecFormatInfo
6542    {
6543        unsafe fn encode(
6544            self,
6545            encoder: &mut fidl::encoding::Encoder<'_, D>,
6546            offset: usize,
6547            mut depth: fidl::encoding::Depth,
6548        ) -> fidl::Result<()> {
6549            encoder.debug_check_bounds::<CodecFormatInfo>(offset);
6550            // Vector header
6551            let max_ordinal: u64 = self.max_ordinal_present();
6552            encoder.write_num(max_ordinal, offset);
6553            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6554            // Calling encoder.out_of_line_offset(0) is not allowed.
6555            if max_ordinal == 0 {
6556                return Ok(());
6557            }
6558            depth.increment()?;
6559            let envelope_size = 8;
6560            let bytes_len = max_ordinal as usize * envelope_size;
6561            #[allow(unused_variables)]
6562            let offset = encoder.out_of_line_offset(bytes_len);
6563            let mut _prev_end_offset: usize = 0;
6564            if 1 > max_ordinal {
6565                return Ok(());
6566            }
6567
6568            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6569            // are envelope_size bytes.
6570            let cur_offset: usize = (1 - 1) * envelope_size;
6571
6572            // Zero reserved fields.
6573            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6574
6575            // Safety:
6576            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6577            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6578            //   envelope_size bytes, there is always sufficient room.
6579            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6580                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6581                encoder,
6582                offset + cur_offset,
6583                depth,
6584            )?;
6585
6586            _prev_end_offset = cur_offset + envelope_size;
6587            if 2 > max_ordinal {
6588                return Ok(());
6589            }
6590
6591            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6592            // are envelope_size bytes.
6593            let cur_offset: usize = (2 - 1) * envelope_size;
6594
6595            // Zero reserved fields.
6596            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6597
6598            // Safety:
6599            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6600            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6601            //   envelope_size bytes, there is always sufficient room.
6602            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6603                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6604                encoder,
6605                offset + cur_offset,
6606                depth,
6607            )?;
6608
6609            _prev_end_offset = cur_offset + envelope_size;
6610            if 3 > max_ordinal {
6611                return Ok(());
6612            }
6613
6614            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6615            // are envelope_size bytes.
6616            let cur_offset: usize = (3 - 1) * envelope_size;
6617
6618            // Zero reserved fields.
6619            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6620
6621            // Safety:
6622            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6623            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6624            //   envelope_size bytes, there is always sufficient room.
6625            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6626                self.turn_off_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6627                encoder,
6628                offset + cur_offset,
6629                depth,
6630            )?;
6631
6632            _prev_end_offset = cur_offset + envelope_size;
6633
6634            Ok(())
6635        }
6636    }
6637
6638    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecFormatInfo {
6639        #[inline(always)]
6640        fn new_empty() -> Self {
6641            Self::default()
6642        }
6643
6644        unsafe fn decode(
6645            &mut self,
6646            decoder: &mut fidl::encoding::Decoder<'_, D>,
6647            offset: usize,
6648            mut depth: fidl::encoding::Depth,
6649        ) -> fidl::Result<()> {
6650            decoder.debug_check_bounds::<Self>(offset);
6651            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6652                None => return Err(fidl::Error::NotNullable),
6653                Some(len) => len,
6654            };
6655            // Calling decoder.out_of_line_offset(0) is not allowed.
6656            if len == 0 {
6657                return Ok(());
6658            };
6659            depth.increment()?;
6660            let envelope_size = 8;
6661            let bytes_len = len * envelope_size;
6662            let offset = decoder.out_of_line_offset(bytes_len)?;
6663            // Decode the envelope for each type.
6664            let mut _next_ordinal_to_read = 0;
6665            let mut next_offset = offset;
6666            let end_offset = offset + bytes_len;
6667            _next_ordinal_to_read += 1;
6668            if next_offset >= end_offset {
6669                return Ok(());
6670            }
6671
6672            // Decode unknown envelopes for gaps in ordinals.
6673            while _next_ordinal_to_read < 1 {
6674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6675                _next_ordinal_to_read += 1;
6676                next_offset += envelope_size;
6677            }
6678
6679            let next_out_of_line = decoder.next_out_of_line();
6680            let handles_before = decoder.remaining_handles();
6681            if let Some((inlined, num_bytes, num_handles)) =
6682                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6683            {
6684                let member_inline_size =
6685                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6686                if inlined != (member_inline_size <= 4) {
6687                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6688                }
6689                let inner_offset;
6690                let mut inner_depth = depth.clone();
6691                if inlined {
6692                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6693                    inner_offset = next_offset;
6694                } else {
6695                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6696                    inner_depth.increment()?;
6697                }
6698                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6699                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6700                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6701                {
6702                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6703                }
6704                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6705                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6706                }
6707            }
6708
6709            next_offset += envelope_size;
6710            _next_ordinal_to_read += 1;
6711            if next_offset >= end_offset {
6712                return Ok(());
6713            }
6714
6715            // Decode unknown envelopes for gaps in ordinals.
6716            while _next_ordinal_to_read < 2 {
6717                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6718                _next_ordinal_to_read += 1;
6719                next_offset += envelope_size;
6720            }
6721
6722            let next_out_of_line = decoder.next_out_of_line();
6723            let handles_before = decoder.remaining_handles();
6724            if let Some((inlined, num_bytes, num_handles)) =
6725                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6726            {
6727                let member_inline_size =
6728                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6729                if inlined != (member_inline_size <= 4) {
6730                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6731                }
6732                let inner_offset;
6733                let mut inner_depth = depth.clone();
6734                if inlined {
6735                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6736                    inner_offset = next_offset;
6737                } else {
6738                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6739                    inner_depth.increment()?;
6740                }
6741                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6742                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6743                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6744                {
6745                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6746                }
6747                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6748                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6749                }
6750            }
6751
6752            next_offset += envelope_size;
6753            _next_ordinal_to_read += 1;
6754            if next_offset >= end_offset {
6755                return Ok(());
6756            }
6757
6758            // Decode unknown envelopes for gaps in ordinals.
6759            while _next_ordinal_to_read < 3 {
6760                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6761                _next_ordinal_to_read += 1;
6762                next_offset += envelope_size;
6763            }
6764
6765            let next_out_of_line = decoder.next_out_of_line();
6766            let handles_before = decoder.remaining_handles();
6767            if let Some((inlined, num_bytes, num_handles)) =
6768                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6769            {
6770                let member_inline_size =
6771                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6772                if inlined != (member_inline_size <= 4) {
6773                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6774                }
6775                let inner_offset;
6776                let mut inner_depth = depth.clone();
6777                if inlined {
6778                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6779                    inner_offset = next_offset;
6780                } else {
6781                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6782                    inner_depth.increment()?;
6783                }
6784                let val_ref = self.turn_off_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6785                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6786                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6787                {
6788                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6789                }
6790                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6791                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6792                }
6793            }
6794
6795            next_offset += envelope_size;
6796
6797            // Decode the remaining unknown envelopes.
6798            while next_offset < end_offset {
6799                _next_ordinal_to_read += 1;
6800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6801                next_offset += envelope_size;
6802            }
6803
6804            Ok(())
6805        }
6806    }
6807
6808    impl CodecProperties {
6809        #[inline(always)]
6810        fn max_ordinal_present(&self) -> u64 {
6811            if let Some(_) = self.plug_detect_capabilities {
6812                return 5;
6813            }
6814            if let Some(_) = self.unique_id {
6815                return 4;
6816            }
6817            if let Some(_) = self.product {
6818                return 3;
6819            }
6820            if let Some(_) = self.manufacturer {
6821                return 2;
6822            }
6823            if let Some(_) = self.is_input {
6824                return 1;
6825            }
6826            0
6827        }
6828    }
6829
6830    impl fidl::encoding::ValueTypeMarker for CodecProperties {
6831        type Borrowed<'a> = &'a Self;
6832        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6833            value
6834        }
6835    }
6836
6837    unsafe impl fidl::encoding::TypeMarker for CodecProperties {
6838        type Owned = Self;
6839
6840        #[inline(always)]
6841        fn inline_align(_context: fidl::encoding::Context) -> usize {
6842            8
6843        }
6844
6845        #[inline(always)]
6846        fn inline_size(_context: fidl::encoding::Context) -> usize {
6847            16
6848        }
6849    }
6850
6851    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecProperties, D>
6852        for &CodecProperties
6853    {
6854        unsafe fn encode(
6855            self,
6856            encoder: &mut fidl::encoding::Encoder<'_, D>,
6857            offset: usize,
6858            mut depth: fidl::encoding::Depth,
6859        ) -> fidl::Result<()> {
6860            encoder.debug_check_bounds::<CodecProperties>(offset);
6861            // Vector header
6862            let max_ordinal: u64 = self.max_ordinal_present();
6863            encoder.write_num(max_ordinal, offset);
6864            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6865            // Calling encoder.out_of_line_offset(0) is not allowed.
6866            if max_ordinal == 0 {
6867                return Ok(());
6868            }
6869            depth.increment()?;
6870            let envelope_size = 8;
6871            let bytes_len = max_ordinal as usize * envelope_size;
6872            #[allow(unused_variables)]
6873            let offset = encoder.out_of_line_offset(bytes_len);
6874            let mut _prev_end_offset: usize = 0;
6875            if 1 > max_ordinal {
6876                return Ok(());
6877            }
6878
6879            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6880            // are envelope_size bytes.
6881            let cur_offset: usize = (1 - 1) * envelope_size;
6882
6883            // Zero reserved fields.
6884            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6885
6886            // Safety:
6887            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6888            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6889            //   envelope_size bytes, there is always sufficient room.
6890            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6891                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6892                encoder,
6893                offset + cur_offset,
6894                depth,
6895            )?;
6896
6897            _prev_end_offset = cur_offset + envelope_size;
6898            if 2 > max_ordinal {
6899                return Ok(());
6900            }
6901
6902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6903            // are envelope_size bytes.
6904            let cur_offset: usize = (2 - 1) * envelope_size;
6905
6906            // Zero reserved fields.
6907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6908
6909            // Safety:
6910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6912            //   envelope_size bytes, there is always sufficient room.
6913            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6914                self.manufacturer.as_ref().map(
6915                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6916                ),
6917                encoder,
6918                offset + cur_offset,
6919                depth,
6920            )?;
6921
6922            _prev_end_offset = cur_offset + envelope_size;
6923            if 3 > max_ordinal {
6924                return Ok(());
6925            }
6926
6927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6928            // are envelope_size bytes.
6929            let cur_offset: usize = (3 - 1) * envelope_size;
6930
6931            // Zero reserved fields.
6932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6933
6934            // Safety:
6935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6937            //   envelope_size bytes, there is always sufficient room.
6938            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6939                self.product.as_ref().map(
6940                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6941                ),
6942                encoder,
6943                offset + cur_offset,
6944                depth,
6945            )?;
6946
6947            _prev_end_offset = cur_offset + envelope_size;
6948            if 4 > max_ordinal {
6949                return Ok(());
6950            }
6951
6952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6953            // are envelope_size bytes.
6954            let cur_offset: usize = (4 - 1) * envelope_size;
6955
6956            // Zero reserved fields.
6957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6958
6959            // Safety:
6960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6962            //   envelope_size bytes, there is always sufficient room.
6963            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6964                self.unique_id.as_ref().map(
6965                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6966                ),
6967                encoder,
6968                offset + cur_offset,
6969                depth,
6970            )?;
6971
6972            _prev_end_offset = cur_offset + envelope_size;
6973            if 5 > max_ordinal {
6974                return Ok(());
6975            }
6976
6977            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6978            // are envelope_size bytes.
6979            let cur_offset: usize = (5 - 1) * envelope_size;
6980
6981            // Zero reserved fields.
6982            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6983
6984            // Safety:
6985            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6986            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6987            //   envelope_size bytes, there is always sufficient room.
6988            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
6989                self.plug_detect_capabilities
6990                    .as_ref()
6991                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
6992                encoder,
6993                offset + cur_offset,
6994                depth,
6995            )?;
6996
6997            _prev_end_offset = cur_offset + envelope_size;
6998
6999            Ok(())
7000        }
7001    }
7002
7003    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProperties {
7004        #[inline(always)]
7005        fn new_empty() -> Self {
7006            Self::default()
7007        }
7008
7009        unsafe fn decode(
7010            &mut self,
7011            decoder: &mut fidl::encoding::Decoder<'_, D>,
7012            offset: usize,
7013            mut depth: fidl::encoding::Depth,
7014        ) -> fidl::Result<()> {
7015            decoder.debug_check_bounds::<Self>(offset);
7016            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7017                None => return Err(fidl::Error::NotNullable),
7018                Some(len) => len,
7019            };
7020            // Calling decoder.out_of_line_offset(0) is not allowed.
7021            if len == 0 {
7022                return Ok(());
7023            };
7024            depth.increment()?;
7025            let envelope_size = 8;
7026            let bytes_len = len * envelope_size;
7027            let offset = decoder.out_of_line_offset(bytes_len)?;
7028            // Decode the envelope for each type.
7029            let mut _next_ordinal_to_read = 0;
7030            let mut next_offset = offset;
7031            let end_offset = offset + bytes_len;
7032            _next_ordinal_to_read += 1;
7033            if next_offset >= end_offset {
7034                return Ok(());
7035            }
7036
7037            // Decode unknown envelopes for gaps in ordinals.
7038            while _next_ordinal_to_read < 1 {
7039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7040                _next_ordinal_to_read += 1;
7041                next_offset += envelope_size;
7042            }
7043
7044            let next_out_of_line = decoder.next_out_of_line();
7045            let handles_before = decoder.remaining_handles();
7046            if let Some((inlined, num_bytes, num_handles)) =
7047                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7048            {
7049                let member_inline_size =
7050                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7051                if inlined != (member_inline_size <= 4) {
7052                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7053                }
7054                let inner_offset;
7055                let mut inner_depth = depth.clone();
7056                if inlined {
7057                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7058                    inner_offset = next_offset;
7059                } else {
7060                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7061                    inner_depth.increment()?;
7062                }
7063                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7064                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7065                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7066                {
7067                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7068                }
7069                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7070                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7071                }
7072            }
7073
7074            next_offset += envelope_size;
7075            _next_ordinal_to_read += 1;
7076            if next_offset >= end_offset {
7077                return Ok(());
7078            }
7079
7080            // Decode unknown envelopes for gaps in ordinals.
7081            while _next_ordinal_to_read < 2 {
7082                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7083                _next_ordinal_to_read += 1;
7084                next_offset += envelope_size;
7085            }
7086
7087            let next_out_of_line = decoder.next_out_of_line();
7088            let handles_before = decoder.remaining_handles();
7089            if let Some((inlined, num_bytes, num_handles)) =
7090                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7091            {
7092                let member_inline_size =
7093                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7094                        decoder.context,
7095                    );
7096                if inlined != (member_inline_size <= 4) {
7097                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7098                }
7099                let inner_offset;
7100                let mut inner_depth = depth.clone();
7101                if inlined {
7102                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7103                    inner_offset = next_offset;
7104                } else {
7105                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7106                    inner_depth.increment()?;
7107                }
7108                let val_ref = self
7109                    .manufacturer
7110                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7111                fidl::decode!(
7112                    fidl::encoding::BoundedString<256>,
7113                    D,
7114                    val_ref,
7115                    decoder,
7116                    inner_offset,
7117                    inner_depth
7118                )?;
7119                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7120                {
7121                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7122                }
7123                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7124                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7125                }
7126            }
7127
7128            next_offset += envelope_size;
7129            _next_ordinal_to_read += 1;
7130            if next_offset >= end_offset {
7131                return Ok(());
7132            }
7133
7134            // Decode unknown envelopes for gaps in ordinals.
7135            while _next_ordinal_to_read < 3 {
7136                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7137                _next_ordinal_to_read += 1;
7138                next_offset += envelope_size;
7139            }
7140
7141            let next_out_of_line = decoder.next_out_of_line();
7142            let handles_before = decoder.remaining_handles();
7143            if let Some((inlined, num_bytes, num_handles)) =
7144                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7145            {
7146                let member_inline_size =
7147                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7148                        decoder.context,
7149                    );
7150                if inlined != (member_inline_size <= 4) {
7151                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7152                }
7153                let inner_offset;
7154                let mut inner_depth = depth.clone();
7155                if inlined {
7156                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7157                    inner_offset = next_offset;
7158                } else {
7159                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7160                    inner_depth.increment()?;
7161                }
7162                let val_ref = self
7163                    .product
7164                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7165                fidl::decode!(
7166                    fidl::encoding::BoundedString<256>,
7167                    D,
7168                    val_ref,
7169                    decoder,
7170                    inner_offset,
7171                    inner_depth
7172                )?;
7173                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7174                {
7175                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7176                }
7177                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7178                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7179                }
7180            }
7181
7182            next_offset += envelope_size;
7183            _next_ordinal_to_read += 1;
7184            if next_offset >= end_offset {
7185                return Ok(());
7186            }
7187
7188            // Decode unknown envelopes for gaps in ordinals.
7189            while _next_ordinal_to_read < 4 {
7190                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7191                _next_ordinal_to_read += 1;
7192                next_offset += envelope_size;
7193            }
7194
7195            let next_out_of_line = decoder.next_out_of_line();
7196            let handles_before = decoder.remaining_handles();
7197            if let Some((inlined, num_bytes, num_handles)) =
7198                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7199            {
7200                let member_inline_size =
7201                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7202                        decoder.context,
7203                    );
7204                if inlined != (member_inline_size <= 4) {
7205                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7206                }
7207                let inner_offset;
7208                let mut inner_depth = depth.clone();
7209                if inlined {
7210                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7211                    inner_offset = next_offset;
7212                } else {
7213                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7214                    inner_depth.increment()?;
7215                }
7216                let val_ref = self
7217                    .unique_id
7218                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7219                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7221                {
7222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7223                }
7224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7226                }
7227            }
7228
7229            next_offset += envelope_size;
7230            _next_ordinal_to_read += 1;
7231            if next_offset >= end_offset {
7232                return Ok(());
7233            }
7234
7235            // Decode unknown envelopes for gaps in ordinals.
7236            while _next_ordinal_to_read < 5 {
7237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7238                _next_ordinal_to_read += 1;
7239                next_offset += envelope_size;
7240            }
7241
7242            let next_out_of_line = decoder.next_out_of_line();
7243            let handles_before = decoder.remaining_handles();
7244            if let Some((inlined, num_bytes, num_handles)) =
7245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7246            {
7247                let member_inline_size =
7248                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
7249                        decoder.context,
7250                    );
7251                if inlined != (member_inline_size <= 4) {
7252                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7253                }
7254                let inner_offset;
7255                let mut inner_depth = depth.clone();
7256                if inlined {
7257                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7258                    inner_offset = next_offset;
7259                } else {
7260                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7261                    inner_depth.increment()?;
7262                }
7263                let val_ref = self
7264                    .plug_detect_capabilities
7265                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
7266                fidl::decode!(
7267                    PlugDetectCapabilities,
7268                    D,
7269                    val_ref,
7270                    decoder,
7271                    inner_offset,
7272                    inner_depth
7273                )?;
7274                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7275                {
7276                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7277                }
7278                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7279                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7280                }
7281            }
7282
7283            next_offset += envelope_size;
7284
7285            // Decode the remaining unknown envelopes.
7286            while next_offset < end_offset {
7287                _next_ordinal_to_read += 1;
7288                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7289                next_offset += envelope_size;
7290            }
7291
7292            Ok(())
7293        }
7294    }
7295
7296    impl CompositeProperties {
7297        #[inline(always)]
7298        fn max_ordinal_present(&self) -> u64 {
7299            if let Some(_) = self.clock_domain {
7300                return 5;
7301            }
7302            if let Some(_) = self.unique_id {
7303                return 4;
7304            }
7305            if let Some(_) = self.product {
7306                return 3;
7307            }
7308            if let Some(_) = self.manufacturer {
7309                return 2;
7310            }
7311            0
7312        }
7313    }
7314
7315    impl fidl::encoding::ValueTypeMarker for CompositeProperties {
7316        type Borrowed<'a> = &'a Self;
7317        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7318            value
7319        }
7320    }
7321
7322    unsafe impl fidl::encoding::TypeMarker for CompositeProperties {
7323        type Owned = Self;
7324
7325        #[inline(always)]
7326        fn inline_align(_context: fidl::encoding::Context) -> usize {
7327            8
7328        }
7329
7330        #[inline(always)]
7331        fn inline_size(_context: fidl::encoding::Context) -> usize {
7332            16
7333        }
7334    }
7335
7336    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeProperties, D>
7337        for &CompositeProperties
7338    {
7339        unsafe fn encode(
7340            self,
7341            encoder: &mut fidl::encoding::Encoder<'_, D>,
7342            offset: usize,
7343            mut depth: fidl::encoding::Depth,
7344        ) -> fidl::Result<()> {
7345            encoder.debug_check_bounds::<CompositeProperties>(offset);
7346            // Vector header
7347            let max_ordinal: u64 = self.max_ordinal_present();
7348            encoder.write_num(max_ordinal, offset);
7349            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7350            // Calling encoder.out_of_line_offset(0) is not allowed.
7351            if max_ordinal == 0 {
7352                return Ok(());
7353            }
7354            depth.increment()?;
7355            let envelope_size = 8;
7356            let bytes_len = max_ordinal as usize * envelope_size;
7357            #[allow(unused_variables)]
7358            let offset = encoder.out_of_line_offset(bytes_len);
7359            let mut _prev_end_offset: usize = 0;
7360            if 2 > max_ordinal {
7361                return Ok(());
7362            }
7363
7364            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7365            // are envelope_size bytes.
7366            let cur_offset: usize = (2 - 1) * envelope_size;
7367
7368            // Zero reserved fields.
7369            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7370
7371            // Safety:
7372            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7373            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7374            //   envelope_size bytes, there is always sufficient room.
7375            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7376                self.manufacturer.as_ref().map(
7377                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7378                ),
7379                encoder,
7380                offset + cur_offset,
7381                depth,
7382            )?;
7383
7384            _prev_end_offset = cur_offset + envelope_size;
7385            if 3 > max_ordinal {
7386                return Ok(());
7387            }
7388
7389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7390            // are envelope_size bytes.
7391            let cur_offset: usize = (3 - 1) * envelope_size;
7392
7393            // Zero reserved fields.
7394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7395
7396            // Safety:
7397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7399            //   envelope_size bytes, there is always sufficient room.
7400            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7401                self.product.as_ref().map(
7402                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7403                ),
7404                encoder,
7405                offset + cur_offset,
7406                depth,
7407            )?;
7408
7409            _prev_end_offset = cur_offset + envelope_size;
7410            if 4 > max_ordinal {
7411                return Ok(());
7412            }
7413
7414            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7415            // are envelope_size bytes.
7416            let cur_offset: usize = (4 - 1) * envelope_size;
7417
7418            // Zero reserved fields.
7419            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7420
7421            // Safety:
7422            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7423            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7424            //   envelope_size bytes, there is always sufficient room.
7425            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7426                self.unique_id.as_ref().map(
7427                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7428                ),
7429                encoder,
7430                offset + cur_offset,
7431                depth,
7432            )?;
7433
7434            _prev_end_offset = cur_offset + envelope_size;
7435            if 5 > max_ordinal {
7436                return Ok(());
7437            }
7438
7439            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7440            // are envelope_size bytes.
7441            let cur_offset: usize = (5 - 1) * envelope_size;
7442
7443            // Zero reserved fields.
7444            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7445
7446            // Safety:
7447            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7448            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7449            //   envelope_size bytes, there is always sufficient room.
7450            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7451                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7452                encoder,
7453                offset + cur_offset,
7454                depth,
7455            )?;
7456
7457            _prev_end_offset = cur_offset + envelope_size;
7458
7459            Ok(())
7460        }
7461    }
7462
7463    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeProperties {
7464        #[inline(always)]
7465        fn new_empty() -> Self {
7466            Self::default()
7467        }
7468
7469        unsafe fn decode(
7470            &mut self,
7471            decoder: &mut fidl::encoding::Decoder<'_, D>,
7472            offset: usize,
7473            mut depth: fidl::encoding::Depth,
7474        ) -> fidl::Result<()> {
7475            decoder.debug_check_bounds::<Self>(offset);
7476            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7477                None => return Err(fidl::Error::NotNullable),
7478                Some(len) => len,
7479            };
7480            // Calling decoder.out_of_line_offset(0) is not allowed.
7481            if len == 0 {
7482                return Ok(());
7483            };
7484            depth.increment()?;
7485            let envelope_size = 8;
7486            let bytes_len = len * envelope_size;
7487            let offset = decoder.out_of_line_offset(bytes_len)?;
7488            // Decode the envelope for each type.
7489            let mut _next_ordinal_to_read = 0;
7490            let mut next_offset = offset;
7491            let end_offset = offset + bytes_len;
7492            _next_ordinal_to_read += 1;
7493            if next_offset >= end_offset {
7494                return Ok(());
7495            }
7496
7497            // Decode unknown envelopes for gaps in ordinals.
7498            while _next_ordinal_to_read < 2 {
7499                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7500                _next_ordinal_to_read += 1;
7501                next_offset += envelope_size;
7502            }
7503
7504            let next_out_of_line = decoder.next_out_of_line();
7505            let handles_before = decoder.remaining_handles();
7506            if let Some((inlined, num_bytes, num_handles)) =
7507                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7508            {
7509                let member_inline_size =
7510                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7511                        decoder.context,
7512                    );
7513                if inlined != (member_inline_size <= 4) {
7514                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7515                }
7516                let inner_offset;
7517                let mut inner_depth = depth.clone();
7518                if inlined {
7519                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7520                    inner_offset = next_offset;
7521                } else {
7522                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7523                    inner_depth.increment()?;
7524                }
7525                let val_ref = self
7526                    .manufacturer
7527                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7528                fidl::decode!(
7529                    fidl::encoding::BoundedString<256>,
7530                    D,
7531                    val_ref,
7532                    decoder,
7533                    inner_offset,
7534                    inner_depth
7535                )?;
7536                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7537                {
7538                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7539                }
7540                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7541                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7542                }
7543            }
7544
7545            next_offset += envelope_size;
7546            _next_ordinal_to_read += 1;
7547            if next_offset >= end_offset {
7548                return Ok(());
7549            }
7550
7551            // Decode unknown envelopes for gaps in ordinals.
7552            while _next_ordinal_to_read < 3 {
7553                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7554                _next_ordinal_to_read += 1;
7555                next_offset += envelope_size;
7556            }
7557
7558            let next_out_of_line = decoder.next_out_of_line();
7559            let handles_before = decoder.remaining_handles();
7560            if let Some((inlined, num_bytes, num_handles)) =
7561                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7562            {
7563                let member_inline_size =
7564                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7565                        decoder.context,
7566                    );
7567                if inlined != (member_inline_size <= 4) {
7568                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7569                }
7570                let inner_offset;
7571                let mut inner_depth = depth.clone();
7572                if inlined {
7573                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7574                    inner_offset = next_offset;
7575                } else {
7576                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7577                    inner_depth.increment()?;
7578                }
7579                let val_ref = self
7580                    .product
7581                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7582                fidl::decode!(
7583                    fidl::encoding::BoundedString<256>,
7584                    D,
7585                    val_ref,
7586                    decoder,
7587                    inner_offset,
7588                    inner_depth
7589                )?;
7590                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7591                {
7592                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7593                }
7594                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7595                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7596                }
7597            }
7598
7599            next_offset += envelope_size;
7600            _next_ordinal_to_read += 1;
7601            if next_offset >= end_offset {
7602                return Ok(());
7603            }
7604
7605            // Decode unknown envelopes for gaps in ordinals.
7606            while _next_ordinal_to_read < 4 {
7607                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7608                _next_ordinal_to_read += 1;
7609                next_offset += envelope_size;
7610            }
7611
7612            let next_out_of_line = decoder.next_out_of_line();
7613            let handles_before = decoder.remaining_handles();
7614            if let Some((inlined, num_bytes, num_handles)) =
7615                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7616            {
7617                let member_inline_size =
7618                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7619                        decoder.context,
7620                    );
7621                if inlined != (member_inline_size <= 4) {
7622                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7623                }
7624                let inner_offset;
7625                let mut inner_depth = depth.clone();
7626                if inlined {
7627                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7628                    inner_offset = next_offset;
7629                } else {
7630                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7631                    inner_depth.increment()?;
7632                }
7633                let val_ref = self
7634                    .unique_id
7635                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7636                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7637                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7638                {
7639                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7640                }
7641                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7642                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7643                }
7644            }
7645
7646            next_offset += envelope_size;
7647            _next_ordinal_to_read += 1;
7648            if next_offset >= end_offset {
7649                return Ok(());
7650            }
7651
7652            // Decode unknown envelopes for gaps in ordinals.
7653            while _next_ordinal_to_read < 5 {
7654                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7655                _next_ordinal_to_read += 1;
7656                next_offset += envelope_size;
7657            }
7658
7659            let next_out_of_line = decoder.next_out_of_line();
7660            let handles_before = decoder.remaining_handles();
7661            if let Some((inlined, num_bytes, num_handles)) =
7662                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7663            {
7664                let member_inline_size =
7665                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7666                if inlined != (member_inline_size <= 4) {
7667                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7668                }
7669                let inner_offset;
7670                let mut inner_depth = depth.clone();
7671                if inlined {
7672                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7673                    inner_offset = next_offset;
7674                } else {
7675                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7676                    inner_depth.increment()?;
7677                }
7678                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
7679                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7680                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7681                {
7682                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7683                }
7684                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7685                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7686                }
7687            }
7688
7689            next_offset += envelope_size;
7690
7691            // Decode the remaining unknown envelopes.
7692            while next_offset < end_offset {
7693                _next_ordinal_to_read += 1;
7694                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7695                next_offset += envelope_size;
7696            }
7697
7698            Ok(())
7699        }
7700    }
7701
7702    impl DaiProperties {
7703        #[inline(always)]
7704        fn max_ordinal_present(&self) -> u64 {
7705            if let Some(_) = self.clock_domain {
7706                return 5;
7707            }
7708            if let Some(_) = self.unique_id {
7709                return 4;
7710            }
7711            if let Some(_) = self.product_name {
7712                return 3;
7713            }
7714            if let Some(_) = self.manufacturer {
7715                return 2;
7716            }
7717            if let Some(_) = self.is_input {
7718                return 1;
7719            }
7720            0
7721        }
7722    }
7723
7724    impl fidl::encoding::ValueTypeMarker for DaiProperties {
7725        type Borrowed<'a> = &'a Self;
7726        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7727            value
7728        }
7729    }
7730
7731    unsafe impl fidl::encoding::TypeMarker for DaiProperties {
7732        type Owned = Self;
7733
7734        #[inline(always)]
7735        fn inline_align(_context: fidl::encoding::Context) -> usize {
7736            8
7737        }
7738
7739        #[inline(always)]
7740        fn inline_size(_context: fidl::encoding::Context) -> usize {
7741            16
7742        }
7743    }
7744
7745    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiProperties, D>
7746        for &DaiProperties
7747    {
7748        unsafe fn encode(
7749            self,
7750            encoder: &mut fidl::encoding::Encoder<'_, D>,
7751            offset: usize,
7752            mut depth: fidl::encoding::Depth,
7753        ) -> fidl::Result<()> {
7754            encoder.debug_check_bounds::<DaiProperties>(offset);
7755            // Vector header
7756            let max_ordinal: u64 = self.max_ordinal_present();
7757            encoder.write_num(max_ordinal, offset);
7758            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7759            // Calling encoder.out_of_line_offset(0) is not allowed.
7760            if max_ordinal == 0 {
7761                return Ok(());
7762            }
7763            depth.increment()?;
7764            let envelope_size = 8;
7765            let bytes_len = max_ordinal as usize * envelope_size;
7766            #[allow(unused_variables)]
7767            let offset = encoder.out_of_line_offset(bytes_len);
7768            let mut _prev_end_offset: usize = 0;
7769            if 1 > max_ordinal {
7770                return Ok(());
7771            }
7772
7773            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7774            // are envelope_size bytes.
7775            let cur_offset: usize = (1 - 1) * envelope_size;
7776
7777            // Zero reserved fields.
7778            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7779
7780            // Safety:
7781            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7782            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7783            //   envelope_size bytes, there is always sufficient room.
7784            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7785                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7786                encoder,
7787                offset + cur_offset,
7788                depth,
7789            )?;
7790
7791            _prev_end_offset = cur_offset + envelope_size;
7792            if 2 > max_ordinal {
7793                return Ok(());
7794            }
7795
7796            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7797            // are envelope_size bytes.
7798            let cur_offset: usize = (2 - 1) * envelope_size;
7799
7800            // Zero reserved fields.
7801            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7802
7803            // Safety:
7804            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7805            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7806            //   envelope_size bytes, there is always sufficient room.
7807            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7808                self.manufacturer.as_ref().map(
7809                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7810                ),
7811                encoder,
7812                offset + cur_offset,
7813                depth,
7814            )?;
7815
7816            _prev_end_offset = cur_offset + envelope_size;
7817            if 3 > max_ordinal {
7818                return Ok(());
7819            }
7820
7821            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7822            // are envelope_size bytes.
7823            let cur_offset: usize = (3 - 1) * envelope_size;
7824
7825            // Zero reserved fields.
7826            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7827
7828            // Safety:
7829            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7830            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7831            //   envelope_size bytes, there is always sufficient room.
7832            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7833                self.product_name.as_ref().map(
7834                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7835                ),
7836                encoder,
7837                offset + cur_offset,
7838                depth,
7839            )?;
7840
7841            _prev_end_offset = cur_offset + envelope_size;
7842            if 4 > max_ordinal {
7843                return Ok(());
7844            }
7845
7846            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7847            // are envelope_size bytes.
7848            let cur_offset: usize = (4 - 1) * envelope_size;
7849
7850            // Zero reserved fields.
7851            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7852
7853            // Safety:
7854            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7855            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7856            //   envelope_size bytes, there is always sufficient room.
7857            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7858                self.unique_id.as_ref().map(
7859                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7860                ),
7861                encoder,
7862                offset + cur_offset,
7863                depth,
7864            )?;
7865
7866            _prev_end_offset = cur_offset + envelope_size;
7867            if 5 > max_ordinal {
7868                return Ok(());
7869            }
7870
7871            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7872            // are envelope_size bytes.
7873            let cur_offset: usize = (5 - 1) * envelope_size;
7874
7875            // Zero reserved fields.
7876            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7877
7878            // Safety:
7879            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7880            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7881            //   envelope_size bytes, there is always sufficient room.
7882            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7883                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7884                encoder,
7885                offset + cur_offset,
7886                depth,
7887            )?;
7888
7889            _prev_end_offset = cur_offset + envelope_size;
7890
7891            Ok(())
7892        }
7893    }
7894
7895    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiProperties {
7896        #[inline(always)]
7897        fn new_empty() -> Self {
7898            Self::default()
7899        }
7900
7901        unsafe fn decode(
7902            &mut self,
7903            decoder: &mut fidl::encoding::Decoder<'_, D>,
7904            offset: usize,
7905            mut depth: fidl::encoding::Depth,
7906        ) -> fidl::Result<()> {
7907            decoder.debug_check_bounds::<Self>(offset);
7908            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7909                None => return Err(fidl::Error::NotNullable),
7910                Some(len) => len,
7911            };
7912            // Calling decoder.out_of_line_offset(0) is not allowed.
7913            if len == 0 {
7914                return Ok(());
7915            };
7916            depth.increment()?;
7917            let envelope_size = 8;
7918            let bytes_len = len * envelope_size;
7919            let offset = decoder.out_of_line_offset(bytes_len)?;
7920            // Decode the envelope for each type.
7921            let mut _next_ordinal_to_read = 0;
7922            let mut next_offset = offset;
7923            let end_offset = offset + bytes_len;
7924            _next_ordinal_to_read += 1;
7925            if next_offset >= end_offset {
7926                return Ok(());
7927            }
7928
7929            // Decode unknown envelopes for gaps in ordinals.
7930            while _next_ordinal_to_read < 1 {
7931                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7932                _next_ordinal_to_read += 1;
7933                next_offset += envelope_size;
7934            }
7935
7936            let next_out_of_line = decoder.next_out_of_line();
7937            let handles_before = decoder.remaining_handles();
7938            if let Some((inlined, num_bytes, num_handles)) =
7939                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7940            {
7941                let member_inline_size =
7942                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7943                if inlined != (member_inline_size <= 4) {
7944                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7945                }
7946                let inner_offset;
7947                let mut inner_depth = depth.clone();
7948                if inlined {
7949                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7950                    inner_offset = next_offset;
7951                } else {
7952                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7953                    inner_depth.increment()?;
7954                }
7955                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7956                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7957                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7958                {
7959                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7960                }
7961                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7962                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7963                }
7964            }
7965
7966            next_offset += envelope_size;
7967            _next_ordinal_to_read += 1;
7968            if next_offset >= end_offset {
7969                return Ok(());
7970            }
7971
7972            // Decode unknown envelopes for gaps in ordinals.
7973            while _next_ordinal_to_read < 2 {
7974                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7975                _next_ordinal_to_read += 1;
7976                next_offset += envelope_size;
7977            }
7978
7979            let next_out_of_line = decoder.next_out_of_line();
7980            let handles_before = decoder.remaining_handles();
7981            if let Some((inlined, num_bytes, num_handles)) =
7982                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7983            {
7984                let member_inline_size =
7985                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7986                        decoder.context,
7987                    );
7988                if inlined != (member_inline_size <= 4) {
7989                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7990                }
7991                let inner_offset;
7992                let mut inner_depth = depth.clone();
7993                if inlined {
7994                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7995                    inner_offset = next_offset;
7996                } else {
7997                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7998                    inner_depth.increment()?;
7999                }
8000                let val_ref = self
8001                    .manufacturer
8002                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8003                fidl::decode!(
8004                    fidl::encoding::BoundedString<256>,
8005                    D,
8006                    val_ref,
8007                    decoder,
8008                    inner_offset,
8009                    inner_depth
8010                )?;
8011                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8012                {
8013                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8014                }
8015                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8016                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8017                }
8018            }
8019
8020            next_offset += envelope_size;
8021            _next_ordinal_to_read += 1;
8022            if next_offset >= end_offset {
8023                return Ok(());
8024            }
8025
8026            // Decode unknown envelopes for gaps in ordinals.
8027            while _next_ordinal_to_read < 3 {
8028                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8029                _next_ordinal_to_read += 1;
8030                next_offset += envelope_size;
8031            }
8032
8033            let next_out_of_line = decoder.next_out_of_line();
8034            let handles_before = decoder.remaining_handles();
8035            if let Some((inlined, num_bytes, num_handles)) =
8036                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8037            {
8038                let member_inline_size =
8039                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8040                        decoder.context,
8041                    );
8042                if inlined != (member_inline_size <= 4) {
8043                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8044                }
8045                let inner_offset;
8046                let mut inner_depth = depth.clone();
8047                if inlined {
8048                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8049                    inner_offset = next_offset;
8050                } else {
8051                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8052                    inner_depth.increment()?;
8053                }
8054                let val_ref = self
8055                    .product_name
8056                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8057                fidl::decode!(
8058                    fidl::encoding::BoundedString<256>,
8059                    D,
8060                    val_ref,
8061                    decoder,
8062                    inner_offset,
8063                    inner_depth
8064                )?;
8065                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8066                {
8067                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8068                }
8069                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8070                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8071                }
8072            }
8073
8074            next_offset += envelope_size;
8075            _next_ordinal_to_read += 1;
8076            if next_offset >= end_offset {
8077                return Ok(());
8078            }
8079
8080            // Decode unknown envelopes for gaps in ordinals.
8081            while _next_ordinal_to_read < 4 {
8082                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8083                _next_ordinal_to_read += 1;
8084                next_offset += envelope_size;
8085            }
8086
8087            let next_out_of_line = decoder.next_out_of_line();
8088            let handles_before = decoder.remaining_handles();
8089            if let Some((inlined, num_bytes, num_handles)) =
8090                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8091            {
8092                let member_inline_size =
8093                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
8094                        decoder.context,
8095                    );
8096                if inlined != (member_inline_size <= 4) {
8097                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8098                }
8099                let inner_offset;
8100                let mut inner_depth = depth.clone();
8101                if inlined {
8102                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8103                    inner_offset = next_offset;
8104                } else {
8105                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8106                    inner_depth.increment()?;
8107                }
8108                let val_ref = self
8109                    .unique_id
8110                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
8111                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
8112                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8113                {
8114                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8115                }
8116                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8117                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8118                }
8119            }
8120
8121            next_offset += envelope_size;
8122            _next_ordinal_to_read += 1;
8123            if next_offset >= end_offset {
8124                return Ok(());
8125            }
8126
8127            // Decode unknown envelopes for gaps in ordinals.
8128            while _next_ordinal_to_read < 5 {
8129                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8130                _next_ordinal_to_read += 1;
8131                next_offset += envelope_size;
8132            }
8133
8134            let next_out_of_line = decoder.next_out_of_line();
8135            let handles_before = decoder.remaining_handles();
8136            if let Some((inlined, num_bytes, num_handles)) =
8137                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8138            {
8139                let member_inline_size =
8140                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8141                if inlined != (member_inline_size <= 4) {
8142                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8143                }
8144                let inner_offset;
8145                let mut inner_depth = depth.clone();
8146                if inlined {
8147                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8148                    inner_offset = next_offset;
8149                } else {
8150                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8151                    inner_depth.increment()?;
8152                }
8153                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
8154                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8155                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8156                {
8157                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8158                }
8159                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8160                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8161                }
8162            }
8163
8164            next_offset += envelope_size;
8165
8166            // Decode the remaining unknown envelopes.
8167            while next_offset < end_offset {
8168                _next_ordinal_to_read += 1;
8169                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8170                next_offset += envelope_size;
8171            }
8172
8173            Ok(())
8174        }
8175    }
8176
8177    impl DelayInfo {
8178        #[inline(always)]
8179        fn max_ordinal_present(&self) -> u64 {
8180            if let Some(_) = self.external_delay {
8181                return 2;
8182            }
8183            if let Some(_) = self.internal_delay {
8184                return 1;
8185            }
8186            0
8187        }
8188    }
8189
8190    impl fidl::encoding::ValueTypeMarker for DelayInfo {
8191        type Borrowed<'a> = &'a Self;
8192        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8193            value
8194        }
8195    }
8196
8197    unsafe impl fidl::encoding::TypeMarker for DelayInfo {
8198        type Owned = Self;
8199
8200        #[inline(always)]
8201        fn inline_align(_context: fidl::encoding::Context) -> usize {
8202            8
8203        }
8204
8205        #[inline(always)]
8206        fn inline_size(_context: fidl::encoding::Context) -> usize {
8207            16
8208        }
8209    }
8210
8211    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DelayInfo, D>
8212        for &DelayInfo
8213    {
8214        unsafe fn encode(
8215            self,
8216            encoder: &mut fidl::encoding::Encoder<'_, D>,
8217            offset: usize,
8218            mut depth: fidl::encoding::Depth,
8219        ) -> fidl::Result<()> {
8220            encoder.debug_check_bounds::<DelayInfo>(offset);
8221            // Vector header
8222            let max_ordinal: u64 = self.max_ordinal_present();
8223            encoder.write_num(max_ordinal, offset);
8224            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8225            // Calling encoder.out_of_line_offset(0) is not allowed.
8226            if max_ordinal == 0 {
8227                return Ok(());
8228            }
8229            depth.increment()?;
8230            let envelope_size = 8;
8231            let bytes_len = max_ordinal as usize * envelope_size;
8232            #[allow(unused_variables)]
8233            let offset = encoder.out_of_line_offset(bytes_len);
8234            let mut _prev_end_offset: usize = 0;
8235            if 1 > max_ordinal {
8236                return Ok(());
8237            }
8238
8239            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8240            // are envelope_size bytes.
8241            let cur_offset: usize = (1 - 1) * envelope_size;
8242
8243            // Zero reserved fields.
8244            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8245
8246            // Safety:
8247            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8248            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8249            //   envelope_size bytes, there is always sufficient room.
8250            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8251                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8252                encoder,
8253                offset + cur_offset,
8254                depth,
8255            )?;
8256
8257            _prev_end_offset = cur_offset + envelope_size;
8258            if 2 > max_ordinal {
8259                return Ok(());
8260            }
8261
8262            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8263            // are envelope_size bytes.
8264            let cur_offset: usize = (2 - 1) * envelope_size;
8265
8266            // Zero reserved fields.
8267            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8268
8269            // Safety:
8270            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8271            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8272            //   envelope_size bytes, there is always sufficient room.
8273            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8274                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8275                encoder,
8276                offset + cur_offset,
8277                depth,
8278            )?;
8279
8280            _prev_end_offset = cur_offset + envelope_size;
8281
8282            Ok(())
8283        }
8284    }
8285
8286    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DelayInfo {
8287        #[inline(always)]
8288        fn new_empty() -> Self {
8289            Self::default()
8290        }
8291
8292        unsafe fn decode(
8293            &mut self,
8294            decoder: &mut fidl::encoding::Decoder<'_, D>,
8295            offset: usize,
8296            mut depth: fidl::encoding::Depth,
8297        ) -> fidl::Result<()> {
8298            decoder.debug_check_bounds::<Self>(offset);
8299            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8300                None => return Err(fidl::Error::NotNullable),
8301                Some(len) => len,
8302            };
8303            // Calling decoder.out_of_line_offset(0) is not allowed.
8304            if len == 0 {
8305                return Ok(());
8306            };
8307            depth.increment()?;
8308            let envelope_size = 8;
8309            let bytes_len = len * envelope_size;
8310            let offset = decoder.out_of_line_offset(bytes_len)?;
8311            // Decode the envelope for each type.
8312            let mut _next_ordinal_to_read = 0;
8313            let mut next_offset = offset;
8314            let end_offset = offset + bytes_len;
8315            _next_ordinal_to_read += 1;
8316            if next_offset >= end_offset {
8317                return Ok(());
8318            }
8319
8320            // Decode unknown envelopes for gaps in ordinals.
8321            while _next_ordinal_to_read < 1 {
8322                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8323                _next_ordinal_to_read += 1;
8324                next_offset += envelope_size;
8325            }
8326
8327            let next_out_of_line = decoder.next_out_of_line();
8328            let handles_before = decoder.remaining_handles();
8329            if let Some((inlined, num_bytes, num_handles)) =
8330                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8331            {
8332                let member_inline_size =
8333                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8334                if inlined != (member_inline_size <= 4) {
8335                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8336                }
8337                let inner_offset;
8338                let mut inner_depth = depth.clone();
8339                if inlined {
8340                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8341                    inner_offset = next_offset;
8342                } else {
8343                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8344                    inner_depth.increment()?;
8345                }
8346                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8347                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8349                {
8350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8351                }
8352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8354                }
8355            }
8356
8357            next_offset += envelope_size;
8358            _next_ordinal_to_read += 1;
8359            if next_offset >= end_offset {
8360                return Ok(());
8361            }
8362
8363            // Decode unknown envelopes for gaps in ordinals.
8364            while _next_ordinal_to_read < 2 {
8365                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8366                _next_ordinal_to_read += 1;
8367                next_offset += envelope_size;
8368            }
8369
8370            let next_out_of_line = decoder.next_out_of_line();
8371            let handles_before = decoder.remaining_handles();
8372            if let Some((inlined, num_bytes, num_handles)) =
8373                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8374            {
8375                let member_inline_size =
8376                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8377                if inlined != (member_inline_size <= 4) {
8378                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8379                }
8380                let inner_offset;
8381                let mut inner_depth = depth.clone();
8382                if inlined {
8383                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8384                    inner_offset = next_offset;
8385                } else {
8386                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8387                    inner_depth.increment()?;
8388                }
8389                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8390                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8392                {
8393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8394                }
8395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8397                }
8398            }
8399
8400            next_offset += envelope_size;
8401
8402            // Decode the remaining unknown envelopes.
8403            while next_offset < end_offset {
8404                _next_ordinal_to_read += 1;
8405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8406                next_offset += envelope_size;
8407            }
8408
8409            Ok(())
8410        }
8411    }
8412
8413    impl Encoding {
8414        #[inline(always)]
8415        fn max_ordinal_present(&self) -> u64 {
8416            if let Some(_) = self.encoding_type {
8417                return 4;
8418            }
8419            if let Some(_) = self.average_encoding_bitrate {
8420                return 3;
8421            }
8422            if let Some(_) = self.decoded_frame_rate {
8423                return 2;
8424            }
8425            if let Some(_) = self.decoded_channel_count {
8426                return 1;
8427            }
8428            0
8429        }
8430    }
8431
8432    impl fidl::encoding::ValueTypeMarker for Encoding {
8433        type Borrowed<'a> = &'a Self;
8434        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8435            value
8436        }
8437    }
8438
8439    unsafe impl fidl::encoding::TypeMarker for Encoding {
8440        type Owned = Self;
8441
8442        #[inline(always)]
8443        fn inline_align(_context: fidl::encoding::Context) -> usize {
8444            8
8445        }
8446
8447        #[inline(always)]
8448        fn inline_size(_context: fidl::encoding::Context) -> usize {
8449            16
8450        }
8451    }
8452
8453    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Encoding, D> for &Encoding {
8454        unsafe fn encode(
8455            self,
8456            encoder: &mut fidl::encoding::Encoder<'_, D>,
8457            offset: usize,
8458            mut depth: fidl::encoding::Depth,
8459        ) -> fidl::Result<()> {
8460            encoder.debug_check_bounds::<Encoding>(offset);
8461            // Vector header
8462            let max_ordinal: u64 = self.max_ordinal_present();
8463            encoder.write_num(max_ordinal, offset);
8464            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8465            // Calling encoder.out_of_line_offset(0) is not allowed.
8466            if max_ordinal == 0 {
8467                return Ok(());
8468            }
8469            depth.increment()?;
8470            let envelope_size = 8;
8471            let bytes_len = max_ordinal as usize * envelope_size;
8472            #[allow(unused_variables)]
8473            let offset = encoder.out_of_line_offset(bytes_len);
8474            let mut _prev_end_offset: usize = 0;
8475            if 1 > max_ordinal {
8476                return Ok(());
8477            }
8478
8479            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8480            // are envelope_size bytes.
8481            let cur_offset: usize = (1 - 1) * envelope_size;
8482
8483            // Zero reserved fields.
8484            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8485
8486            // Safety:
8487            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8488            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8489            //   envelope_size bytes, there is always sufficient room.
8490            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8491                self.decoded_channel_count
8492                    .as_ref()
8493                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8494                encoder,
8495                offset + cur_offset,
8496                depth,
8497            )?;
8498
8499            _prev_end_offset = cur_offset + envelope_size;
8500            if 2 > max_ordinal {
8501                return Ok(());
8502            }
8503
8504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8505            // are envelope_size bytes.
8506            let cur_offset: usize = (2 - 1) * envelope_size;
8507
8508            // Zero reserved fields.
8509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8510
8511            // Safety:
8512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8514            //   envelope_size bytes, there is always sufficient room.
8515            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8516                self.decoded_frame_rate
8517                    .as_ref()
8518                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8519                encoder,
8520                offset + cur_offset,
8521                depth,
8522            )?;
8523
8524            _prev_end_offset = cur_offset + envelope_size;
8525            if 3 > max_ordinal {
8526                return Ok(());
8527            }
8528
8529            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8530            // are envelope_size bytes.
8531            let cur_offset: usize = (3 - 1) * envelope_size;
8532
8533            // Zero reserved fields.
8534            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8535
8536            // Safety:
8537            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8538            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8539            //   envelope_size bytes, there is always sufficient room.
8540            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8541                self.average_encoding_bitrate
8542                    .as_ref()
8543                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8544                encoder,
8545                offset + cur_offset,
8546                depth,
8547            )?;
8548
8549            _prev_end_offset = cur_offset + envelope_size;
8550            if 4 > max_ordinal {
8551                return Ok(());
8552            }
8553
8554            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8555            // are envelope_size bytes.
8556            let cur_offset: usize = (4 - 1) * envelope_size;
8557
8558            // Zero reserved fields.
8559            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8560
8561            // Safety:
8562            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8563            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8564            //   envelope_size bytes, there is always sufficient room.
8565            fidl::encoding::encode_in_envelope_optional::<EncodingType, D>(
8566                self.encoding_type
8567                    .as_ref()
8568                    .map(<EncodingType as fidl::encoding::ValueTypeMarker>::borrow),
8569                encoder,
8570                offset + cur_offset,
8571                depth,
8572            )?;
8573
8574            _prev_end_offset = cur_offset + envelope_size;
8575
8576            Ok(())
8577        }
8578    }
8579
8580    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Encoding {
8581        #[inline(always)]
8582        fn new_empty() -> Self {
8583            Self::default()
8584        }
8585
8586        unsafe fn decode(
8587            &mut self,
8588            decoder: &mut fidl::encoding::Decoder<'_, D>,
8589            offset: usize,
8590            mut depth: fidl::encoding::Depth,
8591        ) -> fidl::Result<()> {
8592            decoder.debug_check_bounds::<Self>(offset);
8593            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8594                None => return Err(fidl::Error::NotNullable),
8595                Some(len) => len,
8596            };
8597            // Calling decoder.out_of_line_offset(0) is not allowed.
8598            if len == 0 {
8599                return Ok(());
8600            };
8601            depth.increment()?;
8602            let envelope_size = 8;
8603            let bytes_len = len * envelope_size;
8604            let offset = decoder.out_of_line_offset(bytes_len)?;
8605            // Decode the envelope for each type.
8606            let mut _next_ordinal_to_read = 0;
8607            let mut next_offset = offset;
8608            let end_offset = offset + bytes_len;
8609            _next_ordinal_to_read += 1;
8610            if next_offset >= end_offset {
8611                return Ok(());
8612            }
8613
8614            // Decode unknown envelopes for gaps in ordinals.
8615            while _next_ordinal_to_read < 1 {
8616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8617                _next_ordinal_to_read += 1;
8618                next_offset += envelope_size;
8619            }
8620
8621            let next_out_of_line = decoder.next_out_of_line();
8622            let handles_before = decoder.remaining_handles();
8623            if let Some((inlined, num_bytes, num_handles)) =
8624                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8625            {
8626                let member_inline_size =
8627                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8628                if inlined != (member_inline_size <= 4) {
8629                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8630                }
8631                let inner_offset;
8632                let mut inner_depth = depth.clone();
8633                if inlined {
8634                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8635                    inner_offset = next_offset;
8636                } else {
8637                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8638                    inner_depth.increment()?;
8639                }
8640                let val_ref =
8641                    self.decoded_channel_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
8642                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8643                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8644                {
8645                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8646                }
8647                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8648                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8649                }
8650            }
8651
8652            next_offset += envelope_size;
8653            _next_ordinal_to_read += 1;
8654            if next_offset >= end_offset {
8655                return Ok(());
8656            }
8657
8658            // Decode unknown envelopes for gaps in ordinals.
8659            while _next_ordinal_to_read < 2 {
8660                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8661                _next_ordinal_to_read += 1;
8662                next_offset += envelope_size;
8663            }
8664
8665            let next_out_of_line = decoder.next_out_of_line();
8666            let handles_before = decoder.remaining_handles();
8667            if let Some((inlined, num_bytes, num_handles)) =
8668                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8669            {
8670                let member_inline_size =
8671                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8672                if inlined != (member_inline_size <= 4) {
8673                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8674                }
8675                let inner_offset;
8676                let mut inner_depth = depth.clone();
8677                if inlined {
8678                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8679                    inner_offset = next_offset;
8680                } else {
8681                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8682                    inner_depth.increment()?;
8683                }
8684                let val_ref =
8685                    self.decoded_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8686                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8687                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8688                {
8689                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8690                }
8691                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8692                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8693                }
8694            }
8695
8696            next_offset += envelope_size;
8697            _next_ordinal_to_read += 1;
8698            if next_offset >= end_offset {
8699                return Ok(());
8700            }
8701
8702            // Decode unknown envelopes for gaps in ordinals.
8703            while _next_ordinal_to_read < 3 {
8704                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8705                _next_ordinal_to_read += 1;
8706                next_offset += envelope_size;
8707            }
8708
8709            let next_out_of_line = decoder.next_out_of_line();
8710            let handles_before = decoder.remaining_handles();
8711            if let Some((inlined, num_bytes, num_handles)) =
8712                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8713            {
8714                let member_inline_size =
8715                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8716                if inlined != (member_inline_size <= 4) {
8717                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8718                }
8719                let inner_offset;
8720                let mut inner_depth = depth.clone();
8721                if inlined {
8722                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8723                    inner_offset = next_offset;
8724                } else {
8725                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8726                    inner_depth.increment()?;
8727                }
8728                let val_ref =
8729                    self.average_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8730                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8731                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8732                {
8733                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8734                }
8735                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8736                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8737                }
8738            }
8739
8740            next_offset += envelope_size;
8741            _next_ordinal_to_read += 1;
8742            if next_offset >= end_offset {
8743                return Ok(());
8744            }
8745
8746            // Decode unknown envelopes for gaps in ordinals.
8747            while _next_ordinal_to_read < 4 {
8748                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8749                _next_ordinal_to_read += 1;
8750                next_offset += envelope_size;
8751            }
8752
8753            let next_out_of_line = decoder.next_out_of_line();
8754            let handles_before = decoder.remaining_handles();
8755            if let Some((inlined, num_bytes, num_handles)) =
8756                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8757            {
8758                let member_inline_size =
8759                    <EncodingType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8760                if inlined != (member_inline_size <= 4) {
8761                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8762                }
8763                let inner_offset;
8764                let mut inner_depth = depth.clone();
8765                if inlined {
8766                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8767                    inner_offset = next_offset;
8768                } else {
8769                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8770                    inner_depth.increment()?;
8771                }
8772                let val_ref =
8773                    self.encoding_type.get_or_insert_with(|| fidl::new_empty!(EncodingType, D));
8774                fidl::decode!(EncodingType, D, val_ref, decoder, inner_offset, inner_depth)?;
8775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8776                {
8777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8778                }
8779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8781                }
8782            }
8783
8784            next_offset += envelope_size;
8785
8786            // Decode the remaining unknown envelopes.
8787            while next_offset < end_offset {
8788                _next_ordinal_to_read += 1;
8789                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8790                next_offset += envelope_size;
8791            }
8792
8793            Ok(())
8794        }
8795    }
8796
8797    impl Format {
8798        #[inline(always)]
8799        fn max_ordinal_present(&self) -> u64 {
8800            if let Some(_) = self.pcm_format {
8801                return 1;
8802            }
8803            0
8804        }
8805    }
8806
8807    impl fidl::encoding::ValueTypeMarker for Format {
8808        type Borrowed<'a> = &'a Self;
8809        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8810            value
8811        }
8812    }
8813
8814    unsafe impl fidl::encoding::TypeMarker for Format {
8815        type Owned = Self;
8816
8817        #[inline(always)]
8818        fn inline_align(_context: fidl::encoding::Context) -> usize {
8819            8
8820        }
8821
8822        #[inline(always)]
8823        fn inline_size(_context: fidl::encoding::Context) -> usize {
8824            16
8825        }
8826    }
8827
8828    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format, D> for &Format {
8829        unsafe fn encode(
8830            self,
8831            encoder: &mut fidl::encoding::Encoder<'_, D>,
8832            offset: usize,
8833            mut depth: fidl::encoding::Depth,
8834        ) -> fidl::Result<()> {
8835            encoder.debug_check_bounds::<Format>(offset);
8836            // Vector header
8837            let max_ordinal: u64 = self.max_ordinal_present();
8838            encoder.write_num(max_ordinal, offset);
8839            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8840            // Calling encoder.out_of_line_offset(0) is not allowed.
8841            if max_ordinal == 0 {
8842                return Ok(());
8843            }
8844            depth.increment()?;
8845            let envelope_size = 8;
8846            let bytes_len = max_ordinal as usize * envelope_size;
8847            #[allow(unused_variables)]
8848            let offset = encoder.out_of_line_offset(bytes_len);
8849            let mut _prev_end_offset: usize = 0;
8850            if 1 > max_ordinal {
8851                return Ok(());
8852            }
8853
8854            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8855            // are envelope_size bytes.
8856            let cur_offset: usize = (1 - 1) * envelope_size;
8857
8858            // Zero reserved fields.
8859            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8860
8861            // Safety:
8862            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8863            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8864            //   envelope_size bytes, there is always sufficient room.
8865            fidl::encoding::encode_in_envelope_optional::<PcmFormat, D>(
8866                self.pcm_format
8867                    .as_ref()
8868                    .map(<PcmFormat as fidl::encoding::ValueTypeMarker>::borrow),
8869                encoder,
8870                offset + cur_offset,
8871                depth,
8872            )?;
8873
8874            _prev_end_offset = cur_offset + envelope_size;
8875
8876            Ok(())
8877        }
8878    }
8879
8880    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
8881        #[inline(always)]
8882        fn new_empty() -> Self {
8883            Self::default()
8884        }
8885
8886        unsafe fn decode(
8887            &mut self,
8888            decoder: &mut fidl::encoding::Decoder<'_, D>,
8889            offset: usize,
8890            mut depth: fidl::encoding::Depth,
8891        ) -> fidl::Result<()> {
8892            decoder.debug_check_bounds::<Self>(offset);
8893            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8894                None => return Err(fidl::Error::NotNullable),
8895                Some(len) => len,
8896            };
8897            // Calling decoder.out_of_line_offset(0) is not allowed.
8898            if len == 0 {
8899                return Ok(());
8900            };
8901            depth.increment()?;
8902            let envelope_size = 8;
8903            let bytes_len = len * envelope_size;
8904            let offset = decoder.out_of_line_offset(bytes_len)?;
8905            // Decode the envelope for each type.
8906            let mut _next_ordinal_to_read = 0;
8907            let mut next_offset = offset;
8908            let end_offset = offset + bytes_len;
8909            _next_ordinal_to_read += 1;
8910            if next_offset >= end_offset {
8911                return Ok(());
8912            }
8913
8914            // Decode unknown envelopes for gaps in ordinals.
8915            while _next_ordinal_to_read < 1 {
8916                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8917                _next_ordinal_to_read += 1;
8918                next_offset += envelope_size;
8919            }
8920
8921            let next_out_of_line = decoder.next_out_of_line();
8922            let handles_before = decoder.remaining_handles();
8923            if let Some((inlined, num_bytes, num_handles)) =
8924                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8925            {
8926                let member_inline_size =
8927                    <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8928                if inlined != (member_inline_size <= 4) {
8929                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8930                }
8931                let inner_offset;
8932                let mut inner_depth = depth.clone();
8933                if inlined {
8934                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8935                    inner_offset = next_offset;
8936                } else {
8937                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8938                    inner_depth.increment()?;
8939                }
8940                let val_ref = self.pcm_format.get_or_insert_with(|| fidl::new_empty!(PcmFormat, D));
8941                fidl::decode!(PcmFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
8942                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8943                {
8944                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8945                }
8946                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8947                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8948                }
8949            }
8950
8951            next_offset += envelope_size;
8952
8953            // Decode the remaining unknown envelopes.
8954            while next_offset < end_offset {
8955                _next_ordinal_to_read += 1;
8956                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8957                next_offset += envelope_size;
8958            }
8959
8960            Ok(())
8961        }
8962    }
8963
8964    impl GainState {
8965        #[inline(always)]
8966        fn max_ordinal_present(&self) -> u64 {
8967            if let Some(_) = self.gain_db {
8968                return 3;
8969            }
8970            if let Some(_) = self.agc_enabled {
8971                return 2;
8972            }
8973            if let Some(_) = self.muted {
8974                return 1;
8975            }
8976            0
8977        }
8978    }
8979
8980    impl fidl::encoding::ValueTypeMarker for GainState {
8981        type Borrowed<'a> = &'a Self;
8982        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8983            value
8984        }
8985    }
8986
8987    unsafe impl fidl::encoding::TypeMarker for GainState {
8988        type Owned = Self;
8989
8990        #[inline(always)]
8991        fn inline_align(_context: fidl::encoding::Context) -> usize {
8992            8
8993        }
8994
8995        #[inline(always)]
8996        fn inline_size(_context: fidl::encoding::Context) -> usize {
8997            16
8998        }
8999    }
9000
9001    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainState, D>
9002        for &GainState
9003    {
9004        unsafe fn encode(
9005            self,
9006            encoder: &mut fidl::encoding::Encoder<'_, D>,
9007            offset: usize,
9008            mut depth: fidl::encoding::Depth,
9009        ) -> fidl::Result<()> {
9010            encoder.debug_check_bounds::<GainState>(offset);
9011            // Vector header
9012            let max_ordinal: u64 = self.max_ordinal_present();
9013            encoder.write_num(max_ordinal, offset);
9014            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9015            // Calling encoder.out_of_line_offset(0) is not allowed.
9016            if max_ordinal == 0 {
9017                return Ok(());
9018            }
9019            depth.increment()?;
9020            let envelope_size = 8;
9021            let bytes_len = max_ordinal as usize * envelope_size;
9022            #[allow(unused_variables)]
9023            let offset = encoder.out_of_line_offset(bytes_len);
9024            let mut _prev_end_offset: usize = 0;
9025            if 1 > max_ordinal {
9026                return Ok(());
9027            }
9028
9029            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9030            // are envelope_size bytes.
9031            let cur_offset: usize = (1 - 1) * envelope_size;
9032
9033            // Zero reserved fields.
9034            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9035
9036            // Safety:
9037            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9038            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9039            //   envelope_size bytes, there is always sufficient room.
9040            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9041                self.muted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9042                encoder,
9043                offset + cur_offset,
9044                depth,
9045            )?;
9046
9047            _prev_end_offset = cur_offset + envelope_size;
9048            if 2 > max_ordinal {
9049                return Ok(());
9050            }
9051
9052            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9053            // are envelope_size bytes.
9054            let cur_offset: usize = (2 - 1) * envelope_size;
9055
9056            // Zero reserved fields.
9057            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9058
9059            // Safety:
9060            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9061            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9062            //   envelope_size bytes, there is always sufficient room.
9063            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9064                self.agc_enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9065                encoder,
9066                offset + cur_offset,
9067                depth,
9068            )?;
9069
9070            _prev_end_offset = cur_offset + envelope_size;
9071            if 3 > max_ordinal {
9072                return Ok(());
9073            }
9074
9075            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9076            // are envelope_size bytes.
9077            let cur_offset: usize = (3 - 1) * envelope_size;
9078
9079            // Zero reserved fields.
9080            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9081
9082            // Safety:
9083            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9084            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9085            //   envelope_size bytes, there is always sufficient room.
9086            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9087                self.gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9088                encoder,
9089                offset + cur_offset,
9090                depth,
9091            )?;
9092
9093            _prev_end_offset = cur_offset + envelope_size;
9094
9095            Ok(())
9096        }
9097    }
9098
9099    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainState {
9100        #[inline(always)]
9101        fn new_empty() -> Self {
9102            Self::default()
9103        }
9104
9105        unsafe fn decode(
9106            &mut self,
9107            decoder: &mut fidl::encoding::Decoder<'_, D>,
9108            offset: usize,
9109            mut depth: fidl::encoding::Depth,
9110        ) -> fidl::Result<()> {
9111            decoder.debug_check_bounds::<Self>(offset);
9112            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9113                None => return Err(fidl::Error::NotNullable),
9114                Some(len) => len,
9115            };
9116            // Calling decoder.out_of_line_offset(0) is not allowed.
9117            if len == 0 {
9118                return Ok(());
9119            };
9120            depth.increment()?;
9121            let envelope_size = 8;
9122            let bytes_len = len * envelope_size;
9123            let offset = decoder.out_of_line_offset(bytes_len)?;
9124            // Decode the envelope for each type.
9125            let mut _next_ordinal_to_read = 0;
9126            let mut next_offset = offset;
9127            let end_offset = offset + bytes_len;
9128            _next_ordinal_to_read += 1;
9129            if next_offset >= end_offset {
9130                return Ok(());
9131            }
9132
9133            // Decode unknown envelopes for gaps in ordinals.
9134            while _next_ordinal_to_read < 1 {
9135                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9136                _next_ordinal_to_read += 1;
9137                next_offset += envelope_size;
9138            }
9139
9140            let next_out_of_line = decoder.next_out_of_line();
9141            let handles_before = decoder.remaining_handles();
9142            if let Some((inlined, num_bytes, num_handles)) =
9143                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9144            {
9145                let member_inline_size =
9146                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9147                if inlined != (member_inline_size <= 4) {
9148                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9149                }
9150                let inner_offset;
9151                let mut inner_depth = depth.clone();
9152                if inlined {
9153                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9154                    inner_offset = next_offset;
9155                } else {
9156                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9157                    inner_depth.increment()?;
9158                }
9159                let val_ref = self.muted.get_or_insert_with(|| fidl::new_empty!(bool, D));
9160                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9161                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9162                {
9163                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9164                }
9165                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9166                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9167                }
9168            }
9169
9170            next_offset += envelope_size;
9171            _next_ordinal_to_read += 1;
9172            if next_offset >= end_offset {
9173                return Ok(());
9174            }
9175
9176            // Decode unknown envelopes for gaps in ordinals.
9177            while _next_ordinal_to_read < 2 {
9178                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9179                _next_ordinal_to_read += 1;
9180                next_offset += envelope_size;
9181            }
9182
9183            let next_out_of_line = decoder.next_out_of_line();
9184            let handles_before = decoder.remaining_handles();
9185            if let Some((inlined, num_bytes, num_handles)) =
9186                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9187            {
9188                let member_inline_size =
9189                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9190                if inlined != (member_inline_size <= 4) {
9191                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9192                }
9193                let inner_offset;
9194                let mut inner_depth = depth.clone();
9195                if inlined {
9196                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9197                    inner_offset = next_offset;
9198                } else {
9199                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9200                    inner_depth.increment()?;
9201                }
9202                let val_ref = self.agc_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
9203                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9204                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9205                {
9206                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9207                }
9208                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9209                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9210                }
9211            }
9212
9213            next_offset += envelope_size;
9214            _next_ordinal_to_read += 1;
9215            if next_offset >= end_offset {
9216                return Ok(());
9217            }
9218
9219            // Decode unknown envelopes for gaps in ordinals.
9220            while _next_ordinal_to_read < 3 {
9221                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9222                _next_ordinal_to_read += 1;
9223                next_offset += envelope_size;
9224            }
9225
9226            let next_out_of_line = decoder.next_out_of_line();
9227            let handles_before = decoder.remaining_handles();
9228            if let Some((inlined, num_bytes, num_handles)) =
9229                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9230            {
9231                let member_inline_size =
9232                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9233                if inlined != (member_inline_size <= 4) {
9234                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9235                }
9236                let inner_offset;
9237                let mut inner_depth = depth.clone();
9238                if inlined {
9239                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9240                    inner_offset = next_offset;
9241                } else {
9242                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9243                    inner_depth.increment()?;
9244                }
9245                let val_ref = self.gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9246                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9248                {
9249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9250                }
9251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9253                }
9254            }
9255
9256            next_offset += envelope_size;
9257
9258            // Decode the remaining unknown envelopes.
9259            while next_offset < end_offset {
9260                _next_ordinal_to_read += 1;
9261                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9262                next_offset += envelope_size;
9263            }
9264
9265            Ok(())
9266        }
9267    }
9268
9269    impl HealthState {
9270        #[inline(always)]
9271        fn max_ordinal_present(&self) -> u64 {
9272            if let Some(_) = self.healthy {
9273                return 1;
9274            }
9275            0
9276        }
9277    }
9278
9279    impl fidl::encoding::ValueTypeMarker for HealthState {
9280        type Borrowed<'a> = &'a Self;
9281        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9282            value
9283        }
9284    }
9285
9286    unsafe impl fidl::encoding::TypeMarker for HealthState {
9287        type Owned = Self;
9288
9289        #[inline(always)]
9290        fn inline_align(_context: fidl::encoding::Context) -> usize {
9291            8
9292        }
9293
9294        #[inline(always)]
9295        fn inline_size(_context: fidl::encoding::Context) -> usize {
9296            16
9297        }
9298    }
9299
9300    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthState, D>
9301        for &HealthState
9302    {
9303        unsafe fn encode(
9304            self,
9305            encoder: &mut fidl::encoding::Encoder<'_, D>,
9306            offset: usize,
9307            mut depth: fidl::encoding::Depth,
9308        ) -> fidl::Result<()> {
9309            encoder.debug_check_bounds::<HealthState>(offset);
9310            // Vector header
9311            let max_ordinal: u64 = self.max_ordinal_present();
9312            encoder.write_num(max_ordinal, offset);
9313            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9314            // Calling encoder.out_of_line_offset(0) is not allowed.
9315            if max_ordinal == 0 {
9316                return Ok(());
9317            }
9318            depth.increment()?;
9319            let envelope_size = 8;
9320            let bytes_len = max_ordinal as usize * envelope_size;
9321            #[allow(unused_variables)]
9322            let offset = encoder.out_of_line_offset(bytes_len);
9323            let mut _prev_end_offset: usize = 0;
9324            if 1 > max_ordinal {
9325                return Ok(());
9326            }
9327
9328            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9329            // are envelope_size bytes.
9330            let cur_offset: usize = (1 - 1) * envelope_size;
9331
9332            // Zero reserved fields.
9333            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9334
9335            // Safety:
9336            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9337            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9338            //   envelope_size bytes, there is always sufficient room.
9339            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9340                self.healthy.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9341                encoder,
9342                offset + cur_offset,
9343                depth,
9344            )?;
9345
9346            _prev_end_offset = cur_offset + envelope_size;
9347
9348            Ok(())
9349        }
9350    }
9351
9352    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthState {
9353        #[inline(always)]
9354        fn new_empty() -> Self {
9355            Self::default()
9356        }
9357
9358        unsafe fn decode(
9359            &mut self,
9360            decoder: &mut fidl::encoding::Decoder<'_, D>,
9361            offset: usize,
9362            mut depth: fidl::encoding::Depth,
9363        ) -> fidl::Result<()> {
9364            decoder.debug_check_bounds::<Self>(offset);
9365            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9366                None => return Err(fidl::Error::NotNullable),
9367                Some(len) => len,
9368            };
9369            // Calling decoder.out_of_line_offset(0) is not allowed.
9370            if len == 0 {
9371                return Ok(());
9372            };
9373            depth.increment()?;
9374            let envelope_size = 8;
9375            let bytes_len = len * envelope_size;
9376            let offset = decoder.out_of_line_offset(bytes_len)?;
9377            // Decode the envelope for each type.
9378            let mut _next_ordinal_to_read = 0;
9379            let mut next_offset = offset;
9380            let end_offset = offset + bytes_len;
9381            _next_ordinal_to_read += 1;
9382            if next_offset >= end_offset {
9383                return Ok(());
9384            }
9385
9386            // Decode unknown envelopes for gaps in ordinals.
9387            while _next_ordinal_to_read < 1 {
9388                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9389                _next_ordinal_to_read += 1;
9390                next_offset += envelope_size;
9391            }
9392
9393            let next_out_of_line = decoder.next_out_of_line();
9394            let handles_before = decoder.remaining_handles();
9395            if let Some((inlined, num_bytes, num_handles)) =
9396                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9397            {
9398                let member_inline_size =
9399                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9400                if inlined != (member_inline_size <= 4) {
9401                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9402                }
9403                let inner_offset;
9404                let mut inner_depth = depth.clone();
9405                if inlined {
9406                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9407                    inner_offset = next_offset;
9408                } else {
9409                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9410                    inner_depth.increment()?;
9411                }
9412                let val_ref = self.healthy.get_or_insert_with(|| fidl::new_empty!(bool, D));
9413                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9414                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9415                {
9416                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9417                }
9418                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9419                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9420                }
9421            }
9422
9423            next_offset += envelope_size;
9424
9425            // Decode the remaining unknown envelopes.
9426            while next_offset < end_offset {
9427                _next_ordinal_to_read += 1;
9428                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9429                next_offset += envelope_size;
9430            }
9431
9432            Ok(())
9433        }
9434    }
9435
9436    impl PacketStreamProperties {
9437        #[inline(always)]
9438        fn max_ordinal_present(&self) -> u64 {
9439            if let Some(_) = self.supported_buffer_types {
9440                return 2;
9441            }
9442            if let Some(_) = self.needs_cache_flush_or_invalidate {
9443                return 1;
9444            }
9445            0
9446        }
9447    }
9448
9449    impl fidl::encoding::ValueTypeMarker for PacketStreamProperties {
9450        type Borrowed<'a> = &'a Self;
9451        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9452            value
9453        }
9454    }
9455
9456    unsafe impl fidl::encoding::TypeMarker for PacketStreamProperties {
9457        type Owned = Self;
9458
9459        #[inline(always)]
9460        fn inline_align(_context: fidl::encoding::Context) -> usize {
9461            8
9462        }
9463
9464        #[inline(always)]
9465        fn inline_size(_context: fidl::encoding::Context) -> usize {
9466            16
9467        }
9468    }
9469
9470    unsafe impl<D: fidl::encoding::ResourceDialect>
9471        fidl::encoding::Encode<PacketStreamProperties, D> for &PacketStreamProperties
9472    {
9473        unsafe fn encode(
9474            self,
9475            encoder: &mut fidl::encoding::Encoder<'_, D>,
9476            offset: usize,
9477            mut depth: fidl::encoding::Depth,
9478        ) -> fidl::Result<()> {
9479            encoder.debug_check_bounds::<PacketStreamProperties>(offset);
9480            // Vector header
9481            let max_ordinal: u64 = self.max_ordinal_present();
9482            encoder.write_num(max_ordinal, offset);
9483            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9484            // Calling encoder.out_of_line_offset(0) is not allowed.
9485            if max_ordinal == 0 {
9486                return Ok(());
9487            }
9488            depth.increment()?;
9489            let envelope_size = 8;
9490            let bytes_len = max_ordinal as usize * envelope_size;
9491            #[allow(unused_variables)]
9492            let offset = encoder.out_of_line_offset(bytes_len);
9493            let mut _prev_end_offset: usize = 0;
9494            if 1 > max_ordinal {
9495                return Ok(());
9496            }
9497
9498            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9499            // are envelope_size bytes.
9500            let cur_offset: usize = (1 - 1) * envelope_size;
9501
9502            // Zero reserved fields.
9503            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9504
9505            // Safety:
9506            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9507            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9508            //   envelope_size bytes, there is always sufficient room.
9509            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9510                self.needs_cache_flush_or_invalidate
9511                    .as_ref()
9512                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9513                encoder,
9514                offset + cur_offset,
9515                depth,
9516            )?;
9517
9518            _prev_end_offset = cur_offset + envelope_size;
9519            if 2 > max_ordinal {
9520                return Ok(());
9521            }
9522
9523            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9524            // are envelope_size bytes.
9525            let cur_offset: usize = (2 - 1) * envelope_size;
9526
9527            // Zero reserved fields.
9528            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9529
9530            // Safety:
9531            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9532            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9533            //   envelope_size bytes, there is always sufficient room.
9534            fidl::encoding::encode_in_envelope_optional::<BufferType, D>(
9535                self.supported_buffer_types
9536                    .as_ref()
9537                    .map(<BufferType as fidl::encoding::ValueTypeMarker>::borrow),
9538                encoder,
9539                offset + cur_offset,
9540                depth,
9541            )?;
9542
9543            _prev_end_offset = cur_offset + envelope_size;
9544
9545            Ok(())
9546        }
9547    }
9548
9549    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9550        for PacketStreamProperties
9551    {
9552        #[inline(always)]
9553        fn new_empty() -> Self {
9554            Self::default()
9555        }
9556
9557        unsafe fn decode(
9558            &mut self,
9559            decoder: &mut fidl::encoding::Decoder<'_, D>,
9560            offset: usize,
9561            mut depth: fidl::encoding::Depth,
9562        ) -> fidl::Result<()> {
9563            decoder.debug_check_bounds::<Self>(offset);
9564            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9565                None => return Err(fidl::Error::NotNullable),
9566                Some(len) => len,
9567            };
9568            // Calling decoder.out_of_line_offset(0) is not allowed.
9569            if len == 0 {
9570                return Ok(());
9571            };
9572            depth.increment()?;
9573            let envelope_size = 8;
9574            let bytes_len = len * envelope_size;
9575            let offset = decoder.out_of_line_offset(bytes_len)?;
9576            // Decode the envelope for each type.
9577            let mut _next_ordinal_to_read = 0;
9578            let mut next_offset = offset;
9579            let end_offset = offset + bytes_len;
9580            _next_ordinal_to_read += 1;
9581            if next_offset >= end_offset {
9582                return Ok(());
9583            }
9584
9585            // Decode unknown envelopes for gaps in ordinals.
9586            while _next_ordinal_to_read < 1 {
9587                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9588                _next_ordinal_to_read += 1;
9589                next_offset += envelope_size;
9590            }
9591
9592            let next_out_of_line = decoder.next_out_of_line();
9593            let handles_before = decoder.remaining_handles();
9594            if let Some((inlined, num_bytes, num_handles)) =
9595                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9596            {
9597                let member_inline_size =
9598                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9599                if inlined != (member_inline_size <= 4) {
9600                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9601                }
9602                let inner_offset;
9603                let mut inner_depth = depth.clone();
9604                if inlined {
9605                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9606                    inner_offset = next_offset;
9607                } else {
9608                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9609                    inner_depth.increment()?;
9610                }
9611                let val_ref = self
9612                    .needs_cache_flush_or_invalidate
9613                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9614                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9615                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9616                {
9617                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9618                }
9619                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9620                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9621                }
9622            }
9623
9624            next_offset += envelope_size;
9625            _next_ordinal_to_read += 1;
9626            if next_offset >= end_offset {
9627                return Ok(());
9628            }
9629
9630            // Decode unknown envelopes for gaps in ordinals.
9631            while _next_ordinal_to_read < 2 {
9632                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9633                _next_ordinal_to_read += 1;
9634                next_offset += envelope_size;
9635            }
9636
9637            let next_out_of_line = decoder.next_out_of_line();
9638            let handles_before = decoder.remaining_handles();
9639            if let Some((inlined, num_bytes, num_handles)) =
9640                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9641            {
9642                let member_inline_size =
9643                    <BufferType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9644                if inlined != (member_inline_size <= 4) {
9645                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9646                }
9647                let inner_offset;
9648                let mut inner_depth = depth.clone();
9649                if inlined {
9650                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9651                    inner_offset = next_offset;
9652                } else {
9653                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9654                    inner_depth.increment()?;
9655                }
9656                let val_ref = self
9657                    .supported_buffer_types
9658                    .get_or_insert_with(|| fidl::new_empty!(BufferType, D));
9659                fidl::decode!(BufferType, D, val_ref, decoder, inner_offset, inner_depth)?;
9660                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9661                {
9662                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9663                }
9664                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9665                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9666                }
9667            }
9668
9669            next_offset += envelope_size;
9670
9671            // Decode the remaining unknown envelopes.
9672            while next_offset < end_offset {
9673                _next_ordinal_to_read += 1;
9674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9675                next_offset += envelope_size;
9676            }
9677
9678            Ok(())
9679        }
9680    }
9681
9682    impl PacketStreamSinkPutPacketResponse {
9683        #[inline(always)]
9684        fn max_ordinal_present(&self) -> u64 {
9685            0
9686        }
9687    }
9688
9689    impl fidl::encoding::ValueTypeMarker for PacketStreamSinkPutPacketResponse {
9690        type Borrowed<'a> = &'a Self;
9691        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9692            value
9693        }
9694    }
9695
9696    unsafe impl fidl::encoding::TypeMarker for PacketStreamSinkPutPacketResponse {
9697        type Owned = Self;
9698
9699        #[inline(always)]
9700        fn inline_align(_context: fidl::encoding::Context) -> usize {
9701            8
9702        }
9703
9704        #[inline(always)]
9705        fn inline_size(_context: fidl::encoding::Context) -> usize {
9706            16
9707        }
9708    }
9709
9710    unsafe impl<D: fidl::encoding::ResourceDialect>
9711        fidl::encoding::Encode<PacketStreamSinkPutPacketResponse, D>
9712        for &PacketStreamSinkPutPacketResponse
9713    {
9714        unsafe fn encode(
9715            self,
9716            encoder: &mut fidl::encoding::Encoder<'_, D>,
9717            offset: usize,
9718            mut depth: fidl::encoding::Depth,
9719        ) -> fidl::Result<()> {
9720            encoder.debug_check_bounds::<PacketStreamSinkPutPacketResponse>(offset);
9721            // Vector header
9722            let max_ordinal: u64 = self.max_ordinal_present();
9723            encoder.write_num(max_ordinal, offset);
9724            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9725            // Calling encoder.out_of_line_offset(0) is not allowed.
9726            if max_ordinal == 0 {
9727                return Ok(());
9728            }
9729            depth.increment()?;
9730            let envelope_size = 8;
9731            let bytes_len = max_ordinal as usize * envelope_size;
9732            #[allow(unused_variables)]
9733            let offset = encoder.out_of_line_offset(bytes_len);
9734            let mut _prev_end_offset: usize = 0;
9735
9736            Ok(())
9737        }
9738    }
9739
9740    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9741        for PacketStreamSinkPutPacketResponse
9742    {
9743        #[inline(always)]
9744        fn new_empty() -> Self {
9745            Self::default()
9746        }
9747
9748        unsafe fn decode(
9749            &mut self,
9750            decoder: &mut fidl::encoding::Decoder<'_, D>,
9751            offset: usize,
9752            mut depth: fidl::encoding::Depth,
9753        ) -> fidl::Result<()> {
9754            decoder.debug_check_bounds::<Self>(offset);
9755            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9756                None => return Err(fidl::Error::NotNullable),
9757                Some(len) => len,
9758            };
9759            // Calling decoder.out_of_line_offset(0) is not allowed.
9760            if len == 0 {
9761                return Ok(());
9762            };
9763            depth.increment()?;
9764            let envelope_size = 8;
9765            let bytes_len = len * envelope_size;
9766            let offset = decoder.out_of_line_offset(bytes_len)?;
9767            // Decode the envelope for each type.
9768            let mut _next_ordinal_to_read = 0;
9769            let mut next_offset = offset;
9770            let end_offset = offset + bytes_len;
9771
9772            // Decode the remaining unknown envelopes.
9773            while next_offset < end_offset {
9774                _next_ordinal_to_read += 1;
9775                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9776                next_offset += envelope_size;
9777            }
9778
9779            Ok(())
9780        }
9781    }
9782
9783    impl PcmSupportedFormats {
9784        #[inline(always)]
9785        fn max_ordinal_present(&self) -> u64 {
9786            if let Some(_) = self.frame_rates {
9787                return 5;
9788            }
9789            if let Some(_) = self.valid_bits_per_sample {
9790                return 4;
9791            }
9792            if let Some(_) = self.bytes_per_sample {
9793                return 3;
9794            }
9795            if let Some(_) = self.sample_formats {
9796                return 2;
9797            }
9798            if let Some(_) = self.channel_sets {
9799                return 1;
9800            }
9801            0
9802        }
9803    }
9804
9805    impl fidl::encoding::ValueTypeMarker for PcmSupportedFormats {
9806        type Borrowed<'a> = &'a Self;
9807        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9808            value
9809        }
9810    }
9811
9812    unsafe impl fidl::encoding::TypeMarker for PcmSupportedFormats {
9813        type Owned = Self;
9814
9815        #[inline(always)]
9816        fn inline_align(_context: fidl::encoding::Context) -> usize {
9817            8
9818        }
9819
9820        #[inline(always)]
9821        fn inline_size(_context: fidl::encoding::Context) -> usize {
9822            16
9823        }
9824    }
9825
9826    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmSupportedFormats, D>
9827        for &PcmSupportedFormats
9828    {
9829        unsafe fn encode(
9830            self,
9831            encoder: &mut fidl::encoding::Encoder<'_, D>,
9832            offset: usize,
9833            mut depth: fidl::encoding::Depth,
9834        ) -> fidl::Result<()> {
9835            encoder.debug_check_bounds::<PcmSupportedFormats>(offset);
9836            // Vector header
9837            let max_ordinal: u64 = self.max_ordinal_present();
9838            encoder.write_num(max_ordinal, offset);
9839            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9840            // Calling encoder.out_of_line_offset(0) is not allowed.
9841            if max_ordinal == 0 {
9842                return Ok(());
9843            }
9844            depth.increment()?;
9845            let envelope_size = 8;
9846            let bytes_len = max_ordinal as usize * envelope_size;
9847            #[allow(unused_variables)]
9848            let offset = encoder.out_of_line_offset(bytes_len);
9849            let mut _prev_end_offset: usize = 0;
9850            if 1 > max_ordinal {
9851                return Ok(());
9852            }
9853
9854            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9855            // are envelope_size bytes.
9856            let cur_offset: usize = (1 - 1) * envelope_size;
9857
9858            // Zero reserved fields.
9859            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9860
9861            // Safety:
9862            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9863            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9864            //   envelope_size bytes, there is always sufficient room.
9865            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
9866            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
9867            encoder, offset + cur_offset, depth
9868        )?;
9869
9870            _prev_end_offset = cur_offset + envelope_size;
9871            if 2 > max_ordinal {
9872                return Ok(());
9873            }
9874
9875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9876            // are envelope_size bytes.
9877            let cur_offset: usize = (2 - 1) * envelope_size;
9878
9879            // Zero reserved fields.
9880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9881
9882            // Safety:
9883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9885            //   envelope_size bytes, there is always sufficient room.
9886            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleFormat, 3>, D>(
9887            self.sample_formats.as_ref().map(<fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::ValueTypeMarker>::borrow),
9888            encoder, offset + cur_offset, depth
9889        )?;
9890
9891            _prev_end_offset = cur_offset + envelope_size;
9892            if 3 > max_ordinal {
9893                return Ok(());
9894            }
9895
9896            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9897            // are envelope_size bytes.
9898            let cur_offset: usize = (3 - 1) * envelope_size;
9899
9900            // Zero reserved fields.
9901            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9902
9903            // Safety:
9904            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9905            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9906            //   envelope_size bytes, there is always sufficient room.
9907            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9908                self.bytes_per_sample.as_ref().map(
9909                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9910                ),
9911                encoder,
9912                offset + cur_offset,
9913                depth,
9914            )?;
9915
9916            _prev_end_offset = cur_offset + envelope_size;
9917            if 4 > max_ordinal {
9918                return Ok(());
9919            }
9920
9921            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9922            // are envelope_size bytes.
9923            let cur_offset: usize = (4 - 1) * envelope_size;
9924
9925            // Zero reserved fields.
9926            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9927
9928            // Safety:
9929            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9930            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9931            //   envelope_size bytes, there is always sufficient room.
9932            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9933                self.valid_bits_per_sample.as_ref().map(
9934                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9935                ),
9936                encoder,
9937                offset + cur_offset,
9938                depth,
9939            )?;
9940
9941            _prev_end_offset = cur_offset + envelope_size;
9942            if 5 > max_ordinal {
9943                return Ok(());
9944            }
9945
9946            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9947            // are envelope_size bytes.
9948            let cur_offset: usize = (5 - 1) * envelope_size;
9949
9950            // Zero reserved fields.
9951            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9952
9953            // Safety:
9954            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9955            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9956            //   envelope_size bytes, there is always sufficient room.
9957            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
9958                self.frame_rates.as_ref().map(
9959                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
9960                ),
9961                encoder,
9962                offset + cur_offset,
9963                depth,
9964            )?;
9965
9966            _prev_end_offset = cur_offset + envelope_size;
9967
9968            Ok(())
9969        }
9970    }
9971
9972    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmSupportedFormats {
9973        #[inline(always)]
9974        fn new_empty() -> Self {
9975            Self::default()
9976        }
9977
9978        unsafe fn decode(
9979            &mut self,
9980            decoder: &mut fidl::encoding::Decoder<'_, D>,
9981            offset: usize,
9982            mut depth: fidl::encoding::Depth,
9983        ) -> fidl::Result<()> {
9984            decoder.debug_check_bounds::<Self>(offset);
9985            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9986                None => return Err(fidl::Error::NotNullable),
9987                Some(len) => len,
9988            };
9989            // Calling decoder.out_of_line_offset(0) is not allowed.
9990            if len == 0 {
9991                return Ok(());
9992            };
9993            depth.increment()?;
9994            let envelope_size = 8;
9995            let bytes_len = len * envelope_size;
9996            let offset = decoder.out_of_line_offset(bytes_len)?;
9997            // Decode the envelope for each type.
9998            let mut _next_ordinal_to_read = 0;
9999            let mut next_offset = offset;
10000            let end_offset = offset + bytes_len;
10001            _next_ordinal_to_read += 1;
10002            if next_offset >= end_offset {
10003                return Ok(());
10004            }
10005
10006            // Decode unknown envelopes for gaps in ordinals.
10007            while _next_ordinal_to_read < 1 {
10008                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10009                _next_ordinal_to_read += 1;
10010                next_offset += envelope_size;
10011            }
10012
10013            let next_out_of_line = decoder.next_out_of_line();
10014            let handles_before = decoder.remaining_handles();
10015            if let Some((inlined, num_bytes, num_handles)) =
10016                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10017            {
10018                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10019                if inlined != (member_inline_size <= 4) {
10020                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10021                }
10022                let inner_offset;
10023                let mut inner_depth = depth.clone();
10024                if inlined {
10025                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10026                    inner_offset = next_offset;
10027                } else {
10028                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10029                    inner_depth.increment()?;
10030                }
10031                let val_ref = self.channel_sets.get_or_insert_with(
10032                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
10033                );
10034                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10035                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10036                {
10037                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10038                }
10039                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10040                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10041                }
10042            }
10043
10044            next_offset += envelope_size;
10045            _next_ordinal_to_read += 1;
10046            if next_offset >= end_offset {
10047                return Ok(());
10048            }
10049
10050            // Decode unknown envelopes for gaps in ordinals.
10051            while _next_ordinal_to_read < 2 {
10052                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10053                _next_ordinal_to_read += 1;
10054                next_offset += envelope_size;
10055            }
10056
10057            let next_out_of_line = decoder.next_out_of_line();
10058            let handles_before = decoder.remaining_handles();
10059            if let Some((inlined, num_bytes, num_handles)) =
10060                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10061            {
10062                let member_inline_size = <fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10063                if inlined != (member_inline_size <= 4) {
10064                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10065                }
10066                let inner_offset;
10067                let mut inner_depth = depth.clone();
10068                if inlined {
10069                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10070                    inner_offset = next_offset;
10071                } else {
10072                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10073                    inner_depth.increment()?;
10074                }
10075                let val_ref = self.sample_formats.get_or_insert_with(
10076                    || fidl::new_empty!(fidl::encoding::Vector<SampleFormat, 3>, D),
10077                );
10078                fidl::decode!(fidl::encoding::Vector<SampleFormat, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
10079                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10080                {
10081                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10082                }
10083                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10084                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10085                }
10086            }
10087
10088            next_offset += envelope_size;
10089            _next_ordinal_to_read += 1;
10090            if next_offset >= end_offset {
10091                return Ok(());
10092            }
10093
10094            // Decode unknown envelopes for gaps in ordinals.
10095            while _next_ordinal_to_read < 3 {
10096                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10097                _next_ordinal_to_read += 1;
10098                next_offset += envelope_size;
10099            }
10100
10101            let next_out_of_line = decoder.next_out_of_line();
10102            let handles_before = decoder.remaining_handles();
10103            if let Some((inlined, num_bytes, num_handles)) =
10104                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10105            {
10106                let member_inline_size =
10107                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10108                        decoder.context,
10109                    );
10110                if inlined != (member_inline_size <= 4) {
10111                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10112                }
10113                let inner_offset;
10114                let mut inner_depth = depth.clone();
10115                if inlined {
10116                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10117                    inner_offset = next_offset;
10118                } else {
10119                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10120                    inner_depth.increment()?;
10121                }
10122                let val_ref = self
10123                    .bytes_per_sample
10124                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10125                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10126                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10127                {
10128                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10129                }
10130                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10131                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10132                }
10133            }
10134
10135            next_offset += envelope_size;
10136            _next_ordinal_to_read += 1;
10137            if next_offset >= end_offset {
10138                return Ok(());
10139            }
10140
10141            // Decode unknown envelopes for gaps in ordinals.
10142            while _next_ordinal_to_read < 4 {
10143                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10144                _next_ordinal_to_read += 1;
10145                next_offset += envelope_size;
10146            }
10147
10148            let next_out_of_line = decoder.next_out_of_line();
10149            let handles_before = decoder.remaining_handles();
10150            if let Some((inlined, num_bytes, num_handles)) =
10151                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10152            {
10153                let member_inline_size =
10154                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10155                        decoder.context,
10156                    );
10157                if inlined != (member_inline_size <= 4) {
10158                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10159                }
10160                let inner_offset;
10161                let mut inner_depth = depth.clone();
10162                if inlined {
10163                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10164                    inner_offset = next_offset;
10165                } else {
10166                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10167                    inner_depth.increment()?;
10168                }
10169                let val_ref = self
10170                    .valid_bits_per_sample
10171                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10172                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10173                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10174                {
10175                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10176                }
10177                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10178                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10179                }
10180            }
10181
10182            next_offset += envelope_size;
10183            _next_ordinal_to_read += 1;
10184            if next_offset >= end_offset {
10185                return Ok(());
10186            }
10187
10188            // Decode unknown envelopes for gaps in ordinals.
10189            while _next_ordinal_to_read < 5 {
10190                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10191                _next_ordinal_to_read += 1;
10192                next_offset += envelope_size;
10193            }
10194
10195            let next_out_of_line = decoder.next_out_of_line();
10196            let handles_before = decoder.remaining_handles();
10197            if let Some((inlined, num_bytes, num_handles)) =
10198                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10199            {
10200                let member_inline_size =
10201                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
10202                        decoder.context,
10203                    );
10204                if inlined != (member_inline_size <= 4) {
10205                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10206                }
10207                let inner_offset;
10208                let mut inner_depth = depth.clone();
10209                if inlined {
10210                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10211                    inner_offset = next_offset;
10212                } else {
10213                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10214                    inner_depth.increment()?;
10215                }
10216                let val_ref = self
10217                    .frame_rates
10218                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
10219                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10221                {
10222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10223                }
10224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10226                }
10227            }
10228
10229            next_offset += envelope_size;
10230
10231            // Decode the remaining unknown envelopes.
10232            while next_offset < end_offset {
10233                _next_ordinal_to_read += 1;
10234                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10235                next_offset += envelope_size;
10236            }
10237
10238            Ok(())
10239        }
10240    }
10241
10242    impl PlugState {
10243        #[inline(always)]
10244        fn max_ordinal_present(&self) -> u64 {
10245            if let Some(_) = self.plug_state_time {
10246                return 2;
10247            }
10248            if let Some(_) = self.plugged {
10249                return 1;
10250            }
10251            0
10252        }
10253    }
10254
10255    impl fidl::encoding::ValueTypeMarker for PlugState {
10256        type Borrowed<'a> = &'a Self;
10257        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10258            value
10259        }
10260    }
10261
10262    unsafe impl fidl::encoding::TypeMarker for PlugState {
10263        type Owned = Self;
10264
10265        #[inline(always)]
10266        fn inline_align(_context: fidl::encoding::Context) -> usize {
10267            8
10268        }
10269
10270        #[inline(always)]
10271        fn inline_size(_context: fidl::encoding::Context) -> usize {
10272            16
10273        }
10274    }
10275
10276    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugState, D>
10277        for &PlugState
10278    {
10279        unsafe fn encode(
10280            self,
10281            encoder: &mut fidl::encoding::Encoder<'_, D>,
10282            offset: usize,
10283            mut depth: fidl::encoding::Depth,
10284        ) -> fidl::Result<()> {
10285            encoder.debug_check_bounds::<PlugState>(offset);
10286            // Vector header
10287            let max_ordinal: u64 = self.max_ordinal_present();
10288            encoder.write_num(max_ordinal, offset);
10289            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10290            // Calling encoder.out_of_line_offset(0) is not allowed.
10291            if max_ordinal == 0 {
10292                return Ok(());
10293            }
10294            depth.increment()?;
10295            let envelope_size = 8;
10296            let bytes_len = max_ordinal as usize * envelope_size;
10297            #[allow(unused_variables)]
10298            let offset = encoder.out_of_line_offset(bytes_len);
10299            let mut _prev_end_offset: usize = 0;
10300            if 1 > max_ordinal {
10301                return Ok(());
10302            }
10303
10304            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10305            // are envelope_size bytes.
10306            let cur_offset: usize = (1 - 1) * envelope_size;
10307
10308            // Zero reserved fields.
10309            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10310
10311            // Safety:
10312            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10313            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10314            //   envelope_size bytes, there is always sufficient room.
10315            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10316                self.plugged.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10317                encoder,
10318                offset + cur_offset,
10319                depth,
10320            )?;
10321
10322            _prev_end_offset = cur_offset + envelope_size;
10323            if 2 > max_ordinal {
10324                return Ok(());
10325            }
10326
10327            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10328            // are envelope_size bytes.
10329            let cur_offset: usize = (2 - 1) * envelope_size;
10330
10331            // Zero reserved fields.
10332            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10333
10334            // Safety:
10335            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10336            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10337            //   envelope_size bytes, there is always sufficient room.
10338            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10339                self.plug_state_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10340                encoder,
10341                offset + cur_offset,
10342                depth,
10343            )?;
10344
10345            _prev_end_offset = cur_offset + envelope_size;
10346
10347            Ok(())
10348        }
10349    }
10350
10351    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugState {
10352        #[inline(always)]
10353        fn new_empty() -> Self {
10354            Self::default()
10355        }
10356
10357        unsafe fn decode(
10358            &mut self,
10359            decoder: &mut fidl::encoding::Decoder<'_, D>,
10360            offset: usize,
10361            mut depth: fidl::encoding::Depth,
10362        ) -> fidl::Result<()> {
10363            decoder.debug_check_bounds::<Self>(offset);
10364            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10365                None => return Err(fidl::Error::NotNullable),
10366                Some(len) => len,
10367            };
10368            // Calling decoder.out_of_line_offset(0) is not allowed.
10369            if len == 0 {
10370                return Ok(());
10371            };
10372            depth.increment()?;
10373            let envelope_size = 8;
10374            let bytes_len = len * envelope_size;
10375            let offset = decoder.out_of_line_offset(bytes_len)?;
10376            // Decode the envelope for each type.
10377            let mut _next_ordinal_to_read = 0;
10378            let mut next_offset = offset;
10379            let end_offset = offset + bytes_len;
10380            _next_ordinal_to_read += 1;
10381            if next_offset >= end_offset {
10382                return Ok(());
10383            }
10384
10385            // Decode unknown envelopes for gaps in ordinals.
10386            while _next_ordinal_to_read < 1 {
10387                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10388                _next_ordinal_to_read += 1;
10389                next_offset += envelope_size;
10390            }
10391
10392            let next_out_of_line = decoder.next_out_of_line();
10393            let handles_before = decoder.remaining_handles();
10394            if let Some((inlined, num_bytes, num_handles)) =
10395                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10396            {
10397                let member_inline_size =
10398                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10399                if inlined != (member_inline_size <= 4) {
10400                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10401                }
10402                let inner_offset;
10403                let mut inner_depth = depth.clone();
10404                if inlined {
10405                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10406                    inner_offset = next_offset;
10407                } else {
10408                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10409                    inner_depth.increment()?;
10410                }
10411                let val_ref = self.plugged.get_or_insert_with(|| fidl::new_empty!(bool, D));
10412                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10413                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10414                {
10415                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10416                }
10417                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10418                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10419                }
10420            }
10421
10422            next_offset += envelope_size;
10423            _next_ordinal_to_read += 1;
10424            if next_offset >= end_offset {
10425                return Ok(());
10426            }
10427
10428            // Decode unknown envelopes for gaps in ordinals.
10429            while _next_ordinal_to_read < 2 {
10430                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10431                _next_ordinal_to_read += 1;
10432                next_offset += envelope_size;
10433            }
10434
10435            let next_out_of_line = decoder.next_out_of_line();
10436            let handles_before = decoder.remaining_handles();
10437            if let Some((inlined, num_bytes, num_handles)) =
10438                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10439            {
10440                let member_inline_size =
10441                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10442                if inlined != (member_inline_size <= 4) {
10443                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10444                }
10445                let inner_offset;
10446                let mut inner_depth = depth.clone();
10447                if inlined {
10448                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10449                    inner_offset = next_offset;
10450                } else {
10451                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10452                    inner_depth.increment()?;
10453                }
10454                let val_ref = self.plug_state_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
10455                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10456                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10457                {
10458                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10459                }
10460                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10461                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10462                }
10463            }
10464
10465            next_offset += envelope_size;
10466
10467            // Decode the remaining unknown envelopes.
10468            while next_offset < end_offset {
10469                _next_ordinal_to_read += 1;
10470                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10471                next_offset += envelope_size;
10472            }
10473
10474            Ok(())
10475        }
10476    }
10477
10478    impl RingBufferProperties {
10479        #[inline(always)]
10480        fn max_ordinal_present(&self) -> u64 {
10481            if let Some(_) = self.driver_transfer_bytes {
10482                return 5;
10483            }
10484            if let Some(_) = self.turn_on_delay {
10485                return 4;
10486            }
10487            if let Some(_) = self.needs_cache_flush_or_invalidate {
10488                return 3;
10489            }
10490            0
10491        }
10492    }
10493
10494    impl fidl::encoding::ValueTypeMarker for RingBufferProperties {
10495        type Borrowed<'a> = &'a Self;
10496        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10497            value
10498        }
10499    }
10500
10501    unsafe impl fidl::encoding::TypeMarker for RingBufferProperties {
10502        type Owned = Self;
10503
10504        #[inline(always)]
10505        fn inline_align(_context: fidl::encoding::Context) -> usize {
10506            8
10507        }
10508
10509        #[inline(always)]
10510        fn inline_size(_context: fidl::encoding::Context) -> usize {
10511            16
10512        }
10513    }
10514
10515    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferProperties, D>
10516        for &RingBufferProperties
10517    {
10518        unsafe fn encode(
10519            self,
10520            encoder: &mut fidl::encoding::Encoder<'_, D>,
10521            offset: usize,
10522            mut depth: fidl::encoding::Depth,
10523        ) -> fidl::Result<()> {
10524            encoder.debug_check_bounds::<RingBufferProperties>(offset);
10525            // Vector header
10526            let max_ordinal: u64 = self.max_ordinal_present();
10527            encoder.write_num(max_ordinal, offset);
10528            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10529            // Calling encoder.out_of_line_offset(0) is not allowed.
10530            if max_ordinal == 0 {
10531                return Ok(());
10532            }
10533            depth.increment()?;
10534            let envelope_size = 8;
10535            let bytes_len = max_ordinal as usize * envelope_size;
10536            #[allow(unused_variables)]
10537            let offset = encoder.out_of_line_offset(bytes_len);
10538            let mut _prev_end_offset: usize = 0;
10539            if 3 > max_ordinal {
10540                return Ok(());
10541            }
10542
10543            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10544            // are envelope_size bytes.
10545            let cur_offset: usize = (3 - 1) * envelope_size;
10546
10547            // Zero reserved fields.
10548            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10549
10550            // Safety:
10551            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10552            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10553            //   envelope_size bytes, there is always sufficient room.
10554            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10555                self.needs_cache_flush_or_invalidate
10556                    .as_ref()
10557                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10558                encoder,
10559                offset + cur_offset,
10560                depth,
10561            )?;
10562
10563            _prev_end_offset = cur_offset + envelope_size;
10564            if 4 > max_ordinal {
10565                return Ok(());
10566            }
10567
10568            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10569            // are envelope_size bytes.
10570            let cur_offset: usize = (4 - 1) * envelope_size;
10571
10572            // Zero reserved fields.
10573            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10574
10575            // Safety:
10576            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10577            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10578            //   envelope_size bytes, there is always sufficient room.
10579            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10580                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10581                encoder,
10582                offset + cur_offset,
10583                depth,
10584            )?;
10585
10586            _prev_end_offset = cur_offset + envelope_size;
10587            if 5 > max_ordinal {
10588                return Ok(());
10589            }
10590
10591            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10592            // are envelope_size bytes.
10593            let cur_offset: usize = (5 - 1) * envelope_size;
10594
10595            // Zero reserved fields.
10596            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10597
10598            // Safety:
10599            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10600            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10601            //   envelope_size bytes, there is always sufficient room.
10602            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10603                self.driver_transfer_bytes
10604                    .as_ref()
10605                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10606                encoder,
10607                offset + cur_offset,
10608                depth,
10609            )?;
10610
10611            _prev_end_offset = cur_offset + envelope_size;
10612
10613            Ok(())
10614        }
10615    }
10616
10617    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferProperties {
10618        #[inline(always)]
10619        fn new_empty() -> Self {
10620            Self::default()
10621        }
10622
10623        unsafe fn decode(
10624            &mut self,
10625            decoder: &mut fidl::encoding::Decoder<'_, D>,
10626            offset: usize,
10627            mut depth: fidl::encoding::Depth,
10628        ) -> fidl::Result<()> {
10629            decoder.debug_check_bounds::<Self>(offset);
10630            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10631                None => return Err(fidl::Error::NotNullable),
10632                Some(len) => len,
10633            };
10634            // Calling decoder.out_of_line_offset(0) is not allowed.
10635            if len == 0 {
10636                return Ok(());
10637            };
10638            depth.increment()?;
10639            let envelope_size = 8;
10640            let bytes_len = len * envelope_size;
10641            let offset = decoder.out_of_line_offset(bytes_len)?;
10642            // Decode the envelope for each type.
10643            let mut _next_ordinal_to_read = 0;
10644            let mut next_offset = offset;
10645            let end_offset = offset + bytes_len;
10646            _next_ordinal_to_read += 1;
10647            if next_offset >= end_offset {
10648                return Ok(());
10649            }
10650
10651            // Decode unknown envelopes for gaps in ordinals.
10652            while _next_ordinal_to_read < 3 {
10653                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10654                _next_ordinal_to_read += 1;
10655                next_offset += envelope_size;
10656            }
10657
10658            let next_out_of_line = decoder.next_out_of_line();
10659            let handles_before = decoder.remaining_handles();
10660            if let Some((inlined, num_bytes, num_handles)) =
10661                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10662            {
10663                let member_inline_size =
10664                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10665                if inlined != (member_inline_size <= 4) {
10666                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10667                }
10668                let inner_offset;
10669                let mut inner_depth = depth.clone();
10670                if inlined {
10671                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10672                    inner_offset = next_offset;
10673                } else {
10674                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10675                    inner_depth.increment()?;
10676                }
10677                let val_ref = self
10678                    .needs_cache_flush_or_invalidate
10679                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10680                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10681                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10682                {
10683                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10684                }
10685                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10686                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10687                }
10688            }
10689
10690            next_offset += envelope_size;
10691            _next_ordinal_to_read += 1;
10692            if next_offset >= end_offset {
10693                return Ok(());
10694            }
10695
10696            // Decode unknown envelopes for gaps in ordinals.
10697            while _next_ordinal_to_read < 4 {
10698                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10699                _next_ordinal_to_read += 1;
10700                next_offset += envelope_size;
10701            }
10702
10703            let next_out_of_line = decoder.next_out_of_line();
10704            let handles_before = decoder.remaining_handles();
10705            if let Some((inlined, num_bytes, num_handles)) =
10706                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10707            {
10708                let member_inline_size =
10709                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10710                if inlined != (member_inline_size <= 4) {
10711                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10712                }
10713                let inner_offset;
10714                let mut inner_depth = depth.clone();
10715                if inlined {
10716                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10717                    inner_offset = next_offset;
10718                } else {
10719                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10720                    inner_depth.increment()?;
10721                }
10722                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
10723                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10724                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10725                {
10726                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10727                }
10728                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10729                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10730                }
10731            }
10732
10733            next_offset += envelope_size;
10734            _next_ordinal_to_read += 1;
10735            if next_offset >= end_offset {
10736                return Ok(());
10737            }
10738
10739            // Decode unknown envelopes for gaps in ordinals.
10740            while _next_ordinal_to_read < 5 {
10741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10742                _next_ordinal_to_read += 1;
10743                next_offset += envelope_size;
10744            }
10745
10746            let next_out_of_line = decoder.next_out_of_line();
10747            let handles_before = decoder.remaining_handles();
10748            if let Some((inlined, num_bytes, num_handles)) =
10749                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10750            {
10751                let member_inline_size =
10752                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10753                if inlined != (member_inline_size <= 4) {
10754                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10755                }
10756                let inner_offset;
10757                let mut inner_depth = depth.clone();
10758                if inlined {
10759                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10760                    inner_offset = next_offset;
10761                } else {
10762                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10763                    inner_depth.increment()?;
10764                }
10765                let val_ref =
10766                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
10767                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
10768                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10769                {
10770                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10771                }
10772                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10773                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10774                }
10775            }
10776
10777            next_offset += envelope_size;
10778
10779            // Decode the remaining unknown envelopes.
10780            while next_offset < end_offset {
10781                _next_ordinal_to_read += 1;
10782                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10783                next_offset += envelope_size;
10784            }
10785
10786            Ok(())
10787        }
10788    }
10789
10790    impl StreamProperties {
10791        #[inline(always)]
10792        fn max_ordinal_present(&self) -> u64 {
10793            if let Some(_) = self.clock_domain {
10794                return 11;
10795            }
10796            if let Some(_) = self.product {
10797                return 10;
10798            }
10799            if let Some(_) = self.manufacturer {
10800                return 9;
10801            }
10802            if let Some(_) = self.plug_detect_capabilities {
10803                return 8;
10804            }
10805            if let Some(_) = self.gain_step_db {
10806                return 7;
10807            }
10808            if let Some(_) = self.max_gain_db {
10809                return 6;
10810            }
10811            if let Some(_) = self.min_gain_db {
10812                return 5;
10813            }
10814            if let Some(_) = self.can_agc {
10815                return 4;
10816            }
10817            if let Some(_) = self.can_mute {
10818                return 3;
10819            }
10820            if let Some(_) = self.is_input {
10821                return 2;
10822            }
10823            if let Some(_) = self.unique_id {
10824                return 1;
10825            }
10826            0
10827        }
10828    }
10829
10830    impl fidl::encoding::ValueTypeMarker for StreamProperties {
10831        type Borrowed<'a> = &'a Self;
10832        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10833            value
10834        }
10835    }
10836
10837    unsafe impl fidl::encoding::TypeMarker for StreamProperties {
10838        type Owned = Self;
10839
10840        #[inline(always)]
10841        fn inline_align(_context: fidl::encoding::Context) -> usize {
10842            8
10843        }
10844
10845        #[inline(always)]
10846        fn inline_size(_context: fidl::encoding::Context) -> usize {
10847            16
10848        }
10849    }
10850
10851    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamProperties, D>
10852        for &StreamProperties
10853    {
10854        unsafe fn encode(
10855            self,
10856            encoder: &mut fidl::encoding::Encoder<'_, D>,
10857            offset: usize,
10858            mut depth: fidl::encoding::Depth,
10859        ) -> fidl::Result<()> {
10860            encoder.debug_check_bounds::<StreamProperties>(offset);
10861            // Vector header
10862            let max_ordinal: u64 = self.max_ordinal_present();
10863            encoder.write_num(max_ordinal, offset);
10864            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10865            // Calling encoder.out_of_line_offset(0) is not allowed.
10866            if max_ordinal == 0 {
10867                return Ok(());
10868            }
10869            depth.increment()?;
10870            let envelope_size = 8;
10871            let bytes_len = max_ordinal as usize * envelope_size;
10872            #[allow(unused_variables)]
10873            let offset = encoder.out_of_line_offset(bytes_len);
10874            let mut _prev_end_offset: usize = 0;
10875            if 1 > max_ordinal {
10876                return Ok(());
10877            }
10878
10879            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10880            // are envelope_size bytes.
10881            let cur_offset: usize = (1 - 1) * envelope_size;
10882
10883            // Zero reserved fields.
10884            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10885
10886            // Safety:
10887            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10888            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10889            //   envelope_size bytes, there is always sufficient room.
10890            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
10891                self.unique_id.as_ref().map(
10892                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
10893                ),
10894                encoder,
10895                offset + cur_offset,
10896                depth,
10897            )?;
10898
10899            _prev_end_offset = cur_offset + envelope_size;
10900            if 2 > max_ordinal {
10901                return Ok(());
10902            }
10903
10904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10905            // are envelope_size bytes.
10906            let cur_offset: usize = (2 - 1) * envelope_size;
10907
10908            // Zero reserved fields.
10909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10910
10911            // Safety:
10912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10914            //   envelope_size bytes, there is always sufficient room.
10915            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10916                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10917                encoder,
10918                offset + cur_offset,
10919                depth,
10920            )?;
10921
10922            _prev_end_offset = cur_offset + envelope_size;
10923            if 3 > max_ordinal {
10924                return Ok(());
10925            }
10926
10927            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10928            // are envelope_size bytes.
10929            let cur_offset: usize = (3 - 1) * envelope_size;
10930
10931            // Zero reserved fields.
10932            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10933
10934            // Safety:
10935            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10936            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10937            //   envelope_size bytes, there is always sufficient room.
10938            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10939                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10940                encoder,
10941                offset + cur_offset,
10942                depth,
10943            )?;
10944
10945            _prev_end_offset = cur_offset + envelope_size;
10946            if 4 > max_ordinal {
10947                return Ok(());
10948            }
10949
10950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10951            // are envelope_size bytes.
10952            let cur_offset: usize = (4 - 1) * envelope_size;
10953
10954            // Zero reserved fields.
10955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10956
10957            // Safety:
10958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10960            //   envelope_size bytes, there is always sufficient room.
10961            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10962                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10963                encoder,
10964                offset + cur_offset,
10965                depth,
10966            )?;
10967
10968            _prev_end_offset = cur_offset + envelope_size;
10969            if 5 > max_ordinal {
10970                return Ok(());
10971            }
10972
10973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10974            // are envelope_size bytes.
10975            let cur_offset: usize = (5 - 1) * envelope_size;
10976
10977            // Zero reserved fields.
10978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10979
10980            // Safety:
10981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10983            //   envelope_size bytes, there is always sufficient room.
10984            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10985                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10986                encoder,
10987                offset + cur_offset,
10988                depth,
10989            )?;
10990
10991            _prev_end_offset = cur_offset + envelope_size;
10992            if 6 > max_ordinal {
10993                return Ok(());
10994            }
10995
10996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10997            // are envelope_size bytes.
10998            let cur_offset: usize = (6 - 1) * envelope_size;
10999
11000            // Zero reserved fields.
11001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11002
11003            // Safety:
11004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11006            //   envelope_size bytes, there is always sufficient room.
11007            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11008                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11009                encoder,
11010                offset + cur_offset,
11011                depth,
11012            )?;
11013
11014            _prev_end_offset = cur_offset + envelope_size;
11015            if 7 > max_ordinal {
11016                return Ok(());
11017            }
11018
11019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11020            // are envelope_size bytes.
11021            let cur_offset: usize = (7 - 1) * envelope_size;
11022
11023            // Zero reserved fields.
11024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11025
11026            // Safety:
11027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11029            //   envelope_size bytes, there is always sufficient room.
11030            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11031                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11032                encoder,
11033                offset + cur_offset,
11034                depth,
11035            )?;
11036
11037            _prev_end_offset = cur_offset + envelope_size;
11038            if 8 > max_ordinal {
11039                return Ok(());
11040            }
11041
11042            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11043            // are envelope_size bytes.
11044            let cur_offset: usize = (8 - 1) * envelope_size;
11045
11046            // Zero reserved fields.
11047            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11048
11049            // Safety:
11050            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11051            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11052            //   envelope_size bytes, there is always sufficient room.
11053            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
11054                self.plug_detect_capabilities
11055                    .as_ref()
11056                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
11057                encoder,
11058                offset + cur_offset,
11059                depth,
11060            )?;
11061
11062            _prev_end_offset = cur_offset + envelope_size;
11063            if 9 > max_ordinal {
11064                return Ok(());
11065            }
11066
11067            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11068            // are envelope_size bytes.
11069            let cur_offset: usize = (9 - 1) * envelope_size;
11070
11071            // Zero reserved fields.
11072            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11073
11074            // Safety:
11075            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11076            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11077            //   envelope_size bytes, there is always sufficient room.
11078            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11079                self.manufacturer.as_ref().map(
11080                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11081                ),
11082                encoder,
11083                offset + cur_offset,
11084                depth,
11085            )?;
11086
11087            _prev_end_offset = cur_offset + envelope_size;
11088            if 10 > max_ordinal {
11089                return Ok(());
11090            }
11091
11092            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11093            // are envelope_size bytes.
11094            let cur_offset: usize = (10 - 1) * envelope_size;
11095
11096            // Zero reserved fields.
11097            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11098
11099            // Safety:
11100            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11101            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11102            //   envelope_size bytes, there is always sufficient room.
11103            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11104                self.product.as_ref().map(
11105                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11106                ),
11107                encoder,
11108                offset + cur_offset,
11109                depth,
11110            )?;
11111
11112            _prev_end_offset = cur_offset + envelope_size;
11113            if 11 > max_ordinal {
11114                return Ok(());
11115            }
11116
11117            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11118            // are envelope_size bytes.
11119            let cur_offset: usize = (11 - 1) * envelope_size;
11120
11121            // Zero reserved fields.
11122            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11123
11124            // Safety:
11125            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11126            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11127            //   envelope_size bytes, there is always sufficient room.
11128            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11129                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11130                encoder,
11131                offset + cur_offset,
11132                depth,
11133            )?;
11134
11135            _prev_end_offset = cur_offset + envelope_size;
11136
11137            Ok(())
11138        }
11139    }
11140
11141    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamProperties {
11142        #[inline(always)]
11143        fn new_empty() -> Self {
11144            Self::default()
11145        }
11146
11147        unsafe fn decode(
11148            &mut self,
11149            decoder: &mut fidl::encoding::Decoder<'_, D>,
11150            offset: usize,
11151            mut depth: fidl::encoding::Depth,
11152        ) -> fidl::Result<()> {
11153            decoder.debug_check_bounds::<Self>(offset);
11154            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11155                None => return Err(fidl::Error::NotNullable),
11156                Some(len) => len,
11157            };
11158            // Calling decoder.out_of_line_offset(0) is not allowed.
11159            if len == 0 {
11160                return Ok(());
11161            };
11162            depth.increment()?;
11163            let envelope_size = 8;
11164            let bytes_len = len * envelope_size;
11165            let offset = decoder.out_of_line_offset(bytes_len)?;
11166            // Decode the envelope for each type.
11167            let mut _next_ordinal_to_read = 0;
11168            let mut next_offset = offset;
11169            let end_offset = offset + bytes_len;
11170            _next_ordinal_to_read += 1;
11171            if next_offset >= end_offset {
11172                return Ok(());
11173            }
11174
11175            // Decode unknown envelopes for gaps in ordinals.
11176            while _next_ordinal_to_read < 1 {
11177                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11178                _next_ordinal_to_read += 1;
11179                next_offset += envelope_size;
11180            }
11181
11182            let next_out_of_line = decoder.next_out_of_line();
11183            let handles_before = decoder.remaining_handles();
11184            if let Some((inlined, num_bytes, num_handles)) =
11185                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11186            {
11187                let member_inline_size =
11188                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
11189                        decoder.context,
11190                    );
11191                if inlined != (member_inline_size <= 4) {
11192                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11193                }
11194                let inner_offset;
11195                let mut inner_depth = depth.clone();
11196                if inlined {
11197                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11198                    inner_offset = next_offset;
11199                } else {
11200                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11201                    inner_depth.increment()?;
11202                }
11203                let val_ref = self
11204                    .unique_id
11205                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
11206                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
11207                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11208                {
11209                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11210                }
11211                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11212                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11213                }
11214            }
11215
11216            next_offset += envelope_size;
11217            _next_ordinal_to_read += 1;
11218            if next_offset >= end_offset {
11219                return Ok(());
11220            }
11221
11222            // Decode unknown envelopes for gaps in ordinals.
11223            while _next_ordinal_to_read < 2 {
11224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11225                _next_ordinal_to_read += 1;
11226                next_offset += envelope_size;
11227            }
11228
11229            let next_out_of_line = decoder.next_out_of_line();
11230            let handles_before = decoder.remaining_handles();
11231            if let Some((inlined, num_bytes, num_handles)) =
11232                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11233            {
11234                let member_inline_size =
11235                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11236                if inlined != (member_inline_size <= 4) {
11237                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11238                }
11239                let inner_offset;
11240                let mut inner_depth = depth.clone();
11241                if inlined {
11242                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11243                    inner_offset = next_offset;
11244                } else {
11245                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11246                    inner_depth.increment()?;
11247                }
11248                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
11249                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11250                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11251                {
11252                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11253                }
11254                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11255                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11256                }
11257            }
11258
11259            next_offset += envelope_size;
11260            _next_ordinal_to_read += 1;
11261            if next_offset >= end_offset {
11262                return Ok(());
11263            }
11264
11265            // Decode unknown envelopes for gaps in ordinals.
11266            while _next_ordinal_to_read < 3 {
11267                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11268                _next_ordinal_to_read += 1;
11269                next_offset += envelope_size;
11270            }
11271
11272            let next_out_of_line = decoder.next_out_of_line();
11273            let handles_before = decoder.remaining_handles();
11274            if let Some((inlined, num_bytes, num_handles)) =
11275                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11276            {
11277                let member_inline_size =
11278                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11279                if inlined != (member_inline_size <= 4) {
11280                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11281                }
11282                let inner_offset;
11283                let mut inner_depth = depth.clone();
11284                if inlined {
11285                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11286                    inner_offset = next_offset;
11287                } else {
11288                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11289                    inner_depth.increment()?;
11290                }
11291                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
11292                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11293                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11294                {
11295                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11296                }
11297                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11298                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11299                }
11300            }
11301
11302            next_offset += envelope_size;
11303            _next_ordinal_to_read += 1;
11304            if next_offset >= end_offset {
11305                return Ok(());
11306            }
11307
11308            // Decode unknown envelopes for gaps in ordinals.
11309            while _next_ordinal_to_read < 4 {
11310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11311                _next_ordinal_to_read += 1;
11312                next_offset += envelope_size;
11313            }
11314
11315            let next_out_of_line = decoder.next_out_of_line();
11316            let handles_before = decoder.remaining_handles();
11317            if let Some((inlined, num_bytes, num_handles)) =
11318                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11319            {
11320                let member_inline_size =
11321                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11322                if inlined != (member_inline_size <= 4) {
11323                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11324                }
11325                let inner_offset;
11326                let mut inner_depth = depth.clone();
11327                if inlined {
11328                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11329                    inner_offset = next_offset;
11330                } else {
11331                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11332                    inner_depth.increment()?;
11333                }
11334                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
11335                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11336                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11337                {
11338                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11339                }
11340                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11341                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11342                }
11343            }
11344
11345            next_offset += envelope_size;
11346            _next_ordinal_to_read += 1;
11347            if next_offset >= end_offset {
11348                return Ok(());
11349            }
11350
11351            // Decode unknown envelopes for gaps in ordinals.
11352            while _next_ordinal_to_read < 5 {
11353                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11354                _next_ordinal_to_read += 1;
11355                next_offset += envelope_size;
11356            }
11357
11358            let next_out_of_line = decoder.next_out_of_line();
11359            let handles_before = decoder.remaining_handles();
11360            if let Some((inlined, num_bytes, num_handles)) =
11361                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11362            {
11363                let member_inline_size =
11364                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11365                if inlined != (member_inline_size <= 4) {
11366                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11367                }
11368                let inner_offset;
11369                let mut inner_depth = depth.clone();
11370                if inlined {
11371                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11372                    inner_offset = next_offset;
11373                } else {
11374                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11375                    inner_depth.increment()?;
11376                }
11377                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11378                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11379                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11380                {
11381                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11382                }
11383                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11384                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11385                }
11386            }
11387
11388            next_offset += envelope_size;
11389            _next_ordinal_to_read += 1;
11390            if next_offset >= end_offset {
11391                return Ok(());
11392            }
11393
11394            // Decode unknown envelopes for gaps in ordinals.
11395            while _next_ordinal_to_read < 6 {
11396                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11397                _next_ordinal_to_read += 1;
11398                next_offset += envelope_size;
11399            }
11400
11401            let next_out_of_line = decoder.next_out_of_line();
11402            let handles_before = decoder.remaining_handles();
11403            if let Some((inlined, num_bytes, num_handles)) =
11404                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11405            {
11406                let member_inline_size =
11407                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11408                if inlined != (member_inline_size <= 4) {
11409                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11410                }
11411                let inner_offset;
11412                let mut inner_depth = depth.clone();
11413                if inlined {
11414                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11415                    inner_offset = next_offset;
11416                } else {
11417                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11418                    inner_depth.increment()?;
11419                }
11420                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11421                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11422                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11423                {
11424                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11425                }
11426                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11427                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11428                }
11429            }
11430
11431            next_offset += envelope_size;
11432            _next_ordinal_to_read += 1;
11433            if next_offset >= end_offset {
11434                return Ok(());
11435            }
11436
11437            // Decode unknown envelopes for gaps in ordinals.
11438            while _next_ordinal_to_read < 7 {
11439                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11440                _next_ordinal_to_read += 1;
11441                next_offset += envelope_size;
11442            }
11443
11444            let next_out_of_line = decoder.next_out_of_line();
11445            let handles_before = decoder.remaining_handles();
11446            if let Some((inlined, num_bytes, num_handles)) =
11447                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11448            {
11449                let member_inline_size =
11450                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11451                if inlined != (member_inline_size <= 4) {
11452                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11453                }
11454                let inner_offset;
11455                let mut inner_depth = depth.clone();
11456                if inlined {
11457                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11458                    inner_offset = next_offset;
11459                } else {
11460                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11461                    inner_depth.increment()?;
11462                }
11463                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11464                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11465                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11466                {
11467                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11468                }
11469                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11470                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11471                }
11472            }
11473
11474            next_offset += envelope_size;
11475            _next_ordinal_to_read += 1;
11476            if next_offset >= end_offset {
11477                return Ok(());
11478            }
11479
11480            // Decode unknown envelopes for gaps in ordinals.
11481            while _next_ordinal_to_read < 8 {
11482                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11483                _next_ordinal_to_read += 1;
11484                next_offset += envelope_size;
11485            }
11486
11487            let next_out_of_line = decoder.next_out_of_line();
11488            let handles_before = decoder.remaining_handles();
11489            if let Some((inlined, num_bytes, num_handles)) =
11490                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11491            {
11492                let member_inline_size =
11493                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
11494                        decoder.context,
11495                    );
11496                if inlined != (member_inline_size <= 4) {
11497                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11498                }
11499                let inner_offset;
11500                let mut inner_depth = depth.clone();
11501                if inlined {
11502                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11503                    inner_offset = next_offset;
11504                } else {
11505                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11506                    inner_depth.increment()?;
11507                }
11508                let val_ref = self
11509                    .plug_detect_capabilities
11510                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
11511                fidl::decode!(
11512                    PlugDetectCapabilities,
11513                    D,
11514                    val_ref,
11515                    decoder,
11516                    inner_offset,
11517                    inner_depth
11518                )?;
11519                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11520                {
11521                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11522                }
11523                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11524                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11525                }
11526            }
11527
11528            next_offset += envelope_size;
11529            _next_ordinal_to_read += 1;
11530            if next_offset >= end_offset {
11531                return Ok(());
11532            }
11533
11534            // Decode unknown envelopes for gaps in ordinals.
11535            while _next_ordinal_to_read < 9 {
11536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11537                _next_ordinal_to_read += 1;
11538                next_offset += envelope_size;
11539            }
11540
11541            let next_out_of_line = decoder.next_out_of_line();
11542            let handles_before = decoder.remaining_handles();
11543            if let Some((inlined, num_bytes, num_handles)) =
11544                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11545            {
11546                let member_inline_size =
11547                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11548                        decoder.context,
11549                    );
11550                if inlined != (member_inline_size <= 4) {
11551                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11552                }
11553                let inner_offset;
11554                let mut inner_depth = depth.clone();
11555                if inlined {
11556                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11557                    inner_offset = next_offset;
11558                } else {
11559                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11560                    inner_depth.increment()?;
11561                }
11562                let val_ref = self
11563                    .manufacturer
11564                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11565                fidl::decode!(
11566                    fidl::encoding::BoundedString<256>,
11567                    D,
11568                    val_ref,
11569                    decoder,
11570                    inner_offset,
11571                    inner_depth
11572                )?;
11573                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11574                {
11575                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11576                }
11577                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11578                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11579                }
11580            }
11581
11582            next_offset += envelope_size;
11583            _next_ordinal_to_read += 1;
11584            if next_offset >= end_offset {
11585                return Ok(());
11586            }
11587
11588            // Decode unknown envelopes for gaps in ordinals.
11589            while _next_ordinal_to_read < 10 {
11590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11591                _next_ordinal_to_read += 1;
11592                next_offset += envelope_size;
11593            }
11594
11595            let next_out_of_line = decoder.next_out_of_line();
11596            let handles_before = decoder.remaining_handles();
11597            if let Some((inlined, num_bytes, num_handles)) =
11598                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11599            {
11600                let member_inline_size =
11601                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11602                        decoder.context,
11603                    );
11604                if inlined != (member_inline_size <= 4) {
11605                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11606                }
11607                let inner_offset;
11608                let mut inner_depth = depth.clone();
11609                if inlined {
11610                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11611                    inner_offset = next_offset;
11612                } else {
11613                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11614                    inner_depth.increment()?;
11615                }
11616                let val_ref = self
11617                    .product
11618                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11619                fidl::decode!(
11620                    fidl::encoding::BoundedString<256>,
11621                    D,
11622                    val_ref,
11623                    decoder,
11624                    inner_offset,
11625                    inner_depth
11626                )?;
11627                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11628                {
11629                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11630                }
11631                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11632                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11633                }
11634            }
11635
11636            next_offset += envelope_size;
11637            _next_ordinal_to_read += 1;
11638            if next_offset >= end_offset {
11639                return Ok(());
11640            }
11641
11642            // Decode unknown envelopes for gaps in ordinals.
11643            while _next_ordinal_to_read < 11 {
11644                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11645                _next_ordinal_to_read += 1;
11646                next_offset += envelope_size;
11647            }
11648
11649            let next_out_of_line = decoder.next_out_of_line();
11650            let handles_before = decoder.remaining_handles();
11651            if let Some((inlined, num_bytes, num_handles)) =
11652                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11653            {
11654                let member_inline_size =
11655                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11656                if inlined != (member_inline_size <= 4) {
11657                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11658                }
11659                let inner_offset;
11660                let mut inner_depth = depth.clone();
11661                if inlined {
11662                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11663                    inner_offset = next_offset;
11664                } else {
11665                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11666                    inner_depth.increment()?;
11667                }
11668                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
11669                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11670                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11671                {
11672                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11673                }
11674                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11675                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11676                }
11677            }
11678
11679            next_offset += envelope_size;
11680
11681            // Decode the remaining unknown envelopes.
11682            while next_offset < end_offset {
11683                _next_ordinal_to_read += 1;
11684                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11685                next_offset += envelope_size;
11686            }
11687
11688            Ok(())
11689        }
11690    }
11691
11692    impl SupportedEncodings {
11693        #[inline(always)]
11694        fn max_ordinal_present(&self) -> u64 {
11695            if let Some(_) = self.encoding_types {
11696                return 5;
11697            }
11698            if let Some(_) = self.max_encoding_bitrate {
11699                return 4;
11700            }
11701            if let Some(_) = self.min_encoding_bitrate {
11702                return 3;
11703            }
11704            if let Some(_) = self.decoded_frame_rates {
11705                return 2;
11706            }
11707            if let Some(_) = self.decoded_channel_sets {
11708                return 1;
11709            }
11710            0
11711        }
11712    }
11713
11714    impl fidl::encoding::ValueTypeMarker for SupportedEncodings {
11715        type Borrowed<'a> = &'a Self;
11716        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11717            value
11718        }
11719    }
11720
11721    unsafe impl fidl::encoding::TypeMarker for SupportedEncodings {
11722        type Owned = Self;
11723
11724        #[inline(always)]
11725        fn inline_align(_context: fidl::encoding::Context) -> usize {
11726            8
11727        }
11728
11729        #[inline(always)]
11730        fn inline_size(_context: fidl::encoding::Context) -> usize {
11731            16
11732        }
11733    }
11734
11735    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedEncodings, D>
11736        for &SupportedEncodings
11737    {
11738        unsafe fn encode(
11739            self,
11740            encoder: &mut fidl::encoding::Encoder<'_, D>,
11741            offset: usize,
11742            mut depth: fidl::encoding::Depth,
11743        ) -> fidl::Result<()> {
11744            encoder.debug_check_bounds::<SupportedEncodings>(offset);
11745            // Vector header
11746            let max_ordinal: u64 = self.max_ordinal_present();
11747            encoder.write_num(max_ordinal, offset);
11748            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11749            // Calling encoder.out_of_line_offset(0) is not allowed.
11750            if max_ordinal == 0 {
11751                return Ok(());
11752            }
11753            depth.increment()?;
11754            let envelope_size = 8;
11755            let bytes_len = max_ordinal as usize * envelope_size;
11756            #[allow(unused_variables)]
11757            let offset = encoder.out_of_line_offset(bytes_len);
11758            let mut _prev_end_offset: usize = 0;
11759            if 1 > max_ordinal {
11760                return Ok(());
11761            }
11762
11763            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11764            // are envelope_size bytes.
11765            let cur_offset: usize = (1 - 1) * envelope_size;
11766
11767            // Zero reserved fields.
11768            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11769
11770            // Safety:
11771            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11772            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11773            //   envelope_size bytes, there is always sufficient room.
11774            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
11775            self.decoded_channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11776            encoder, offset + cur_offset, depth
11777        )?;
11778
11779            _prev_end_offset = cur_offset + envelope_size;
11780            if 2 > max_ordinal {
11781                return Ok(());
11782            }
11783
11784            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11785            // are envelope_size bytes.
11786            let cur_offset: usize = (2 - 1) * envelope_size;
11787
11788            // Zero reserved fields.
11789            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11790
11791            // Safety:
11792            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11793            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11794            //   envelope_size bytes, there is always sufficient room.
11795            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
11796                self.decoded_frame_rates.as_ref().map(
11797                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
11798                ),
11799                encoder,
11800                offset + cur_offset,
11801                depth,
11802            )?;
11803
11804            _prev_end_offset = cur_offset + envelope_size;
11805            if 3 > max_ordinal {
11806                return Ok(());
11807            }
11808
11809            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11810            // are envelope_size bytes.
11811            let cur_offset: usize = (3 - 1) * envelope_size;
11812
11813            // Zero reserved fields.
11814            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11815
11816            // Safety:
11817            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11818            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11819            //   envelope_size bytes, there is always sufficient room.
11820            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11821                self.min_encoding_bitrate
11822                    .as_ref()
11823                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11824                encoder,
11825                offset + cur_offset,
11826                depth,
11827            )?;
11828
11829            _prev_end_offset = cur_offset + envelope_size;
11830            if 4 > max_ordinal {
11831                return Ok(());
11832            }
11833
11834            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11835            // are envelope_size bytes.
11836            let cur_offset: usize = (4 - 1) * envelope_size;
11837
11838            // Zero reserved fields.
11839            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11840
11841            // Safety:
11842            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11843            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11844            //   envelope_size bytes, there is always sufficient room.
11845            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11846                self.max_encoding_bitrate
11847                    .as_ref()
11848                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11849                encoder,
11850                offset + cur_offset,
11851                depth,
11852            )?;
11853
11854            _prev_end_offset = cur_offset + envelope_size;
11855            if 5 > max_ordinal {
11856                return Ok(());
11857            }
11858
11859            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11860            // are envelope_size bytes.
11861            let cur_offset: usize = (5 - 1) * envelope_size;
11862
11863            // Zero reserved fields.
11864            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11865
11866            // Safety:
11867            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11868            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11869            //   envelope_size bytes, there is always sufficient room.
11870            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EncodingType, 64>, D>(
11871            self.encoding_types.as_ref().map(<fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11872            encoder, offset + cur_offset, depth
11873        )?;
11874
11875            _prev_end_offset = cur_offset + envelope_size;
11876
11877            Ok(())
11878        }
11879    }
11880
11881    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedEncodings {
11882        #[inline(always)]
11883        fn new_empty() -> Self {
11884            Self::default()
11885        }
11886
11887        unsafe fn decode(
11888            &mut self,
11889            decoder: &mut fidl::encoding::Decoder<'_, D>,
11890            offset: usize,
11891            mut depth: fidl::encoding::Depth,
11892        ) -> fidl::Result<()> {
11893            decoder.debug_check_bounds::<Self>(offset);
11894            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11895                None => return Err(fidl::Error::NotNullable),
11896                Some(len) => len,
11897            };
11898            // Calling decoder.out_of_line_offset(0) is not allowed.
11899            if len == 0 {
11900                return Ok(());
11901            };
11902            depth.increment()?;
11903            let envelope_size = 8;
11904            let bytes_len = len * envelope_size;
11905            let offset = decoder.out_of_line_offset(bytes_len)?;
11906            // Decode the envelope for each type.
11907            let mut _next_ordinal_to_read = 0;
11908            let mut next_offset = offset;
11909            let end_offset = offset + bytes_len;
11910            _next_ordinal_to_read += 1;
11911            if next_offset >= end_offset {
11912                return Ok(());
11913            }
11914
11915            // Decode unknown envelopes for gaps in ordinals.
11916            while _next_ordinal_to_read < 1 {
11917                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11918                _next_ordinal_to_read += 1;
11919                next_offset += envelope_size;
11920            }
11921
11922            let next_out_of_line = decoder.next_out_of_line();
11923            let handles_before = decoder.remaining_handles();
11924            if let Some((inlined, num_bytes, num_handles)) =
11925                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11926            {
11927                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11928                if inlined != (member_inline_size <= 4) {
11929                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11930                }
11931                let inner_offset;
11932                let mut inner_depth = depth.clone();
11933                if inlined {
11934                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11935                    inner_offset = next_offset;
11936                } else {
11937                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11938                    inner_depth.increment()?;
11939                }
11940                let val_ref = self.decoded_channel_sets.get_or_insert_with(
11941                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
11942                );
11943                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11944                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11945                {
11946                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11947                }
11948                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11949                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11950                }
11951            }
11952
11953            next_offset += envelope_size;
11954            _next_ordinal_to_read += 1;
11955            if next_offset >= end_offset {
11956                return Ok(());
11957            }
11958
11959            // Decode unknown envelopes for gaps in ordinals.
11960            while _next_ordinal_to_read < 2 {
11961                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11962                _next_ordinal_to_read += 1;
11963                next_offset += envelope_size;
11964            }
11965
11966            let next_out_of_line = decoder.next_out_of_line();
11967            let handles_before = decoder.remaining_handles();
11968            if let Some((inlined, num_bytes, num_handles)) =
11969                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11970            {
11971                let member_inline_size =
11972                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
11973                        decoder.context,
11974                    );
11975                if inlined != (member_inline_size <= 4) {
11976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11977                }
11978                let inner_offset;
11979                let mut inner_depth = depth.clone();
11980                if inlined {
11981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11982                    inner_offset = next_offset;
11983                } else {
11984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11985                    inner_depth.increment()?;
11986                }
11987                let val_ref = self
11988                    .decoded_frame_rates
11989                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
11990                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11991                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11992                {
11993                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11994                }
11995                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11996                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11997                }
11998            }
11999
12000            next_offset += envelope_size;
12001            _next_ordinal_to_read += 1;
12002            if next_offset >= end_offset {
12003                return Ok(());
12004            }
12005
12006            // Decode unknown envelopes for gaps in ordinals.
12007            while _next_ordinal_to_read < 3 {
12008                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12009                _next_ordinal_to_read += 1;
12010                next_offset += envelope_size;
12011            }
12012
12013            let next_out_of_line = decoder.next_out_of_line();
12014            let handles_before = decoder.remaining_handles();
12015            if let Some((inlined, num_bytes, num_handles)) =
12016                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12017            {
12018                let member_inline_size =
12019                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12020                if inlined != (member_inline_size <= 4) {
12021                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12022                }
12023                let inner_offset;
12024                let mut inner_depth = depth.clone();
12025                if inlined {
12026                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12027                    inner_offset = next_offset;
12028                } else {
12029                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12030                    inner_depth.increment()?;
12031                }
12032                let val_ref =
12033                    self.min_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12034                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12035                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12036                {
12037                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12038                }
12039                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12040                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12041                }
12042            }
12043
12044            next_offset += envelope_size;
12045            _next_ordinal_to_read += 1;
12046            if next_offset >= end_offset {
12047                return Ok(());
12048            }
12049
12050            // Decode unknown envelopes for gaps in ordinals.
12051            while _next_ordinal_to_read < 4 {
12052                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12053                _next_ordinal_to_read += 1;
12054                next_offset += envelope_size;
12055            }
12056
12057            let next_out_of_line = decoder.next_out_of_line();
12058            let handles_before = decoder.remaining_handles();
12059            if let Some((inlined, num_bytes, num_handles)) =
12060                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12061            {
12062                let member_inline_size =
12063                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12064                if inlined != (member_inline_size <= 4) {
12065                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12066                }
12067                let inner_offset;
12068                let mut inner_depth = depth.clone();
12069                if inlined {
12070                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12071                    inner_offset = next_offset;
12072                } else {
12073                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12074                    inner_depth.increment()?;
12075                }
12076                let val_ref =
12077                    self.max_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12078                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12079                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12080                {
12081                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12082                }
12083                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12084                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12085                }
12086            }
12087
12088            next_offset += envelope_size;
12089            _next_ordinal_to_read += 1;
12090            if next_offset >= end_offset {
12091                return Ok(());
12092            }
12093
12094            // Decode unknown envelopes for gaps in ordinals.
12095            while _next_ordinal_to_read < 5 {
12096                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12097                _next_ordinal_to_read += 1;
12098                next_offset += envelope_size;
12099            }
12100
12101            let next_out_of_line = decoder.next_out_of_line();
12102            let handles_before = decoder.remaining_handles();
12103            if let Some((inlined, num_bytes, num_handles)) =
12104                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12105            {
12106                let member_inline_size = <fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12107                if inlined != (member_inline_size <= 4) {
12108                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12109                }
12110                let inner_offset;
12111                let mut inner_depth = depth.clone();
12112                if inlined {
12113                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12114                    inner_offset = next_offset;
12115                } else {
12116                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12117                    inner_depth.increment()?;
12118                }
12119                let val_ref = self.encoding_types.get_or_insert_with(
12120                    || fidl::new_empty!(fidl::encoding::Vector<EncodingType, 64>, D),
12121                );
12122                fidl::decode!(fidl::encoding::Vector<EncodingType, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
12123                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12124                {
12125                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12126                }
12127                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12128                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12129                }
12130            }
12131
12132            next_offset += envelope_size;
12133
12134            // Decode the remaining unknown envelopes.
12135            while next_offset < end_offset {
12136                _next_ordinal_to_read += 1;
12137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12138                next_offset += envelope_size;
12139            }
12140
12141            Ok(())
12142        }
12143    }
12144
12145    impl SupportedFormats {
12146        #[inline(always)]
12147        fn max_ordinal_present(&self) -> u64 {
12148            if let Some(_) = self.pcm_supported_formats {
12149                return 1;
12150            }
12151            0
12152        }
12153    }
12154
12155    impl fidl::encoding::ValueTypeMarker for SupportedFormats {
12156        type Borrowed<'a> = &'a Self;
12157        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12158            value
12159        }
12160    }
12161
12162    unsafe impl fidl::encoding::TypeMarker for SupportedFormats {
12163        type Owned = Self;
12164
12165        #[inline(always)]
12166        fn inline_align(_context: fidl::encoding::Context) -> usize {
12167            8
12168        }
12169
12170        #[inline(always)]
12171        fn inline_size(_context: fidl::encoding::Context) -> usize {
12172            16
12173        }
12174    }
12175
12176    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats, D>
12177        for &SupportedFormats
12178    {
12179        unsafe fn encode(
12180            self,
12181            encoder: &mut fidl::encoding::Encoder<'_, D>,
12182            offset: usize,
12183            mut depth: fidl::encoding::Depth,
12184        ) -> fidl::Result<()> {
12185            encoder.debug_check_bounds::<SupportedFormats>(offset);
12186            // Vector header
12187            let max_ordinal: u64 = self.max_ordinal_present();
12188            encoder.write_num(max_ordinal, offset);
12189            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12190            // Calling encoder.out_of_line_offset(0) is not allowed.
12191            if max_ordinal == 0 {
12192                return Ok(());
12193            }
12194            depth.increment()?;
12195            let envelope_size = 8;
12196            let bytes_len = max_ordinal as usize * envelope_size;
12197            #[allow(unused_variables)]
12198            let offset = encoder.out_of_line_offset(bytes_len);
12199            let mut _prev_end_offset: usize = 0;
12200            if 1 > max_ordinal {
12201                return Ok(());
12202            }
12203
12204            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12205            // are envelope_size bytes.
12206            let cur_offset: usize = (1 - 1) * envelope_size;
12207
12208            // Zero reserved fields.
12209            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12210
12211            // Safety:
12212            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12213            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12214            //   envelope_size bytes, there is always sufficient room.
12215            fidl::encoding::encode_in_envelope_optional::<PcmSupportedFormats, D>(
12216                self.pcm_supported_formats
12217                    .as_ref()
12218                    .map(<PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow),
12219                encoder,
12220                offset + cur_offset,
12221                depth,
12222            )?;
12223
12224            _prev_end_offset = cur_offset + envelope_size;
12225
12226            Ok(())
12227        }
12228    }
12229
12230    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats {
12231        #[inline(always)]
12232        fn new_empty() -> Self {
12233            Self::default()
12234        }
12235
12236        unsafe fn decode(
12237            &mut self,
12238            decoder: &mut fidl::encoding::Decoder<'_, D>,
12239            offset: usize,
12240            mut depth: fidl::encoding::Depth,
12241        ) -> fidl::Result<()> {
12242            decoder.debug_check_bounds::<Self>(offset);
12243            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12244                None => return Err(fidl::Error::NotNullable),
12245                Some(len) => len,
12246            };
12247            // Calling decoder.out_of_line_offset(0) is not allowed.
12248            if len == 0 {
12249                return Ok(());
12250            };
12251            depth.increment()?;
12252            let envelope_size = 8;
12253            let bytes_len = len * envelope_size;
12254            let offset = decoder.out_of_line_offset(bytes_len)?;
12255            // Decode the envelope for each type.
12256            let mut _next_ordinal_to_read = 0;
12257            let mut next_offset = offset;
12258            let end_offset = offset + bytes_len;
12259            _next_ordinal_to_read += 1;
12260            if next_offset >= end_offset {
12261                return Ok(());
12262            }
12263
12264            // Decode unknown envelopes for gaps in ordinals.
12265            while _next_ordinal_to_read < 1 {
12266                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12267                _next_ordinal_to_read += 1;
12268                next_offset += envelope_size;
12269            }
12270
12271            let next_out_of_line = decoder.next_out_of_line();
12272            let handles_before = decoder.remaining_handles();
12273            if let Some((inlined, num_bytes, num_handles)) =
12274                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12275            {
12276                let member_inline_size =
12277                    <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12278                        decoder.context,
12279                    );
12280                if inlined != (member_inline_size <= 4) {
12281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12282                }
12283                let inner_offset;
12284                let mut inner_depth = depth.clone();
12285                if inlined {
12286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12287                    inner_offset = next_offset;
12288                } else {
12289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12290                    inner_depth.increment()?;
12291                }
12292                let val_ref = self
12293                    .pcm_supported_formats
12294                    .get_or_insert_with(|| fidl::new_empty!(PcmSupportedFormats, D));
12295                fidl::decode!(PcmSupportedFormats, D, val_ref, decoder, inner_offset, inner_depth)?;
12296                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12297                {
12298                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12299                }
12300                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12301                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12302                }
12303            }
12304
12305            next_offset += envelope_size;
12306
12307            // Decode the remaining unknown envelopes.
12308            while next_offset < end_offset {
12309                _next_ordinal_to_read += 1;
12310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12311                next_offset += envelope_size;
12312            }
12313
12314            Ok(())
12315        }
12316    }
12317
12318    impl fidl::encoding::ValueTypeMarker for DaiFrameFormat {
12319        type Borrowed<'a> = &'a Self;
12320        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12321            value
12322        }
12323    }
12324
12325    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormat {
12326        type Owned = Self;
12327
12328        #[inline(always)]
12329        fn inline_align(_context: fidl::encoding::Context) -> usize {
12330            8
12331        }
12332
12333        #[inline(always)]
12334        fn inline_size(_context: fidl::encoding::Context) -> usize {
12335            16
12336        }
12337    }
12338
12339    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormat, D>
12340        for &DaiFrameFormat
12341    {
12342        #[inline]
12343        unsafe fn encode(
12344            self,
12345            encoder: &mut fidl::encoding::Encoder<'_, D>,
12346            offset: usize,
12347            _depth: fidl::encoding::Depth,
12348        ) -> fidl::Result<()> {
12349            encoder.debug_check_bounds::<DaiFrameFormat>(offset);
12350            encoder.write_num::<u64>(self.ordinal(), offset);
12351            match self {
12352                DaiFrameFormat::FrameFormatStandard(ref val) => {
12353                    fidl::encoding::encode_in_envelope::<DaiFrameFormatStandard, D>(
12354                        <DaiFrameFormatStandard as fidl::encoding::ValueTypeMarker>::borrow(val),
12355                        encoder,
12356                        offset + 8,
12357                        _depth,
12358                    )
12359                }
12360                DaiFrameFormat::FrameFormatCustom(ref val) => {
12361                    fidl::encoding::encode_in_envelope::<DaiFrameFormatCustom, D>(
12362                        <DaiFrameFormatCustom as fidl::encoding::ValueTypeMarker>::borrow(val),
12363                        encoder,
12364                        offset + 8,
12365                        _depth,
12366                    )
12367                }
12368            }
12369        }
12370    }
12371
12372    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormat {
12373        #[inline(always)]
12374        fn new_empty() -> Self {
12375            Self::FrameFormatStandard(fidl::new_empty!(DaiFrameFormatStandard, D))
12376        }
12377
12378        #[inline]
12379        unsafe fn decode(
12380            &mut self,
12381            decoder: &mut fidl::encoding::Decoder<'_, D>,
12382            offset: usize,
12383            mut depth: fidl::encoding::Depth,
12384        ) -> fidl::Result<()> {
12385            decoder.debug_check_bounds::<Self>(offset);
12386            #[allow(unused_variables)]
12387            let next_out_of_line = decoder.next_out_of_line();
12388            let handles_before = decoder.remaining_handles();
12389            let (ordinal, inlined, num_bytes, num_handles) =
12390                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12391
12392            let member_inline_size = match ordinal {
12393                1 => <DaiFrameFormatStandard as fidl::encoding::TypeMarker>::inline_size(
12394                    decoder.context,
12395                ),
12396                2 => <DaiFrameFormatCustom as fidl::encoding::TypeMarker>::inline_size(
12397                    decoder.context,
12398                ),
12399                _ => return Err(fidl::Error::UnknownUnionTag),
12400            };
12401
12402            if inlined != (member_inline_size <= 4) {
12403                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12404            }
12405            let _inner_offset;
12406            if inlined {
12407                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12408                _inner_offset = offset + 8;
12409            } else {
12410                depth.increment()?;
12411                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12412            }
12413            match ordinal {
12414                1 => {
12415                    #[allow(irrefutable_let_patterns)]
12416                    if let DaiFrameFormat::FrameFormatStandard(_) = self {
12417                        // Do nothing, read the value into the object
12418                    } else {
12419                        // Initialize `self` to the right variant
12420                        *self = DaiFrameFormat::FrameFormatStandard(fidl::new_empty!(
12421                            DaiFrameFormatStandard,
12422                            D
12423                        ));
12424                    }
12425                    #[allow(irrefutable_let_patterns)]
12426                    if let DaiFrameFormat::FrameFormatStandard(ref mut val) = self {
12427                        fidl::decode!(
12428                            DaiFrameFormatStandard,
12429                            D,
12430                            val,
12431                            decoder,
12432                            _inner_offset,
12433                            depth
12434                        )?;
12435                    } else {
12436                        unreachable!()
12437                    }
12438                }
12439                2 => {
12440                    #[allow(irrefutable_let_patterns)]
12441                    if let DaiFrameFormat::FrameFormatCustom(_) = self {
12442                        // Do nothing, read the value into the object
12443                    } else {
12444                        // Initialize `self` to the right variant
12445                        *self = DaiFrameFormat::FrameFormatCustom(fidl::new_empty!(
12446                            DaiFrameFormatCustom,
12447                            D
12448                        ));
12449                    }
12450                    #[allow(irrefutable_let_patterns)]
12451                    if let DaiFrameFormat::FrameFormatCustom(ref mut val) = self {
12452                        fidl::decode!(DaiFrameFormatCustom, D, val, decoder, _inner_offset, depth)?;
12453                    } else {
12454                        unreachable!()
12455                    }
12456                }
12457                ordinal => panic!("unexpected ordinal {:?}", ordinal),
12458            }
12459            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12460                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12461            }
12462            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12463                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12464            }
12465            Ok(())
12466        }
12467    }
12468
12469    impl fidl::encoding::ValueTypeMarker for Format2 {
12470        type Borrowed<'a> = &'a Self;
12471        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12472            value
12473        }
12474    }
12475
12476    unsafe impl fidl::encoding::TypeMarker for Format2 {
12477        type Owned = Self;
12478
12479        #[inline(always)]
12480        fn inline_align(_context: fidl::encoding::Context) -> usize {
12481            8
12482        }
12483
12484        #[inline(always)]
12485        fn inline_size(_context: fidl::encoding::Context) -> usize {
12486            16
12487        }
12488    }
12489
12490    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format2, D> for &Format2 {
12491        #[inline]
12492        unsafe fn encode(
12493            self,
12494            encoder: &mut fidl::encoding::Encoder<'_, D>,
12495            offset: usize,
12496            _depth: fidl::encoding::Depth,
12497        ) -> fidl::Result<()> {
12498            encoder.debug_check_bounds::<Format2>(offset);
12499            encoder.write_num::<u64>(self.ordinal(), offset);
12500            match self {
12501                Format2::PcmFormat(ref val) => fidl::encoding::encode_in_envelope::<PcmFormat, D>(
12502                    <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
12503                    encoder,
12504                    offset + 8,
12505                    _depth,
12506                ),
12507                Format2::Encoding(ref val) => fidl::encoding::encode_in_envelope::<Encoding, D>(
12508                    <Encoding as fidl::encoding::ValueTypeMarker>::borrow(val),
12509                    encoder,
12510                    offset + 8,
12511                    _depth,
12512                ),
12513                Format2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12514            }
12515        }
12516    }
12517
12518    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format2 {
12519        #[inline(always)]
12520        fn new_empty() -> Self {
12521            Self::__SourceBreaking { unknown_ordinal: 0 }
12522        }
12523
12524        #[inline]
12525        unsafe fn decode(
12526            &mut self,
12527            decoder: &mut fidl::encoding::Decoder<'_, D>,
12528            offset: usize,
12529            mut depth: fidl::encoding::Depth,
12530        ) -> fidl::Result<()> {
12531            decoder.debug_check_bounds::<Self>(offset);
12532            #[allow(unused_variables)]
12533            let next_out_of_line = decoder.next_out_of_line();
12534            let handles_before = decoder.remaining_handles();
12535            let (ordinal, inlined, num_bytes, num_handles) =
12536                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12537
12538            let member_inline_size = match ordinal {
12539                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12540                2 => <Encoding as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12541                0 => return Err(fidl::Error::UnknownUnionTag),
12542                _ => num_bytes as usize,
12543            };
12544
12545            if inlined != (member_inline_size <= 4) {
12546                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12547            }
12548            let _inner_offset;
12549            if inlined {
12550                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12551                _inner_offset = offset + 8;
12552            } else {
12553                depth.increment()?;
12554                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12555            }
12556            match ordinal {
12557                1 => {
12558                    #[allow(irrefutable_let_patterns)]
12559                    if let Format2::PcmFormat(_) = self {
12560                        // Do nothing, read the value into the object
12561                    } else {
12562                        // Initialize `self` to the right variant
12563                        *self = Format2::PcmFormat(fidl::new_empty!(PcmFormat, D));
12564                    }
12565                    #[allow(irrefutable_let_patterns)]
12566                    if let Format2::PcmFormat(ref mut val) = self {
12567                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
12568                    } else {
12569                        unreachable!()
12570                    }
12571                }
12572                2 => {
12573                    #[allow(irrefutable_let_patterns)]
12574                    if let Format2::Encoding(_) = self {
12575                        // Do nothing, read the value into the object
12576                    } else {
12577                        // Initialize `self` to the right variant
12578                        *self = Format2::Encoding(fidl::new_empty!(Encoding, D));
12579                    }
12580                    #[allow(irrefutable_let_patterns)]
12581                    if let Format2::Encoding(ref mut val) = self {
12582                        fidl::decode!(Encoding, D, val, decoder, _inner_offset, depth)?;
12583                    } else {
12584                        unreachable!()
12585                    }
12586                }
12587                #[allow(deprecated)]
12588                ordinal => {
12589                    for _ in 0..num_handles {
12590                        decoder.drop_next_handle()?;
12591                    }
12592                    *self = Format2::__SourceBreaking { unknown_ordinal: ordinal };
12593                }
12594            }
12595            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12596                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12597            }
12598            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12599                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12600            }
12601            Ok(())
12602        }
12603    }
12604
12605    impl fidl::encoding::ValueTypeMarker for SupportedFormats2 {
12606        type Borrowed<'a> = &'a Self;
12607        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12608            value
12609        }
12610    }
12611
12612    unsafe impl fidl::encoding::TypeMarker for SupportedFormats2 {
12613        type Owned = Self;
12614
12615        #[inline(always)]
12616        fn inline_align(_context: fidl::encoding::Context) -> usize {
12617            8
12618        }
12619
12620        #[inline(always)]
12621        fn inline_size(_context: fidl::encoding::Context) -> usize {
12622            16
12623        }
12624    }
12625
12626    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats2, D>
12627        for &SupportedFormats2
12628    {
12629        #[inline]
12630        unsafe fn encode(
12631            self,
12632            encoder: &mut fidl::encoding::Encoder<'_, D>,
12633            offset: usize,
12634            _depth: fidl::encoding::Depth,
12635        ) -> fidl::Result<()> {
12636            encoder.debug_check_bounds::<SupportedFormats2>(offset);
12637            encoder.write_num::<u64>(self.ordinal(), offset);
12638            match self {
12639                SupportedFormats2::PcmSupportedFormats(ref val) => {
12640                    fidl::encoding::encode_in_envelope::<PcmSupportedFormats, D>(
12641                        <PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow(val),
12642                        encoder,
12643                        offset + 8,
12644                        _depth,
12645                    )
12646                }
12647                SupportedFormats2::SupportedEncodings(ref val) => {
12648                    fidl::encoding::encode_in_envelope::<SupportedEncodings, D>(
12649                        <SupportedEncodings as fidl::encoding::ValueTypeMarker>::borrow(val),
12650                        encoder,
12651                        offset + 8,
12652                        _depth,
12653                    )
12654                }
12655                SupportedFormats2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12656            }
12657        }
12658    }
12659
12660    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats2 {
12661        #[inline(always)]
12662        fn new_empty() -> Self {
12663            Self::__SourceBreaking { unknown_ordinal: 0 }
12664        }
12665
12666        #[inline]
12667        unsafe fn decode(
12668            &mut self,
12669            decoder: &mut fidl::encoding::Decoder<'_, D>,
12670            offset: usize,
12671            mut depth: fidl::encoding::Depth,
12672        ) -> fidl::Result<()> {
12673            decoder.debug_check_bounds::<Self>(offset);
12674            #[allow(unused_variables)]
12675            let next_out_of_line = decoder.next_out_of_line();
12676            let handles_before = decoder.remaining_handles();
12677            let (ordinal, inlined, num_bytes, num_handles) =
12678                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12679
12680            let member_inline_size = match ordinal {
12681                1 => <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12682                    decoder.context,
12683                ),
12684                2 => {
12685                    <SupportedEncodings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
12686                }
12687                0 => return Err(fidl::Error::UnknownUnionTag),
12688                _ => num_bytes as usize,
12689            };
12690
12691            if inlined != (member_inline_size <= 4) {
12692                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12693            }
12694            let _inner_offset;
12695            if inlined {
12696                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12697                _inner_offset = offset + 8;
12698            } else {
12699                depth.increment()?;
12700                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12701            }
12702            match ordinal {
12703                1 => {
12704                    #[allow(irrefutable_let_patterns)]
12705                    if let SupportedFormats2::PcmSupportedFormats(_) = self {
12706                        // Do nothing, read the value into the object
12707                    } else {
12708                        // Initialize `self` to the right variant
12709                        *self = SupportedFormats2::PcmSupportedFormats(fidl::new_empty!(
12710                            PcmSupportedFormats,
12711                            D
12712                        ));
12713                    }
12714                    #[allow(irrefutable_let_patterns)]
12715                    if let SupportedFormats2::PcmSupportedFormats(ref mut val) = self {
12716                        fidl::decode!(PcmSupportedFormats, D, val, decoder, _inner_offset, depth)?;
12717                    } else {
12718                        unreachable!()
12719                    }
12720                }
12721                2 => {
12722                    #[allow(irrefutable_let_patterns)]
12723                    if let SupportedFormats2::SupportedEncodings(_) = self {
12724                        // Do nothing, read the value into the object
12725                    } else {
12726                        // Initialize `self` to the right variant
12727                        *self = SupportedFormats2::SupportedEncodings(fidl::new_empty!(
12728                            SupportedEncodings,
12729                            D
12730                        ));
12731                    }
12732                    #[allow(irrefutable_let_patterns)]
12733                    if let SupportedFormats2::SupportedEncodings(ref mut val) = self {
12734                        fidl::decode!(SupportedEncodings, D, val, decoder, _inner_offset, depth)?;
12735                    } else {
12736                        unreachable!()
12737                    }
12738                }
12739                #[allow(deprecated)]
12740                ordinal => {
12741                    for _ in 0..num_handles {
12742                        decoder.drop_next_handle()?;
12743                    }
12744                    *self = SupportedFormats2::__SourceBreaking { unknown_ordinal: ordinal };
12745                }
12746            }
12747            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12748                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12749            }
12750            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12751                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12752            }
12753            Ok(())
12754        }
12755    }
12756}