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
17pub type VmoId = u64;
18
19pub const CLOCK_DOMAIN_EXTERNAL: u32 = 4294967295;
20
21pub const CLOCK_DOMAIN_MONOTONIC: u32 = 0;
22
23pub const MAX_COUNT_CHANNELS_IN_RING_BUFFER: u32 = 64;
24
25pub const MAX_COUNT_CHANNEL_SETS: u32 = 64;
26
27pub const MAX_COUNT_DAI_FORMATS: u32 = MAX_COUNT_FORMATS as u32;
28
29pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SAMPLE: u32 = 8;
30
31pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SLOT: u32 = 8;
32
33pub const MAX_COUNT_DAI_SUPPORTED_FRAME_FORMATS: u32 = 64;
34
35pub const MAX_COUNT_DAI_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
36
37pub const MAX_COUNT_DAI_SUPPORTED_RATES: u32 = 64;
38
39pub const MAX_COUNT_DAI_SUPPORTED_SAMPLE_FORMATS: u32 = 4;
40
41pub const MAX_COUNT_ENCODED_CHANNEL_SETS: u32 = 64;
42
43pub const MAX_COUNT_ENCODED_SUPPORTED_RATES: u32 = 64;
44
45pub const MAX_COUNT_ENCODED_TYPES: u32 = 64;
46
47pub const MAX_COUNT_FORMATS: u32 = 64;
48
49pub const MAX_COUNT_SUPPORTED_BYTES_PER_SAMPLE: u32 = 8;
50
51pub const MAX_COUNT_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
52
53pub const MAX_COUNT_SUPPORTED_RATES: u32 = 64;
54
55pub const MAX_COUNT_SUPPORTED_SAMPLE_FORMATS: u32 = 3;
56
57pub const MAX_COUNT_SUPPORTED_VALID_BITS_PER_SAMPLE: u32 = 8;
58
59pub const MAX_DAI_UI_STRING_SIZE: u32 = 256;
60
61pub const MAX_INLINE_TRANSFER_SIZE: u64 = 8192;
62
63pub const MAX_UI_STRING_SIZE: u32 = 256;
64
65pub const UNIQUE_ID_SIZE: u32 = 16;
66
67/// The maximum number of VMOs that can be registered or allocated.
68pub const VMO_VECTOR_MAX: u32 = 256;
69
70bitflags! {
71    /// Types of buffer ownership/transfer supported by the stream.
72    /// Multiple values can be supported by the driver.
73    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
74    pub struct BufferType: u64 {
75        /// The client allocates the VMO and registers it with the driver.
76        const CLIENT_OWNED = 1;
77        /// The driver allocates the VMO and passes handles to the client.
78        const DRIVER_OWNED = 2;
79        /// Data is sent inline within the FIDL message.
80        const INLINE = 4;
81    }
82}
83
84impl BufferType {
85    #[inline(always)]
86    pub fn from_bits_allow_unknown(bits: u64) -> Self {
87        Self::from_bits_retain(bits)
88    }
89
90    #[inline(always)]
91    pub fn has_unknown_bits(&self) -> bool {
92        self.get_unknown_bits() != 0
93    }
94
95    #[inline(always)]
96    pub fn get_unknown_bits(&self) -> u64 {
97        self.bits() & !Self::all().bits()
98    }
99}
100
101/// Standard Frame format.
102#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
103#[repr(u8)]
104pub enum DaiFrameFormatStandard {
105    /// No frame format as in samples without a frame sync like PDM.
106    None = 1,
107    /// Format as specified in the I2S specification (left justified, 2 channels, 32 bits per
108    /// sample, frame sync stays low for the left channel and high for the right channel, data
109    /// starts one clock cycle after frame sync changes clocked out at the falling edge of sclk).
110    I2S = 2,
111    /// Left justified, 2 channels. Data starts at frame sync changes from low to high clocked out
112    /// at the falling edge of sclk. The frame sync must stay high for `bits_per_sample` bits for
113    /// the first channel and low for `bits_per_sample` bits for the second channel.
114    StereoLeft = 3,
115    /// Right justified, 2 channels. The frame sync must stay high for `bits_per_sample` bits for
116    /// the first channel and low for `bits_per_sample` bits for the second channel.
117    StereoRight = 4,
118    /// Left justified, variable number of channels, data starts at frame sync changes from low to
119    /// high clocked out at the rising edge of sclk. The frame sync must stay high for exactly 1
120    /// clock cycle.
121    Tdm1 = 5,
122    /// Left justified, variable number of channels, data starts one clock cycle after the frame
123    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
124    /// stay high for exactly 1 clock cycle.
125    Tdm2 = 6,
126    /// Left justified, variable number of channels, data starts two clock cycles after the frame
127    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
128    /// stay high for exactly 1 clock cycle.
129    Tdm3 = 7,
130}
131
132impl DaiFrameFormatStandard {
133    #[inline]
134    pub fn from_primitive(prim: u8) -> Option<Self> {
135        match prim {
136            1 => Some(Self::None),
137            2 => Some(Self::I2S),
138            3 => Some(Self::StereoLeft),
139            4 => Some(Self::StereoRight),
140            5 => Some(Self::Tdm1),
141            6 => Some(Self::Tdm2),
142            7 => Some(Self::Tdm3),
143            _ => None,
144        }
145    }
146
147    #[inline]
148    pub const fn into_primitive(self) -> u8 {
149        self as u8
150    }
151}
152
153#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
154#[repr(u8)]
155pub enum DaiSampleFormat {
156    /// Pulse Density Modulation samples.
157    Pdm = 1,
158    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
159    PcmSigned = 2,
160    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
161    PcmUnsigned = 3,
162    /// Floating point samples, encoded per the IEEE-754 standard.
163    PcmFloat = 4,
164}
165
166impl DaiSampleFormat {
167    #[inline]
168    pub fn from_primitive(prim: u8) -> Option<Self> {
169        match prim {
170            1 => Some(Self::Pdm),
171            2 => Some(Self::PcmSigned),
172            3 => Some(Self::PcmUnsigned),
173            4 => Some(Self::PcmFloat),
174            _ => None,
175        }
176    }
177
178    #[inline]
179    pub const fn into_primitive(self) -> u8 {
180        self as u8
181    }
182}
183
184#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
185pub enum DeviceType {
186    /// Device supports the fuchsia.hardware.audio/StreamConfig protocol.
187    StreamConfig,
188    /// Device supports the fuchsia.hardware.audio/Dai protocol.
189    Dai,
190    /// Device supports the fuchsia.hardware.audio/Codec protocol.
191    Codec,
192    /// Device supports the fuchsia.hardware.audio/Composite protocol.
193    Composite,
194    #[doc(hidden)]
195    __SourceBreaking { unknown_ordinal: u32 },
196}
197
198/// Pattern that matches an unknown `DeviceType` member.
199#[macro_export]
200macro_rules! DeviceTypeUnknown {
201    () => {
202        _
203    };
204}
205
206impl DeviceType {
207    #[inline]
208    pub fn from_primitive(prim: u32) -> Option<Self> {
209        match prim {
210            1 => Some(Self::StreamConfig),
211            2 => Some(Self::Dai),
212            3 => Some(Self::Codec),
213            4 => Some(Self::Composite),
214            _ => None,
215        }
216    }
217
218    #[inline]
219    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
220        match prim {
221            1 => Self::StreamConfig,
222            2 => Self::Dai,
223            3 => Self::Codec,
224            4 => Self::Composite,
225            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
226        }
227    }
228
229    #[inline]
230    pub fn unknown() -> Self {
231        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
232    }
233
234    #[inline]
235    pub const fn into_primitive(self) -> u32 {
236        match self {
237            Self::StreamConfig => 1,
238            Self::Dai => 2,
239            Self::Codec => 3,
240            Self::Composite => 4,
241            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
242        }
243    }
244
245    #[inline]
246    pub fn is_unknown(&self) -> bool {
247        match self {
248            Self::__SourceBreaking { unknown_ordinal: _ } => true,
249            _ => false,
250        }
251    }
252}
253
254#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
255pub enum DriverError {
256    /// The driver encountered an otherwise unspecified error while performing the operation.
257    InternalError,
258    /// The operation is not implemented, supported, or enabled.
259    NotSupported,
260    /// An argument is invalid.
261    InvalidArgs,
262    /// The subject of the operation is the wrong type to perform the operation.
263    WrongType,
264    /// The operation cannot be performed currently but potentially could succeed if
265    /// the caller waits for a prerequisite to be satisfied.
266    ShouldWait,
267    /// A fatal error has occurred in the driver. The connection is no longer
268    /// usable and the client should close it.
269    FatalError,
270    #[doc(hidden)]
271    __SourceBreaking { unknown_ordinal: u32 },
272}
273
274/// Pattern that matches an unknown `DriverError` member.
275#[macro_export]
276macro_rules! DriverErrorUnknown {
277    () => {
278        _
279    };
280}
281
282impl DriverError {
283    #[inline]
284    pub fn from_primitive(prim: u32) -> Option<Self> {
285        match prim {
286            1 => Some(Self::InternalError),
287            2 => Some(Self::NotSupported),
288            3 => Some(Self::InvalidArgs),
289            4 => Some(Self::WrongType),
290            5 => Some(Self::ShouldWait),
291            6 => Some(Self::FatalError),
292            _ => None,
293        }
294    }
295
296    #[inline]
297    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
298        match prim {
299            1 => Self::InternalError,
300            2 => Self::NotSupported,
301            3 => Self::InvalidArgs,
302            4 => Self::WrongType,
303            5 => Self::ShouldWait,
304            6 => Self::FatalError,
305            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
306        }
307    }
308
309    #[inline]
310    pub fn unknown() -> Self {
311        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
312    }
313
314    #[inline]
315    pub const fn into_primitive(self) -> u32 {
316        match self {
317            Self::InternalError => 1,
318            Self::NotSupported => 2,
319            Self::InvalidArgs => 3,
320            Self::WrongType => 4,
321            Self::ShouldWait => 5,
322            Self::FatalError => 6,
323            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
324        }
325    }
326
327    #[inline]
328    pub fn is_unknown(&self) -> bool {
329        match self {
330            Self::__SourceBreaking { unknown_ordinal: _ } => true,
331            _ => false,
332        }
333    }
334}
335
336/// The type of encoding used for the stream.
337#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
338pub enum EncodingType {
339    Aac,
340    Sbc,
341    #[doc(hidden)]
342    __SourceBreaking {
343        unknown_ordinal: u32,
344    },
345}
346
347/// Pattern that matches an unknown `EncodingType` member.
348#[macro_export]
349macro_rules! EncodingTypeUnknown {
350    () => {
351        _
352    };
353}
354
355impl EncodingType {
356    #[inline]
357    pub fn from_primitive(prim: u32) -> Option<Self> {
358        match prim {
359            1 => Some(Self::Aac),
360            2 => Some(Self::Sbc),
361            _ => None,
362        }
363    }
364
365    #[inline]
366    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
367        match prim {
368            1 => Self::Aac,
369            2 => Self::Sbc,
370            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
371        }
372    }
373
374    #[inline]
375    pub fn unknown() -> Self {
376        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
377    }
378
379    #[inline]
380    pub const fn into_primitive(self) -> u32 {
381        match self {
382            Self::Aac => 1,
383            Self::Sbc => 2,
384            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
385        }
386    }
387
388    #[inline]
389    pub fn is_unknown(&self) -> bool {
390        match self {
391            Self::__SourceBreaking { unknown_ordinal: _ } => true,
392            _ => false,
393        }
394    }
395}
396
397#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
398#[repr(u32)]
399pub enum GetVmoError {
400    /// The ring buffer setup failed due to an invalid argument, e.g. min_frames is too big.
401    InvalidArgs = 1,
402    /// The ring buffer setup failed due to an internal error.
403    InternalError = 2,
404}
405
406impl GetVmoError {
407    #[inline]
408    pub fn from_primitive(prim: u32) -> Option<Self> {
409        match prim {
410            1 => Some(Self::InvalidArgs),
411            2 => Some(Self::InternalError),
412            _ => None,
413        }
414    }
415
416    #[inline]
417    pub const fn into_primitive(self) -> u32 {
418        self as u32
419    }
420}
421
422#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
423#[repr(u32)]
424pub enum PlugDetectCapabilities {
425    /// Driver is hardwired (will always be plugged in).
426    Hardwired = 0,
427    /// Driver is able to asynchronously notify of plug state changes.
428    CanAsyncNotify = 1,
429}
430
431impl PlugDetectCapabilities {
432    #[inline]
433    pub fn from_primitive(prim: u32) -> Option<Self> {
434        match prim {
435            0 => Some(Self::Hardwired),
436            1 => Some(Self::CanAsyncNotify),
437            _ => None,
438        }
439    }
440
441    #[inline]
442    pub const fn into_primitive(self) -> u32 {
443        self as u32
444    }
445}
446
447#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
448#[repr(u8)]
449pub enum SampleFormat {
450    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
451    PcmSigned = 1,
452    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
453    PcmUnsigned = 2,
454    /// Floating point samples, encoded per the IEEE-754 standard.
455    PcmFloat = 3,
456}
457
458impl SampleFormat {
459    #[inline]
460    pub fn from_primitive(prim: u8) -> Option<Self> {
461        match prim {
462            1 => Some(Self::PcmSigned),
463            2 => Some(Self::PcmUnsigned),
464            3 => Some(Self::PcmFloat),
465            _ => None,
466        }
467    }
468
469    #[inline]
470    pub const fn into_primitive(self) -> u8 {
471        self as u8
472    }
473}
474
475#[derive(Clone, Debug, PartialEq)]
476pub struct CodecGetPropertiesResponse {
477    pub properties: CodecProperties,
478}
479
480impl fidl::Persistable for CodecGetPropertiesResponse {}
481
482#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
483pub struct CodecSetDaiFormatRequest {
484    pub format: DaiFormat,
485}
486
487impl fidl::Persistable for CodecSetDaiFormatRequest {}
488
489#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
490#[repr(C)]
491pub struct CodecStartResponse {
492    pub start_time: i64,
493}
494
495impl fidl::Persistable for CodecStartResponse {}
496
497#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
498#[repr(C)]
499pub struct CodecStopResponse {
500    pub stop_time: i64,
501}
502
503impl fidl::Persistable for CodecStopResponse {}
504
505#[derive(Clone, Debug, PartialEq)]
506pub struct CodecWatchPlugStateResponse {
507    pub plug_state: PlugState,
508}
509
510impl fidl::Persistable for CodecWatchPlugStateResponse {}
511
512#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
513pub struct CodecGetDaiFormatsResponse {
514    pub formats: Vec<DaiSupportedFormats>,
515}
516
517impl fidl::Persistable for CodecGetDaiFormatsResponse {}
518
519#[derive(Clone, Debug, PartialEq)]
520pub struct CodecSetDaiFormatResponse {
521    pub state: CodecFormatInfo,
522}
523
524impl fidl::Persistable for CodecSetDaiFormatResponse {}
525
526#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
527#[repr(C)]
528pub struct CompositeGetDaiFormatsRequest {
529    pub processing_element_id: u64,
530}
531
532impl fidl::Persistable for CompositeGetDaiFormatsRequest {}
533
534#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
535#[repr(C)]
536pub struct CompositeGetPacketStreamFormatsRequest {
537    pub processing_element_id: u64,
538}
539
540impl fidl::Persistable for CompositeGetPacketStreamFormatsRequest {}
541
542#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
543#[repr(C)]
544pub struct CompositeGetRingBufferFormatsRequest {
545    pub processing_element_id: u64,
546}
547
548impl fidl::Persistable for CompositeGetRingBufferFormatsRequest {}
549
550#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
551pub struct CompositeSetDaiFormatRequest {
552    pub processing_element_id: u64,
553    pub format: DaiFormat,
554}
555
556impl fidl::Persistable for CompositeSetDaiFormatRequest {}
557
558#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
559pub struct CompositeGetDaiFormatsResponse {
560    pub dai_formats: Vec<DaiSupportedFormats>,
561}
562
563impl fidl::Persistable for CompositeGetDaiFormatsResponse {}
564
565#[derive(Clone, Debug, PartialEq)]
566pub struct CompositeGetPacketStreamFormatsResponse {
567    pub packet_stream_formats: Vec<SupportedFormats2>,
568}
569
570impl fidl::Persistable for CompositeGetPacketStreamFormatsResponse {}
571
572#[derive(Clone, Debug, PartialEq)]
573pub struct CompositeGetPropertiesResponse {
574    pub properties: CompositeProperties,
575}
576
577impl fidl::Persistable for CompositeGetPropertiesResponse {}
578
579#[derive(Clone, Debug, PartialEq)]
580pub struct CompositeGetRingBufferFormatsResponse {
581    pub ring_buffer_formats: Vec<SupportedFormats2>,
582}
583
584impl fidl::Persistable for CompositeGetRingBufferFormatsResponse {}
585
586/// DAI format. Frames are made up of `number_of_channels` samples which have `bits_per_sample` bits
587/// of data within `bits_per_slot` arranged in `frame_format`. For more detailed information see
588/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
589#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
590pub struct DaiFormat {
591    /// Number of channels.
592    /// Must be 2, if `frame_format` is DaiFrameFormatStandard::I2S, STEREO_LEFT or STEREO_RIGHT.
593    pub number_of_channels: u32,
594    /// Sets which channels are active via a bitmask.
595    /// The least significant bit corresponds to channel index 0.
596    /// Must not set bits beyond the least-significant `number_of_channels` bits.
597    pub channels_to_use_bitmask: u64,
598    /// The sample format of all samples.
599    pub sample_format: DaiSampleFormat,
600    /// The frame format of all samples.
601    pub frame_format: DaiFrameFormat,
602    /// The frame rate for all samples.
603    pub frame_rate: u32,
604    /// The bits per slot for all channels.
605    pub bits_per_slot: u8,
606    /// The bits per sample for each channel.
607    /// Must be smaller than `bits_per_slot` for all samples to fit.
608    pub bits_per_sample: u8,
609}
610
611impl fidl::Persistable for DaiFormat {}
612
613/// Custom Frame format.
614#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
615pub struct DaiFrameFormatCustom {
616    /// Justification of the samples within a slot.
617    pub left_justified: bool,
618    /// Clocking of data samples and frame sync output on either raising or falling sclk.
619    /// If true then the sclk raises on the raising edge of the data and frame sync, i.e.
620    /// the data will be sampled on the falling edge of sclk (the middle of the sclk cycle).
621    /// Hence, if false then data will be sampled on the raising edge of sclk.
622    pub sclk_on_raising: bool,
623    /// Number of sclks between the beginning of a frame sync change and audio samples.
624    /// For example, for I2S set to 1 and for stereo left justified set to 0.
625    pub frame_sync_sclks_offset: i8,
626    /// Number of sclks the frame sync is high within a frame.
627    /// For example, for I2S with 32 bits slots set to 32, for TDM usually set to 1.
628    pub frame_sync_size: u8,
629}
630
631impl fidl::Persistable for DaiFrameFormatCustom {}
632
633#[derive(Clone, Debug, PartialEq)]
634pub struct DaiGetPropertiesResponse {
635    pub properties: DaiProperties,
636}
637
638impl fidl::Persistable for DaiGetPropertiesResponse {}
639
640/// Formats supported by the DAI. Frames are made up of `number_of_channels` samples which have
641/// `bits_per_sample` bits of data within `bits_per_slot` bits arranged in `frame_formats`.
642/// All values listed in each vector are supported. When not all combinations supported by the driver
643/// can be described with one `DaiSupportedFormats`, `GetDaiSupportedFormats` returns more than one
644/// `DaiSupportedFormats` in the returned vector.
645/// For more detailed information see
646/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
647#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
648pub struct DaiSupportedFormats {
649    /// Possible number of channels supported.
650    pub number_of_channels: Vec<u32>,
651    /// Sample formats supported.
652    pub sample_formats: Vec<DaiSampleFormat>,
653    /// Frame formats supported.
654    pub frame_formats: Vec<DaiFrameFormat>,
655    /// Rates supported. Values must be listed in ascending order.
656    pub frame_rates: Vec<u32>,
657    /// The bits per slot supported. Values must be listed in ascending order.
658    pub bits_per_slot: Vec<u8>,
659    /// Bits per sample supported. Values must be listed in ascending order.
660    pub bits_per_sample: Vec<u8>,
661}
662
663impl fidl::Persistable for DaiSupportedFormats {}
664
665#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
666pub struct DaiGetDaiFormatsResponse {
667    pub dai_formats: Vec<DaiSupportedFormats>,
668}
669
670impl fidl::Persistable for DaiGetDaiFormatsResponse {}
671
672#[derive(Clone, Debug, PartialEq)]
673pub struct DaiGetRingBufferFormatsResponse {
674    pub ring_buffer_formats: Vec<SupportedFormats>,
675}
676
677impl fidl::Persistable for DaiGetRingBufferFormatsResponse {}
678
679#[derive(Clone, Debug, PartialEq)]
680pub struct HealthGetHealthStateResponse {
681    pub state: HealthState,
682}
683
684impl fidl::Persistable for HealthGetHealthStateResponse {}
685
686#[derive(Clone, Debug, PartialEq)]
687pub struct PacketStreamControlGetPropertiesResponse {
688    pub properties: PacketStreamProperties,
689}
690
691impl fidl::Persistable for PacketStreamControlGetPropertiesResponse {}
692
693/// Format supporting PCM audio. Frames are made up of `number_of_channels` samples
694/// which have `valid_bits_per_sample` bits of most-significant (left-justified) data within
695/// `bytes_per_sample` bytes.
696///
697/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
698#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
699pub struct PcmFormat {
700    /// Number of channels.
701    pub number_of_channels: u8,
702    /// The format of all samples.
703    pub sample_format: SampleFormat,
704    /// Bytes allocated to hold a sample, must be greater than or equal to the valid sample size in
705    /// `valid_bits_per_sample`.
706    pub bytes_per_sample: u8,
707    /// Number of valid bits in a sample, must be less than or equal to `bytes_per_sample * 8`.
708    /// If less than `bytes_per_sample * 8`, the valid bits (those containing audio)
709    /// are left justified, and any additional bits must be ignored by the
710    /// receiver.
711    pub valid_bits_per_sample: u8,
712    /// The frame rate for all samples.
713    pub frame_rate: u32,
714}
715
716impl fidl::Persistable for PcmFormat {}
717
718#[derive(Clone, Debug, PartialEq)]
719pub struct RingBufferGetPropertiesResponse {
720    pub properties: RingBufferProperties,
721}
722
723impl fidl::Persistable for RingBufferGetPropertiesResponse {}
724
725#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
726#[repr(C)]
727pub struct RingBufferGetVmoRequest {
728    pub min_frames: u32,
729    pub clock_recovery_notifications_per_ring: u32,
730}
731
732impl fidl::Persistable for RingBufferGetVmoRequest {}
733
734#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
735#[repr(C)]
736pub struct RingBufferPositionInfo {
737    /// The driver's best estimate of the time (in the CLOCK_MONOTONIC timeline) at which the
738    /// playback/capture pointer reached the position indicated by `position`.
739    ///
740    /// `turn_on_delay` impact should not be incorporated into 'timestamp'.
741    /// No delays indicated in `DelayInfo` should be incorporated.
742    pub timestamp: i64,
743    /// The playback/capture pointer position (in bytes) in the ring buffer at time
744    /// `timestamp` as estimated by the driver.
745    pub position: u32,
746}
747
748impl fidl::Persistable for RingBufferPositionInfo {}
749
750#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
751#[repr(C)]
752pub struct RingBufferSetActiveChannelsRequest {
753    pub active_channels_bitmask: u64,
754}
755
756impl fidl::Persistable for RingBufferSetActiveChannelsRequest {}
757
758#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
759#[repr(C)]
760pub struct RingBufferStartResponse {
761    pub start_time: i64,
762}
763
764impl fidl::Persistable for RingBufferStartResponse {}
765
766#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
767#[repr(C)]
768pub struct RingBufferWatchClockRecoveryPositionInfoResponse {
769    pub position_info: RingBufferPositionInfo,
770}
771
772impl fidl::Persistable for RingBufferWatchClockRecoveryPositionInfoResponse {}
773
774#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
775#[repr(C)]
776pub struct RingBufferSetActiveChannelsResponse {
777    pub set_time: i64,
778}
779
780impl fidl::Persistable for RingBufferSetActiveChannelsResponse {}
781
782#[derive(Clone, Debug, PartialEq)]
783pub struct RingBufferWatchDelayInfoResponse {
784    pub delay_info: DelayInfo,
785}
786
787impl fidl::Persistable for RingBufferWatchDelayInfoResponse {}
788
789#[derive(Clone, Debug, PartialEq)]
790pub struct StreamConfigGetPropertiesResponse {
791    pub properties: StreamProperties,
792}
793
794impl fidl::Persistable for StreamConfigGetPropertiesResponse {}
795
796#[derive(Clone, Debug, PartialEq)]
797pub struct StreamConfigGetSupportedFormatsResponse {
798    pub supported_formats: Vec<SupportedFormats>,
799}
800
801impl fidl::Persistable for StreamConfigGetSupportedFormatsResponse {}
802
803#[derive(Clone, Debug, PartialEq)]
804pub struct StreamConfigSetGainRequest {
805    pub target_state: GainState,
806}
807
808impl fidl::Persistable for StreamConfigSetGainRequest {}
809
810#[derive(Clone, Debug, PartialEq)]
811pub struct StreamConfigWatchGainStateResponse {
812    pub gain_state: GainState,
813}
814
815impl fidl::Persistable for StreamConfigWatchGainStateResponse {}
816
817#[derive(Clone, Debug, PartialEq)]
818pub struct StreamConfigWatchPlugStateResponse {
819    pub plug_state: PlugState,
820}
821
822impl fidl::Persistable for StreamConfigWatchPlugStateResponse {}
823
824#[derive(Clone, Debug, Default, PartialEq)]
825pub struct AllocateVmosConfig {
826    /// The minimum size required for each VMO, in bytes.
827    ///
828    /// Required.
829    pub min_vmo_size: Option<u64>,
830    /// The number of VMOs to allocate.
831    ///
832    /// Required.
833    pub vmo_count: Option<u32>,
834    #[doc(hidden)]
835    pub __source_breaking: fidl::marker::SourceBreaking,
836}
837
838impl fidl::Persistable for AllocateVmosConfig {}
839
840/// The specification of a single channel, within the overall channel configuration.
841#[derive(Clone, Debug, Default, PartialEq)]
842pub struct ChannelAttributes {
843    /// Minimum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
844    /// If `min_frequency` is not included, then this channel is assumed to cover the entire
845    /// low-frequency range of this device.
846    ///
847    /// Optional.
848    pub min_frequency: Option<u32>,
849    /// Maximum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
850    /// If `max_frequency` is not included, then this channel is assumed to cover the entire
851    /// high-frequency range of this device.
852    ///
853    /// Optional.
854    pub max_frequency: Option<u32>,
855    #[doc(hidden)]
856    pub __source_breaking: fidl::marker::SourceBreaking,
857}
858
859impl fidl::Persistable for ChannelAttributes {}
860
861/// The specification of a channel configuration.
862#[derive(Clone, Debug, Default, PartialEq)]
863pub struct ChannelSet {
864    /// Describes attributes for this channel set.
865    /// The size of this vector defines the number of channels supported by this `ChannelSet`.
866    /// Each element of the `attributes` vector defines attributes of a single channel.
867    ///
868    /// Required.
869    pub attributes: Option<Vec<ChannelAttributes>>,
870    #[doc(hidden)]
871    pub __source_breaking: fidl::marker::SourceBreaking,
872}
873
874impl fidl::Persistable for ChannelSet {}
875
876/// Codec format information.
877#[derive(Clone, Debug, Default, PartialEq)]
878pub struct CodecFormatInfo {
879    /// The driver's best estimate of the external delay (in nanoseconds) present in the pipeline
880    /// for the chosen format. When precisely synchronizing presentation across multiple entities
881    /// (e.g. devices), the external delay should be taken into account.
882    /// If not included `external_delay` is unknown.
883    ///
884    /// Optional.
885    pub external_delay: Option<i64>,
886    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
887    /// actually start playback/capture after a `Start` command is issued.
888    /// It may take some time for the hardware to get into fully operational mode, for example due
889    /// a power state change. This delay must be taken into account if not getting the initial audio
890    /// samples played or captured is not acceptable.
891    /// If not included `turn_on_delay` is unknown.
892    ///
893    /// Optional.
894    pub turn_on_delay: Option<i64>,
895    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
896    /// actually stop playback/capture after a `Stop` command is issued.
897    /// It may take some time for the hardware to get into fully stopped mode, for example due
898    /// a power state change. This delay must be taken into account if playback/capture of samples
899    /// after a 'Stop' command is not acceptable.
900    /// If not included, the turn off delay is unknown.
901    ///
902    /// Optional.
903    pub turn_off_delay: Option<i64>,
904    #[doc(hidden)]
905    pub __source_breaking: fidl::marker::SourceBreaking,
906}
907
908impl fidl::Persistable for CodecFormatInfo {}
909
910#[derive(Clone, Debug, Default, PartialEq)]
911pub struct CodecProperties {
912    /// Driver type is input (true) or output (false)
913    /// If not included, then the driver may be used for both input and output.
914    ///
915    /// Optional.
916    pub is_input: Option<bool>,
917    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
918    /// If included, this string must be non-empty.
919    ///
920    /// Optional.
921    pub manufacturer: Option<String>,
922    /// UI string for the product name. If not included, the product name is unspecified.
923    /// If included, this string must be non-empty.
924    ///
925    /// Optional.
926    pub product: Option<String>,
927    /// Unique identifier for the codec.
928    /// If not included, there is no unique id for the Codec.
929    ///
930    /// Optional.
931    pub unique_id: Option<[u8; 16]>,
932    /// Plug Detect Capabilities.
933    ///
934    /// Required.
935    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
936    #[doc(hidden)]
937    pub __source_breaking: fidl::marker::SourceBreaking,
938}
939
940impl fidl::Persistable for CodecProperties {}
941
942#[derive(Clone, Debug, Default, PartialEq)]
943pub struct CompositeProperties {
944    /// UI string for the manufacturer name. If not set, the manufacturer is unknown.
945    /// If included, this string must be non-empty.
946    ///
947    /// Optional.
948    pub manufacturer: Option<String>,
949    /// UI string for the product name. If not set, the product name is unknown.
950    /// If included, this string must be non-empty.
951    ///
952    /// Optional.
953    pub product: Option<String>,
954    /// A unique identifier. If not included, there is no unique id for the Device.
955    /// `unique_id` arrays starting with 0x42, 0x54, ... (or `BT` in ASCII) are
956    /// reserved for drivers implementing Bluetooth technologies.
957    /// `unique_id` arrays starting with 0x55, 0x53, 0x42, ... (or `USB` in ASCII) are
958    /// reserved for drivers implementing USB technologies.
959    /// Note that even though the above values map to readable ASCII characters, array
960    /// values can span the entire uint8 range (0-255).
961    ///
962    /// Optional.
963    pub unique_id: Option<[u8; 16]>,
964    /// An identifier for the clock domain in which this hardware operates. If
965    /// two hardware devices have the same clock domain, their clock rates are
966    /// identical and perfectly synchronized. Although these two clocks have the
967    /// same rate, the clock positions may be offset from each other by an
968    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
969    /// system wide entity, such as a platform bus or global clock tree.
970    ///
971    /// There are two special values:
972    ///
973    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
974    ///    rate as the system montonic clock.
975    ///
976    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
977    ///    rate and is not synchronized with any known clock, not even with
978    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
979    ///
980    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
981    /// notification updates to recover the hardware's clock.
982    ///
983    /// Required.
984    pub clock_domain: Option<u32>,
985    #[doc(hidden)]
986    pub __source_breaking: fidl::marker::SourceBreaking,
987}
988
989impl fidl::Persistable for CompositeProperties {}
990
991#[derive(Clone, Debug, Default, PartialEq)]
992pub struct DaiProperties {
993    /// Driver type is input (true) or output (false)
994    ///
995    /// Required.
996    pub is_input: Option<bool>,
997    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
998    /// If included, this string must be non-empty.
999    ///
1000    /// Optional.
1001    pub manufacturer: Option<String>,
1002    /// UI string for the product name. If not included, the product name is unspecified.
1003    /// If included, this string must be non-empty.
1004    ///
1005    /// Optional.
1006    pub product_name: Option<String>,
1007    /// A unique identifier for the driver.
1008    /// If not included, there is no unique id for the driver.
1009    ///
1010    /// Optional.
1011    pub unique_id: Option<[u8; 16]>,
1012    /// An identifier for the clock domain in which this hardware operates. If
1013    /// two hardware devices have the same clock domain, their clock rates are
1014    /// identical and perfectly synchronized. Although these two clocks have the
1015    /// same rate, the clock positions may be offset from each other by an
1016    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1017    /// system wide entity, such as a platform bus or global clock tree.
1018    ///
1019    /// There are two special values:
1020    ///
1021    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1022    ///    rate as the system montonic clock.
1023    ///
1024    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1025    ///    rate and is not synchronized with any known clock, not even with
1026    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1027    ///
1028    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1029    /// notification updates to recover the hardware's clock.
1030    ///
1031    /// Required.
1032    pub clock_domain: Option<u32>,
1033    #[doc(hidden)]
1034    pub __source_breaking: fidl::marker::SourceBreaking,
1035}
1036
1037impl fidl::Persistable for DaiProperties {}
1038
1039/// Delay information as returned by the driver.
1040#[derive(Clone, Debug, Default, PartialEq)]
1041pub struct DelayInfo {
1042    /// The driver's best estimate (for the chosen format) of the delay internal to the hardware it
1043    /// abstracts.
1044    ///
1045    /// "Internal" refers to the hardware between the DAI interconnect and the ring buffer (such as
1046    /// an SoC audio subsystem), whereas "external" refers to hardware on the far side of any DAI
1047    /// interconnect (such as hardware codecs).
1048    ///
1049    /// For a given frame during playback, this is any delay after the driver copies it out of the
1050    /// ring buffer, before it exits any interconnect.
1051    /// For a given frame during recording, this is any delay after it enters the interconnect,
1052    /// before the driver moves it into the ring buffer.
1053    ///
1054    /// `internal_delay` must be taken into account by the client when determining the requirements
1055    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1056    ///
1057    /// This delay must not include the inherent delay added by the temporary buffering needed
1058    /// to copy data in and out of the ring buffer, which is contained in `RingBufferProperties`
1059    /// field `driver_transfer_bytes`.
1060    ///
1061    /// Required.
1062    pub internal_delay: Option<i64>,
1063    /// The driver's best estimate (for the chosen format) of the delay external to the hardware it
1064    /// abstracts.
1065    ///
1066    /// "External" refers to hardware on the far side of any DAI interconnect (such as hardware
1067    /// codecs), whereas "internal" refers to hardware between the DAI interconnect and the ring
1068    /// buffer (such as an SoC audio subsystem).
1069    ///
1070    /// `external_delay` must be taken into account by the client when determining the requirements
1071    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1072    ///
1073    /// If not included, `external_delay` is unknown. If unknown, a client may treat it however it
1074    /// chooses (consider it zero or some large number, autodetect it, etc).
1075    ///
1076    /// Like `internal_delay`, this delay must not include the inherent delay added by the temporary
1077    /// buffering needed to copy data in and out of the ring buffer, which is contained in
1078    /// `RingBufferProperties` field `driver_transfer_bytes`.
1079    ///
1080    /// Optional.
1081    pub external_delay: Option<i64>,
1082    #[doc(hidden)]
1083    pub __source_breaking: fidl::marker::SourceBreaking,
1084}
1085
1086impl fidl::Persistable for DelayInfo {}
1087
1088/// Format specification for an encoded audio stream.
1089#[derive(Clone, Debug, Default, PartialEq)]
1090pub struct Encoding {
1091    /// Number of channels for the stream, once it is decoded.
1092    ///
1093    /// Required.
1094    pub decoded_channel_count: Option<u32>,
1095    /// The frame rate for the stream, once it is decoded. This is a hint for decoders.
1096    ///
1097    /// Optional.
1098    pub decoded_frame_rate: Option<u32>,
1099    /// The average bitrate of the stream in bits per second.
1100    ///
1101    /// Required.
1102    pub average_encoding_bitrate: Option<u32>,
1103    /// The encoding type for the stream.
1104    ///
1105    /// Required.
1106    pub encoding_type: Option<EncodingType>,
1107    #[doc(hidden)]
1108    pub __source_breaking: fidl::marker::SourceBreaking,
1109}
1110
1111impl fidl::Persistable for Encoding {}
1112
1113/// Deprecated: Use `Format2` instead.
1114#[derive(Clone, Debug, Default, PartialEq)]
1115pub struct Format {
1116    pub pcm_format: Option<PcmFormat>,
1117    #[doc(hidden)]
1118    pub __source_breaking: fidl::marker::SourceBreaking,
1119}
1120
1121impl fidl::Persistable for Format {}
1122
1123/// Gain state requested by the client or returned by the driver.
1124#[derive(Clone, Debug, Default, PartialEq)]
1125pub struct GainState {
1126    /// Current mute state. If not included, the state is unmuted.
1127    ///
1128    /// Optional.
1129    pub muted: Option<bool>,
1130    /// Current Automatic Gain Control (AGC) state. If not included, AGC is disabled.
1131    ///
1132    /// Optional.
1133    pub agc_enabled: Option<bool>,
1134    /// Current gain in decibels.
1135    ///
1136    /// Required.
1137    pub gain_db: Option<f32>,
1138    #[doc(hidden)]
1139    pub __source_breaking: fidl::marker::SourceBreaking,
1140}
1141
1142impl fidl::Persistable for GainState {}
1143
1144#[derive(Clone, Debug, Default, PartialEq)]
1145pub struct HealthState {
1146    /// Driver is currently healthy.
1147    /// No health information is provided if this field is not included.
1148    /// This allows drivers to signal their health state in scenarios where they have not enough
1149    /// capabilities or resources to recover on their own, for instance not able to power down the
1150    /// hardware via a GPIO or control over the power subsystem.
1151    ///
1152    /// Optional.
1153    pub healthy: Option<bool>,
1154    #[doc(hidden)]
1155    pub __source_breaking: fidl::marker::SourceBreaking,
1156}
1157
1158impl fidl::Persistable for HealthState {}
1159
1160/// Properties of the packet-stream. These values don't change once the packet-stream is created.
1161#[derive(Clone, Debug, Default, PartialEq)]
1162pub struct PacketStreamProperties {
1163    /// When set to true, indicates that the packet-stream runs in a different cache coherency
1164    /// domain. Clients must ensure data writes are flushed to main memory (during output)
1165    /// or invalidated before reading (during input).
1166    ///
1167    /// When set to false, the server and client are in the same coherency domain.
1168    /// Synchronization (e.g., fences) is still required to order reads and writes.
1169    ///
1170    /// Required.
1171    pub needs_cache_flush_or_invalidate: Option<bool>,
1172    /// The buffer methods supported by this driver.
1173    ///
1174    /// Required.
1175    pub supported_buffer_types: Option<BufferType>,
1176    /// True if this is an input stream (e.g. capture). False if this is an output stream (e.g.
1177    /// playback).
1178    ///
1179    /// Required.
1180    pub is_input: Option<bool>,
1181    #[doc(hidden)]
1182    pub __source_breaking: fidl::marker::SourceBreaking,
1183}
1184
1185impl fidl::Persistable for PacketStreamProperties {}
1186
1187#[derive(Clone, Debug, Default, PartialEq)]
1188pub struct PacketStreamSinkPutPacketResponse {
1189    #[doc(hidden)]
1190    pub __source_breaking: fidl::marker::SourceBreaking,
1191}
1192
1193impl fidl::Persistable for PacketStreamSinkPutPacketResponse {}
1194
1195/// Format supporting PCM audio. Each frame consists of one or more
1196/// (number_of_channels) samples, stored contiguously. Within the `bytes_per_sample` allocated for
1197/// each sample, `valid_bits_per_sample` bits of data are stored in the most-significant
1198/// (left-justified) portion.
1199///
1200/// All values listed in each vector are supported. This implies a cross-product: any listed
1201/// item in one vector is supported in combination with any listed item in another vector.
1202/// When not all combinations supported by the driver can be described with one
1203/// `PcmSupportedFormats` table, `GetSupportedFormats` must return a vector with multiple
1204/// `SupportedFormats` entries.
1205///
1206/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
1207#[derive(Clone, Debug, Default, PartialEq)]
1208pub struct PcmSupportedFormats {
1209    /// Vector of possible `ChannelSets` supported.
1210    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1211    /// of optional attributes.
1212    /// Only one `ChannelSet` is allowed for each unique channel-count. As a result, no two entries
1213    /// in `channel_sets` can contain `attributes` vectors with the same length.
1214    ///
1215    /// Required.
1216    pub channel_sets: Option<Vec<ChannelSet>>,
1217    /// Vector of possible `SampleFormat`s supported.
1218    ///
1219    /// Required.
1220    pub sample_formats: Option<Vec<SampleFormat>>,
1221    /// Vector of possible bytes allocated for each sample. Values must be listed in ascending
1222    /// order. All values listed in `valid_bits_per_sample` must fit into at least the largest
1223    /// `bytes_per_sample` value.
1224    ///
1225    /// Required.
1226    pub bytes_per_sample: Option<Vec<u8>>,
1227    /// Vector of possible number of bits containing valid data, within the sample container defined
1228    /// by `bytes_per_sample`. Values must be listed in ascending order. All values listed must fit
1229    /// into the largest `bytes_per_sample` value. The valid data bits must be most-significant
1230    /// (left-justified) within the sample container, and any additional bits will be ignored.
1231    ///
1232    /// Required.
1233    pub valid_bits_per_sample: Option<Vec<u8>>,
1234    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1235    ///
1236    /// Required.
1237    pub frame_rates: Option<Vec<u32>>,
1238    #[doc(hidden)]
1239    pub __source_breaking: fidl::marker::SourceBreaking,
1240}
1241
1242impl fidl::Persistable for PcmSupportedFormats {}
1243
1244/// Plug state as returned by the driver.
1245/// If the driver reports a `plug_detect_capabilities` equal to HARDWIRED, then the driver should
1246/// respond to `WatchPlugState` only the first time it is called, with `plugged` set to true and
1247/// `plug_state_time` set to time '0'.
1248#[derive(Clone, Debug, Default, PartialEq)]
1249pub struct PlugState {
1250    /// Driver is currently plugged in. Required
1251    pub plugged: Option<bool>,
1252    /// Timestamps the information provided in the rest of the fields of this struct. Required.
1253    pub plug_state_time: Option<i64>,
1254    #[doc(hidden)]
1255    pub __source_breaking: fidl::marker::SourceBreaking,
1256}
1257
1258impl fidl::Persistable for PlugState {}
1259
1260/// Properties of the ring buffer. These values don't change once the ring buffer is created.
1261#[derive(Clone, Debug, Default, PartialEq)]
1262pub struct RingBufferProperties {
1263    /// When set to true, indicates that the ring buffer runs in a different cache coherency domain,
1264    /// and thus clients must ensure that their data writes are flushed all the way to main memory
1265    /// (during playback), or that their view of the ring buffer must be invalidated before any
1266    /// reads (during capture). This is because there may be hardware external to the CPUs that
1267    /// reads/writes main memory, bypassing the CPUs.
1268    ///
1269    /// When set to false, indicates that the ring buffer runs in the same cache coherency domain as
1270    /// the CPUs, hence the driver is not required to flush/invalidate the ring buffer.
1271    /// Note that in this case, the driver and client still must synchronize their data access, for
1272    /// instance by inserting the appropriate acquire fences before reading and releasing fences
1273    /// after writing, or (more commonly) by obeying the Producer/Consumer pattern described in
1274    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1275    ///
1276    /// Required.
1277    pub needs_cache_flush_or_invalidate: Option<bool>,
1278    /// The driver's best estimate of the time needed for the hardware to emit (during playback) or
1279    /// accept (during capture) frames, after a channel is activated by `SetActiveChannels`.
1280    ///
1281    /// The driver estimates that after `SetActiveChannels(channel)->(set_time)` enables a channel,
1282    /// its data will resume flowing at approximately `set_time` + `turn_on_delay`.
1283    /// Hardware can take time to become fully operational (e.g. due to a power state change, or
1284    /// communication delays between a Bluetooth driver's multiple hardware entities). The client
1285    /// must take this delay into account, if it is unacceptable to drop the actual audio frames
1286    /// and instead play/capture silence during this interval.
1287    /// If not included, `turn_on_delay` is unknown.
1288    ///
1289    /// Optional.
1290    pub turn_on_delay: Option<i64>,
1291    /// Size (in bytes) of the temporary buffers or FIFOs used by the driver when consuming or
1292    /// generating the ring buffer contents.
1293    ///
1294    /// The `driver_transfer_bytes` field is covered extensively in
1295    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1296    ///
1297    /// `driver_transfer_bytes` must not include the impact of delays caused by hardware or software
1298    /// processing abstracted by the driver. Those delays are communicated by `internal_delay` and
1299    /// `external_delay` fields in `DelayInfo`; they are orthogonal to this value.
1300    ///
1301    /// Required.
1302    pub driver_transfer_bytes: Option<u32>,
1303    #[doc(hidden)]
1304    pub __source_breaking: fidl::marker::SourceBreaking,
1305}
1306
1307impl fidl::Persistable for RingBufferProperties {}
1308
1309#[derive(Clone, Debug, Default, PartialEq)]
1310pub struct StreamProperties {
1311    /// A unique identifier. If not included, there is no unique id for the StreamConfig.
1312    /// `unique_id` arrays starting with 0x42, 0x54, ... (or `BT` in ASCII) are
1313    /// reserved for drivers implementing Bluetooth technologies.
1314    /// `unique_id` arrays starting with 0x55, 0x53, 0x42, ... (or `USB` in ASCII) are
1315    /// reserved for drivers implementing USB technologies.
1316    /// Note that even though the above values map to readable ASCII characters, array
1317    /// values can span the entire uint8 range (0-255).
1318    ///
1319    /// Optional.
1320    pub unique_id: Option<[u8; 16]>,
1321    /// Driver type is input (true) or output (false)
1322    ///
1323    /// Required.
1324    pub is_input: Option<bool>,
1325    /// Gain mute capability. If not included, the StreamConfig can't mute.
1326    ///
1327    /// Optional.
1328    pub can_mute: Option<bool>,
1329    /// Automatic Gain Control (AGC) capability. If not included, the StreamConfig can't AGC.
1330    ///
1331    /// Optional.
1332    pub can_agc: Option<bool>,
1333    /// Minimum gain in decibels.
1334    ///
1335    /// Required.
1336    pub min_gain_db: Option<f32>,
1337    /// Maximum gain in decibels.
1338    ///
1339    /// Required.
1340    pub max_gain_db: Option<f32>,
1341    /// Gain step in decibels, this value must not be negative, but may be zero to convey an
1342    /// effectively continuous range of values. Must not exceed `max_gain_db` - `min_gain_db`.
1343    ///
1344    /// Required.
1345    pub gain_step_db: Option<f32>,
1346    /// Plug Detect Capabilities.
1347    ///
1348    /// Required.
1349    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1350    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1351    /// If included, this string must be non-empty.
1352    ///
1353    /// Optional.
1354    pub manufacturer: Option<String>,
1355    /// UI string for the product name. If not included, the product name is unspecified.
1356    /// If included, this string must be non-empty.
1357    ///
1358    /// Optional.
1359    pub product: Option<String>,
1360    /// An identifier for the clock domain in which this hardware operates. If
1361    /// two hardware devices have the same clock domain, their clock rates are
1362    /// identical and perfectly synchronized. Although these two clocks have the
1363    /// same rate, the clock positions may be offset from each other by an
1364    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1365    /// system wide entity, such as a platform bus or global clock tree.
1366    ///
1367    /// There are two special values:
1368    ///
1369    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1370    ///    rate as the system montonic clock.
1371    ///
1372    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1373    ///    rate and is not synchronized with any known clock, not even with
1374    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1375    ///
1376    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1377    /// notification updates to recover the hardware's clock.
1378    ///
1379    /// Required.
1380    pub clock_domain: Option<u32>,
1381    #[doc(hidden)]
1382    pub __source_breaking: fidl::marker::SourceBreaking,
1383}
1384
1385impl fidl::Persistable for StreamProperties {}
1386
1387/// Supported formats for encoded audio.
1388///
1389/// This table defines a valid set of configurations. All fields are independent, which
1390/// implies a cross-product: any listed `channel_set` is supported at any listed
1391/// `frame_rate` for any listed `encoded_type`.
1392///
1393/// If a device supports multiple encoders with *different* rate/channel constraints
1394/// (e.g. AAC supports 48kHz but SBC only supports 44.1kHz), the device must
1395/// report them as separate entries in the `SupportedFormats` vector.
1396#[derive(Clone, Debug, Default, PartialEq)]
1397pub struct SupportedEncodings {
1398    /// Vector of possible `ChannelSets` supported.
1399    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1400    /// of optional attributes.
1401    ///
1402    /// Each entry in this vector must describe a unique channel count. For example, this
1403    /// vector cannot contain two different `ChannelSet` entries that both apply to a
1404    /// 2-channel configuration.
1405    ///
1406    /// Required.
1407    pub channel_sets: Option<Vec<ChannelSet>>,
1408    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1409    ///
1410    /// Required.
1411    pub frame_rates: Option<Vec<u32>>,
1412    /// The encoder types that support the configurations listed above.
1413    ///
1414    /// Required.
1415    pub encoding_types: Option<Vec<EncodingType>>,
1416    #[doc(hidden)]
1417    pub __source_breaking: fidl::marker::SourceBreaking,
1418}
1419
1420impl fidl::Persistable for SupportedEncodings {}
1421
1422/// Deprecated: Use `SupportedFormats2` instead.
1423#[derive(Clone, Debug, Default, PartialEq)]
1424pub struct SupportedFormats {
1425    pub pcm_supported_formats: Option<PcmSupportedFormats>,
1426    #[doc(hidden)]
1427    pub __source_breaking: fidl::marker::SourceBreaking,
1428}
1429
1430impl fidl::Persistable for SupportedFormats {}
1431
1432/// Either a standard or custom frame format.
1433#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1434pub enum DaiFrameFormat {
1435    /// The format type of all samples in the DAI, listed in `DaiFrameFormatStandard`.
1436    FrameFormatStandard(DaiFrameFormatStandard),
1437    /// The format type of all samples in the DAI, specified in `DaiFrameFormatCustom`.
1438    FrameFormatCustom(DaiFrameFormatCustom),
1439}
1440
1441impl DaiFrameFormat {
1442    #[inline]
1443    pub fn ordinal(&self) -> u64 {
1444        match *self {
1445            Self::FrameFormatStandard(_) => 1,
1446            Self::FrameFormatCustom(_) => 2,
1447        }
1448    }
1449}
1450
1451impl fidl::Persistable for DaiFrameFormat {}
1452
1453#[derive(Clone, Debug)]
1454pub enum Format2 {
1455    /// Format for linear PCM (uncompressed) samples.
1456    PcmFormat(PcmFormat),
1457    /// Format for encoded audio.
1458    Encoding(Encoding),
1459    #[doc(hidden)]
1460    __SourceBreaking { unknown_ordinal: u64 },
1461}
1462
1463/// Pattern that matches an unknown `Format2` member.
1464#[macro_export]
1465macro_rules! Format2Unknown {
1466    () => {
1467        _
1468    };
1469}
1470
1471// Custom PartialEq so that unknown variants are not equal to themselves.
1472impl PartialEq for Format2 {
1473    fn eq(&self, other: &Self) -> bool {
1474        match (self, other) {
1475            (Self::PcmFormat(x), Self::PcmFormat(y)) => *x == *y,
1476            (Self::Encoding(x), Self::Encoding(y)) => *x == *y,
1477            _ => false,
1478        }
1479    }
1480}
1481
1482impl Format2 {
1483    #[inline]
1484    pub fn ordinal(&self) -> u64 {
1485        match *self {
1486            Self::PcmFormat(_) => 1,
1487            Self::Encoding(_) => 2,
1488            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1489        }
1490    }
1491
1492    #[inline]
1493    pub fn unknown_variant_for_testing() -> Self {
1494        Self::__SourceBreaking { unknown_ordinal: 0 }
1495    }
1496
1497    #[inline]
1498    pub fn is_unknown(&self) -> bool {
1499        match self {
1500            Self::__SourceBreaking { .. } => true,
1501            _ => false,
1502        }
1503    }
1504}
1505
1506impl fidl::Persistable for Format2 {}
1507
1508/// All the possible formats supported by this device.
1509#[derive(Clone, Debug)]
1510pub enum SupportedFormats2 {
1511    /// Supported formats for linear PCM (uncompressed) samples, with attributes.
1512    PcmSupportedFormats(PcmSupportedFormats),
1513    /// Supported formats for non-LPCM encoded audio (e.g. AAC, MP3).
1514    SupportedEncodings(SupportedEncodings),
1515    #[doc(hidden)]
1516    __SourceBreaking { unknown_ordinal: u64 },
1517}
1518
1519/// Pattern that matches an unknown `SupportedFormats2` member.
1520#[macro_export]
1521macro_rules! SupportedFormats2Unknown {
1522    () => {
1523        _
1524    };
1525}
1526
1527// Custom PartialEq so that unknown variants are not equal to themselves.
1528impl PartialEq for SupportedFormats2 {
1529    fn eq(&self, other: &Self) -> bool {
1530        match (self, other) {
1531            (Self::PcmSupportedFormats(x), Self::PcmSupportedFormats(y)) => *x == *y,
1532            (Self::SupportedEncodings(x), Self::SupportedEncodings(y)) => *x == *y,
1533            _ => false,
1534        }
1535    }
1536}
1537
1538impl SupportedFormats2 {
1539    #[inline]
1540    pub fn ordinal(&self) -> u64 {
1541        match *self {
1542            Self::PcmSupportedFormats(_) => 1,
1543            Self::SupportedEncodings(_) => 2,
1544            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1545        }
1546    }
1547
1548    #[inline]
1549    pub fn unknown_variant_for_testing() -> Self {
1550        Self::__SourceBreaking { unknown_ordinal: 0 }
1551    }
1552
1553    #[inline]
1554    pub fn is_unknown(&self) -> bool {
1555        match self {
1556            Self::__SourceBreaking { .. } => true,
1557            _ => false,
1558        }
1559    }
1560}
1561
1562impl fidl::Persistable for SupportedFormats2 {}
1563
1564pub mod codec_ordinals {
1565    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1566    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1567    pub const RESET: u64 = 0x50757ae579a7bd6b;
1568    pub const GET_PROPERTIES: u64 = 0x7a0d138a6a1d9d90;
1569    pub const STOP: u64 = 0x5c2e380df1332dbd;
1570    pub const START: u64 = 0x329cdacb286ab00;
1571    pub const GET_DAI_FORMATS: u64 = 0xf8bbc46b4ba6a52;
1572    pub const SET_DAI_FORMAT: u64 = 0x2f829df9e5a7a1ea;
1573    pub const WATCH_PLUG_STATE: u64 = 0x182b87f935ca7326;
1574}
1575
1576pub mod codec_connector_ordinals {
1577    pub const CONNECT: u64 = 0x1413f551544026c9;
1578}
1579
1580pub mod composite_ordinals {
1581    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1582    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1583    pub const RESET: u64 = 0xac355fb98341996;
1584    pub const GET_PROPERTIES: u64 = 0x31846fa0a459942b;
1585    pub const GET_RING_BUFFER_FORMATS: u64 = 0x1d89b701b6816ac4;
1586    pub const CREATE_RING_BUFFER: u64 = 0x28c5685f85262033;
1587    pub const GET_DAI_FORMATS: u64 = 0x3cbeaed59c8f69b;
1588    pub const SET_DAI_FORMAT: u64 = 0x155acf5cc0dc8a84;
1589    pub const GET_PACKET_STREAM_FORMATS: u64 = 0x73cc47c6ad39bca7;
1590    pub const CREATE_PACKET_STREAM: u64 = 0x50e8902b756c707c;
1591}
1592
1593pub mod composite_connector_ordinals {
1594    pub const CONNECT: u64 = 0x7ee557529079e466;
1595}
1596
1597pub mod dai_ordinals {
1598    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1599    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1600    pub const RESET: u64 = 0x69e5fa9fa2f78c14;
1601    pub const GET_PROPERTIES: u64 = 0x2c25a1a66149510b;
1602    pub const GET_DAI_FORMATS: u64 = 0x1eb37b0cddf79d69;
1603    pub const GET_RING_BUFFER_FORMATS: u64 = 0x760371081d8c92e4;
1604    pub const CREATE_RING_BUFFER: u64 = 0x5af9760589a75257;
1605}
1606
1607pub mod dai_connector_ordinals {
1608    pub const CONNECT: u64 = 0x4e4db05c2eca1450;
1609}
1610
1611pub mod health_ordinals {
1612    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1613}
1614
1615pub mod packet_stream_control_ordinals {
1616    pub const GET_PROPERTIES: u64 = 0x586cf4f0f8d2771f;
1617    pub const ALLOCATE_VMOS: u64 = 0x7ff1473165ed344b;
1618    pub const DEALLOCATE_VMOS: u64 = 0x4db5cc85a7b8405b;
1619    pub const REGISTER_VMOS: u64 = 0x29c3b656a1020bfd;
1620    pub const UNREGISTER_VMOS: u64 = 0x3e3b4dbfe26b6094;
1621    pub const GET_PACKET_STREAM_SINK: u64 = 0x7394726463ebbc6a;
1622    pub const SET_PACKET_STREAM_SINK: u64 = 0xab88800e31dc0e4;
1623    pub const START: u64 = 0x3a584b94d8a6bfd0;
1624    pub const STOP: u64 = 0x703e4fafcdd7ef32;
1625}
1626
1627pub mod packet_stream_sink_ordinals {
1628    pub const PUT_PACKET: u64 = 0x25a8e35efba81f2b;
1629    pub const FLUSH_PACKETS: u64 = 0x13f16ca37ede8a4;
1630}
1631
1632pub mod ring_buffer_ordinals {
1633    pub const GET_PROPERTIES: u64 = 0x12947f061a8fe1;
1634    pub const WATCH_CLOCK_RECOVERY_POSITION_INFO: u64 = 0x694d5b898a4167e5;
1635    pub const GET_VMO: u64 = 0x44c8f4f5680e853a;
1636    pub const START: u64 = 0x5dd780a769a8892d;
1637    pub const STOP: u64 = 0x49a73d9cf1d4e110;
1638    pub const SET_ACTIVE_CHANNELS: u64 = 0x605464c1d384f309;
1639    pub const WATCH_DELAY_INFO: u64 = 0x6c1248db213fcf9f;
1640}
1641
1642pub mod stream_config_ordinals {
1643    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1644    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1645    pub const GET_PROPERTIES: u64 = 0x7d89c02f3e2d3c01;
1646    pub const GET_SUPPORTED_FORMATS: u64 = 0x448efa7850cafe7e;
1647    pub const CREATE_RING_BUFFER: u64 = 0x2afb19dd13faa1ba;
1648    pub const WATCH_GAIN_STATE: u64 = 0x4772506136ab65c1;
1649    pub const SET_GAIN: u64 = 0x3943b41498c6a384;
1650    pub const WATCH_PLUG_STATE: u64 = 0x497345a6f048b2a6;
1651}
1652
1653pub mod stream_config_connector_ordinals {
1654    pub const CONNECT: u64 = 0x22051ff3021eafec;
1655}
1656
1657mod internal {
1658    use super::*;
1659    unsafe impl fidl::encoding::TypeMarker for BufferType {
1660        type Owned = Self;
1661
1662        #[inline(always)]
1663        fn inline_align(_context: fidl::encoding::Context) -> usize {
1664            8
1665        }
1666
1667        #[inline(always)]
1668        fn inline_size(_context: fidl::encoding::Context) -> usize {
1669            8
1670        }
1671    }
1672
1673    impl fidl::encoding::ValueTypeMarker for BufferType {
1674        type Borrowed<'a> = Self;
1675        #[inline(always)]
1676        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1677            *value
1678        }
1679    }
1680
1681    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BufferType {
1682        #[inline]
1683        unsafe fn encode(
1684            self,
1685            encoder: &mut fidl::encoding::Encoder<'_, D>,
1686            offset: usize,
1687            _depth: fidl::encoding::Depth,
1688        ) -> fidl::Result<()> {
1689            encoder.debug_check_bounds::<Self>(offset);
1690            encoder.write_num(self.bits(), offset);
1691            Ok(())
1692        }
1693    }
1694
1695    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferType {
1696        #[inline(always)]
1697        fn new_empty() -> Self {
1698            Self::empty()
1699        }
1700
1701        #[inline]
1702        unsafe fn decode(
1703            &mut self,
1704            decoder: &mut fidl::encoding::Decoder<'_, D>,
1705            offset: usize,
1706            _depth: fidl::encoding::Depth,
1707        ) -> fidl::Result<()> {
1708            decoder.debug_check_bounds::<Self>(offset);
1709            let prim = decoder.read_num::<u64>(offset);
1710            *self = Self::from_bits_allow_unknown(prim);
1711            Ok(())
1712        }
1713    }
1714    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatStandard {
1715        type Owned = Self;
1716
1717        #[inline(always)]
1718        fn inline_align(_context: fidl::encoding::Context) -> usize {
1719            std::mem::align_of::<u8>()
1720        }
1721
1722        #[inline(always)]
1723        fn inline_size(_context: fidl::encoding::Context) -> usize {
1724            std::mem::size_of::<u8>()
1725        }
1726
1727        #[inline(always)]
1728        fn encode_is_copy() -> bool {
1729            true
1730        }
1731
1732        #[inline(always)]
1733        fn decode_is_copy() -> bool {
1734            false
1735        }
1736    }
1737
1738    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatStandard {
1739        type Borrowed<'a> = Self;
1740        #[inline(always)]
1741        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1742            *value
1743        }
1744    }
1745
1746    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1747        for DaiFrameFormatStandard
1748    {
1749        #[inline]
1750        unsafe fn encode(
1751            self,
1752            encoder: &mut fidl::encoding::Encoder<'_, D>,
1753            offset: usize,
1754            _depth: fidl::encoding::Depth,
1755        ) -> fidl::Result<()> {
1756            encoder.debug_check_bounds::<Self>(offset);
1757            encoder.write_num(self.into_primitive(), offset);
1758            Ok(())
1759        }
1760    }
1761
1762    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1763        for DaiFrameFormatStandard
1764    {
1765        #[inline(always)]
1766        fn new_empty() -> Self {
1767            Self::None
1768        }
1769
1770        #[inline]
1771        unsafe fn decode(
1772            &mut self,
1773            decoder: &mut fidl::encoding::Decoder<'_, D>,
1774            offset: usize,
1775            _depth: fidl::encoding::Depth,
1776        ) -> fidl::Result<()> {
1777            decoder.debug_check_bounds::<Self>(offset);
1778            let prim = decoder.read_num::<u8>(offset);
1779
1780            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1781            Ok(())
1782        }
1783    }
1784    unsafe impl fidl::encoding::TypeMarker for DaiSampleFormat {
1785        type Owned = Self;
1786
1787        #[inline(always)]
1788        fn inline_align(_context: fidl::encoding::Context) -> usize {
1789            std::mem::align_of::<u8>()
1790        }
1791
1792        #[inline(always)]
1793        fn inline_size(_context: fidl::encoding::Context) -> usize {
1794            std::mem::size_of::<u8>()
1795        }
1796
1797        #[inline(always)]
1798        fn encode_is_copy() -> bool {
1799            true
1800        }
1801
1802        #[inline(always)]
1803        fn decode_is_copy() -> bool {
1804            false
1805        }
1806    }
1807
1808    impl fidl::encoding::ValueTypeMarker for DaiSampleFormat {
1809        type Borrowed<'a> = Self;
1810        #[inline(always)]
1811        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1812            *value
1813        }
1814    }
1815
1816    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1817        for DaiSampleFormat
1818    {
1819        #[inline]
1820        unsafe fn encode(
1821            self,
1822            encoder: &mut fidl::encoding::Encoder<'_, D>,
1823            offset: usize,
1824            _depth: fidl::encoding::Depth,
1825        ) -> fidl::Result<()> {
1826            encoder.debug_check_bounds::<Self>(offset);
1827            encoder.write_num(self.into_primitive(), offset);
1828            Ok(())
1829        }
1830    }
1831
1832    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSampleFormat {
1833        #[inline(always)]
1834        fn new_empty() -> Self {
1835            Self::Pdm
1836        }
1837
1838        #[inline]
1839        unsafe fn decode(
1840            &mut self,
1841            decoder: &mut fidl::encoding::Decoder<'_, D>,
1842            offset: usize,
1843            _depth: fidl::encoding::Depth,
1844        ) -> fidl::Result<()> {
1845            decoder.debug_check_bounds::<Self>(offset);
1846            let prim = decoder.read_num::<u8>(offset);
1847
1848            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1849            Ok(())
1850        }
1851    }
1852    unsafe impl fidl::encoding::TypeMarker for DeviceType {
1853        type Owned = Self;
1854
1855        #[inline(always)]
1856        fn inline_align(_context: fidl::encoding::Context) -> usize {
1857            std::mem::align_of::<u32>()
1858        }
1859
1860        #[inline(always)]
1861        fn inline_size(_context: fidl::encoding::Context) -> usize {
1862            std::mem::size_of::<u32>()
1863        }
1864
1865        #[inline(always)]
1866        fn encode_is_copy() -> bool {
1867            false
1868        }
1869
1870        #[inline(always)]
1871        fn decode_is_copy() -> bool {
1872            false
1873        }
1874    }
1875
1876    impl fidl::encoding::ValueTypeMarker for DeviceType {
1877        type Borrowed<'a> = Self;
1878        #[inline(always)]
1879        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1880            *value
1881        }
1882    }
1883
1884    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
1885        #[inline]
1886        unsafe fn encode(
1887            self,
1888            encoder: &mut fidl::encoding::Encoder<'_, D>,
1889            offset: usize,
1890            _depth: fidl::encoding::Depth,
1891        ) -> fidl::Result<()> {
1892            encoder.debug_check_bounds::<Self>(offset);
1893            encoder.write_num(self.into_primitive(), offset);
1894            Ok(())
1895        }
1896    }
1897
1898    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
1899        #[inline(always)]
1900        fn new_empty() -> Self {
1901            Self::unknown()
1902        }
1903
1904        #[inline]
1905        unsafe fn decode(
1906            &mut self,
1907            decoder: &mut fidl::encoding::Decoder<'_, D>,
1908            offset: usize,
1909            _depth: fidl::encoding::Depth,
1910        ) -> fidl::Result<()> {
1911            decoder.debug_check_bounds::<Self>(offset);
1912            let prim = decoder.read_num::<u32>(offset);
1913
1914            *self = Self::from_primitive_allow_unknown(prim);
1915            Ok(())
1916        }
1917    }
1918    unsafe impl fidl::encoding::TypeMarker for DriverError {
1919        type Owned = Self;
1920
1921        #[inline(always)]
1922        fn inline_align(_context: fidl::encoding::Context) -> usize {
1923            std::mem::align_of::<u32>()
1924        }
1925
1926        #[inline(always)]
1927        fn inline_size(_context: fidl::encoding::Context) -> usize {
1928            std::mem::size_of::<u32>()
1929        }
1930
1931        #[inline(always)]
1932        fn encode_is_copy() -> bool {
1933            false
1934        }
1935
1936        #[inline(always)]
1937        fn decode_is_copy() -> bool {
1938            false
1939        }
1940    }
1941
1942    impl fidl::encoding::ValueTypeMarker for DriverError {
1943        type Borrowed<'a> = Self;
1944        #[inline(always)]
1945        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1946            *value
1947        }
1948    }
1949
1950    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DriverError {
1951        #[inline]
1952        unsafe fn encode(
1953            self,
1954            encoder: &mut fidl::encoding::Encoder<'_, D>,
1955            offset: usize,
1956            _depth: fidl::encoding::Depth,
1957        ) -> fidl::Result<()> {
1958            encoder.debug_check_bounds::<Self>(offset);
1959            encoder.write_num(self.into_primitive(), offset);
1960            Ok(())
1961        }
1962    }
1963
1964    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverError {
1965        #[inline(always)]
1966        fn new_empty() -> Self {
1967            Self::unknown()
1968        }
1969
1970        #[inline]
1971        unsafe fn decode(
1972            &mut self,
1973            decoder: &mut fidl::encoding::Decoder<'_, D>,
1974            offset: usize,
1975            _depth: fidl::encoding::Depth,
1976        ) -> fidl::Result<()> {
1977            decoder.debug_check_bounds::<Self>(offset);
1978            let prim = decoder.read_num::<u32>(offset);
1979
1980            *self = Self::from_primitive_allow_unknown(prim);
1981            Ok(())
1982        }
1983    }
1984    unsafe impl fidl::encoding::TypeMarker for EncodingType {
1985        type Owned = Self;
1986
1987        #[inline(always)]
1988        fn inline_align(_context: fidl::encoding::Context) -> usize {
1989            std::mem::align_of::<u32>()
1990        }
1991
1992        #[inline(always)]
1993        fn inline_size(_context: fidl::encoding::Context) -> usize {
1994            std::mem::size_of::<u32>()
1995        }
1996
1997        #[inline(always)]
1998        fn encode_is_copy() -> bool {
1999            false
2000        }
2001
2002        #[inline(always)]
2003        fn decode_is_copy() -> bool {
2004            false
2005        }
2006    }
2007
2008    impl fidl::encoding::ValueTypeMarker for EncodingType {
2009        type Borrowed<'a> = Self;
2010        #[inline(always)]
2011        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2012            *value
2013        }
2014    }
2015
2016    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EncodingType {
2017        #[inline]
2018        unsafe fn encode(
2019            self,
2020            encoder: &mut fidl::encoding::Encoder<'_, D>,
2021            offset: usize,
2022            _depth: fidl::encoding::Depth,
2023        ) -> fidl::Result<()> {
2024            encoder.debug_check_bounds::<Self>(offset);
2025            encoder.write_num(self.into_primitive(), offset);
2026            Ok(())
2027        }
2028    }
2029
2030    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncodingType {
2031        #[inline(always)]
2032        fn new_empty() -> Self {
2033            Self::unknown()
2034        }
2035
2036        #[inline]
2037        unsafe fn decode(
2038            &mut self,
2039            decoder: &mut fidl::encoding::Decoder<'_, D>,
2040            offset: usize,
2041            _depth: fidl::encoding::Depth,
2042        ) -> fidl::Result<()> {
2043            decoder.debug_check_bounds::<Self>(offset);
2044            let prim = decoder.read_num::<u32>(offset);
2045
2046            *self = Self::from_primitive_allow_unknown(prim);
2047            Ok(())
2048        }
2049    }
2050    unsafe impl fidl::encoding::TypeMarker for GetVmoError {
2051        type Owned = Self;
2052
2053        #[inline(always)]
2054        fn inline_align(_context: fidl::encoding::Context) -> usize {
2055            std::mem::align_of::<u32>()
2056        }
2057
2058        #[inline(always)]
2059        fn inline_size(_context: fidl::encoding::Context) -> usize {
2060            std::mem::size_of::<u32>()
2061        }
2062
2063        #[inline(always)]
2064        fn encode_is_copy() -> bool {
2065            true
2066        }
2067
2068        #[inline(always)]
2069        fn decode_is_copy() -> bool {
2070            false
2071        }
2072    }
2073
2074    impl fidl::encoding::ValueTypeMarker for GetVmoError {
2075        type Borrowed<'a> = Self;
2076        #[inline(always)]
2077        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2078            *value
2079        }
2080    }
2081
2082    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GetVmoError {
2083        #[inline]
2084        unsafe fn encode(
2085            self,
2086            encoder: &mut fidl::encoding::Encoder<'_, D>,
2087            offset: usize,
2088            _depth: fidl::encoding::Depth,
2089        ) -> fidl::Result<()> {
2090            encoder.debug_check_bounds::<Self>(offset);
2091            encoder.write_num(self.into_primitive(), offset);
2092            Ok(())
2093        }
2094    }
2095
2096    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetVmoError {
2097        #[inline(always)]
2098        fn new_empty() -> Self {
2099            Self::InvalidArgs
2100        }
2101
2102        #[inline]
2103        unsafe fn decode(
2104            &mut self,
2105            decoder: &mut fidl::encoding::Decoder<'_, D>,
2106            offset: usize,
2107            _depth: fidl::encoding::Depth,
2108        ) -> fidl::Result<()> {
2109            decoder.debug_check_bounds::<Self>(offset);
2110            let prim = decoder.read_num::<u32>(offset);
2111
2112            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2113            Ok(())
2114        }
2115    }
2116    unsafe impl fidl::encoding::TypeMarker for PlugDetectCapabilities {
2117        type Owned = Self;
2118
2119        #[inline(always)]
2120        fn inline_align(_context: fidl::encoding::Context) -> usize {
2121            std::mem::align_of::<u32>()
2122        }
2123
2124        #[inline(always)]
2125        fn inline_size(_context: fidl::encoding::Context) -> usize {
2126            std::mem::size_of::<u32>()
2127        }
2128
2129        #[inline(always)]
2130        fn encode_is_copy() -> bool {
2131            true
2132        }
2133
2134        #[inline(always)]
2135        fn decode_is_copy() -> bool {
2136            false
2137        }
2138    }
2139
2140    impl fidl::encoding::ValueTypeMarker for PlugDetectCapabilities {
2141        type Borrowed<'a> = Self;
2142        #[inline(always)]
2143        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2144            *value
2145        }
2146    }
2147
2148    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2149        for PlugDetectCapabilities
2150    {
2151        #[inline]
2152        unsafe fn encode(
2153            self,
2154            encoder: &mut fidl::encoding::Encoder<'_, D>,
2155            offset: usize,
2156            _depth: fidl::encoding::Depth,
2157        ) -> fidl::Result<()> {
2158            encoder.debug_check_bounds::<Self>(offset);
2159            encoder.write_num(self.into_primitive(), offset);
2160            Ok(())
2161        }
2162    }
2163
2164    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2165        for PlugDetectCapabilities
2166    {
2167        #[inline(always)]
2168        fn new_empty() -> Self {
2169            Self::Hardwired
2170        }
2171
2172        #[inline]
2173        unsafe fn decode(
2174            &mut self,
2175            decoder: &mut fidl::encoding::Decoder<'_, D>,
2176            offset: usize,
2177            _depth: fidl::encoding::Depth,
2178        ) -> fidl::Result<()> {
2179            decoder.debug_check_bounds::<Self>(offset);
2180            let prim = decoder.read_num::<u32>(offset);
2181
2182            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2183            Ok(())
2184        }
2185    }
2186    unsafe impl fidl::encoding::TypeMarker for SampleFormat {
2187        type Owned = Self;
2188
2189        #[inline(always)]
2190        fn inline_align(_context: fidl::encoding::Context) -> usize {
2191            std::mem::align_of::<u8>()
2192        }
2193
2194        #[inline(always)]
2195        fn inline_size(_context: fidl::encoding::Context) -> usize {
2196            std::mem::size_of::<u8>()
2197        }
2198
2199        #[inline(always)]
2200        fn encode_is_copy() -> bool {
2201            true
2202        }
2203
2204        #[inline(always)]
2205        fn decode_is_copy() -> bool {
2206            false
2207        }
2208    }
2209
2210    impl fidl::encoding::ValueTypeMarker for SampleFormat {
2211        type Borrowed<'a> = Self;
2212        #[inline(always)]
2213        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2214            *value
2215        }
2216    }
2217
2218    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleFormat {
2219        #[inline]
2220        unsafe fn encode(
2221            self,
2222            encoder: &mut fidl::encoding::Encoder<'_, D>,
2223            offset: usize,
2224            _depth: fidl::encoding::Depth,
2225        ) -> fidl::Result<()> {
2226            encoder.debug_check_bounds::<Self>(offset);
2227            encoder.write_num(self.into_primitive(), offset);
2228            Ok(())
2229        }
2230    }
2231
2232    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleFormat {
2233        #[inline(always)]
2234        fn new_empty() -> Self {
2235            Self::PcmSigned
2236        }
2237
2238        #[inline]
2239        unsafe fn decode(
2240            &mut self,
2241            decoder: &mut fidl::encoding::Decoder<'_, D>,
2242            offset: usize,
2243            _depth: fidl::encoding::Depth,
2244        ) -> fidl::Result<()> {
2245            decoder.debug_check_bounds::<Self>(offset);
2246            let prim = decoder.read_num::<u8>(offset);
2247
2248            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2249            Ok(())
2250        }
2251    }
2252
2253    impl fidl::encoding::ValueTypeMarker for CodecGetPropertiesResponse {
2254        type Borrowed<'a> = &'a Self;
2255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2256            value
2257        }
2258    }
2259
2260    unsafe impl fidl::encoding::TypeMarker for CodecGetPropertiesResponse {
2261        type Owned = Self;
2262
2263        #[inline(always)]
2264        fn inline_align(_context: fidl::encoding::Context) -> usize {
2265            8
2266        }
2267
2268        #[inline(always)]
2269        fn inline_size(_context: fidl::encoding::Context) -> usize {
2270            16
2271        }
2272    }
2273
2274    unsafe impl<D: fidl::encoding::ResourceDialect>
2275        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for &CodecGetPropertiesResponse
2276    {
2277        #[inline]
2278        unsafe fn encode(
2279            self,
2280            encoder: &mut fidl::encoding::Encoder<'_, D>,
2281            offset: usize,
2282            _depth: fidl::encoding::Depth,
2283        ) -> fidl::Result<()> {
2284            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2285            // Delegate to tuple encoding.
2286            fidl::encoding::Encode::<CodecGetPropertiesResponse, D>::encode(
2287                (<CodecProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
2288                encoder,
2289                offset,
2290                _depth,
2291            )
2292        }
2293    }
2294    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecProperties, D>>
2295        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for (T0,)
2296    {
2297        #[inline]
2298        unsafe fn encode(
2299            self,
2300            encoder: &mut fidl::encoding::Encoder<'_, D>,
2301            offset: usize,
2302            depth: fidl::encoding::Depth,
2303        ) -> fidl::Result<()> {
2304            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2305            // Zero out padding regions. There's no need to apply masks
2306            // because the unmasked parts will be overwritten by fields.
2307            // Write the fields.
2308            self.0.encode(encoder, offset + 0, depth)?;
2309            Ok(())
2310        }
2311    }
2312
2313    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2314        for CodecGetPropertiesResponse
2315    {
2316        #[inline(always)]
2317        fn new_empty() -> Self {
2318            Self { properties: fidl::new_empty!(CodecProperties, D) }
2319        }
2320
2321        #[inline]
2322        unsafe fn decode(
2323            &mut self,
2324            decoder: &mut fidl::encoding::Decoder<'_, D>,
2325            offset: usize,
2326            _depth: fidl::encoding::Depth,
2327        ) -> fidl::Result<()> {
2328            decoder.debug_check_bounds::<Self>(offset);
2329            // Verify that padding bytes are zero.
2330            fidl::decode!(CodecProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
2331            Ok(())
2332        }
2333    }
2334
2335    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatRequest {
2336        type Borrowed<'a> = &'a Self;
2337        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2338            value
2339        }
2340    }
2341
2342    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatRequest {
2343        type Owned = Self;
2344
2345        #[inline(always)]
2346        fn inline_align(_context: fidl::encoding::Context) -> usize {
2347            8
2348        }
2349
2350        #[inline(always)]
2351        fn inline_size(_context: fidl::encoding::Context) -> usize {
2352            48
2353        }
2354    }
2355
2356    unsafe impl<D: fidl::encoding::ResourceDialect>
2357        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for &CodecSetDaiFormatRequest
2358    {
2359        #[inline]
2360        unsafe fn encode(
2361            self,
2362            encoder: &mut fidl::encoding::Encoder<'_, D>,
2363            offset: usize,
2364            _depth: fidl::encoding::Depth,
2365        ) -> fidl::Result<()> {
2366            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2367            // Delegate to tuple encoding.
2368            fidl::encoding::Encode::<CodecSetDaiFormatRequest, D>::encode(
2369                (<DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),),
2370                encoder,
2371                offset,
2372                _depth,
2373            )
2374        }
2375    }
2376    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiFormat, D>>
2377        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for (T0,)
2378    {
2379        #[inline]
2380        unsafe fn encode(
2381            self,
2382            encoder: &mut fidl::encoding::Encoder<'_, D>,
2383            offset: usize,
2384            depth: fidl::encoding::Depth,
2385        ) -> fidl::Result<()> {
2386            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2387            // Zero out padding regions. There's no need to apply masks
2388            // because the unmasked parts will be overwritten by fields.
2389            // Write the fields.
2390            self.0.encode(encoder, offset + 0, depth)?;
2391            Ok(())
2392        }
2393    }
2394
2395    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2396        for CodecSetDaiFormatRequest
2397    {
2398        #[inline(always)]
2399        fn new_empty() -> Self {
2400            Self { format: fidl::new_empty!(DaiFormat, D) }
2401        }
2402
2403        #[inline]
2404        unsafe fn decode(
2405            &mut self,
2406            decoder: &mut fidl::encoding::Decoder<'_, D>,
2407            offset: usize,
2408            _depth: fidl::encoding::Depth,
2409        ) -> fidl::Result<()> {
2410            decoder.debug_check_bounds::<Self>(offset);
2411            // Verify that padding bytes are zero.
2412            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 0, _depth)?;
2413            Ok(())
2414        }
2415    }
2416
2417    impl fidl::encoding::ValueTypeMarker for CodecStartResponse {
2418        type Borrowed<'a> = &'a Self;
2419        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2420            value
2421        }
2422    }
2423
2424    unsafe impl fidl::encoding::TypeMarker for CodecStartResponse {
2425        type Owned = Self;
2426
2427        #[inline(always)]
2428        fn inline_align(_context: fidl::encoding::Context) -> usize {
2429            8
2430        }
2431
2432        #[inline(always)]
2433        fn inline_size(_context: fidl::encoding::Context) -> usize {
2434            8
2435        }
2436        #[inline(always)]
2437        fn encode_is_copy() -> bool {
2438            true
2439        }
2440
2441        #[inline(always)]
2442        fn decode_is_copy() -> bool {
2443            true
2444        }
2445    }
2446
2447    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStartResponse, D>
2448        for &CodecStartResponse
2449    {
2450        #[inline]
2451        unsafe fn encode(
2452            self,
2453            encoder: &mut fidl::encoding::Encoder<'_, D>,
2454            offset: usize,
2455            _depth: fidl::encoding::Depth,
2456        ) -> fidl::Result<()> {
2457            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2458            unsafe {
2459                // Copy the object into the buffer.
2460                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2461                (buf_ptr as *mut CodecStartResponse)
2462                    .write_unaligned((self as *const CodecStartResponse).read());
2463                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2464                // done second because the memcpy will write garbage to these bytes.
2465            }
2466            Ok(())
2467        }
2468    }
2469    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2470        fidl::encoding::Encode<CodecStartResponse, D> for (T0,)
2471    {
2472        #[inline]
2473        unsafe fn encode(
2474            self,
2475            encoder: &mut fidl::encoding::Encoder<'_, D>,
2476            offset: usize,
2477            depth: fidl::encoding::Depth,
2478        ) -> fidl::Result<()> {
2479            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2480            // Zero out padding regions. There's no need to apply masks
2481            // because the unmasked parts will be overwritten by fields.
2482            // Write the fields.
2483            self.0.encode(encoder, offset + 0, depth)?;
2484            Ok(())
2485        }
2486    }
2487
2488    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStartResponse {
2489        #[inline(always)]
2490        fn new_empty() -> Self {
2491            Self { start_time: fidl::new_empty!(i64, D) }
2492        }
2493
2494        #[inline]
2495        unsafe fn decode(
2496            &mut self,
2497            decoder: &mut fidl::encoding::Decoder<'_, D>,
2498            offset: usize,
2499            _depth: fidl::encoding::Depth,
2500        ) -> fidl::Result<()> {
2501            decoder.debug_check_bounds::<Self>(offset);
2502            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2503            // Verify that padding bytes are zero.
2504            // Copy from the buffer into the object.
2505            unsafe {
2506                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2507            }
2508            Ok(())
2509        }
2510    }
2511
2512    impl fidl::encoding::ValueTypeMarker for CodecStopResponse {
2513        type Borrowed<'a> = &'a Self;
2514        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2515            value
2516        }
2517    }
2518
2519    unsafe impl fidl::encoding::TypeMarker for CodecStopResponse {
2520        type Owned = Self;
2521
2522        #[inline(always)]
2523        fn inline_align(_context: fidl::encoding::Context) -> usize {
2524            8
2525        }
2526
2527        #[inline(always)]
2528        fn inline_size(_context: fidl::encoding::Context) -> usize {
2529            8
2530        }
2531        #[inline(always)]
2532        fn encode_is_copy() -> bool {
2533            true
2534        }
2535
2536        #[inline(always)]
2537        fn decode_is_copy() -> bool {
2538            true
2539        }
2540    }
2541
2542    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStopResponse, D>
2543        for &CodecStopResponse
2544    {
2545        #[inline]
2546        unsafe fn encode(
2547            self,
2548            encoder: &mut fidl::encoding::Encoder<'_, D>,
2549            offset: usize,
2550            _depth: fidl::encoding::Depth,
2551        ) -> fidl::Result<()> {
2552            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2553            unsafe {
2554                // Copy the object into the buffer.
2555                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2556                (buf_ptr as *mut CodecStopResponse)
2557                    .write_unaligned((self as *const CodecStopResponse).read());
2558                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2559                // done second because the memcpy will write garbage to these bytes.
2560            }
2561            Ok(())
2562        }
2563    }
2564    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2565        fidl::encoding::Encode<CodecStopResponse, D> for (T0,)
2566    {
2567        #[inline]
2568        unsafe fn encode(
2569            self,
2570            encoder: &mut fidl::encoding::Encoder<'_, D>,
2571            offset: usize,
2572            depth: fidl::encoding::Depth,
2573        ) -> fidl::Result<()> {
2574            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2575            // Zero out padding regions. There's no need to apply masks
2576            // because the unmasked parts will be overwritten by fields.
2577            // Write the fields.
2578            self.0.encode(encoder, offset + 0, depth)?;
2579            Ok(())
2580        }
2581    }
2582
2583    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStopResponse {
2584        #[inline(always)]
2585        fn new_empty() -> Self {
2586            Self { stop_time: fidl::new_empty!(i64, D) }
2587        }
2588
2589        #[inline]
2590        unsafe fn decode(
2591            &mut self,
2592            decoder: &mut fidl::encoding::Decoder<'_, D>,
2593            offset: usize,
2594            _depth: fidl::encoding::Depth,
2595        ) -> fidl::Result<()> {
2596            decoder.debug_check_bounds::<Self>(offset);
2597            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2598            // Verify that padding bytes are zero.
2599            // Copy from the buffer into the object.
2600            unsafe {
2601                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2602            }
2603            Ok(())
2604        }
2605    }
2606
2607    impl fidl::encoding::ValueTypeMarker for CodecWatchPlugStateResponse {
2608        type Borrowed<'a> = &'a Self;
2609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2610            value
2611        }
2612    }
2613
2614    unsafe impl fidl::encoding::TypeMarker for CodecWatchPlugStateResponse {
2615        type Owned = Self;
2616
2617        #[inline(always)]
2618        fn inline_align(_context: fidl::encoding::Context) -> usize {
2619            8
2620        }
2621
2622        #[inline(always)]
2623        fn inline_size(_context: fidl::encoding::Context) -> usize {
2624            16
2625        }
2626    }
2627
2628    unsafe impl<D: fidl::encoding::ResourceDialect>
2629        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for &CodecWatchPlugStateResponse
2630    {
2631        #[inline]
2632        unsafe fn encode(
2633            self,
2634            encoder: &mut fidl::encoding::Encoder<'_, D>,
2635            offset: usize,
2636            _depth: fidl::encoding::Depth,
2637        ) -> fidl::Result<()> {
2638            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2639            // Delegate to tuple encoding.
2640            fidl::encoding::Encode::<CodecWatchPlugStateResponse, D>::encode(
2641                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
2642                encoder,
2643                offset,
2644                _depth,
2645            )
2646        }
2647    }
2648    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
2649        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for (T0,)
2650    {
2651        #[inline]
2652        unsafe fn encode(
2653            self,
2654            encoder: &mut fidl::encoding::Encoder<'_, D>,
2655            offset: usize,
2656            depth: fidl::encoding::Depth,
2657        ) -> fidl::Result<()> {
2658            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2659            // Zero out padding regions. There's no need to apply masks
2660            // because the unmasked parts will be overwritten by fields.
2661            // Write the fields.
2662            self.0.encode(encoder, offset + 0, depth)?;
2663            Ok(())
2664        }
2665    }
2666
2667    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2668        for CodecWatchPlugStateResponse
2669    {
2670        #[inline(always)]
2671        fn new_empty() -> Self {
2672            Self { plug_state: fidl::new_empty!(PlugState, D) }
2673        }
2674
2675        #[inline]
2676        unsafe fn decode(
2677            &mut self,
2678            decoder: &mut fidl::encoding::Decoder<'_, D>,
2679            offset: usize,
2680            _depth: fidl::encoding::Depth,
2681        ) -> fidl::Result<()> {
2682            decoder.debug_check_bounds::<Self>(offset);
2683            // Verify that padding bytes are zero.
2684            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
2685            Ok(())
2686        }
2687    }
2688
2689    impl fidl::encoding::ValueTypeMarker for CodecGetDaiFormatsResponse {
2690        type Borrowed<'a> = &'a Self;
2691        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2692            value
2693        }
2694    }
2695
2696    unsafe impl fidl::encoding::TypeMarker for CodecGetDaiFormatsResponse {
2697        type Owned = Self;
2698
2699        #[inline(always)]
2700        fn inline_align(_context: fidl::encoding::Context) -> usize {
2701            8
2702        }
2703
2704        #[inline(always)]
2705        fn inline_size(_context: fidl::encoding::Context) -> usize {
2706            16
2707        }
2708    }
2709
2710    unsafe impl<D: fidl::encoding::ResourceDialect>
2711        fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for &CodecGetDaiFormatsResponse
2712    {
2713        #[inline]
2714        unsafe fn encode(
2715            self,
2716            encoder: &mut fidl::encoding::Encoder<'_, D>,
2717            offset: usize,
2718            _depth: fidl::encoding::Depth,
2719        ) -> fidl::Result<()> {
2720            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2721            // Delegate to tuple encoding.
2722            fidl::encoding::Encode::<CodecGetDaiFormatsResponse, D>::encode(
2723                (
2724                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.formats),
2725                ),
2726                encoder, offset, _depth
2727            )
2728        }
2729    }
2730    unsafe impl<
2731        D: fidl::encoding::ResourceDialect,
2732        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2733    > fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for (T0,)
2734    {
2735        #[inline]
2736        unsafe fn encode(
2737            self,
2738            encoder: &mut fidl::encoding::Encoder<'_, D>,
2739            offset: usize,
2740            depth: fidl::encoding::Depth,
2741        ) -> fidl::Result<()> {
2742            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2743            // Zero out padding regions. There's no need to apply masks
2744            // because the unmasked parts will be overwritten by fields.
2745            // Write the fields.
2746            self.0.encode(encoder, offset + 0, depth)?;
2747            Ok(())
2748        }
2749    }
2750
2751    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2752        for CodecGetDaiFormatsResponse
2753    {
2754        #[inline(always)]
2755        fn new_empty() -> Self {
2756            Self { formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D) }
2757        }
2758
2759        #[inline]
2760        unsafe fn decode(
2761            &mut self,
2762            decoder: &mut fidl::encoding::Decoder<'_, D>,
2763            offset: usize,
2764            _depth: fidl::encoding::Depth,
2765        ) -> fidl::Result<()> {
2766            decoder.debug_check_bounds::<Self>(offset);
2767            // Verify that padding bytes are zero.
2768            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.formats, decoder, offset + 0, _depth)?;
2769            Ok(())
2770        }
2771    }
2772
2773    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatResponse {
2774        type Borrowed<'a> = &'a Self;
2775        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2776            value
2777        }
2778    }
2779
2780    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatResponse {
2781        type Owned = Self;
2782
2783        #[inline(always)]
2784        fn inline_align(_context: fidl::encoding::Context) -> usize {
2785            8
2786        }
2787
2788        #[inline(always)]
2789        fn inline_size(_context: fidl::encoding::Context) -> usize {
2790            16
2791        }
2792    }
2793
2794    unsafe impl<D: fidl::encoding::ResourceDialect>
2795        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for &CodecSetDaiFormatResponse
2796    {
2797        #[inline]
2798        unsafe fn encode(
2799            self,
2800            encoder: &mut fidl::encoding::Encoder<'_, D>,
2801            offset: usize,
2802            _depth: fidl::encoding::Depth,
2803        ) -> fidl::Result<()> {
2804            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2805            // Delegate to tuple encoding.
2806            fidl::encoding::Encode::<CodecSetDaiFormatResponse, D>::encode(
2807                (<CodecFormatInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
2808                encoder,
2809                offset,
2810                _depth,
2811            )
2812        }
2813    }
2814    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecFormatInfo, D>>
2815        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for (T0,)
2816    {
2817        #[inline]
2818        unsafe fn encode(
2819            self,
2820            encoder: &mut fidl::encoding::Encoder<'_, D>,
2821            offset: usize,
2822            depth: fidl::encoding::Depth,
2823        ) -> fidl::Result<()> {
2824            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2825            // Zero out padding regions. There's no need to apply masks
2826            // because the unmasked parts will be overwritten by fields.
2827            // Write the fields.
2828            self.0.encode(encoder, offset + 0, depth)?;
2829            Ok(())
2830        }
2831    }
2832
2833    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2834        for CodecSetDaiFormatResponse
2835    {
2836        #[inline(always)]
2837        fn new_empty() -> Self {
2838            Self { state: fidl::new_empty!(CodecFormatInfo, D) }
2839        }
2840
2841        #[inline]
2842        unsafe fn decode(
2843            &mut self,
2844            decoder: &mut fidl::encoding::Decoder<'_, D>,
2845            offset: usize,
2846            _depth: fidl::encoding::Depth,
2847        ) -> fidl::Result<()> {
2848            decoder.debug_check_bounds::<Self>(offset);
2849            // Verify that padding bytes are zero.
2850            fidl::decode!(CodecFormatInfo, D, &mut self.state, decoder, offset + 0, _depth)?;
2851            Ok(())
2852        }
2853    }
2854
2855    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsRequest {
2856        type Borrowed<'a> = &'a Self;
2857        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2858            value
2859        }
2860    }
2861
2862    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsRequest {
2863        type Owned = Self;
2864
2865        #[inline(always)]
2866        fn inline_align(_context: fidl::encoding::Context) -> usize {
2867            8
2868        }
2869
2870        #[inline(always)]
2871        fn inline_size(_context: fidl::encoding::Context) -> usize {
2872            8
2873        }
2874        #[inline(always)]
2875        fn encode_is_copy() -> bool {
2876            true
2877        }
2878
2879        #[inline(always)]
2880        fn decode_is_copy() -> bool {
2881            true
2882        }
2883    }
2884
2885    unsafe impl<D: fidl::encoding::ResourceDialect>
2886        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D>
2887        for &CompositeGetDaiFormatsRequest
2888    {
2889        #[inline]
2890        unsafe fn encode(
2891            self,
2892            encoder: &mut fidl::encoding::Encoder<'_, D>,
2893            offset: usize,
2894            _depth: fidl::encoding::Depth,
2895        ) -> fidl::Result<()> {
2896            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
2897            unsafe {
2898                // Copy the object into the buffer.
2899                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2900                (buf_ptr as *mut CompositeGetDaiFormatsRequest)
2901                    .write_unaligned((self as *const CompositeGetDaiFormatsRequest).read());
2902                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2903                // done second because the memcpy will write garbage to these bytes.
2904            }
2905            Ok(())
2906        }
2907    }
2908    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2909        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D> for (T0,)
2910    {
2911        #[inline]
2912        unsafe fn encode(
2913            self,
2914            encoder: &mut fidl::encoding::Encoder<'_, D>,
2915            offset: usize,
2916            depth: fidl::encoding::Depth,
2917        ) -> fidl::Result<()> {
2918            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
2919            // Zero out padding regions. There's no need to apply masks
2920            // because the unmasked parts will be overwritten by fields.
2921            // Write the fields.
2922            self.0.encode(encoder, offset + 0, depth)?;
2923            Ok(())
2924        }
2925    }
2926
2927    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2928        for CompositeGetDaiFormatsRequest
2929    {
2930        #[inline(always)]
2931        fn new_empty() -> Self {
2932            Self { processing_element_id: fidl::new_empty!(u64, D) }
2933        }
2934
2935        #[inline]
2936        unsafe fn decode(
2937            &mut self,
2938            decoder: &mut fidl::encoding::Decoder<'_, D>,
2939            offset: usize,
2940            _depth: fidl::encoding::Depth,
2941        ) -> fidl::Result<()> {
2942            decoder.debug_check_bounds::<Self>(offset);
2943            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2944            // Verify that padding bytes are zero.
2945            // Copy from the buffer into the object.
2946            unsafe {
2947                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2948            }
2949            Ok(())
2950        }
2951    }
2952
2953    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsRequest {
2954        type Borrowed<'a> = &'a Self;
2955        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2956            value
2957        }
2958    }
2959
2960    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsRequest {
2961        type Owned = Self;
2962
2963        #[inline(always)]
2964        fn inline_align(_context: fidl::encoding::Context) -> usize {
2965            8
2966        }
2967
2968        #[inline(always)]
2969        fn inline_size(_context: fidl::encoding::Context) -> usize {
2970            8
2971        }
2972        #[inline(always)]
2973        fn encode_is_copy() -> bool {
2974            true
2975        }
2976
2977        #[inline(always)]
2978        fn decode_is_copy() -> bool {
2979            true
2980        }
2981    }
2982
2983    unsafe impl<D: fidl::encoding::ResourceDialect>
2984        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D>
2985        for &CompositeGetPacketStreamFormatsRequest
2986    {
2987        #[inline]
2988        unsafe fn encode(
2989            self,
2990            encoder: &mut fidl::encoding::Encoder<'_, D>,
2991            offset: usize,
2992            _depth: fidl::encoding::Depth,
2993        ) -> fidl::Result<()> {
2994            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
2995            unsafe {
2996                // Copy the object into the buffer.
2997                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2998                (buf_ptr as *mut CompositeGetPacketStreamFormatsRequest).write_unaligned(
2999                    (self as *const CompositeGetPacketStreamFormatsRequest).read(),
3000                );
3001                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3002                // done second because the memcpy will write garbage to these bytes.
3003            }
3004            Ok(())
3005        }
3006    }
3007    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3008        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D> for (T0,)
3009    {
3010        #[inline]
3011        unsafe fn encode(
3012            self,
3013            encoder: &mut fidl::encoding::Encoder<'_, D>,
3014            offset: usize,
3015            depth: fidl::encoding::Depth,
3016        ) -> fidl::Result<()> {
3017            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3018            // Zero out padding regions. There's no need to apply masks
3019            // because the unmasked parts will be overwritten by fields.
3020            // Write the fields.
3021            self.0.encode(encoder, offset + 0, depth)?;
3022            Ok(())
3023        }
3024    }
3025
3026    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3027        for CompositeGetPacketStreamFormatsRequest
3028    {
3029        #[inline(always)]
3030        fn new_empty() -> Self {
3031            Self { processing_element_id: fidl::new_empty!(u64, D) }
3032        }
3033
3034        #[inline]
3035        unsafe fn decode(
3036            &mut self,
3037            decoder: &mut fidl::encoding::Decoder<'_, D>,
3038            offset: usize,
3039            _depth: fidl::encoding::Depth,
3040        ) -> fidl::Result<()> {
3041            decoder.debug_check_bounds::<Self>(offset);
3042            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3043            // Verify that padding bytes are zero.
3044            // Copy from the buffer into the object.
3045            unsafe {
3046                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3047            }
3048            Ok(())
3049        }
3050    }
3051
3052    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsRequest {
3053        type Borrowed<'a> = &'a Self;
3054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3055            value
3056        }
3057    }
3058
3059    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsRequest {
3060        type Owned = Self;
3061
3062        #[inline(always)]
3063        fn inline_align(_context: fidl::encoding::Context) -> usize {
3064            8
3065        }
3066
3067        #[inline(always)]
3068        fn inline_size(_context: fidl::encoding::Context) -> usize {
3069            8
3070        }
3071        #[inline(always)]
3072        fn encode_is_copy() -> bool {
3073            true
3074        }
3075
3076        #[inline(always)]
3077        fn decode_is_copy() -> bool {
3078            true
3079        }
3080    }
3081
3082    unsafe impl<D: fidl::encoding::ResourceDialect>
3083        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D>
3084        for &CompositeGetRingBufferFormatsRequest
3085    {
3086        #[inline]
3087        unsafe fn encode(
3088            self,
3089            encoder: &mut fidl::encoding::Encoder<'_, D>,
3090            offset: usize,
3091            _depth: fidl::encoding::Depth,
3092        ) -> fidl::Result<()> {
3093            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3094            unsafe {
3095                // Copy the object into the buffer.
3096                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3097                (buf_ptr as *mut CompositeGetRingBufferFormatsRequest)
3098                    .write_unaligned((self as *const CompositeGetRingBufferFormatsRequest).read());
3099                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3100                // done second because the memcpy will write garbage to these bytes.
3101            }
3102            Ok(())
3103        }
3104    }
3105    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3106        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D> for (T0,)
3107    {
3108        #[inline]
3109        unsafe fn encode(
3110            self,
3111            encoder: &mut fidl::encoding::Encoder<'_, D>,
3112            offset: usize,
3113            depth: fidl::encoding::Depth,
3114        ) -> fidl::Result<()> {
3115            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3116            // Zero out padding regions. There's no need to apply masks
3117            // because the unmasked parts will be overwritten by fields.
3118            // Write the fields.
3119            self.0.encode(encoder, offset + 0, depth)?;
3120            Ok(())
3121        }
3122    }
3123
3124    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3125        for CompositeGetRingBufferFormatsRequest
3126    {
3127        #[inline(always)]
3128        fn new_empty() -> Self {
3129            Self { processing_element_id: fidl::new_empty!(u64, D) }
3130        }
3131
3132        #[inline]
3133        unsafe fn decode(
3134            &mut self,
3135            decoder: &mut fidl::encoding::Decoder<'_, D>,
3136            offset: usize,
3137            _depth: fidl::encoding::Depth,
3138        ) -> fidl::Result<()> {
3139            decoder.debug_check_bounds::<Self>(offset);
3140            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3141            // Verify that padding bytes are zero.
3142            // Copy from the buffer into the object.
3143            unsafe {
3144                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3145            }
3146            Ok(())
3147        }
3148    }
3149
3150    impl fidl::encoding::ValueTypeMarker for CompositeSetDaiFormatRequest {
3151        type Borrowed<'a> = &'a Self;
3152        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3153            value
3154        }
3155    }
3156
3157    unsafe impl fidl::encoding::TypeMarker for CompositeSetDaiFormatRequest {
3158        type Owned = Self;
3159
3160        #[inline(always)]
3161        fn inline_align(_context: fidl::encoding::Context) -> usize {
3162            8
3163        }
3164
3165        #[inline(always)]
3166        fn inline_size(_context: fidl::encoding::Context) -> usize {
3167            56
3168        }
3169    }
3170
3171    unsafe impl<D: fidl::encoding::ResourceDialect>
3172        fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for &CompositeSetDaiFormatRequest
3173    {
3174        #[inline]
3175        unsafe fn encode(
3176            self,
3177            encoder: &mut fidl::encoding::Encoder<'_, D>,
3178            offset: usize,
3179            _depth: fidl::encoding::Depth,
3180        ) -> fidl::Result<()> {
3181            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3182            // Delegate to tuple encoding.
3183            fidl::encoding::Encode::<CompositeSetDaiFormatRequest, D>::encode(
3184                (
3185                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.processing_element_id),
3186                    <DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),
3187                ),
3188                encoder,
3189                offset,
3190                _depth,
3191            )
3192        }
3193    }
3194    unsafe impl<
3195        D: fidl::encoding::ResourceDialect,
3196        T0: fidl::encoding::Encode<u64, D>,
3197        T1: fidl::encoding::Encode<DaiFormat, D>,
3198    > fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for (T0, T1)
3199    {
3200        #[inline]
3201        unsafe fn encode(
3202            self,
3203            encoder: &mut fidl::encoding::Encoder<'_, D>,
3204            offset: usize,
3205            depth: fidl::encoding::Depth,
3206        ) -> fidl::Result<()> {
3207            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3208            // Zero out padding regions. There's no need to apply masks
3209            // because the unmasked parts will be overwritten by fields.
3210            // Write the fields.
3211            self.0.encode(encoder, offset + 0, depth)?;
3212            self.1.encode(encoder, offset + 8, depth)?;
3213            Ok(())
3214        }
3215    }
3216
3217    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3218        for CompositeSetDaiFormatRequest
3219    {
3220        #[inline(always)]
3221        fn new_empty() -> Self {
3222            Self {
3223                processing_element_id: fidl::new_empty!(u64, D),
3224                format: fidl::new_empty!(DaiFormat, D),
3225            }
3226        }
3227
3228        #[inline]
3229        unsafe fn decode(
3230            &mut self,
3231            decoder: &mut fidl::encoding::Decoder<'_, D>,
3232            offset: usize,
3233            _depth: fidl::encoding::Depth,
3234        ) -> fidl::Result<()> {
3235            decoder.debug_check_bounds::<Self>(offset);
3236            // Verify that padding bytes are zero.
3237            fidl::decode!(u64, D, &mut self.processing_element_id, decoder, offset + 0, _depth)?;
3238            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 8, _depth)?;
3239            Ok(())
3240        }
3241    }
3242
3243    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsResponse {
3244        type Borrowed<'a> = &'a Self;
3245        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3246            value
3247        }
3248    }
3249
3250    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsResponse {
3251        type Owned = Self;
3252
3253        #[inline(always)]
3254        fn inline_align(_context: fidl::encoding::Context) -> usize {
3255            8
3256        }
3257
3258        #[inline(always)]
3259        fn inline_size(_context: fidl::encoding::Context) -> usize {
3260            16
3261        }
3262    }
3263
3264    unsafe impl<D: fidl::encoding::ResourceDialect>
3265        fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D>
3266        for &CompositeGetDaiFormatsResponse
3267    {
3268        #[inline]
3269        unsafe fn encode(
3270            self,
3271            encoder: &mut fidl::encoding::Encoder<'_, D>,
3272            offset: usize,
3273            _depth: fidl::encoding::Depth,
3274        ) -> fidl::Result<()> {
3275            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3276            // Delegate to tuple encoding.
3277            fidl::encoding::Encode::<CompositeGetDaiFormatsResponse, D>::encode(
3278                (
3279                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
3280                ),
3281                encoder, offset, _depth
3282            )
3283        }
3284    }
3285    unsafe impl<
3286        D: fidl::encoding::ResourceDialect,
3287        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
3288    > fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D> for (T0,)
3289    {
3290        #[inline]
3291        unsafe fn encode(
3292            self,
3293            encoder: &mut fidl::encoding::Encoder<'_, D>,
3294            offset: usize,
3295            depth: fidl::encoding::Depth,
3296        ) -> fidl::Result<()> {
3297            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3298            // Zero out padding regions. There's no need to apply masks
3299            // because the unmasked parts will be overwritten by fields.
3300            // Write the fields.
3301            self.0.encode(encoder, offset + 0, depth)?;
3302            Ok(())
3303        }
3304    }
3305
3306    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3307        for CompositeGetDaiFormatsResponse
3308    {
3309        #[inline(always)]
3310        fn new_empty() -> Self {
3311            Self {
3312                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
3313            }
3314        }
3315
3316        #[inline]
3317        unsafe fn decode(
3318            &mut self,
3319            decoder: &mut fidl::encoding::Decoder<'_, D>,
3320            offset: usize,
3321            _depth: fidl::encoding::Depth,
3322        ) -> fidl::Result<()> {
3323            decoder.debug_check_bounds::<Self>(offset);
3324            // Verify that padding bytes are zero.
3325            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
3326            Ok(())
3327        }
3328    }
3329
3330    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsResponse {
3331        type Borrowed<'a> = &'a Self;
3332        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3333            value
3334        }
3335    }
3336
3337    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsResponse {
3338        type Owned = Self;
3339
3340        #[inline(always)]
3341        fn inline_align(_context: fidl::encoding::Context) -> usize {
3342            8
3343        }
3344
3345        #[inline(always)]
3346        fn inline_size(_context: fidl::encoding::Context) -> usize {
3347            16
3348        }
3349    }
3350
3351    unsafe impl<D: fidl::encoding::ResourceDialect>
3352        fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D>
3353        for &CompositeGetPacketStreamFormatsResponse
3354    {
3355        #[inline]
3356        unsafe fn encode(
3357            self,
3358            encoder: &mut fidl::encoding::Encoder<'_, D>,
3359            offset: usize,
3360            _depth: fidl::encoding::Depth,
3361        ) -> fidl::Result<()> {
3362            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3363            // Delegate to tuple encoding.
3364            fidl::encoding::Encode::<CompositeGetPacketStreamFormatsResponse, D>::encode(
3365                (
3366                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.packet_stream_formats),
3367                ),
3368                encoder, offset, _depth
3369            )
3370        }
3371    }
3372    unsafe impl<
3373        D: fidl::encoding::ResourceDialect,
3374        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3375    > fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D> for (T0,)
3376    {
3377        #[inline]
3378        unsafe fn encode(
3379            self,
3380            encoder: &mut fidl::encoding::Encoder<'_, D>,
3381            offset: usize,
3382            depth: fidl::encoding::Depth,
3383        ) -> fidl::Result<()> {
3384            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3385            // Zero out padding regions. There's no need to apply masks
3386            // because the unmasked parts will be overwritten by fields.
3387            // Write the fields.
3388            self.0.encode(encoder, offset + 0, depth)?;
3389            Ok(())
3390        }
3391    }
3392
3393    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3394        for CompositeGetPacketStreamFormatsResponse
3395    {
3396        #[inline(always)]
3397        fn new_empty() -> Self {
3398            Self {
3399                packet_stream_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3400            }
3401        }
3402
3403        #[inline]
3404        unsafe fn decode(
3405            &mut self,
3406            decoder: &mut fidl::encoding::Decoder<'_, D>,
3407            offset: usize,
3408            _depth: fidl::encoding::Depth,
3409        ) -> fidl::Result<()> {
3410            decoder.debug_check_bounds::<Self>(offset);
3411            // Verify that padding bytes are zero.
3412            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.packet_stream_formats, decoder, offset + 0, _depth)?;
3413            Ok(())
3414        }
3415    }
3416
3417    impl fidl::encoding::ValueTypeMarker for CompositeGetPropertiesResponse {
3418        type Borrowed<'a> = &'a Self;
3419        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3420            value
3421        }
3422    }
3423
3424    unsafe impl fidl::encoding::TypeMarker for CompositeGetPropertiesResponse {
3425        type Owned = Self;
3426
3427        #[inline(always)]
3428        fn inline_align(_context: fidl::encoding::Context) -> usize {
3429            8
3430        }
3431
3432        #[inline(always)]
3433        fn inline_size(_context: fidl::encoding::Context) -> usize {
3434            16
3435        }
3436    }
3437
3438    unsafe impl<D: fidl::encoding::ResourceDialect>
3439        fidl::encoding::Encode<CompositeGetPropertiesResponse, D>
3440        for &CompositeGetPropertiesResponse
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::<CompositeGetPropertiesResponse>(offset);
3450            // Delegate to tuple encoding.
3451            fidl::encoding::Encode::<CompositeGetPropertiesResponse, D>::encode(
3452                (<CompositeProperties as fidl::encoding::ValueTypeMarker>::borrow(
3453                    &self.properties,
3454                ),),
3455                encoder,
3456                offset,
3457                _depth,
3458            )
3459        }
3460    }
3461    unsafe impl<
3462        D: fidl::encoding::ResourceDialect,
3463        T0: fidl::encoding::Encode<CompositeProperties, D>,
3464    > fidl::encoding::Encode<CompositeGetPropertiesResponse, D> for (T0,)
3465    {
3466        #[inline]
3467        unsafe fn encode(
3468            self,
3469            encoder: &mut fidl::encoding::Encoder<'_, D>,
3470            offset: usize,
3471            depth: fidl::encoding::Depth,
3472        ) -> fidl::Result<()> {
3473            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3474            // Zero out padding regions. There's no need to apply masks
3475            // because the unmasked parts will be overwritten by fields.
3476            // Write the fields.
3477            self.0.encode(encoder, offset + 0, depth)?;
3478            Ok(())
3479        }
3480    }
3481
3482    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3483        for CompositeGetPropertiesResponse
3484    {
3485        #[inline(always)]
3486        fn new_empty() -> Self {
3487            Self { properties: fidl::new_empty!(CompositeProperties, D) }
3488        }
3489
3490        #[inline]
3491        unsafe fn decode(
3492            &mut self,
3493            decoder: &mut fidl::encoding::Decoder<'_, D>,
3494            offset: usize,
3495            _depth: fidl::encoding::Depth,
3496        ) -> fidl::Result<()> {
3497            decoder.debug_check_bounds::<Self>(offset);
3498            // Verify that padding bytes are zero.
3499            fidl::decode!(
3500                CompositeProperties,
3501                D,
3502                &mut self.properties,
3503                decoder,
3504                offset + 0,
3505                _depth
3506            )?;
3507            Ok(())
3508        }
3509    }
3510
3511    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsResponse {
3512        type Borrowed<'a> = &'a Self;
3513        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3514            value
3515        }
3516    }
3517
3518    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsResponse {
3519        type Owned = Self;
3520
3521        #[inline(always)]
3522        fn inline_align(_context: fidl::encoding::Context) -> usize {
3523            8
3524        }
3525
3526        #[inline(always)]
3527        fn inline_size(_context: fidl::encoding::Context) -> usize {
3528            16
3529        }
3530    }
3531
3532    unsafe impl<D: fidl::encoding::ResourceDialect>
3533        fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D>
3534        for &CompositeGetRingBufferFormatsResponse
3535    {
3536        #[inline]
3537        unsafe fn encode(
3538            self,
3539            encoder: &mut fidl::encoding::Encoder<'_, D>,
3540            offset: usize,
3541            _depth: fidl::encoding::Depth,
3542        ) -> fidl::Result<()> {
3543            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3544            // Delegate to tuple encoding.
3545            fidl::encoding::Encode::<CompositeGetRingBufferFormatsResponse, D>::encode(
3546                (
3547                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
3548                ),
3549                encoder, offset, _depth
3550            )
3551        }
3552    }
3553    unsafe impl<
3554        D: fidl::encoding::ResourceDialect,
3555        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3556    > fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D> for (T0,)
3557    {
3558        #[inline]
3559        unsafe fn encode(
3560            self,
3561            encoder: &mut fidl::encoding::Encoder<'_, D>,
3562            offset: usize,
3563            depth: fidl::encoding::Depth,
3564        ) -> fidl::Result<()> {
3565            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3566            // Zero out padding regions. There's no need to apply masks
3567            // because the unmasked parts will be overwritten by fields.
3568            // Write the fields.
3569            self.0.encode(encoder, offset + 0, depth)?;
3570            Ok(())
3571        }
3572    }
3573
3574    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3575        for CompositeGetRingBufferFormatsResponse
3576    {
3577        #[inline(always)]
3578        fn new_empty() -> Self {
3579            Self {
3580                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3581            }
3582        }
3583
3584        #[inline]
3585        unsafe fn decode(
3586            &mut self,
3587            decoder: &mut fidl::encoding::Decoder<'_, D>,
3588            offset: usize,
3589            _depth: fidl::encoding::Depth,
3590        ) -> fidl::Result<()> {
3591            decoder.debug_check_bounds::<Self>(offset);
3592            // Verify that padding bytes are zero.
3593            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
3594            Ok(())
3595        }
3596    }
3597
3598    impl fidl::encoding::ValueTypeMarker for DaiFormat {
3599        type Borrowed<'a> = &'a Self;
3600        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3601            value
3602        }
3603    }
3604
3605    unsafe impl fidl::encoding::TypeMarker for DaiFormat {
3606        type Owned = Self;
3607
3608        #[inline(always)]
3609        fn inline_align(_context: fidl::encoding::Context) -> usize {
3610            8
3611        }
3612
3613        #[inline(always)]
3614        fn inline_size(_context: fidl::encoding::Context) -> usize {
3615            48
3616        }
3617    }
3618
3619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFormat, D>
3620        for &DaiFormat
3621    {
3622        #[inline]
3623        unsafe fn encode(
3624            self,
3625            encoder: &mut fidl::encoding::Encoder<'_, D>,
3626            offset: usize,
3627            _depth: fidl::encoding::Depth,
3628        ) -> fidl::Result<()> {
3629            encoder.debug_check_bounds::<DaiFormat>(offset);
3630            // Delegate to tuple encoding.
3631            fidl::encoding::Encode::<DaiFormat, D>::encode(
3632                (
3633                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3634                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_to_use_bitmask),
3635                    <DaiSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
3636                        &self.sample_format,
3637                    ),
3638                    <DaiFrameFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_format),
3639                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
3640                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3641                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3642                ),
3643                encoder,
3644                offset,
3645                _depth,
3646            )
3647        }
3648    }
3649    unsafe impl<
3650        D: fidl::encoding::ResourceDialect,
3651        T0: fidl::encoding::Encode<u32, D>,
3652        T1: fidl::encoding::Encode<u64, D>,
3653        T2: fidl::encoding::Encode<DaiSampleFormat, D>,
3654        T3: fidl::encoding::Encode<DaiFrameFormat, D>,
3655        T4: fidl::encoding::Encode<u32, D>,
3656        T5: fidl::encoding::Encode<u8, D>,
3657        T6: fidl::encoding::Encode<u8, D>,
3658    > fidl::encoding::Encode<DaiFormat, D> for (T0, T1, T2, T3, T4, T5, T6)
3659    {
3660        #[inline]
3661        unsafe fn encode(
3662            self,
3663            encoder: &mut fidl::encoding::Encoder<'_, D>,
3664            offset: usize,
3665            depth: fidl::encoding::Depth,
3666        ) -> fidl::Result<()> {
3667            encoder.debug_check_bounds::<DaiFormat>(offset);
3668            // Zero out padding regions. There's no need to apply masks
3669            // because the unmasked parts will be overwritten by fields.
3670            unsafe {
3671                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3672                (ptr as *mut u64).write_unaligned(0);
3673            }
3674            unsafe {
3675                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3676                (ptr as *mut u64).write_unaligned(0);
3677            }
3678            unsafe {
3679                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
3680                (ptr as *mut u64).write_unaligned(0);
3681            }
3682            // Write the fields.
3683            self.0.encode(encoder, offset + 0, depth)?;
3684            self.1.encode(encoder, offset + 8, depth)?;
3685            self.2.encode(encoder, offset + 16, depth)?;
3686            self.3.encode(encoder, offset + 24, depth)?;
3687            self.4.encode(encoder, offset + 40, depth)?;
3688            self.5.encode(encoder, offset + 44, depth)?;
3689            self.6.encode(encoder, offset + 45, depth)?;
3690            Ok(())
3691        }
3692    }
3693
3694    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFormat {
3695        #[inline(always)]
3696        fn new_empty() -> Self {
3697            Self {
3698                number_of_channels: fidl::new_empty!(u32, D),
3699                channels_to_use_bitmask: fidl::new_empty!(u64, D),
3700                sample_format: fidl::new_empty!(DaiSampleFormat, D),
3701                frame_format: fidl::new_empty!(DaiFrameFormat, D),
3702                frame_rate: fidl::new_empty!(u32, D),
3703                bits_per_slot: fidl::new_empty!(u8, D),
3704                bits_per_sample: fidl::new_empty!(u8, D),
3705            }
3706        }
3707
3708        #[inline]
3709        unsafe fn decode(
3710            &mut self,
3711            decoder: &mut fidl::encoding::Decoder<'_, D>,
3712            offset: usize,
3713            _depth: fidl::encoding::Depth,
3714        ) -> fidl::Result<()> {
3715            decoder.debug_check_bounds::<Self>(offset);
3716            // Verify that padding bytes are zero.
3717            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3718            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3719            let mask = 0xffffffff00000000u64;
3720            let maskedval = padval & mask;
3721            if maskedval != 0 {
3722                return Err(fidl::Error::NonZeroPadding {
3723                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3724                });
3725            }
3726            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3727            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3728            let mask = 0xffffffffffffff00u64;
3729            let maskedval = padval & mask;
3730            if maskedval != 0 {
3731                return Err(fidl::Error::NonZeroPadding {
3732                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3733                });
3734            }
3735            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
3736            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3737            let mask = 0xffff000000000000u64;
3738            let maskedval = padval & mask;
3739            if maskedval != 0 {
3740                return Err(fidl::Error::NonZeroPadding {
3741                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
3742                });
3743            }
3744            fidl::decode!(u32, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3745            fidl::decode!(u64, D, &mut self.channels_to_use_bitmask, decoder, offset + 8, _depth)?;
3746            fidl::decode!(
3747                DaiSampleFormat,
3748                D,
3749                &mut self.sample_format,
3750                decoder,
3751                offset + 16,
3752                _depth
3753            )?;
3754            fidl::decode!(DaiFrameFormat, D, &mut self.frame_format, decoder, offset + 24, _depth)?;
3755            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 40, _depth)?;
3756            fidl::decode!(u8, D, &mut self.bits_per_slot, decoder, offset + 44, _depth)?;
3757            fidl::decode!(u8, D, &mut self.bits_per_sample, decoder, offset + 45, _depth)?;
3758            Ok(())
3759        }
3760    }
3761
3762    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatCustom {
3763        type Borrowed<'a> = &'a Self;
3764        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3765            value
3766        }
3767    }
3768
3769    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatCustom {
3770        type Owned = Self;
3771
3772        #[inline(always)]
3773        fn inline_align(_context: fidl::encoding::Context) -> usize {
3774            1
3775        }
3776
3777        #[inline(always)]
3778        fn inline_size(_context: fidl::encoding::Context) -> usize {
3779            4
3780        }
3781    }
3782
3783    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormatCustom, D>
3784        for &DaiFrameFormatCustom
3785    {
3786        #[inline]
3787        unsafe fn encode(
3788            self,
3789            encoder: &mut fidl::encoding::Encoder<'_, D>,
3790            offset: usize,
3791            _depth: fidl::encoding::Depth,
3792        ) -> fidl::Result<()> {
3793            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3794            // Delegate to tuple encoding.
3795            fidl::encoding::Encode::<DaiFrameFormatCustom, D>::encode(
3796                (
3797                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.left_justified),
3798                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.sclk_on_raising),
3799                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_sclks_offset),
3800                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_size),
3801                ),
3802                encoder,
3803                offset,
3804                _depth,
3805            )
3806        }
3807    }
3808    unsafe impl<
3809        D: fidl::encoding::ResourceDialect,
3810        T0: fidl::encoding::Encode<bool, D>,
3811        T1: fidl::encoding::Encode<bool, D>,
3812        T2: fidl::encoding::Encode<i8, D>,
3813        T3: fidl::encoding::Encode<u8, D>,
3814    > fidl::encoding::Encode<DaiFrameFormatCustom, D> for (T0, T1, T2, T3)
3815    {
3816        #[inline]
3817        unsafe fn encode(
3818            self,
3819            encoder: &mut fidl::encoding::Encoder<'_, D>,
3820            offset: usize,
3821            depth: fidl::encoding::Depth,
3822        ) -> fidl::Result<()> {
3823            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3824            // Zero out padding regions. There's no need to apply masks
3825            // because the unmasked parts will be overwritten by fields.
3826            // Write the fields.
3827            self.0.encode(encoder, offset + 0, depth)?;
3828            self.1.encode(encoder, offset + 1, depth)?;
3829            self.2.encode(encoder, offset + 2, depth)?;
3830            self.3.encode(encoder, offset + 3, depth)?;
3831            Ok(())
3832        }
3833    }
3834
3835    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormatCustom {
3836        #[inline(always)]
3837        fn new_empty() -> Self {
3838            Self {
3839                left_justified: fidl::new_empty!(bool, D),
3840                sclk_on_raising: fidl::new_empty!(bool, D),
3841                frame_sync_sclks_offset: fidl::new_empty!(i8, D),
3842                frame_sync_size: fidl::new_empty!(u8, D),
3843            }
3844        }
3845
3846        #[inline]
3847        unsafe fn decode(
3848            &mut self,
3849            decoder: &mut fidl::encoding::Decoder<'_, D>,
3850            offset: usize,
3851            _depth: fidl::encoding::Depth,
3852        ) -> fidl::Result<()> {
3853            decoder.debug_check_bounds::<Self>(offset);
3854            // Verify that padding bytes are zero.
3855            fidl::decode!(bool, D, &mut self.left_justified, decoder, offset + 0, _depth)?;
3856            fidl::decode!(bool, D, &mut self.sclk_on_raising, decoder, offset + 1, _depth)?;
3857            fidl::decode!(i8, D, &mut self.frame_sync_sclks_offset, decoder, offset + 2, _depth)?;
3858            fidl::decode!(u8, D, &mut self.frame_sync_size, decoder, offset + 3, _depth)?;
3859            Ok(())
3860        }
3861    }
3862
3863    impl fidl::encoding::ValueTypeMarker for DaiGetPropertiesResponse {
3864        type Borrowed<'a> = &'a Self;
3865        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3866            value
3867        }
3868    }
3869
3870    unsafe impl fidl::encoding::TypeMarker for DaiGetPropertiesResponse {
3871        type Owned = Self;
3872
3873        #[inline(always)]
3874        fn inline_align(_context: fidl::encoding::Context) -> usize {
3875            8
3876        }
3877
3878        #[inline(always)]
3879        fn inline_size(_context: fidl::encoding::Context) -> usize {
3880            16
3881        }
3882    }
3883
3884    unsafe impl<D: fidl::encoding::ResourceDialect>
3885        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for &DaiGetPropertiesResponse
3886    {
3887        #[inline]
3888        unsafe fn encode(
3889            self,
3890            encoder: &mut fidl::encoding::Encoder<'_, D>,
3891            offset: usize,
3892            _depth: fidl::encoding::Depth,
3893        ) -> fidl::Result<()> {
3894            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
3895            // Delegate to tuple encoding.
3896            fidl::encoding::Encode::<DaiGetPropertiesResponse, D>::encode(
3897                (<DaiProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
3898                encoder,
3899                offset,
3900                _depth,
3901            )
3902        }
3903    }
3904    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiProperties, D>>
3905        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for (T0,)
3906    {
3907        #[inline]
3908        unsafe fn encode(
3909            self,
3910            encoder: &mut fidl::encoding::Encoder<'_, D>,
3911            offset: usize,
3912            depth: fidl::encoding::Depth,
3913        ) -> fidl::Result<()> {
3914            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
3915            // Zero out padding regions. There's no need to apply masks
3916            // because the unmasked parts will be overwritten by fields.
3917            // Write the fields.
3918            self.0.encode(encoder, offset + 0, depth)?;
3919            Ok(())
3920        }
3921    }
3922
3923    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3924        for DaiGetPropertiesResponse
3925    {
3926        #[inline(always)]
3927        fn new_empty() -> Self {
3928            Self { properties: fidl::new_empty!(DaiProperties, D) }
3929        }
3930
3931        #[inline]
3932        unsafe fn decode(
3933            &mut self,
3934            decoder: &mut fidl::encoding::Decoder<'_, D>,
3935            offset: usize,
3936            _depth: fidl::encoding::Depth,
3937        ) -> fidl::Result<()> {
3938            decoder.debug_check_bounds::<Self>(offset);
3939            // Verify that padding bytes are zero.
3940            fidl::decode!(DaiProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
3941            Ok(())
3942        }
3943    }
3944
3945    impl fidl::encoding::ValueTypeMarker for DaiSupportedFormats {
3946        type Borrowed<'a> = &'a Self;
3947        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3948            value
3949        }
3950    }
3951
3952    unsafe impl fidl::encoding::TypeMarker for DaiSupportedFormats {
3953        type Owned = Self;
3954
3955        #[inline(always)]
3956        fn inline_align(_context: fidl::encoding::Context) -> usize {
3957            8
3958        }
3959
3960        #[inline(always)]
3961        fn inline_size(_context: fidl::encoding::Context) -> usize {
3962            96
3963        }
3964    }
3965
3966    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiSupportedFormats, D>
3967        for &DaiSupportedFormats
3968    {
3969        #[inline]
3970        unsafe fn encode(
3971            self,
3972            encoder: &mut fidl::encoding::Encoder<'_, D>,
3973            offset: usize,
3974            _depth: fidl::encoding::Depth,
3975        ) -> fidl::Result<()> {
3976            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
3977            // Delegate to tuple encoding.
3978            fidl::encoding::Encode::<DaiSupportedFormats, D>::encode(
3979                (
3980                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3981                    <fidl::encoding::Vector<DaiSampleFormat, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_formats),
3982                    <fidl::encoding::Vector<DaiFrameFormat, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_formats),
3983                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rates),
3984                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3985                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3986                ),
3987                encoder, offset, _depth
3988            )
3989        }
3990    }
3991    unsafe impl<
3992        D: fidl::encoding::ResourceDialect,
3993        T0: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
3994        T1: fidl::encoding::Encode<fidl::encoding::Vector<DaiSampleFormat, 4>, D>,
3995        T2: fidl::encoding::Encode<fidl::encoding::Vector<DaiFrameFormat, 64>, D>,
3996        T3: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
3997        T4: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
3998        T5: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
3999    > fidl::encoding::Encode<DaiSupportedFormats, D> for (T0, T1, T2, T3, T4, T5)
4000    {
4001        #[inline]
4002        unsafe fn encode(
4003            self,
4004            encoder: &mut fidl::encoding::Encoder<'_, D>,
4005            offset: usize,
4006            depth: fidl::encoding::Depth,
4007        ) -> fidl::Result<()> {
4008            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4009            // Zero out padding regions. There's no need to apply masks
4010            // because the unmasked parts will be overwritten by fields.
4011            // Write the fields.
4012            self.0.encode(encoder, offset + 0, depth)?;
4013            self.1.encode(encoder, offset + 16, depth)?;
4014            self.2.encode(encoder, offset + 32, depth)?;
4015            self.3.encode(encoder, offset + 48, depth)?;
4016            self.4.encode(encoder, offset + 64, depth)?;
4017            self.5.encode(encoder, offset + 80, depth)?;
4018            Ok(())
4019        }
4020    }
4021
4022    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSupportedFormats {
4023        #[inline(always)]
4024        fn new_empty() -> Self {
4025            Self {
4026                number_of_channels: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4027                sample_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSampleFormat, 4>, D),
4028                frame_formats: fidl::new_empty!(fidl::encoding::Vector<DaiFrameFormat, 64>, D),
4029                frame_rates: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4030                bits_per_slot: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4031                bits_per_sample: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4032            }
4033        }
4034
4035        #[inline]
4036        unsafe fn decode(
4037            &mut self,
4038            decoder: &mut fidl::encoding::Decoder<'_, D>,
4039            offset: usize,
4040            _depth: fidl::encoding::Depth,
4041        ) -> fidl::Result<()> {
4042            decoder.debug_check_bounds::<Self>(offset);
4043            // Verify that padding bytes are zero.
4044            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4045            fidl::decode!(fidl::encoding::Vector<DaiSampleFormat, 4>, D, &mut self.sample_formats, decoder, offset + 16, _depth)?;
4046            fidl::decode!(fidl::encoding::Vector<DaiFrameFormat, 64>, D, &mut self.frame_formats, decoder, offset + 32, _depth)?;
4047            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.frame_rates, decoder, offset + 48, _depth)?;
4048            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_slot, decoder, offset + 64, _depth)?;
4049            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_sample, decoder, offset + 80, _depth)?;
4050            Ok(())
4051        }
4052    }
4053
4054    impl fidl::encoding::ValueTypeMarker for DaiGetDaiFormatsResponse {
4055        type Borrowed<'a> = &'a Self;
4056        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4057            value
4058        }
4059    }
4060
4061    unsafe impl fidl::encoding::TypeMarker for DaiGetDaiFormatsResponse {
4062        type Owned = Self;
4063
4064        #[inline(always)]
4065        fn inline_align(_context: fidl::encoding::Context) -> usize {
4066            8
4067        }
4068
4069        #[inline(always)]
4070        fn inline_size(_context: fidl::encoding::Context) -> usize {
4071            16
4072        }
4073    }
4074
4075    unsafe impl<D: fidl::encoding::ResourceDialect>
4076        fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for &DaiGetDaiFormatsResponse
4077    {
4078        #[inline]
4079        unsafe fn encode(
4080            self,
4081            encoder: &mut fidl::encoding::Encoder<'_, D>,
4082            offset: usize,
4083            _depth: fidl::encoding::Depth,
4084        ) -> fidl::Result<()> {
4085            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4086            // Delegate to tuple encoding.
4087            fidl::encoding::Encode::<DaiGetDaiFormatsResponse, D>::encode(
4088                (
4089                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
4090                ),
4091                encoder, offset, _depth
4092            )
4093        }
4094    }
4095    unsafe impl<
4096        D: fidl::encoding::ResourceDialect,
4097        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
4098    > fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for (T0,)
4099    {
4100        #[inline]
4101        unsafe fn encode(
4102            self,
4103            encoder: &mut fidl::encoding::Encoder<'_, D>,
4104            offset: usize,
4105            depth: fidl::encoding::Depth,
4106        ) -> fidl::Result<()> {
4107            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4108            // Zero out padding regions. There's no need to apply masks
4109            // because the unmasked parts will be overwritten by fields.
4110            // Write the fields.
4111            self.0.encode(encoder, offset + 0, depth)?;
4112            Ok(())
4113        }
4114    }
4115
4116    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4117        for DaiGetDaiFormatsResponse
4118    {
4119        #[inline(always)]
4120        fn new_empty() -> Self {
4121            Self {
4122                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
4123            }
4124        }
4125
4126        #[inline]
4127        unsafe fn decode(
4128            &mut self,
4129            decoder: &mut fidl::encoding::Decoder<'_, D>,
4130            offset: usize,
4131            _depth: fidl::encoding::Depth,
4132        ) -> fidl::Result<()> {
4133            decoder.debug_check_bounds::<Self>(offset);
4134            // Verify that padding bytes are zero.
4135            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
4136            Ok(())
4137        }
4138    }
4139
4140    impl fidl::encoding::ValueTypeMarker for DaiGetRingBufferFormatsResponse {
4141        type Borrowed<'a> = &'a Self;
4142        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4143            value
4144        }
4145    }
4146
4147    unsafe impl fidl::encoding::TypeMarker for DaiGetRingBufferFormatsResponse {
4148        type Owned = Self;
4149
4150        #[inline(always)]
4151        fn inline_align(_context: fidl::encoding::Context) -> usize {
4152            8
4153        }
4154
4155        #[inline(always)]
4156        fn inline_size(_context: fidl::encoding::Context) -> usize {
4157            16
4158        }
4159    }
4160
4161    unsafe impl<D: fidl::encoding::ResourceDialect>
4162        fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D>
4163        for &DaiGetRingBufferFormatsResponse
4164    {
4165        #[inline]
4166        unsafe fn encode(
4167            self,
4168            encoder: &mut fidl::encoding::Encoder<'_, D>,
4169            offset: usize,
4170            _depth: fidl::encoding::Depth,
4171        ) -> fidl::Result<()> {
4172            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4173            // Delegate to tuple encoding.
4174            fidl::encoding::Encode::<DaiGetRingBufferFormatsResponse, D>::encode(
4175                (
4176                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
4177                ),
4178                encoder, offset, _depth
4179            )
4180        }
4181    }
4182    unsafe impl<
4183        D: fidl::encoding::ResourceDialect,
4184        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
4185    > fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D> for (T0,)
4186    {
4187        #[inline]
4188        unsafe fn encode(
4189            self,
4190            encoder: &mut fidl::encoding::Encoder<'_, D>,
4191            offset: usize,
4192            depth: fidl::encoding::Depth,
4193        ) -> fidl::Result<()> {
4194            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4195            // Zero out padding regions. There's no need to apply masks
4196            // because the unmasked parts will be overwritten by fields.
4197            // Write the fields.
4198            self.0.encode(encoder, offset + 0, depth)?;
4199            Ok(())
4200        }
4201    }
4202
4203    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4204        for DaiGetRingBufferFormatsResponse
4205    {
4206        #[inline(always)]
4207        fn new_empty() -> Self {
4208            Self {
4209                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
4210            }
4211        }
4212
4213        #[inline]
4214        unsafe fn decode(
4215            &mut self,
4216            decoder: &mut fidl::encoding::Decoder<'_, D>,
4217            offset: usize,
4218            _depth: fidl::encoding::Depth,
4219        ) -> fidl::Result<()> {
4220            decoder.debug_check_bounds::<Self>(offset);
4221            // Verify that padding bytes are zero.
4222            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
4223            Ok(())
4224        }
4225    }
4226
4227    impl fidl::encoding::ValueTypeMarker for HealthGetHealthStateResponse {
4228        type Borrowed<'a> = &'a Self;
4229        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4230            value
4231        }
4232    }
4233
4234    unsafe impl fidl::encoding::TypeMarker for HealthGetHealthStateResponse {
4235        type Owned = Self;
4236
4237        #[inline(always)]
4238        fn inline_align(_context: fidl::encoding::Context) -> usize {
4239            8
4240        }
4241
4242        #[inline(always)]
4243        fn inline_size(_context: fidl::encoding::Context) -> usize {
4244            16
4245        }
4246    }
4247
4248    unsafe impl<D: fidl::encoding::ResourceDialect>
4249        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for &HealthGetHealthStateResponse
4250    {
4251        #[inline]
4252        unsafe fn encode(
4253            self,
4254            encoder: &mut fidl::encoding::Encoder<'_, D>,
4255            offset: usize,
4256            _depth: fidl::encoding::Depth,
4257        ) -> fidl::Result<()> {
4258            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4259            // Delegate to tuple encoding.
4260            fidl::encoding::Encode::<HealthGetHealthStateResponse, D>::encode(
4261                (<HealthState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
4262                encoder,
4263                offset,
4264                _depth,
4265            )
4266        }
4267    }
4268    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HealthState, D>>
4269        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for (T0,)
4270    {
4271        #[inline]
4272        unsafe fn encode(
4273            self,
4274            encoder: &mut fidl::encoding::Encoder<'_, D>,
4275            offset: usize,
4276            depth: fidl::encoding::Depth,
4277        ) -> fidl::Result<()> {
4278            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4279            // Zero out padding regions. There's no need to apply masks
4280            // because the unmasked parts will be overwritten by fields.
4281            // Write the fields.
4282            self.0.encode(encoder, offset + 0, depth)?;
4283            Ok(())
4284        }
4285    }
4286
4287    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4288        for HealthGetHealthStateResponse
4289    {
4290        #[inline(always)]
4291        fn new_empty() -> Self {
4292            Self { state: fidl::new_empty!(HealthState, D) }
4293        }
4294
4295        #[inline]
4296        unsafe fn decode(
4297            &mut self,
4298            decoder: &mut fidl::encoding::Decoder<'_, D>,
4299            offset: usize,
4300            _depth: fidl::encoding::Depth,
4301        ) -> fidl::Result<()> {
4302            decoder.debug_check_bounds::<Self>(offset);
4303            // Verify that padding bytes are zero.
4304            fidl::decode!(HealthState, D, &mut self.state, decoder, offset + 0, _depth)?;
4305            Ok(())
4306        }
4307    }
4308
4309    impl fidl::encoding::ValueTypeMarker for PacketStreamControlGetPropertiesResponse {
4310        type Borrowed<'a> = &'a Self;
4311        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4312            value
4313        }
4314    }
4315
4316    unsafe impl fidl::encoding::TypeMarker for PacketStreamControlGetPropertiesResponse {
4317        type Owned = Self;
4318
4319        #[inline(always)]
4320        fn inline_align(_context: fidl::encoding::Context) -> usize {
4321            8
4322        }
4323
4324        #[inline(always)]
4325        fn inline_size(_context: fidl::encoding::Context) -> usize {
4326            16
4327        }
4328    }
4329
4330    unsafe impl<D: fidl::encoding::ResourceDialect>
4331        fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D>
4332        for &PacketStreamControlGetPropertiesResponse
4333    {
4334        #[inline]
4335        unsafe fn encode(
4336            self,
4337            encoder: &mut fidl::encoding::Encoder<'_, D>,
4338            offset: usize,
4339            _depth: fidl::encoding::Depth,
4340        ) -> fidl::Result<()> {
4341            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4342            // Delegate to tuple encoding.
4343            fidl::encoding::Encode::<PacketStreamControlGetPropertiesResponse, D>::encode(
4344                (<PacketStreamProperties as fidl::encoding::ValueTypeMarker>::borrow(
4345                    &self.properties,
4346                ),),
4347                encoder,
4348                offset,
4349                _depth,
4350            )
4351        }
4352    }
4353    unsafe impl<
4354        D: fidl::encoding::ResourceDialect,
4355        T0: fidl::encoding::Encode<PacketStreamProperties, D>,
4356    > fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D> for (T0,)
4357    {
4358        #[inline]
4359        unsafe fn encode(
4360            self,
4361            encoder: &mut fidl::encoding::Encoder<'_, D>,
4362            offset: usize,
4363            depth: fidl::encoding::Depth,
4364        ) -> fidl::Result<()> {
4365            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4366            // Zero out padding regions. There's no need to apply masks
4367            // because the unmasked parts will be overwritten by fields.
4368            // Write the fields.
4369            self.0.encode(encoder, offset + 0, depth)?;
4370            Ok(())
4371        }
4372    }
4373
4374    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4375        for PacketStreamControlGetPropertiesResponse
4376    {
4377        #[inline(always)]
4378        fn new_empty() -> Self {
4379            Self { properties: fidl::new_empty!(PacketStreamProperties, D) }
4380        }
4381
4382        #[inline]
4383        unsafe fn decode(
4384            &mut self,
4385            decoder: &mut fidl::encoding::Decoder<'_, D>,
4386            offset: usize,
4387            _depth: fidl::encoding::Depth,
4388        ) -> fidl::Result<()> {
4389            decoder.debug_check_bounds::<Self>(offset);
4390            // Verify that padding bytes are zero.
4391            fidl::decode!(
4392                PacketStreamProperties,
4393                D,
4394                &mut self.properties,
4395                decoder,
4396                offset + 0,
4397                _depth
4398            )?;
4399            Ok(())
4400        }
4401    }
4402
4403    impl fidl::encoding::ValueTypeMarker for PcmFormat {
4404        type Borrowed<'a> = &'a Self;
4405        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4406            value
4407        }
4408    }
4409
4410    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
4411        type Owned = Self;
4412
4413        #[inline(always)]
4414        fn inline_align(_context: fidl::encoding::Context) -> usize {
4415            4
4416        }
4417
4418        #[inline(always)]
4419        fn inline_size(_context: fidl::encoding::Context) -> usize {
4420            8
4421        }
4422    }
4423
4424    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
4425        for &PcmFormat
4426    {
4427        #[inline]
4428        unsafe fn encode(
4429            self,
4430            encoder: &mut fidl::encoding::Encoder<'_, D>,
4431            offset: usize,
4432            _depth: fidl::encoding::Depth,
4433        ) -> fidl::Result<()> {
4434            encoder.debug_check_bounds::<PcmFormat>(offset);
4435            // Delegate to tuple encoding.
4436            fidl::encoding::Encode::<PcmFormat, D>::encode(
4437                (
4438                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4439                    <SampleFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_format),
4440                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bytes_per_sample),
4441                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.valid_bits_per_sample),
4442                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
4443                ),
4444                encoder,
4445                offset,
4446                _depth,
4447            )
4448        }
4449    }
4450    unsafe impl<
4451        D: fidl::encoding::ResourceDialect,
4452        T0: fidl::encoding::Encode<u8, D>,
4453        T1: fidl::encoding::Encode<SampleFormat, D>,
4454        T2: fidl::encoding::Encode<u8, D>,
4455        T3: fidl::encoding::Encode<u8, D>,
4456        T4: fidl::encoding::Encode<u32, D>,
4457    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3, T4)
4458    {
4459        #[inline]
4460        unsafe fn encode(
4461            self,
4462            encoder: &mut fidl::encoding::Encoder<'_, D>,
4463            offset: usize,
4464            depth: fidl::encoding::Depth,
4465        ) -> fidl::Result<()> {
4466            encoder.debug_check_bounds::<PcmFormat>(offset);
4467            // Zero out padding regions. There's no need to apply masks
4468            // because the unmasked parts will be overwritten by fields.
4469            // Write the fields.
4470            self.0.encode(encoder, offset + 0, depth)?;
4471            self.1.encode(encoder, offset + 1, depth)?;
4472            self.2.encode(encoder, offset + 2, depth)?;
4473            self.3.encode(encoder, offset + 3, depth)?;
4474            self.4.encode(encoder, offset + 4, depth)?;
4475            Ok(())
4476        }
4477    }
4478
4479    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
4480        #[inline(always)]
4481        fn new_empty() -> Self {
4482            Self {
4483                number_of_channels: fidl::new_empty!(u8, D),
4484                sample_format: fidl::new_empty!(SampleFormat, D),
4485                bytes_per_sample: fidl::new_empty!(u8, D),
4486                valid_bits_per_sample: fidl::new_empty!(u8, D),
4487                frame_rate: fidl::new_empty!(u32, D),
4488            }
4489        }
4490
4491        #[inline]
4492        unsafe fn decode(
4493            &mut self,
4494            decoder: &mut fidl::encoding::Decoder<'_, D>,
4495            offset: usize,
4496            _depth: fidl::encoding::Depth,
4497        ) -> fidl::Result<()> {
4498            decoder.debug_check_bounds::<Self>(offset);
4499            // Verify that padding bytes are zero.
4500            fidl::decode!(u8, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4501            fidl::decode!(SampleFormat, D, &mut self.sample_format, decoder, offset + 1, _depth)?;
4502            fidl::decode!(u8, D, &mut self.bytes_per_sample, decoder, offset + 2, _depth)?;
4503            fidl::decode!(u8, D, &mut self.valid_bits_per_sample, decoder, offset + 3, _depth)?;
4504            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 4, _depth)?;
4505            Ok(())
4506        }
4507    }
4508
4509    impl fidl::encoding::ValueTypeMarker for RingBufferGetPropertiesResponse {
4510        type Borrowed<'a> = &'a Self;
4511        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4512            value
4513        }
4514    }
4515
4516    unsafe impl fidl::encoding::TypeMarker for RingBufferGetPropertiesResponse {
4517        type Owned = Self;
4518
4519        #[inline(always)]
4520        fn inline_align(_context: fidl::encoding::Context) -> usize {
4521            8
4522        }
4523
4524        #[inline(always)]
4525        fn inline_size(_context: fidl::encoding::Context) -> usize {
4526            16
4527        }
4528    }
4529
4530    unsafe impl<D: fidl::encoding::ResourceDialect>
4531        fidl::encoding::Encode<RingBufferGetPropertiesResponse, D>
4532        for &RingBufferGetPropertiesResponse
4533    {
4534        #[inline]
4535        unsafe fn encode(
4536            self,
4537            encoder: &mut fidl::encoding::Encoder<'_, D>,
4538            offset: usize,
4539            _depth: fidl::encoding::Depth,
4540        ) -> fidl::Result<()> {
4541            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4542            // Delegate to tuple encoding.
4543            fidl::encoding::Encode::<RingBufferGetPropertiesResponse, D>::encode(
4544                (<RingBufferProperties as fidl::encoding::ValueTypeMarker>::borrow(
4545                    &self.properties,
4546                ),),
4547                encoder,
4548                offset,
4549                _depth,
4550            )
4551        }
4552    }
4553    unsafe impl<
4554        D: fidl::encoding::ResourceDialect,
4555        T0: fidl::encoding::Encode<RingBufferProperties, D>,
4556    > fidl::encoding::Encode<RingBufferGetPropertiesResponse, D> for (T0,)
4557    {
4558        #[inline]
4559        unsafe fn encode(
4560            self,
4561            encoder: &mut fidl::encoding::Encoder<'_, D>,
4562            offset: usize,
4563            depth: fidl::encoding::Depth,
4564        ) -> fidl::Result<()> {
4565            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4566            // Zero out padding regions. There's no need to apply masks
4567            // because the unmasked parts will be overwritten by fields.
4568            // Write the fields.
4569            self.0.encode(encoder, offset + 0, depth)?;
4570            Ok(())
4571        }
4572    }
4573
4574    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4575        for RingBufferGetPropertiesResponse
4576    {
4577        #[inline(always)]
4578        fn new_empty() -> Self {
4579            Self { properties: fidl::new_empty!(RingBufferProperties, D) }
4580        }
4581
4582        #[inline]
4583        unsafe fn decode(
4584            &mut self,
4585            decoder: &mut fidl::encoding::Decoder<'_, D>,
4586            offset: usize,
4587            _depth: fidl::encoding::Depth,
4588        ) -> fidl::Result<()> {
4589            decoder.debug_check_bounds::<Self>(offset);
4590            // Verify that padding bytes are zero.
4591            fidl::decode!(
4592                RingBufferProperties,
4593                D,
4594                &mut self.properties,
4595                decoder,
4596                offset + 0,
4597                _depth
4598            )?;
4599            Ok(())
4600        }
4601    }
4602
4603    impl fidl::encoding::ValueTypeMarker for RingBufferGetVmoRequest {
4604        type Borrowed<'a> = &'a Self;
4605        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4606            value
4607        }
4608    }
4609
4610    unsafe impl fidl::encoding::TypeMarker for RingBufferGetVmoRequest {
4611        type Owned = Self;
4612
4613        #[inline(always)]
4614        fn inline_align(_context: fidl::encoding::Context) -> usize {
4615            4
4616        }
4617
4618        #[inline(always)]
4619        fn inline_size(_context: fidl::encoding::Context) -> usize {
4620            8
4621        }
4622        #[inline(always)]
4623        fn encode_is_copy() -> bool {
4624            true
4625        }
4626
4627        #[inline(always)]
4628        fn decode_is_copy() -> bool {
4629            true
4630        }
4631    }
4632
4633    unsafe impl<D: fidl::encoding::ResourceDialect>
4634        fidl::encoding::Encode<RingBufferGetVmoRequest, D> for &RingBufferGetVmoRequest
4635    {
4636        #[inline]
4637        unsafe fn encode(
4638            self,
4639            encoder: &mut fidl::encoding::Encoder<'_, D>,
4640            offset: usize,
4641            _depth: fidl::encoding::Depth,
4642        ) -> fidl::Result<()> {
4643            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4644            unsafe {
4645                // Copy the object into the buffer.
4646                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4647                (buf_ptr as *mut RingBufferGetVmoRequest)
4648                    .write_unaligned((self as *const RingBufferGetVmoRequest).read());
4649                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4650                // done second because the memcpy will write garbage to these bytes.
4651            }
4652            Ok(())
4653        }
4654    }
4655    unsafe impl<
4656        D: fidl::encoding::ResourceDialect,
4657        T0: fidl::encoding::Encode<u32, D>,
4658        T1: fidl::encoding::Encode<u32, D>,
4659    > fidl::encoding::Encode<RingBufferGetVmoRequest, D> for (T0, T1)
4660    {
4661        #[inline]
4662        unsafe fn encode(
4663            self,
4664            encoder: &mut fidl::encoding::Encoder<'_, D>,
4665            offset: usize,
4666            depth: fidl::encoding::Depth,
4667        ) -> fidl::Result<()> {
4668            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4669            // Zero out padding regions. There's no need to apply masks
4670            // because the unmasked parts will be overwritten by fields.
4671            // Write the fields.
4672            self.0.encode(encoder, offset + 0, depth)?;
4673            self.1.encode(encoder, offset + 4, depth)?;
4674            Ok(())
4675        }
4676    }
4677
4678    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4679        for RingBufferGetVmoRequest
4680    {
4681        #[inline(always)]
4682        fn new_empty() -> Self {
4683            Self {
4684                min_frames: fidl::new_empty!(u32, D),
4685                clock_recovery_notifications_per_ring: fidl::new_empty!(u32, D),
4686            }
4687        }
4688
4689        #[inline]
4690        unsafe fn decode(
4691            &mut self,
4692            decoder: &mut fidl::encoding::Decoder<'_, D>,
4693            offset: usize,
4694            _depth: fidl::encoding::Depth,
4695        ) -> fidl::Result<()> {
4696            decoder.debug_check_bounds::<Self>(offset);
4697            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4698            // Verify that padding bytes are zero.
4699            // Copy from the buffer into the object.
4700            unsafe {
4701                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4702            }
4703            Ok(())
4704        }
4705    }
4706
4707    impl fidl::encoding::ValueTypeMarker for RingBufferPositionInfo {
4708        type Borrowed<'a> = &'a Self;
4709        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4710            value
4711        }
4712    }
4713
4714    unsafe impl fidl::encoding::TypeMarker for RingBufferPositionInfo {
4715        type Owned = Self;
4716
4717        #[inline(always)]
4718        fn inline_align(_context: fidl::encoding::Context) -> usize {
4719            8
4720        }
4721
4722        #[inline(always)]
4723        fn inline_size(_context: fidl::encoding::Context) -> usize {
4724            16
4725        }
4726    }
4727
4728    unsafe impl<D: fidl::encoding::ResourceDialect>
4729        fidl::encoding::Encode<RingBufferPositionInfo, D> for &RingBufferPositionInfo
4730    {
4731        #[inline]
4732        unsafe fn encode(
4733            self,
4734            encoder: &mut fidl::encoding::Encoder<'_, D>,
4735            offset: usize,
4736            _depth: fidl::encoding::Depth,
4737        ) -> fidl::Result<()> {
4738            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4739            unsafe {
4740                // Copy the object into the buffer.
4741                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4742                (buf_ptr as *mut RingBufferPositionInfo)
4743                    .write_unaligned((self as *const RingBufferPositionInfo).read());
4744                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4745                // done second because the memcpy will write garbage to these bytes.
4746                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4747                let padding_mask = 0xffffffff00000000u64;
4748                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4749            }
4750            Ok(())
4751        }
4752    }
4753    unsafe impl<
4754        D: fidl::encoding::ResourceDialect,
4755        T0: fidl::encoding::Encode<i64, D>,
4756        T1: fidl::encoding::Encode<u32, D>,
4757    > fidl::encoding::Encode<RingBufferPositionInfo, D> for (T0, T1)
4758    {
4759        #[inline]
4760        unsafe fn encode(
4761            self,
4762            encoder: &mut fidl::encoding::Encoder<'_, D>,
4763            offset: usize,
4764            depth: fidl::encoding::Depth,
4765        ) -> fidl::Result<()> {
4766            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4767            // Zero out padding regions. There's no need to apply masks
4768            // because the unmasked parts will be overwritten by fields.
4769            unsafe {
4770                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4771                (ptr as *mut u64).write_unaligned(0);
4772            }
4773            // Write the fields.
4774            self.0.encode(encoder, offset + 0, depth)?;
4775            self.1.encode(encoder, offset + 8, depth)?;
4776            Ok(())
4777        }
4778    }
4779
4780    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4781        for RingBufferPositionInfo
4782    {
4783        #[inline(always)]
4784        fn new_empty() -> Self {
4785            Self { timestamp: fidl::new_empty!(i64, D), position: fidl::new_empty!(u32, D) }
4786        }
4787
4788        #[inline]
4789        unsafe fn decode(
4790            &mut self,
4791            decoder: &mut fidl::encoding::Decoder<'_, D>,
4792            offset: usize,
4793            _depth: fidl::encoding::Depth,
4794        ) -> fidl::Result<()> {
4795            decoder.debug_check_bounds::<Self>(offset);
4796            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4797            // Verify that padding bytes are zero.
4798            let ptr = unsafe { buf_ptr.offset(8) };
4799            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4800            let mask = 0xffffffff00000000u64;
4801            let maskedval = padval & mask;
4802            if maskedval != 0 {
4803                return Err(fidl::Error::NonZeroPadding {
4804                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4805                });
4806            }
4807            // Copy from the buffer into the object.
4808            unsafe {
4809                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4810            }
4811            Ok(())
4812        }
4813    }
4814
4815    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsRequest {
4816        type Borrowed<'a> = &'a Self;
4817        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4818            value
4819        }
4820    }
4821
4822    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsRequest {
4823        type Owned = Self;
4824
4825        #[inline(always)]
4826        fn inline_align(_context: fidl::encoding::Context) -> usize {
4827            8
4828        }
4829
4830        #[inline(always)]
4831        fn inline_size(_context: fidl::encoding::Context) -> usize {
4832            8
4833        }
4834        #[inline(always)]
4835        fn encode_is_copy() -> bool {
4836            true
4837        }
4838
4839        #[inline(always)]
4840        fn decode_is_copy() -> bool {
4841            true
4842        }
4843    }
4844
4845    unsafe impl<D: fidl::encoding::ResourceDialect>
4846        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D>
4847        for &RingBufferSetActiveChannelsRequest
4848    {
4849        #[inline]
4850        unsafe fn encode(
4851            self,
4852            encoder: &mut fidl::encoding::Encoder<'_, D>,
4853            offset: usize,
4854            _depth: fidl::encoding::Depth,
4855        ) -> fidl::Result<()> {
4856            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
4857            unsafe {
4858                // Copy the object into the buffer.
4859                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4860                (buf_ptr as *mut RingBufferSetActiveChannelsRequest)
4861                    .write_unaligned((self as *const RingBufferSetActiveChannelsRequest).read());
4862                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4863                // done second because the memcpy will write garbage to these bytes.
4864            }
4865            Ok(())
4866        }
4867    }
4868    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
4869        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D> for (T0,)
4870    {
4871        #[inline]
4872        unsafe fn encode(
4873            self,
4874            encoder: &mut fidl::encoding::Encoder<'_, D>,
4875            offset: usize,
4876            depth: fidl::encoding::Depth,
4877        ) -> fidl::Result<()> {
4878            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
4879            // Zero out padding regions. There's no need to apply masks
4880            // because the unmasked parts will be overwritten by fields.
4881            // Write the fields.
4882            self.0.encode(encoder, offset + 0, depth)?;
4883            Ok(())
4884        }
4885    }
4886
4887    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4888        for RingBufferSetActiveChannelsRequest
4889    {
4890        #[inline(always)]
4891        fn new_empty() -> Self {
4892            Self { active_channels_bitmask: fidl::new_empty!(u64, D) }
4893        }
4894
4895        #[inline]
4896        unsafe fn decode(
4897            &mut self,
4898            decoder: &mut fidl::encoding::Decoder<'_, D>,
4899            offset: usize,
4900            _depth: fidl::encoding::Depth,
4901        ) -> fidl::Result<()> {
4902            decoder.debug_check_bounds::<Self>(offset);
4903            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4904            // Verify that padding bytes are zero.
4905            // Copy from the buffer into the object.
4906            unsafe {
4907                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4908            }
4909            Ok(())
4910        }
4911    }
4912
4913    impl fidl::encoding::ValueTypeMarker for RingBufferStartResponse {
4914        type Borrowed<'a> = &'a Self;
4915        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4916            value
4917        }
4918    }
4919
4920    unsafe impl fidl::encoding::TypeMarker for RingBufferStartResponse {
4921        type Owned = Self;
4922
4923        #[inline(always)]
4924        fn inline_align(_context: fidl::encoding::Context) -> usize {
4925            8
4926        }
4927
4928        #[inline(always)]
4929        fn inline_size(_context: fidl::encoding::Context) -> usize {
4930            8
4931        }
4932        #[inline(always)]
4933        fn encode_is_copy() -> bool {
4934            true
4935        }
4936
4937        #[inline(always)]
4938        fn decode_is_copy() -> bool {
4939            true
4940        }
4941    }
4942
4943    unsafe impl<D: fidl::encoding::ResourceDialect>
4944        fidl::encoding::Encode<RingBufferStartResponse, D> for &RingBufferStartResponse
4945    {
4946        #[inline]
4947        unsafe fn encode(
4948            self,
4949            encoder: &mut fidl::encoding::Encoder<'_, D>,
4950            offset: usize,
4951            _depth: fidl::encoding::Depth,
4952        ) -> fidl::Result<()> {
4953            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
4954            unsafe {
4955                // Copy the object into the buffer.
4956                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4957                (buf_ptr as *mut RingBufferStartResponse)
4958                    .write_unaligned((self as *const RingBufferStartResponse).read());
4959                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4960                // done second because the memcpy will write garbage to these bytes.
4961            }
4962            Ok(())
4963        }
4964    }
4965    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
4966        fidl::encoding::Encode<RingBufferStartResponse, D> for (T0,)
4967    {
4968        #[inline]
4969        unsafe fn encode(
4970            self,
4971            encoder: &mut fidl::encoding::Encoder<'_, D>,
4972            offset: usize,
4973            depth: fidl::encoding::Depth,
4974        ) -> fidl::Result<()> {
4975            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
4976            // Zero out padding regions. There's no need to apply masks
4977            // because the unmasked parts will be overwritten by fields.
4978            // Write the fields.
4979            self.0.encode(encoder, offset + 0, depth)?;
4980            Ok(())
4981        }
4982    }
4983
4984    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4985        for RingBufferStartResponse
4986    {
4987        #[inline(always)]
4988        fn new_empty() -> Self {
4989            Self { start_time: fidl::new_empty!(i64, D) }
4990        }
4991
4992        #[inline]
4993        unsafe fn decode(
4994            &mut self,
4995            decoder: &mut fidl::encoding::Decoder<'_, D>,
4996            offset: usize,
4997            _depth: fidl::encoding::Depth,
4998        ) -> fidl::Result<()> {
4999            decoder.debug_check_bounds::<Self>(offset);
5000            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5001            // Verify that padding bytes are zero.
5002            // Copy from the buffer into the object.
5003            unsafe {
5004                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5005            }
5006            Ok(())
5007        }
5008    }
5009
5010    impl fidl::encoding::ValueTypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5011        type Borrowed<'a> = &'a Self;
5012        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5013            value
5014        }
5015    }
5016
5017    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5018        type Owned = Self;
5019
5020        #[inline(always)]
5021        fn inline_align(_context: fidl::encoding::Context) -> usize {
5022            8
5023        }
5024
5025        #[inline(always)]
5026        fn inline_size(_context: fidl::encoding::Context) -> usize {
5027            16
5028        }
5029    }
5030
5031    unsafe impl<D: fidl::encoding::ResourceDialect>
5032        fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D>
5033        for &RingBufferWatchClockRecoveryPositionInfoResponse
5034    {
5035        #[inline]
5036        unsafe fn encode(
5037            self,
5038            encoder: &mut fidl::encoding::Encoder<'_, D>,
5039            offset: usize,
5040            _depth: fidl::encoding::Depth,
5041        ) -> fidl::Result<()> {
5042            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5043            unsafe {
5044                // Copy the object into the buffer.
5045                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5046                (buf_ptr as *mut RingBufferWatchClockRecoveryPositionInfoResponse).write_unaligned(
5047                    (self as *const RingBufferWatchClockRecoveryPositionInfoResponse).read(),
5048                );
5049                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5050                // done second because the memcpy will write garbage to these bytes.
5051                let padding_ptr = buf_ptr.offset(8) as *mut u64;
5052                let padding_mask = 0xffffffff00000000u64;
5053                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5054            }
5055            Ok(())
5056        }
5057    }
5058    unsafe impl<
5059        D: fidl::encoding::ResourceDialect,
5060        T0: fidl::encoding::Encode<RingBufferPositionInfo, D>,
5061    > fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D> for (T0,)
5062    {
5063        #[inline]
5064        unsafe fn encode(
5065            self,
5066            encoder: &mut fidl::encoding::Encoder<'_, D>,
5067            offset: usize,
5068            depth: fidl::encoding::Depth,
5069        ) -> fidl::Result<()> {
5070            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5071            // Zero out padding regions. There's no need to apply masks
5072            // because the unmasked parts will be overwritten by fields.
5073            // Write the fields.
5074            self.0.encode(encoder, offset + 0, depth)?;
5075            Ok(())
5076        }
5077    }
5078
5079    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5080        for RingBufferWatchClockRecoveryPositionInfoResponse
5081    {
5082        #[inline(always)]
5083        fn new_empty() -> Self {
5084            Self { position_info: fidl::new_empty!(RingBufferPositionInfo, D) }
5085        }
5086
5087        #[inline]
5088        unsafe fn decode(
5089            &mut self,
5090            decoder: &mut fidl::encoding::Decoder<'_, D>,
5091            offset: usize,
5092            _depth: fidl::encoding::Depth,
5093        ) -> fidl::Result<()> {
5094            decoder.debug_check_bounds::<Self>(offset);
5095            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5096            // Verify that padding bytes are zero.
5097            let ptr = unsafe { buf_ptr.offset(8) };
5098            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5099            let mask = 0xffffffff00000000u64;
5100            let maskedval = padval & mask;
5101            if maskedval != 0 {
5102                return Err(fidl::Error::NonZeroPadding {
5103                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
5104                });
5105            }
5106            // Copy from the buffer into the object.
5107            unsafe {
5108                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
5109            }
5110            Ok(())
5111        }
5112    }
5113
5114    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsResponse {
5115        type Borrowed<'a> = &'a Self;
5116        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5117            value
5118        }
5119    }
5120
5121    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsResponse {
5122        type Owned = Self;
5123
5124        #[inline(always)]
5125        fn inline_align(_context: fidl::encoding::Context) -> usize {
5126            8
5127        }
5128
5129        #[inline(always)]
5130        fn inline_size(_context: fidl::encoding::Context) -> usize {
5131            8
5132        }
5133        #[inline(always)]
5134        fn encode_is_copy() -> bool {
5135            true
5136        }
5137
5138        #[inline(always)]
5139        fn decode_is_copy() -> bool {
5140            true
5141        }
5142    }
5143
5144    unsafe impl<D: fidl::encoding::ResourceDialect>
5145        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D>
5146        for &RingBufferSetActiveChannelsResponse
5147    {
5148        #[inline]
5149        unsafe fn encode(
5150            self,
5151            encoder: &mut fidl::encoding::Encoder<'_, D>,
5152            offset: usize,
5153            _depth: fidl::encoding::Depth,
5154        ) -> fidl::Result<()> {
5155            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5156            unsafe {
5157                // Copy the object into the buffer.
5158                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5159                (buf_ptr as *mut RingBufferSetActiveChannelsResponse)
5160                    .write_unaligned((self as *const RingBufferSetActiveChannelsResponse).read());
5161                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5162                // done second because the memcpy will write garbage to these bytes.
5163            }
5164            Ok(())
5165        }
5166    }
5167    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5168        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D> for (T0,)
5169    {
5170        #[inline]
5171        unsafe fn encode(
5172            self,
5173            encoder: &mut fidl::encoding::Encoder<'_, D>,
5174            offset: usize,
5175            depth: fidl::encoding::Depth,
5176        ) -> fidl::Result<()> {
5177            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5178            // Zero out padding regions. There's no need to apply masks
5179            // because the unmasked parts will be overwritten by fields.
5180            // Write the fields.
5181            self.0.encode(encoder, offset + 0, depth)?;
5182            Ok(())
5183        }
5184    }
5185
5186    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5187        for RingBufferSetActiveChannelsResponse
5188    {
5189        #[inline(always)]
5190        fn new_empty() -> Self {
5191            Self { set_time: fidl::new_empty!(i64, D) }
5192        }
5193
5194        #[inline]
5195        unsafe fn decode(
5196            &mut self,
5197            decoder: &mut fidl::encoding::Decoder<'_, D>,
5198            offset: usize,
5199            _depth: fidl::encoding::Depth,
5200        ) -> fidl::Result<()> {
5201            decoder.debug_check_bounds::<Self>(offset);
5202            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5203            // Verify that padding bytes are zero.
5204            // Copy from the buffer into the object.
5205            unsafe {
5206                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5207            }
5208            Ok(())
5209        }
5210    }
5211
5212    impl fidl::encoding::ValueTypeMarker for RingBufferWatchDelayInfoResponse {
5213        type Borrowed<'a> = &'a Self;
5214        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5215            value
5216        }
5217    }
5218
5219    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchDelayInfoResponse {
5220        type Owned = Self;
5221
5222        #[inline(always)]
5223        fn inline_align(_context: fidl::encoding::Context) -> usize {
5224            8
5225        }
5226
5227        #[inline(always)]
5228        fn inline_size(_context: fidl::encoding::Context) -> usize {
5229            16
5230        }
5231    }
5232
5233    unsafe impl<D: fidl::encoding::ResourceDialect>
5234        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D>
5235        for &RingBufferWatchDelayInfoResponse
5236    {
5237        #[inline]
5238        unsafe fn encode(
5239            self,
5240            encoder: &mut fidl::encoding::Encoder<'_, D>,
5241            offset: usize,
5242            _depth: fidl::encoding::Depth,
5243        ) -> fidl::Result<()> {
5244            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5245            // Delegate to tuple encoding.
5246            fidl::encoding::Encode::<RingBufferWatchDelayInfoResponse, D>::encode(
5247                (<DelayInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.delay_info),),
5248                encoder,
5249                offset,
5250                _depth,
5251            )
5252        }
5253    }
5254    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DelayInfo, D>>
5255        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D> for (T0,)
5256    {
5257        #[inline]
5258        unsafe fn encode(
5259            self,
5260            encoder: &mut fidl::encoding::Encoder<'_, D>,
5261            offset: usize,
5262            depth: fidl::encoding::Depth,
5263        ) -> fidl::Result<()> {
5264            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5265            // Zero out padding regions. There's no need to apply masks
5266            // because the unmasked parts will be overwritten by fields.
5267            // Write the fields.
5268            self.0.encode(encoder, offset + 0, depth)?;
5269            Ok(())
5270        }
5271    }
5272
5273    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5274        for RingBufferWatchDelayInfoResponse
5275    {
5276        #[inline(always)]
5277        fn new_empty() -> Self {
5278            Self { delay_info: fidl::new_empty!(DelayInfo, D) }
5279        }
5280
5281        #[inline]
5282        unsafe fn decode(
5283            &mut self,
5284            decoder: &mut fidl::encoding::Decoder<'_, D>,
5285            offset: usize,
5286            _depth: fidl::encoding::Depth,
5287        ) -> fidl::Result<()> {
5288            decoder.debug_check_bounds::<Self>(offset);
5289            // Verify that padding bytes are zero.
5290            fidl::decode!(DelayInfo, D, &mut self.delay_info, decoder, offset + 0, _depth)?;
5291            Ok(())
5292        }
5293    }
5294
5295    impl fidl::encoding::ValueTypeMarker for StreamConfigGetPropertiesResponse {
5296        type Borrowed<'a> = &'a Self;
5297        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5298            value
5299        }
5300    }
5301
5302    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetPropertiesResponse {
5303        type Owned = Self;
5304
5305        #[inline(always)]
5306        fn inline_align(_context: fidl::encoding::Context) -> usize {
5307            8
5308        }
5309
5310        #[inline(always)]
5311        fn inline_size(_context: fidl::encoding::Context) -> usize {
5312            16
5313        }
5314    }
5315
5316    unsafe impl<D: fidl::encoding::ResourceDialect>
5317        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D>
5318        for &StreamConfigGetPropertiesResponse
5319    {
5320        #[inline]
5321        unsafe fn encode(
5322            self,
5323            encoder: &mut fidl::encoding::Encoder<'_, D>,
5324            offset: usize,
5325            _depth: fidl::encoding::Depth,
5326        ) -> fidl::Result<()> {
5327            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5328            // Delegate to tuple encoding.
5329            fidl::encoding::Encode::<StreamConfigGetPropertiesResponse, D>::encode(
5330                (<StreamProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
5331                encoder,
5332                offset,
5333                _depth,
5334            )
5335        }
5336    }
5337    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamProperties, D>>
5338        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D> for (T0,)
5339    {
5340        #[inline]
5341        unsafe fn encode(
5342            self,
5343            encoder: &mut fidl::encoding::Encoder<'_, D>,
5344            offset: usize,
5345            depth: fidl::encoding::Depth,
5346        ) -> fidl::Result<()> {
5347            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5348            // Zero out padding regions. There's no need to apply masks
5349            // because the unmasked parts will be overwritten by fields.
5350            // Write the fields.
5351            self.0.encode(encoder, offset + 0, depth)?;
5352            Ok(())
5353        }
5354    }
5355
5356    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5357        for StreamConfigGetPropertiesResponse
5358    {
5359        #[inline(always)]
5360        fn new_empty() -> Self {
5361            Self { properties: fidl::new_empty!(StreamProperties, D) }
5362        }
5363
5364        #[inline]
5365        unsafe fn decode(
5366            &mut self,
5367            decoder: &mut fidl::encoding::Decoder<'_, D>,
5368            offset: usize,
5369            _depth: fidl::encoding::Depth,
5370        ) -> fidl::Result<()> {
5371            decoder.debug_check_bounds::<Self>(offset);
5372            // Verify that padding bytes are zero.
5373            fidl::decode!(StreamProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
5374            Ok(())
5375        }
5376    }
5377
5378    impl fidl::encoding::ValueTypeMarker for StreamConfigGetSupportedFormatsResponse {
5379        type Borrowed<'a> = &'a Self;
5380        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5381            value
5382        }
5383    }
5384
5385    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetSupportedFormatsResponse {
5386        type Owned = Self;
5387
5388        #[inline(always)]
5389        fn inline_align(_context: fidl::encoding::Context) -> usize {
5390            8
5391        }
5392
5393        #[inline(always)]
5394        fn inline_size(_context: fidl::encoding::Context) -> usize {
5395            16
5396        }
5397    }
5398
5399    unsafe impl<D: fidl::encoding::ResourceDialect>
5400        fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D>
5401        for &StreamConfigGetSupportedFormatsResponse
5402    {
5403        #[inline]
5404        unsafe fn encode(
5405            self,
5406            encoder: &mut fidl::encoding::Encoder<'_, D>,
5407            offset: usize,
5408            _depth: fidl::encoding::Depth,
5409        ) -> fidl::Result<()> {
5410            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5411            // Delegate to tuple encoding.
5412            fidl::encoding::Encode::<StreamConfigGetSupportedFormatsResponse, D>::encode(
5413                (
5414                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.supported_formats),
5415                ),
5416                encoder, offset, _depth
5417            )
5418        }
5419    }
5420    unsafe impl<
5421        D: fidl::encoding::ResourceDialect,
5422        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
5423    > fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D> for (T0,)
5424    {
5425        #[inline]
5426        unsafe fn encode(
5427            self,
5428            encoder: &mut fidl::encoding::Encoder<'_, D>,
5429            offset: usize,
5430            depth: fidl::encoding::Depth,
5431        ) -> fidl::Result<()> {
5432            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5433            // Zero out padding regions. There's no need to apply masks
5434            // because the unmasked parts will be overwritten by fields.
5435            // Write the fields.
5436            self.0.encode(encoder, offset + 0, depth)?;
5437            Ok(())
5438        }
5439    }
5440
5441    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5442        for StreamConfigGetSupportedFormatsResponse
5443    {
5444        #[inline(always)]
5445        fn new_empty() -> Self {
5446            Self {
5447                supported_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
5448            }
5449        }
5450
5451        #[inline]
5452        unsafe fn decode(
5453            &mut self,
5454            decoder: &mut fidl::encoding::Decoder<'_, D>,
5455            offset: usize,
5456            _depth: fidl::encoding::Depth,
5457        ) -> fidl::Result<()> {
5458            decoder.debug_check_bounds::<Self>(offset);
5459            // Verify that padding bytes are zero.
5460            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.supported_formats, decoder, offset + 0, _depth)?;
5461            Ok(())
5462        }
5463    }
5464
5465    impl fidl::encoding::ValueTypeMarker for StreamConfigSetGainRequest {
5466        type Borrowed<'a> = &'a Self;
5467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5468            value
5469        }
5470    }
5471
5472    unsafe impl fidl::encoding::TypeMarker for StreamConfigSetGainRequest {
5473        type Owned = Self;
5474
5475        #[inline(always)]
5476        fn inline_align(_context: fidl::encoding::Context) -> usize {
5477            8
5478        }
5479
5480        #[inline(always)]
5481        fn inline_size(_context: fidl::encoding::Context) -> usize {
5482            16
5483        }
5484    }
5485
5486    unsafe impl<D: fidl::encoding::ResourceDialect>
5487        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for &StreamConfigSetGainRequest
5488    {
5489        #[inline]
5490        unsafe fn encode(
5491            self,
5492            encoder: &mut fidl::encoding::Encoder<'_, D>,
5493            offset: usize,
5494            _depth: fidl::encoding::Depth,
5495        ) -> fidl::Result<()> {
5496            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5497            // Delegate to tuple encoding.
5498            fidl::encoding::Encode::<StreamConfigSetGainRequest, D>::encode(
5499                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.target_state),),
5500                encoder,
5501                offset,
5502                _depth,
5503            )
5504        }
5505    }
5506    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5507        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for (T0,)
5508    {
5509        #[inline]
5510        unsafe fn encode(
5511            self,
5512            encoder: &mut fidl::encoding::Encoder<'_, D>,
5513            offset: usize,
5514            depth: fidl::encoding::Depth,
5515        ) -> fidl::Result<()> {
5516            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5517            // Zero out padding regions. There's no need to apply masks
5518            // because the unmasked parts will be overwritten by fields.
5519            // Write the fields.
5520            self.0.encode(encoder, offset + 0, depth)?;
5521            Ok(())
5522        }
5523    }
5524
5525    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5526        for StreamConfigSetGainRequest
5527    {
5528        #[inline(always)]
5529        fn new_empty() -> Self {
5530            Self { target_state: fidl::new_empty!(GainState, D) }
5531        }
5532
5533        #[inline]
5534        unsafe fn decode(
5535            &mut self,
5536            decoder: &mut fidl::encoding::Decoder<'_, D>,
5537            offset: usize,
5538            _depth: fidl::encoding::Depth,
5539        ) -> fidl::Result<()> {
5540            decoder.debug_check_bounds::<Self>(offset);
5541            // Verify that padding bytes are zero.
5542            fidl::decode!(GainState, D, &mut self.target_state, decoder, offset + 0, _depth)?;
5543            Ok(())
5544        }
5545    }
5546
5547    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchGainStateResponse {
5548        type Borrowed<'a> = &'a Self;
5549        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5550            value
5551        }
5552    }
5553
5554    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchGainStateResponse {
5555        type Owned = Self;
5556
5557        #[inline(always)]
5558        fn inline_align(_context: fidl::encoding::Context) -> usize {
5559            8
5560        }
5561
5562        #[inline(always)]
5563        fn inline_size(_context: fidl::encoding::Context) -> usize {
5564            16
5565        }
5566    }
5567
5568    unsafe impl<D: fidl::encoding::ResourceDialect>
5569        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D>
5570        for &StreamConfigWatchGainStateResponse
5571    {
5572        #[inline]
5573        unsafe fn encode(
5574            self,
5575            encoder: &mut fidl::encoding::Encoder<'_, D>,
5576            offset: usize,
5577            _depth: fidl::encoding::Depth,
5578        ) -> fidl::Result<()> {
5579            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5580            // Delegate to tuple encoding.
5581            fidl::encoding::Encode::<StreamConfigWatchGainStateResponse, D>::encode(
5582                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_state),),
5583                encoder,
5584                offset,
5585                _depth,
5586            )
5587        }
5588    }
5589    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5590        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D> for (T0,)
5591    {
5592        #[inline]
5593        unsafe fn encode(
5594            self,
5595            encoder: &mut fidl::encoding::Encoder<'_, D>,
5596            offset: usize,
5597            depth: fidl::encoding::Depth,
5598        ) -> fidl::Result<()> {
5599            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5600            // Zero out padding regions. There's no need to apply masks
5601            // because the unmasked parts will be overwritten by fields.
5602            // Write the fields.
5603            self.0.encode(encoder, offset + 0, depth)?;
5604            Ok(())
5605        }
5606    }
5607
5608    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5609        for StreamConfigWatchGainStateResponse
5610    {
5611        #[inline(always)]
5612        fn new_empty() -> Self {
5613            Self { gain_state: fidl::new_empty!(GainState, D) }
5614        }
5615
5616        #[inline]
5617        unsafe fn decode(
5618            &mut self,
5619            decoder: &mut fidl::encoding::Decoder<'_, D>,
5620            offset: usize,
5621            _depth: fidl::encoding::Depth,
5622        ) -> fidl::Result<()> {
5623            decoder.debug_check_bounds::<Self>(offset);
5624            // Verify that padding bytes are zero.
5625            fidl::decode!(GainState, D, &mut self.gain_state, decoder, offset + 0, _depth)?;
5626            Ok(())
5627        }
5628    }
5629
5630    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchPlugStateResponse {
5631        type Borrowed<'a> = &'a Self;
5632        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5633            value
5634        }
5635    }
5636
5637    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchPlugStateResponse {
5638        type Owned = Self;
5639
5640        #[inline(always)]
5641        fn inline_align(_context: fidl::encoding::Context) -> usize {
5642            8
5643        }
5644
5645        #[inline(always)]
5646        fn inline_size(_context: fidl::encoding::Context) -> usize {
5647            16
5648        }
5649    }
5650
5651    unsafe impl<D: fidl::encoding::ResourceDialect>
5652        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D>
5653        for &StreamConfigWatchPlugStateResponse
5654    {
5655        #[inline]
5656        unsafe fn encode(
5657            self,
5658            encoder: &mut fidl::encoding::Encoder<'_, D>,
5659            offset: usize,
5660            _depth: fidl::encoding::Depth,
5661        ) -> fidl::Result<()> {
5662            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5663            // Delegate to tuple encoding.
5664            fidl::encoding::Encode::<StreamConfigWatchPlugStateResponse, D>::encode(
5665                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
5666                encoder,
5667                offset,
5668                _depth,
5669            )
5670        }
5671    }
5672    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
5673        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D> for (T0,)
5674    {
5675        #[inline]
5676        unsafe fn encode(
5677            self,
5678            encoder: &mut fidl::encoding::Encoder<'_, D>,
5679            offset: usize,
5680            depth: fidl::encoding::Depth,
5681        ) -> fidl::Result<()> {
5682            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5683            // Zero out padding regions. There's no need to apply masks
5684            // because the unmasked parts will be overwritten by fields.
5685            // Write the fields.
5686            self.0.encode(encoder, offset + 0, depth)?;
5687            Ok(())
5688        }
5689    }
5690
5691    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5692        for StreamConfigWatchPlugStateResponse
5693    {
5694        #[inline(always)]
5695        fn new_empty() -> Self {
5696            Self { plug_state: fidl::new_empty!(PlugState, D) }
5697        }
5698
5699        #[inline]
5700        unsafe fn decode(
5701            &mut self,
5702            decoder: &mut fidl::encoding::Decoder<'_, D>,
5703            offset: usize,
5704            _depth: fidl::encoding::Depth,
5705        ) -> fidl::Result<()> {
5706            decoder.debug_check_bounds::<Self>(offset);
5707            // Verify that padding bytes are zero.
5708            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
5709            Ok(())
5710        }
5711    }
5712
5713    impl AllocateVmosConfig {
5714        #[inline(always)]
5715        fn max_ordinal_present(&self) -> u64 {
5716            if let Some(_) = self.vmo_count {
5717                return 2;
5718            }
5719            if let Some(_) = self.min_vmo_size {
5720                return 1;
5721            }
5722            0
5723        }
5724    }
5725
5726    impl fidl::encoding::ValueTypeMarker for AllocateVmosConfig {
5727        type Borrowed<'a> = &'a Self;
5728        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5729            value
5730        }
5731    }
5732
5733    unsafe impl fidl::encoding::TypeMarker for AllocateVmosConfig {
5734        type Owned = Self;
5735
5736        #[inline(always)]
5737        fn inline_align(_context: fidl::encoding::Context) -> usize {
5738            8
5739        }
5740
5741        #[inline(always)]
5742        fn inline_size(_context: fidl::encoding::Context) -> usize {
5743            16
5744        }
5745    }
5746
5747    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AllocateVmosConfig, D>
5748        for &AllocateVmosConfig
5749    {
5750        unsafe fn encode(
5751            self,
5752            encoder: &mut fidl::encoding::Encoder<'_, D>,
5753            offset: usize,
5754            mut depth: fidl::encoding::Depth,
5755        ) -> fidl::Result<()> {
5756            encoder.debug_check_bounds::<AllocateVmosConfig>(offset);
5757            // Vector header
5758            let max_ordinal: u64 = self.max_ordinal_present();
5759            encoder.write_num(max_ordinal, offset);
5760            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5761            // Calling encoder.out_of_line_offset(0) is not allowed.
5762            if max_ordinal == 0 {
5763                return Ok(());
5764            }
5765            depth.increment()?;
5766            let envelope_size = 8;
5767            let bytes_len = max_ordinal as usize * envelope_size;
5768            #[allow(unused_variables)]
5769            let offset = encoder.out_of_line_offset(bytes_len);
5770            let mut _prev_end_offset: usize = 0;
5771            if 1 > max_ordinal {
5772                return Ok(());
5773            }
5774
5775            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5776            // are envelope_size bytes.
5777            let cur_offset: usize = (1 - 1) * envelope_size;
5778
5779            // Zero reserved fields.
5780            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5781
5782            // Safety:
5783            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5784            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5785            //   envelope_size bytes, there is always sufficient room.
5786            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5787                self.min_vmo_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5788                encoder,
5789                offset + cur_offset,
5790                depth,
5791            )?;
5792
5793            _prev_end_offset = cur_offset + envelope_size;
5794            if 2 > max_ordinal {
5795                return Ok(());
5796            }
5797
5798            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5799            // are envelope_size bytes.
5800            let cur_offset: usize = (2 - 1) * envelope_size;
5801
5802            // Zero reserved fields.
5803            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5804
5805            // Safety:
5806            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5807            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5808            //   envelope_size bytes, there is always sufficient room.
5809            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5810                self.vmo_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5811                encoder,
5812                offset + cur_offset,
5813                depth,
5814            )?;
5815
5816            _prev_end_offset = cur_offset + envelope_size;
5817
5818            Ok(())
5819        }
5820    }
5821
5822    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AllocateVmosConfig {
5823        #[inline(always)]
5824        fn new_empty() -> Self {
5825            Self::default()
5826        }
5827
5828        unsafe fn decode(
5829            &mut self,
5830            decoder: &mut fidl::encoding::Decoder<'_, D>,
5831            offset: usize,
5832            mut depth: fidl::encoding::Depth,
5833        ) -> fidl::Result<()> {
5834            decoder.debug_check_bounds::<Self>(offset);
5835            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5836                None => return Err(fidl::Error::NotNullable),
5837                Some(len) => len,
5838            };
5839            // Calling decoder.out_of_line_offset(0) is not allowed.
5840            if len == 0 {
5841                return Ok(());
5842            };
5843            depth.increment()?;
5844            let envelope_size = 8;
5845            let bytes_len = len * envelope_size;
5846            let offset = decoder.out_of_line_offset(bytes_len)?;
5847            // Decode the envelope for each type.
5848            let mut _next_ordinal_to_read = 0;
5849            let mut next_offset = offset;
5850            let end_offset = offset + bytes_len;
5851            _next_ordinal_to_read += 1;
5852            if next_offset >= end_offset {
5853                return Ok(());
5854            }
5855
5856            // Decode unknown envelopes for gaps in ordinals.
5857            while _next_ordinal_to_read < 1 {
5858                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5859                _next_ordinal_to_read += 1;
5860                next_offset += envelope_size;
5861            }
5862
5863            let next_out_of_line = decoder.next_out_of_line();
5864            let handles_before = decoder.remaining_handles();
5865            if let Some((inlined, num_bytes, num_handles)) =
5866                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5867            {
5868                let member_inline_size =
5869                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5870                if inlined != (member_inline_size <= 4) {
5871                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5872                }
5873                let inner_offset;
5874                let mut inner_depth = depth.clone();
5875                if inlined {
5876                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5877                    inner_offset = next_offset;
5878                } else {
5879                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5880                    inner_depth.increment()?;
5881                }
5882                let val_ref = self.min_vmo_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
5883                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5884                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5885                {
5886                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5887                }
5888                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5889                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5890                }
5891            }
5892
5893            next_offset += envelope_size;
5894            _next_ordinal_to_read += 1;
5895            if next_offset >= end_offset {
5896                return Ok(());
5897            }
5898
5899            // Decode unknown envelopes for gaps in ordinals.
5900            while _next_ordinal_to_read < 2 {
5901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5902                _next_ordinal_to_read += 1;
5903                next_offset += envelope_size;
5904            }
5905
5906            let next_out_of_line = decoder.next_out_of_line();
5907            let handles_before = decoder.remaining_handles();
5908            if let Some((inlined, num_bytes, num_handles)) =
5909                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5910            {
5911                let member_inline_size =
5912                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5913                if inlined != (member_inline_size <= 4) {
5914                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5915                }
5916                let inner_offset;
5917                let mut inner_depth = depth.clone();
5918                if inlined {
5919                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5920                    inner_offset = next_offset;
5921                } else {
5922                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5923                    inner_depth.increment()?;
5924                }
5925                let val_ref = self.vmo_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
5926                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5927                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5928                {
5929                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5930                }
5931                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5932                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5933                }
5934            }
5935
5936            next_offset += envelope_size;
5937
5938            // Decode the remaining unknown envelopes.
5939            while next_offset < end_offset {
5940                _next_ordinal_to_read += 1;
5941                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5942                next_offset += envelope_size;
5943            }
5944
5945            Ok(())
5946        }
5947    }
5948
5949    impl ChannelAttributes {
5950        #[inline(always)]
5951        fn max_ordinal_present(&self) -> u64 {
5952            if let Some(_) = self.max_frequency {
5953                return 2;
5954            }
5955            if let Some(_) = self.min_frequency {
5956                return 1;
5957            }
5958            0
5959        }
5960    }
5961
5962    impl fidl::encoding::ValueTypeMarker for ChannelAttributes {
5963        type Borrowed<'a> = &'a Self;
5964        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5965            value
5966        }
5967    }
5968
5969    unsafe impl fidl::encoding::TypeMarker for ChannelAttributes {
5970        type Owned = Self;
5971
5972        #[inline(always)]
5973        fn inline_align(_context: fidl::encoding::Context) -> usize {
5974            8
5975        }
5976
5977        #[inline(always)]
5978        fn inline_size(_context: fidl::encoding::Context) -> usize {
5979            16
5980        }
5981    }
5982
5983    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelAttributes, D>
5984        for &ChannelAttributes
5985    {
5986        unsafe fn encode(
5987            self,
5988            encoder: &mut fidl::encoding::Encoder<'_, D>,
5989            offset: usize,
5990            mut depth: fidl::encoding::Depth,
5991        ) -> fidl::Result<()> {
5992            encoder.debug_check_bounds::<ChannelAttributes>(offset);
5993            // Vector header
5994            let max_ordinal: u64 = self.max_ordinal_present();
5995            encoder.write_num(max_ordinal, offset);
5996            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5997            // Calling encoder.out_of_line_offset(0) is not allowed.
5998            if max_ordinal == 0 {
5999                return Ok(());
6000            }
6001            depth.increment()?;
6002            let envelope_size = 8;
6003            let bytes_len = max_ordinal as usize * envelope_size;
6004            #[allow(unused_variables)]
6005            let offset = encoder.out_of_line_offset(bytes_len);
6006            let mut _prev_end_offset: usize = 0;
6007            if 1 > max_ordinal {
6008                return Ok(());
6009            }
6010
6011            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6012            // are envelope_size bytes.
6013            let cur_offset: usize = (1 - 1) * envelope_size;
6014
6015            // Zero reserved fields.
6016            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6017
6018            // Safety:
6019            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6020            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6021            //   envelope_size bytes, there is always sufficient room.
6022            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6023                self.min_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6024                encoder,
6025                offset + cur_offset,
6026                depth,
6027            )?;
6028
6029            _prev_end_offset = cur_offset + envelope_size;
6030            if 2 > max_ordinal {
6031                return Ok(());
6032            }
6033
6034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6035            // are envelope_size bytes.
6036            let cur_offset: usize = (2 - 1) * envelope_size;
6037
6038            // Zero reserved fields.
6039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6040
6041            // Safety:
6042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6044            //   envelope_size bytes, there is always sufficient room.
6045            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6046                self.max_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6047                encoder,
6048                offset + cur_offset,
6049                depth,
6050            )?;
6051
6052            _prev_end_offset = cur_offset + envelope_size;
6053
6054            Ok(())
6055        }
6056    }
6057
6058    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelAttributes {
6059        #[inline(always)]
6060        fn new_empty() -> Self {
6061            Self::default()
6062        }
6063
6064        unsafe fn decode(
6065            &mut self,
6066            decoder: &mut fidl::encoding::Decoder<'_, D>,
6067            offset: usize,
6068            mut depth: fidl::encoding::Depth,
6069        ) -> fidl::Result<()> {
6070            decoder.debug_check_bounds::<Self>(offset);
6071            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6072                None => return Err(fidl::Error::NotNullable),
6073                Some(len) => len,
6074            };
6075            // Calling decoder.out_of_line_offset(0) is not allowed.
6076            if len == 0 {
6077                return Ok(());
6078            };
6079            depth.increment()?;
6080            let envelope_size = 8;
6081            let bytes_len = len * envelope_size;
6082            let offset = decoder.out_of_line_offset(bytes_len)?;
6083            // Decode the envelope for each type.
6084            let mut _next_ordinal_to_read = 0;
6085            let mut next_offset = offset;
6086            let end_offset = offset + bytes_len;
6087            _next_ordinal_to_read += 1;
6088            if next_offset >= end_offset {
6089                return Ok(());
6090            }
6091
6092            // Decode unknown envelopes for gaps in ordinals.
6093            while _next_ordinal_to_read < 1 {
6094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6095                _next_ordinal_to_read += 1;
6096                next_offset += envelope_size;
6097            }
6098
6099            let next_out_of_line = decoder.next_out_of_line();
6100            let handles_before = decoder.remaining_handles();
6101            if let Some((inlined, num_bytes, num_handles)) =
6102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6103            {
6104                let member_inline_size =
6105                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6106                if inlined != (member_inline_size <= 4) {
6107                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6108                }
6109                let inner_offset;
6110                let mut inner_depth = depth.clone();
6111                if inlined {
6112                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6113                    inner_offset = next_offset;
6114                } else {
6115                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6116                    inner_depth.increment()?;
6117                }
6118                let val_ref = self.min_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6119                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6120                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6121                {
6122                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6123                }
6124                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6125                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6126                }
6127            }
6128
6129            next_offset += envelope_size;
6130            _next_ordinal_to_read += 1;
6131            if next_offset >= end_offset {
6132                return Ok(());
6133            }
6134
6135            // Decode unknown envelopes for gaps in ordinals.
6136            while _next_ordinal_to_read < 2 {
6137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6138                _next_ordinal_to_read += 1;
6139                next_offset += envelope_size;
6140            }
6141
6142            let next_out_of_line = decoder.next_out_of_line();
6143            let handles_before = decoder.remaining_handles();
6144            if let Some((inlined, num_bytes, num_handles)) =
6145                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6146            {
6147                let member_inline_size =
6148                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6149                if inlined != (member_inline_size <= 4) {
6150                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6151                }
6152                let inner_offset;
6153                let mut inner_depth = depth.clone();
6154                if inlined {
6155                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6156                    inner_offset = next_offset;
6157                } else {
6158                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6159                    inner_depth.increment()?;
6160                }
6161                let val_ref = self.max_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6162                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6163                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6164                {
6165                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6166                }
6167                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6168                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6169                }
6170            }
6171
6172            next_offset += envelope_size;
6173
6174            // Decode the remaining unknown envelopes.
6175            while next_offset < end_offset {
6176                _next_ordinal_to_read += 1;
6177                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6178                next_offset += envelope_size;
6179            }
6180
6181            Ok(())
6182        }
6183    }
6184
6185    impl ChannelSet {
6186        #[inline(always)]
6187        fn max_ordinal_present(&self) -> u64 {
6188            if let Some(_) = self.attributes {
6189                return 1;
6190            }
6191            0
6192        }
6193    }
6194
6195    impl fidl::encoding::ValueTypeMarker for ChannelSet {
6196        type Borrowed<'a> = &'a Self;
6197        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6198            value
6199        }
6200    }
6201
6202    unsafe impl fidl::encoding::TypeMarker for ChannelSet {
6203        type Owned = Self;
6204
6205        #[inline(always)]
6206        fn inline_align(_context: fidl::encoding::Context) -> usize {
6207            8
6208        }
6209
6210        #[inline(always)]
6211        fn inline_size(_context: fidl::encoding::Context) -> usize {
6212            16
6213        }
6214    }
6215
6216    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSet, D>
6217        for &ChannelSet
6218    {
6219        unsafe fn encode(
6220            self,
6221            encoder: &mut fidl::encoding::Encoder<'_, D>,
6222            offset: usize,
6223            mut depth: fidl::encoding::Depth,
6224        ) -> fidl::Result<()> {
6225            encoder.debug_check_bounds::<ChannelSet>(offset);
6226            // Vector header
6227            let max_ordinal: u64 = self.max_ordinal_present();
6228            encoder.write_num(max_ordinal, offset);
6229            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6230            // Calling encoder.out_of_line_offset(0) is not allowed.
6231            if max_ordinal == 0 {
6232                return Ok(());
6233            }
6234            depth.increment()?;
6235            let envelope_size = 8;
6236            let bytes_len = max_ordinal as usize * envelope_size;
6237            #[allow(unused_variables)]
6238            let offset = encoder.out_of_line_offset(bytes_len);
6239            let mut _prev_end_offset: usize = 0;
6240            if 1 > max_ordinal {
6241                return Ok(());
6242            }
6243
6244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6245            // are envelope_size bytes.
6246            let cur_offset: usize = (1 - 1) * envelope_size;
6247
6248            // Zero reserved fields.
6249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6250
6251            // Safety:
6252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6254            //   envelope_size bytes, there is always sufficient room.
6255            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelAttributes, 64>, D>(
6256            self.attributes.as_ref().map(<fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::ValueTypeMarker>::borrow),
6257            encoder, offset + cur_offset, depth
6258        )?;
6259
6260            _prev_end_offset = cur_offset + envelope_size;
6261
6262            Ok(())
6263        }
6264    }
6265
6266    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSet {
6267        #[inline(always)]
6268        fn new_empty() -> Self {
6269            Self::default()
6270        }
6271
6272        unsafe fn decode(
6273            &mut self,
6274            decoder: &mut fidl::encoding::Decoder<'_, D>,
6275            offset: usize,
6276            mut depth: fidl::encoding::Depth,
6277        ) -> fidl::Result<()> {
6278            decoder.debug_check_bounds::<Self>(offset);
6279            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6280                None => return Err(fidl::Error::NotNullable),
6281                Some(len) => len,
6282            };
6283            // Calling decoder.out_of_line_offset(0) is not allowed.
6284            if len == 0 {
6285                return Ok(());
6286            };
6287            depth.increment()?;
6288            let envelope_size = 8;
6289            let bytes_len = len * envelope_size;
6290            let offset = decoder.out_of_line_offset(bytes_len)?;
6291            // Decode the envelope for each type.
6292            let mut _next_ordinal_to_read = 0;
6293            let mut next_offset = offset;
6294            let end_offset = offset + bytes_len;
6295            _next_ordinal_to_read += 1;
6296            if next_offset >= end_offset {
6297                return Ok(());
6298            }
6299
6300            // Decode unknown envelopes for gaps in ordinals.
6301            while _next_ordinal_to_read < 1 {
6302                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6303                _next_ordinal_to_read += 1;
6304                next_offset += envelope_size;
6305            }
6306
6307            let next_out_of_line = decoder.next_out_of_line();
6308            let handles_before = decoder.remaining_handles();
6309            if let Some((inlined, num_bytes, num_handles)) =
6310                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6311            {
6312                let member_inline_size = <fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6313                if inlined != (member_inline_size <= 4) {
6314                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6315                }
6316                let inner_offset;
6317                let mut inner_depth = depth.clone();
6318                if inlined {
6319                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6320                    inner_offset = next_offset;
6321                } else {
6322                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6323                    inner_depth.increment()?;
6324                }
6325                let val_ref = self.attributes.get_or_insert_with(
6326                    || fidl::new_empty!(fidl::encoding::Vector<ChannelAttributes, 64>, D),
6327                );
6328                fidl::decode!(fidl::encoding::Vector<ChannelAttributes, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
6329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6330                {
6331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6332                }
6333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6335                }
6336            }
6337
6338            next_offset += envelope_size;
6339
6340            // Decode the remaining unknown envelopes.
6341            while next_offset < end_offset {
6342                _next_ordinal_to_read += 1;
6343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6344                next_offset += envelope_size;
6345            }
6346
6347            Ok(())
6348        }
6349    }
6350
6351    impl CodecFormatInfo {
6352        #[inline(always)]
6353        fn max_ordinal_present(&self) -> u64 {
6354            if let Some(_) = self.turn_off_delay {
6355                return 3;
6356            }
6357            if let Some(_) = self.turn_on_delay {
6358                return 2;
6359            }
6360            if let Some(_) = self.external_delay {
6361                return 1;
6362            }
6363            0
6364        }
6365    }
6366
6367    impl fidl::encoding::ValueTypeMarker for CodecFormatInfo {
6368        type Borrowed<'a> = &'a Self;
6369        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6370            value
6371        }
6372    }
6373
6374    unsafe impl fidl::encoding::TypeMarker for CodecFormatInfo {
6375        type Owned = Self;
6376
6377        #[inline(always)]
6378        fn inline_align(_context: fidl::encoding::Context) -> usize {
6379            8
6380        }
6381
6382        #[inline(always)]
6383        fn inline_size(_context: fidl::encoding::Context) -> usize {
6384            16
6385        }
6386    }
6387
6388    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecFormatInfo, D>
6389        for &CodecFormatInfo
6390    {
6391        unsafe fn encode(
6392            self,
6393            encoder: &mut fidl::encoding::Encoder<'_, D>,
6394            offset: usize,
6395            mut depth: fidl::encoding::Depth,
6396        ) -> fidl::Result<()> {
6397            encoder.debug_check_bounds::<CodecFormatInfo>(offset);
6398            // Vector header
6399            let max_ordinal: u64 = self.max_ordinal_present();
6400            encoder.write_num(max_ordinal, offset);
6401            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6402            // Calling encoder.out_of_line_offset(0) is not allowed.
6403            if max_ordinal == 0 {
6404                return Ok(());
6405            }
6406            depth.increment()?;
6407            let envelope_size = 8;
6408            let bytes_len = max_ordinal as usize * envelope_size;
6409            #[allow(unused_variables)]
6410            let offset = encoder.out_of_line_offset(bytes_len);
6411            let mut _prev_end_offset: usize = 0;
6412            if 1 > max_ordinal {
6413                return Ok(());
6414            }
6415
6416            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6417            // are envelope_size bytes.
6418            let cur_offset: usize = (1 - 1) * envelope_size;
6419
6420            // Zero reserved fields.
6421            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6422
6423            // Safety:
6424            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6425            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6426            //   envelope_size bytes, there is always sufficient room.
6427            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6428                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6429                encoder,
6430                offset + cur_offset,
6431                depth,
6432            )?;
6433
6434            _prev_end_offset = cur_offset + envelope_size;
6435            if 2 > max_ordinal {
6436                return Ok(());
6437            }
6438
6439            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6440            // are envelope_size bytes.
6441            let cur_offset: usize = (2 - 1) * envelope_size;
6442
6443            // Zero reserved fields.
6444            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6445
6446            // Safety:
6447            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6448            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6449            //   envelope_size bytes, there is always sufficient room.
6450            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6451                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6452                encoder,
6453                offset + cur_offset,
6454                depth,
6455            )?;
6456
6457            _prev_end_offset = cur_offset + envelope_size;
6458            if 3 > max_ordinal {
6459                return Ok(());
6460            }
6461
6462            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6463            // are envelope_size bytes.
6464            let cur_offset: usize = (3 - 1) * envelope_size;
6465
6466            // Zero reserved fields.
6467            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6468
6469            // Safety:
6470            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6471            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6472            //   envelope_size bytes, there is always sufficient room.
6473            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6474                self.turn_off_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6475                encoder,
6476                offset + cur_offset,
6477                depth,
6478            )?;
6479
6480            _prev_end_offset = cur_offset + envelope_size;
6481
6482            Ok(())
6483        }
6484    }
6485
6486    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecFormatInfo {
6487        #[inline(always)]
6488        fn new_empty() -> Self {
6489            Self::default()
6490        }
6491
6492        unsafe fn decode(
6493            &mut self,
6494            decoder: &mut fidl::encoding::Decoder<'_, D>,
6495            offset: usize,
6496            mut depth: fidl::encoding::Depth,
6497        ) -> fidl::Result<()> {
6498            decoder.debug_check_bounds::<Self>(offset);
6499            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6500                None => return Err(fidl::Error::NotNullable),
6501                Some(len) => len,
6502            };
6503            // Calling decoder.out_of_line_offset(0) is not allowed.
6504            if len == 0 {
6505                return Ok(());
6506            };
6507            depth.increment()?;
6508            let envelope_size = 8;
6509            let bytes_len = len * envelope_size;
6510            let offset = decoder.out_of_line_offset(bytes_len)?;
6511            // Decode the envelope for each type.
6512            let mut _next_ordinal_to_read = 0;
6513            let mut next_offset = offset;
6514            let end_offset = offset + bytes_len;
6515            _next_ordinal_to_read += 1;
6516            if next_offset >= end_offset {
6517                return Ok(());
6518            }
6519
6520            // Decode unknown envelopes for gaps in ordinals.
6521            while _next_ordinal_to_read < 1 {
6522                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6523                _next_ordinal_to_read += 1;
6524                next_offset += envelope_size;
6525            }
6526
6527            let next_out_of_line = decoder.next_out_of_line();
6528            let handles_before = decoder.remaining_handles();
6529            if let Some((inlined, num_bytes, num_handles)) =
6530                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6531            {
6532                let member_inline_size =
6533                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6534                if inlined != (member_inline_size <= 4) {
6535                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6536                }
6537                let inner_offset;
6538                let mut inner_depth = depth.clone();
6539                if inlined {
6540                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6541                    inner_offset = next_offset;
6542                } else {
6543                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6544                    inner_depth.increment()?;
6545                }
6546                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6547                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6548                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6549                {
6550                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6551                }
6552                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6553                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6554                }
6555            }
6556
6557            next_offset += envelope_size;
6558            _next_ordinal_to_read += 1;
6559            if next_offset >= end_offset {
6560                return Ok(());
6561            }
6562
6563            // Decode unknown envelopes for gaps in ordinals.
6564            while _next_ordinal_to_read < 2 {
6565                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6566                _next_ordinal_to_read += 1;
6567                next_offset += envelope_size;
6568            }
6569
6570            let next_out_of_line = decoder.next_out_of_line();
6571            let handles_before = decoder.remaining_handles();
6572            if let Some((inlined, num_bytes, num_handles)) =
6573                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6574            {
6575                let member_inline_size =
6576                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6577                if inlined != (member_inline_size <= 4) {
6578                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6579                }
6580                let inner_offset;
6581                let mut inner_depth = depth.clone();
6582                if inlined {
6583                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6584                    inner_offset = next_offset;
6585                } else {
6586                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6587                    inner_depth.increment()?;
6588                }
6589                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6590                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6591                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6592                {
6593                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6594                }
6595                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6596                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6597                }
6598            }
6599
6600            next_offset += envelope_size;
6601            _next_ordinal_to_read += 1;
6602            if next_offset >= end_offset {
6603                return Ok(());
6604            }
6605
6606            // Decode unknown envelopes for gaps in ordinals.
6607            while _next_ordinal_to_read < 3 {
6608                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6609                _next_ordinal_to_read += 1;
6610                next_offset += envelope_size;
6611            }
6612
6613            let next_out_of_line = decoder.next_out_of_line();
6614            let handles_before = decoder.remaining_handles();
6615            if let Some((inlined, num_bytes, num_handles)) =
6616                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6617            {
6618                let member_inline_size =
6619                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6620                if inlined != (member_inline_size <= 4) {
6621                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6622                }
6623                let inner_offset;
6624                let mut inner_depth = depth.clone();
6625                if inlined {
6626                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6627                    inner_offset = next_offset;
6628                } else {
6629                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6630                    inner_depth.increment()?;
6631                }
6632                let val_ref = self.turn_off_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6633                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6634                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6635                {
6636                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6637                }
6638                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6639                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6640                }
6641            }
6642
6643            next_offset += envelope_size;
6644
6645            // Decode the remaining unknown envelopes.
6646            while next_offset < end_offset {
6647                _next_ordinal_to_read += 1;
6648                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6649                next_offset += envelope_size;
6650            }
6651
6652            Ok(())
6653        }
6654    }
6655
6656    impl CodecProperties {
6657        #[inline(always)]
6658        fn max_ordinal_present(&self) -> u64 {
6659            if let Some(_) = self.plug_detect_capabilities {
6660                return 5;
6661            }
6662            if let Some(_) = self.unique_id {
6663                return 4;
6664            }
6665            if let Some(_) = self.product {
6666                return 3;
6667            }
6668            if let Some(_) = self.manufacturer {
6669                return 2;
6670            }
6671            if let Some(_) = self.is_input {
6672                return 1;
6673            }
6674            0
6675        }
6676    }
6677
6678    impl fidl::encoding::ValueTypeMarker for CodecProperties {
6679        type Borrowed<'a> = &'a Self;
6680        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6681            value
6682        }
6683    }
6684
6685    unsafe impl fidl::encoding::TypeMarker for CodecProperties {
6686        type Owned = Self;
6687
6688        #[inline(always)]
6689        fn inline_align(_context: fidl::encoding::Context) -> usize {
6690            8
6691        }
6692
6693        #[inline(always)]
6694        fn inline_size(_context: fidl::encoding::Context) -> usize {
6695            16
6696        }
6697    }
6698
6699    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecProperties, D>
6700        for &CodecProperties
6701    {
6702        unsafe fn encode(
6703            self,
6704            encoder: &mut fidl::encoding::Encoder<'_, D>,
6705            offset: usize,
6706            mut depth: fidl::encoding::Depth,
6707        ) -> fidl::Result<()> {
6708            encoder.debug_check_bounds::<CodecProperties>(offset);
6709            // Vector header
6710            let max_ordinal: u64 = self.max_ordinal_present();
6711            encoder.write_num(max_ordinal, offset);
6712            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6713            // Calling encoder.out_of_line_offset(0) is not allowed.
6714            if max_ordinal == 0 {
6715                return Ok(());
6716            }
6717            depth.increment()?;
6718            let envelope_size = 8;
6719            let bytes_len = max_ordinal as usize * envelope_size;
6720            #[allow(unused_variables)]
6721            let offset = encoder.out_of_line_offset(bytes_len);
6722            let mut _prev_end_offset: usize = 0;
6723            if 1 > max_ordinal {
6724                return Ok(());
6725            }
6726
6727            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6728            // are envelope_size bytes.
6729            let cur_offset: usize = (1 - 1) * envelope_size;
6730
6731            // Zero reserved fields.
6732            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6733
6734            // Safety:
6735            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6736            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6737            //   envelope_size bytes, there is always sufficient room.
6738            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6739                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6740                encoder,
6741                offset + cur_offset,
6742                depth,
6743            )?;
6744
6745            _prev_end_offset = cur_offset + envelope_size;
6746            if 2 > max_ordinal {
6747                return Ok(());
6748            }
6749
6750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6751            // are envelope_size bytes.
6752            let cur_offset: usize = (2 - 1) * envelope_size;
6753
6754            // Zero reserved fields.
6755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6756
6757            // Safety:
6758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6760            //   envelope_size bytes, there is always sufficient room.
6761            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6762                self.manufacturer.as_ref().map(
6763                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6764                ),
6765                encoder,
6766                offset + cur_offset,
6767                depth,
6768            )?;
6769
6770            _prev_end_offset = cur_offset + envelope_size;
6771            if 3 > max_ordinal {
6772                return Ok(());
6773            }
6774
6775            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6776            // are envelope_size bytes.
6777            let cur_offset: usize = (3 - 1) * envelope_size;
6778
6779            // Zero reserved fields.
6780            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6781
6782            // Safety:
6783            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6784            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6785            //   envelope_size bytes, there is always sufficient room.
6786            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6787                self.product.as_ref().map(
6788                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6789                ),
6790                encoder,
6791                offset + cur_offset,
6792                depth,
6793            )?;
6794
6795            _prev_end_offset = cur_offset + envelope_size;
6796            if 4 > max_ordinal {
6797                return Ok(());
6798            }
6799
6800            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6801            // are envelope_size bytes.
6802            let cur_offset: usize = (4 - 1) * envelope_size;
6803
6804            // Zero reserved fields.
6805            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6806
6807            // Safety:
6808            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6809            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6810            //   envelope_size bytes, there is always sufficient room.
6811            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6812                self.unique_id.as_ref().map(
6813                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6814                ),
6815                encoder,
6816                offset + cur_offset,
6817                depth,
6818            )?;
6819
6820            _prev_end_offset = cur_offset + envelope_size;
6821            if 5 > max_ordinal {
6822                return Ok(());
6823            }
6824
6825            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6826            // are envelope_size bytes.
6827            let cur_offset: usize = (5 - 1) * envelope_size;
6828
6829            // Zero reserved fields.
6830            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6831
6832            // Safety:
6833            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6834            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6835            //   envelope_size bytes, there is always sufficient room.
6836            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
6837                self.plug_detect_capabilities
6838                    .as_ref()
6839                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
6840                encoder,
6841                offset + cur_offset,
6842                depth,
6843            )?;
6844
6845            _prev_end_offset = cur_offset + envelope_size;
6846
6847            Ok(())
6848        }
6849    }
6850
6851    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProperties {
6852        #[inline(always)]
6853        fn new_empty() -> Self {
6854            Self::default()
6855        }
6856
6857        unsafe fn decode(
6858            &mut self,
6859            decoder: &mut fidl::encoding::Decoder<'_, D>,
6860            offset: usize,
6861            mut depth: fidl::encoding::Depth,
6862        ) -> fidl::Result<()> {
6863            decoder.debug_check_bounds::<Self>(offset);
6864            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6865                None => return Err(fidl::Error::NotNullable),
6866                Some(len) => len,
6867            };
6868            // Calling decoder.out_of_line_offset(0) is not allowed.
6869            if len == 0 {
6870                return Ok(());
6871            };
6872            depth.increment()?;
6873            let envelope_size = 8;
6874            let bytes_len = len * envelope_size;
6875            let offset = decoder.out_of_line_offset(bytes_len)?;
6876            // Decode the envelope for each type.
6877            let mut _next_ordinal_to_read = 0;
6878            let mut next_offset = offset;
6879            let end_offset = offset + bytes_len;
6880            _next_ordinal_to_read += 1;
6881            if next_offset >= end_offset {
6882                return Ok(());
6883            }
6884
6885            // Decode unknown envelopes for gaps in ordinals.
6886            while _next_ordinal_to_read < 1 {
6887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6888                _next_ordinal_to_read += 1;
6889                next_offset += envelope_size;
6890            }
6891
6892            let next_out_of_line = decoder.next_out_of_line();
6893            let handles_before = decoder.remaining_handles();
6894            if let Some((inlined, num_bytes, num_handles)) =
6895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6896            {
6897                let member_inline_size =
6898                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6899                if inlined != (member_inline_size <= 4) {
6900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6901                }
6902                let inner_offset;
6903                let mut inner_depth = depth.clone();
6904                if inlined {
6905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6906                    inner_offset = next_offset;
6907                } else {
6908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6909                    inner_depth.increment()?;
6910                }
6911                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
6912                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6914                {
6915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6916                }
6917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6919                }
6920            }
6921
6922            next_offset += envelope_size;
6923            _next_ordinal_to_read += 1;
6924            if next_offset >= end_offset {
6925                return Ok(());
6926            }
6927
6928            // Decode unknown envelopes for gaps in ordinals.
6929            while _next_ordinal_to_read < 2 {
6930                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6931                _next_ordinal_to_read += 1;
6932                next_offset += envelope_size;
6933            }
6934
6935            let next_out_of_line = decoder.next_out_of_line();
6936            let handles_before = decoder.remaining_handles();
6937            if let Some((inlined, num_bytes, num_handles)) =
6938                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6939            {
6940                let member_inline_size =
6941                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6942                        decoder.context,
6943                    );
6944                if inlined != (member_inline_size <= 4) {
6945                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6946                }
6947                let inner_offset;
6948                let mut inner_depth = depth.clone();
6949                if inlined {
6950                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6951                    inner_offset = next_offset;
6952                } else {
6953                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6954                    inner_depth.increment()?;
6955                }
6956                let val_ref = self
6957                    .manufacturer
6958                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
6959                fidl::decode!(
6960                    fidl::encoding::BoundedString<256>,
6961                    D,
6962                    val_ref,
6963                    decoder,
6964                    inner_offset,
6965                    inner_depth
6966                )?;
6967                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6968                {
6969                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6970                }
6971                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6972                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6973                }
6974            }
6975
6976            next_offset += envelope_size;
6977            _next_ordinal_to_read += 1;
6978            if next_offset >= end_offset {
6979                return Ok(());
6980            }
6981
6982            // Decode unknown envelopes for gaps in ordinals.
6983            while _next_ordinal_to_read < 3 {
6984                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6985                _next_ordinal_to_read += 1;
6986                next_offset += envelope_size;
6987            }
6988
6989            let next_out_of_line = decoder.next_out_of_line();
6990            let handles_before = decoder.remaining_handles();
6991            if let Some((inlined, num_bytes, num_handles)) =
6992                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6993            {
6994                let member_inline_size =
6995                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6996                        decoder.context,
6997                    );
6998                if inlined != (member_inline_size <= 4) {
6999                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7000                }
7001                let inner_offset;
7002                let mut inner_depth = depth.clone();
7003                if inlined {
7004                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7005                    inner_offset = next_offset;
7006                } else {
7007                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7008                    inner_depth.increment()?;
7009                }
7010                let val_ref = self
7011                    .product
7012                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7013                fidl::decode!(
7014                    fidl::encoding::BoundedString<256>,
7015                    D,
7016                    val_ref,
7017                    decoder,
7018                    inner_offset,
7019                    inner_depth
7020                )?;
7021                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7022                {
7023                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7024                }
7025                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7026                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7027                }
7028            }
7029
7030            next_offset += envelope_size;
7031            _next_ordinal_to_read += 1;
7032            if next_offset >= end_offset {
7033                return Ok(());
7034            }
7035
7036            // Decode unknown envelopes for gaps in ordinals.
7037            while _next_ordinal_to_read < 4 {
7038                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7039                _next_ordinal_to_read += 1;
7040                next_offset += envelope_size;
7041            }
7042
7043            let next_out_of_line = decoder.next_out_of_line();
7044            let handles_before = decoder.remaining_handles();
7045            if let Some((inlined, num_bytes, num_handles)) =
7046                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7047            {
7048                let member_inline_size =
7049                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7050                        decoder.context,
7051                    );
7052                if inlined != (member_inline_size <= 4) {
7053                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7054                }
7055                let inner_offset;
7056                let mut inner_depth = depth.clone();
7057                if inlined {
7058                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7059                    inner_offset = next_offset;
7060                } else {
7061                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7062                    inner_depth.increment()?;
7063                }
7064                let val_ref = self
7065                    .unique_id
7066                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7067                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7068                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7069                {
7070                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7071                }
7072                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7073                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7074                }
7075            }
7076
7077            next_offset += envelope_size;
7078            _next_ordinal_to_read += 1;
7079            if next_offset >= end_offset {
7080                return Ok(());
7081            }
7082
7083            // Decode unknown envelopes for gaps in ordinals.
7084            while _next_ordinal_to_read < 5 {
7085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7086                _next_ordinal_to_read += 1;
7087                next_offset += envelope_size;
7088            }
7089
7090            let next_out_of_line = decoder.next_out_of_line();
7091            let handles_before = decoder.remaining_handles();
7092            if let Some((inlined, num_bytes, num_handles)) =
7093                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7094            {
7095                let member_inline_size =
7096                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
7097                        decoder.context,
7098                    );
7099                if inlined != (member_inline_size <= 4) {
7100                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7101                }
7102                let inner_offset;
7103                let mut inner_depth = depth.clone();
7104                if inlined {
7105                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7106                    inner_offset = next_offset;
7107                } else {
7108                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7109                    inner_depth.increment()?;
7110                }
7111                let val_ref = self
7112                    .plug_detect_capabilities
7113                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
7114                fidl::decode!(
7115                    PlugDetectCapabilities,
7116                    D,
7117                    val_ref,
7118                    decoder,
7119                    inner_offset,
7120                    inner_depth
7121                )?;
7122                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7123                {
7124                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7125                }
7126                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7127                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7128                }
7129            }
7130
7131            next_offset += envelope_size;
7132
7133            // Decode the remaining unknown envelopes.
7134            while next_offset < end_offset {
7135                _next_ordinal_to_read += 1;
7136                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7137                next_offset += envelope_size;
7138            }
7139
7140            Ok(())
7141        }
7142    }
7143
7144    impl CompositeProperties {
7145        #[inline(always)]
7146        fn max_ordinal_present(&self) -> u64 {
7147            if let Some(_) = self.clock_domain {
7148                return 5;
7149            }
7150            if let Some(_) = self.unique_id {
7151                return 4;
7152            }
7153            if let Some(_) = self.product {
7154                return 3;
7155            }
7156            if let Some(_) = self.manufacturer {
7157                return 2;
7158            }
7159            0
7160        }
7161    }
7162
7163    impl fidl::encoding::ValueTypeMarker for CompositeProperties {
7164        type Borrowed<'a> = &'a Self;
7165        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7166            value
7167        }
7168    }
7169
7170    unsafe impl fidl::encoding::TypeMarker for CompositeProperties {
7171        type Owned = Self;
7172
7173        #[inline(always)]
7174        fn inline_align(_context: fidl::encoding::Context) -> usize {
7175            8
7176        }
7177
7178        #[inline(always)]
7179        fn inline_size(_context: fidl::encoding::Context) -> usize {
7180            16
7181        }
7182    }
7183
7184    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeProperties, D>
7185        for &CompositeProperties
7186    {
7187        unsafe fn encode(
7188            self,
7189            encoder: &mut fidl::encoding::Encoder<'_, D>,
7190            offset: usize,
7191            mut depth: fidl::encoding::Depth,
7192        ) -> fidl::Result<()> {
7193            encoder.debug_check_bounds::<CompositeProperties>(offset);
7194            // Vector header
7195            let max_ordinal: u64 = self.max_ordinal_present();
7196            encoder.write_num(max_ordinal, offset);
7197            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7198            // Calling encoder.out_of_line_offset(0) is not allowed.
7199            if max_ordinal == 0 {
7200                return Ok(());
7201            }
7202            depth.increment()?;
7203            let envelope_size = 8;
7204            let bytes_len = max_ordinal as usize * envelope_size;
7205            #[allow(unused_variables)]
7206            let offset = encoder.out_of_line_offset(bytes_len);
7207            let mut _prev_end_offset: usize = 0;
7208            if 2 > max_ordinal {
7209                return Ok(());
7210            }
7211
7212            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7213            // are envelope_size bytes.
7214            let cur_offset: usize = (2 - 1) * envelope_size;
7215
7216            // Zero reserved fields.
7217            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7218
7219            // Safety:
7220            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7221            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7222            //   envelope_size bytes, there is always sufficient room.
7223            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7224                self.manufacturer.as_ref().map(
7225                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7226                ),
7227                encoder,
7228                offset + cur_offset,
7229                depth,
7230            )?;
7231
7232            _prev_end_offset = cur_offset + envelope_size;
7233            if 3 > max_ordinal {
7234                return Ok(());
7235            }
7236
7237            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7238            // are envelope_size bytes.
7239            let cur_offset: usize = (3 - 1) * envelope_size;
7240
7241            // Zero reserved fields.
7242            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7243
7244            // Safety:
7245            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7246            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7247            //   envelope_size bytes, there is always sufficient room.
7248            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7249                self.product.as_ref().map(
7250                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7251                ),
7252                encoder,
7253                offset + cur_offset,
7254                depth,
7255            )?;
7256
7257            _prev_end_offset = cur_offset + envelope_size;
7258            if 4 > max_ordinal {
7259                return Ok(());
7260            }
7261
7262            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7263            // are envelope_size bytes.
7264            let cur_offset: usize = (4 - 1) * envelope_size;
7265
7266            // Zero reserved fields.
7267            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7268
7269            // Safety:
7270            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7271            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7272            //   envelope_size bytes, there is always sufficient room.
7273            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7274                self.unique_id.as_ref().map(
7275                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7276                ),
7277                encoder,
7278                offset + cur_offset,
7279                depth,
7280            )?;
7281
7282            _prev_end_offset = cur_offset + envelope_size;
7283            if 5 > max_ordinal {
7284                return Ok(());
7285            }
7286
7287            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7288            // are envelope_size bytes.
7289            let cur_offset: usize = (5 - 1) * envelope_size;
7290
7291            // Zero reserved fields.
7292            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7293
7294            // Safety:
7295            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7296            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7297            //   envelope_size bytes, there is always sufficient room.
7298            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7299                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7300                encoder,
7301                offset + cur_offset,
7302                depth,
7303            )?;
7304
7305            _prev_end_offset = cur_offset + envelope_size;
7306
7307            Ok(())
7308        }
7309    }
7310
7311    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeProperties {
7312        #[inline(always)]
7313        fn new_empty() -> Self {
7314            Self::default()
7315        }
7316
7317        unsafe fn decode(
7318            &mut self,
7319            decoder: &mut fidl::encoding::Decoder<'_, D>,
7320            offset: usize,
7321            mut depth: fidl::encoding::Depth,
7322        ) -> fidl::Result<()> {
7323            decoder.debug_check_bounds::<Self>(offset);
7324            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7325                None => return Err(fidl::Error::NotNullable),
7326                Some(len) => len,
7327            };
7328            // Calling decoder.out_of_line_offset(0) is not allowed.
7329            if len == 0 {
7330                return Ok(());
7331            };
7332            depth.increment()?;
7333            let envelope_size = 8;
7334            let bytes_len = len * envelope_size;
7335            let offset = decoder.out_of_line_offset(bytes_len)?;
7336            // Decode the envelope for each type.
7337            let mut _next_ordinal_to_read = 0;
7338            let mut next_offset = offset;
7339            let end_offset = offset + bytes_len;
7340            _next_ordinal_to_read += 1;
7341            if next_offset >= end_offset {
7342                return Ok(());
7343            }
7344
7345            // Decode unknown envelopes for gaps in ordinals.
7346            while _next_ordinal_to_read < 2 {
7347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7348                _next_ordinal_to_read += 1;
7349                next_offset += envelope_size;
7350            }
7351
7352            let next_out_of_line = decoder.next_out_of_line();
7353            let handles_before = decoder.remaining_handles();
7354            if let Some((inlined, num_bytes, num_handles)) =
7355                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7356            {
7357                let member_inline_size =
7358                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7359                        decoder.context,
7360                    );
7361                if inlined != (member_inline_size <= 4) {
7362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7363                }
7364                let inner_offset;
7365                let mut inner_depth = depth.clone();
7366                if inlined {
7367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7368                    inner_offset = next_offset;
7369                } else {
7370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7371                    inner_depth.increment()?;
7372                }
7373                let val_ref = self
7374                    .manufacturer
7375                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7376                fidl::decode!(
7377                    fidl::encoding::BoundedString<256>,
7378                    D,
7379                    val_ref,
7380                    decoder,
7381                    inner_offset,
7382                    inner_depth
7383                )?;
7384                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7385                {
7386                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7387                }
7388                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7389                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7390                }
7391            }
7392
7393            next_offset += envelope_size;
7394            _next_ordinal_to_read += 1;
7395            if next_offset >= end_offset {
7396                return Ok(());
7397            }
7398
7399            // Decode unknown envelopes for gaps in ordinals.
7400            while _next_ordinal_to_read < 3 {
7401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7402                _next_ordinal_to_read += 1;
7403                next_offset += envelope_size;
7404            }
7405
7406            let next_out_of_line = decoder.next_out_of_line();
7407            let handles_before = decoder.remaining_handles();
7408            if let Some((inlined, num_bytes, num_handles)) =
7409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7410            {
7411                let member_inline_size =
7412                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7413                        decoder.context,
7414                    );
7415                if inlined != (member_inline_size <= 4) {
7416                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7417                }
7418                let inner_offset;
7419                let mut inner_depth = depth.clone();
7420                if inlined {
7421                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7422                    inner_offset = next_offset;
7423                } else {
7424                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7425                    inner_depth.increment()?;
7426                }
7427                let val_ref = self
7428                    .product
7429                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7430                fidl::decode!(
7431                    fidl::encoding::BoundedString<256>,
7432                    D,
7433                    val_ref,
7434                    decoder,
7435                    inner_offset,
7436                    inner_depth
7437                )?;
7438                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7439                {
7440                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7441                }
7442                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7443                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7444                }
7445            }
7446
7447            next_offset += envelope_size;
7448            _next_ordinal_to_read += 1;
7449            if next_offset >= end_offset {
7450                return Ok(());
7451            }
7452
7453            // Decode unknown envelopes for gaps in ordinals.
7454            while _next_ordinal_to_read < 4 {
7455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7456                _next_ordinal_to_read += 1;
7457                next_offset += envelope_size;
7458            }
7459
7460            let next_out_of_line = decoder.next_out_of_line();
7461            let handles_before = decoder.remaining_handles();
7462            if let Some((inlined, num_bytes, num_handles)) =
7463                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7464            {
7465                let member_inline_size =
7466                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7467                        decoder.context,
7468                    );
7469                if inlined != (member_inline_size <= 4) {
7470                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7471                }
7472                let inner_offset;
7473                let mut inner_depth = depth.clone();
7474                if inlined {
7475                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7476                    inner_offset = next_offset;
7477                } else {
7478                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7479                    inner_depth.increment()?;
7480                }
7481                let val_ref = self
7482                    .unique_id
7483                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7484                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7485                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7486                {
7487                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7488                }
7489                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7490                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7491                }
7492            }
7493
7494            next_offset += envelope_size;
7495            _next_ordinal_to_read += 1;
7496            if next_offset >= end_offset {
7497                return Ok(());
7498            }
7499
7500            // Decode unknown envelopes for gaps in ordinals.
7501            while _next_ordinal_to_read < 5 {
7502                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7503                _next_ordinal_to_read += 1;
7504                next_offset += envelope_size;
7505            }
7506
7507            let next_out_of_line = decoder.next_out_of_line();
7508            let handles_before = decoder.remaining_handles();
7509            if let Some((inlined, num_bytes, num_handles)) =
7510                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7511            {
7512                let member_inline_size =
7513                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7514                if inlined != (member_inline_size <= 4) {
7515                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7516                }
7517                let inner_offset;
7518                let mut inner_depth = depth.clone();
7519                if inlined {
7520                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7521                    inner_offset = next_offset;
7522                } else {
7523                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7524                    inner_depth.increment()?;
7525                }
7526                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
7527                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7528                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7529                {
7530                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7531                }
7532                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7533                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7534                }
7535            }
7536
7537            next_offset += envelope_size;
7538
7539            // Decode the remaining unknown envelopes.
7540            while next_offset < end_offset {
7541                _next_ordinal_to_read += 1;
7542                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7543                next_offset += envelope_size;
7544            }
7545
7546            Ok(())
7547        }
7548    }
7549
7550    impl DaiProperties {
7551        #[inline(always)]
7552        fn max_ordinal_present(&self) -> u64 {
7553            if let Some(_) = self.clock_domain {
7554                return 5;
7555            }
7556            if let Some(_) = self.unique_id {
7557                return 4;
7558            }
7559            if let Some(_) = self.product_name {
7560                return 3;
7561            }
7562            if let Some(_) = self.manufacturer {
7563                return 2;
7564            }
7565            if let Some(_) = self.is_input {
7566                return 1;
7567            }
7568            0
7569        }
7570    }
7571
7572    impl fidl::encoding::ValueTypeMarker for DaiProperties {
7573        type Borrowed<'a> = &'a Self;
7574        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7575            value
7576        }
7577    }
7578
7579    unsafe impl fidl::encoding::TypeMarker for DaiProperties {
7580        type Owned = Self;
7581
7582        #[inline(always)]
7583        fn inline_align(_context: fidl::encoding::Context) -> usize {
7584            8
7585        }
7586
7587        #[inline(always)]
7588        fn inline_size(_context: fidl::encoding::Context) -> usize {
7589            16
7590        }
7591    }
7592
7593    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiProperties, D>
7594        for &DaiProperties
7595    {
7596        unsafe fn encode(
7597            self,
7598            encoder: &mut fidl::encoding::Encoder<'_, D>,
7599            offset: usize,
7600            mut depth: fidl::encoding::Depth,
7601        ) -> fidl::Result<()> {
7602            encoder.debug_check_bounds::<DaiProperties>(offset);
7603            // Vector header
7604            let max_ordinal: u64 = self.max_ordinal_present();
7605            encoder.write_num(max_ordinal, offset);
7606            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7607            // Calling encoder.out_of_line_offset(0) is not allowed.
7608            if max_ordinal == 0 {
7609                return Ok(());
7610            }
7611            depth.increment()?;
7612            let envelope_size = 8;
7613            let bytes_len = max_ordinal as usize * envelope_size;
7614            #[allow(unused_variables)]
7615            let offset = encoder.out_of_line_offset(bytes_len);
7616            let mut _prev_end_offset: usize = 0;
7617            if 1 > max_ordinal {
7618                return Ok(());
7619            }
7620
7621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7622            // are envelope_size bytes.
7623            let cur_offset: usize = (1 - 1) * envelope_size;
7624
7625            // Zero reserved fields.
7626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7627
7628            // Safety:
7629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7631            //   envelope_size bytes, there is always sufficient room.
7632            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7633                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7634                encoder,
7635                offset + cur_offset,
7636                depth,
7637            )?;
7638
7639            _prev_end_offset = cur_offset + envelope_size;
7640            if 2 > max_ordinal {
7641                return Ok(());
7642            }
7643
7644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7645            // are envelope_size bytes.
7646            let cur_offset: usize = (2 - 1) * envelope_size;
7647
7648            // Zero reserved fields.
7649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7650
7651            // Safety:
7652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7654            //   envelope_size bytes, there is always sufficient room.
7655            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7656                self.manufacturer.as_ref().map(
7657                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7658                ),
7659                encoder,
7660                offset + cur_offset,
7661                depth,
7662            )?;
7663
7664            _prev_end_offset = cur_offset + envelope_size;
7665            if 3 > max_ordinal {
7666                return Ok(());
7667            }
7668
7669            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7670            // are envelope_size bytes.
7671            let cur_offset: usize = (3 - 1) * envelope_size;
7672
7673            // Zero reserved fields.
7674            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7675
7676            // Safety:
7677            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7678            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7679            //   envelope_size bytes, there is always sufficient room.
7680            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7681                self.product_name.as_ref().map(
7682                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7683                ),
7684                encoder,
7685                offset + cur_offset,
7686                depth,
7687            )?;
7688
7689            _prev_end_offset = cur_offset + envelope_size;
7690            if 4 > max_ordinal {
7691                return Ok(());
7692            }
7693
7694            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7695            // are envelope_size bytes.
7696            let cur_offset: usize = (4 - 1) * envelope_size;
7697
7698            // Zero reserved fields.
7699            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7700
7701            // Safety:
7702            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7703            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7704            //   envelope_size bytes, there is always sufficient room.
7705            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7706                self.unique_id.as_ref().map(
7707                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7708                ),
7709                encoder,
7710                offset + cur_offset,
7711                depth,
7712            )?;
7713
7714            _prev_end_offset = cur_offset + envelope_size;
7715            if 5 > max_ordinal {
7716                return Ok(());
7717            }
7718
7719            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7720            // are envelope_size bytes.
7721            let cur_offset: usize = (5 - 1) * envelope_size;
7722
7723            // Zero reserved fields.
7724            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7725
7726            // Safety:
7727            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7728            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7729            //   envelope_size bytes, there is always sufficient room.
7730            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7731                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7732                encoder,
7733                offset + cur_offset,
7734                depth,
7735            )?;
7736
7737            _prev_end_offset = cur_offset + envelope_size;
7738
7739            Ok(())
7740        }
7741    }
7742
7743    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiProperties {
7744        #[inline(always)]
7745        fn new_empty() -> Self {
7746            Self::default()
7747        }
7748
7749        unsafe fn decode(
7750            &mut self,
7751            decoder: &mut fidl::encoding::Decoder<'_, D>,
7752            offset: usize,
7753            mut depth: fidl::encoding::Depth,
7754        ) -> fidl::Result<()> {
7755            decoder.debug_check_bounds::<Self>(offset);
7756            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7757                None => return Err(fidl::Error::NotNullable),
7758                Some(len) => len,
7759            };
7760            // Calling decoder.out_of_line_offset(0) is not allowed.
7761            if len == 0 {
7762                return Ok(());
7763            };
7764            depth.increment()?;
7765            let envelope_size = 8;
7766            let bytes_len = len * envelope_size;
7767            let offset = decoder.out_of_line_offset(bytes_len)?;
7768            // Decode the envelope for each type.
7769            let mut _next_ordinal_to_read = 0;
7770            let mut next_offset = offset;
7771            let end_offset = offset + bytes_len;
7772            _next_ordinal_to_read += 1;
7773            if next_offset >= end_offset {
7774                return Ok(());
7775            }
7776
7777            // Decode unknown envelopes for gaps in ordinals.
7778            while _next_ordinal_to_read < 1 {
7779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7780                _next_ordinal_to_read += 1;
7781                next_offset += envelope_size;
7782            }
7783
7784            let next_out_of_line = decoder.next_out_of_line();
7785            let handles_before = decoder.remaining_handles();
7786            if let Some((inlined, num_bytes, num_handles)) =
7787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7788            {
7789                let member_inline_size =
7790                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7791                if inlined != (member_inline_size <= 4) {
7792                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7793                }
7794                let inner_offset;
7795                let mut inner_depth = depth.clone();
7796                if inlined {
7797                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7798                    inner_offset = next_offset;
7799                } else {
7800                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7801                    inner_depth.increment()?;
7802                }
7803                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7804                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7805                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7806                {
7807                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7808                }
7809                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7810                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7811                }
7812            }
7813
7814            next_offset += envelope_size;
7815            _next_ordinal_to_read += 1;
7816            if next_offset >= end_offset {
7817                return Ok(());
7818            }
7819
7820            // Decode unknown envelopes for gaps in ordinals.
7821            while _next_ordinal_to_read < 2 {
7822                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7823                _next_ordinal_to_read += 1;
7824                next_offset += envelope_size;
7825            }
7826
7827            let next_out_of_line = decoder.next_out_of_line();
7828            let handles_before = decoder.remaining_handles();
7829            if let Some((inlined, num_bytes, num_handles)) =
7830                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7831            {
7832                let member_inline_size =
7833                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7834                        decoder.context,
7835                    );
7836                if inlined != (member_inline_size <= 4) {
7837                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7838                }
7839                let inner_offset;
7840                let mut inner_depth = depth.clone();
7841                if inlined {
7842                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7843                    inner_offset = next_offset;
7844                } else {
7845                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7846                    inner_depth.increment()?;
7847                }
7848                let val_ref = self
7849                    .manufacturer
7850                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7851                fidl::decode!(
7852                    fidl::encoding::BoundedString<256>,
7853                    D,
7854                    val_ref,
7855                    decoder,
7856                    inner_offset,
7857                    inner_depth
7858                )?;
7859                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7860                {
7861                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7862                }
7863                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7864                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7865                }
7866            }
7867
7868            next_offset += envelope_size;
7869            _next_ordinal_to_read += 1;
7870            if next_offset >= end_offset {
7871                return Ok(());
7872            }
7873
7874            // Decode unknown envelopes for gaps in ordinals.
7875            while _next_ordinal_to_read < 3 {
7876                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7877                _next_ordinal_to_read += 1;
7878                next_offset += envelope_size;
7879            }
7880
7881            let next_out_of_line = decoder.next_out_of_line();
7882            let handles_before = decoder.remaining_handles();
7883            if let Some((inlined, num_bytes, num_handles)) =
7884                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7885            {
7886                let member_inline_size =
7887                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7888                        decoder.context,
7889                    );
7890                if inlined != (member_inline_size <= 4) {
7891                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7892                }
7893                let inner_offset;
7894                let mut inner_depth = depth.clone();
7895                if inlined {
7896                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7897                    inner_offset = next_offset;
7898                } else {
7899                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7900                    inner_depth.increment()?;
7901                }
7902                let val_ref = self
7903                    .product_name
7904                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7905                fidl::decode!(
7906                    fidl::encoding::BoundedString<256>,
7907                    D,
7908                    val_ref,
7909                    decoder,
7910                    inner_offset,
7911                    inner_depth
7912                )?;
7913                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7914                {
7915                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7916                }
7917                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7918                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7919                }
7920            }
7921
7922            next_offset += envelope_size;
7923            _next_ordinal_to_read += 1;
7924            if next_offset >= end_offset {
7925                return Ok(());
7926            }
7927
7928            // Decode unknown envelopes for gaps in ordinals.
7929            while _next_ordinal_to_read < 4 {
7930                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7931                _next_ordinal_to_read += 1;
7932                next_offset += envelope_size;
7933            }
7934
7935            let next_out_of_line = decoder.next_out_of_line();
7936            let handles_before = decoder.remaining_handles();
7937            if let Some((inlined, num_bytes, num_handles)) =
7938                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7939            {
7940                let member_inline_size =
7941                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7942                        decoder.context,
7943                    );
7944                if inlined != (member_inline_size <= 4) {
7945                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7946                }
7947                let inner_offset;
7948                let mut inner_depth = depth.clone();
7949                if inlined {
7950                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7951                    inner_offset = next_offset;
7952                } else {
7953                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7954                    inner_depth.increment()?;
7955                }
7956                let val_ref = self
7957                    .unique_id
7958                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7959                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7960                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7961                {
7962                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7963                }
7964                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7965                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7966                }
7967            }
7968
7969            next_offset += envelope_size;
7970            _next_ordinal_to_read += 1;
7971            if next_offset >= end_offset {
7972                return Ok(());
7973            }
7974
7975            // Decode unknown envelopes for gaps in ordinals.
7976            while _next_ordinal_to_read < 5 {
7977                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7978                _next_ordinal_to_read += 1;
7979                next_offset += envelope_size;
7980            }
7981
7982            let next_out_of_line = decoder.next_out_of_line();
7983            let handles_before = decoder.remaining_handles();
7984            if let Some((inlined, num_bytes, num_handles)) =
7985                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7986            {
7987                let member_inline_size =
7988                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7989                if inlined != (member_inline_size <= 4) {
7990                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7991                }
7992                let inner_offset;
7993                let mut inner_depth = depth.clone();
7994                if inlined {
7995                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7996                    inner_offset = next_offset;
7997                } else {
7998                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7999                    inner_depth.increment()?;
8000                }
8001                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
8002                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8003                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8004                {
8005                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8006                }
8007                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8008                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8009                }
8010            }
8011
8012            next_offset += envelope_size;
8013
8014            // Decode the remaining unknown envelopes.
8015            while next_offset < end_offset {
8016                _next_ordinal_to_read += 1;
8017                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8018                next_offset += envelope_size;
8019            }
8020
8021            Ok(())
8022        }
8023    }
8024
8025    impl DelayInfo {
8026        #[inline(always)]
8027        fn max_ordinal_present(&self) -> u64 {
8028            if let Some(_) = self.external_delay {
8029                return 2;
8030            }
8031            if let Some(_) = self.internal_delay {
8032                return 1;
8033            }
8034            0
8035        }
8036    }
8037
8038    impl fidl::encoding::ValueTypeMarker for DelayInfo {
8039        type Borrowed<'a> = &'a Self;
8040        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8041            value
8042        }
8043    }
8044
8045    unsafe impl fidl::encoding::TypeMarker for DelayInfo {
8046        type Owned = Self;
8047
8048        #[inline(always)]
8049        fn inline_align(_context: fidl::encoding::Context) -> usize {
8050            8
8051        }
8052
8053        #[inline(always)]
8054        fn inline_size(_context: fidl::encoding::Context) -> usize {
8055            16
8056        }
8057    }
8058
8059    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DelayInfo, D>
8060        for &DelayInfo
8061    {
8062        unsafe fn encode(
8063            self,
8064            encoder: &mut fidl::encoding::Encoder<'_, D>,
8065            offset: usize,
8066            mut depth: fidl::encoding::Depth,
8067        ) -> fidl::Result<()> {
8068            encoder.debug_check_bounds::<DelayInfo>(offset);
8069            // Vector header
8070            let max_ordinal: u64 = self.max_ordinal_present();
8071            encoder.write_num(max_ordinal, offset);
8072            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8073            // Calling encoder.out_of_line_offset(0) is not allowed.
8074            if max_ordinal == 0 {
8075                return Ok(());
8076            }
8077            depth.increment()?;
8078            let envelope_size = 8;
8079            let bytes_len = max_ordinal as usize * envelope_size;
8080            #[allow(unused_variables)]
8081            let offset = encoder.out_of_line_offset(bytes_len);
8082            let mut _prev_end_offset: usize = 0;
8083            if 1 > max_ordinal {
8084                return Ok(());
8085            }
8086
8087            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8088            // are envelope_size bytes.
8089            let cur_offset: usize = (1 - 1) * envelope_size;
8090
8091            // Zero reserved fields.
8092            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8093
8094            // Safety:
8095            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8096            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8097            //   envelope_size bytes, there is always sufficient room.
8098            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8099                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8100                encoder,
8101                offset + cur_offset,
8102                depth,
8103            )?;
8104
8105            _prev_end_offset = cur_offset + envelope_size;
8106            if 2 > max_ordinal {
8107                return Ok(());
8108            }
8109
8110            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8111            // are envelope_size bytes.
8112            let cur_offset: usize = (2 - 1) * envelope_size;
8113
8114            // Zero reserved fields.
8115            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8116
8117            // Safety:
8118            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8119            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8120            //   envelope_size bytes, there is always sufficient room.
8121            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8122                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8123                encoder,
8124                offset + cur_offset,
8125                depth,
8126            )?;
8127
8128            _prev_end_offset = cur_offset + envelope_size;
8129
8130            Ok(())
8131        }
8132    }
8133
8134    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DelayInfo {
8135        #[inline(always)]
8136        fn new_empty() -> Self {
8137            Self::default()
8138        }
8139
8140        unsafe fn decode(
8141            &mut self,
8142            decoder: &mut fidl::encoding::Decoder<'_, D>,
8143            offset: usize,
8144            mut depth: fidl::encoding::Depth,
8145        ) -> fidl::Result<()> {
8146            decoder.debug_check_bounds::<Self>(offset);
8147            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8148                None => return Err(fidl::Error::NotNullable),
8149                Some(len) => len,
8150            };
8151            // Calling decoder.out_of_line_offset(0) is not allowed.
8152            if len == 0 {
8153                return Ok(());
8154            };
8155            depth.increment()?;
8156            let envelope_size = 8;
8157            let bytes_len = len * envelope_size;
8158            let offset = decoder.out_of_line_offset(bytes_len)?;
8159            // Decode the envelope for each type.
8160            let mut _next_ordinal_to_read = 0;
8161            let mut next_offset = offset;
8162            let end_offset = offset + bytes_len;
8163            _next_ordinal_to_read += 1;
8164            if next_offset >= end_offset {
8165                return Ok(());
8166            }
8167
8168            // Decode unknown envelopes for gaps in ordinals.
8169            while _next_ordinal_to_read < 1 {
8170                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8171                _next_ordinal_to_read += 1;
8172                next_offset += envelope_size;
8173            }
8174
8175            let next_out_of_line = decoder.next_out_of_line();
8176            let handles_before = decoder.remaining_handles();
8177            if let Some((inlined, num_bytes, num_handles)) =
8178                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8179            {
8180                let member_inline_size =
8181                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8182                if inlined != (member_inline_size <= 4) {
8183                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8184                }
8185                let inner_offset;
8186                let mut inner_depth = depth.clone();
8187                if inlined {
8188                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8189                    inner_offset = next_offset;
8190                } else {
8191                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8192                    inner_depth.increment()?;
8193                }
8194                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8195                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8196                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8197                {
8198                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8199                }
8200                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8201                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8202                }
8203            }
8204
8205            next_offset += envelope_size;
8206            _next_ordinal_to_read += 1;
8207            if next_offset >= end_offset {
8208                return Ok(());
8209            }
8210
8211            // Decode unknown envelopes for gaps in ordinals.
8212            while _next_ordinal_to_read < 2 {
8213                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8214                _next_ordinal_to_read += 1;
8215                next_offset += envelope_size;
8216            }
8217
8218            let next_out_of_line = decoder.next_out_of_line();
8219            let handles_before = decoder.remaining_handles();
8220            if let Some((inlined, num_bytes, num_handles)) =
8221                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8222            {
8223                let member_inline_size =
8224                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8225                if inlined != (member_inline_size <= 4) {
8226                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8227                }
8228                let inner_offset;
8229                let mut inner_depth = depth.clone();
8230                if inlined {
8231                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8232                    inner_offset = next_offset;
8233                } else {
8234                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8235                    inner_depth.increment()?;
8236                }
8237                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8238                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8239                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8240                {
8241                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8242                }
8243                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8244                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8245                }
8246            }
8247
8248            next_offset += envelope_size;
8249
8250            // Decode the remaining unknown envelopes.
8251            while next_offset < end_offset {
8252                _next_ordinal_to_read += 1;
8253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8254                next_offset += envelope_size;
8255            }
8256
8257            Ok(())
8258        }
8259    }
8260
8261    impl Encoding {
8262        #[inline(always)]
8263        fn max_ordinal_present(&self) -> u64 {
8264            if let Some(_) = self.encoding_type {
8265                return 4;
8266            }
8267            if let Some(_) = self.average_encoding_bitrate {
8268                return 3;
8269            }
8270            if let Some(_) = self.decoded_frame_rate {
8271                return 2;
8272            }
8273            if let Some(_) = self.decoded_channel_count {
8274                return 1;
8275            }
8276            0
8277        }
8278    }
8279
8280    impl fidl::encoding::ValueTypeMarker for Encoding {
8281        type Borrowed<'a> = &'a Self;
8282        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8283            value
8284        }
8285    }
8286
8287    unsafe impl fidl::encoding::TypeMarker for Encoding {
8288        type Owned = Self;
8289
8290        #[inline(always)]
8291        fn inline_align(_context: fidl::encoding::Context) -> usize {
8292            8
8293        }
8294
8295        #[inline(always)]
8296        fn inline_size(_context: fidl::encoding::Context) -> usize {
8297            16
8298        }
8299    }
8300
8301    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Encoding, D> for &Encoding {
8302        unsafe fn encode(
8303            self,
8304            encoder: &mut fidl::encoding::Encoder<'_, D>,
8305            offset: usize,
8306            mut depth: fidl::encoding::Depth,
8307        ) -> fidl::Result<()> {
8308            encoder.debug_check_bounds::<Encoding>(offset);
8309            // Vector header
8310            let max_ordinal: u64 = self.max_ordinal_present();
8311            encoder.write_num(max_ordinal, offset);
8312            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8313            // Calling encoder.out_of_line_offset(0) is not allowed.
8314            if max_ordinal == 0 {
8315                return Ok(());
8316            }
8317            depth.increment()?;
8318            let envelope_size = 8;
8319            let bytes_len = max_ordinal as usize * envelope_size;
8320            #[allow(unused_variables)]
8321            let offset = encoder.out_of_line_offset(bytes_len);
8322            let mut _prev_end_offset: usize = 0;
8323            if 1 > max_ordinal {
8324                return Ok(());
8325            }
8326
8327            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8328            // are envelope_size bytes.
8329            let cur_offset: usize = (1 - 1) * envelope_size;
8330
8331            // Zero reserved fields.
8332            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8333
8334            // Safety:
8335            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8336            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8337            //   envelope_size bytes, there is always sufficient room.
8338            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8339                self.decoded_channel_count
8340                    .as_ref()
8341                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8342                encoder,
8343                offset + cur_offset,
8344                depth,
8345            )?;
8346
8347            _prev_end_offset = cur_offset + envelope_size;
8348            if 2 > max_ordinal {
8349                return Ok(());
8350            }
8351
8352            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8353            // are envelope_size bytes.
8354            let cur_offset: usize = (2 - 1) * envelope_size;
8355
8356            // Zero reserved fields.
8357            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8358
8359            // Safety:
8360            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8361            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8362            //   envelope_size bytes, there is always sufficient room.
8363            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8364                self.decoded_frame_rate
8365                    .as_ref()
8366                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8367                encoder,
8368                offset + cur_offset,
8369                depth,
8370            )?;
8371
8372            _prev_end_offset = cur_offset + envelope_size;
8373            if 3 > max_ordinal {
8374                return Ok(());
8375            }
8376
8377            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8378            // are envelope_size bytes.
8379            let cur_offset: usize = (3 - 1) * envelope_size;
8380
8381            // Zero reserved fields.
8382            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8383
8384            // Safety:
8385            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8386            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8387            //   envelope_size bytes, there is always sufficient room.
8388            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8389                self.average_encoding_bitrate
8390                    .as_ref()
8391                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8392                encoder,
8393                offset + cur_offset,
8394                depth,
8395            )?;
8396
8397            _prev_end_offset = cur_offset + envelope_size;
8398            if 4 > max_ordinal {
8399                return Ok(());
8400            }
8401
8402            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8403            // are envelope_size bytes.
8404            let cur_offset: usize = (4 - 1) * envelope_size;
8405
8406            // Zero reserved fields.
8407            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8408
8409            // Safety:
8410            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8411            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8412            //   envelope_size bytes, there is always sufficient room.
8413            fidl::encoding::encode_in_envelope_optional::<EncodingType, D>(
8414                self.encoding_type
8415                    .as_ref()
8416                    .map(<EncodingType as fidl::encoding::ValueTypeMarker>::borrow),
8417                encoder,
8418                offset + cur_offset,
8419                depth,
8420            )?;
8421
8422            _prev_end_offset = cur_offset + envelope_size;
8423
8424            Ok(())
8425        }
8426    }
8427
8428    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Encoding {
8429        #[inline(always)]
8430        fn new_empty() -> Self {
8431            Self::default()
8432        }
8433
8434        unsafe fn decode(
8435            &mut self,
8436            decoder: &mut fidl::encoding::Decoder<'_, D>,
8437            offset: usize,
8438            mut depth: fidl::encoding::Depth,
8439        ) -> fidl::Result<()> {
8440            decoder.debug_check_bounds::<Self>(offset);
8441            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8442                None => return Err(fidl::Error::NotNullable),
8443                Some(len) => len,
8444            };
8445            // Calling decoder.out_of_line_offset(0) is not allowed.
8446            if len == 0 {
8447                return Ok(());
8448            };
8449            depth.increment()?;
8450            let envelope_size = 8;
8451            let bytes_len = len * envelope_size;
8452            let offset = decoder.out_of_line_offset(bytes_len)?;
8453            // Decode the envelope for each type.
8454            let mut _next_ordinal_to_read = 0;
8455            let mut next_offset = offset;
8456            let end_offset = offset + bytes_len;
8457            _next_ordinal_to_read += 1;
8458            if next_offset >= end_offset {
8459                return Ok(());
8460            }
8461
8462            // Decode unknown envelopes for gaps in ordinals.
8463            while _next_ordinal_to_read < 1 {
8464                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8465                _next_ordinal_to_read += 1;
8466                next_offset += envelope_size;
8467            }
8468
8469            let next_out_of_line = decoder.next_out_of_line();
8470            let handles_before = decoder.remaining_handles();
8471            if let Some((inlined, num_bytes, num_handles)) =
8472                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8473            {
8474                let member_inline_size =
8475                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8476                if inlined != (member_inline_size <= 4) {
8477                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8478                }
8479                let inner_offset;
8480                let mut inner_depth = depth.clone();
8481                if inlined {
8482                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8483                    inner_offset = next_offset;
8484                } else {
8485                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8486                    inner_depth.increment()?;
8487                }
8488                let val_ref =
8489                    self.decoded_channel_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
8490                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8491                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8492                {
8493                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8494                }
8495                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8496                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8497                }
8498            }
8499
8500            next_offset += envelope_size;
8501            _next_ordinal_to_read += 1;
8502            if next_offset >= end_offset {
8503                return Ok(());
8504            }
8505
8506            // Decode unknown envelopes for gaps in ordinals.
8507            while _next_ordinal_to_read < 2 {
8508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8509                _next_ordinal_to_read += 1;
8510                next_offset += envelope_size;
8511            }
8512
8513            let next_out_of_line = decoder.next_out_of_line();
8514            let handles_before = decoder.remaining_handles();
8515            if let Some((inlined, num_bytes, num_handles)) =
8516                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8517            {
8518                let member_inline_size =
8519                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8520                if inlined != (member_inline_size <= 4) {
8521                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8522                }
8523                let inner_offset;
8524                let mut inner_depth = depth.clone();
8525                if inlined {
8526                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8527                    inner_offset = next_offset;
8528                } else {
8529                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8530                    inner_depth.increment()?;
8531                }
8532                let val_ref =
8533                    self.decoded_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8534                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8535                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8536                {
8537                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8538                }
8539                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8540                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8541                }
8542            }
8543
8544            next_offset += envelope_size;
8545            _next_ordinal_to_read += 1;
8546            if next_offset >= end_offset {
8547                return Ok(());
8548            }
8549
8550            // Decode unknown envelopes for gaps in ordinals.
8551            while _next_ordinal_to_read < 3 {
8552                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8553                _next_ordinal_to_read += 1;
8554                next_offset += envelope_size;
8555            }
8556
8557            let next_out_of_line = decoder.next_out_of_line();
8558            let handles_before = decoder.remaining_handles();
8559            if let Some((inlined, num_bytes, num_handles)) =
8560                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8561            {
8562                let member_inline_size =
8563                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8564                if inlined != (member_inline_size <= 4) {
8565                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8566                }
8567                let inner_offset;
8568                let mut inner_depth = depth.clone();
8569                if inlined {
8570                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8571                    inner_offset = next_offset;
8572                } else {
8573                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8574                    inner_depth.increment()?;
8575                }
8576                let val_ref =
8577                    self.average_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8578                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8579                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8580                {
8581                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8582                }
8583                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8584                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8585                }
8586            }
8587
8588            next_offset += envelope_size;
8589            _next_ordinal_to_read += 1;
8590            if next_offset >= end_offset {
8591                return Ok(());
8592            }
8593
8594            // Decode unknown envelopes for gaps in ordinals.
8595            while _next_ordinal_to_read < 4 {
8596                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8597                _next_ordinal_to_read += 1;
8598                next_offset += envelope_size;
8599            }
8600
8601            let next_out_of_line = decoder.next_out_of_line();
8602            let handles_before = decoder.remaining_handles();
8603            if let Some((inlined, num_bytes, num_handles)) =
8604                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8605            {
8606                let member_inline_size =
8607                    <EncodingType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8608                if inlined != (member_inline_size <= 4) {
8609                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8610                }
8611                let inner_offset;
8612                let mut inner_depth = depth.clone();
8613                if inlined {
8614                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8615                    inner_offset = next_offset;
8616                } else {
8617                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8618                    inner_depth.increment()?;
8619                }
8620                let val_ref =
8621                    self.encoding_type.get_or_insert_with(|| fidl::new_empty!(EncodingType, D));
8622                fidl::decode!(EncodingType, D, val_ref, decoder, inner_offset, inner_depth)?;
8623                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8624                {
8625                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8626                }
8627                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8628                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8629                }
8630            }
8631
8632            next_offset += envelope_size;
8633
8634            // Decode the remaining unknown envelopes.
8635            while next_offset < end_offset {
8636                _next_ordinal_to_read += 1;
8637                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8638                next_offset += envelope_size;
8639            }
8640
8641            Ok(())
8642        }
8643    }
8644
8645    impl Format {
8646        #[inline(always)]
8647        fn max_ordinal_present(&self) -> u64 {
8648            if let Some(_) = self.pcm_format {
8649                return 1;
8650            }
8651            0
8652        }
8653    }
8654
8655    impl fidl::encoding::ValueTypeMarker for Format {
8656        type Borrowed<'a> = &'a Self;
8657        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8658            value
8659        }
8660    }
8661
8662    unsafe impl fidl::encoding::TypeMarker for Format {
8663        type Owned = Self;
8664
8665        #[inline(always)]
8666        fn inline_align(_context: fidl::encoding::Context) -> usize {
8667            8
8668        }
8669
8670        #[inline(always)]
8671        fn inline_size(_context: fidl::encoding::Context) -> usize {
8672            16
8673        }
8674    }
8675
8676    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format, D> for &Format {
8677        unsafe fn encode(
8678            self,
8679            encoder: &mut fidl::encoding::Encoder<'_, D>,
8680            offset: usize,
8681            mut depth: fidl::encoding::Depth,
8682        ) -> fidl::Result<()> {
8683            encoder.debug_check_bounds::<Format>(offset);
8684            // Vector header
8685            let max_ordinal: u64 = self.max_ordinal_present();
8686            encoder.write_num(max_ordinal, offset);
8687            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8688            // Calling encoder.out_of_line_offset(0) is not allowed.
8689            if max_ordinal == 0 {
8690                return Ok(());
8691            }
8692            depth.increment()?;
8693            let envelope_size = 8;
8694            let bytes_len = max_ordinal as usize * envelope_size;
8695            #[allow(unused_variables)]
8696            let offset = encoder.out_of_line_offset(bytes_len);
8697            let mut _prev_end_offset: usize = 0;
8698            if 1 > max_ordinal {
8699                return Ok(());
8700            }
8701
8702            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8703            // are envelope_size bytes.
8704            let cur_offset: usize = (1 - 1) * envelope_size;
8705
8706            // Zero reserved fields.
8707            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8708
8709            // Safety:
8710            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8711            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8712            //   envelope_size bytes, there is always sufficient room.
8713            fidl::encoding::encode_in_envelope_optional::<PcmFormat, D>(
8714                self.pcm_format
8715                    .as_ref()
8716                    .map(<PcmFormat as fidl::encoding::ValueTypeMarker>::borrow),
8717                encoder,
8718                offset + cur_offset,
8719                depth,
8720            )?;
8721
8722            _prev_end_offset = cur_offset + envelope_size;
8723
8724            Ok(())
8725        }
8726    }
8727
8728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
8729        #[inline(always)]
8730        fn new_empty() -> Self {
8731            Self::default()
8732        }
8733
8734        unsafe fn decode(
8735            &mut self,
8736            decoder: &mut fidl::encoding::Decoder<'_, D>,
8737            offset: usize,
8738            mut depth: fidl::encoding::Depth,
8739        ) -> fidl::Result<()> {
8740            decoder.debug_check_bounds::<Self>(offset);
8741            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8742                None => return Err(fidl::Error::NotNullable),
8743                Some(len) => len,
8744            };
8745            // Calling decoder.out_of_line_offset(0) is not allowed.
8746            if len == 0 {
8747                return Ok(());
8748            };
8749            depth.increment()?;
8750            let envelope_size = 8;
8751            let bytes_len = len * envelope_size;
8752            let offset = decoder.out_of_line_offset(bytes_len)?;
8753            // Decode the envelope for each type.
8754            let mut _next_ordinal_to_read = 0;
8755            let mut next_offset = offset;
8756            let end_offset = offset + bytes_len;
8757            _next_ordinal_to_read += 1;
8758            if next_offset >= end_offset {
8759                return Ok(());
8760            }
8761
8762            // Decode unknown envelopes for gaps in ordinals.
8763            while _next_ordinal_to_read < 1 {
8764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8765                _next_ordinal_to_read += 1;
8766                next_offset += envelope_size;
8767            }
8768
8769            let next_out_of_line = decoder.next_out_of_line();
8770            let handles_before = decoder.remaining_handles();
8771            if let Some((inlined, num_bytes, num_handles)) =
8772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8773            {
8774                let member_inline_size =
8775                    <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8776                if inlined != (member_inline_size <= 4) {
8777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8778                }
8779                let inner_offset;
8780                let mut inner_depth = depth.clone();
8781                if inlined {
8782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8783                    inner_offset = next_offset;
8784                } else {
8785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8786                    inner_depth.increment()?;
8787                }
8788                let val_ref = self.pcm_format.get_or_insert_with(|| fidl::new_empty!(PcmFormat, D));
8789                fidl::decode!(PcmFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
8790                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8791                {
8792                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8793                }
8794                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8795                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8796                }
8797            }
8798
8799            next_offset += envelope_size;
8800
8801            // Decode the remaining unknown envelopes.
8802            while next_offset < end_offset {
8803                _next_ordinal_to_read += 1;
8804                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8805                next_offset += envelope_size;
8806            }
8807
8808            Ok(())
8809        }
8810    }
8811
8812    impl GainState {
8813        #[inline(always)]
8814        fn max_ordinal_present(&self) -> u64 {
8815            if let Some(_) = self.gain_db {
8816                return 3;
8817            }
8818            if let Some(_) = self.agc_enabled {
8819                return 2;
8820            }
8821            if let Some(_) = self.muted {
8822                return 1;
8823            }
8824            0
8825        }
8826    }
8827
8828    impl fidl::encoding::ValueTypeMarker for GainState {
8829        type Borrowed<'a> = &'a Self;
8830        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8831            value
8832        }
8833    }
8834
8835    unsafe impl fidl::encoding::TypeMarker for GainState {
8836        type Owned = Self;
8837
8838        #[inline(always)]
8839        fn inline_align(_context: fidl::encoding::Context) -> usize {
8840            8
8841        }
8842
8843        #[inline(always)]
8844        fn inline_size(_context: fidl::encoding::Context) -> usize {
8845            16
8846        }
8847    }
8848
8849    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainState, D>
8850        for &GainState
8851    {
8852        unsafe fn encode(
8853            self,
8854            encoder: &mut fidl::encoding::Encoder<'_, D>,
8855            offset: usize,
8856            mut depth: fidl::encoding::Depth,
8857        ) -> fidl::Result<()> {
8858            encoder.debug_check_bounds::<GainState>(offset);
8859            // Vector header
8860            let max_ordinal: u64 = self.max_ordinal_present();
8861            encoder.write_num(max_ordinal, offset);
8862            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8863            // Calling encoder.out_of_line_offset(0) is not allowed.
8864            if max_ordinal == 0 {
8865                return Ok(());
8866            }
8867            depth.increment()?;
8868            let envelope_size = 8;
8869            let bytes_len = max_ordinal as usize * envelope_size;
8870            #[allow(unused_variables)]
8871            let offset = encoder.out_of_line_offset(bytes_len);
8872            let mut _prev_end_offset: usize = 0;
8873            if 1 > max_ordinal {
8874                return Ok(());
8875            }
8876
8877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8878            // are envelope_size bytes.
8879            let cur_offset: usize = (1 - 1) * envelope_size;
8880
8881            // Zero reserved fields.
8882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8883
8884            // Safety:
8885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8887            //   envelope_size bytes, there is always sufficient room.
8888            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8889                self.muted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8890                encoder,
8891                offset + cur_offset,
8892                depth,
8893            )?;
8894
8895            _prev_end_offset = cur_offset + envelope_size;
8896            if 2 > max_ordinal {
8897                return Ok(());
8898            }
8899
8900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8901            // are envelope_size bytes.
8902            let cur_offset: usize = (2 - 1) * envelope_size;
8903
8904            // Zero reserved fields.
8905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8906
8907            // Safety:
8908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8910            //   envelope_size bytes, there is always sufficient room.
8911            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8912                self.agc_enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8913                encoder,
8914                offset + cur_offset,
8915                depth,
8916            )?;
8917
8918            _prev_end_offset = cur_offset + envelope_size;
8919            if 3 > max_ordinal {
8920                return Ok(());
8921            }
8922
8923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8924            // are envelope_size bytes.
8925            let cur_offset: usize = (3 - 1) * envelope_size;
8926
8927            // Zero reserved fields.
8928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8929
8930            // Safety:
8931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8933            //   envelope_size bytes, there is always sufficient room.
8934            fidl::encoding::encode_in_envelope_optional::<f32, D>(
8935                self.gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
8936                encoder,
8937                offset + cur_offset,
8938                depth,
8939            )?;
8940
8941            _prev_end_offset = cur_offset + envelope_size;
8942
8943            Ok(())
8944        }
8945    }
8946
8947    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainState {
8948        #[inline(always)]
8949        fn new_empty() -> Self {
8950            Self::default()
8951        }
8952
8953        unsafe fn decode(
8954            &mut self,
8955            decoder: &mut fidl::encoding::Decoder<'_, D>,
8956            offset: usize,
8957            mut depth: fidl::encoding::Depth,
8958        ) -> fidl::Result<()> {
8959            decoder.debug_check_bounds::<Self>(offset);
8960            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8961                None => return Err(fidl::Error::NotNullable),
8962                Some(len) => len,
8963            };
8964            // Calling decoder.out_of_line_offset(0) is not allowed.
8965            if len == 0 {
8966                return Ok(());
8967            };
8968            depth.increment()?;
8969            let envelope_size = 8;
8970            let bytes_len = len * envelope_size;
8971            let offset = decoder.out_of_line_offset(bytes_len)?;
8972            // Decode the envelope for each type.
8973            let mut _next_ordinal_to_read = 0;
8974            let mut next_offset = offset;
8975            let end_offset = offset + bytes_len;
8976            _next_ordinal_to_read += 1;
8977            if next_offset >= end_offset {
8978                return Ok(());
8979            }
8980
8981            // Decode unknown envelopes for gaps in ordinals.
8982            while _next_ordinal_to_read < 1 {
8983                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8984                _next_ordinal_to_read += 1;
8985                next_offset += envelope_size;
8986            }
8987
8988            let next_out_of_line = decoder.next_out_of_line();
8989            let handles_before = decoder.remaining_handles();
8990            if let Some((inlined, num_bytes, num_handles)) =
8991                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8992            {
8993                let member_inline_size =
8994                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8995                if inlined != (member_inline_size <= 4) {
8996                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8997                }
8998                let inner_offset;
8999                let mut inner_depth = depth.clone();
9000                if inlined {
9001                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9002                    inner_offset = next_offset;
9003                } else {
9004                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9005                    inner_depth.increment()?;
9006                }
9007                let val_ref = self.muted.get_or_insert_with(|| fidl::new_empty!(bool, D));
9008                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9009                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9010                {
9011                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9012                }
9013                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9014                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9015                }
9016            }
9017
9018            next_offset += envelope_size;
9019            _next_ordinal_to_read += 1;
9020            if next_offset >= end_offset {
9021                return Ok(());
9022            }
9023
9024            // Decode unknown envelopes for gaps in ordinals.
9025            while _next_ordinal_to_read < 2 {
9026                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9027                _next_ordinal_to_read += 1;
9028                next_offset += envelope_size;
9029            }
9030
9031            let next_out_of_line = decoder.next_out_of_line();
9032            let handles_before = decoder.remaining_handles();
9033            if let Some((inlined, num_bytes, num_handles)) =
9034                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9035            {
9036                let member_inline_size =
9037                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9038                if inlined != (member_inline_size <= 4) {
9039                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9040                }
9041                let inner_offset;
9042                let mut inner_depth = depth.clone();
9043                if inlined {
9044                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9045                    inner_offset = next_offset;
9046                } else {
9047                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9048                    inner_depth.increment()?;
9049                }
9050                let val_ref = self.agc_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
9051                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9052                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9053                {
9054                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9055                }
9056                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9057                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9058                }
9059            }
9060
9061            next_offset += envelope_size;
9062            _next_ordinal_to_read += 1;
9063            if next_offset >= end_offset {
9064                return Ok(());
9065            }
9066
9067            // Decode unknown envelopes for gaps in ordinals.
9068            while _next_ordinal_to_read < 3 {
9069                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9070                _next_ordinal_to_read += 1;
9071                next_offset += envelope_size;
9072            }
9073
9074            let next_out_of_line = decoder.next_out_of_line();
9075            let handles_before = decoder.remaining_handles();
9076            if let Some((inlined, num_bytes, num_handles)) =
9077                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9078            {
9079                let member_inline_size =
9080                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9081                if inlined != (member_inline_size <= 4) {
9082                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9083                }
9084                let inner_offset;
9085                let mut inner_depth = depth.clone();
9086                if inlined {
9087                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9088                    inner_offset = next_offset;
9089                } else {
9090                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9091                    inner_depth.increment()?;
9092                }
9093                let val_ref = self.gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9094                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9095                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9096                {
9097                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9098                }
9099                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9100                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9101                }
9102            }
9103
9104            next_offset += envelope_size;
9105
9106            // Decode the remaining unknown envelopes.
9107            while next_offset < end_offset {
9108                _next_ordinal_to_read += 1;
9109                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9110                next_offset += envelope_size;
9111            }
9112
9113            Ok(())
9114        }
9115    }
9116
9117    impl HealthState {
9118        #[inline(always)]
9119        fn max_ordinal_present(&self) -> u64 {
9120            if let Some(_) = self.healthy {
9121                return 1;
9122            }
9123            0
9124        }
9125    }
9126
9127    impl fidl::encoding::ValueTypeMarker for HealthState {
9128        type Borrowed<'a> = &'a Self;
9129        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9130            value
9131        }
9132    }
9133
9134    unsafe impl fidl::encoding::TypeMarker for HealthState {
9135        type Owned = Self;
9136
9137        #[inline(always)]
9138        fn inline_align(_context: fidl::encoding::Context) -> usize {
9139            8
9140        }
9141
9142        #[inline(always)]
9143        fn inline_size(_context: fidl::encoding::Context) -> usize {
9144            16
9145        }
9146    }
9147
9148    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthState, D>
9149        for &HealthState
9150    {
9151        unsafe fn encode(
9152            self,
9153            encoder: &mut fidl::encoding::Encoder<'_, D>,
9154            offset: usize,
9155            mut depth: fidl::encoding::Depth,
9156        ) -> fidl::Result<()> {
9157            encoder.debug_check_bounds::<HealthState>(offset);
9158            // Vector header
9159            let max_ordinal: u64 = self.max_ordinal_present();
9160            encoder.write_num(max_ordinal, offset);
9161            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9162            // Calling encoder.out_of_line_offset(0) is not allowed.
9163            if max_ordinal == 0 {
9164                return Ok(());
9165            }
9166            depth.increment()?;
9167            let envelope_size = 8;
9168            let bytes_len = max_ordinal as usize * envelope_size;
9169            #[allow(unused_variables)]
9170            let offset = encoder.out_of_line_offset(bytes_len);
9171            let mut _prev_end_offset: usize = 0;
9172            if 1 > max_ordinal {
9173                return Ok(());
9174            }
9175
9176            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9177            // are envelope_size bytes.
9178            let cur_offset: usize = (1 - 1) * envelope_size;
9179
9180            // Zero reserved fields.
9181            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9182
9183            // Safety:
9184            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9185            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9186            //   envelope_size bytes, there is always sufficient room.
9187            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9188                self.healthy.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9189                encoder,
9190                offset + cur_offset,
9191                depth,
9192            )?;
9193
9194            _prev_end_offset = cur_offset + envelope_size;
9195
9196            Ok(())
9197        }
9198    }
9199
9200    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthState {
9201        #[inline(always)]
9202        fn new_empty() -> Self {
9203            Self::default()
9204        }
9205
9206        unsafe fn decode(
9207            &mut self,
9208            decoder: &mut fidl::encoding::Decoder<'_, D>,
9209            offset: usize,
9210            mut depth: fidl::encoding::Depth,
9211        ) -> fidl::Result<()> {
9212            decoder.debug_check_bounds::<Self>(offset);
9213            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9214                None => return Err(fidl::Error::NotNullable),
9215                Some(len) => len,
9216            };
9217            // Calling decoder.out_of_line_offset(0) is not allowed.
9218            if len == 0 {
9219                return Ok(());
9220            };
9221            depth.increment()?;
9222            let envelope_size = 8;
9223            let bytes_len = len * envelope_size;
9224            let offset = decoder.out_of_line_offset(bytes_len)?;
9225            // Decode the envelope for each type.
9226            let mut _next_ordinal_to_read = 0;
9227            let mut next_offset = offset;
9228            let end_offset = offset + bytes_len;
9229            _next_ordinal_to_read += 1;
9230            if next_offset >= end_offset {
9231                return Ok(());
9232            }
9233
9234            // Decode unknown envelopes for gaps in ordinals.
9235            while _next_ordinal_to_read < 1 {
9236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9237                _next_ordinal_to_read += 1;
9238                next_offset += envelope_size;
9239            }
9240
9241            let next_out_of_line = decoder.next_out_of_line();
9242            let handles_before = decoder.remaining_handles();
9243            if let Some((inlined, num_bytes, num_handles)) =
9244                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9245            {
9246                let member_inline_size =
9247                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9248                if inlined != (member_inline_size <= 4) {
9249                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9250                }
9251                let inner_offset;
9252                let mut inner_depth = depth.clone();
9253                if inlined {
9254                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9255                    inner_offset = next_offset;
9256                } else {
9257                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9258                    inner_depth.increment()?;
9259                }
9260                let val_ref = self.healthy.get_or_insert_with(|| fidl::new_empty!(bool, D));
9261                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9262                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9263                {
9264                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9265                }
9266                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9267                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9268                }
9269            }
9270
9271            next_offset += envelope_size;
9272
9273            // Decode the remaining unknown envelopes.
9274            while next_offset < end_offset {
9275                _next_ordinal_to_read += 1;
9276                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9277                next_offset += envelope_size;
9278            }
9279
9280            Ok(())
9281        }
9282    }
9283
9284    impl PacketStreamProperties {
9285        #[inline(always)]
9286        fn max_ordinal_present(&self) -> u64 {
9287            if let Some(_) = self.is_input {
9288                return 3;
9289            }
9290            if let Some(_) = self.supported_buffer_types {
9291                return 2;
9292            }
9293            if let Some(_) = self.needs_cache_flush_or_invalidate {
9294                return 1;
9295            }
9296            0
9297        }
9298    }
9299
9300    impl fidl::encoding::ValueTypeMarker for PacketStreamProperties {
9301        type Borrowed<'a> = &'a Self;
9302        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9303            value
9304        }
9305    }
9306
9307    unsafe impl fidl::encoding::TypeMarker for PacketStreamProperties {
9308        type Owned = Self;
9309
9310        #[inline(always)]
9311        fn inline_align(_context: fidl::encoding::Context) -> usize {
9312            8
9313        }
9314
9315        #[inline(always)]
9316        fn inline_size(_context: fidl::encoding::Context) -> usize {
9317            16
9318        }
9319    }
9320
9321    unsafe impl<D: fidl::encoding::ResourceDialect>
9322        fidl::encoding::Encode<PacketStreamProperties, D> for &PacketStreamProperties
9323    {
9324        unsafe fn encode(
9325            self,
9326            encoder: &mut fidl::encoding::Encoder<'_, D>,
9327            offset: usize,
9328            mut depth: fidl::encoding::Depth,
9329        ) -> fidl::Result<()> {
9330            encoder.debug_check_bounds::<PacketStreamProperties>(offset);
9331            // Vector header
9332            let max_ordinal: u64 = self.max_ordinal_present();
9333            encoder.write_num(max_ordinal, offset);
9334            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9335            // Calling encoder.out_of_line_offset(0) is not allowed.
9336            if max_ordinal == 0 {
9337                return Ok(());
9338            }
9339            depth.increment()?;
9340            let envelope_size = 8;
9341            let bytes_len = max_ordinal as usize * envelope_size;
9342            #[allow(unused_variables)]
9343            let offset = encoder.out_of_line_offset(bytes_len);
9344            let mut _prev_end_offset: usize = 0;
9345            if 1 > max_ordinal {
9346                return Ok(());
9347            }
9348
9349            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9350            // are envelope_size bytes.
9351            let cur_offset: usize = (1 - 1) * envelope_size;
9352
9353            // Zero reserved fields.
9354            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9355
9356            // Safety:
9357            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9358            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9359            //   envelope_size bytes, there is always sufficient room.
9360            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9361                self.needs_cache_flush_or_invalidate
9362                    .as_ref()
9363                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9364                encoder,
9365                offset + cur_offset,
9366                depth,
9367            )?;
9368
9369            _prev_end_offset = cur_offset + envelope_size;
9370            if 2 > max_ordinal {
9371                return Ok(());
9372            }
9373
9374            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9375            // are envelope_size bytes.
9376            let cur_offset: usize = (2 - 1) * envelope_size;
9377
9378            // Zero reserved fields.
9379            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9380
9381            // Safety:
9382            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9383            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9384            //   envelope_size bytes, there is always sufficient room.
9385            fidl::encoding::encode_in_envelope_optional::<BufferType, D>(
9386                self.supported_buffer_types
9387                    .as_ref()
9388                    .map(<BufferType as fidl::encoding::ValueTypeMarker>::borrow),
9389                encoder,
9390                offset + cur_offset,
9391                depth,
9392            )?;
9393
9394            _prev_end_offset = cur_offset + envelope_size;
9395            if 3 > max_ordinal {
9396                return Ok(());
9397            }
9398
9399            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9400            // are envelope_size bytes.
9401            let cur_offset: usize = (3 - 1) * envelope_size;
9402
9403            // Zero reserved fields.
9404            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9405
9406            // Safety:
9407            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9408            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9409            //   envelope_size bytes, there is always sufficient room.
9410            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9411                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9412                encoder,
9413                offset + cur_offset,
9414                depth,
9415            )?;
9416
9417            _prev_end_offset = cur_offset + envelope_size;
9418
9419            Ok(())
9420        }
9421    }
9422
9423    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9424        for PacketStreamProperties
9425    {
9426        #[inline(always)]
9427        fn new_empty() -> Self {
9428            Self::default()
9429        }
9430
9431        unsafe fn decode(
9432            &mut self,
9433            decoder: &mut fidl::encoding::Decoder<'_, D>,
9434            offset: usize,
9435            mut depth: fidl::encoding::Depth,
9436        ) -> fidl::Result<()> {
9437            decoder.debug_check_bounds::<Self>(offset);
9438            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9439                None => return Err(fidl::Error::NotNullable),
9440                Some(len) => len,
9441            };
9442            // Calling decoder.out_of_line_offset(0) is not allowed.
9443            if len == 0 {
9444                return Ok(());
9445            };
9446            depth.increment()?;
9447            let envelope_size = 8;
9448            let bytes_len = len * envelope_size;
9449            let offset = decoder.out_of_line_offset(bytes_len)?;
9450            // Decode the envelope for each type.
9451            let mut _next_ordinal_to_read = 0;
9452            let mut next_offset = offset;
9453            let end_offset = offset + bytes_len;
9454            _next_ordinal_to_read += 1;
9455            if next_offset >= end_offset {
9456                return Ok(());
9457            }
9458
9459            // Decode unknown envelopes for gaps in ordinals.
9460            while _next_ordinal_to_read < 1 {
9461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9462                _next_ordinal_to_read += 1;
9463                next_offset += envelope_size;
9464            }
9465
9466            let next_out_of_line = decoder.next_out_of_line();
9467            let handles_before = decoder.remaining_handles();
9468            if let Some((inlined, num_bytes, num_handles)) =
9469                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9470            {
9471                let member_inline_size =
9472                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9473                if inlined != (member_inline_size <= 4) {
9474                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9475                }
9476                let inner_offset;
9477                let mut inner_depth = depth.clone();
9478                if inlined {
9479                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9480                    inner_offset = next_offset;
9481                } else {
9482                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9483                    inner_depth.increment()?;
9484                }
9485                let val_ref = self
9486                    .needs_cache_flush_or_invalidate
9487                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9488                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9489                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9490                {
9491                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9492                }
9493                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9494                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9495                }
9496            }
9497
9498            next_offset += envelope_size;
9499            _next_ordinal_to_read += 1;
9500            if next_offset >= end_offset {
9501                return Ok(());
9502            }
9503
9504            // Decode unknown envelopes for gaps in ordinals.
9505            while _next_ordinal_to_read < 2 {
9506                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9507                _next_ordinal_to_read += 1;
9508                next_offset += envelope_size;
9509            }
9510
9511            let next_out_of_line = decoder.next_out_of_line();
9512            let handles_before = decoder.remaining_handles();
9513            if let Some((inlined, num_bytes, num_handles)) =
9514                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9515            {
9516                let member_inline_size =
9517                    <BufferType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9518                if inlined != (member_inline_size <= 4) {
9519                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9520                }
9521                let inner_offset;
9522                let mut inner_depth = depth.clone();
9523                if inlined {
9524                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9525                    inner_offset = next_offset;
9526                } else {
9527                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9528                    inner_depth.increment()?;
9529                }
9530                let val_ref = self
9531                    .supported_buffer_types
9532                    .get_or_insert_with(|| fidl::new_empty!(BufferType, D));
9533                fidl::decode!(BufferType, D, val_ref, decoder, inner_offset, inner_depth)?;
9534                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9535                {
9536                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9537                }
9538                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9539                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9540                }
9541            }
9542
9543            next_offset += envelope_size;
9544            _next_ordinal_to_read += 1;
9545            if next_offset >= end_offset {
9546                return Ok(());
9547            }
9548
9549            // Decode unknown envelopes for gaps in ordinals.
9550            while _next_ordinal_to_read < 3 {
9551                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9552                _next_ordinal_to_read += 1;
9553                next_offset += envelope_size;
9554            }
9555
9556            let next_out_of_line = decoder.next_out_of_line();
9557            let handles_before = decoder.remaining_handles();
9558            if let Some((inlined, num_bytes, num_handles)) =
9559                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9560            {
9561                let member_inline_size =
9562                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9563                if inlined != (member_inline_size <= 4) {
9564                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9565                }
9566                let inner_offset;
9567                let mut inner_depth = depth.clone();
9568                if inlined {
9569                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9570                    inner_offset = next_offset;
9571                } else {
9572                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9573                    inner_depth.increment()?;
9574                }
9575                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
9576                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9577                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9578                {
9579                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9580                }
9581                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9582                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9583                }
9584            }
9585
9586            next_offset += envelope_size;
9587
9588            // Decode the remaining unknown envelopes.
9589            while next_offset < end_offset {
9590                _next_ordinal_to_read += 1;
9591                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9592                next_offset += envelope_size;
9593            }
9594
9595            Ok(())
9596        }
9597    }
9598
9599    impl PacketStreamSinkPutPacketResponse {
9600        #[inline(always)]
9601        fn max_ordinal_present(&self) -> u64 {
9602            0
9603        }
9604    }
9605
9606    impl fidl::encoding::ValueTypeMarker for PacketStreamSinkPutPacketResponse {
9607        type Borrowed<'a> = &'a Self;
9608        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9609            value
9610        }
9611    }
9612
9613    unsafe impl fidl::encoding::TypeMarker for PacketStreamSinkPutPacketResponse {
9614        type Owned = Self;
9615
9616        #[inline(always)]
9617        fn inline_align(_context: fidl::encoding::Context) -> usize {
9618            8
9619        }
9620
9621        #[inline(always)]
9622        fn inline_size(_context: fidl::encoding::Context) -> usize {
9623            16
9624        }
9625    }
9626
9627    unsafe impl<D: fidl::encoding::ResourceDialect>
9628        fidl::encoding::Encode<PacketStreamSinkPutPacketResponse, D>
9629        for &PacketStreamSinkPutPacketResponse
9630    {
9631        unsafe fn encode(
9632            self,
9633            encoder: &mut fidl::encoding::Encoder<'_, D>,
9634            offset: usize,
9635            mut depth: fidl::encoding::Depth,
9636        ) -> fidl::Result<()> {
9637            encoder.debug_check_bounds::<PacketStreamSinkPutPacketResponse>(offset);
9638            // Vector header
9639            let max_ordinal: u64 = self.max_ordinal_present();
9640            encoder.write_num(max_ordinal, offset);
9641            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9642            // Calling encoder.out_of_line_offset(0) is not allowed.
9643            if max_ordinal == 0 {
9644                return Ok(());
9645            }
9646            depth.increment()?;
9647            let envelope_size = 8;
9648            let bytes_len = max_ordinal as usize * envelope_size;
9649            #[allow(unused_variables)]
9650            let offset = encoder.out_of_line_offset(bytes_len);
9651            let mut _prev_end_offset: usize = 0;
9652
9653            Ok(())
9654        }
9655    }
9656
9657    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9658        for PacketStreamSinkPutPacketResponse
9659    {
9660        #[inline(always)]
9661        fn new_empty() -> Self {
9662            Self::default()
9663        }
9664
9665        unsafe fn decode(
9666            &mut self,
9667            decoder: &mut fidl::encoding::Decoder<'_, D>,
9668            offset: usize,
9669            mut depth: fidl::encoding::Depth,
9670        ) -> fidl::Result<()> {
9671            decoder.debug_check_bounds::<Self>(offset);
9672            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9673                None => return Err(fidl::Error::NotNullable),
9674                Some(len) => len,
9675            };
9676            // Calling decoder.out_of_line_offset(0) is not allowed.
9677            if len == 0 {
9678                return Ok(());
9679            };
9680            depth.increment()?;
9681            let envelope_size = 8;
9682            let bytes_len = len * envelope_size;
9683            let offset = decoder.out_of_line_offset(bytes_len)?;
9684            // Decode the envelope for each type.
9685            let mut _next_ordinal_to_read = 0;
9686            let mut next_offset = offset;
9687            let end_offset = offset + bytes_len;
9688
9689            // Decode the remaining unknown envelopes.
9690            while next_offset < end_offset {
9691                _next_ordinal_to_read += 1;
9692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9693                next_offset += envelope_size;
9694            }
9695
9696            Ok(())
9697        }
9698    }
9699
9700    impl PcmSupportedFormats {
9701        #[inline(always)]
9702        fn max_ordinal_present(&self) -> u64 {
9703            if let Some(_) = self.frame_rates {
9704                return 5;
9705            }
9706            if let Some(_) = self.valid_bits_per_sample {
9707                return 4;
9708            }
9709            if let Some(_) = self.bytes_per_sample {
9710                return 3;
9711            }
9712            if let Some(_) = self.sample_formats {
9713                return 2;
9714            }
9715            if let Some(_) = self.channel_sets {
9716                return 1;
9717            }
9718            0
9719        }
9720    }
9721
9722    impl fidl::encoding::ValueTypeMarker for PcmSupportedFormats {
9723        type Borrowed<'a> = &'a Self;
9724        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9725            value
9726        }
9727    }
9728
9729    unsafe impl fidl::encoding::TypeMarker for PcmSupportedFormats {
9730        type Owned = Self;
9731
9732        #[inline(always)]
9733        fn inline_align(_context: fidl::encoding::Context) -> usize {
9734            8
9735        }
9736
9737        #[inline(always)]
9738        fn inline_size(_context: fidl::encoding::Context) -> usize {
9739            16
9740        }
9741    }
9742
9743    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmSupportedFormats, D>
9744        for &PcmSupportedFormats
9745    {
9746        unsafe fn encode(
9747            self,
9748            encoder: &mut fidl::encoding::Encoder<'_, D>,
9749            offset: usize,
9750            mut depth: fidl::encoding::Depth,
9751        ) -> fidl::Result<()> {
9752            encoder.debug_check_bounds::<PcmSupportedFormats>(offset);
9753            // Vector header
9754            let max_ordinal: u64 = self.max_ordinal_present();
9755            encoder.write_num(max_ordinal, offset);
9756            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9757            // Calling encoder.out_of_line_offset(0) is not allowed.
9758            if max_ordinal == 0 {
9759                return Ok(());
9760            }
9761            depth.increment()?;
9762            let envelope_size = 8;
9763            let bytes_len = max_ordinal as usize * envelope_size;
9764            #[allow(unused_variables)]
9765            let offset = encoder.out_of_line_offset(bytes_len);
9766            let mut _prev_end_offset: usize = 0;
9767            if 1 > max_ordinal {
9768                return Ok(());
9769            }
9770
9771            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9772            // are envelope_size bytes.
9773            let cur_offset: usize = (1 - 1) * envelope_size;
9774
9775            // Zero reserved fields.
9776            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9777
9778            // Safety:
9779            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9780            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9781            //   envelope_size bytes, there is always sufficient room.
9782            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
9783            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
9784            encoder, offset + cur_offset, depth
9785        )?;
9786
9787            _prev_end_offset = cur_offset + envelope_size;
9788            if 2 > max_ordinal {
9789                return Ok(());
9790            }
9791
9792            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9793            // are envelope_size bytes.
9794            let cur_offset: usize = (2 - 1) * envelope_size;
9795
9796            // Zero reserved fields.
9797            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9798
9799            // Safety:
9800            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9801            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9802            //   envelope_size bytes, there is always sufficient room.
9803            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleFormat, 3>, D>(
9804            self.sample_formats.as_ref().map(<fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::ValueTypeMarker>::borrow),
9805            encoder, offset + cur_offset, depth
9806        )?;
9807
9808            _prev_end_offset = cur_offset + envelope_size;
9809            if 3 > max_ordinal {
9810                return Ok(());
9811            }
9812
9813            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9814            // are envelope_size bytes.
9815            let cur_offset: usize = (3 - 1) * envelope_size;
9816
9817            // Zero reserved fields.
9818            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9819
9820            // Safety:
9821            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9822            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9823            //   envelope_size bytes, there is always sufficient room.
9824            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9825                self.bytes_per_sample.as_ref().map(
9826                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9827                ),
9828                encoder,
9829                offset + cur_offset,
9830                depth,
9831            )?;
9832
9833            _prev_end_offset = cur_offset + envelope_size;
9834            if 4 > max_ordinal {
9835                return Ok(());
9836            }
9837
9838            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9839            // are envelope_size bytes.
9840            let cur_offset: usize = (4 - 1) * envelope_size;
9841
9842            // Zero reserved fields.
9843            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9844
9845            // Safety:
9846            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9847            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9848            //   envelope_size bytes, there is always sufficient room.
9849            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9850                self.valid_bits_per_sample.as_ref().map(
9851                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9852                ),
9853                encoder,
9854                offset + cur_offset,
9855                depth,
9856            )?;
9857
9858            _prev_end_offset = cur_offset + envelope_size;
9859            if 5 > max_ordinal {
9860                return Ok(());
9861            }
9862
9863            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9864            // are envelope_size bytes.
9865            let cur_offset: usize = (5 - 1) * envelope_size;
9866
9867            // Zero reserved fields.
9868            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9869
9870            // Safety:
9871            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9872            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9873            //   envelope_size bytes, there is always sufficient room.
9874            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
9875                self.frame_rates.as_ref().map(
9876                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
9877                ),
9878                encoder,
9879                offset + cur_offset,
9880                depth,
9881            )?;
9882
9883            _prev_end_offset = cur_offset + envelope_size;
9884
9885            Ok(())
9886        }
9887    }
9888
9889    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmSupportedFormats {
9890        #[inline(always)]
9891        fn new_empty() -> Self {
9892            Self::default()
9893        }
9894
9895        unsafe fn decode(
9896            &mut self,
9897            decoder: &mut fidl::encoding::Decoder<'_, D>,
9898            offset: usize,
9899            mut depth: fidl::encoding::Depth,
9900        ) -> fidl::Result<()> {
9901            decoder.debug_check_bounds::<Self>(offset);
9902            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9903                None => return Err(fidl::Error::NotNullable),
9904                Some(len) => len,
9905            };
9906            // Calling decoder.out_of_line_offset(0) is not allowed.
9907            if len == 0 {
9908                return Ok(());
9909            };
9910            depth.increment()?;
9911            let envelope_size = 8;
9912            let bytes_len = len * envelope_size;
9913            let offset = decoder.out_of_line_offset(bytes_len)?;
9914            // Decode the envelope for each type.
9915            let mut _next_ordinal_to_read = 0;
9916            let mut next_offset = offset;
9917            let end_offset = offset + bytes_len;
9918            _next_ordinal_to_read += 1;
9919            if next_offset >= end_offset {
9920                return Ok(());
9921            }
9922
9923            // Decode unknown envelopes for gaps in ordinals.
9924            while _next_ordinal_to_read < 1 {
9925                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9926                _next_ordinal_to_read += 1;
9927                next_offset += envelope_size;
9928            }
9929
9930            let next_out_of_line = decoder.next_out_of_line();
9931            let handles_before = decoder.remaining_handles();
9932            if let Some((inlined, num_bytes, num_handles)) =
9933                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9934            {
9935                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9936                if inlined != (member_inline_size <= 4) {
9937                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9938                }
9939                let inner_offset;
9940                let mut inner_depth = depth.clone();
9941                if inlined {
9942                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9943                    inner_offset = next_offset;
9944                } else {
9945                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9946                    inner_depth.increment()?;
9947                }
9948                let val_ref = self.channel_sets.get_or_insert_with(
9949                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
9950                );
9951                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
9952                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9953                {
9954                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9955                }
9956                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9957                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9958                }
9959            }
9960
9961            next_offset += envelope_size;
9962            _next_ordinal_to_read += 1;
9963            if next_offset >= end_offset {
9964                return Ok(());
9965            }
9966
9967            // Decode unknown envelopes for gaps in ordinals.
9968            while _next_ordinal_to_read < 2 {
9969                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9970                _next_ordinal_to_read += 1;
9971                next_offset += envelope_size;
9972            }
9973
9974            let next_out_of_line = decoder.next_out_of_line();
9975            let handles_before = decoder.remaining_handles();
9976            if let Some((inlined, num_bytes, num_handles)) =
9977                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9978            {
9979                let member_inline_size = <fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9980                if inlined != (member_inline_size <= 4) {
9981                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9982                }
9983                let inner_offset;
9984                let mut inner_depth = depth.clone();
9985                if inlined {
9986                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9987                    inner_offset = next_offset;
9988                } else {
9989                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9990                    inner_depth.increment()?;
9991                }
9992                let val_ref = self.sample_formats.get_or_insert_with(
9993                    || fidl::new_empty!(fidl::encoding::Vector<SampleFormat, 3>, D),
9994                );
9995                fidl::decode!(fidl::encoding::Vector<SampleFormat, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
9996                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9997                {
9998                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9999                }
10000                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10001                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10002                }
10003            }
10004
10005            next_offset += envelope_size;
10006            _next_ordinal_to_read += 1;
10007            if next_offset >= end_offset {
10008                return Ok(());
10009            }
10010
10011            // Decode unknown envelopes for gaps in ordinals.
10012            while _next_ordinal_to_read < 3 {
10013                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10014                _next_ordinal_to_read += 1;
10015                next_offset += envelope_size;
10016            }
10017
10018            let next_out_of_line = decoder.next_out_of_line();
10019            let handles_before = decoder.remaining_handles();
10020            if let Some((inlined, num_bytes, num_handles)) =
10021                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10022            {
10023                let member_inline_size =
10024                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10025                        decoder.context,
10026                    );
10027                if inlined != (member_inline_size <= 4) {
10028                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10029                }
10030                let inner_offset;
10031                let mut inner_depth = depth.clone();
10032                if inlined {
10033                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10034                    inner_offset = next_offset;
10035                } else {
10036                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10037                    inner_depth.increment()?;
10038                }
10039                let val_ref = self
10040                    .bytes_per_sample
10041                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10042                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10044                {
10045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10046                }
10047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10049                }
10050            }
10051
10052            next_offset += envelope_size;
10053            _next_ordinal_to_read += 1;
10054            if next_offset >= end_offset {
10055                return Ok(());
10056            }
10057
10058            // Decode unknown envelopes for gaps in ordinals.
10059            while _next_ordinal_to_read < 4 {
10060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10061                _next_ordinal_to_read += 1;
10062                next_offset += envelope_size;
10063            }
10064
10065            let next_out_of_line = decoder.next_out_of_line();
10066            let handles_before = decoder.remaining_handles();
10067            if let Some((inlined, num_bytes, num_handles)) =
10068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10069            {
10070                let member_inline_size =
10071                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10072                        decoder.context,
10073                    );
10074                if inlined != (member_inline_size <= 4) {
10075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10076                }
10077                let inner_offset;
10078                let mut inner_depth = depth.clone();
10079                if inlined {
10080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10081                    inner_offset = next_offset;
10082                } else {
10083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10084                    inner_depth.increment()?;
10085                }
10086                let val_ref = self
10087                    .valid_bits_per_sample
10088                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10089                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10091                {
10092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10093                }
10094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10096                }
10097            }
10098
10099            next_offset += envelope_size;
10100            _next_ordinal_to_read += 1;
10101            if next_offset >= end_offset {
10102                return Ok(());
10103            }
10104
10105            // Decode unknown envelopes for gaps in ordinals.
10106            while _next_ordinal_to_read < 5 {
10107                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10108                _next_ordinal_to_read += 1;
10109                next_offset += envelope_size;
10110            }
10111
10112            let next_out_of_line = decoder.next_out_of_line();
10113            let handles_before = decoder.remaining_handles();
10114            if let Some((inlined, num_bytes, num_handles)) =
10115                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10116            {
10117                let member_inline_size =
10118                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
10119                        decoder.context,
10120                    );
10121                if inlined != (member_inline_size <= 4) {
10122                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10123                }
10124                let inner_offset;
10125                let mut inner_depth = depth.clone();
10126                if inlined {
10127                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10128                    inner_offset = next_offset;
10129                } else {
10130                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10131                    inner_depth.increment()?;
10132                }
10133                let val_ref = self
10134                    .frame_rates
10135                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
10136                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10137                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10138                {
10139                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10140                }
10141                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10142                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10143                }
10144            }
10145
10146            next_offset += envelope_size;
10147
10148            // Decode the remaining unknown envelopes.
10149            while next_offset < end_offset {
10150                _next_ordinal_to_read += 1;
10151                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10152                next_offset += envelope_size;
10153            }
10154
10155            Ok(())
10156        }
10157    }
10158
10159    impl PlugState {
10160        #[inline(always)]
10161        fn max_ordinal_present(&self) -> u64 {
10162            if let Some(_) = self.plug_state_time {
10163                return 2;
10164            }
10165            if let Some(_) = self.plugged {
10166                return 1;
10167            }
10168            0
10169        }
10170    }
10171
10172    impl fidl::encoding::ValueTypeMarker for PlugState {
10173        type Borrowed<'a> = &'a Self;
10174        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10175            value
10176        }
10177    }
10178
10179    unsafe impl fidl::encoding::TypeMarker for PlugState {
10180        type Owned = Self;
10181
10182        #[inline(always)]
10183        fn inline_align(_context: fidl::encoding::Context) -> usize {
10184            8
10185        }
10186
10187        #[inline(always)]
10188        fn inline_size(_context: fidl::encoding::Context) -> usize {
10189            16
10190        }
10191    }
10192
10193    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugState, D>
10194        for &PlugState
10195    {
10196        unsafe fn encode(
10197            self,
10198            encoder: &mut fidl::encoding::Encoder<'_, D>,
10199            offset: usize,
10200            mut depth: fidl::encoding::Depth,
10201        ) -> fidl::Result<()> {
10202            encoder.debug_check_bounds::<PlugState>(offset);
10203            // Vector header
10204            let max_ordinal: u64 = self.max_ordinal_present();
10205            encoder.write_num(max_ordinal, offset);
10206            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10207            // Calling encoder.out_of_line_offset(0) is not allowed.
10208            if max_ordinal == 0 {
10209                return Ok(());
10210            }
10211            depth.increment()?;
10212            let envelope_size = 8;
10213            let bytes_len = max_ordinal as usize * envelope_size;
10214            #[allow(unused_variables)]
10215            let offset = encoder.out_of_line_offset(bytes_len);
10216            let mut _prev_end_offset: usize = 0;
10217            if 1 > max_ordinal {
10218                return Ok(());
10219            }
10220
10221            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10222            // are envelope_size bytes.
10223            let cur_offset: usize = (1 - 1) * envelope_size;
10224
10225            // Zero reserved fields.
10226            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10227
10228            // Safety:
10229            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10230            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10231            //   envelope_size bytes, there is always sufficient room.
10232            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10233                self.plugged.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10234                encoder,
10235                offset + cur_offset,
10236                depth,
10237            )?;
10238
10239            _prev_end_offset = cur_offset + envelope_size;
10240            if 2 > max_ordinal {
10241                return Ok(());
10242            }
10243
10244            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10245            // are envelope_size bytes.
10246            let cur_offset: usize = (2 - 1) * envelope_size;
10247
10248            // Zero reserved fields.
10249            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10250
10251            // Safety:
10252            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10253            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10254            //   envelope_size bytes, there is always sufficient room.
10255            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10256                self.plug_state_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10257                encoder,
10258                offset + cur_offset,
10259                depth,
10260            )?;
10261
10262            _prev_end_offset = cur_offset + envelope_size;
10263
10264            Ok(())
10265        }
10266    }
10267
10268    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugState {
10269        #[inline(always)]
10270        fn new_empty() -> Self {
10271            Self::default()
10272        }
10273
10274        unsafe fn decode(
10275            &mut self,
10276            decoder: &mut fidl::encoding::Decoder<'_, D>,
10277            offset: usize,
10278            mut depth: fidl::encoding::Depth,
10279        ) -> fidl::Result<()> {
10280            decoder.debug_check_bounds::<Self>(offset);
10281            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10282                None => return Err(fidl::Error::NotNullable),
10283                Some(len) => len,
10284            };
10285            // Calling decoder.out_of_line_offset(0) is not allowed.
10286            if len == 0 {
10287                return Ok(());
10288            };
10289            depth.increment()?;
10290            let envelope_size = 8;
10291            let bytes_len = len * envelope_size;
10292            let offset = decoder.out_of_line_offset(bytes_len)?;
10293            // Decode the envelope for each type.
10294            let mut _next_ordinal_to_read = 0;
10295            let mut next_offset = offset;
10296            let end_offset = offset + bytes_len;
10297            _next_ordinal_to_read += 1;
10298            if next_offset >= end_offset {
10299                return Ok(());
10300            }
10301
10302            // Decode unknown envelopes for gaps in ordinals.
10303            while _next_ordinal_to_read < 1 {
10304                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10305                _next_ordinal_to_read += 1;
10306                next_offset += envelope_size;
10307            }
10308
10309            let next_out_of_line = decoder.next_out_of_line();
10310            let handles_before = decoder.remaining_handles();
10311            if let Some((inlined, num_bytes, num_handles)) =
10312                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10313            {
10314                let member_inline_size =
10315                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10316                if inlined != (member_inline_size <= 4) {
10317                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10318                }
10319                let inner_offset;
10320                let mut inner_depth = depth.clone();
10321                if inlined {
10322                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10323                    inner_offset = next_offset;
10324                } else {
10325                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10326                    inner_depth.increment()?;
10327                }
10328                let val_ref = self.plugged.get_or_insert_with(|| fidl::new_empty!(bool, D));
10329                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10330                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10331                {
10332                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10333                }
10334                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10335                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10336                }
10337            }
10338
10339            next_offset += envelope_size;
10340            _next_ordinal_to_read += 1;
10341            if next_offset >= end_offset {
10342                return Ok(());
10343            }
10344
10345            // Decode unknown envelopes for gaps in ordinals.
10346            while _next_ordinal_to_read < 2 {
10347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10348                _next_ordinal_to_read += 1;
10349                next_offset += envelope_size;
10350            }
10351
10352            let next_out_of_line = decoder.next_out_of_line();
10353            let handles_before = decoder.remaining_handles();
10354            if let Some((inlined, num_bytes, num_handles)) =
10355                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10356            {
10357                let member_inline_size =
10358                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10359                if inlined != (member_inline_size <= 4) {
10360                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10361                }
10362                let inner_offset;
10363                let mut inner_depth = depth.clone();
10364                if inlined {
10365                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10366                    inner_offset = next_offset;
10367                } else {
10368                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10369                    inner_depth.increment()?;
10370                }
10371                let val_ref = self.plug_state_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
10372                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10373                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10374                {
10375                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10376                }
10377                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10378                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10379                }
10380            }
10381
10382            next_offset += envelope_size;
10383
10384            // Decode the remaining unknown envelopes.
10385            while next_offset < end_offset {
10386                _next_ordinal_to_read += 1;
10387                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10388                next_offset += envelope_size;
10389            }
10390
10391            Ok(())
10392        }
10393    }
10394
10395    impl RingBufferProperties {
10396        #[inline(always)]
10397        fn max_ordinal_present(&self) -> u64 {
10398            if let Some(_) = self.driver_transfer_bytes {
10399                return 5;
10400            }
10401            if let Some(_) = self.turn_on_delay {
10402                return 4;
10403            }
10404            if let Some(_) = self.needs_cache_flush_or_invalidate {
10405                return 3;
10406            }
10407            0
10408        }
10409    }
10410
10411    impl fidl::encoding::ValueTypeMarker for RingBufferProperties {
10412        type Borrowed<'a> = &'a Self;
10413        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10414            value
10415        }
10416    }
10417
10418    unsafe impl fidl::encoding::TypeMarker for RingBufferProperties {
10419        type Owned = Self;
10420
10421        #[inline(always)]
10422        fn inline_align(_context: fidl::encoding::Context) -> usize {
10423            8
10424        }
10425
10426        #[inline(always)]
10427        fn inline_size(_context: fidl::encoding::Context) -> usize {
10428            16
10429        }
10430    }
10431
10432    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferProperties, D>
10433        for &RingBufferProperties
10434    {
10435        unsafe fn encode(
10436            self,
10437            encoder: &mut fidl::encoding::Encoder<'_, D>,
10438            offset: usize,
10439            mut depth: fidl::encoding::Depth,
10440        ) -> fidl::Result<()> {
10441            encoder.debug_check_bounds::<RingBufferProperties>(offset);
10442            // Vector header
10443            let max_ordinal: u64 = self.max_ordinal_present();
10444            encoder.write_num(max_ordinal, offset);
10445            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10446            // Calling encoder.out_of_line_offset(0) is not allowed.
10447            if max_ordinal == 0 {
10448                return Ok(());
10449            }
10450            depth.increment()?;
10451            let envelope_size = 8;
10452            let bytes_len = max_ordinal as usize * envelope_size;
10453            #[allow(unused_variables)]
10454            let offset = encoder.out_of_line_offset(bytes_len);
10455            let mut _prev_end_offset: usize = 0;
10456            if 3 > max_ordinal {
10457                return Ok(());
10458            }
10459
10460            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10461            // are envelope_size bytes.
10462            let cur_offset: usize = (3 - 1) * envelope_size;
10463
10464            // Zero reserved fields.
10465            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10466
10467            // Safety:
10468            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10469            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10470            //   envelope_size bytes, there is always sufficient room.
10471            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10472                self.needs_cache_flush_or_invalidate
10473                    .as_ref()
10474                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10475                encoder,
10476                offset + cur_offset,
10477                depth,
10478            )?;
10479
10480            _prev_end_offset = cur_offset + envelope_size;
10481            if 4 > max_ordinal {
10482                return Ok(());
10483            }
10484
10485            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10486            // are envelope_size bytes.
10487            let cur_offset: usize = (4 - 1) * envelope_size;
10488
10489            // Zero reserved fields.
10490            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10491
10492            // Safety:
10493            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10494            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10495            //   envelope_size bytes, there is always sufficient room.
10496            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10497                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10498                encoder,
10499                offset + cur_offset,
10500                depth,
10501            )?;
10502
10503            _prev_end_offset = cur_offset + envelope_size;
10504            if 5 > max_ordinal {
10505                return Ok(());
10506            }
10507
10508            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10509            // are envelope_size bytes.
10510            let cur_offset: usize = (5 - 1) * envelope_size;
10511
10512            // Zero reserved fields.
10513            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10514
10515            // Safety:
10516            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10517            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10518            //   envelope_size bytes, there is always sufficient room.
10519            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10520                self.driver_transfer_bytes
10521                    .as_ref()
10522                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10523                encoder,
10524                offset + cur_offset,
10525                depth,
10526            )?;
10527
10528            _prev_end_offset = cur_offset + envelope_size;
10529
10530            Ok(())
10531        }
10532    }
10533
10534    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferProperties {
10535        #[inline(always)]
10536        fn new_empty() -> Self {
10537            Self::default()
10538        }
10539
10540        unsafe fn decode(
10541            &mut self,
10542            decoder: &mut fidl::encoding::Decoder<'_, D>,
10543            offset: usize,
10544            mut depth: fidl::encoding::Depth,
10545        ) -> fidl::Result<()> {
10546            decoder.debug_check_bounds::<Self>(offset);
10547            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10548                None => return Err(fidl::Error::NotNullable),
10549                Some(len) => len,
10550            };
10551            // Calling decoder.out_of_line_offset(0) is not allowed.
10552            if len == 0 {
10553                return Ok(());
10554            };
10555            depth.increment()?;
10556            let envelope_size = 8;
10557            let bytes_len = len * envelope_size;
10558            let offset = decoder.out_of_line_offset(bytes_len)?;
10559            // Decode the envelope for each type.
10560            let mut _next_ordinal_to_read = 0;
10561            let mut next_offset = offset;
10562            let end_offset = offset + bytes_len;
10563            _next_ordinal_to_read += 1;
10564            if next_offset >= end_offset {
10565                return Ok(());
10566            }
10567
10568            // Decode unknown envelopes for gaps in ordinals.
10569            while _next_ordinal_to_read < 3 {
10570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10571                _next_ordinal_to_read += 1;
10572                next_offset += envelope_size;
10573            }
10574
10575            let next_out_of_line = decoder.next_out_of_line();
10576            let handles_before = decoder.remaining_handles();
10577            if let Some((inlined, num_bytes, num_handles)) =
10578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10579            {
10580                let member_inline_size =
10581                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10582                if inlined != (member_inline_size <= 4) {
10583                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10584                }
10585                let inner_offset;
10586                let mut inner_depth = depth.clone();
10587                if inlined {
10588                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10589                    inner_offset = next_offset;
10590                } else {
10591                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10592                    inner_depth.increment()?;
10593                }
10594                let val_ref = self
10595                    .needs_cache_flush_or_invalidate
10596                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10597                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10598                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10599                {
10600                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10601                }
10602                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10603                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10604                }
10605            }
10606
10607            next_offset += envelope_size;
10608            _next_ordinal_to_read += 1;
10609            if next_offset >= end_offset {
10610                return Ok(());
10611            }
10612
10613            // Decode unknown envelopes for gaps in ordinals.
10614            while _next_ordinal_to_read < 4 {
10615                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10616                _next_ordinal_to_read += 1;
10617                next_offset += envelope_size;
10618            }
10619
10620            let next_out_of_line = decoder.next_out_of_line();
10621            let handles_before = decoder.remaining_handles();
10622            if let Some((inlined, num_bytes, num_handles)) =
10623                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10624            {
10625                let member_inline_size =
10626                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10627                if inlined != (member_inline_size <= 4) {
10628                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10629                }
10630                let inner_offset;
10631                let mut inner_depth = depth.clone();
10632                if inlined {
10633                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10634                    inner_offset = next_offset;
10635                } else {
10636                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10637                    inner_depth.increment()?;
10638                }
10639                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
10640                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10641                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10642                {
10643                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10644                }
10645                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10646                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10647                }
10648            }
10649
10650            next_offset += envelope_size;
10651            _next_ordinal_to_read += 1;
10652            if next_offset >= end_offset {
10653                return Ok(());
10654            }
10655
10656            // Decode unknown envelopes for gaps in ordinals.
10657            while _next_ordinal_to_read < 5 {
10658                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10659                _next_ordinal_to_read += 1;
10660                next_offset += envelope_size;
10661            }
10662
10663            let next_out_of_line = decoder.next_out_of_line();
10664            let handles_before = decoder.remaining_handles();
10665            if let Some((inlined, num_bytes, num_handles)) =
10666                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10667            {
10668                let member_inline_size =
10669                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10670                if inlined != (member_inline_size <= 4) {
10671                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10672                }
10673                let inner_offset;
10674                let mut inner_depth = depth.clone();
10675                if inlined {
10676                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10677                    inner_offset = next_offset;
10678                } else {
10679                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10680                    inner_depth.increment()?;
10681                }
10682                let val_ref =
10683                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
10684                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
10685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10686                {
10687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10688                }
10689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10691                }
10692            }
10693
10694            next_offset += envelope_size;
10695
10696            // Decode the remaining unknown envelopes.
10697            while next_offset < end_offset {
10698                _next_ordinal_to_read += 1;
10699                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10700                next_offset += envelope_size;
10701            }
10702
10703            Ok(())
10704        }
10705    }
10706
10707    impl StreamProperties {
10708        #[inline(always)]
10709        fn max_ordinal_present(&self) -> u64 {
10710            if let Some(_) = self.clock_domain {
10711                return 11;
10712            }
10713            if let Some(_) = self.product {
10714                return 10;
10715            }
10716            if let Some(_) = self.manufacturer {
10717                return 9;
10718            }
10719            if let Some(_) = self.plug_detect_capabilities {
10720                return 8;
10721            }
10722            if let Some(_) = self.gain_step_db {
10723                return 7;
10724            }
10725            if let Some(_) = self.max_gain_db {
10726                return 6;
10727            }
10728            if let Some(_) = self.min_gain_db {
10729                return 5;
10730            }
10731            if let Some(_) = self.can_agc {
10732                return 4;
10733            }
10734            if let Some(_) = self.can_mute {
10735                return 3;
10736            }
10737            if let Some(_) = self.is_input {
10738                return 2;
10739            }
10740            if let Some(_) = self.unique_id {
10741                return 1;
10742            }
10743            0
10744        }
10745    }
10746
10747    impl fidl::encoding::ValueTypeMarker for StreamProperties {
10748        type Borrowed<'a> = &'a Self;
10749        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10750            value
10751        }
10752    }
10753
10754    unsafe impl fidl::encoding::TypeMarker for StreamProperties {
10755        type Owned = Self;
10756
10757        #[inline(always)]
10758        fn inline_align(_context: fidl::encoding::Context) -> usize {
10759            8
10760        }
10761
10762        #[inline(always)]
10763        fn inline_size(_context: fidl::encoding::Context) -> usize {
10764            16
10765        }
10766    }
10767
10768    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamProperties, D>
10769        for &StreamProperties
10770    {
10771        unsafe fn encode(
10772            self,
10773            encoder: &mut fidl::encoding::Encoder<'_, D>,
10774            offset: usize,
10775            mut depth: fidl::encoding::Depth,
10776        ) -> fidl::Result<()> {
10777            encoder.debug_check_bounds::<StreamProperties>(offset);
10778            // Vector header
10779            let max_ordinal: u64 = self.max_ordinal_present();
10780            encoder.write_num(max_ordinal, offset);
10781            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10782            // Calling encoder.out_of_line_offset(0) is not allowed.
10783            if max_ordinal == 0 {
10784                return Ok(());
10785            }
10786            depth.increment()?;
10787            let envelope_size = 8;
10788            let bytes_len = max_ordinal as usize * envelope_size;
10789            #[allow(unused_variables)]
10790            let offset = encoder.out_of_line_offset(bytes_len);
10791            let mut _prev_end_offset: usize = 0;
10792            if 1 > max_ordinal {
10793                return Ok(());
10794            }
10795
10796            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10797            // are envelope_size bytes.
10798            let cur_offset: usize = (1 - 1) * envelope_size;
10799
10800            // Zero reserved fields.
10801            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10802
10803            // Safety:
10804            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10805            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10806            //   envelope_size bytes, there is always sufficient room.
10807            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
10808                self.unique_id.as_ref().map(
10809                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
10810                ),
10811                encoder,
10812                offset + cur_offset,
10813                depth,
10814            )?;
10815
10816            _prev_end_offset = cur_offset + envelope_size;
10817            if 2 > max_ordinal {
10818                return Ok(());
10819            }
10820
10821            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10822            // are envelope_size bytes.
10823            let cur_offset: usize = (2 - 1) * envelope_size;
10824
10825            // Zero reserved fields.
10826            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10827
10828            // Safety:
10829            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10830            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10831            //   envelope_size bytes, there is always sufficient room.
10832            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10833                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10834                encoder,
10835                offset + cur_offset,
10836                depth,
10837            )?;
10838
10839            _prev_end_offset = cur_offset + envelope_size;
10840            if 3 > max_ordinal {
10841                return Ok(());
10842            }
10843
10844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10845            // are envelope_size bytes.
10846            let cur_offset: usize = (3 - 1) * envelope_size;
10847
10848            // Zero reserved fields.
10849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10850
10851            // Safety:
10852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10854            //   envelope_size bytes, there is always sufficient room.
10855            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10856                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10857                encoder,
10858                offset + cur_offset,
10859                depth,
10860            )?;
10861
10862            _prev_end_offset = cur_offset + envelope_size;
10863            if 4 > max_ordinal {
10864                return Ok(());
10865            }
10866
10867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10868            // are envelope_size bytes.
10869            let cur_offset: usize = (4 - 1) * envelope_size;
10870
10871            // Zero reserved fields.
10872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10873
10874            // Safety:
10875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10877            //   envelope_size bytes, there is always sufficient room.
10878            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10879                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10880                encoder,
10881                offset + cur_offset,
10882                depth,
10883            )?;
10884
10885            _prev_end_offset = cur_offset + envelope_size;
10886            if 5 > max_ordinal {
10887                return Ok(());
10888            }
10889
10890            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10891            // are envelope_size bytes.
10892            let cur_offset: usize = (5 - 1) * envelope_size;
10893
10894            // Zero reserved fields.
10895            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10896
10897            // Safety:
10898            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10899            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10900            //   envelope_size bytes, there is always sufficient room.
10901            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10902                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10903                encoder,
10904                offset + cur_offset,
10905                depth,
10906            )?;
10907
10908            _prev_end_offset = cur_offset + envelope_size;
10909            if 6 > max_ordinal {
10910                return Ok(());
10911            }
10912
10913            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10914            // are envelope_size bytes.
10915            let cur_offset: usize = (6 - 1) * envelope_size;
10916
10917            // Zero reserved fields.
10918            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10919
10920            // Safety:
10921            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10922            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10923            //   envelope_size bytes, there is always sufficient room.
10924            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10925                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10926                encoder,
10927                offset + cur_offset,
10928                depth,
10929            )?;
10930
10931            _prev_end_offset = cur_offset + envelope_size;
10932            if 7 > max_ordinal {
10933                return Ok(());
10934            }
10935
10936            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10937            // are envelope_size bytes.
10938            let cur_offset: usize = (7 - 1) * envelope_size;
10939
10940            // Zero reserved fields.
10941            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10942
10943            // Safety:
10944            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10945            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10946            //   envelope_size bytes, there is always sufficient room.
10947            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10948                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10949                encoder,
10950                offset + cur_offset,
10951                depth,
10952            )?;
10953
10954            _prev_end_offset = cur_offset + envelope_size;
10955            if 8 > max_ordinal {
10956                return Ok(());
10957            }
10958
10959            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10960            // are envelope_size bytes.
10961            let cur_offset: usize = (8 - 1) * envelope_size;
10962
10963            // Zero reserved fields.
10964            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10965
10966            // Safety:
10967            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10968            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10969            //   envelope_size bytes, there is always sufficient room.
10970            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
10971                self.plug_detect_capabilities
10972                    .as_ref()
10973                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
10974                encoder,
10975                offset + cur_offset,
10976                depth,
10977            )?;
10978
10979            _prev_end_offset = cur_offset + envelope_size;
10980            if 9 > max_ordinal {
10981                return Ok(());
10982            }
10983
10984            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10985            // are envelope_size bytes.
10986            let cur_offset: usize = (9 - 1) * envelope_size;
10987
10988            // Zero reserved fields.
10989            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10990
10991            // Safety:
10992            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10993            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10994            //   envelope_size bytes, there is always sufficient room.
10995            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
10996                self.manufacturer.as_ref().map(
10997                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
10998                ),
10999                encoder,
11000                offset + cur_offset,
11001                depth,
11002            )?;
11003
11004            _prev_end_offset = cur_offset + envelope_size;
11005            if 10 > max_ordinal {
11006                return Ok(());
11007            }
11008
11009            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11010            // are envelope_size bytes.
11011            let cur_offset: usize = (10 - 1) * envelope_size;
11012
11013            // Zero reserved fields.
11014            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11015
11016            // Safety:
11017            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11018            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11019            //   envelope_size bytes, there is always sufficient room.
11020            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11021                self.product.as_ref().map(
11022                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11023                ),
11024                encoder,
11025                offset + cur_offset,
11026                depth,
11027            )?;
11028
11029            _prev_end_offset = cur_offset + envelope_size;
11030            if 11 > max_ordinal {
11031                return Ok(());
11032            }
11033
11034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11035            // are envelope_size bytes.
11036            let cur_offset: usize = (11 - 1) * envelope_size;
11037
11038            // Zero reserved fields.
11039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11040
11041            // Safety:
11042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11044            //   envelope_size bytes, there is always sufficient room.
11045            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11046                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11047                encoder,
11048                offset + cur_offset,
11049                depth,
11050            )?;
11051
11052            _prev_end_offset = cur_offset + envelope_size;
11053
11054            Ok(())
11055        }
11056    }
11057
11058    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamProperties {
11059        #[inline(always)]
11060        fn new_empty() -> Self {
11061            Self::default()
11062        }
11063
11064        unsafe fn decode(
11065            &mut self,
11066            decoder: &mut fidl::encoding::Decoder<'_, D>,
11067            offset: usize,
11068            mut depth: fidl::encoding::Depth,
11069        ) -> fidl::Result<()> {
11070            decoder.debug_check_bounds::<Self>(offset);
11071            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11072                None => return Err(fidl::Error::NotNullable),
11073                Some(len) => len,
11074            };
11075            // Calling decoder.out_of_line_offset(0) is not allowed.
11076            if len == 0 {
11077                return Ok(());
11078            };
11079            depth.increment()?;
11080            let envelope_size = 8;
11081            let bytes_len = len * envelope_size;
11082            let offset = decoder.out_of_line_offset(bytes_len)?;
11083            // Decode the envelope for each type.
11084            let mut _next_ordinal_to_read = 0;
11085            let mut next_offset = offset;
11086            let end_offset = offset + bytes_len;
11087            _next_ordinal_to_read += 1;
11088            if next_offset >= end_offset {
11089                return Ok(());
11090            }
11091
11092            // Decode unknown envelopes for gaps in ordinals.
11093            while _next_ordinal_to_read < 1 {
11094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11095                _next_ordinal_to_read += 1;
11096                next_offset += envelope_size;
11097            }
11098
11099            let next_out_of_line = decoder.next_out_of_line();
11100            let handles_before = decoder.remaining_handles();
11101            if let Some((inlined, num_bytes, num_handles)) =
11102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11103            {
11104                let member_inline_size =
11105                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
11106                        decoder.context,
11107                    );
11108                if inlined != (member_inline_size <= 4) {
11109                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11110                }
11111                let inner_offset;
11112                let mut inner_depth = depth.clone();
11113                if inlined {
11114                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11115                    inner_offset = next_offset;
11116                } else {
11117                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11118                    inner_depth.increment()?;
11119                }
11120                let val_ref = self
11121                    .unique_id
11122                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
11123                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
11124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11125                {
11126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11127                }
11128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11130                }
11131            }
11132
11133            next_offset += envelope_size;
11134            _next_ordinal_to_read += 1;
11135            if next_offset >= end_offset {
11136                return Ok(());
11137            }
11138
11139            // Decode unknown envelopes for gaps in ordinals.
11140            while _next_ordinal_to_read < 2 {
11141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11142                _next_ordinal_to_read += 1;
11143                next_offset += envelope_size;
11144            }
11145
11146            let next_out_of_line = decoder.next_out_of_line();
11147            let handles_before = decoder.remaining_handles();
11148            if let Some((inlined, num_bytes, num_handles)) =
11149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11150            {
11151                let member_inline_size =
11152                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11153                if inlined != (member_inline_size <= 4) {
11154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11155                }
11156                let inner_offset;
11157                let mut inner_depth = depth.clone();
11158                if inlined {
11159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11160                    inner_offset = next_offset;
11161                } else {
11162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11163                    inner_depth.increment()?;
11164                }
11165                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
11166                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11167                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11168                {
11169                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11170                }
11171                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11172                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11173                }
11174            }
11175
11176            next_offset += envelope_size;
11177            _next_ordinal_to_read += 1;
11178            if next_offset >= end_offset {
11179                return Ok(());
11180            }
11181
11182            // Decode unknown envelopes for gaps in ordinals.
11183            while _next_ordinal_to_read < 3 {
11184                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11185                _next_ordinal_to_read += 1;
11186                next_offset += envelope_size;
11187            }
11188
11189            let next_out_of_line = decoder.next_out_of_line();
11190            let handles_before = decoder.remaining_handles();
11191            if let Some((inlined, num_bytes, num_handles)) =
11192                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11193            {
11194                let member_inline_size =
11195                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11196                if inlined != (member_inline_size <= 4) {
11197                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11198                }
11199                let inner_offset;
11200                let mut inner_depth = depth.clone();
11201                if inlined {
11202                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11203                    inner_offset = next_offset;
11204                } else {
11205                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11206                    inner_depth.increment()?;
11207                }
11208                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
11209                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11210                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11211                {
11212                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11213                }
11214                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11215                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11216                }
11217            }
11218
11219            next_offset += envelope_size;
11220            _next_ordinal_to_read += 1;
11221            if next_offset >= end_offset {
11222                return Ok(());
11223            }
11224
11225            // Decode unknown envelopes for gaps in ordinals.
11226            while _next_ordinal_to_read < 4 {
11227                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11228                _next_ordinal_to_read += 1;
11229                next_offset += envelope_size;
11230            }
11231
11232            let next_out_of_line = decoder.next_out_of_line();
11233            let handles_before = decoder.remaining_handles();
11234            if let Some((inlined, num_bytes, num_handles)) =
11235                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11236            {
11237                let member_inline_size =
11238                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11239                if inlined != (member_inline_size <= 4) {
11240                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11241                }
11242                let inner_offset;
11243                let mut inner_depth = depth.clone();
11244                if inlined {
11245                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11246                    inner_offset = next_offset;
11247                } else {
11248                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11249                    inner_depth.increment()?;
11250                }
11251                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
11252                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11253                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11254                {
11255                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11256                }
11257                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11258                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11259                }
11260            }
11261
11262            next_offset += envelope_size;
11263            _next_ordinal_to_read += 1;
11264            if next_offset >= end_offset {
11265                return Ok(());
11266            }
11267
11268            // Decode unknown envelopes for gaps in ordinals.
11269            while _next_ordinal_to_read < 5 {
11270                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11271                _next_ordinal_to_read += 1;
11272                next_offset += envelope_size;
11273            }
11274
11275            let next_out_of_line = decoder.next_out_of_line();
11276            let handles_before = decoder.remaining_handles();
11277            if let Some((inlined, num_bytes, num_handles)) =
11278                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11279            {
11280                let member_inline_size =
11281                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11282                if inlined != (member_inline_size <= 4) {
11283                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11284                }
11285                let inner_offset;
11286                let mut inner_depth = depth.clone();
11287                if inlined {
11288                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11289                    inner_offset = next_offset;
11290                } else {
11291                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11292                    inner_depth.increment()?;
11293                }
11294                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11295                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11296                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11297                {
11298                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11299                }
11300                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11301                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11302                }
11303            }
11304
11305            next_offset += envelope_size;
11306            _next_ordinal_to_read += 1;
11307            if next_offset >= end_offset {
11308                return Ok(());
11309            }
11310
11311            // Decode unknown envelopes for gaps in ordinals.
11312            while _next_ordinal_to_read < 6 {
11313                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11314                _next_ordinal_to_read += 1;
11315                next_offset += envelope_size;
11316            }
11317
11318            let next_out_of_line = decoder.next_out_of_line();
11319            let handles_before = decoder.remaining_handles();
11320            if let Some((inlined, num_bytes, num_handles)) =
11321                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11322            {
11323                let member_inline_size =
11324                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11325                if inlined != (member_inline_size <= 4) {
11326                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11327                }
11328                let inner_offset;
11329                let mut inner_depth = depth.clone();
11330                if inlined {
11331                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11332                    inner_offset = next_offset;
11333                } else {
11334                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11335                    inner_depth.increment()?;
11336                }
11337                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11338                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11339                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11340                {
11341                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11342                }
11343                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11344                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11345                }
11346            }
11347
11348            next_offset += envelope_size;
11349            _next_ordinal_to_read += 1;
11350            if next_offset >= end_offset {
11351                return Ok(());
11352            }
11353
11354            // Decode unknown envelopes for gaps in ordinals.
11355            while _next_ordinal_to_read < 7 {
11356                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11357                _next_ordinal_to_read += 1;
11358                next_offset += envelope_size;
11359            }
11360
11361            let next_out_of_line = decoder.next_out_of_line();
11362            let handles_before = decoder.remaining_handles();
11363            if let Some((inlined, num_bytes, num_handles)) =
11364                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11365            {
11366                let member_inline_size =
11367                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11368                if inlined != (member_inline_size <= 4) {
11369                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11370                }
11371                let inner_offset;
11372                let mut inner_depth = depth.clone();
11373                if inlined {
11374                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11375                    inner_offset = next_offset;
11376                } else {
11377                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11378                    inner_depth.increment()?;
11379                }
11380                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11381                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11382                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11383                {
11384                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11385                }
11386                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11387                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11388                }
11389            }
11390
11391            next_offset += envelope_size;
11392            _next_ordinal_to_read += 1;
11393            if next_offset >= end_offset {
11394                return Ok(());
11395            }
11396
11397            // Decode unknown envelopes for gaps in ordinals.
11398            while _next_ordinal_to_read < 8 {
11399                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11400                _next_ordinal_to_read += 1;
11401                next_offset += envelope_size;
11402            }
11403
11404            let next_out_of_line = decoder.next_out_of_line();
11405            let handles_before = decoder.remaining_handles();
11406            if let Some((inlined, num_bytes, num_handles)) =
11407                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11408            {
11409                let member_inline_size =
11410                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
11411                        decoder.context,
11412                    );
11413                if inlined != (member_inline_size <= 4) {
11414                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11415                }
11416                let inner_offset;
11417                let mut inner_depth = depth.clone();
11418                if inlined {
11419                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11420                    inner_offset = next_offset;
11421                } else {
11422                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11423                    inner_depth.increment()?;
11424                }
11425                let val_ref = self
11426                    .plug_detect_capabilities
11427                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
11428                fidl::decode!(
11429                    PlugDetectCapabilities,
11430                    D,
11431                    val_ref,
11432                    decoder,
11433                    inner_offset,
11434                    inner_depth
11435                )?;
11436                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11437                {
11438                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11439                }
11440                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11441                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11442                }
11443            }
11444
11445            next_offset += envelope_size;
11446            _next_ordinal_to_read += 1;
11447            if next_offset >= end_offset {
11448                return Ok(());
11449            }
11450
11451            // Decode unknown envelopes for gaps in ordinals.
11452            while _next_ordinal_to_read < 9 {
11453                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11454                _next_ordinal_to_read += 1;
11455                next_offset += envelope_size;
11456            }
11457
11458            let next_out_of_line = decoder.next_out_of_line();
11459            let handles_before = decoder.remaining_handles();
11460            if let Some((inlined, num_bytes, num_handles)) =
11461                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11462            {
11463                let member_inline_size =
11464                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11465                        decoder.context,
11466                    );
11467                if inlined != (member_inline_size <= 4) {
11468                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11469                }
11470                let inner_offset;
11471                let mut inner_depth = depth.clone();
11472                if inlined {
11473                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11474                    inner_offset = next_offset;
11475                } else {
11476                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11477                    inner_depth.increment()?;
11478                }
11479                let val_ref = self
11480                    .manufacturer
11481                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11482                fidl::decode!(
11483                    fidl::encoding::BoundedString<256>,
11484                    D,
11485                    val_ref,
11486                    decoder,
11487                    inner_offset,
11488                    inner_depth
11489                )?;
11490                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11491                {
11492                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11493                }
11494                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11495                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11496                }
11497            }
11498
11499            next_offset += envelope_size;
11500            _next_ordinal_to_read += 1;
11501            if next_offset >= end_offset {
11502                return Ok(());
11503            }
11504
11505            // Decode unknown envelopes for gaps in ordinals.
11506            while _next_ordinal_to_read < 10 {
11507                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11508                _next_ordinal_to_read += 1;
11509                next_offset += envelope_size;
11510            }
11511
11512            let next_out_of_line = decoder.next_out_of_line();
11513            let handles_before = decoder.remaining_handles();
11514            if let Some((inlined, num_bytes, num_handles)) =
11515                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11516            {
11517                let member_inline_size =
11518                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11519                        decoder.context,
11520                    );
11521                if inlined != (member_inline_size <= 4) {
11522                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11523                }
11524                let inner_offset;
11525                let mut inner_depth = depth.clone();
11526                if inlined {
11527                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11528                    inner_offset = next_offset;
11529                } else {
11530                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11531                    inner_depth.increment()?;
11532                }
11533                let val_ref = self
11534                    .product
11535                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11536                fidl::decode!(
11537                    fidl::encoding::BoundedString<256>,
11538                    D,
11539                    val_ref,
11540                    decoder,
11541                    inner_offset,
11542                    inner_depth
11543                )?;
11544                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11545                {
11546                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11547                }
11548                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11549                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11550                }
11551            }
11552
11553            next_offset += envelope_size;
11554            _next_ordinal_to_read += 1;
11555            if next_offset >= end_offset {
11556                return Ok(());
11557            }
11558
11559            // Decode unknown envelopes for gaps in ordinals.
11560            while _next_ordinal_to_read < 11 {
11561                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11562                _next_ordinal_to_read += 1;
11563                next_offset += envelope_size;
11564            }
11565
11566            let next_out_of_line = decoder.next_out_of_line();
11567            let handles_before = decoder.remaining_handles();
11568            if let Some((inlined, num_bytes, num_handles)) =
11569                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11570            {
11571                let member_inline_size =
11572                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11573                if inlined != (member_inline_size <= 4) {
11574                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11575                }
11576                let inner_offset;
11577                let mut inner_depth = depth.clone();
11578                if inlined {
11579                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11580                    inner_offset = next_offset;
11581                } else {
11582                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11583                    inner_depth.increment()?;
11584                }
11585                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
11586                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11587                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11588                {
11589                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11590                }
11591                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11592                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11593                }
11594            }
11595
11596            next_offset += envelope_size;
11597
11598            // Decode the remaining unknown envelopes.
11599            while next_offset < end_offset {
11600                _next_ordinal_to_read += 1;
11601                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11602                next_offset += envelope_size;
11603            }
11604
11605            Ok(())
11606        }
11607    }
11608
11609    impl SupportedEncodings {
11610        #[inline(always)]
11611        fn max_ordinal_present(&self) -> u64 {
11612            if let Some(_) = self.encoding_types {
11613                return 3;
11614            }
11615            if let Some(_) = self.frame_rates {
11616                return 2;
11617            }
11618            if let Some(_) = self.channel_sets {
11619                return 1;
11620            }
11621            0
11622        }
11623    }
11624
11625    impl fidl::encoding::ValueTypeMarker for SupportedEncodings {
11626        type Borrowed<'a> = &'a Self;
11627        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11628            value
11629        }
11630    }
11631
11632    unsafe impl fidl::encoding::TypeMarker for SupportedEncodings {
11633        type Owned = Self;
11634
11635        #[inline(always)]
11636        fn inline_align(_context: fidl::encoding::Context) -> usize {
11637            8
11638        }
11639
11640        #[inline(always)]
11641        fn inline_size(_context: fidl::encoding::Context) -> usize {
11642            16
11643        }
11644    }
11645
11646    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedEncodings, D>
11647        for &SupportedEncodings
11648    {
11649        unsafe fn encode(
11650            self,
11651            encoder: &mut fidl::encoding::Encoder<'_, D>,
11652            offset: usize,
11653            mut depth: fidl::encoding::Depth,
11654        ) -> fidl::Result<()> {
11655            encoder.debug_check_bounds::<SupportedEncodings>(offset);
11656            // Vector header
11657            let max_ordinal: u64 = self.max_ordinal_present();
11658            encoder.write_num(max_ordinal, offset);
11659            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11660            // Calling encoder.out_of_line_offset(0) is not allowed.
11661            if max_ordinal == 0 {
11662                return Ok(());
11663            }
11664            depth.increment()?;
11665            let envelope_size = 8;
11666            let bytes_len = max_ordinal as usize * envelope_size;
11667            #[allow(unused_variables)]
11668            let offset = encoder.out_of_line_offset(bytes_len);
11669            let mut _prev_end_offset: usize = 0;
11670            if 1 > max_ordinal {
11671                return Ok(());
11672            }
11673
11674            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11675            // are envelope_size bytes.
11676            let cur_offset: usize = (1 - 1) * envelope_size;
11677
11678            // Zero reserved fields.
11679            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11680
11681            // Safety:
11682            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11683            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11684            //   envelope_size bytes, there is always sufficient room.
11685            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
11686            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11687            encoder, offset + cur_offset, depth
11688        )?;
11689
11690            _prev_end_offset = cur_offset + envelope_size;
11691            if 2 > max_ordinal {
11692                return Ok(());
11693            }
11694
11695            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11696            // are envelope_size bytes.
11697            let cur_offset: usize = (2 - 1) * envelope_size;
11698
11699            // Zero reserved fields.
11700            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11701
11702            // Safety:
11703            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11704            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11705            //   envelope_size bytes, there is always sufficient room.
11706            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
11707                self.frame_rates.as_ref().map(
11708                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
11709                ),
11710                encoder,
11711                offset + cur_offset,
11712                depth,
11713            )?;
11714
11715            _prev_end_offset = cur_offset + envelope_size;
11716            if 3 > max_ordinal {
11717                return Ok(());
11718            }
11719
11720            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11721            // are envelope_size bytes.
11722            let cur_offset: usize = (3 - 1) * envelope_size;
11723
11724            // Zero reserved fields.
11725            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11726
11727            // Safety:
11728            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11729            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11730            //   envelope_size bytes, there is always sufficient room.
11731            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EncodingType, 64>, D>(
11732            self.encoding_types.as_ref().map(<fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11733            encoder, offset + cur_offset, depth
11734        )?;
11735
11736            _prev_end_offset = cur_offset + envelope_size;
11737
11738            Ok(())
11739        }
11740    }
11741
11742    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedEncodings {
11743        #[inline(always)]
11744        fn new_empty() -> Self {
11745            Self::default()
11746        }
11747
11748        unsafe fn decode(
11749            &mut self,
11750            decoder: &mut fidl::encoding::Decoder<'_, D>,
11751            offset: usize,
11752            mut depth: fidl::encoding::Depth,
11753        ) -> fidl::Result<()> {
11754            decoder.debug_check_bounds::<Self>(offset);
11755            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11756                None => return Err(fidl::Error::NotNullable),
11757                Some(len) => len,
11758            };
11759            // Calling decoder.out_of_line_offset(0) is not allowed.
11760            if len == 0 {
11761                return Ok(());
11762            };
11763            depth.increment()?;
11764            let envelope_size = 8;
11765            let bytes_len = len * envelope_size;
11766            let offset = decoder.out_of_line_offset(bytes_len)?;
11767            // Decode the envelope for each type.
11768            let mut _next_ordinal_to_read = 0;
11769            let mut next_offset = offset;
11770            let end_offset = offset + bytes_len;
11771            _next_ordinal_to_read += 1;
11772            if next_offset >= end_offset {
11773                return Ok(());
11774            }
11775
11776            // Decode unknown envelopes for gaps in ordinals.
11777            while _next_ordinal_to_read < 1 {
11778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11779                _next_ordinal_to_read += 1;
11780                next_offset += envelope_size;
11781            }
11782
11783            let next_out_of_line = decoder.next_out_of_line();
11784            let handles_before = decoder.remaining_handles();
11785            if let Some((inlined, num_bytes, num_handles)) =
11786                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11787            {
11788                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11789                if inlined != (member_inline_size <= 4) {
11790                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11791                }
11792                let inner_offset;
11793                let mut inner_depth = depth.clone();
11794                if inlined {
11795                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11796                    inner_offset = next_offset;
11797                } else {
11798                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11799                    inner_depth.increment()?;
11800                }
11801                let val_ref = self.channel_sets.get_or_insert_with(
11802                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
11803                );
11804                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11805                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11806                {
11807                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11808                }
11809                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11810                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11811                }
11812            }
11813
11814            next_offset += envelope_size;
11815            _next_ordinal_to_read += 1;
11816            if next_offset >= end_offset {
11817                return Ok(());
11818            }
11819
11820            // Decode unknown envelopes for gaps in ordinals.
11821            while _next_ordinal_to_read < 2 {
11822                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11823                _next_ordinal_to_read += 1;
11824                next_offset += envelope_size;
11825            }
11826
11827            let next_out_of_line = decoder.next_out_of_line();
11828            let handles_before = decoder.remaining_handles();
11829            if let Some((inlined, num_bytes, num_handles)) =
11830                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11831            {
11832                let member_inline_size =
11833                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
11834                        decoder.context,
11835                    );
11836                if inlined != (member_inline_size <= 4) {
11837                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11838                }
11839                let inner_offset;
11840                let mut inner_depth = depth.clone();
11841                if inlined {
11842                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11843                    inner_offset = next_offset;
11844                } else {
11845                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11846                    inner_depth.increment()?;
11847                }
11848                let val_ref = self
11849                    .frame_rates
11850                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
11851                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11852                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11853                {
11854                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11855                }
11856                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11857                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11858                }
11859            }
11860
11861            next_offset += envelope_size;
11862            _next_ordinal_to_read += 1;
11863            if next_offset >= end_offset {
11864                return Ok(());
11865            }
11866
11867            // Decode unknown envelopes for gaps in ordinals.
11868            while _next_ordinal_to_read < 3 {
11869                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11870                _next_ordinal_to_read += 1;
11871                next_offset += envelope_size;
11872            }
11873
11874            let next_out_of_line = decoder.next_out_of_line();
11875            let handles_before = decoder.remaining_handles();
11876            if let Some((inlined, num_bytes, num_handles)) =
11877                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11878            {
11879                let member_inline_size = <fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11880                if inlined != (member_inline_size <= 4) {
11881                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11882                }
11883                let inner_offset;
11884                let mut inner_depth = depth.clone();
11885                if inlined {
11886                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11887                    inner_offset = next_offset;
11888                } else {
11889                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11890                    inner_depth.increment()?;
11891                }
11892                let val_ref = self.encoding_types.get_or_insert_with(
11893                    || fidl::new_empty!(fidl::encoding::Vector<EncodingType, 64>, D),
11894                );
11895                fidl::decode!(fidl::encoding::Vector<EncodingType, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11896                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11897                {
11898                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11899                }
11900                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11901                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11902                }
11903            }
11904
11905            next_offset += envelope_size;
11906
11907            // Decode the remaining unknown envelopes.
11908            while next_offset < end_offset {
11909                _next_ordinal_to_read += 1;
11910                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11911                next_offset += envelope_size;
11912            }
11913
11914            Ok(())
11915        }
11916    }
11917
11918    impl SupportedFormats {
11919        #[inline(always)]
11920        fn max_ordinal_present(&self) -> u64 {
11921            if let Some(_) = self.pcm_supported_formats {
11922                return 1;
11923            }
11924            0
11925        }
11926    }
11927
11928    impl fidl::encoding::ValueTypeMarker for SupportedFormats {
11929        type Borrowed<'a> = &'a Self;
11930        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11931            value
11932        }
11933    }
11934
11935    unsafe impl fidl::encoding::TypeMarker for SupportedFormats {
11936        type Owned = Self;
11937
11938        #[inline(always)]
11939        fn inline_align(_context: fidl::encoding::Context) -> usize {
11940            8
11941        }
11942
11943        #[inline(always)]
11944        fn inline_size(_context: fidl::encoding::Context) -> usize {
11945            16
11946        }
11947    }
11948
11949    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats, D>
11950        for &SupportedFormats
11951    {
11952        unsafe fn encode(
11953            self,
11954            encoder: &mut fidl::encoding::Encoder<'_, D>,
11955            offset: usize,
11956            mut depth: fidl::encoding::Depth,
11957        ) -> fidl::Result<()> {
11958            encoder.debug_check_bounds::<SupportedFormats>(offset);
11959            // Vector header
11960            let max_ordinal: u64 = self.max_ordinal_present();
11961            encoder.write_num(max_ordinal, offset);
11962            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11963            // Calling encoder.out_of_line_offset(0) is not allowed.
11964            if max_ordinal == 0 {
11965                return Ok(());
11966            }
11967            depth.increment()?;
11968            let envelope_size = 8;
11969            let bytes_len = max_ordinal as usize * envelope_size;
11970            #[allow(unused_variables)]
11971            let offset = encoder.out_of_line_offset(bytes_len);
11972            let mut _prev_end_offset: usize = 0;
11973            if 1 > max_ordinal {
11974                return Ok(());
11975            }
11976
11977            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11978            // are envelope_size bytes.
11979            let cur_offset: usize = (1 - 1) * envelope_size;
11980
11981            // Zero reserved fields.
11982            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11983
11984            // Safety:
11985            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11986            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11987            //   envelope_size bytes, there is always sufficient room.
11988            fidl::encoding::encode_in_envelope_optional::<PcmSupportedFormats, D>(
11989                self.pcm_supported_formats
11990                    .as_ref()
11991                    .map(<PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow),
11992                encoder,
11993                offset + cur_offset,
11994                depth,
11995            )?;
11996
11997            _prev_end_offset = cur_offset + envelope_size;
11998
11999            Ok(())
12000        }
12001    }
12002
12003    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats {
12004        #[inline(always)]
12005        fn new_empty() -> Self {
12006            Self::default()
12007        }
12008
12009        unsafe fn decode(
12010            &mut self,
12011            decoder: &mut fidl::encoding::Decoder<'_, D>,
12012            offset: usize,
12013            mut depth: fidl::encoding::Depth,
12014        ) -> fidl::Result<()> {
12015            decoder.debug_check_bounds::<Self>(offset);
12016            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12017                None => return Err(fidl::Error::NotNullable),
12018                Some(len) => len,
12019            };
12020            // Calling decoder.out_of_line_offset(0) is not allowed.
12021            if len == 0 {
12022                return Ok(());
12023            };
12024            depth.increment()?;
12025            let envelope_size = 8;
12026            let bytes_len = len * envelope_size;
12027            let offset = decoder.out_of_line_offset(bytes_len)?;
12028            // Decode the envelope for each type.
12029            let mut _next_ordinal_to_read = 0;
12030            let mut next_offset = offset;
12031            let end_offset = offset + bytes_len;
12032            _next_ordinal_to_read += 1;
12033            if next_offset >= end_offset {
12034                return Ok(());
12035            }
12036
12037            // Decode unknown envelopes for gaps in ordinals.
12038            while _next_ordinal_to_read < 1 {
12039                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12040                _next_ordinal_to_read += 1;
12041                next_offset += envelope_size;
12042            }
12043
12044            let next_out_of_line = decoder.next_out_of_line();
12045            let handles_before = decoder.remaining_handles();
12046            if let Some((inlined, num_bytes, num_handles)) =
12047                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12048            {
12049                let member_inline_size =
12050                    <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12051                        decoder.context,
12052                    );
12053                if inlined != (member_inline_size <= 4) {
12054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12055                }
12056                let inner_offset;
12057                let mut inner_depth = depth.clone();
12058                if inlined {
12059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12060                    inner_offset = next_offset;
12061                } else {
12062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12063                    inner_depth.increment()?;
12064                }
12065                let val_ref = self
12066                    .pcm_supported_formats
12067                    .get_or_insert_with(|| fidl::new_empty!(PcmSupportedFormats, D));
12068                fidl::decode!(PcmSupportedFormats, D, val_ref, decoder, inner_offset, inner_depth)?;
12069                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12070                {
12071                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12072                }
12073                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12074                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12075                }
12076            }
12077
12078            next_offset += envelope_size;
12079
12080            // Decode the remaining unknown envelopes.
12081            while next_offset < end_offset {
12082                _next_ordinal_to_read += 1;
12083                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12084                next_offset += envelope_size;
12085            }
12086
12087            Ok(())
12088        }
12089    }
12090
12091    impl fidl::encoding::ValueTypeMarker for DaiFrameFormat {
12092        type Borrowed<'a> = &'a Self;
12093        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12094            value
12095        }
12096    }
12097
12098    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormat {
12099        type Owned = Self;
12100
12101        #[inline(always)]
12102        fn inline_align(_context: fidl::encoding::Context) -> usize {
12103            8
12104        }
12105
12106        #[inline(always)]
12107        fn inline_size(_context: fidl::encoding::Context) -> usize {
12108            16
12109        }
12110    }
12111
12112    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormat, D>
12113        for &DaiFrameFormat
12114    {
12115        #[inline]
12116        unsafe fn encode(
12117            self,
12118            encoder: &mut fidl::encoding::Encoder<'_, D>,
12119            offset: usize,
12120            _depth: fidl::encoding::Depth,
12121        ) -> fidl::Result<()> {
12122            encoder.debug_check_bounds::<DaiFrameFormat>(offset);
12123            encoder.write_num::<u64>(self.ordinal(), offset);
12124            match self {
12125                DaiFrameFormat::FrameFormatStandard(ref val) => {
12126                    fidl::encoding::encode_in_envelope::<DaiFrameFormatStandard, D>(
12127                        <DaiFrameFormatStandard as fidl::encoding::ValueTypeMarker>::borrow(val),
12128                        encoder,
12129                        offset + 8,
12130                        _depth,
12131                    )
12132                }
12133                DaiFrameFormat::FrameFormatCustom(ref val) => {
12134                    fidl::encoding::encode_in_envelope::<DaiFrameFormatCustom, D>(
12135                        <DaiFrameFormatCustom as fidl::encoding::ValueTypeMarker>::borrow(val),
12136                        encoder,
12137                        offset + 8,
12138                        _depth,
12139                    )
12140                }
12141            }
12142        }
12143    }
12144
12145    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormat {
12146        #[inline(always)]
12147        fn new_empty() -> Self {
12148            Self::FrameFormatStandard(fidl::new_empty!(DaiFrameFormatStandard, D))
12149        }
12150
12151        #[inline]
12152        unsafe fn decode(
12153            &mut self,
12154            decoder: &mut fidl::encoding::Decoder<'_, D>,
12155            offset: usize,
12156            mut depth: fidl::encoding::Depth,
12157        ) -> fidl::Result<()> {
12158            decoder.debug_check_bounds::<Self>(offset);
12159            #[allow(unused_variables)]
12160            let next_out_of_line = decoder.next_out_of_line();
12161            let handles_before = decoder.remaining_handles();
12162            let (ordinal, inlined, num_bytes, num_handles) =
12163                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12164
12165            let member_inline_size = match ordinal {
12166                1 => <DaiFrameFormatStandard as fidl::encoding::TypeMarker>::inline_size(
12167                    decoder.context,
12168                ),
12169                2 => <DaiFrameFormatCustom as fidl::encoding::TypeMarker>::inline_size(
12170                    decoder.context,
12171                ),
12172                _ => return Err(fidl::Error::UnknownUnionTag),
12173            };
12174
12175            if inlined != (member_inline_size <= 4) {
12176                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12177            }
12178            let _inner_offset;
12179            if inlined {
12180                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12181                _inner_offset = offset + 8;
12182            } else {
12183                depth.increment()?;
12184                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12185            }
12186            match ordinal {
12187                1 => {
12188                    #[allow(irrefutable_let_patterns)]
12189                    if let DaiFrameFormat::FrameFormatStandard(_) = self {
12190                        // Do nothing, read the value into the object
12191                    } else {
12192                        // Initialize `self` to the right variant
12193                        *self = DaiFrameFormat::FrameFormatStandard(fidl::new_empty!(
12194                            DaiFrameFormatStandard,
12195                            D
12196                        ));
12197                    }
12198                    #[allow(irrefutable_let_patterns)]
12199                    if let DaiFrameFormat::FrameFormatStandard(ref mut val) = self {
12200                        fidl::decode!(
12201                            DaiFrameFormatStandard,
12202                            D,
12203                            val,
12204                            decoder,
12205                            _inner_offset,
12206                            depth
12207                        )?;
12208                    } else {
12209                        unreachable!()
12210                    }
12211                }
12212                2 => {
12213                    #[allow(irrefutable_let_patterns)]
12214                    if let DaiFrameFormat::FrameFormatCustom(_) = self {
12215                        // Do nothing, read the value into the object
12216                    } else {
12217                        // Initialize `self` to the right variant
12218                        *self = DaiFrameFormat::FrameFormatCustom(fidl::new_empty!(
12219                            DaiFrameFormatCustom,
12220                            D
12221                        ));
12222                    }
12223                    #[allow(irrefutable_let_patterns)]
12224                    if let DaiFrameFormat::FrameFormatCustom(ref mut val) = self {
12225                        fidl::decode!(DaiFrameFormatCustom, D, val, decoder, _inner_offset, depth)?;
12226                    } else {
12227                        unreachable!()
12228                    }
12229                }
12230                ordinal => panic!("unexpected ordinal {:?}", ordinal),
12231            }
12232            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12233                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12234            }
12235            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12236                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12237            }
12238            Ok(())
12239        }
12240    }
12241
12242    impl fidl::encoding::ValueTypeMarker for Format2 {
12243        type Borrowed<'a> = &'a Self;
12244        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12245            value
12246        }
12247    }
12248
12249    unsafe impl fidl::encoding::TypeMarker for Format2 {
12250        type Owned = Self;
12251
12252        #[inline(always)]
12253        fn inline_align(_context: fidl::encoding::Context) -> usize {
12254            8
12255        }
12256
12257        #[inline(always)]
12258        fn inline_size(_context: fidl::encoding::Context) -> usize {
12259            16
12260        }
12261    }
12262
12263    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format2, D> for &Format2 {
12264        #[inline]
12265        unsafe fn encode(
12266            self,
12267            encoder: &mut fidl::encoding::Encoder<'_, D>,
12268            offset: usize,
12269            _depth: fidl::encoding::Depth,
12270        ) -> fidl::Result<()> {
12271            encoder.debug_check_bounds::<Format2>(offset);
12272            encoder.write_num::<u64>(self.ordinal(), offset);
12273            match self {
12274                Format2::PcmFormat(ref val) => fidl::encoding::encode_in_envelope::<PcmFormat, D>(
12275                    <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
12276                    encoder,
12277                    offset + 8,
12278                    _depth,
12279                ),
12280                Format2::Encoding(ref val) => fidl::encoding::encode_in_envelope::<Encoding, D>(
12281                    <Encoding as fidl::encoding::ValueTypeMarker>::borrow(val),
12282                    encoder,
12283                    offset + 8,
12284                    _depth,
12285                ),
12286                Format2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12287            }
12288        }
12289    }
12290
12291    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format2 {
12292        #[inline(always)]
12293        fn new_empty() -> Self {
12294            Self::__SourceBreaking { unknown_ordinal: 0 }
12295        }
12296
12297        #[inline]
12298        unsafe fn decode(
12299            &mut self,
12300            decoder: &mut fidl::encoding::Decoder<'_, D>,
12301            offset: usize,
12302            mut depth: fidl::encoding::Depth,
12303        ) -> fidl::Result<()> {
12304            decoder.debug_check_bounds::<Self>(offset);
12305            #[allow(unused_variables)]
12306            let next_out_of_line = decoder.next_out_of_line();
12307            let handles_before = decoder.remaining_handles();
12308            let (ordinal, inlined, num_bytes, num_handles) =
12309                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12310
12311            let member_inline_size = match ordinal {
12312                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12313                2 => <Encoding as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12314                0 => return Err(fidl::Error::UnknownUnionTag),
12315                _ => num_bytes as usize,
12316            };
12317
12318            if inlined != (member_inline_size <= 4) {
12319                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12320            }
12321            let _inner_offset;
12322            if inlined {
12323                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12324                _inner_offset = offset + 8;
12325            } else {
12326                depth.increment()?;
12327                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12328            }
12329            match ordinal {
12330                1 => {
12331                    #[allow(irrefutable_let_patterns)]
12332                    if let Format2::PcmFormat(_) = self {
12333                        // Do nothing, read the value into the object
12334                    } else {
12335                        // Initialize `self` to the right variant
12336                        *self = Format2::PcmFormat(fidl::new_empty!(PcmFormat, D));
12337                    }
12338                    #[allow(irrefutable_let_patterns)]
12339                    if let Format2::PcmFormat(ref mut val) = self {
12340                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
12341                    } else {
12342                        unreachable!()
12343                    }
12344                }
12345                2 => {
12346                    #[allow(irrefutable_let_patterns)]
12347                    if let Format2::Encoding(_) = self {
12348                        // Do nothing, read the value into the object
12349                    } else {
12350                        // Initialize `self` to the right variant
12351                        *self = Format2::Encoding(fidl::new_empty!(Encoding, D));
12352                    }
12353                    #[allow(irrefutable_let_patterns)]
12354                    if let Format2::Encoding(ref mut val) = self {
12355                        fidl::decode!(Encoding, D, val, decoder, _inner_offset, depth)?;
12356                    } else {
12357                        unreachable!()
12358                    }
12359                }
12360                #[allow(deprecated)]
12361                ordinal => {
12362                    for _ in 0..num_handles {
12363                        decoder.drop_next_handle()?;
12364                    }
12365                    *self = Format2::__SourceBreaking { unknown_ordinal: ordinal };
12366                }
12367            }
12368            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12369                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12370            }
12371            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12372                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12373            }
12374            Ok(())
12375        }
12376    }
12377
12378    impl fidl::encoding::ValueTypeMarker for SupportedFormats2 {
12379        type Borrowed<'a> = &'a Self;
12380        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12381            value
12382        }
12383    }
12384
12385    unsafe impl fidl::encoding::TypeMarker for SupportedFormats2 {
12386        type Owned = Self;
12387
12388        #[inline(always)]
12389        fn inline_align(_context: fidl::encoding::Context) -> usize {
12390            8
12391        }
12392
12393        #[inline(always)]
12394        fn inline_size(_context: fidl::encoding::Context) -> usize {
12395            16
12396        }
12397    }
12398
12399    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats2, D>
12400        for &SupportedFormats2
12401    {
12402        #[inline]
12403        unsafe fn encode(
12404            self,
12405            encoder: &mut fidl::encoding::Encoder<'_, D>,
12406            offset: usize,
12407            _depth: fidl::encoding::Depth,
12408        ) -> fidl::Result<()> {
12409            encoder.debug_check_bounds::<SupportedFormats2>(offset);
12410            encoder.write_num::<u64>(self.ordinal(), offset);
12411            match self {
12412                SupportedFormats2::PcmSupportedFormats(ref val) => {
12413                    fidl::encoding::encode_in_envelope::<PcmSupportedFormats, D>(
12414                        <PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow(val),
12415                        encoder,
12416                        offset + 8,
12417                        _depth,
12418                    )
12419                }
12420                SupportedFormats2::SupportedEncodings(ref val) => {
12421                    fidl::encoding::encode_in_envelope::<SupportedEncodings, D>(
12422                        <SupportedEncodings as fidl::encoding::ValueTypeMarker>::borrow(val),
12423                        encoder,
12424                        offset + 8,
12425                        _depth,
12426                    )
12427                }
12428                SupportedFormats2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12429            }
12430        }
12431    }
12432
12433    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats2 {
12434        #[inline(always)]
12435        fn new_empty() -> Self {
12436            Self::__SourceBreaking { unknown_ordinal: 0 }
12437        }
12438
12439        #[inline]
12440        unsafe fn decode(
12441            &mut self,
12442            decoder: &mut fidl::encoding::Decoder<'_, D>,
12443            offset: usize,
12444            mut depth: fidl::encoding::Depth,
12445        ) -> fidl::Result<()> {
12446            decoder.debug_check_bounds::<Self>(offset);
12447            #[allow(unused_variables)]
12448            let next_out_of_line = decoder.next_out_of_line();
12449            let handles_before = decoder.remaining_handles();
12450            let (ordinal, inlined, num_bytes, num_handles) =
12451                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12452
12453            let member_inline_size = match ordinal {
12454                1 => <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12455                    decoder.context,
12456                ),
12457                2 => {
12458                    <SupportedEncodings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
12459                }
12460                0 => return Err(fidl::Error::UnknownUnionTag),
12461                _ => num_bytes as usize,
12462            };
12463
12464            if inlined != (member_inline_size <= 4) {
12465                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12466            }
12467            let _inner_offset;
12468            if inlined {
12469                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12470                _inner_offset = offset + 8;
12471            } else {
12472                depth.increment()?;
12473                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12474            }
12475            match ordinal {
12476                1 => {
12477                    #[allow(irrefutable_let_patterns)]
12478                    if let SupportedFormats2::PcmSupportedFormats(_) = self {
12479                        // Do nothing, read the value into the object
12480                    } else {
12481                        // Initialize `self` to the right variant
12482                        *self = SupportedFormats2::PcmSupportedFormats(fidl::new_empty!(
12483                            PcmSupportedFormats,
12484                            D
12485                        ));
12486                    }
12487                    #[allow(irrefutable_let_patterns)]
12488                    if let SupportedFormats2::PcmSupportedFormats(ref mut val) = self {
12489                        fidl::decode!(PcmSupportedFormats, D, val, decoder, _inner_offset, depth)?;
12490                    } else {
12491                        unreachable!()
12492                    }
12493                }
12494                2 => {
12495                    #[allow(irrefutable_let_patterns)]
12496                    if let SupportedFormats2::SupportedEncodings(_) = self {
12497                        // Do nothing, read the value into the object
12498                    } else {
12499                        // Initialize `self` to the right variant
12500                        *self = SupportedFormats2::SupportedEncodings(fidl::new_empty!(
12501                            SupportedEncodings,
12502                            D
12503                        ));
12504                    }
12505                    #[allow(irrefutable_let_patterns)]
12506                    if let SupportedFormats2::SupportedEncodings(ref mut val) = self {
12507                        fidl::decode!(SupportedEncodings, D, val, decoder, _inner_offset, depth)?;
12508                    } else {
12509                        unreachable!()
12510                    }
12511                }
12512                #[allow(deprecated)]
12513                ordinal => {
12514                    for _ in 0..num_handles {
12515                        decoder.drop_next_handle()?;
12516                    }
12517                    *self = SupportedFormats2::__SourceBreaking { unknown_ordinal: ordinal };
12518                }
12519            }
12520            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12521                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12522            }
12523            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12524                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12525            }
12526            Ok(())
12527        }
12528    }
12529}