Skip to main content

fidl_fuchsia_hardware_audio_common/
fidl_fuchsia_hardware_audio_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type ClockDomain = u32;
12
13pub type ElementId = u64;
14
15pub type TopologyId = u64;
16
17/// UniqueId arrays starting with 0x42, 0x54, ... (or `BT` in ASCII) are
18/// reserved for drivers implementing Bluetooth technologies.
19/// UniqueId arrays starting with 0x55, 0x53, 0x42, ... (or `USB` in ASCII) are
20/// reserved for drivers implementing USB technologies.
21/// Note that even though the above values map to readable ASCII characters, array
22/// values can span the entire uint8 range (0-255).
23pub type UniqueId = [u8; 16];
24
25pub type VmoId = u64;
26
27pub const CLOCK_DOMAIN_EXTERNAL: u32 = 4294967295;
28
29pub const CLOCK_DOMAIN_MONOTONIC: u32 = 0;
30
31pub const MAX_COUNT_CHANNELS_IN_RING_BUFFER: u32 = 64;
32
33pub const MAX_COUNT_CHANNEL_SETS: u32 = 64;
34
35pub const MAX_COUNT_DAI_FORMATS: u32 = MAX_COUNT_FORMATS as u32;
36
37pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SAMPLE: u32 = 8;
38
39pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SLOT: u32 = 8;
40
41pub const MAX_COUNT_DAI_SUPPORTED_FRAME_FORMATS: u32 = 64;
42
43pub const MAX_COUNT_DAI_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
44
45pub const MAX_COUNT_DAI_SUPPORTED_RATES: u32 = 64;
46
47pub const MAX_COUNT_DAI_SUPPORTED_SAMPLE_FORMATS: u32 = 4;
48
49pub const MAX_COUNT_ENCODED_CHANNEL_SETS: u32 = 64;
50
51pub const MAX_COUNT_ENCODED_SUPPORTED_RATES: u32 = 64;
52
53pub const MAX_COUNT_ENCODED_TYPES: u32 = 64;
54
55pub const MAX_COUNT_FORMATS: u32 = 64;
56
57pub const MAX_COUNT_SUPPORTED_BYTES_PER_SAMPLE: u32 = 8;
58
59pub const MAX_COUNT_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
60
61pub const MAX_COUNT_SUPPORTED_RATES: u32 = 64;
62
63pub const MAX_COUNT_SUPPORTED_SAMPLE_FORMATS: u32 = 3;
64
65pub const MAX_COUNT_SUPPORTED_VALID_BITS_PER_SAMPLE: u32 = 8;
66
67pub const MAX_DAI_UI_STRING_SIZE: u32 = 256;
68
69pub const MAX_INLINE_TRANSFER_SIZE: u64 = 8192;
70
71pub const MAX_UI_STRING_SIZE: u32 = 256;
72
73pub const UNIQUE_ID_SIZE: u32 = 16;
74
75/// The maximum number of VMOs that can be registered or allocated.
76pub const VMO_VECTOR_MAX: u32 = 256;
77
78bitflags! {
79    /// Types of buffer ownership/transfer supported by the stream.
80    /// Multiple values can be supported by the driver.
81    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
82    pub struct BufferType: u64 {
83        /// The client allocates the VMO and registers it with the driver.
84        const CLIENT_OWNED = 1;
85        /// The driver allocates the VMO and passes handles to the client.
86        const DRIVER_OWNED = 2;
87        /// Data is sent inline within the FIDL message.
88        /// This can be used exclusively (standalone) without allocating or registering VMOs,
89        /// or mixed in-stream with packets of other buffer types.
90        const INLINE = 4;
91    }
92}
93
94impl BufferType {
95    #[inline(always)]
96    pub fn from_bits_allow_unknown(bits: u64) -> Self {
97        Self::from_bits_retain(bits)
98    }
99
100    #[inline(always)]
101    pub fn has_unknown_bits(&self) -> bool {
102        self.get_unknown_bits() != 0
103    }
104
105    #[inline(always)]
106    pub fn get_unknown_bits(&self) -> u64 {
107        self.bits() & !Self::all().bits()
108    }
109}
110
111/// Standard Frame format.
112#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
113#[repr(u8)]
114pub enum DaiFrameFormatStandard {
115    /// No frame format as in samples without a frame sync like PDM.
116    None = 1,
117    /// Format as specified in the I2S specification (left justified, 2 channels, 32 bits per
118    /// sample, frame sync stays low for the left channel and high for the right channel, data
119    /// starts one clock cycle after frame sync changes clocked out at the falling edge of sclk).
120    I2S = 2,
121    /// Left justified, 2 channels. Data starts at frame sync changes from low to high clocked out
122    /// at the falling edge of sclk. The frame sync must stay high for `bits_per_sample` bits for
123    /// the first channel and low for `bits_per_sample` bits for the second channel.
124    StereoLeft = 3,
125    /// Right justified, 2 channels. The frame sync must stay high for `bits_per_sample` bits for
126    /// the first channel and low for `bits_per_sample` bits for the second channel.
127    StereoRight = 4,
128    /// Left justified, variable number of channels, data starts at frame sync changes from low to
129    /// high clocked out at the rising edge of sclk. The frame sync must stay high for exactly 1
130    /// clock cycle.
131    Tdm1 = 5,
132    /// Left justified, variable number of channels, data starts one clock cycle after the frame
133    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
134    /// stay high for exactly 1 clock cycle.
135    Tdm2 = 6,
136    /// Left justified, variable number of channels, data starts two clock cycles after the frame
137    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
138    /// stay high for exactly 1 clock cycle.
139    Tdm3 = 7,
140}
141
142impl DaiFrameFormatStandard {
143    #[inline]
144    pub fn from_primitive(prim: u8) -> Option<Self> {
145        match prim {
146            1 => Some(Self::None),
147            2 => Some(Self::I2S),
148            3 => Some(Self::StereoLeft),
149            4 => Some(Self::StereoRight),
150            5 => Some(Self::Tdm1),
151            6 => Some(Self::Tdm2),
152            7 => Some(Self::Tdm3),
153            _ => None,
154        }
155    }
156
157    #[inline]
158    pub const fn into_primitive(self) -> u8 {
159        self as u8
160    }
161}
162
163#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
164#[repr(u8)]
165pub enum DaiSampleFormat {
166    /// Pulse Density Modulation samples.
167    Pdm = 1,
168    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
169    PcmSigned = 2,
170    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
171    PcmUnsigned = 3,
172    /// Floating point samples, encoded per the IEEE-754 standard.
173    PcmFloat = 4,
174}
175
176impl DaiSampleFormat {
177    #[inline]
178    pub fn from_primitive(prim: u8) -> Option<Self> {
179        match prim {
180            1 => Some(Self::Pdm),
181            2 => Some(Self::PcmSigned),
182            3 => Some(Self::PcmUnsigned),
183            4 => Some(Self::PcmFloat),
184            _ => None,
185        }
186    }
187
188    #[inline]
189    pub const fn into_primitive(self) -> u8 {
190        self as u8
191    }
192}
193
194#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
195pub enum DeviceType {
196    /// Device supports the fuchsia.hardware.audio/StreamConfig protocol.
197    StreamConfig,
198    /// Device supports the fuchsia.hardware.audio/Dai protocol.
199    Dai,
200    /// Device supports the fuchsia.hardware.audio/Codec protocol.
201    Codec,
202    /// Device supports the fuchsia.hardware.audio/Composite protocol.
203    Composite,
204    #[doc(hidden)]
205    __SourceBreaking { unknown_ordinal: u32 },
206}
207
208/// Pattern that matches an unknown `DeviceType` member.
209#[macro_export]
210macro_rules! DeviceTypeUnknown {
211    () => {
212        _
213    };
214}
215
216impl DeviceType {
217    #[inline]
218    pub fn from_primitive(prim: u32) -> Option<Self> {
219        match prim {
220            1 => Some(Self::StreamConfig),
221            2 => Some(Self::Dai),
222            3 => Some(Self::Codec),
223            4 => Some(Self::Composite),
224            _ => None,
225        }
226    }
227
228    #[inline]
229    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
230        match prim {
231            1 => Self::StreamConfig,
232            2 => Self::Dai,
233            3 => Self::Codec,
234            4 => Self::Composite,
235            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
236        }
237    }
238
239    #[inline]
240    pub fn unknown() -> Self {
241        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
242    }
243
244    #[inline]
245    pub const fn into_primitive(self) -> u32 {
246        match self {
247            Self::StreamConfig => 1,
248            Self::Dai => 2,
249            Self::Codec => 3,
250            Self::Composite => 4,
251            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
252        }
253    }
254
255    #[inline]
256    pub fn is_unknown(&self) -> bool {
257        match self {
258            Self::__SourceBreaking { unknown_ordinal: _ } => true,
259            _ => false,
260        }
261    }
262}
263
264#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
265pub enum DriverError {
266    /// The driver encountered an otherwise unspecified error while performing the operation.
267    InternalError,
268    /// The operation is not implemented, supported, or enabled.
269    NotSupported,
270    /// An argument is invalid.
271    InvalidArgs,
272    /// The subject of the operation is the wrong type to perform the operation.
273    WrongType,
274    /// The operation cannot be performed currently but potentially could succeed if
275    /// the caller waits for a prerequisite to be satisfied.
276    ShouldWait,
277    /// A fatal error has occurred in the driver. The connection is no longer
278    /// usable and the client should close it.
279    FatalError,
280    #[doc(hidden)]
281    __SourceBreaking { unknown_ordinal: u32 },
282}
283
284/// Pattern that matches an unknown `DriverError` member.
285#[macro_export]
286macro_rules! DriverErrorUnknown {
287    () => {
288        _
289    };
290}
291
292impl DriverError {
293    #[inline]
294    pub fn from_primitive(prim: u32) -> Option<Self> {
295        match prim {
296            1 => Some(Self::InternalError),
297            2 => Some(Self::NotSupported),
298            3 => Some(Self::InvalidArgs),
299            4 => Some(Self::WrongType),
300            5 => Some(Self::ShouldWait),
301            6 => Some(Self::FatalError),
302            _ => None,
303        }
304    }
305
306    #[inline]
307    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
308        match prim {
309            1 => Self::InternalError,
310            2 => Self::NotSupported,
311            3 => Self::InvalidArgs,
312            4 => Self::WrongType,
313            5 => Self::ShouldWait,
314            6 => Self::FatalError,
315            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
316        }
317    }
318
319    #[inline]
320    pub fn unknown() -> Self {
321        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
322    }
323
324    #[inline]
325    pub const fn into_primitive(self) -> u32 {
326        match self {
327            Self::InternalError => 1,
328            Self::NotSupported => 2,
329            Self::InvalidArgs => 3,
330            Self::WrongType => 4,
331            Self::ShouldWait => 5,
332            Self::FatalError => 6,
333            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
334        }
335    }
336
337    #[inline]
338    pub fn is_unknown(&self) -> bool {
339        match self {
340            Self::__SourceBreaking { unknown_ordinal: _ } => true,
341            _ => false,
342        }
343    }
344}
345
346/// The type of encoding used for the stream.
347#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
348pub enum EncodingType {
349    Aac,
350    Sbc,
351    #[doc(hidden)]
352    __SourceBreaking {
353        unknown_ordinal: u32,
354    },
355}
356
357/// Pattern that matches an unknown `EncodingType` member.
358#[macro_export]
359macro_rules! EncodingTypeUnknown {
360    () => {
361        _
362    };
363}
364
365impl EncodingType {
366    #[inline]
367    pub fn from_primitive(prim: u32) -> Option<Self> {
368        match prim {
369            1 => Some(Self::Aac),
370            2 => Some(Self::Sbc),
371            _ => None,
372        }
373    }
374
375    #[inline]
376    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
377        match prim {
378            1 => Self::Aac,
379            2 => Self::Sbc,
380            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
381        }
382    }
383
384    #[inline]
385    pub fn unknown() -> Self {
386        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
387    }
388
389    #[inline]
390    pub const fn into_primitive(self) -> u32 {
391        match self {
392            Self::Aac => 1,
393            Self::Sbc => 2,
394            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
395        }
396    }
397
398    #[inline]
399    pub fn is_unknown(&self) -> bool {
400        match self {
401            Self::__SourceBreaking { unknown_ordinal: _ } => true,
402            _ => false,
403        }
404    }
405}
406
407#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
408#[repr(u32)]
409pub enum GetVmoError {
410    /// The ring buffer setup failed due to an invalid argument, e.g. min_frames is too big.
411    InvalidArgs = 1,
412    /// The ring buffer setup failed due to an internal error.
413    InternalError = 2,
414}
415
416impl GetVmoError {
417    #[inline]
418    pub fn from_primitive(prim: u32) -> Option<Self> {
419        match prim {
420            1 => Some(Self::InvalidArgs),
421            2 => Some(Self::InternalError),
422            _ => None,
423        }
424    }
425
426    #[inline]
427    pub const fn into_primitive(self) -> u32 {
428        self as u32
429    }
430}
431
432#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
433#[repr(u32)]
434pub enum PlugDetectCapabilities {
435    /// Driver is hardwired (will always be plugged in).
436    Hardwired = 0,
437    /// Driver is able to asynchronously notify of plug state changes.
438    CanAsyncNotify = 1,
439}
440
441impl PlugDetectCapabilities {
442    #[inline]
443    pub fn from_primitive(prim: u32) -> Option<Self> {
444        match prim {
445            0 => Some(Self::Hardwired),
446            1 => Some(Self::CanAsyncNotify),
447            _ => None,
448        }
449    }
450
451    #[inline]
452    pub const fn into_primitive(self) -> u32 {
453        self as u32
454    }
455}
456
457#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
458#[repr(u8)]
459pub enum SampleFormat {
460    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
461    PcmSigned = 1,
462    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
463    PcmUnsigned = 2,
464    /// Floating point samples, encoded per the IEEE-754 standard.
465    PcmFloat = 3,
466}
467
468impl SampleFormat {
469    #[inline]
470    pub fn from_primitive(prim: u8) -> Option<Self> {
471        match prim {
472            1 => Some(Self::PcmSigned),
473            2 => Some(Self::PcmUnsigned),
474            3 => Some(Self::PcmFloat),
475            _ => None,
476        }
477    }
478
479    #[inline]
480    pub const fn into_primitive(self) -> u8 {
481        self as u8
482    }
483}
484
485/// Identifies devices that are unique within the system.
486/// A UniqueId for these devices consists of the enum value followed by (UNIQUE_ID_SIZE - 1) zeroes.
487#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
488pub enum SingularUniqueId {
489    Dsp,
490    BuiltinSpeaker,
491    BuiltinHeadphoneJack,
492    BuiltinMicrophone,
493    BuiltinHeadsetJack,
494    #[doc(hidden)]
495    __SourceBreaking {
496        unknown_ordinal: u8,
497    },
498}
499
500/// Pattern that matches an unknown `SingularUniqueId` member.
501#[macro_export]
502macro_rules! SingularUniqueIdUnknown {
503    () => {
504        _
505    };
506}
507
508impl SingularUniqueId {
509    #[inline]
510    pub fn from_primitive(prim: u8) -> Option<Self> {
511        match prim {
512            0 => Some(Self::Dsp),
513            1 => Some(Self::BuiltinSpeaker),
514            2 => Some(Self::BuiltinHeadphoneJack),
515            3 => Some(Self::BuiltinMicrophone),
516            4 => Some(Self::BuiltinHeadsetJack),
517            _ => None,
518        }
519    }
520
521    #[inline]
522    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
523        match prim {
524            0 => Self::Dsp,
525            1 => Self::BuiltinSpeaker,
526            2 => Self::BuiltinHeadphoneJack,
527            3 => Self::BuiltinMicrophone,
528            4 => Self::BuiltinHeadsetJack,
529            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
530        }
531    }
532
533    #[inline]
534    pub fn unknown() -> Self {
535        Self::__SourceBreaking { unknown_ordinal: 0xff }
536    }
537
538    #[inline]
539    pub const fn into_primitive(self) -> u8 {
540        match self {
541            Self::Dsp => 0,
542            Self::BuiltinSpeaker => 1,
543            Self::BuiltinHeadphoneJack => 2,
544            Self::BuiltinMicrophone => 3,
545            Self::BuiltinHeadsetJack => 4,
546            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
547        }
548    }
549
550    #[inline]
551    pub fn is_unknown(&self) -> bool {
552        match self {
553            Self::__SourceBreaking { unknown_ordinal: _ } => true,
554            _ => false,
555        }
556    }
557}
558
559#[derive(Clone, Debug, PartialEq)]
560pub struct CodecGetPropertiesResponse {
561    pub properties: CodecProperties,
562}
563
564impl fidl::Persistable for CodecGetPropertiesResponse {}
565
566#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
567pub struct CodecSetDaiFormatRequest {
568    pub format: DaiFormat,
569}
570
571impl fidl::Persistable for CodecSetDaiFormatRequest {}
572
573#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
574#[repr(C)]
575pub struct CodecStartResponse {
576    pub start_time: i64,
577}
578
579impl fidl::Persistable for CodecStartResponse {}
580
581#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
582#[repr(C)]
583pub struct CodecStopResponse {
584    pub stop_time: i64,
585}
586
587impl fidl::Persistable for CodecStopResponse {}
588
589#[derive(Clone, Debug, PartialEq)]
590pub struct CodecWatchPlugStateResponse {
591    pub plug_state: PlugState,
592}
593
594impl fidl::Persistable for CodecWatchPlugStateResponse {}
595
596#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
597pub struct CodecGetDaiFormatsResponse {
598    pub formats: Vec<DaiSupportedFormats>,
599}
600
601impl fidl::Persistable for CodecGetDaiFormatsResponse {}
602
603#[derive(Clone, Debug, PartialEq)]
604pub struct CodecSetDaiFormatResponse {
605    pub state: CodecFormatInfo,
606}
607
608impl fidl::Persistable for CodecSetDaiFormatResponse {}
609
610#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
611#[repr(C)]
612pub struct CompositeGetDaiFormatsRequest {
613    pub processing_element_id: u64,
614}
615
616impl fidl::Persistable for CompositeGetDaiFormatsRequest {}
617
618#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
619#[repr(C)]
620pub struct CompositeGetPacketStreamFormatsRequest {
621    pub processing_element_id: u64,
622}
623
624impl fidl::Persistable for CompositeGetPacketStreamFormatsRequest {}
625
626#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
627#[repr(C)]
628pub struct CompositeGetRingBufferFormatsRequest {
629    pub processing_element_id: u64,
630}
631
632impl fidl::Persistable for CompositeGetRingBufferFormatsRequest {}
633
634#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
635pub struct CompositeSetDaiFormatRequest {
636    pub processing_element_id: u64,
637    pub format: DaiFormat,
638}
639
640impl fidl::Persistable for CompositeSetDaiFormatRequest {}
641
642#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
643pub struct CompositeGetDaiFormatsResponse {
644    pub dai_formats: Vec<DaiSupportedFormats>,
645}
646
647impl fidl::Persistable for CompositeGetDaiFormatsResponse {}
648
649#[derive(Clone, Debug, PartialEq)]
650pub struct CompositeGetPacketStreamFormatsResponse {
651    pub packet_stream_formats: Vec<SupportedFormats2>,
652}
653
654impl fidl::Persistable for CompositeGetPacketStreamFormatsResponse {}
655
656#[derive(Clone, Debug, PartialEq)]
657pub struct CompositeGetPropertiesResponse {
658    pub properties: CompositeProperties,
659}
660
661impl fidl::Persistable for CompositeGetPropertiesResponse {}
662
663#[derive(Clone, Debug, PartialEq)]
664pub struct CompositeGetRingBufferFormatsResponse {
665    pub ring_buffer_formats: Vec<SupportedFormats2>,
666}
667
668impl fidl::Persistable for CompositeGetRingBufferFormatsResponse {}
669
670/// DAI format. Frames are made up of `number_of_channels` samples which have `bits_per_sample` bits
671/// of data within `bits_per_slot` arranged in `frame_format`. For more detailed information see
672/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/development/audio/drivers/dai).
673#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
674pub struct DaiFormat {
675    /// Number of channels.
676    /// Must be 2, if `frame_format` is DaiFrameFormatStandard::I2S, STEREO_LEFT or STEREO_RIGHT.
677    pub number_of_channels: u32,
678    /// Sets which channels are active via a bitmask.
679    /// The least significant bit corresponds to channel index 0.
680    /// Must not set bits beyond the least-significant `number_of_channels` bits.
681    pub channels_to_use_bitmask: u64,
682    /// The sample format of all samples.
683    pub sample_format: DaiSampleFormat,
684    /// The frame format of all samples.
685    pub frame_format: DaiFrameFormat,
686    /// The frame rate for all samples.
687    pub frame_rate: u32,
688    /// The bits per slot for all channels.
689    pub bits_per_slot: u8,
690    /// The bits per sample for each channel.
691    /// Must be smaller than `bits_per_slot` for all samples to fit.
692    pub bits_per_sample: u8,
693}
694
695impl fidl::Persistable for DaiFormat {}
696
697/// Custom Frame format.
698#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
699pub struct DaiFrameFormatCustom {
700    /// Justification of the samples within a slot.
701    pub left_justified: bool,
702    /// Clocking of data samples and frame sync output on either raising or falling sclk.
703    /// If true then the sclk raises on the raising edge of the data and frame sync, i.e.
704    /// the data will be sampled on the falling edge of sclk (the middle of the sclk cycle).
705    /// Hence, if false then data will be sampled on the raising edge of sclk.
706    pub sclk_on_raising: bool,
707    /// Number of sclks between the beginning of a frame sync change and audio samples.
708    /// For example, for I2S set to 1 and for stereo left justified set to 0.
709    pub frame_sync_sclks_offset: i8,
710    /// Number of sclks the frame sync is high within a frame.
711    /// For example, for I2S with 32 bits slots set to 32, for TDM usually set to 1.
712    pub frame_sync_size: u8,
713}
714
715impl fidl::Persistable for DaiFrameFormatCustom {}
716
717#[derive(Clone, Debug, PartialEq)]
718pub struct DaiGetPropertiesResponse {
719    pub properties: DaiProperties,
720}
721
722impl fidl::Persistable for DaiGetPropertiesResponse {}
723
724/// Formats supported by the DAI. Frames are made up of `number_of_channels` samples which have
725/// `bits_per_sample` bits of data within `bits_per_slot` bits arranged in `frame_formats`.
726/// All values listed in each vector are supported. When not all combinations supported by the driver
727/// can be described with one `DaiSupportedFormats`, `GetDaiFormats` returns more than one
728/// `DaiSupportedFormats` in the returned vector.
729/// For more detailed information see
730/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/development/audio/drivers/dai).
731#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
732pub struct DaiSupportedFormats {
733    /// Possible number of channels supported.
734    pub number_of_channels: Vec<u32>,
735    /// Sample formats supported.
736    pub sample_formats: Vec<DaiSampleFormat>,
737    /// Frame formats supported.
738    pub frame_formats: Vec<DaiFrameFormat>,
739    /// Rates supported. Values must be listed in ascending order.
740    pub frame_rates: Vec<u32>,
741    /// The bits per slot supported. Values must be listed in ascending order.
742    pub bits_per_slot: Vec<u8>,
743    /// Bits per sample supported. Values must be listed in ascending order.
744    pub bits_per_sample: Vec<u8>,
745}
746
747impl fidl::Persistable for DaiSupportedFormats {}
748
749#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
750pub struct DaiGetDaiFormatsResponse {
751    pub dai_formats: Vec<DaiSupportedFormats>,
752}
753
754impl fidl::Persistable for DaiGetDaiFormatsResponse {}
755
756#[derive(Clone, Debug, PartialEq)]
757pub struct DaiGetRingBufferFormatsResponse {
758    pub ring_buffer_formats: Vec<SupportedFormats>,
759}
760
761impl fidl::Persistable for DaiGetRingBufferFormatsResponse {}
762
763#[derive(Clone, Debug, PartialEq)]
764pub struct HealthGetHealthStateResponse {
765    pub state: HealthState,
766}
767
768impl fidl::Persistable for HealthGetHealthStateResponse {}
769
770#[derive(Clone, Debug, PartialEq)]
771pub struct PacketStreamControlGetPropertiesResponse {
772    pub properties: PacketStreamProperties,
773}
774
775impl fidl::Persistable for PacketStreamControlGetPropertiesResponse {}
776
777/// Format supporting PCM audio. Frames are made up of `number_of_channels` samples
778/// which have `valid_bits_per_sample` bits of most-significant (left-justified) data within
779/// `bytes_per_sample` bytes.
780///
781/// For more detailed information see
782/// [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/development/audio/drivers/streaming).
783#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
784pub struct PcmFormat {
785    /// Number of channels.
786    pub number_of_channels: u8,
787    /// The format of all samples.
788    pub sample_format: SampleFormat,
789    /// Bytes allocated to hold a sample, must be greater than or equal to the valid sample size in
790    /// `valid_bits_per_sample`.
791    pub bytes_per_sample: u8,
792    /// Number of valid bits in a sample, must be less than or equal to `bytes_per_sample * 8`.
793    /// If less than `bytes_per_sample * 8`, the valid bits (those containing audio)
794    /// are left justified, and any additional bits must be ignored by the
795    /// receiver.
796    pub valid_bits_per_sample: u8,
797    /// The frame rate for all samples.
798    pub frame_rate: u32,
799}
800
801impl fidl::Persistable for PcmFormat {}
802
803#[derive(Clone, Debug, PartialEq)]
804pub struct RingBufferGetPropertiesResponse {
805    pub properties: RingBufferProperties,
806}
807
808impl fidl::Persistable for RingBufferGetPropertiesResponse {}
809
810#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
811#[repr(C)]
812pub struct RingBufferGetVmoRequest {
813    pub min_frames: u32,
814    pub clock_recovery_notifications_per_ring: u32,
815}
816
817impl fidl::Persistable for RingBufferGetVmoRequest {}
818
819#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
820#[repr(C)]
821pub struct RingBufferPositionInfo {
822    /// The driver's best estimate of the time (in the CLOCK_MONOTONIC timeline) at which the
823    /// playback/capture pointer reached the position indicated by `position`.
824    ///
825    /// `turn_on_delay` impact should not be incorporated into 'timestamp'.
826    /// No delays indicated in `DelayInfo` should be incorporated.
827    pub timestamp: i64,
828    /// The playback/capture pointer position (in bytes) in the ring buffer at time
829    /// `timestamp` as estimated by the driver.
830    pub position: u32,
831}
832
833impl fidl::Persistable for RingBufferPositionInfo {}
834
835#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
836#[repr(C)]
837pub struct RingBufferSetActiveChannelsRequest {
838    pub active_channels_bitmask: u64,
839}
840
841impl fidl::Persistable for RingBufferSetActiveChannelsRequest {}
842
843#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
844#[repr(C)]
845pub struct RingBufferStartResponse {
846    pub start_time: i64,
847}
848
849impl fidl::Persistable for RingBufferStartResponse {}
850
851#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
852#[repr(C)]
853pub struct RingBufferWatchClockRecoveryPositionInfoResponse {
854    pub position_info: RingBufferPositionInfo,
855}
856
857impl fidl::Persistable for RingBufferWatchClockRecoveryPositionInfoResponse {}
858
859#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
860#[repr(C)]
861pub struct RingBufferSetActiveChannelsResponse {
862    pub set_time: i64,
863}
864
865impl fidl::Persistable for RingBufferSetActiveChannelsResponse {}
866
867#[derive(Clone, Debug, PartialEq)]
868pub struct RingBufferWatchDelayInfoResponse {
869    pub delay_info: DelayInfo,
870}
871
872impl fidl::Persistable for RingBufferWatchDelayInfoResponse {}
873
874#[derive(Clone, Debug, PartialEq)]
875pub struct StreamConfigGetPropertiesResponse {
876    pub properties: StreamProperties,
877}
878
879impl fidl::Persistable for StreamConfigGetPropertiesResponse {}
880
881#[derive(Clone, Debug, PartialEq)]
882pub struct StreamConfigGetSupportedFormatsResponse {
883    pub supported_formats: Vec<SupportedFormats>,
884}
885
886impl fidl::Persistable for StreamConfigGetSupportedFormatsResponse {}
887
888#[derive(Clone, Debug, PartialEq)]
889pub struct StreamConfigSetGainRequest {
890    pub target_state: GainState,
891}
892
893impl fidl::Persistable for StreamConfigSetGainRequest {}
894
895#[derive(Clone, Debug, PartialEq)]
896pub struct StreamConfigWatchGainStateResponse {
897    pub gain_state: GainState,
898}
899
900impl fidl::Persistable for StreamConfigWatchGainStateResponse {}
901
902#[derive(Clone, Debug, PartialEq)]
903pub struct StreamConfigWatchPlugStateResponse {
904    pub plug_state: PlugState,
905}
906
907impl fidl::Persistable for StreamConfigWatchPlugStateResponse {}
908
909#[derive(Clone, Debug, Default, PartialEq)]
910pub struct AllocateVmosConfig {
911    /// The minimum size required for each VMO, in bytes.
912    ///
913    /// Required.
914    pub min_vmo_size: Option<u64>,
915    /// The number of VMOs to allocate.
916    ///
917    /// Required.
918    pub vmo_count: Option<u32>,
919    #[doc(hidden)]
920    pub __source_breaking: fidl::marker::SourceBreaking,
921}
922
923impl fidl::Persistable for AllocateVmosConfig {}
924
925/// The specification of a single channel, within the overall channel configuration.
926#[derive(Clone, Debug, Default, PartialEq)]
927pub struct ChannelAttributes {
928    /// Minimum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
929    /// If `min_frequency` is not included, then this channel is assumed to cover the entire
930    /// low-frequency range of this device.
931    ///
932    /// Optional.
933    pub min_frequency: Option<u32>,
934    /// Maximum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
935    /// If `max_frequency` is not included, then this channel is assumed to cover the entire
936    /// high-frequency range of this device.
937    ///
938    /// Optional.
939    pub max_frequency: Option<u32>,
940    #[doc(hidden)]
941    pub __source_breaking: fidl::marker::SourceBreaking,
942}
943
944impl fidl::Persistable for ChannelAttributes {}
945
946/// The specification of a channel configuration.
947#[derive(Clone, Debug, Default, PartialEq)]
948pub struct ChannelSet {
949    /// Describes attributes for this channel set.
950    /// The size of this vector defines the number of channels supported by this `ChannelSet`.
951    /// Each element of the `attributes` vector defines attributes of a single channel.
952    ///
953    /// Required.
954    pub attributes: Option<Vec<ChannelAttributes>>,
955    #[doc(hidden)]
956    pub __source_breaking: fidl::marker::SourceBreaking,
957}
958
959impl fidl::Persistable for ChannelSet {}
960
961/// Codec format information.
962#[derive(Clone, Debug, Default, PartialEq)]
963pub struct CodecFormatInfo {
964    /// The driver's best estimate of the external delay (in nanoseconds) present in the pipeline
965    /// for the chosen format. When precisely synchronizing presentation across multiple entities
966    /// (e.g. devices), the external delay should be taken into account.
967    /// If not included `external_delay` is unknown.
968    ///
969    /// Optional.
970    pub external_delay: Option<i64>,
971    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
972    /// actually start playback/capture after a `Start` command is issued.
973    /// It may take some time for the hardware to get into fully operational mode, for example due
974    /// a power state change. This delay must be taken into account if not getting the initial audio
975    /// samples played or captured is not acceptable.
976    /// If not included `turn_on_delay` is unknown.
977    ///
978    /// Optional.
979    pub turn_on_delay: Option<i64>,
980    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
981    /// actually stop playback/capture after a `Stop` command is issued.
982    /// It may take some time for the hardware to get into fully stopped mode, for example due
983    /// a power state change. This delay must be taken into account if playback/capture of samples
984    /// after a 'Stop' command is not acceptable.
985    /// If not included, the turn off delay is unknown.
986    ///
987    /// Optional.
988    pub turn_off_delay: Option<i64>,
989    #[doc(hidden)]
990    pub __source_breaking: fidl::marker::SourceBreaking,
991}
992
993impl fidl::Persistable for CodecFormatInfo {}
994
995#[derive(Clone, Debug, Default, PartialEq)]
996pub struct CodecProperties {
997    /// Driver type is input (true) or output (false)
998    /// If not included, then the driver may be used for both input and output.
999    ///
1000    /// Optional.
1001    pub is_input: Option<bool>,
1002    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1003    /// If included, this string must be non-empty.
1004    ///
1005    /// Optional.
1006    pub manufacturer: Option<String>,
1007    /// UI string for the product name. If not included, the product name is unspecified.
1008    /// If included, this string must be non-empty.
1009    ///
1010    /// Optional.
1011    pub product: Option<String>,
1012    /// Unique identifier for the codec. If not included, there is no unique id for this Codec.
1013    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1014    ///
1015    /// Optional.
1016    pub unique_id: Option<[u8; 16]>,
1017    /// Plug Detect Capabilities.
1018    ///
1019    /// Required.
1020    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1021    #[doc(hidden)]
1022    pub __source_breaking: fidl::marker::SourceBreaking,
1023}
1024
1025impl fidl::Persistable for CodecProperties {}
1026
1027#[derive(Clone, Debug, Default, PartialEq)]
1028pub struct CompositeProperties {
1029    /// UI string for the manufacturer name. If not set, the manufacturer is unknown.
1030    /// If included, this string must be non-empty.
1031    ///
1032    /// Optional.
1033    pub manufacturer: Option<String>,
1034    /// UI string for the product name. If not set, the product name is unknown.
1035    /// If included, this string must be non-empty.
1036    ///
1037    /// Optional.
1038    pub product: Option<String>,
1039    /// A unique identifier. If not included, there is no unique id for this Device.
1040    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1041    ///
1042    /// Optional.
1043    pub unique_id: Option<[u8; 16]>,
1044    /// An identifier for the clock domain in which this hardware operates. If
1045    /// two hardware devices have the same clock domain, their clock rates are
1046    /// identical and perfectly synchronized. Although these two clocks have the
1047    /// same rate, the clock positions may be offset from each other by an
1048    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1049    /// system wide entity, such as a platform bus or global clock tree.
1050    ///
1051    /// There are two special values:
1052    ///
1053    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1054    ///    rate as the system montonic clock.
1055    ///
1056    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1057    ///    rate and is not synchronized with any known clock, not even with
1058    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1059    ///
1060    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1061    /// notification updates to recover the hardware's clock.
1062    ///
1063    /// Required.
1064    pub clock_domain: Option<u32>,
1065    #[doc(hidden)]
1066    pub __source_breaking: fidl::marker::SourceBreaking,
1067}
1068
1069impl fidl::Persistable for CompositeProperties {}
1070
1071#[derive(Clone, Debug, Default, PartialEq)]
1072pub struct DaiProperties {
1073    /// Driver type is input (true) or output (false)
1074    ///
1075    /// Required.
1076    pub is_input: Option<bool>,
1077    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1078    /// If included, this string must be non-empty.
1079    ///
1080    /// Optional.
1081    pub manufacturer: Option<String>,
1082    /// UI string for the product name. If not included, the product name is unspecified.
1083    /// If included, this string must be non-empty.
1084    ///
1085    /// Optional.
1086    pub product_name: Option<String>,
1087    /// A unique identifier for the DAI. If not included, there is no unique id for this DAI.
1088    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1089    ///
1090    /// Optional.
1091    pub unique_id: Option<[u8; 16]>,
1092    /// An identifier for the clock domain in which this hardware operates. If
1093    /// two hardware devices have the same clock domain, their clock rates are
1094    /// identical and perfectly synchronized. Although these two clocks have the
1095    /// same rate, the clock positions may be offset from each other by an
1096    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1097    /// system wide entity, such as a platform bus or global clock tree.
1098    ///
1099    /// There are two special values:
1100    ///
1101    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1102    ///    rate as the system montonic clock.
1103    ///
1104    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1105    ///    rate and is not synchronized with any known clock, not even with
1106    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1107    ///
1108    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1109    /// notification updates to recover the hardware's clock.
1110    ///
1111    /// Required.
1112    pub clock_domain: Option<u32>,
1113    #[doc(hidden)]
1114    pub __source_breaking: fidl::marker::SourceBreaking,
1115}
1116
1117impl fidl::Persistable for DaiProperties {}
1118
1119/// Delay information as returned by the driver.
1120#[derive(Clone, Debug, Default, PartialEq)]
1121pub struct DelayInfo {
1122    /// The driver's best estimate (for the chosen format) of the delay internal to the hardware it
1123    /// abstracts.
1124    ///
1125    /// "Internal" refers to the hardware between the DAI interconnect and the ring buffer (such as
1126    /// an SoC audio subsystem), whereas "external" refers to hardware on the far side of any DAI
1127    /// interconnect (such as hardware codecs).
1128    ///
1129    /// For a given frame during playback, this is any delay after the driver copies it out of the
1130    /// ring buffer, before it exits any interconnect.
1131    /// For a given frame during recording, this is any delay after it enters the interconnect,
1132    /// before the driver moves it into the ring buffer.
1133    ///
1134    /// `internal_delay` must be taken into account by the client when determining the requirements
1135    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1136    ///
1137    /// This delay must not include the inherent delay added by the temporary buffering needed
1138    /// to copy data in and out of the ring buffer, which is contained in `RingBufferProperties`
1139    /// field `driver_transfer_bytes`.
1140    ///
1141    /// Required.
1142    pub internal_delay: Option<i64>,
1143    /// The driver's best estimate (for the chosen format) of the delay external to the hardware it
1144    /// abstracts.
1145    ///
1146    /// "External" refers to hardware on the far side of any DAI interconnect (such as hardware
1147    /// codecs), whereas "internal" refers to hardware between the DAI interconnect and the ring
1148    /// buffer (such as an SoC audio subsystem).
1149    ///
1150    /// `external_delay` must be taken into account by the client when determining the requirements
1151    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1152    ///
1153    /// If not included, `external_delay` is unknown. If unknown, a client may treat it however it
1154    /// chooses (consider it zero or some large number, autodetect it, etc).
1155    ///
1156    /// Like `internal_delay`, this delay must not include the inherent delay added by the temporary
1157    /// buffering needed to copy data in and out of the ring buffer, which is contained in
1158    /// `RingBufferProperties` field `driver_transfer_bytes`.
1159    ///
1160    /// Optional.
1161    pub external_delay: Option<i64>,
1162    #[doc(hidden)]
1163    pub __source_breaking: fidl::marker::SourceBreaking,
1164}
1165
1166impl fidl::Persistable for DelayInfo {}
1167
1168/// Format specification for an encoded audio stream.
1169#[derive(Clone, Debug, Default, PartialEq)]
1170pub struct Encoding {
1171    /// Number of channels for the stream, once it is decoded.
1172    ///
1173    /// Required.
1174    pub decoded_channel_count: Option<u32>,
1175    /// The frame rate for the stream, once it is decoded. This is a hint for decoders.
1176    ///
1177    /// Optional.
1178    pub decoded_frame_rate: Option<u32>,
1179    /// The average bitrate of the stream in bits per second.
1180    ///
1181    /// Required.
1182    pub average_encoding_bitrate: Option<u32>,
1183    /// The encoding type for the stream.
1184    ///
1185    /// Required.
1186    pub encoding_type: Option<EncodingType>,
1187    #[doc(hidden)]
1188    pub __source_breaking: fidl::marker::SourceBreaking,
1189}
1190
1191impl fidl::Persistable for Encoding {}
1192
1193/// Deprecated: Use `Format2` instead.
1194#[derive(Clone, Debug, Default, PartialEq)]
1195pub struct Format {
1196    pub pcm_format: Option<PcmFormat>,
1197    #[doc(hidden)]
1198    pub __source_breaking: fidl::marker::SourceBreaking,
1199}
1200
1201impl fidl::Persistable for Format {}
1202
1203/// Gain state requested by the client or returned by the driver.
1204#[derive(Clone, Debug, Default, PartialEq)]
1205pub struct GainState {
1206    /// Current mute state. If not included, the state is unmuted.
1207    ///
1208    /// Optional.
1209    pub muted: Option<bool>,
1210    /// Current Automatic Gain Control (AGC) state. If not included, AGC is disabled.
1211    ///
1212    /// Optional.
1213    pub agc_enabled: Option<bool>,
1214    /// Current gain in decibels.
1215    ///
1216    /// Required.
1217    pub gain_db: Option<f32>,
1218    #[doc(hidden)]
1219    pub __source_breaking: fidl::marker::SourceBreaking,
1220}
1221
1222impl fidl::Persistable for GainState {}
1223
1224#[derive(Clone, Debug, Default, PartialEq)]
1225pub struct HealthState {
1226    /// Driver is currently healthy.
1227    /// No health information is provided if this field is not included.
1228    /// This allows drivers to signal their health state in scenarios where they have not enough
1229    /// capabilities or resources to recover on their own, for instance not able to power down the
1230    /// hardware via a GPIO or control over the power subsystem.
1231    ///
1232    /// Optional.
1233    pub healthy: Option<bool>,
1234    #[doc(hidden)]
1235    pub __source_breaking: fidl::marker::SourceBreaking,
1236}
1237
1238impl fidl::Persistable for HealthState {}
1239
1240/// Properties of the packet-stream. These values don't change once the packet-stream is created.
1241#[derive(Clone, Debug, Default, PartialEq)]
1242pub struct PacketStreamProperties {
1243    /// When set to true, indicates that the packet-stream runs in a different cache coherency
1244    /// domain. Clients must ensure data writes are flushed to main memory (during output)
1245    /// or invalidated before reading (during input).
1246    ///
1247    /// When set to false, the server and client are in the same coherency domain.
1248    /// Synchronization (e.g., fences) is still required to order reads and writes.
1249    ///
1250    /// Required.
1251    pub needs_cache_flush_or_invalidate: Option<bool>,
1252    /// The buffer methods supported by this driver.
1253    ///
1254    /// Required.
1255    pub supported_buffer_types: Option<BufferType>,
1256    #[doc(hidden)]
1257    pub __source_breaking: fidl::marker::SourceBreaking,
1258}
1259
1260impl fidl::Persistable for PacketStreamProperties {}
1261
1262#[derive(Clone, Debug, Default, PartialEq)]
1263pub struct PacketStreamSinkPutPacketResponse {
1264    #[doc(hidden)]
1265    pub __source_breaking: fidl::marker::SourceBreaking,
1266}
1267
1268impl fidl::Persistable for PacketStreamSinkPutPacketResponse {}
1269
1270/// Format supporting PCM audio. Each frame consists of one or more
1271/// (number_of_channels) samples, stored contiguously. Within the `bytes_per_sample` allocated for
1272/// each sample, `valid_bits_per_sample` bits of data are stored in the most-significant
1273/// (left-justified) portion.
1274///
1275/// All values listed in each vector are supported. This implies a cross-product: any listed
1276/// item in one vector is supported in combination with any listed item in another vector.
1277/// When not all combinations supported by the driver can be described with one
1278/// `PcmSupportedFormats` table, `GetSupportedFormats` must return a vector with multiple
1279/// `SupportedFormats` entries.
1280///
1281/// For more detailed information see
1282/// [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/development/audio/drivers/streaming).
1283#[derive(Clone, Debug, Default, PartialEq)]
1284pub struct PcmSupportedFormats {
1285    /// Vector of possible `ChannelSets` supported.
1286    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1287    /// of optional attributes.
1288    /// Only one `ChannelSet` is allowed for each unique channel-count. As a result, no two entries
1289    /// in `channel_sets` can contain `attributes` vectors with the same length.
1290    ///
1291    /// Required.
1292    pub channel_sets: Option<Vec<ChannelSet>>,
1293    /// Vector of possible `SampleFormat`s supported.
1294    /// Values in this vector must be unique.
1295    ///
1296    /// Required.
1297    pub sample_formats: Option<Vec<SampleFormat>>,
1298    /// Vector of possible bytes allocated for each sample. Values must be listed in ascending
1299    /// order. All values listed in `valid_bits_per_sample` must fit into at least the largest
1300    /// `bytes_per_sample` value.
1301    ///
1302    /// Required.
1303    pub bytes_per_sample: Option<Vec<u8>>,
1304    /// Vector of possible number of bits containing valid data, within the sample container defined
1305    /// by `bytes_per_sample`. Values must be listed in ascending order. All values listed must fit
1306    /// into the largest `bytes_per_sample` value. The valid data bits must be most-significant
1307    /// (left-justified) within the sample container, and any additional bits will be ignored.
1308    ///
1309    /// Required.
1310    pub valid_bits_per_sample: Option<Vec<u8>>,
1311    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1312    ///
1313    /// Required.
1314    pub frame_rates: Option<Vec<u32>>,
1315    #[doc(hidden)]
1316    pub __source_breaking: fidl::marker::SourceBreaking,
1317}
1318
1319impl fidl::Persistable for PcmSupportedFormats {}
1320
1321/// Plug state as returned by the driver.
1322/// If the driver reports a `plug_detect_capabilities` equal to HARDWIRED, then the driver should
1323/// respond to `WatchPlugState` only the first time it is called, with `plugged` set to true and
1324/// `plug_state_time` set to time '0'.
1325#[derive(Clone, Debug, Default, PartialEq)]
1326pub struct PlugState {
1327    /// Driver is currently plugged in. Required
1328    pub plugged: Option<bool>,
1329    /// Timestamps the information provided in the rest of the fields of this struct. Required.
1330    pub plug_state_time: Option<i64>,
1331    #[doc(hidden)]
1332    pub __source_breaking: fidl::marker::SourceBreaking,
1333}
1334
1335impl fidl::Persistable for PlugState {}
1336
1337/// Properties of the ring buffer. These values don't change once the ring buffer is created.
1338#[derive(Clone, Debug, Default, PartialEq)]
1339pub struct RingBufferProperties {
1340    /// When set to true, indicates that the ring buffer runs in a different cache coherency domain,
1341    /// and thus clients must ensure that their data writes are flushed all the way to main memory
1342    /// (during playback), or that their view of the ring buffer must be invalidated before any
1343    /// reads (during capture). This is because there may be hardware external to the CPUs that
1344    /// reads/writes main memory, bypassing the CPUs.
1345    ///
1346    /// When set to false, indicates that the ring buffer runs in the same cache coherency domain as
1347    /// the CPUs, hence the driver is not required to flush/invalidate the ring buffer.
1348    /// Note that in this case, the driver and client still must synchronize their data access, for
1349    /// instance by inserting the appropriate acquire fences before reading and releasing fences
1350    /// after writing, or (more commonly) by obeying the Producer/Consumer pattern described in
1351    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1352    ///
1353    /// Required.
1354    pub needs_cache_flush_or_invalidate: Option<bool>,
1355    /// The driver's best estimate of the time needed for the hardware to emit (during playback) or
1356    /// accept (during capture) frames, after a channel is activated by `SetActiveChannels`.
1357    ///
1358    /// The driver estimates that after `SetActiveChannels(channel)->(set_time)` enables a channel,
1359    /// its data will resume flowing at approximately `set_time` + `turn_on_delay`.
1360    /// Hardware can take time to become fully operational (e.g. due to a power state change, or
1361    /// communication delays between a Bluetooth driver's multiple hardware entities). The client
1362    /// must take this delay into account, if it is unacceptable to drop the actual audio frames
1363    /// and instead play/capture silence during this interval.
1364    /// If not included, `turn_on_delay` is unknown.
1365    ///
1366    /// Optional.
1367    pub turn_on_delay: Option<i64>,
1368    /// Size (in bytes) of the temporary buffers or FIFOs used by the driver when consuming or
1369    /// generating the ring buffer contents.
1370    ///
1371    /// The `driver_transfer_bytes` field is covered extensively in
1372    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1373    ///
1374    /// `driver_transfer_bytes` must not include the impact of delays caused by hardware or software
1375    /// processing abstracted by the driver. Those delays are communicated by `internal_delay` and
1376    /// `external_delay` fields in `DelayInfo`; they are orthogonal to this value.
1377    ///
1378    /// Required.
1379    pub driver_transfer_bytes: Option<u32>,
1380    #[doc(hidden)]
1381    pub __source_breaking: fidl::marker::SourceBreaking,
1382}
1383
1384impl fidl::Persistable for RingBufferProperties {}
1385
1386#[derive(Clone, Debug, Default, PartialEq)]
1387pub struct StreamProperties {
1388    /// A unique identifier. If not included, there is no unique id for this StreamConfig.
1389    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1390    ///
1391    /// Optional.
1392    pub unique_id: Option<[u8; 16]>,
1393    /// Driver type is input (true) or output (false)
1394    ///
1395    /// Required.
1396    pub is_input: Option<bool>,
1397    /// Gain mute capability. If not included, the StreamConfig can't mute.
1398    ///
1399    /// Optional.
1400    pub can_mute: Option<bool>,
1401    /// Automatic Gain Control (AGC) capability. If not included, the StreamConfig can't AGC.
1402    ///
1403    /// Optional.
1404    pub can_agc: Option<bool>,
1405    /// Minimum gain in decibels.
1406    ///
1407    /// Required.
1408    pub min_gain_db: Option<f32>,
1409    /// Maximum gain in decibels.
1410    ///
1411    /// Required.
1412    pub max_gain_db: Option<f32>,
1413    /// Gain step in decibels, this value must not be negative, but may be zero to convey an
1414    /// effectively continuous range of values. Must not exceed `max_gain_db` - `min_gain_db`.
1415    ///
1416    /// Required.
1417    pub gain_step_db: Option<f32>,
1418    /// Plug Detect Capabilities.
1419    ///
1420    /// Required.
1421    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1422    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1423    /// If included, this string must be non-empty.
1424    ///
1425    /// Optional.
1426    pub manufacturer: Option<String>,
1427    /// UI string for the product name. If not included, the product name is unspecified.
1428    /// If included, this string must be non-empty.
1429    ///
1430    /// Optional.
1431    pub product: Option<String>,
1432    /// An identifier for the clock domain in which this hardware operates. If
1433    /// two hardware devices have the same clock domain, their clock rates are
1434    /// identical and perfectly synchronized. Although these two clocks have the
1435    /// same rate, the clock positions may be offset from each other by an
1436    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1437    /// system wide entity, such as a platform bus or global clock tree.
1438    ///
1439    /// There are two special values:
1440    ///
1441    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1442    ///    rate as the system montonic clock.
1443    ///
1444    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1445    ///    rate and is not synchronized with any known clock, not even with
1446    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1447    ///
1448    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1449    /// notification updates to recover the hardware's clock.
1450    ///
1451    /// Required.
1452    pub clock_domain: Option<u32>,
1453    #[doc(hidden)]
1454    pub __source_breaking: fidl::marker::SourceBreaking,
1455}
1456
1457impl fidl::Persistable for StreamProperties {}
1458
1459/// Supported formats for encoded audio.
1460///
1461/// This table defines a valid set of configurations. All fields are independent, which
1462/// implies a cross-product: any listed `channel_set` is supported at any listed
1463/// `frame_rate` for any listed `encoded_type`.
1464///
1465/// If a device supports multiple encoders with *different* rate/channel constraints
1466/// (e.g. AAC supports 48kHz but SBC only supports 44.1kHz), the device must
1467/// report them as separate entries in the `SupportedFormats2` vector.
1468#[derive(Clone, Debug, Default, PartialEq)]
1469pub struct SupportedEncodings {
1470    /// Vector of possible `ChannelSets` supported.
1471    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1472    /// of optional attributes.
1473    ///
1474    /// Each entry in this vector must describe a unique channel count. For example, this
1475    /// vector cannot contain two different `ChannelSet` entries that both apply to a
1476    /// 2-channel configuration.
1477    /// Values must be listed in ascending order of channel count.
1478    ///
1479    /// Required.
1480    pub decoded_channel_sets: Option<Vec<ChannelSet>>,
1481    /// Vector of possible frame rates supported.
1482    /// If present, must contain at least one value.
1483    /// Values must be listed in ascending order.
1484    ///
1485    /// Optional.
1486    pub decoded_frame_rates: Option<Vec<u32>>,
1487    /// The minimum encoding bitrate of the stream in bits per second.
1488    /// Cannot exceed 'max_encoding_bitrate', if both are present.
1489    ///
1490    /// Optional.
1491    pub min_encoding_bitrate: Option<u32>,
1492    /// The maximum encoding bitrate of the stream in bits per second.
1493    /// Cannot be less than 'min_encoding_bitrate', if both are present.
1494    ///
1495    /// Optional.
1496    pub max_encoding_bitrate: Option<u32>,
1497    /// The encoder types that support the configurations listed above.
1498    /// Must contain at least one value. Values in this vector must be unique.
1499    ///
1500    /// Required.
1501    pub encoding_types: Option<Vec<EncodingType>>,
1502    #[doc(hidden)]
1503    pub __source_breaking: fidl::marker::SourceBreaking,
1504}
1505
1506impl fidl::Persistable for SupportedEncodings {}
1507
1508/// Deprecated: Use `SupportedFormats2` instead.
1509#[derive(Clone, Debug, Default, PartialEq)]
1510pub struct SupportedFormats {
1511    pub pcm_supported_formats: Option<PcmSupportedFormats>,
1512    #[doc(hidden)]
1513    pub __source_breaking: fidl::marker::SourceBreaking,
1514}
1515
1516impl fidl::Persistable for SupportedFormats {}
1517
1518/// Either a standard or custom frame format.
1519#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1520pub enum DaiFrameFormat {
1521    /// The format type of all samples in the DAI, listed in `DaiFrameFormatStandard`.
1522    FrameFormatStandard(DaiFrameFormatStandard),
1523    /// The format type of all samples in the DAI, specified in `DaiFrameFormatCustom`.
1524    FrameFormatCustom(DaiFrameFormatCustom),
1525}
1526
1527impl DaiFrameFormat {
1528    #[inline]
1529    pub fn ordinal(&self) -> u64 {
1530        match *self {
1531            Self::FrameFormatStandard(_) => 1,
1532            Self::FrameFormatCustom(_) => 2,
1533        }
1534    }
1535}
1536
1537impl fidl::Persistable for DaiFrameFormat {}
1538
1539#[derive(Clone, Debug)]
1540pub enum Format2 {
1541    /// Format for linear PCM (uncompressed) samples.
1542    PcmFormat(PcmFormat),
1543    /// Format for encoded audio.
1544    Encoding(Encoding),
1545    #[doc(hidden)]
1546    __SourceBreaking { unknown_ordinal: u64 },
1547}
1548
1549/// Pattern that matches an unknown `Format2` member.
1550#[macro_export]
1551macro_rules! Format2Unknown {
1552    () => {
1553        _
1554    };
1555}
1556
1557// Custom PartialEq so that unknown variants are not equal to themselves.
1558impl PartialEq for Format2 {
1559    fn eq(&self, other: &Self) -> bool {
1560        match (self, other) {
1561            (Self::PcmFormat(x), Self::PcmFormat(y)) => *x == *y,
1562            (Self::Encoding(x), Self::Encoding(y)) => *x == *y,
1563            _ => false,
1564        }
1565    }
1566}
1567
1568impl Format2 {
1569    #[inline]
1570    pub fn ordinal(&self) -> u64 {
1571        match *self {
1572            Self::PcmFormat(_) => 1,
1573            Self::Encoding(_) => 2,
1574            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1575        }
1576    }
1577
1578    #[inline]
1579    pub fn unknown_variant_for_testing() -> Self {
1580        Self::__SourceBreaking { unknown_ordinal: 0 }
1581    }
1582
1583    #[inline]
1584    pub fn is_unknown(&self) -> bool {
1585        match self {
1586            Self::__SourceBreaking { .. } => true,
1587            _ => false,
1588        }
1589    }
1590}
1591
1592impl fidl::Persistable for Format2 {}
1593
1594/// All the possible formats supported by this device.
1595#[derive(Clone, Debug)]
1596pub enum SupportedFormats2 {
1597    /// Supported formats for linear PCM (uncompressed) samples, with attributes.
1598    PcmSupportedFormats(PcmSupportedFormats),
1599    /// Supported formats for non-LPCM encoded audio (e.g. AAC, MP3).
1600    SupportedEncodings(SupportedEncodings),
1601    #[doc(hidden)]
1602    __SourceBreaking { unknown_ordinal: u64 },
1603}
1604
1605/// Pattern that matches an unknown `SupportedFormats2` member.
1606#[macro_export]
1607macro_rules! SupportedFormats2Unknown {
1608    () => {
1609        _
1610    };
1611}
1612
1613// Custom PartialEq so that unknown variants are not equal to themselves.
1614impl PartialEq for SupportedFormats2 {
1615    fn eq(&self, other: &Self) -> bool {
1616        match (self, other) {
1617            (Self::PcmSupportedFormats(x), Self::PcmSupportedFormats(y)) => *x == *y,
1618            (Self::SupportedEncodings(x), Self::SupportedEncodings(y)) => *x == *y,
1619            _ => false,
1620        }
1621    }
1622}
1623
1624impl SupportedFormats2 {
1625    #[inline]
1626    pub fn ordinal(&self) -> u64 {
1627        match *self {
1628            Self::PcmSupportedFormats(_) => 1,
1629            Self::SupportedEncodings(_) => 2,
1630            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1631        }
1632    }
1633
1634    #[inline]
1635    pub fn unknown_variant_for_testing() -> Self {
1636        Self::__SourceBreaking { unknown_ordinal: 0 }
1637    }
1638
1639    #[inline]
1640    pub fn is_unknown(&self) -> bool {
1641        match self {
1642            Self::__SourceBreaking { .. } => true,
1643            _ => false,
1644        }
1645    }
1646}
1647
1648impl fidl::Persistable for SupportedFormats2 {}
1649
1650pub mod codec_ordinals {
1651    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1652    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1653    pub const RESET: u64 = 0x50757ae579a7bd6b;
1654    pub const GET_PROPERTIES: u64 = 0x7a0d138a6a1d9d90;
1655    pub const STOP: u64 = 0x5c2e380df1332dbd;
1656    pub const START: u64 = 0x329cdacb286ab00;
1657    pub const GET_DAI_FORMATS: u64 = 0xf8bbc46b4ba6a52;
1658    pub const SET_DAI_FORMAT: u64 = 0x2f829df9e5a7a1ea;
1659    pub const WATCH_PLUG_STATE: u64 = 0x182b87f935ca7326;
1660}
1661
1662pub mod codec_connector_ordinals {
1663    pub const CONNECT: u64 = 0x1413f551544026c9;
1664}
1665
1666pub mod composite_ordinals {
1667    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1668    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1669    pub const RESET: u64 = 0xac355fb98341996;
1670    pub const GET_PROPERTIES: u64 = 0x31846fa0a459942b;
1671    pub const GET_RING_BUFFER_FORMATS: u64 = 0x1d89b701b6816ac4;
1672    pub const CREATE_RING_BUFFER: u64 = 0x28c5685f85262033;
1673    pub const GET_DAI_FORMATS: u64 = 0x3cbeaed59c8f69b;
1674    pub const SET_DAI_FORMAT: u64 = 0x155acf5cc0dc8a84;
1675    pub const GET_PACKET_STREAM_FORMATS: u64 = 0x73cc47c6ad39bca7;
1676    pub const CREATE_PACKET_STREAM: u64 = 0x50e8902b756c707c;
1677}
1678
1679pub mod composite_connector_ordinals {
1680    pub const CONNECT: u64 = 0x7ee557529079e466;
1681}
1682
1683pub mod dai_ordinals {
1684    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1685    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1686    pub const RESET: u64 = 0x69e5fa9fa2f78c14;
1687    pub const GET_PROPERTIES: u64 = 0x2c25a1a66149510b;
1688    pub const GET_DAI_FORMATS: u64 = 0x1eb37b0cddf79d69;
1689    pub const GET_RING_BUFFER_FORMATS: u64 = 0x760371081d8c92e4;
1690    pub const CREATE_RING_BUFFER: u64 = 0x5af9760589a75257;
1691}
1692
1693pub mod dai_connector_ordinals {
1694    pub const CONNECT: u64 = 0x4e4db05c2eca1450;
1695}
1696
1697pub mod health_ordinals {
1698    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1699}
1700
1701pub mod packet_stream_control_ordinals {
1702    pub const GET_PROPERTIES: u64 = 0x586cf4f0f8d2771f;
1703    pub const ALLOCATE_VMOS: u64 = 0x7ff1473165ed344b;
1704    pub const DEALLOCATE_VMOS: u64 = 0x4db5cc85a7b8405b;
1705    pub const REGISTER_VMOS: u64 = 0x29c3b656a1020bfd;
1706    pub const UNREGISTER_VMOS: u64 = 0x3e3b4dbfe26b6094;
1707    pub const GET_PACKET_STREAM_SINK: u64 = 0x7394726463ebbc6a;
1708    pub const SET_PACKET_STREAM_SINK: u64 = 0xab88800e31dc0e4;
1709    pub const START: u64 = 0x3a584b94d8a6bfd0;
1710    pub const STOP: u64 = 0x703e4fafcdd7ef32;
1711}
1712
1713pub mod packet_stream_sink_ordinals {
1714    pub const PUT_PACKET: u64 = 0x25a8e35efba81f2b;
1715    pub const FLUSH_PACKETS: u64 = 0x13f16ca37ede8a4;
1716}
1717
1718pub mod ring_buffer_ordinals {
1719    pub const GET_PROPERTIES: u64 = 0x12947f061a8fe1;
1720    pub const WATCH_CLOCK_RECOVERY_POSITION_INFO: u64 = 0x694d5b898a4167e5;
1721    pub const GET_VMO: u64 = 0x44c8f4f5680e853a;
1722    pub const START: u64 = 0x5dd780a769a8892d;
1723    pub const STOP: u64 = 0x49a73d9cf1d4e110;
1724    pub const SET_ACTIVE_CHANNELS: u64 = 0x605464c1d384f309;
1725    pub const WATCH_DELAY_INFO: u64 = 0x6c1248db213fcf9f;
1726}
1727
1728pub mod stream_config_ordinals {
1729    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1730    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1731    pub const GET_PROPERTIES: u64 = 0x7d89c02f3e2d3c01;
1732    pub const GET_SUPPORTED_FORMATS: u64 = 0x448efa7850cafe7e;
1733    pub const CREATE_RING_BUFFER: u64 = 0x2afb19dd13faa1ba;
1734    pub const WATCH_GAIN_STATE: u64 = 0x4772506136ab65c1;
1735    pub const SET_GAIN: u64 = 0x3943b41498c6a384;
1736    pub const WATCH_PLUG_STATE: u64 = 0x497345a6f048b2a6;
1737}
1738
1739pub mod stream_config_connector_ordinals {
1740    pub const CONNECT: u64 = 0x22051ff3021eafec;
1741}
1742
1743mod internal {
1744    use super::*;
1745    unsafe impl fidl::encoding::TypeMarker for BufferType {
1746        type Owned = Self;
1747
1748        #[inline(always)]
1749        fn inline_align(_context: fidl::encoding::Context) -> usize {
1750            8
1751        }
1752
1753        #[inline(always)]
1754        fn inline_size(_context: fidl::encoding::Context) -> usize {
1755            8
1756        }
1757    }
1758
1759    impl fidl::encoding::ValueTypeMarker for BufferType {
1760        type Borrowed<'a> = Self;
1761        #[inline(always)]
1762        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1763            *value
1764        }
1765    }
1766
1767    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BufferType {
1768        #[inline]
1769        unsafe fn encode(
1770            self,
1771            encoder: &mut fidl::encoding::Encoder<'_, D>,
1772            offset: usize,
1773            _depth: fidl::encoding::Depth,
1774        ) -> fidl::Result<()> {
1775            encoder.debug_check_bounds::<Self>(offset);
1776            encoder.write_num(self.bits(), offset);
1777            Ok(())
1778        }
1779    }
1780
1781    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferType {
1782        #[inline(always)]
1783        fn new_empty() -> Self {
1784            Self::empty()
1785        }
1786
1787        #[inline]
1788        unsafe fn decode(
1789            &mut self,
1790            decoder: &mut fidl::encoding::Decoder<'_, D>,
1791            offset: usize,
1792            _depth: fidl::encoding::Depth,
1793        ) -> fidl::Result<()> {
1794            decoder.debug_check_bounds::<Self>(offset);
1795            let prim = decoder.read_num::<u64>(offset);
1796            *self = Self::from_bits_allow_unknown(prim);
1797            Ok(())
1798        }
1799    }
1800    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatStandard {
1801        type Owned = Self;
1802
1803        #[inline(always)]
1804        fn inline_align(_context: fidl::encoding::Context) -> usize {
1805            std::mem::align_of::<u8>()
1806        }
1807
1808        #[inline(always)]
1809        fn inline_size(_context: fidl::encoding::Context) -> usize {
1810            std::mem::size_of::<u8>()
1811        }
1812
1813        #[inline(always)]
1814        fn encode_is_copy() -> bool {
1815            true
1816        }
1817
1818        #[inline(always)]
1819        fn decode_is_copy() -> bool {
1820            false
1821        }
1822    }
1823
1824    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatStandard {
1825        type Borrowed<'a> = Self;
1826        #[inline(always)]
1827        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1828            *value
1829        }
1830    }
1831
1832    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1833        for DaiFrameFormatStandard
1834    {
1835        #[inline]
1836        unsafe fn encode(
1837            self,
1838            encoder: &mut fidl::encoding::Encoder<'_, D>,
1839            offset: usize,
1840            _depth: fidl::encoding::Depth,
1841        ) -> fidl::Result<()> {
1842            encoder.debug_check_bounds::<Self>(offset);
1843            encoder.write_num(self.into_primitive(), offset);
1844            Ok(())
1845        }
1846    }
1847
1848    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1849        for DaiFrameFormatStandard
1850    {
1851        #[inline(always)]
1852        fn new_empty() -> Self {
1853            Self::None
1854        }
1855
1856        #[inline]
1857        unsafe fn decode(
1858            &mut self,
1859            decoder: &mut fidl::encoding::Decoder<'_, D>,
1860            offset: usize,
1861            _depth: fidl::encoding::Depth,
1862        ) -> fidl::Result<()> {
1863            decoder.debug_check_bounds::<Self>(offset);
1864            let prim = decoder.read_num::<u8>(offset);
1865
1866            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1867            Ok(())
1868        }
1869    }
1870    unsafe impl fidl::encoding::TypeMarker for DaiSampleFormat {
1871        type Owned = Self;
1872
1873        #[inline(always)]
1874        fn inline_align(_context: fidl::encoding::Context) -> usize {
1875            std::mem::align_of::<u8>()
1876        }
1877
1878        #[inline(always)]
1879        fn inline_size(_context: fidl::encoding::Context) -> usize {
1880            std::mem::size_of::<u8>()
1881        }
1882
1883        #[inline(always)]
1884        fn encode_is_copy() -> bool {
1885            true
1886        }
1887
1888        #[inline(always)]
1889        fn decode_is_copy() -> bool {
1890            false
1891        }
1892    }
1893
1894    impl fidl::encoding::ValueTypeMarker for DaiSampleFormat {
1895        type Borrowed<'a> = Self;
1896        #[inline(always)]
1897        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1898            *value
1899        }
1900    }
1901
1902    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1903        for DaiSampleFormat
1904    {
1905        #[inline]
1906        unsafe fn encode(
1907            self,
1908            encoder: &mut fidl::encoding::Encoder<'_, D>,
1909            offset: usize,
1910            _depth: fidl::encoding::Depth,
1911        ) -> fidl::Result<()> {
1912            encoder.debug_check_bounds::<Self>(offset);
1913            encoder.write_num(self.into_primitive(), offset);
1914            Ok(())
1915        }
1916    }
1917
1918    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSampleFormat {
1919        #[inline(always)]
1920        fn new_empty() -> Self {
1921            Self::Pdm
1922        }
1923
1924        #[inline]
1925        unsafe fn decode(
1926            &mut self,
1927            decoder: &mut fidl::encoding::Decoder<'_, D>,
1928            offset: usize,
1929            _depth: fidl::encoding::Depth,
1930        ) -> fidl::Result<()> {
1931            decoder.debug_check_bounds::<Self>(offset);
1932            let prim = decoder.read_num::<u8>(offset);
1933
1934            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1935            Ok(())
1936        }
1937    }
1938    unsafe impl fidl::encoding::TypeMarker for DeviceType {
1939        type Owned = Self;
1940
1941        #[inline(always)]
1942        fn inline_align(_context: fidl::encoding::Context) -> usize {
1943            std::mem::align_of::<u32>()
1944        }
1945
1946        #[inline(always)]
1947        fn inline_size(_context: fidl::encoding::Context) -> usize {
1948            std::mem::size_of::<u32>()
1949        }
1950
1951        #[inline(always)]
1952        fn encode_is_copy() -> bool {
1953            false
1954        }
1955
1956        #[inline(always)]
1957        fn decode_is_copy() -> bool {
1958            false
1959        }
1960    }
1961
1962    impl fidl::encoding::ValueTypeMarker for DeviceType {
1963        type Borrowed<'a> = Self;
1964        #[inline(always)]
1965        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1966            *value
1967        }
1968    }
1969
1970    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
1971        #[inline]
1972        unsafe fn encode(
1973            self,
1974            encoder: &mut fidl::encoding::Encoder<'_, D>,
1975            offset: usize,
1976            _depth: fidl::encoding::Depth,
1977        ) -> fidl::Result<()> {
1978            encoder.debug_check_bounds::<Self>(offset);
1979            encoder.write_num(self.into_primitive(), offset);
1980            Ok(())
1981        }
1982    }
1983
1984    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
1985        #[inline(always)]
1986        fn new_empty() -> Self {
1987            Self::unknown()
1988        }
1989
1990        #[inline]
1991        unsafe fn decode(
1992            &mut self,
1993            decoder: &mut fidl::encoding::Decoder<'_, D>,
1994            offset: usize,
1995            _depth: fidl::encoding::Depth,
1996        ) -> fidl::Result<()> {
1997            decoder.debug_check_bounds::<Self>(offset);
1998            let prim = decoder.read_num::<u32>(offset);
1999
2000            *self = Self::from_primitive_allow_unknown(prim);
2001            Ok(())
2002        }
2003    }
2004    unsafe impl fidl::encoding::TypeMarker for DriverError {
2005        type Owned = Self;
2006
2007        #[inline(always)]
2008        fn inline_align(_context: fidl::encoding::Context) -> usize {
2009            std::mem::align_of::<u32>()
2010        }
2011
2012        #[inline(always)]
2013        fn inline_size(_context: fidl::encoding::Context) -> usize {
2014            std::mem::size_of::<u32>()
2015        }
2016
2017        #[inline(always)]
2018        fn encode_is_copy() -> bool {
2019            false
2020        }
2021
2022        #[inline(always)]
2023        fn decode_is_copy() -> bool {
2024            false
2025        }
2026    }
2027
2028    impl fidl::encoding::ValueTypeMarker for DriverError {
2029        type Borrowed<'a> = Self;
2030        #[inline(always)]
2031        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2032            *value
2033        }
2034    }
2035
2036    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DriverError {
2037        #[inline]
2038        unsafe fn encode(
2039            self,
2040            encoder: &mut fidl::encoding::Encoder<'_, D>,
2041            offset: usize,
2042            _depth: fidl::encoding::Depth,
2043        ) -> fidl::Result<()> {
2044            encoder.debug_check_bounds::<Self>(offset);
2045            encoder.write_num(self.into_primitive(), offset);
2046            Ok(())
2047        }
2048    }
2049
2050    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverError {
2051        #[inline(always)]
2052        fn new_empty() -> Self {
2053            Self::unknown()
2054        }
2055
2056        #[inline]
2057        unsafe fn decode(
2058            &mut self,
2059            decoder: &mut fidl::encoding::Decoder<'_, D>,
2060            offset: usize,
2061            _depth: fidl::encoding::Depth,
2062        ) -> fidl::Result<()> {
2063            decoder.debug_check_bounds::<Self>(offset);
2064            let prim = decoder.read_num::<u32>(offset);
2065
2066            *self = Self::from_primitive_allow_unknown(prim);
2067            Ok(())
2068        }
2069    }
2070    unsafe impl fidl::encoding::TypeMarker for EncodingType {
2071        type Owned = Self;
2072
2073        #[inline(always)]
2074        fn inline_align(_context: fidl::encoding::Context) -> usize {
2075            std::mem::align_of::<u32>()
2076        }
2077
2078        #[inline(always)]
2079        fn inline_size(_context: fidl::encoding::Context) -> usize {
2080            std::mem::size_of::<u32>()
2081        }
2082
2083        #[inline(always)]
2084        fn encode_is_copy() -> bool {
2085            false
2086        }
2087
2088        #[inline(always)]
2089        fn decode_is_copy() -> bool {
2090            false
2091        }
2092    }
2093
2094    impl fidl::encoding::ValueTypeMarker for EncodingType {
2095        type Borrowed<'a> = Self;
2096        #[inline(always)]
2097        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2098            *value
2099        }
2100    }
2101
2102    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EncodingType {
2103        #[inline]
2104        unsafe fn encode(
2105            self,
2106            encoder: &mut fidl::encoding::Encoder<'_, D>,
2107            offset: usize,
2108            _depth: fidl::encoding::Depth,
2109        ) -> fidl::Result<()> {
2110            encoder.debug_check_bounds::<Self>(offset);
2111            encoder.write_num(self.into_primitive(), offset);
2112            Ok(())
2113        }
2114    }
2115
2116    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncodingType {
2117        #[inline(always)]
2118        fn new_empty() -> Self {
2119            Self::unknown()
2120        }
2121
2122        #[inline]
2123        unsafe fn decode(
2124            &mut self,
2125            decoder: &mut fidl::encoding::Decoder<'_, D>,
2126            offset: usize,
2127            _depth: fidl::encoding::Depth,
2128        ) -> fidl::Result<()> {
2129            decoder.debug_check_bounds::<Self>(offset);
2130            let prim = decoder.read_num::<u32>(offset);
2131
2132            *self = Self::from_primitive_allow_unknown(prim);
2133            Ok(())
2134        }
2135    }
2136    unsafe impl fidl::encoding::TypeMarker for GetVmoError {
2137        type Owned = Self;
2138
2139        #[inline(always)]
2140        fn inline_align(_context: fidl::encoding::Context) -> usize {
2141            std::mem::align_of::<u32>()
2142        }
2143
2144        #[inline(always)]
2145        fn inline_size(_context: fidl::encoding::Context) -> usize {
2146            std::mem::size_of::<u32>()
2147        }
2148
2149        #[inline(always)]
2150        fn encode_is_copy() -> bool {
2151            true
2152        }
2153
2154        #[inline(always)]
2155        fn decode_is_copy() -> bool {
2156            false
2157        }
2158    }
2159
2160    impl fidl::encoding::ValueTypeMarker for GetVmoError {
2161        type Borrowed<'a> = Self;
2162        #[inline(always)]
2163        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2164            *value
2165        }
2166    }
2167
2168    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GetVmoError {
2169        #[inline]
2170        unsafe fn encode(
2171            self,
2172            encoder: &mut fidl::encoding::Encoder<'_, D>,
2173            offset: usize,
2174            _depth: fidl::encoding::Depth,
2175        ) -> fidl::Result<()> {
2176            encoder.debug_check_bounds::<Self>(offset);
2177            encoder.write_num(self.into_primitive(), offset);
2178            Ok(())
2179        }
2180    }
2181
2182    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetVmoError {
2183        #[inline(always)]
2184        fn new_empty() -> Self {
2185            Self::InvalidArgs
2186        }
2187
2188        #[inline]
2189        unsafe fn decode(
2190            &mut self,
2191            decoder: &mut fidl::encoding::Decoder<'_, D>,
2192            offset: usize,
2193            _depth: fidl::encoding::Depth,
2194        ) -> fidl::Result<()> {
2195            decoder.debug_check_bounds::<Self>(offset);
2196            let prim = decoder.read_num::<u32>(offset);
2197
2198            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2199            Ok(())
2200        }
2201    }
2202    unsafe impl fidl::encoding::TypeMarker for PlugDetectCapabilities {
2203        type Owned = Self;
2204
2205        #[inline(always)]
2206        fn inline_align(_context: fidl::encoding::Context) -> usize {
2207            std::mem::align_of::<u32>()
2208        }
2209
2210        #[inline(always)]
2211        fn inline_size(_context: fidl::encoding::Context) -> usize {
2212            std::mem::size_of::<u32>()
2213        }
2214
2215        #[inline(always)]
2216        fn encode_is_copy() -> bool {
2217            true
2218        }
2219
2220        #[inline(always)]
2221        fn decode_is_copy() -> bool {
2222            false
2223        }
2224    }
2225
2226    impl fidl::encoding::ValueTypeMarker for PlugDetectCapabilities {
2227        type Borrowed<'a> = Self;
2228        #[inline(always)]
2229        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2230            *value
2231        }
2232    }
2233
2234    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2235        for PlugDetectCapabilities
2236    {
2237        #[inline]
2238        unsafe fn encode(
2239            self,
2240            encoder: &mut fidl::encoding::Encoder<'_, D>,
2241            offset: usize,
2242            _depth: fidl::encoding::Depth,
2243        ) -> fidl::Result<()> {
2244            encoder.debug_check_bounds::<Self>(offset);
2245            encoder.write_num(self.into_primitive(), offset);
2246            Ok(())
2247        }
2248    }
2249
2250    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2251        for PlugDetectCapabilities
2252    {
2253        #[inline(always)]
2254        fn new_empty() -> Self {
2255            Self::Hardwired
2256        }
2257
2258        #[inline]
2259        unsafe fn decode(
2260            &mut self,
2261            decoder: &mut fidl::encoding::Decoder<'_, D>,
2262            offset: usize,
2263            _depth: fidl::encoding::Depth,
2264        ) -> fidl::Result<()> {
2265            decoder.debug_check_bounds::<Self>(offset);
2266            let prim = decoder.read_num::<u32>(offset);
2267
2268            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2269            Ok(())
2270        }
2271    }
2272    unsafe impl fidl::encoding::TypeMarker for SampleFormat {
2273        type Owned = Self;
2274
2275        #[inline(always)]
2276        fn inline_align(_context: fidl::encoding::Context) -> usize {
2277            std::mem::align_of::<u8>()
2278        }
2279
2280        #[inline(always)]
2281        fn inline_size(_context: fidl::encoding::Context) -> usize {
2282            std::mem::size_of::<u8>()
2283        }
2284
2285        #[inline(always)]
2286        fn encode_is_copy() -> bool {
2287            true
2288        }
2289
2290        #[inline(always)]
2291        fn decode_is_copy() -> bool {
2292            false
2293        }
2294    }
2295
2296    impl fidl::encoding::ValueTypeMarker for SampleFormat {
2297        type Borrowed<'a> = Self;
2298        #[inline(always)]
2299        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2300            *value
2301        }
2302    }
2303
2304    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleFormat {
2305        #[inline]
2306        unsafe fn encode(
2307            self,
2308            encoder: &mut fidl::encoding::Encoder<'_, D>,
2309            offset: usize,
2310            _depth: fidl::encoding::Depth,
2311        ) -> fidl::Result<()> {
2312            encoder.debug_check_bounds::<Self>(offset);
2313            encoder.write_num(self.into_primitive(), offset);
2314            Ok(())
2315        }
2316    }
2317
2318    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleFormat {
2319        #[inline(always)]
2320        fn new_empty() -> Self {
2321            Self::PcmSigned
2322        }
2323
2324        #[inline]
2325        unsafe fn decode(
2326            &mut self,
2327            decoder: &mut fidl::encoding::Decoder<'_, D>,
2328            offset: usize,
2329            _depth: fidl::encoding::Depth,
2330        ) -> fidl::Result<()> {
2331            decoder.debug_check_bounds::<Self>(offset);
2332            let prim = decoder.read_num::<u8>(offset);
2333
2334            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2335            Ok(())
2336        }
2337    }
2338    unsafe impl fidl::encoding::TypeMarker for SingularUniqueId {
2339        type Owned = Self;
2340
2341        #[inline(always)]
2342        fn inline_align(_context: fidl::encoding::Context) -> usize {
2343            std::mem::align_of::<u8>()
2344        }
2345
2346        #[inline(always)]
2347        fn inline_size(_context: fidl::encoding::Context) -> usize {
2348            std::mem::size_of::<u8>()
2349        }
2350
2351        #[inline(always)]
2352        fn encode_is_copy() -> bool {
2353            false
2354        }
2355
2356        #[inline(always)]
2357        fn decode_is_copy() -> bool {
2358            false
2359        }
2360    }
2361
2362    impl fidl::encoding::ValueTypeMarker for SingularUniqueId {
2363        type Borrowed<'a> = Self;
2364        #[inline(always)]
2365        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2366            *value
2367        }
2368    }
2369
2370    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2371        for SingularUniqueId
2372    {
2373        #[inline]
2374        unsafe fn encode(
2375            self,
2376            encoder: &mut fidl::encoding::Encoder<'_, D>,
2377            offset: usize,
2378            _depth: fidl::encoding::Depth,
2379        ) -> fidl::Result<()> {
2380            encoder.debug_check_bounds::<Self>(offset);
2381            encoder.write_num(self.into_primitive(), offset);
2382            Ok(())
2383        }
2384    }
2385
2386    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SingularUniqueId {
2387        #[inline(always)]
2388        fn new_empty() -> Self {
2389            Self::unknown()
2390        }
2391
2392        #[inline]
2393        unsafe fn decode(
2394            &mut self,
2395            decoder: &mut fidl::encoding::Decoder<'_, D>,
2396            offset: usize,
2397            _depth: fidl::encoding::Depth,
2398        ) -> fidl::Result<()> {
2399            decoder.debug_check_bounds::<Self>(offset);
2400            let prim = decoder.read_num::<u8>(offset);
2401
2402            *self = Self::from_primitive_allow_unknown(prim);
2403            Ok(())
2404        }
2405    }
2406
2407    impl fidl::encoding::ValueTypeMarker for CodecGetPropertiesResponse {
2408        type Borrowed<'a> = &'a Self;
2409        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2410            value
2411        }
2412    }
2413
2414    unsafe impl fidl::encoding::TypeMarker for CodecGetPropertiesResponse {
2415        type Owned = Self;
2416
2417        #[inline(always)]
2418        fn inline_align(_context: fidl::encoding::Context) -> usize {
2419            8
2420        }
2421
2422        #[inline(always)]
2423        fn inline_size(_context: fidl::encoding::Context) -> usize {
2424            16
2425        }
2426    }
2427
2428    unsafe impl<D: fidl::encoding::ResourceDialect>
2429        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for &CodecGetPropertiesResponse
2430    {
2431        #[inline]
2432        unsafe fn encode(
2433            self,
2434            encoder: &mut fidl::encoding::Encoder<'_, D>,
2435            offset: usize,
2436            _depth: fidl::encoding::Depth,
2437        ) -> fidl::Result<()> {
2438            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2439            // Delegate to tuple encoding.
2440            fidl::encoding::Encode::<CodecGetPropertiesResponse, D>::encode(
2441                (<CodecProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
2442                encoder,
2443                offset,
2444                _depth,
2445            )
2446        }
2447    }
2448    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecProperties, D>>
2449        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for (T0,)
2450    {
2451        #[inline]
2452        unsafe fn encode(
2453            self,
2454            encoder: &mut fidl::encoding::Encoder<'_, D>,
2455            offset: usize,
2456            depth: fidl::encoding::Depth,
2457        ) -> fidl::Result<()> {
2458            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2459            // Zero out padding regions. There's no need to apply masks
2460            // because the unmasked parts will be overwritten by fields.
2461            // Write the fields.
2462            self.0.encode(encoder, offset + 0, depth)?;
2463            Ok(())
2464        }
2465    }
2466
2467    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2468        for CodecGetPropertiesResponse
2469    {
2470        #[inline(always)]
2471        fn new_empty() -> Self {
2472            Self { properties: fidl::new_empty!(CodecProperties, D) }
2473        }
2474
2475        #[inline]
2476        unsafe fn decode(
2477            &mut self,
2478            decoder: &mut fidl::encoding::Decoder<'_, D>,
2479            offset: usize,
2480            _depth: fidl::encoding::Depth,
2481        ) -> fidl::Result<()> {
2482            decoder.debug_check_bounds::<Self>(offset);
2483            // Verify that padding bytes are zero.
2484            fidl::decode!(CodecProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
2485            Ok(())
2486        }
2487    }
2488
2489    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatRequest {
2490        type Borrowed<'a> = &'a Self;
2491        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2492            value
2493        }
2494    }
2495
2496    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatRequest {
2497        type Owned = Self;
2498
2499        #[inline(always)]
2500        fn inline_align(_context: fidl::encoding::Context) -> usize {
2501            8
2502        }
2503
2504        #[inline(always)]
2505        fn inline_size(_context: fidl::encoding::Context) -> usize {
2506            48
2507        }
2508    }
2509
2510    unsafe impl<D: fidl::encoding::ResourceDialect>
2511        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for &CodecSetDaiFormatRequest
2512    {
2513        #[inline]
2514        unsafe fn encode(
2515            self,
2516            encoder: &mut fidl::encoding::Encoder<'_, D>,
2517            offset: usize,
2518            _depth: fidl::encoding::Depth,
2519        ) -> fidl::Result<()> {
2520            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2521            // Delegate to tuple encoding.
2522            fidl::encoding::Encode::<CodecSetDaiFormatRequest, D>::encode(
2523                (<DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),),
2524                encoder,
2525                offset,
2526                _depth,
2527            )
2528        }
2529    }
2530    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiFormat, D>>
2531        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for (T0,)
2532    {
2533        #[inline]
2534        unsafe fn encode(
2535            self,
2536            encoder: &mut fidl::encoding::Encoder<'_, D>,
2537            offset: usize,
2538            depth: fidl::encoding::Depth,
2539        ) -> fidl::Result<()> {
2540            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2541            // Zero out padding regions. There's no need to apply masks
2542            // because the unmasked parts will be overwritten by fields.
2543            // Write the fields.
2544            self.0.encode(encoder, offset + 0, depth)?;
2545            Ok(())
2546        }
2547    }
2548
2549    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2550        for CodecSetDaiFormatRequest
2551    {
2552        #[inline(always)]
2553        fn new_empty() -> Self {
2554            Self { format: fidl::new_empty!(DaiFormat, D) }
2555        }
2556
2557        #[inline]
2558        unsafe fn decode(
2559            &mut self,
2560            decoder: &mut fidl::encoding::Decoder<'_, D>,
2561            offset: usize,
2562            _depth: fidl::encoding::Depth,
2563        ) -> fidl::Result<()> {
2564            decoder.debug_check_bounds::<Self>(offset);
2565            // Verify that padding bytes are zero.
2566            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 0, _depth)?;
2567            Ok(())
2568        }
2569    }
2570
2571    impl fidl::encoding::ValueTypeMarker for CodecStartResponse {
2572        type Borrowed<'a> = &'a Self;
2573        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2574            value
2575        }
2576    }
2577
2578    unsafe impl fidl::encoding::TypeMarker for CodecStartResponse {
2579        type Owned = Self;
2580
2581        #[inline(always)]
2582        fn inline_align(_context: fidl::encoding::Context) -> usize {
2583            8
2584        }
2585
2586        #[inline(always)]
2587        fn inline_size(_context: fidl::encoding::Context) -> usize {
2588            8
2589        }
2590        #[inline(always)]
2591        fn encode_is_copy() -> bool {
2592            true
2593        }
2594
2595        #[inline(always)]
2596        fn decode_is_copy() -> bool {
2597            true
2598        }
2599    }
2600
2601    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStartResponse, D>
2602        for &CodecStartResponse
2603    {
2604        #[inline]
2605        unsafe fn encode(
2606            self,
2607            encoder: &mut fidl::encoding::Encoder<'_, D>,
2608            offset: usize,
2609            _depth: fidl::encoding::Depth,
2610        ) -> fidl::Result<()> {
2611            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2612            unsafe {
2613                // Copy the object into the buffer.
2614                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2615                (buf_ptr as *mut CodecStartResponse)
2616                    .write_unaligned((self as *const CodecStartResponse).read());
2617                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2618                // done second because the memcpy will write garbage to these bytes.
2619            }
2620            Ok(())
2621        }
2622    }
2623    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2624        fidl::encoding::Encode<CodecStartResponse, D> for (T0,)
2625    {
2626        #[inline]
2627        unsafe fn encode(
2628            self,
2629            encoder: &mut fidl::encoding::Encoder<'_, D>,
2630            offset: usize,
2631            depth: fidl::encoding::Depth,
2632        ) -> fidl::Result<()> {
2633            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2634            // Zero out padding regions. There's no need to apply masks
2635            // because the unmasked parts will be overwritten by fields.
2636            // Write the fields.
2637            self.0.encode(encoder, offset + 0, depth)?;
2638            Ok(())
2639        }
2640    }
2641
2642    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStartResponse {
2643        #[inline(always)]
2644        fn new_empty() -> Self {
2645            Self { start_time: fidl::new_empty!(i64, D) }
2646        }
2647
2648        #[inline]
2649        unsafe fn decode(
2650            &mut self,
2651            decoder: &mut fidl::encoding::Decoder<'_, D>,
2652            offset: usize,
2653            _depth: fidl::encoding::Depth,
2654        ) -> fidl::Result<()> {
2655            decoder.debug_check_bounds::<Self>(offset);
2656            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2657            // Verify that padding bytes are zero.
2658            // Copy from the buffer into the object.
2659            unsafe {
2660                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2661            }
2662            Ok(())
2663        }
2664    }
2665
2666    impl fidl::encoding::ValueTypeMarker for CodecStopResponse {
2667        type Borrowed<'a> = &'a Self;
2668        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2669            value
2670        }
2671    }
2672
2673    unsafe impl fidl::encoding::TypeMarker for CodecStopResponse {
2674        type Owned = Self;
2675
2676        #[inline(always)]
2677        fn inline_align(_context: fidl::encoding::Context) -> usize {
2678            8
2679        }
2680
2681        #[inline(always)]
2682        fn inline_size(_context: fidl::encoding::Context) -> usize {
2683            8
2684        }
2685        #[inline(always)]
2686        fn encode_is_copy() -> bool {
2687            true
2688        }
2689
2690        #[inline(always)]
2691        fn decode_is_copy() -> bool {
2692            true
2693        }
2694    }
2695
2696    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStopResponse, D>
2697        for &CodecStopResponse
2698    {
2699        #[inline]
2700        unsafe fn encode(
2701            self,
2702            encoder: &mut fidl::encoding::Encoder<'_, D>,
2703            offset: usize,
2704            _depth: fidl::encoding::Depth,
2705        ) -> fidl::Result<()> {
2706            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2707            unsafe {
2708                // Copy the object into the buffer.
2709                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2710                (buf_ptr as *mut CodecStopResponse)
2711                    .write_unaligned((self as *const CodecStopResponse).read());
2712                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2713                // done second because the memcpy will write garbage to these bytes.
2714            }
2715            Ok(())
2716        }
2717    }
2718    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2719        fidl::encoding::Encode<CodecStopResponse, D> for (T0,)
2720    {
2721        #[inline]
2722        unsafe fn encode(
2723            self,
2724            encoder: &mut fidl::encoding::Encoder<'_, D>,
2725            offset: usize,
2726            depth: fidl::encoding::Depth,
2727        ) -> fidl::Result<()> {
2728            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2729            // Zero out padding regions. There's no need to apply masks
2730            // because the unmasked parts will be overwritten by fields.
2731            // Write the fields.
2732            self.0.encode(encoder, offset + 0, depth)?;
2733            Ok(())
2734        }
2735    }
2736
2737    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStopResponse {
2738        #[inline(always)]
2739        fn new_empty() -> Self {
2740            Self { stop_time: fidl::new_empty!(i64, D) }
2741        }
2742
2743        #[inline]
2744        unsafe fn decode(
2745            &mut self,
2746            decoder: &mut fidl::encoding::Decoder<'_, D>,
2747            offset: usize,
2748            _depth: fidl::encoding::Depth,
2749        ) -> fidl::Result<()> {
2750            decoder.debug_check_bounds::<Self>(offset);
2751            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2752            // Verify that padding bytes are zero.
2753            // Copy from the buffer into the object.
2754            unsafe {
2755                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2756            }
2757            Ok(())
2758        }
2759    }
2760
2761    impl fidl::encoding::ValueTypeMarker for CodecWatchPlugStateResponse {
2762        type Borrowed<'a> = &'a Self;
2763        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2764            value
2765        }
2766    }
2767
2768    unsafe impl fidl::encoding::TypeMarker for CodecWatchPlugStateResponse {
2769        type Owned = Self;
2770
2771        #[inline(always)]
2772        fn inline_align(_context: fidl::encoding::Context) -> usize {
2773            8
2774        }
2775
2776        #[inline(always)]
2777        fn inline_size(_context: fidl::encoding::Context) -> usize {
2778            16
2779        }
2780    }
2781
2782    unsafe impl<D: fidl::encoding::ResourceDialect>
2783        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for &CodecWatchPlugStateResponse
2784    {
2785        #[inline]
2786        unsafe fn encode(
2787            self,
2788            encoder: &mut fidl::encoding::Encoder<'_, D>,
2789            offset: usize,
2790            _depth: fidl::encoding::Depth,
2791        ) -> fidl::Result<()> {
2792            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2793            // Delegate to tuple encoding.
2794            fidl::encoding::Encode::<CodecWatchPlugStateResponse, D>::encode(
2795                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
2796                encoder,
2797                offset,
2798                _depth,
2799            )
2800        }
2801    }
2802    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
2803        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for (T0,)
2804    {
2805        #[inline]
2806        unsafe fn encode(
2807            self,
2808            encoder: &mut fidl::encoding::Encoder<'_, D>,
2809            offset: usize,
2810            depth: fidl::encoding::Depth,
2811        ) -> fidl::Result<()> {
2812            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2813            // Zero out padding regions. There's no need to apply masks
2814            // because the unmasked parts will be overwritten by fields.
2815            // Write the fields.
2816            self.0.encode(encoder, offset + 0, depth)?;
2817            Ok(())
2818        }
2819    }
2820
2821    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2822        for CodecWatchPlugStateResponse
2823    {
2824        #[inline(always)]
2825        fn new_empty() -> Self {
2826            Self { plug_state: fidl::new_empty!(PlugState, D) }
2827        }
2828
2829        #[inline]
2830        unsafe fn decode(
2831            &mut self,
2832            decoder: &mut fidl::encoding::Decoder<'_, D>,
2833            offset: usize,
2834            _depth: fidl::encoding::Depth,
2835        ) -> fidl::Result<()> {
2836            decoder.debug_check_bounds::<Self>(offset);
2837            // Verify that padding bytes are zero.
2838            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
2839            Ok(())
2840        }
2841    }
2842
2843    impl fidl::encoding::ValueTypeMarker for CodecGetDaiFormatsResponse {
2844        type Borrowed<'a> = &'a Self;
2845        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2846            value
2847        }
2848    }
2849
2850    unsafe impl fidl::encoding::TypeMarker for CodecGetDaiFormatsResponse {
2851        type Owned = Self;
2852
2853        #[inline(always)]
2854        fn inline_align(_context: fidl::encoding::Context) -> usize {
2855            8
2856        }
2857
2858        #[inline(always)]
2859        fn inline_size(_context: fidl::encoding::Context) -> usize {
2860            16
2861        }
2862    }
2863
2864    unsafe impl<D: fidl::encoding::ResourceDialect>
2865        fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for &CodecGetDaiFormatsResponse
2866    {
2867        #[inline]
2868        unsafe fn encode(
2869            self,
2870            encoder: &mut fidl::encoding::Encoder<'_, D>,
2871            offset: usize,
2872            _depth: fidl::encoding::Depth,
2873        ) -> fidl::Result<()> {
2874            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2875            // Delegate to tuple encoding.
2876            fidl::encoding::Encode::<CodecGetDaiFormatsResponse, D>::encode(
2877                (
2878                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.formats),
2879                ),
2880                encoder, offset, _depth
2881            )
2882        }
2883    }
2884    unsafe impl<
2885        D: fidl::encoding::ResourceDialect,
2886        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2887    > fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for (T0,)
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::<CodecGetDaiFormatsResponse>(offset);
2897            // Zero out padding regions. There's no need to apply masks
2898            // because the unmasked parts will be overwritten by fields.
2899            // Write the fields.
2900            self.0.encode(encoder, offset + 0, depth)?;
2901            Ok(())
2902        }
2903    }
2904
2905    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2906        for CodecGetDaiFormatsResponse
2907    {
2908        #[inline(always)]
2909        fn new_empty() -> Self {
2910            Self { formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D) }
2911        }
2912
2913        #[inline]
2914        unsafe fn decode(
2915            &mut self,
2916            decoder: &mut fidl::encoding::Decoder<'_, D>,
2917            offset: usize,
2918            _depth: fidl::encoding::Depth,
2919        ) -> fidl::Result<()> {
2920            decoder.debug_check_bounds::<Self>(offset);
2921            // Verify that padding bytes are zero.
2922            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.formats, decoder, offset + 0, _depth)?;
2923            Ok(())
2924        }
2925    }
2926
2927    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatResponse {
2928        type Borrowed<'a> = &'a Self;
2929        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2930            value
2931        }
2932    }
2933
2934    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatResponse {
2935        type Owned = Self;
2936
2937        #[inline(always)]
2938        fn inline_align(_context: fidl::encoding::Context) -> usize {
2939            8
2940        }
2941
2942        #[inline(always)]
2943        fn inline_size(_context: fidl::encoding::Context) -> usize {
2944            16
2945        }
2946    }
2947
2948    unsafe impl<D: fidl::encoding::ResourceDialect>
2949        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for &CodecSetDaiFormatResponse
2950    {
2951        #[inline]
2952        unsafe fn encode(
2953            self,
2954            encoder: &mut fidl::encoding::Encoder<'_, D>,
2955            offset: usize,
2956            _depth: fidl::encoding::Depth,
2957        ) -> fidl::Result<()> {
2958            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2959            // Delegate to tuple encoding.
2960            fidl::encoding::Encode::<CodecSetDaiFormatResponse, D>::encode(
2961                (<CodecFormatInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
2962                encoder,
2963                offset,
2964                _depth,
2965            )
2966        }
2967    }
2968    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecFormatInfo, D>>
2969        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for (T0,)
2970    {
2971        #[inline]
2972        unsafe fn encode(
2973            self,
2974            encoder: &mut fidl::encoding::Encoder<'_, D>,
2975            offset: usize,
2976            depth: fidl::encoding::Depth,
2977        ) -> fidl::Result<()> {
2978            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2979            // Zero out padding regions. There's no need to apply masks
2980            // because the unmasked parts will be overwritten by fields.
2981            // Write the fields.
2982            self.0.encode(encoder, offset + 0, depth)?;
2983            Ok(())
2984        }
2985    }
2986
2987    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2988        for CodecSetDaiFormatResponse
2989    {
2990        #[inline(always)]
2991        fn new_empty() -> Self {
2992            Self { state: fidl::new_empty!(CodecFormatInfo, D) }
2993        }
2994
2995        #[inline]
2996        unsafe fn decode(
2997            &mut self,
2998            decoder: &mut fidl::encoding::Decoder<'_, D>,
2999            offset: usize,
3000            _depth: fidl::encoding::Depth,
3001        ) -> fidl::Result<()> {
3002            decoder.debug_check_bounds::<Self>(offset);
3003            // Verify that padding bytes are zero.
3004            fidl::decode!(CodecFormatInfo, D, &mut self.state, decoder, offset + 0, _depth)?;
3005            Ok(())
3006        }
3007    }
3008
3009    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsRequest {
3010        type Borrowed<'a> = &'a Self;
3011        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3012            value
3013        }
3014    }
3015
3016    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsRequest {
3017        type Owned = Self;
3018
3019        #[inline(always)]
3020        fn inline_align(_context: fidl::encoding::Context) -> usize {
3021            8
3022        }
3023
3024        #[inline(always)]
3025        fn inline_size(_context: fidl::encoding::Context) -> usize {
3026            8
3027        }
3028        #[inline(always)]
3029        fn encode_is_copy() -> bool {
3030            true
3031        }
3032
3033        #[inline(always)]
3034        fn decode_is_copy() -> bool {
3035            true
3036        }
3037    }
3038
3039    unsafe impl<D: fidl::encoding::ResourceDialect>
3040        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D>
3041        for &CompositeGetDaiFormatsRequest
3042    {
3043        #[inline]
3044        unsafe fn encode(
3045            self,
3046            encoder: &mut fidl::encoding::Encoder<'_, D>,
3047            offset: usize,
3048            _depth: fidl::encoding::Depth,
3049        ) -> fidl::Result<()> {
3050            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3051            unsafe {
3052                // Copy the object into the buffer.
3053                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3054                (buf_ptr as *mut CompositeGetDaiFormatsRequest)
3055                    .write_unaligned((self as *const CompositeGetDaiFormatsRequest).read());
3056                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3057                // done second because the memcpy will write garbage to these bytes.
3058            }
3059            Ok(())
3060        }
3061    }
3062    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3063        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D> for (T0,)
3064    {
3065        #[inline]
3066        unsafe fn encode(
3067            self,
3068            encoder: &mut fidl::encoding::Encoder<'_, D>,
3069            offset: usize,
3070            depth: fidl::encoding::Depth,
3071        ) -> fidl::Result<()> {
3072            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3073            // Zero out padding regions. There's no need to apply masks
3074            // because the unmasked parts will be overwritten by fields.
3075            // Write the fields.
3076            self.0.encode(encoder, offset + 0, depth)?;
3077            Ok(())
3078        }
3079    }
3080
3081    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3082        for CompositeGetDaiFormatsRequest
3083    {
3084        #[inline(always)]
3085        fn new_empty() -> Self {
3086            Self { processing_element_id: fidl::new_empty!(u64, D) }
3087        }
3088
3089        #[inline]
3090        unsafe fn decode(
3091            &mut self,
3092            decoder: &mut fidl::encoding::Decoder<'_, D>,
3093            offset: usize,
3094            _depth: fidl::encoding::Depth,
3095        ) -> fidl::Result<()> {
3096            decoder.debug_check_bounds::<Self>(offset);
3097            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3098            // Verify that padding bytes are zero.
3099            // Copy from the buffer into the object.
3100            unsafe {
3101                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3102            }
3103            Ok(())
3104        }
3105    }
3106
3107    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsRequest {
3108        type Borrowed<'a> = &'a Self;
3109        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3110            value
3111        }
3112    }
3113
3114    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsRequest {
3115        type Owned = Self;
3116
3117        #[inline(always)]
3118        fn inline_align(_context: fidl::encoding::Context) -> usize {
3119            8
3120        }
3121
3122        #[inline(always)]
3123        fn inline_size(_context: fidl::encoding::Context) -> usize {
3124            8
3125        }
3126        #[inline(always)]
3127        fn encode_is_copy() -> bool {
3128            true
3129        }
3130
3131        #[inline(always)]
3132        fn decode_is_copy() -> bool {
3133            true
3134        }
3135    }
3136
3137    unsafe impl<D: fidl::encoding::ResourceDialect>
3138        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D>
3139        for &CompositeGetPacketStreamFormatsRequest
3140    {
3141        #[inline]
3142        unsafe fn encode(
3143            self,
3144            encoder: &mut fidl::encoding::Encoder<'_, D>,
3145            offset: usize,
3146            _depth: fidl::encoding::Depth,
3147        ) -> fidl::Result<()> {
3148            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3149            unsafe {
3150                // Copy the object into the buffer.
3151                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3152                (buf_ptr as *mut CompositeGetPacketStreamFormatsRequest).write_unaligned(
3153                    (self as *const CompositeGetPacketStreamFormatsRequest).read(),
3154                );
3155                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3156                // done second because the memcpy will write garbage to these bytes.
3157            }
3158            Ok(())
3159        }
3160    }
3161    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3162        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D> for (T0,)
3163    {
3164        #[inline]
3165        unsafe fn encode(
3166            self,
3167            encoder: &mut fidl::encoding::Encoder<'_, D>,
3168            offset: usize,
3169            depth: fidl::encoding::Depth,
3170        ) -> fidl::Result<()> {
3171            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3172            // Zero out padding regions. There's no need to apply masks
3173            // because the unmasked parts will be overwritten by fields.
3174            // Write the fields.
3175            self.0.encode(encoder, offset + 0, depth)?;
3176            Ok(())
3177        }
3178    }
3179
3180    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3181        for CompositeGetPacketStreamFormatsRequest
3182    {
3183        #[inline(always)]
3184        fn new_empty() -> Self {
3185            Self { processing_element_id: fidl::new_empty!(u64, D) }
3186        }
3187
3188        #[inline]
3189        unsafe fn decode(
3190            &mut self,
3191            decoder: &mut fidl::encoding::Decoder<'_, D>,
3192            offset: usize,
3193            _depth: fidl::encoding::Depth,
3194        ) -> fidl::Result<()> {
3195            decoder.debug_check_bounds::<Self>(offset);
3196            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3197            // Verify that padding bytes are zero.
3198            // Copy from the buffer into the object.
3199            unsafe {
3200                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3201            }
3202            Ok(())
3203        }
3204    }
3205
3206    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsRequest {
3207        type Borrowed<'a> = &'a Self;
3208        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3209            value
3210        }
3211    }
3212
3213    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsRequest {
3214        type Owned = Self;
3215
3216        #[inline(always)]
3217        fn inline_align(_context: fidl::encoding::Context) -> usize {
3218            8
3219        }
3220
3221        #[inline(always)]
3222        fn inline_size(_context: fidl::encoding::Context) -> usize {
3223            8
3224        }
3225        #[inline(always)]
3226        fn encode_is_copy() -> bool {
3227            true
3228        }
3229
3230        #[inline(always)]
3231        fn decode_is_copy() -> bool {
3232            true
3233        }
3234    }
3235
3236    unsafe impl<D: fidl::encoding::ResourceDialect>
3237        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D>
3238        for &CompositeGetRingBufferFormatsRequest
3239    {
3240        #[inline]
3241        unsafe fn encode(
3242            self,
3243            encoder: &mut fidl::encoding::Encoder<'_, D>,
3244            offset: usize,
3245            _depth: fidl::encoding::Depth,
3246        ) -> fidl::Result<()> {
3247            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3248            unsafe {
3249                // Copy the object into the buffer.
3250                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3251                (buf_ptr as *mut CompositeGetRingBufferFormatsRequest)
3252                    .write_unaligned((self as *const CompositeGetRingBufferFormatsRequest).read());
3253                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3254                // done second because the memcpy will write garbage to these bytes.
3255            }
3256            Ok(())
3257        }
3258    }
3259    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3260        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D> for (T0,)
3261    {
3262        #[inline]
3263        unsafe fn encode(
3264            self,
3265            encoder: &mut fidl::encoding::Encoder<'_, D>,
3266            offset: usize,
3267            depth: fidl::encoding::Depth,
3268        ) -> fidl::Result<()> {
3269            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3270            // Zero out padding regions. There's no need to apply masks
3271            // because the unmasked parts will be overwritten by fields.
3272            // Write the fields.
3273            self.0.encode(encoder, offset + 0, depth)?;
3274            Ok(())
3275        }
3276    }
3277
3278    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3279        for CompositeGetRingBufferFormatsRequest
3280    {
3281        #[inline(always)]
3282        fn new_empty() -> Self {
3283            Self { processing_element_id: fidl::new_empty!(u64, D) }
3284        }
3285
3286        #[inline]
3287        unsafe fn decode(
3288            &mut self,
3289            decoder: &mut fidl::encoding::Decoder<'_, D>,
3290            offset: usize,
3291            _depth: fidl::encoding::Depth,
3292        ) -> fidl::Result<()> {
3293            decoder.debug_check_bounds::<Self>(offset);
3294            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3295            // Verify that padding bytes are zero.
3296            // Copy from the buffer into the object.
3297            unsafe {
3298                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3299            }
3300            Ok(())
3301        }
3302    }
3303
3304    impl fidl::encoding::ValueTypeMarker for CompositeSetDaiFormatRequest {
3305        type Borrowed<'a> = &'a Self;
3306        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3307            value
3308        }
3309    }
3310
3311    unsafe impl fidl::encoding::TypeMarker for CompositeSetDaiFormatRequest {
3312        type Owned = Self;
3313
3314        #[inline(always)]
3315        fn inline_align(_context: fidl::encoding::Context) -> usize {
3316            8
3317        }
3318
3319        #[inline(always)]
3320        fn inline_size(_context: fidl::encoding::Context) -> usize {
3321            56
3322        }
3323    }
3324
3325    unsafe impl<D: fidl::encoding::ResourceDialect>
3326        fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for &CompositeSetDaiFormatRequest
3327    {
3328        #[inline]
3329        unsafe fn encode(
3330            self,
3331            encoder: &mut fidl::encoding::Encoder<'_, D>,
3332            offset: usize,
3333            _depth: fidl::encoding::Depth,
3334        ) -> fidl::Result<()> {
3335            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3336            // Delegate to tuple encoding.
3337            fidl::encoding::Encode::<CompositeSetDaiFormatRequest, D>::encode(
3338                (
3339                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.processing_element_id),
3340                    <DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),
3341                ),
3342                encoder,
3343                offset,
3344                _depth,
3345            )
3346        }
3347    }
3348    unsafe impl<
3349        D: fidl::encoding::ResourceDialect,
3350        T0: fidl::encoding::Encode<u64, D>,
3351        T1: fidl::encoding::Encode<DaiFormat, D>,
3352    > fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for (T0, T1)
3353    {
3354        #[inline]
3355        unsafe fn encode(
3356            self,
3357            encoder: &mut fidl::encoding::Encoder<'_, D>,
3358            offset: usize,
3359            depth: fidl::encoding::Depth,
3360        ) -> fidl::Result<()> {
3361            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3362            // Zero out padding regions. There's no need to apply masks
3363            // because the unmasked parts will be overwritten by fields.
3364            // Write the fields.
3365            self.0.encode(encoder, offset + 0, depth)?;
3366            self.1.encode(encoder, offset + 8, depth)?;
3367            Ok(())
3368        }
3369    }
3370
3371    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3372        for CompositeSetDaiFormatRequest
3373    {
3374        #[inline(always)]
3375        fn new_empty() -> Self {
3376            Self {
3377                processing_element_id: fidl::new_empty!(u64, D),
3378                format: fidl::new_empty!(DaiFormat, D),
3379            }
3380        }
3381
3382        #[inline]
3383        unsafe fn decode(
3384            &mut self,
3385            decoder: &mut fidl::encoding::Decoder<'_, D>,
3386            offset: usize,
3387            _depth: fidl::encoding::Depth,
3388        ) -> fidl::Result<()> {
3389            decoder.debug_check_bounds::<Self>(offset);
3390            // Verify that padding bytes are zero.
3391            fidl::decode!(u64, D, &mut self.processing_element_id, decoder, offset + 0, _depth)?;
3392            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 8, _depth)?;
3393            Ok(())
3394        }
3395    }
3396
3397    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsResponse {
3398        type Borrowed<'a> = &'a Self;
3399        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3400            value
3401        }
3402    }
3403
3404    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsResponse {
3405        type Owned = Self;
3406
3407        #[inline(always)]
3408        fn inline_align(_context: fidl::encoding::Context) -> usize {
3409            8
3410        }
3411
3412        #[inline(always)]
3413        fn inline_size(_context: fidl::encoding::Context) -> usize {
3414            16
3415        }
3416    }
3417
3418    unsafe impl<D: fidl::encoding::ResourceDialect>
3419        fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D>
3420        for &CompositeGetDaiFormatsResponse
3421    {
3422        #[inline]
3423        unsafe fn encode(
3424            self,
3425            encoder: &mut fidl::encoding::Encoder<'_, D>,
3426            offset: usize,
3427            _depth: fidl::encoding::Depth,
3428        ) -> fidl::Result<()> {
3429            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3430            // Delegate to tuple encoding.
3431            fidl::encoding::Encode::<CompositeGetDaiFormatsResponse, D>::encode(
3432                (
3433                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
3434                ),
3435                encoder, offset, _depth
3436            )
3437        }
3438    }
3439    unsafe impl<
3440        D: fidl::encoding::ResourceDialect,
3441        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
3442    > fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D> for (T0,)
3443    {
3444        #[inline]
3445        unsafe fn encode(
3446            self,
3447            encoder: &mut fidl::encoding::Encoder<'_, D>,
3448            offset: usize,
3449            depth: fidl::encoding::Depth,
3450        ) -> fidl::Result<()> {
3451            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3452            // Zero out padding regions. There's no need to apply masks
3453            // because the unmasked parts will be overwritten by fields.
3454            // Write the fields.
3455            self.0.encode(encoder, offset + 0, depth)?;
3456            Ok(())
3457        }
3458    }
3459
3460    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3461        for CompositeGetDaiFormatsResponse
3462    {
3463        #[inline(always)]
3464        fn new_empty() -> Self {
3465            Self {
3466                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
3467            }
3468        }
3469
3470        #[inline]
3471        unsafe fn decode(
3472            &mut self,
3473            decoder: &mut fidl::encoding::Decoder<'_, D>,
3474            offset: usize,
3475            _depth: fidl::encoding::Depth,
3476        ) -> fidl::Result<()> {
3477            decoder.debug_check_bounds::<Self>(offset);
3478            // Verify that padding bytes are zero.
3479            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
3480            Ok(())
3481        }
3482    }
3483
3484    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsResponse {
3485        type Borrowed<'a> = &'a Self;
3486        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3487            value
3488        }
3489    }
3490
3491    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsResponse {
3492        type Owned = Self;
3493
3494        #[inline(always)]
3495        fn inline_align(_context: fidl::encoding::Context) -> usize {
3496            8
3497        }
3498
3499        #[inline(always)]
3500        fn inline_size(_context: fidl::encoding::Context) -> usize {
3501            16
3502        }
3503    }
3504
3505    unsafe impl<D: fidl::encoding::ResourceDialect>
3506        fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D>
3507        for &CompositeGetPacketStreamFormatsResponse
3508    {
3509        #[inline]
3510        unsafe fn encode(
3511            self,
3512            encoder: &mut fidl::encoding::Encoder<'_, D>,
3513            offset: usize,
3514            _depth: fidl::encoding::Depth,
3515        ) -> fidl::Result<()> {
3516            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3517            // Delegate to tuple encoding.
3518            fidl::encoding::Encode::<CompositeGetPacketStreamFormatsResponse, D>::encode(
3519                (
3520                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.packet_stream_formats),
3521                ),
3522                encoder, offset, _depth
3523            )
3524        }
3525    }
3526    unsafe impl<
3527        D: fidl::encoding::ResourceDialect,
3528        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3529    > fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D> for (T0,)
3530    {
3531        #[inline]
3532        unsafe fn encode(
3533            self,
3534            encoder: &mut fidl::encoding::Encoder<'_, D>,
3535            offset: usize,
3536            depth: fidl::encoding::Depth,
3537        ) -> fidl::Result<()> {
3538            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3539            // Zero out padding regions. There's no need to apply masks
3540            // because the unmasked parts will be overwritten by fields.
3541            // Write the fields.
3542            self.0.encode(encoder, offset + 0, depth)?;
3543            Ok(())
3544        }
3545    }
3546
3547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3548        for CompositeGetPacketStreamFormatsResponse
3549    {
3550        #[inline(always)]
3551        fn new_empty() -> Self {
3552            Self {
3553                packet_stream_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3554            }
3555        }
3556
3557        #[inline]
3558        unsafe fn decode(
3559            &mut self,
3560            decoder: &mut fidl::encoding::Decoder<'_, D>,
3561            offset: usize,
3562            _depth: fidl::encoding::Depth,
3563        ) -> fidl::Result<()> {
3564            decoder.debug_check_bounds::<Self>(offset);
3565            // Verify that padding bytes are zero.
3566            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.packet_stream_formats, decoder, offset + 0, _depth)?;
3567            Ok(())
3568        }
3569    }
3570
3571    impl fidl::encoding::ValueTypeMarker for CompositeGetPropertiesResponse {
3572        type Borrowed<'a> = &'a Self;
3573        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3574            value
3575        }
3576    }
3577
3578    unsafe impl fidl::encoding::TypeMarker for CompositeGetPropertiesResponse {
3579        type Owned = Self;
3580
3581        #[inline(always)]
3582        fn inline_align(_context: fidl::encoding::Context) -> usize {
3583            8
3584        }
3585
3586        #[inline(always)]
3587        fn inline_size(_context: fidl::encoding::Context) -> usize {
3588            16
3589        }
3590    }
3591
3592    unsafe impl<D: fidl::encoding::ResourceDialect>
3593        fidl::encoding::Encode<CompositeGetPropertiesResponse, D>
3594        for &CompositeGetPropertiesResponse
3595    {
3596        #[inline]
3597        unsafe fn encode(
3598            self,
3599            encoder: &mut fidl::encoding::Encoder<'_, D>,
3600            offset: usize,
3601            _depth: fidl::encoding::Depth,
3602        ) -> fidl::Result<()> {
3603            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3604            // Delegate to tuple encoding.
3605            fidl::encoding::Encode::<CompositeGetPropertiesResponse, D>::encode(
3606                (<CompositeProperties as fidl::encoding::ValueTypeMarker>::borrow(
3607                    &self.properties,
3608                ),),
3609                encoder,
3610                offset,
3611                _depth,
3612            )
3613        }
3614    }
3615    unsafe impl<
3616        D: fidl::encoding::ResourceDialect,
3617        T0: fidl::encoding::Encode<CompositeProperties, D>,
3618    > fidl::encoding::Encode<CompositeGetPropertiesResponse, D> for (T0,)
3619    {
3620        #[inline]
3621        unsafe fn encode(
3622            self,
3623            encoder: &mut fidl::encoding::Encoder<'_, D>,
3624            offset: usize,
3625            depth: fidl::encoding::Depth,
3626        ) -> fidl::Result<()> {
3627            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3628            // Zero out padding regions. There's no need to apply masks
3629            // because the unmasked parts will be overwritten by fields.
3630            // Write the fields.
3631            self.0.encode(encoder, offset + 0, depth)?;
3632            Ok(())
3633        }
3634    }
3635
3636    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3637        for CompositeGetPropertiesResponse
3638    {
3639        #[inline(always)]
3640        fn new_empty() -> Self {
3641            Self { properties: fidl::new_empty!(CompositeProperties, D) }
3642        }
3643
3644        #[inline]
3645        unsafe fn decode(
3646            &mut self,
3647            decoder: &mut fidl::encoding::Decoder<'_, D>,
3648            offset: usize,
3649            _depth: fidl::encoding::Depth,
3650        ) -> fidl::Result<()> {
3651            decoder.debug_check_bounds::<Self>(offset);
3652            // Verify that padding bytes are zero.
3653            fidl::decode!(
3654                CompositeProperties,
3655                D,
3656                &mut self.properties,
3657                decoder,
3658                offset + 0,
3659                _depth
3660            )?;
3661            Ok(())
3662        }
3663    }
3664
3665    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsResponse {
3666        type Borrowed<'a> = &'a Self;
3667        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3668            value
3669        }
3670    }
3671
3672    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsResponse {
3673        type Owned = Self;
3674
3675        #[inline(always)]
3676        fn inline_align(_context: fidl::encoding::Context) -> usize {
3677            8
3678        }
3679
3680        #[inline(always)]
3681        fn inline_size(_context: fidl::encoding::Context) -> usize {
3682            16
3683        }
3684    }
3685
3686    unsafe impl<D: fidl::encoding::ResourceDialect>
3687        fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D>
3688        for &CompositeGetRingBufferFormatsResponse
3689    {
3690        #[inline]
3691        unsafe fn encode(
3692            self,
3693            encoder: &mut fidl::encoding::Encoder<'_, D>,
3694            offset: usize,
3695            _depth: fidl::encoding::Depth,
3696        ) -> fidl::Result<()> {
3697            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3698            // Delegate to tuple encoding.
3699            fidl::encoding::Encode::<CompositeGetRingBufferFormatsResponse, D>::encode(
3700                (
3701                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
3702                ),
3703                encoder, offset, _depth
3704            )
3705        }
3706    }
3707    unsafe impl<
3708        D: fidl::encoding::ResourceDialect,
3709        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3710    > fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D> for (T0,)
3711    {
3712        #[inline]
3713        unsafe fn encode(
3714            self,
3715            encoder: &mut fidl::encoding::Encoder<'_, D>,
3716            offset: usize,
3717            depth: fidl::encoding::Depth,
3718        ) -> fidl::Result<()> {
3719            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3720            // Zero out padding regions. There's no need to apply masks
3721            // because the unmasked parts will be overwritten by fields.
3722            // Write the fields.
3723            self.0.encode(encoder, offset + 0, depth)?;
3724            Ok(())
3725        }
3726    }
3727
3728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3729        for CompositeGetRingBufferFormatsResponse
3730    {
3731        #[inline(always)]
3732        fn new_empty() -> Self {
3733            Self {
3734                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3735            }
3736        }
3737
3738        #[inline]
3739        unsafe fn decode(
3740            &mut self,
3741            decoder: &mut fidl::encoding::Decoder<'_, D>,
3742            offset: usize,
3743            _depth: fidl::encoding::Depth,
3744        ) -> fidl::Result<()> {
3745            decoder.debug_check_bounds::<Self>(offset);
3746            // Verify that padding bytes are zero.
3747            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
3748            Ok(())
3749        }
3750    }
3751
3752    impl fidl::encoding::ValueTypeMarker for DaiFormat {
3753        type Borrowed<'a> = &'a Self;
3754        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3755            value
3756        }
3757    }
3758
3759    unsafe impl fidl::encoding::TypeMarker for DaiFormat {
3760        type Owned = Self;
3761
3762        #[inline(always)]
3763        fn inline_align(_context: fidl::encoding::Context) -> usize {
3764            8
3765        }
3766
3767        #[inline(always)]
3768        fn inline_size(_context: fidl::encoding::Context) -> usize {
3769            48
3770        }
3771    }
3772
3773    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFormat, D>
3774        for &DaiFormat
3775    {
3776        #[inline]
3777        unsafe fn encode(
3778            self,
3779            encoder: &mut fidl::encoding::Encoder<'_, D>,
3780            offset: usize,
3781            _depth: fidl::encoding::Depth,
3782        ) -> fidl::Result<()> {
3783            encoder.debug_check_bounds::<DaiFormat>(offset);
3784            // Delegate to tuple encoding.
3785            fidl::encoding::Encode::<DaiFormat, D>::encode(
3786                (
3787                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3788                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_to_use_bitmask),
3789                    <DaiSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
3790                        &self.sample_format,
3791                    ),
3792                    <DaiFrameFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_format),
3793                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
3794                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3795                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3796                ),
3797                encoder,
3798                offset,
3799                _depth,
3800            )
3801        }
3802    }
3803    unsafe impl<
3804        D: fidl::encoding::ResourceDialect,
3805        T0: fidl::encoding::Encode<u32, D>,
3806        T1: fidl::encoding::Encode<u64, D>,
3807        T2: fidl::encoding::Encode<DaiSampleFormat, D>,
3808        T3: fidl::encoding::Encode<DaiFrameFormat, D>,
3809        T4: fidl::encoding::Encode<u32, D>,
3810        T5: fidl::encoding::Encode<u8, D>,
3811        T6: fidl::encoding::Encode<u8, D>,
3812    > fidl::encoding::Encode<DaiFormat, D> for (T0, T1, T2, T3, T4, T5, T6)
3813    {
3814        #[inline]
3815        unsafe fn encode(
3816            self,
3817            encoder: &mut fidl::encoding::Encoder<'_, D>,
3818            offset: usize,
3819            depth: fidl::encoding::Depth,
3820        ) -> fidl::Result<()> {
3821            encoder.debug_check_bounds::<DaiFormat>(offset);
3822            // Zero out padding regions. There's no need to apply masks
3823            // because the unmasked parts will be overwritten by fields.
3824            unsafe {
3825                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3826                (ptr as *mut u64).write_unaligned(0);
3827            }
3828            unsafe {
3829                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3830                (ptr as *mut u64).write_unaligned(0);
3831            }
3832            unsafe {
3833                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
3834                (ptr as *mut u64).write_unaligned(0);
3835            }
3836            // Write the fields.
3837            self.0.encode(encoder, offset + 0, depth)?;
3838            self.1.encode(encoder, offset + 8, depth)?;
3839            self.2.encode(encoder, offset + 16, depth)?;
3840            self.3.encode(encoder, offset + 24, depth)?;
3841            self.4.encode(encoder, offset + 40, depth)?;
3842            self.5.encode(encoder, offset + 44, depth)?;
3843            self.6.encode(encoder, offset + 45, depth)?;
3844            Ok(())
3845        }
3846    }
3847
3848    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFormat {
3849        #[inline(always)]
3850        fn new_empty() -> Self {
3851            Self {
3852                number_of_channels: fidl::new_empty!(u32, D),
3853                channels_to_use_bitmask: fidl::new_empty!(u64, D),
3854                sample_format: fidl::new_empty!(DaiSampleFormat, D),
3855                frame_format: fidl::new_empty!(DaiFrameFormat, D),
3856                frame_rate: fidl::new_empty!(u32, D),
3857                bits_per_slot: fidl::new_empty!(u8, D),
3858                bits_per_sample: fidl::new_empty!(u8, D),
3859            }
3860        }
3861
3862        #[inline]
3863        unsafe fn decode(
3864            &mut self,
3865            decoder: &mut fidl::encoding::Decoder<'_, D>,
3866            offset: usize,
3867            _depth: fidl::encoding::Depth,
3868        ) -> fidl::Result<()> {
3869            decoder.debug_check_bounds::<Self>(offset);
3870            // Verify that padding bytes are zero.
3871            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3872            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3873            let mask = 0xffffffff00000000u64;
3874            let maskedval = padval & mask;
3875            if maskedval != 0 {
3876                return Err(fidl::Error::NonZeroPadding {
3877                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3878                });
3879            }
3880            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3881            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3882            let mask = 0xffffffffffffff00u64;
3883            let maskedval = padval & mask;
3884            if maskedval != 0 {
3885                return Err(fidl::Error::NonZeroPadding {
3886                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3887                });
3888            }
3889            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
3890            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3891            let mask = 0xffff000000000000u64;
3892            let maskedval = padval & mask;
3893            if maskedval != 0 {
3894                return Err(fidl::Error::NonZeroPadding {
3895                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
3896                });
3897            }
3898            fidl::decode!(u32, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3899            fidl::decode!(u64, D, &mut self.channels_to_use_bitmask, decoder, offset + 8, _depth)?;
3900            fidl::decode!(
3901                DaiSampleFormat,
3902                D,
3903                &mut self.sample_format,
3904                decoder,
3905                offset + 16,
3906                _depth
3907            )?;
3908            fidl::decode!(DaiFrameFormat, D, &mut self.frame_format, decoder, offset + 24, _depth)?;
3909            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 40, _depth)?;
3910            fidl::decode!(u8, D, &mut self.bits_per_slot, decoder, offset + 44, _depth)?;
3911            fidl::decode!(u8, D, &mut self.bits_per_sample, decoder, offset + 45, _depth)?;
3912            Ok(())
3913        }
3914    }
3915
3916    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatCustom {
3917        type Borrowed<'a> = &'a Self;
3918        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3919            value
3920        }
3921    }
3922
3923    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatCustom {
3924        type Owned = Self;
3925
3926        #[inline(always)]
3927        fn inline_align(_context: fidl::encoding::Context) -> usize {
3928            1
3929        }
3930
3931        #[inline(always)]
3932        fn inline_size(_context: fidl::encoding::Context) -> usize {
3933            4
3934        }
3935    }
3936
3937    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormatCustom, D>
3938        for &DaiFrameFormatCustom
3939    {
3940        #[inline]
3941        unsafe fn encode(
3942            self,
3943            encoder: &mut fidl::encoding::Encoder<'_, D>,
3944            offset: usize,
3945            _depth: fidl::encoding::Depth,
3946        ) -> fidl::Result<()> {
3947            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3948            // Delegate to tuple encoding.
3949            fidl::encoding::Encode::<DaiFrameFormatCustom, D>::encode(
3950                (
3951                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.left_justified),
3952                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.sclk_on_raising),
3953                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_sclks_offset),
3954                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_size),
3955                ),
3956                encoder,
3957                offset,
3958                _depth,
3959            )
3960        }
3961    }
3962    unsafe impl<
3963        D: fidl::encoding::ResourceDialect,
3964        T0: fidl::encoding::Encode<bool, D>,
3965        T1: fidl::encoding::Encode<bool, D>,
3966        T2: fidl::encoding::Encode<i8, D>,
3967        T3: fidl::encoding::Encode<u8, D>,
3968    > fidl::encoding::Encode<DaiFrameFormatCustom, D> for (T0, T1, T2, T3)
3969    {
3970        #[inline]
3971        unsafe fn encode(
3972            self,
3973            encoder: &mut fidl::encoding::Encoder<'_, D>,
3974            offset: usize,
3975            depth: fidl::encoding::Depth,
3976        ) -> fidl::Result<()> {
3977            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3978            // Zero out padding regions. There's no need to apply masks
3979            // because the unmasked parts will be overwritten by fields.
3980            // Write the fields.
3981            self.0.encode(encoder, offset + 0, depth)?;
3982            self.1.encode(encoder, offset + 1, depth)?;
3983            self.2.encode(encoder, offset + 2, depth)?;
3984            self.3.encode(encoder, offset + 3, depth)?;
3985            Ok(())
3986        }
3987    }
3988
3989    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormatCustom {
3990        #[inline(always)]
3991        fn new_empty() -> Self {
3992            Self {
3993                left_justified: fidl::new_empty!(bool, D),
3994                sclk_on_raising: fidl::new_empty!(bool, D),
3995                frame_sync_sclks_offset: fidl::new_empty!(i8, D),
3996                frame_sync_size: fidl::new_empty!(u8, D),
3997            }
3998        }
3999
4000        #[inline]
4001        unsafe fn decode(
4002            &mut self,
4003            decoder: &mut fidl::encoding::Decoder<'_, D>,
4004            offset: usize,
4005            _depth: fidl::encoding::Depth,
4006        ) -> fidl::Result<()> {
4007            decoder.debug_check_bounds::<Self>(offset);
4008            // Verify that padding bytes are zero.
4009            fidl::decode!(bool, D, &mut self.left_justified, decoder, offset + 0, _depth)?;
4010            fidl::decode!(bool, D, &mut self.sclk_on_raising, decoder, offset + 1, _depth)?;
4011            fidl::decode!(i8, D, &mut self.frame_sync_sclks_offset, decoder, offset + 2, _depth)?;
4012            fidl::decode!(u8, D, &mut self.frame_sync_size, decoder, offset + 3, _depth)?;
4013            Ok(())
4014        }
4015    }
4016
4017    impl fidl::encoding::ValueTypeMarker for DaiGetPropertiesResponse {
4018        type Borrowed<'a> = &'a Self;
4019        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4020            value
4021        }
4022    }
4023
4024    unsafe impl fidl::encoding::TypeMarker for DaiGetPropertiesResponse {
4025        type Owned = Self;
4026
4027        #[inline(always)]
4028        fn inline_align(_context: fidl::encoding::Context) -> usize {
4029            8
4030        }
4031
4032        #[inline(always)]
4033        fn inline_size(_context: fidl::encoding::Context) -> usize {
4034            16
4035        }
4036    }
4037
4038    unsafe impl<D: fidl::encoding::ResourceDialect>
4039        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for &DaiGetPropertiesResponse
4040    {
4041        #[inline]
4042        unsafe fn encode(
4043            self,
4044            encoder: &mut fidl::encoding::Encoder<'_, D>,
4045            offset: usize,
4046            _depth: fidl::encoding::Depth,
4047        ) -> fidl::Result<()> {
4048            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4049            // Delegate to tuple encoding.
4050            fidl::encoding::Encode::<DaiGetPropertiesResponse, D>::encode(
4051                (<DaiProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
4052                encoder,
4053                offset,
4054                _depth,
4055            )
4056        }
4057    }
4058    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiProperties, D>>
4059        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for (T0,)
4060    {
4061        #[inline]
4062        unsafe fn encode(
4063            self,
4064            encoder: &mut fidl::encoding::Encoder<'_, D>,
4065            offset: usize,
4066            depth: fidl::encoding::Depth,
4067        ) -> fidl::Result<()> {
4068            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4069            // Zero out padding regions. There's no need to apply masks
4070            // because the unmasked parts will be overwritten by fields.
4071            // Write the fields.
4072            self.0.encode(encoder, offset + 0, depth)?;
4073            Ok(())
4074        }
4075    }
4076
4077    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4078        for DaiGetPropertiesResponse
4079    {
4080        #[inline(always)]
4081        fn new_empty() -> Self {
4082            Self { properties: fidl::new_empty!(DaiProperties, D) }
4083        }
4084
4085        #[inline]
4086        unsafe fn decode(
4087            &mut self,
4088            decoder: &mut fidl::encoding::Decoder<'_, D>,
4089            offset: usize,
4090            _depth: fidl::encoding::Depth,
4091        ) -> fidl::Result<()> {
4092            decoder.debug_check_bounds::<Self>(offset);
4093            // Verify that padding bytes are zero.
4094            fidl::decode!(DaiProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
4095            Ok(())
4096        }
4097    }
4098
4099    impl fidl::encoding::ValueTypeMarker for DaiSupportedFormats {
4100        type Borrowed<'a> = &'a Self;
4101        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4102            value
4103        }
4104    }
4105
4106    unsafe impl fidl::encoding::TypeMarker for DaiSupportedFormats {
4107        type Owned = Self;
4108
4109        #[inline(always)]
4110        fn inline_align(_context: fidl::encoding::Context) -> usize {
4111            8
4112        }
4113
4114        #[inline(always)]
4115        fn inline_size(_context: fidl::encoding::Context) -> usize {
4116            96
4117        }
4118    }
4119
4120    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiSupportedFormats, D>
4121        for &DaiSupportedFormats
4122    {
4123        #[inline]
4124        unsafe fn encode(
4125            self,
4126            encoder: &mut fidl::encoding::Encoder<'_, D>,
4127            offset: usize,
4128            _depth: fidl::encoding::Depth,
4129        ) -> fidl::Result<()> {
4130            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4131            // Delegate to tuple encoding.
4132            fidl::encoding::Encode::<DaiSupportedFormats, D>::encode(
4133                (
4134                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4135                    <fidl::encoding::Vector<DaiSampleFormat, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_formats),
4136                    <fidl::encoding::Vector<DaiFrameFormat, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_formats),
4137                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rates),
4138                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
4139                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
4140                ),
4141                encoder, offset, _depth
4142            )
4143        }
4144    }
4145    unsafe impl<
4146        D: fidl::encoding::ResourceDialect,
4147        T0: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4148        T1: fidl::encoding::Encode<fidl::encoding::Vector<DaiSampleFormat, 4>, D>,
4149        T2: fidl::encoding::Encode<fidl::encoding::Vector<DaiFrameFormat, 64>, D>,
4150        T3: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4151        T4: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4152        T5: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4153    > fidl::encoding::Encode<DaiSupportedFormats, D> for (T0, T1, T2, T3, T4, T5)
4154    {
4155        #[inline]
4156        unsafe fn encode(
4157            self,
4158            encoder: &mut fidl::encoding::Encoder<'_, D>,
4159            offset: usize,
4160            depth: fidl::encoding::Depth,
4161        ) -> fidl::Result<()> {
4162            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4163            // Zero out padding regions. There's no need to apply masks
4164            // because the unmasked parts will be overwritten by fields.
4165            // Write the fields.
4166            self.0.encode(encoder, offset + 0, depth)?;
4167            self.1.encode(encoder, offset + 16, depth)?;
4168            self.2.encode(encoder, offset + 32, depth)?;
4169            self.3.encode(encoder, offset + 48, depth)?;
4170            self.4.encode(encoder, offset + 64, depth)?;
4171            self.5.encode(encoder, offset + 80, depth)?;
4172            Ok(())
4173        }
4174    }
4175
4176    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSupportedFormats {
4177        #[inline(always)]
4178        fn new_empty() -> Self {
4179            Self {
4180                number_of_channels: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4181                sample_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSampleFormat, 4>, D),
4182                frame_formats: fidl::new_empty!(fidl::encoding::Vector<DaiFrameFormat, 64>, D),
4183                frame_rates: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4184                bits_per_slot: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4185                bits_per_sample: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4186            }
4187        }
4188
4189        #[inline]
4190        unsafe fn decode(
4191            &mut self,
4192            decoder: &mut fidl::encoding::Decoder<'_, D>,
4193            offset: usize,
4194            _depth: fidl::encoding::Depth,
4195        ) -> fidl::Result<()> {
4196            decoder.debug_check_bounds::<Self>(offset);
4197            // Verify that padding bytes are zero.
4198            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4199            fidl::decode!(fidl::encoding::Vector<DaiSampleFormat, 4>, D, &mut self.sample_formats, decoder, offset + 16, _depth)?;
4200            fidl::decode!(fidl::encoding::Vector<DaiFrameFormat, 64>, D, &mut self.frame_formats, decoder, offset + 32, _depth)?;
4201            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.frame_rates, decoder, offset + 48, _depth)?;
4202            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_slot, decoder, offset + 64, _depth)?;
4203            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_sample, decoder, offset + 80, _depth)?;
4204            Ok(())
4205        }
4206    }
4207
4208    impl fidl::encoding::ValueTypeMarker for DaiGetDaiFormatsResponse {
4209        type Borrowed<'a> = &'a Self;
4210        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4211            value
4212        }
4213    }
4214
4215    unsafe impl fidl::encoding::TypeMarker for DaiGetDaiFormatsResponse {
4216        type Owned = Self;
4217
4218        #[inline(always)]
4219        fn inline_align(_context: fidl::encoding::Context) -> usize {
4220            8
4221        }
4222
4223        #[inline(always)]
4224        fn inline_size(_context: fidl::encoding::Context) -> usize {
4225            16
4226        }
4227    }
4228
4229    unsafe impl<D: fidl::encoding::ResourceDialect>
4230        fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for &DaiGetDaiFormatsResponse
4231    {
4232        #[inline]
4233        unsafe fn encode(
4234            self,
4235            encoder: &mut fidl::encoding::Encoder<'_, D>,
4236            offset: usize,
4237            _depth: fidl::encoding::Depth,
4238        ) -> fidl::Result<()> {
4239            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4240            // Delegate to tuple encoding.
4241            fidl::encoding::Encode::<DaiGetDaiFormatsResponse, D>::encode(
4242                (
4243                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
4244                ),
4245                encoder, offset, _depth
4246            )
4247        }
4248    }
4249    unsafe impl<
4250        D: fidl::encoding::ResourceDialect,
4251        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
4252    > fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for (T0,)
4253    {
4254        #[inline]
4255        unsafe fn encode(
4256            self,
4257            encoder: &mut fidl::encoding::Encoder<'_, D>,
4258            offset: usize,
4259            depth: fidl::encoding::Depth,
4260        ) -> fidl::Result<()> {
4261            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4262            // Zero out padding regions. There's no need to apply masks
4263            // because the unmasked parts will be overwritten by fields.
4264            // Write the fields.
4265            self.0.encode(encoder, offset + 0, depth)?;
4266            Ok(())
4267        }
4268    }
4269
4270    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4271        for DaiGetDaiFormatsResponse
4272    {
4273        #[inline(always)]
4274        fn new_empty() -> Self {
4275            Self {
4276                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
4277            }
4278        }
4279
4280        #[inline]
4281        unsafe fn decode(
4282            &mut self,
4283            decoder: &mut fidl::encoding::Decoder<'_, D>,
4284            offset: usize,
4285            _depth: fidl::encoding::Depth,
4286        ) -> fidl::Result<()> {
4287            decoder.debug_check_bounds::<Self>(offset);
4288            // Verify that padding bytes are zero.
4289            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
4290            Ok(())
4291        }
4292    }
4293
4294    impl fidl::encoding::ValueTypeMarker for DaiGetRingBufferFormatsResponse {
4295        type Borrowed<'a> = &'a Self;
4296        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4297            value
4298        }
4299    }
4300
4301    unsafe impl fidl::encoding::TypeMarker for DaiGetRingBufferFormatsResponse {
4302        type Owned = Self;
4303
4304        #[inline(always)]
4305        fn inline_align(_context: fidl::encoding::Context) -> usize {
4306            8
4307        }
4308
4309        #[inline(always)]
4310        fn inline_size(_context: fidl::encoding::Context) -> usize {
4311            16
4312        }
4313    }
4314
4315    unsafe impl<D: fidl::encoding::ResourceDialect>
4316        fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D>
4317        for &DaiGetRingBufferFormatsResponse
4318    {
4319        #[inline]
4320        unsafe fn encode(
4321            self,
4322            encoder: &mut fidl::encoding::Encoder<'_, D>,
4323            offset: usize,
4324            _depth: fidl::encoding::Depth,
4325        ) -> fidl::Result<()> {
4326            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4327            // Delegate to tuple encoding.
4328            fidl::encoding::Encode::<DaiGetRingBufferFormatsResponse, D>::encode(
4329                (
4330                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
4331                ),
4332                encoder, offset, _depth
4333            )
4334        }
4335    }
4336    unsafe impl<
4337        D: fidl::encoding::ResourceDialect,
4338        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
4339    > fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D> for (T0,)
4340    {
4341        #[inline]
4342        unsafe fn encode(
4343            self,
4344            encoder: &mut fidl::encoding::Encoder<'_, D>,
4345            offset: usize,
4346            depth: fidl::encoding::Depth,
4347        ) -> fidl::Result<()> {
4348            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4349            // Zero out padding regions. There's no need to apply masks
4350            // because the unmasked parts will be overwritten by fields.
4351            // Write the fields.
4352            self.0.encode(encoder, offset + 0, depth)?;
4353            Ok(())
4354        }
4355    }
4356
4357    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4358        for DaiGetRingBufferFormatsResponse
4359    {
4360        #[inline(always)]
4361        fn new_empty() -> Self {
4362            Self {
4363                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
4364            }
4365        }
4366
4367        #[inline]
4368        unsafe fn decode(
4369            &mut self,
4370            decoder: &mut fidl::encoding::Decoder<'_, D>,
4371            offset: usize,
4372            _depth: fidl::encoding::Depth,
4373        ) -> fidl::Result<()> {
4374            decoder.debug_check_bounds::<Self>(offset);
4375            // Verify that padding bytes are zero.
4376            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
4377            Ok(())
4378        }
4379    }
4380
4381    impl fidl::encoding::ValueTypeMarker for HealthGetHealthStateResponse {
4382        type Borrowed<'a> = &'a Self;
4383        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4384            value
4385        }
4386    }
4387
4388    unsafe impl fidl::encoding::TypeMarker for HealthGetHealthStateResponse {
4389        type Owned = Self;
4390
4391        #[inline(always)]
4392        fn inline_align(_context: fidl::encoding::Context) -> usize {
4393            8
4394        }
4395
4396        #[inline(always)]
4397        fn inline_size(_context: fidl::encoding::Context) -> usize {
4398            16
4399        }
4400    }
4401
4402    unsafe impl<D: fidl::encoding::ResourceDialect>
4403        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for &HealthGetHealthStateResponse
4404    {
4405        #[inline]
4406        unsafe fn encode(
4407            self,
4408            encoder: &mut fidl::encoding::Encoder<'_, D>,
4409            offset: usize,
4410            _depth: fidl::encoding::Depth,
4411        ) -> fidl::Result<()> {
4412            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4413            // Delegate to tuple encoding.
4414            fidl::encoding::Encode::<HealthGetHealthStateResponse, D>::encode(
4415                (<HealthState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
4416                encoder,
4417                offset,
4418                _depth,
4419            )
4420        }
4421    }
4422    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HealthState, D>>
4423        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for (T0,)
4424    {
4425        #[inline]
4426        unsafe fn encode(
4427            self,
4428            encoder: &mut fidl::encoding::Encoder<'_, D>,
4429            offset: usize,
4430            depth: fidl::encoding::Depth,
4431        ) -> fidl::Result<()> {
4432            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4433            // Zero out padding regions. There's no need to apply masks
4434            // because the unmasked parts will be overwritten by fields.
4435            // Write the fields.
4436            self.0.encode(encoder, offset + 0, depth)?;
4437            Ok(())
4438        }
4439    }
4440
4441    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4442        for HealthGetHealthStateResponse
4443    {
4444        #[inline(always)]
4445        fn new_empty() -> Self {
4446            Self { state: fidl::new_empty!(HealthState, D) }
4447        }
4448
4449        #[inline]
4450        unsafe fn decode(
4451            &mut self,
4452            decoder: &mut fidl::encoding::Decoder<'_, D>,
4453            offset: usize,
4454            _depth: fidl::encoding::Depth,
4455        ) -> fidl::Result<()> {
4456            decoder.debug_check_bounds::<Self>(offset);
4457            // Verify that padding bytes are zero.
4458            fidl::decode!(HealthState, D, &mut self.state, decoder, offset + 0, _depth)?;
4459            Ok(())
4460        }
4461    }
4462
4463    impl fidl::encoding::ValueTypeMarker for PacketStreamControlGetPropertiesResponse {
4464        type Borrowed<'a> = &'a Self;
4465        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4466            value
4467        }
4468    }
4469
4470    unsafe impl fidl::encoding::TypeMarker for PacketStreamControlGetPropertiesResponse {
4471        type Owned = Self;
4472
4473        #[inline(always)]
4474        fn inline_align(_context: fidl::encoding::Context) -> usize {
4475            8
4476        }
4477
4478        #[inline(always)]
4479        fn inline_size(_context: fidl::encoding::Context) -> usize {
4480            16
4481        }
4482    }
4483
4484    unsafe impl<D: fidl::encoding::ResourceDialect>
4485        fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D>
4486        for &PacketStreamControlGetPropertiesResponse
4487    {
4488        #[inline]
4489        unsafe fn encode(
4490            self,
4491            encoder: &mut fidl::encoding::Encoder<'_, D>,
4492            offset: usize,
4493            _depth: fidl::encoding::Depth,
4494        ) -> fidl::Result<()> {
4495            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4496            // Delegate to tuple encoding.
4497            fidl::encoding::Encode::<PacketStreamControlGetPropertiesResponse, D>::encode(
4498                (<PacketStreamProperties as fidl::encoding::ValueTypeMarker>::borrow(
4499                    &self.properties,
4500                ),),
4501                encoder,
4502                offset,
4503                _depth,
4504            )
4505        }
4506    }
4507    unsafe impl<
4508        D: fidl::encoding::ResourceDialect,
4509        T0: fidl::encoding::Encode<PacketStreamProperties, D>,
4510    > fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D> for (T0,)
4511    {
4512        #[inline]
4513        unsafe fn encode(
4514            self,
4515            encoder: &mut fidl::encoding::Encoder<'_, D>,
4516            offset: usize,
4517            depth: fidl::encoding::Depth,
4518        ) -> fidl::Result<()> {
4519            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4520            // Zero out padding regions. There's no need to apply masks
4521            // because the unmasked parts will be overwritten by fields.
4522            // Write the fields.
4523            self.0.encode(encoder, offset + 0, depth)?;
4524            Ok(())
4525        }
4526    }
4527
4528    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4529        for PacketStreamControlGetPropertiesResponse
4530    {
4531        #[inline(always)]
4532        fn new_empty() -> Self {
4533            Self { properties: fidl::new_empty!(PacketStreamProperties, D) }
4534        }
4535
4536        #[inline]
4537        unsafe fn decode(
4538            &mut self,
4539            decoder: &mut fidl::encoding::Decoder<'_, D>,
4540            offset: usize,
4541            _depth: fidl::encoding::Depth,
4542        ) -> fidl::Result<()> {
4543            decoder.debug_check_bounds::<Self>(offset);
4544            // Verify that padding bytes are zero.
4545            fidl::decode!(
4546                PacketStreamProperties,
4547                D,
4548                &mut self.properties,
4549                decoder,
4550                offset + 0,
4551                _depth
4552            )?;
4553            Ok(())
4554        }
4555    }
4556
4557    impl fidl::encoding::ValueTypeMarker for PcmFormat {
4558        type Borrowed<'a> = &'a Self;
4559        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4560            value
4561        }
4562    }
4563
4564    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
4565        type Owned = Self;
4566
4567        #[inline(always)]
4568        fn inline_align(_context: fidl::encoding::Context) -> usize {
4569            4
4570        }
4571
4572        #[inline(always)]
4573        fn inline_size(_context: fidl::encoding::Context) -> usize {
4574            8
4575        }
4576    }
4577
4578    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
4579        for &PcmFormat
4580    {
4581        #[inline]
4582        unsafe fn encode(
4583            self,
4584            encoder: &mut fidl::encoding::Encoder<'_, D>,
4585            offset: usize,
4586            _depth: fidl::encoding::Depth,
4587        ) -> fidl::Result<()> {
4588            encoder.debug_check_bounds::<PcmFormat>(offset);
4589            // Delegate to tuple encoding.
4590            fidl::encoding::Encode::<PcmFormat, D>::encode(
4591                (
4592                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4593                    <SampleFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_format),
4594                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bytes_per_sample),
4595                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.valid_bits_per_sample),
4596                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
4597                ),
4598                encoder,
4599                offset,
4600                _depth,
4601            )
4602        }
4603    }
4604    unsafe impl<
4605        D: fidl::encoding::ResourceDialect,
4606        T0: fidl::encoding::Encode<u8, D>,
4607        T1: fidl::encoding::Encode<SampleFormat, D>,
4608        T2: fidl::encoding::Encode<u8, D>,
4609        T3: fidl::encoding::Encode<u8, D>,
4610        T4: fidl::encoding::Encode<u32, D>,
4611    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3, T4)
4612    {
4613        #[inline]
4614        unsafe fn encode(
4615            self,
4616            encoder: &mut fidl::encoding::Encoder<'_, D>,
4617            offset: usize,
4618            depth: fidl::encoding::Depth,
4619        ) -> fidl::Result<()> {
4620            encoder.debug_check_bounds::<PcmFormat>(offset);
4621            // Zero out padding regions. There's no need to apply masks
4622            // because the unmasked parts will be overwritten by fields.
4623            // Write the fields.
4624            self.0.encode(encoder, offset + 0, depth)?;
4625            self.1.encode(encoder, offset + 1, depth)?;
4626            self.2.encode(encoder, offset + 2, depth)?;
4627            self.3.encode(encoder, offset + 3, depth)?;
4628            self.4.encode(encoder, offset + 4, depth)?;
4629            Ok(())
4630        }
4631    }
4632
4633    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
4634        #[inline(always)]
4635        fn new_empty() -> Self {
4636            Self {
4637                number_of_channels: fidl::new_empty!(u8, D),
4638                sample_format: fidl::new_empty!(SampleFormat, D),
4639                bytes_per_sample: fidl::new_empty!(u8, D),
4640                valid_bits_per_sample: fidl::new_empty!(u8, D),
4641                frame_rate: fidl::new_empty!(u32, D),
4642            }
4643        }
4644
4645        #[inline]
4646        unsafe fn decode(
4647            &mut self,
4648            decoder: &mut fidl::encoding::Decoder<'_, D>,
4649            offset: usize,
4650            _depth: fidl::encoding::Depth,
4651        ) -> fidl::Result<()> {
4652            decoder.debug_check_bounds::<Self>(offset);
4653            // Verify that padding bytes are zero.
4654            fidl::decode!(u8, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4655            fidl::decode!(SampleFormat, D, &mut self.sample_format, decoder, offset + 1, _depth)?;
4656            fidl::decode!(u8, D, &mut self.bytes_per_sample, decoder, offset + 2, _depth)?;
4657            fidl::decode!(u8, D, &mut self.valid_bits_per_sample, decoder, offset + 3, _depth)?;
4658            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 4, _depth)?;
4659            Ok(())
4660        }
4661    }
4662
4663    impl fidl::encoding::ValueTypeMarker for RingBufferGetPropertiesResponse {
4664        type Borrowed<'a> = &'a Self;
4665        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4666            value
4667        }
4668    }
4669
4670    unsafe impl fidl::encoding::TypeMarker for RingBufferGetPropertiesResponse {
4671        type Owned = Self;
4672
4673        #[inline(always)]
4674        fn inline_align(_context: fidl::encoding::Context) -> usize {
4675            8
4676        }
4677
4678        #[inline(always)]
4679        fn inline_size(_context: fidl::encoding::Context) -> usize {
4680            16
4681        }
4682    }
4683
4684    unsafe impl<D: fidl::encoding::ResourceDialect>
4685        fidl::encoding::Encode<RingBufferGetPropertiesResponse, D>
4686        for &RingBufferGetPropertiesResponse
4687    {
4688        #[inline]
4689        unsafe fn encode(
4690            self,
4691            encoder: &mut fidl::encoding::Encoder<'_, D>,
4692            offset: usize,
4693            _depth: fidl::encoding::Depth,
4694        ) -> fidl::Result<()> {
4695            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4696            // Delegate to tuple encoding.
4697            fidl::encoding::Encode::<RingBufferGetPropertiesResponse, D>::encode(
4698                (<RingBufferProperties as fidl::encoding::ValueTypeMarker>::borrow(
4699                    &self.properties,
4700                ),),
4701                encoder,
4702                offset,
4703                _depth,
4704            )
4705        }
4706    }
4707    unsafe impl<
4708        D: fidl::encoding::ResourceDialect,
4709        T0: fidl::encoding::Encode<RingBufferProperties, D>,
4710    > fidl::encoding::Encode<RingBufferGetPropertiesResponse, D> for (T0,)
4711    {
4712        #[inline]
4713        unsafe fn encode(
4714            self,
4715            encoder: &mut fidl::encoding::Encoder<'_, D>,
4716            offset: usize,
4717            depth: fidl::encoding::Depth,
4718        ) -> fidl::Result<()> {
4719            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4720            // Zero out padding regions. There's no need to apply masks
4721            // because the unmasked parts will be overwritten by fields.
4722            // Write the fields.
4723            self.0.encode(encoder, offset + 0, depth)?;
4724            Ok(())
4725        }
4726    }
4727
4728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4729        for RingBufferGetPropertiesResponse
4730    {
4731        #[inline(always)]
4732        fn new_empty() -> Self {
4733            Self { properties: fidl::new_empty!(RingBufferProperties, D) }
4734        }
4735
4736        #[inline]
4737        unsafe fn decode(
4738            &mut self,
4739            decoder: &mut fidl::encoding::Decoder<'_, D>,
4740            offset: usize,
4741            _depth: fidl::encoding::Depth,
4742        ) -> fidl::Result<()> {
4743            decoder.debug_check_bounds::<Self>(offset);
4744            // Verify that padding bytes are zero.
4745            fidl::decode!(
4746                RingBufferProperties,
4747                D,
4748                &mut self.properties,
4749                decoder,
4750                offset + 0,
4751                _depth
4752            )?;
4753            Ok(())
4754        }
4755    }
4756
4757    impl fidl::encoding::ValueTypeMarker for RingBufferGetVmoRequest {
4758        type Borrowed<'a> = &'a Self;
4759        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4760            value
4761        }
4762    }
4763
4764    unsafe impl fidl::encoding::TypeMarker for RingBufferGetVmoRequest {
4765        type Owned = Self;
4766
4767        #[inline(always)]
4768        fn inline_align(_context: fidl::encoding::Context) -> usize {
4769            4
4770        }
4771
4772        #[inline(always)]
4773        fn inline_size(_context: fidl::encoding::Context) -> usize {
4774            8
4775        }
4776        #[inline(always)]
4777        fn encode_is_copy() -> bool {
4778            true
4779        }
4780
4781        #[inline(always)]
4782        fn decode_is_copy() -> bool {
4783            true
4784        }
4785    }
4786
4787    unsafe impl<D: fidl::encoding::ResourceDialect>
4788        fidl::encoding::Encode<RingBufferGetVmoRequest, D> for &RingBufferGetVmoRequest
4789    {
4790        #[inline]
4791        unsafe fn encode(
4792            self,
4793            encoder: &mut fidl::encoding::Encoder<'_, D>,
4794            offset: usize,
4795            _depth: fidl::encoding::Depth,
4796        ) -> fidl::Result<()> {
4797            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4798            unsafe {
4799                // Copy the object into the buffer.
4800                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4801                (buf_ptr as *mut RingBufferGetVmoRequest)
4802                    .write_unaligned((self as *const RingBufferGetVmoRequest).read());
4803                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4804                // done second because the memcpy will write garbage to these bytes.
4805            }
4806            Ok(())
4807        }
4808    }
4809    unsafe impl<
4810        D: fidl::encoding::ResourceDialect,
4811        T0: fidl::encoding::Encode<u32, D>,
4812        T1: fidl::encoding::Encode<u32, D>,
4813    > fidl::encoding::Encode<RingBufferGetVmoRequest, D> for (T0, T1)
4814    {
4815        #[inline]
4816        unsafe fn encode(
4817            self,
4818            encoder: &mut fidl::encoding::Encoder<'_, D>,
4819            offset: usize,
4820            depth: fidl::encoding::Depth,
4821        ) -> fidl::Result<()> {
4822            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4823            // Zero out padding regions. There's no need to apply masks
4824            // because the unmasked parts will be overwritten by fields.
4825            // Write the fields.
4826            self.0.encode(encoder, offset + 0, depth)?;
4827            self.1.encode(encoder, offset + 4, depth)?;
4828            Ok(())
4829        }
4830    }
4831
4832    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4833        for RingBufferGetVmoRequest
4834    {
4835        #[inline(always)]
4836        fn new_empty() -> Self {
4837            Self {
4838                min_frames: fidl::new_empty!(u32, D),
4839                clock_recovery_notifications_per_ring: fidl::new_empty!(u32, D),
4840            }
4841        }
4842
4843        #[inline]
4844        unsafe fn decode(
4845            &mut self,
4846            decoder: &mut fidl::encoding::Decoder<'_, D>,
4847            offset: usize,
4848            _depth: fidl::encoding::Depth,
4849        ) -> fidl::Result<()> {
4850            decoder.debug_check_bounds::<Self>(offset);
4851            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4852            // Verify that padding bytes are zero.
4853            // Copy from the buffer into the object.
4854            unsafe {
4855                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4856            }
4857            Ok(())
4858        }
4859    }
4860
4861    impl fidl::encoding::ValueTypeMarker for RingBufferPositionInfo {
4862        type Borrowed<'a> = &'a Self;
4863        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4864            value
4865        }
4866    }
4867
4868    unsafe impl fidl::encoding::TypeMarker for RingBufferPositionInfo {
4869        type Owned = Self;
4870
4871        #[inline(always)]
4872        fn inline_align(_context: fidl::encoding::Context) -> usize {
4873            8
4874        }
4875
4876        #[inline(always)]
4877        fn inline_size(_context: fidl::encoding::Context) -> usize {
4878            16
4879        }
4880    }
4881
4882    unsafe impl<D: fidl::encoding::ResourceDialect>
4883        fidl::encoding::Encode<RingBufferPositionInfo, D> for &RingBufferPositionInfo
4884    {
4885        #[inline]
4886        unsafe fn encode(
4887            self,
4888            encoder: &mut fidl::encoding::Encoder<'_, D>,
4889            offset: usize,
4890            _depth: fidl::encoding::Depth,
4891        ) -> fidl::Result<()> {
4892            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4893            unsafe {
4894                // Copy the object into the buffer.
4895                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4896                (buf_ptr as *mut RingBufferPositionInfo)
4897                    .write_unaligned((self as *const RingBufferPositionInfo).read());
4898                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4899                // done second because the memcpy will write garbage to these bytes.
4900                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4901                let padding_mask = 0xffffffff00000000u64;
4902                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4903            }
4904            Ok(())
4905        }
4906    }
4907    unsafe impl<
4908        D: fidl::encoding::ResourceDialect,
4909        T0: fidl::encoding::Encode<i64, D>,
4910        T1: fidl::encoding::Encode<u32, D>,
4911    > fidl::encoding::Encode<RingBufferPositionInfo, D> for (T0, T1)
4912    {
4913        #[inline]
4914        unsafe fn encode(
4915            self,
4916            encoder: &mut fidl::encoding::Encoder<'_, D>,
4917            offset: usize,
4918            depth: fidl::encoding::Depth,
4919        ) -> fidl::Result<()> {
4920            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4921            // Zero out padding regions. There's no need to apply masks
4922            // because the unmasked parts will be overwritten by fields.
4923            unsafe {
4924                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4925                (ptr as *mut u64).write_unaligned(0);
4926            }
4927            // Write the fields.
4928            self.0.encode(encoder, offset + 0, depth)?;
4929            self.1.encode(encoder, offset + 8, depth)?;
4930            Ok(())
4931        }
4932    }
4933
4934    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4935        for RingBufferPositionInfo
4936    {
4937        #[inline(always)]
4938        fn new_empty() -> Self {
4939            Self { timestamp: fidl::new_empty!(i64, D), position: fidl::new_empty!(u32, D) }
4940        }
4941
4942        #[inline]
4943        unsafe fn decode(
4944            &mut self,
4945            decoder: &mut fidl::encoding::Decoder<'_, D>,
4946            offset: usize,
4947            _depth: fidl::encoding::Depth,
4948        ) -> fidl::Result<()> {
4949            decoder.debug_check_bounds::<Self>(offset);
4950            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4951            // Verify that padding bytes are zero.
4952            let ptr = unsafe { buf_ptr.offset(8) };
4953            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4954            let mask = 0xffffffff00000000u64;
4955            let maskedval = padval & mask;
4956            if maskedval != 0 {
4957                return Err(fidl::Error::NonZeroPadding {
4958                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4959                });
4960            }
4961            // Copy from the buffer into the object.
4962            unsafe {
4963                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4964            }
4965            Ok(())
4966        }
4967    }
4968
4969    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsRequest {
4970        type Borrowed<'a> = &'a Self;
4971        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4972            value
4973        }
4974    }
4975
4976    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsRequest {
4977        type Owned = Self;
4978
4979        #[inline(always)]
4980        fn inline_align(_context: fidl::encoding::Context) -> usize {
4981            8
4982        }
4983
4984        #[inline(always)]
4985        fn inline_size(_context: fidl::encoding::Context) -> usize {
4986            8
4987        }
4988        #[inline(always)]
4989        fn encode_is_copy() -> bool {
4990            true
4991        }
4992
4993        #[inline(always)]
4994        fn decode_is_copy() -> bool {
4995            true
4996        }
4997    }
4998
4999    unsafe impl<D: fidl::encoding::ResourceDialect>
5000        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D>
5001        for &RingBufferSetActiveChannelsRequest
5002    {
5003        #[inline]
5004        unsafe fn encode(
5005            self,
5006            encoder: &mut fidl::encoding::Encoder<'_, D>,
5007            offset: usize,
5008            _depth: fidl::encoding::Depth,
5009        ) -> fidl::Result<()> {
5010            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5011            unsafe {
5012                // Copy the object into the buffer.
5013                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5014                (buf_ptr as *mut RingBufferSetActiveChannelsRequest)
5015                    .write_unaligned((self as *const RingBufferSetActiveChannelsRequest).read());
5016                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5017                // done second because the memcpy will write garbage to these bytes.
5018            }
5019            Ok(())
5020        }
5021    }
5022    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
5023        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D> for (T0,)
5024    {
5025        #[inline]
5026        unsafe fn encode(
5027            self,
5028            encoder: &mut fidl::encoding::Encoder<'_, D>,
5029            offset: usize,
5030            depth: fidl::encoding::Depth,
5031        ) -> fidl::Result<()> {
5032            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5033            // Zero out padding regions. There's no need to apply masks
5034            // because the unmasked parts will be overwritten by fields.
5035            // Write the fields.
5036            self.0.encode(encoder, offset + 0, depth)?;
5037            Ok(())
5038        }
5039    }
5040
5041    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5042        for RingBufferSetActiveChannelsRequest
5043    {
5044        #[inline(always)]
5045        fn new_empty() -> Self {
5046            Self { active_channels_bitmask: fidl::new_empty!(u64, D) }
5047        }
5048
5049        #[inline]
5050        unsafe fn decode(
5051            &mut self,
5052            decoder: &mut fidl::encoding::Decoder<'_, D>,
5053            offset: usize,
5054            _depth: fidl::encoding::Depth,
5055        ) -> fidl::Result<()> {
5056            decoder.debug_check_bounds::<Self>(offset);
5057            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5058            // Verify that padding bytes are zero.
5059            // Copy from the buffer into the object.
5060            unsafe {
5061                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5062            }
5063            Ok(())
5064        }
5065    }
5066
5067    impl fidl::encoding::ValueTypeMarker for RingBufferStartResponse {
5068        type Borrowed<'a> = &'a Self;
5069        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5070            value
5071        }
5072    }
5073
5074    unsafe impl fidl::encoding::TypeMarker for RingBufferStartResponse {
5075        type Owned = Self;
5076
5077        #[inline(always)]
5078        fn inline_align(_context: fidl::encoding::Context) -> usize {
5079            8
5080        }
5081
5082        #[inline(always)]
5083        fn inline_size(_context: fidl::encoding::Context) -> usize {
5084            8
5085        }
5086        #[inline(always)]
5087        fn encode_is_copy() -> bool {
5088            true
5089        }
5090
5091        #[inline(always)]
5092        fn decode_is_copy() -> bool {
5093            true
5094        }
5095    }
5096
5097    unsafe impl<D: fidl::encoding::ResourceDialect>
5098        fidl::encoding::Encode<RingBufferStartResponse, D> for &RingBufferStartResponse
5099    {
5100        #[inline]
5101        unsafe fn encode(
5102            self,
5103            encoder: &mut fidl::encoding::Encoder<'_, D>,
5104            offset: usize,
5105            _depth: fidl::encoding::Depth,
5106        ) -> fidl::Result<()> {
5107            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5108            unsafe {
5109                // Copy the object into the buffer.
5110                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5111                (buf_ptr as *mut RingBufferStartResponse)
5112                    .write_unaligned((self as *const RingBufferStartResponse).read());
5113                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5114                // done second because the memcpy will write garbage to these bytes.
5115            }
5116            Ok(())
5117        }
5118    }
5119    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5120        fidl::encoding::Encode<RingBufferStartResponse, D> for (T0,)
5121    {
5122        #[inline]
5123        unsafe fn encode(
5124            self,
5125            encoder: &mut fidl::encoding::Encoder<'_, D>,
5126            offset: usize,
5127            depth: fidl::encoding::Depth,
5128        ) -> fidl::Result<()> {
5129            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5130            // Zero out padding regions. There's no need to apply masks
5131            // because the unmasked parts will be overwritten by fields.
5132            // Write the fields.
5133            self.0.encode(encoder, offset + 0, depth)?;
5134            Ok(())
5135        }
5136    }
5137
5138    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5139        for RingBufferStartResponse
5140    {
5141        #[inline(always)]
5142        fn new_empty() -> Self {
5143            Self { start_time: fidl::new_empty!(i64, D) }
5144        }
5145
5146        #[inline]
5147        unsafe fn decode(
5148            &mut self,
5149            decoder: &mut fidl::encoding::Decoder<'_, D>,
5150            offset: usize,
5151            _depth: fidl::encoding::Depth,
5152        ) -> fidl::Result<()> {
5153            decoder.debug_check_bounds::<Self>(offset);
5154            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5155            // Verify that padding bytes are zero.
5156            // Copy from the buffer into the object.
5157            unsafe {
5158                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5159            }
5160            Ok(())
5161        }
5162    }
5163
5164    impl fidl::encoding::ValueTypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5165        type Borrowed<'a> = &'a Self;
5166        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5167            value
5168        }
5169    }
5170
5171    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5172        type Owned = Self;
5173
5174        #[inline(always)]
5175        fn inline_align(_context: fidl::encoding::Context) -> usize {
5176            8
5177        }
5178
5179        #[inline(always)]
5180        fn inline_size(_context: fidl::encoding::Context) -> usize {
5181            16
5182        }
5183    }
5184
5185    unsafe impl<D: fidl::encoding::ResourceDialect>
5186        fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D>
5187        for &RingBufferWatchClockRecoveryPositionInfoResponse
5188    {
5189        #[inline]
5190        unsafe fn encode(
5191            self,
5192            encoder: &mut fidl::encoding::Encoder<'_, D>,
5193            offset: usize,
5194            _depth: fidl::encoding::Depth,
5195        ) -> fidl::Result<()> {
5196            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5197            unsafe {
5198                // Copy the object into the buffer.
5199                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5200                (buf_ptr as *mut RingBufferWatchClockRecoveryPositionInfoResponse).write_unaligned(
5201                    (self as *const RingBufferWatchClockRecoveryPositionInfoResponse).read(),
5202                );
5203                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5204                // done second because the memcpy will write garbage to these bytes.
5205                let padding_ptr = buf_ptr.offset(8) as *mut u64;
5206                let padding_mask = 0xffffffff00000000u64;
5207                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5208            }
5209            Ok(())
5210        }
5211    }
5212    unsafe impl<
5213        D: fidl::encoding::ResourceDialect,
5214        T0: fidl::encoding::Encode<RingBufferPositionInfo, D>,
5215    > fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D> for (T0,)
5216    {
5217        #[inline]
5218        unsafe fn encode(
5219            self,
5220            encoder: &mut fidl::encoding::Encoder<'_, D>,
5221            offset: usize,
5222            depth: fidl::encoding::Depth,
5223        ) -> fidl::Result<()> {
5224            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5225            // Zero out padding regions. There's no need to apply masks
5226            // because the unmasked parts will be overwritten by fields.
5227            // Write the fields.
5228            self.0.encode(encoder, offset + 0, depth)?;
5229            Ok(())
5230        }
5231    }
5232
5233    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5234        for RingBufferWatchClockRecoveryPositionInfoResponse
5235    {
5236        #[inline(always)]
5237        fn new_empty() -> Self {
5238            Self { position_info: fidl::new_empty!(RingBufferPositionInfo, D) }
5239        }
5240
5241        #[inline]
5242        unsafe fn decode(
5243            &mut self,
5244            decoder: &mut fidl::encoding::Decoder<'_, D>,
5245            offset: usize,
5246            _depth: fidl::encoding::Depth,
5247        ) -> fidl::Result<()> {
5248            decoder.debug_check_bounds::<Self>(offset);
5249            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5250            // Verify that padding bytes are zero.
5251            let ptr = unsafe { buf_ptr.offset(8) };
5252            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5253            let mask = 0xffffffff00000000u64;
5254            let maskedval = padval & mask;
5255            if maskedval != 0 {
5256                return Err(fidl::Error::NonZeroPadding {
5257                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
5258                });
5259            }
5260            // Copy from the buffer into the object.
5261            unsafe {
5262                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
5263            }
5264            Ok(())
5265        }
5266    }
5267
5268    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsResponse {
5269        type Borrowed<'a> = &'a Self;
5270        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5271            value
5272        }
5273    }
5274
5275    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsResponse {
5276        type Owned = Self;
5277
5278        #[inline(always)]
5279        fn inline_align(_context: fidl::encoding::Context) -> usize {
5280            8
5281        }
5282
5283        #[inline(always)]
5284        fn inline_size(_context: fidl::encoding::Context) -> usize {
5285            8
5286        }
5287        #[inline(always)]
5288        fn encode_is_copy() -> bool {
5289            true
5290        }
5291
5292        #[inline(always)]
5293        fn decode_is_copy() -> bool {
5294            true
5295        }
5296    }
5297
5298    unsafe impl<D: fidl::encoding::ResourceDialect>
5299        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D>
5300        for &RingBufferSetActiveChannelsResponse
5301    {
5302        #[inline]
5303        unsafe fn encode(
5304            self,
5305            encoder: &mut fidl::encoding::Encoder<'_, D>,
5306            offset: usize,
5307            _depth: fidl::encoding::Depth,
5308        ) -> fidl::Result<()> {
5309            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5310            unsafe {
5311                // Copy the object into the buffer.
5312                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5313                (buf_ptr as *mut RingBufferSetActiveChannelsResponse)
5314                    .write_unaligned((self as *const RingBufferSetActiveChannelsResponse).read());
5315                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5316                // done second because the memcpy will write garbage to these bytes.
5317            }
5318            Ok(())
5319        }
5320    }
5321    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5322        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D> for (T0,)
5323    {
5324        #[inline]
5325        unsafe fn encode(
5326            self,
5327            encoder: &mut fidl::encoding::Encoder<'_, D>,
5328            offset: usize,
5329            depth: fidl::encoding::Depth,
5330        ) -> fidl::Result<()> {
5331            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5332            // Zero out padding regions. There's no need to apply masks
5333            // because the unmasked parts will be overwritten by fields.
5334            // Write the fields.
5335            self.0.encode(encoder, offset + 0, depth)?;
5336            Ok(())
5337        }
5338    }
5339
5340    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5341        for RingBufferSetActiveChannelsResponse
5342    {
5343        #[inline(always)]
5344        fn new_empty() -> Self {
5345            Self { set_time: fidl::new_empty!(i64, D) }
5346        }
5347
5348        #[inline]
5349        unsafe fn decode(
5350            &mut self,
5351            decoder: &mut fidl::encoding::Decoder<'_, D>,
5352            offset: usize,
5353            _depth: fidl::encoding::Depth,
5354        ) -> fidl::Result<()> {
5355            decoder.debug_check_bounds::<Self>(offset);
5356            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5357            // Verify that padding bytes are zero.
5358            // Copy from the buffer into the object.
5359            unsafe {
5360                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5361            }
5362            Ok(())
5363        }
5364    }
5365
5366    impl fidl::encoding::ValueTypeMarker for RingBufferWatchDelayInfoResponse {
5367        type Borrowed<'a> = &'a Self;
5368        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5369            value
5370        }
5371    }
5372
5373    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchDelayInfoResponse {
5374        type Owned = Self;
5375
5376        #[inline(always)]
5377        fn inline_align(_context: fidl::encoding::Context) -> usize {
5378            8
5379        }
5380
5381        #[inline(always)]
5382        fn inline_size(_context: fidl::encoding::Context) -> usize {
5383            16
5384        }
5385    }
5386
5387    unsafe impl<D: fidl::encoding::ResourceDialect>
5388        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D>
5389        for &RingBufferWatchDelayInfoResponse
5390    {
5391        #[inline]
5392        unsafe fn encode(
5393            self,
5394            encoder: &mut fidl::encoding::Encoder<'_, D>,
5395            offset: usize,
5396            _depth: fidl::encoding::Depth,
5397        ) -> fidl::Result<()> {
5398            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5399            // Delegate to tuple encoding.
5400            fidl::encoding::Encode::<RingBufferWatchDelayInfoResponse, D>::encode(
5401                (<DelayInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.delay_info),),
5402                encoder,
5403                offset,
5404                _depth,
5405            )
5406        }
5407    }
5408    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DelayInfo, D>>
5409        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D> for (T0,)
5410    {
5411        #[inline]
5412        unsafe fn encode(
5413            self,
5414            encoder: &mut fidl::encoding::Encoder<'_, D>,
5415            offset: usize,
5416            depth: fidl::encoding::Depth,
5417        ) -> fidl::Result<()> {
5418            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5419            // Zero out padding regions. There's no need to apply masks
5420            // because the unmasked parts will be overwritten by fields.
5421            // Write the fields.
5422            self.0.encode(encoder, offset + 0, depth)?;
5423            Ok(())
5424        }
5425    }
5426
5427    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5428        for RingBufferWatchDelayInfoResponse
5429    {
5430        #[inline(always)]
5431        fn new_empty() -> Self {
5432            Self { delay_info: fidl::new_empty!(DelayInfo, D) }
5433        }
5434
5435        #[inline]
5436        unsafe fn decode(
5437            &mut self,
5438            decoder: &mut fidl::encoding::Decoder<'_, D>,
5439            offset: usize,
5440            _depth: fidl::encoding::Depth,
5441        ) -> fidl::Result<()> {
5442            decoder.debug_check_bounds::<Self>(offset);
5443            // Verify that padding bytes are zero.
5444            fidl::decode!(DelayInfo, D, &mut self.delay_info, decoder, offset + 0, _depth)?;
5445            Ok(())
5446        }
5447    }
5448
5449    impl fidl::encoding::ValueTypeMarker for StreamConfigGetPropertiesResponse {
5450        type Borrowed<'a> = &'a Self;
5451        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5452            value
5453        }
5454    }
5455
5456    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetPropertiesResponse {
5457        type Owned = Self;
5458
5459        #[inline(always)]
5460        fn inline_align(_context: fidl::encoding::Context) -> usize {
5461            8
5462        }
5463
5464        #[inline(always)]
5465        fn inline_size(_context: fidl::encoding::Context) -> usize {
5466            16
5467        }
5468    }
5469
5470    unsafe impl<D: fidl::encoding::ResourceDialect>
5471        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D>
5472        for &StreamConfigGetPropertiesResponse
5473    {
5474        #[inline]
5475        unsafe fn encode(
5476            self,
5477            encoder: &mut fidl::encoding::Encoder<'_, D>,
5478            offset: usize,
5479            _depth: fidl::encoding::Depth,
5480        ) -> fidl::Result<()> {
5481            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5482            // Delegate to tuple encoding.
5483            fidl::encoding::Encode::<StreamConfigGetPropertiesResponse, D>::encode(
5484                (<StreamProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
5485                encoder,
5486                offset,
5487                _depth,
5488            )
5489        }
5490    }
5491    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamProperties, D>>
5492        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D> for (T0,)
5493    {
5494        #[inline]
5495        unsafe fn encode(
5496            self,
5497            encoder: &mut fidl::encoding::Encoder<'_, D>,
5498            offset: usize,
5499            depth: fidl::encoding::Depth,
5500        ) -> fidl::Result<()> {
5501            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5502            // Zero out padding regions. There's no need to apply masks
5503            // because the unmasked parts will be overwritten by fields.
5504            // Write the fields.
5505            self.0.encode(encoder, offset + 0, depth)?;
5506            Ok(())
5507        }
5508    }
5509
5510    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5511        for StreamConfigGetPropertiesResponse
5512    {
5513        #[inline(always)]
5514        fn new_empty() -> Self {
5515            Self { properties: fidl::new_empty!(StreamProperties, D) }
5516        }
5517
5518        #[inline]
5519        unsafe fn decode(
5520            &mut self,
5521            decoder: &mut fidl::encoding::Decoder<'_, D>,
5522            offset: usize,
5523            _depth: fidl::encoding::Depth,
5524        ) -> fidl::Result<()> {
5525            decoder.debug_check_bounds::<Self>(offset);
5526            // Verify that padding bytes are zero.
5527            fidl::decode!(StreamProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
5528            Ok(())
5529        }
5530    }
5531
5532    impl fidl::encoding::ValueTypeMarker for StreamConfigGetSupportedFormatsResponse {
5533        type Borrowed<'a> = &'a Self;
5534        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5535            value
5536        }
5537    }
5538
5539    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetSupportedFormatsResponse {
5540        type Owned = Self;
5541
5542        #[inline(always)]
5543        fn inline_align(_context: fidl::encoding::Context) -> usize {
5544            8
5545        }
5546
5547        #[inline(always)]
5548        fn inline_size(_context: fidl::encoding::Context) -> usize {
5549            16
5550        }
5551    }
5552
5553    unsafe impl<D: fidl::encoding::ResourceDialect>
5554        fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D>
5555        for &StreamConfigGetSupportedFormatsResponse
5556    {
5557        #[inline]
5558        unsafe fn encode(
5559            self,
5560            encoder: &mut fidl::encoding::Encoder<'_, D>,
5561            offset: usize,
5562            _depth: fidl::encoding::Depth,
5563        ) -> fidl::Result<()> {
5564            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5565            // Delegate to tuple encoding.
5566            fidl::encoding::Encode::<StreamConfigGetSupportedFormatsResponse, D>::encode(
5567                (
5568                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.supported_formats),
5569                ),
5570                encoder, offset, _depth
5571            )
5572        }
5573    }
5574    unsafe impl<
5575        D: fidl::encoding::ResourceDialect,
5576        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
5577    > fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D> for (T0,)
5578    {
5579        #[inline]
5580        unsafe fn encode(
5581            self,
5582            encoder: &mut fidl::encoding::Encoder<'_, D>,
5583            offset: usize,
5584            depth: fidl::encoding::Depth,
5585        ) -> fidl::Result<()> {
5586            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5587            // Zero out padding regions. There's no need to apply masks
5588            // because the unmasked parts will be overwritten by fields.
5589            // Write the fields.
5590            self.0.encode(encoder, offset + 0, depth)?;
5591            Ok(())
5592        }
5593    }
5594
5595    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5596        for StreamConfigGetSupportedFormatsResponse
5597    {
5598        #[inline(always)]
5599        fn new_empty() -> Self {
5600            Self {
5601                supported_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
5602            }
5603        }
5604
5605        #[inline]
5606        unsafe fn decode(
5607            &mut self,
5608            decoder: &mut fidl::encoding::Decoder<'_, D>,
5609            offset: usize,
5610            _depth: fidl::encoding::Depth,
5611        ) -> fidl::Result<()> {
5612            decoder.debug_check_bounds::<Self>(offset);
5613            // Verify that padding bytes are zero.
5614            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.supported_formats, decoder, offset + 0, _depth)?;
5615            Ok(())
5616        }
5617    }
5618
5619    impl fidl::encoding::ValueTypeMarker for StreamConfigSetGainRequest {
5620        type Borrowed<'a> = &'a Self;
5621        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5622            value
5623        }
5624    }
5625
5626    unsafe impl fidl::encoding::TypeMarker for StreamConfigSetGainRequest {
5627        type Owned = Self;
5628
5629        #[inline(always)]
5630        fn inline_align(_context: fidl::encoding::Context) -> usize {
5631            8
5632        }
5633
5634        #[inline(always)]
5635        fn inline_size(_context: fidl::encoding::Context) -> usize {
5636            16
5637        }
5638    }
5639
5640    unsafe impl<D: fidl::encoding::ResourceDialect>
5641        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for &StreamConfigSetGainRequest
5642    {
5643        #[inline]
5644        unsafe fn encode(
5645            self,
5646            encoder: &mut fidl::encoding::Encoder<'_, D>,
5647            offset: usize,
5648            _depth: fidl::encoding::Depth,
5649        ) -> fidl::Result<()> {
5650            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5651            // Delegate to tuple encoding.
5652            fidl::encoding::Encode::<StreamConfigSetGainRequest, D>::encode(
5653                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.target_state),),
5654                encoder,
5655                offset,
5656                _depth,
5657            )
5658        }
5659    }
5660    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5661        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for (T0,)
5662    {
5663        #[inline]
5664        unsafe fn encode(
5665            self,
5666            encoder: &mut fidl::encoding::Encoder<'_, D>,
5667            offset: usize,
5668            depth: fidl::encoding::Depth,
5669        ) -> fidl::Result<()> {
5670            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5671            // Zero out padding regions. There's no need to apply masks
5672            // because the unmasked parts will be overwritten by fields.
5673            // Write the fields.
5674            self.0.encode(encoder, offset + 0, depth)?;
5675            Ok(())
5676        }
5677    }
5678
5679    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5680        for StreamConfigSetGainRequest
5681    {
5682        #[inline(always)]
5683        fn new_empty() -> Self {
5684            Self { target_state: fidl::new_empty!(GainState, D) }
5685        }
5686
5687        #[inline]
5688        unsafe fn decode(
5689            &mut self,
5690            decoder: &mut fidl::encoding::Decoder<'_, D>,
5691            offset: usize,
5692            _depth: fidl::encoding::Depth,
5693        ) -> fidl::Result<()> {
5694            decoder.debug_check_bounds::<Self>(offset);
5695            // Verify that padding bytes are zero.
5696            fidl::decode!(GainState, D, &mut self.target_state, decoder, offset + 0, _depth)?;
5697            Ok(())
5698        }
5699    }
5700
5701    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchGainStateResponse {
5702        type Borrowed<'a> = &'a Self;
5703        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5704            value
5705        }
5706    }
5707
5708    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchGainStateResponse {
5709        type Owned = Self;
5710
5711        #[inline(always)]
5712        fn inline_align(_context: fidl::encoding::Context) -> usize {
5713            8
5714        }
5715
5716        #[inline(always)]
5717        fn inline_size(_context: fidl::encoding::Context) -> usize {
5718            16
5719        }
5720    }
5721
5722    unsafe impl<D: fidl::encoding::ResourceDialect>
5723        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D>
5724        for &StreamConfigWatchGainStateResponse
5725    {
5726        #[inline]
5727        unsafe fn encode(
5728            self,
5729            encoder: &mut fidl::encoding::Encoder<'_, D>,
5730            offset: usize,
5731            _depth: fidl::encoding::Depth,
5732        ) -> fidl::Result<()> {
5733            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5734            // Delegate to tuple encoding.
5735            fidl::encoding::Encode::<StreamConfigWatchGainStateResponse, D>::encode(
5736                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_state),),
5737                encoder,
5738                offset,
5739                _depth,
5740            )
5741        }
5742    }
5743    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5744        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D> for (T0,)
5745    {
5746        #[inline]
5747        unsafe fn encode(
5748            self,
5749            encoder: &mut fidl::encoding::Encoder<'_, D>,
5750            offset: usize,
5751            depth: fidl::encoding::Depth,
5752        ) -> fidl::Result<()> {
5753            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5754            // Zero out padding regions. There's no need to apply masks
5755            // because the unmasked parts will be overwritten by fields.
5756            // Write the fields.
5757            self.0.encode(encoder, offset + 0, depth)?;
5758            Ok(())
5759        }
5760    }
5761
5762    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5763        for StreamConfigWatchGainStateResponse
5764    {
5765        #[inline(always)]
5766        fn new_empty() -> Self {
5767            Self { gain_state: fidl::new_empty!(GainState, D) }
5768        }
5769
5770        #[inline]
5771        unsafe fn decode(
5772            &mut self,
5773            decoder: &mut fidl::encoding::Decoder<'_, D>,
5774            offset: usize,
5775            _depth: fidl::encoding::Depth,
5776        ) -> fidl::Result<()> {
5777            decoder.debug_check_bounds::<Self>(offset);
5778            // Verify that padding bytes are zero.
5779            fidl::decode!(GainState, D, &mut self.gain_state, decoder, offset + 0, _depth)?;
5780            Ok(())
5781        }
5782    }
5783
5784    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchPlugStateResponse {
5785        type Borrowed<'a> = &'a Self;
5786        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5787            value
5788        }
5789    }
5790
5791    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchPlugStateResponse {
5792        type Owned = Self;
5793
5794        #[inline(always)]
5795        fn inline_align(_context: fidl::encoding::Context) -> usize {
5796            8
5797        }
5798
5799        #[inline(always)]
5800        fn inline_size(_context: fidl::encoding::Context) -> usize {
5801            16
5802        }
5803    }
5804
5805    unsafe impl<D: fidl::encoding::ResourceDialect>
5806        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D>
5807        for &StreamConfigWatchPlugStateResponse
5808    {
5809        #[inline]
5810        unsafe fn encode(
5811            self,
5812            encoder: &mut fidl::encoding::Encoder<'_, D>,
5813            offset: usize,
5814            _depth: fidl::encoding::Depth,
5815        ) -> fidl::Result<()> {
5816            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5817            // Delegate to tuple encoding.
5818            fidl::encoding::Encode::<StreamConfigWatchPlugStateResponse, D>::encode(
5819                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
5820                encoder,
5821                offset,
5822                _depth,
5823            )
5824        }
5825    }
5826    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
5827        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D> for (T0,)
5828    {
5829        #[inline]
5830        unsafe fn encode(
5831            self,
5832            encoder: &mut fidl::encoding::Encoder<'_, D>,
5833            offset: usize,
5834            depth: fidl::encoding::Depth,
5835        ) -> fidl::Result<()> {
5836            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5837            // Zero out padding regions. There's no need to apply masks
5838            // because the unmasked parts will be overwritten by fields.
5839            // Write the fields.
5840            self.0.encode(encoder, offset + 0, depth)?;
5841            Ok(())
5842        }
5843    }
5844
5845    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5846        for StreamConfigWatchPlugStateResponse
5847    {
5848        #[inline(always)]
5849        fn new_empty() -> Self {
5850            Self { plug_state: fidl::new_empty!(PlugState, D) }
5851        }
5852
5853        #[inline]
5854        unsafe fn decode(
5855            &mut self,
5856            decoder: &mut fidl::encoding::Decoder<'_, D>,
5857            offset: usize,
5858            _depth: fidl::encoding::Depth,
5859        ) -> fidl::Result<()> {
5860            decoder.debug_check_bounds::<Self>(offset);
5861            // Verify that padding bytes are zero.
5862            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
5863            Ok(())
5864        }
5865    }
5866
5867    impl AllocateVmosConfig {
5868        #[inline(always)]
5869        fn max_ordinal_present(&self) -> u64 {
5870            if let Some(_) = self.vmo_count {
5871                return 2;
5872            }
5873            if let Some(_) = self.min_vmo_size {
5874                return 1;
5875            }
5876            0
5877        }
5878    }
5879
5880    impl fidl::encoding::ValueTypeMarker for AllocateVmosConfig {
5881        type Borrowed<'a> = &'a Self;
5882        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5883            value
5884        }
5885    }
5886
5887    unsafe impl fidl::encoding::TypeMarker for AllocateVmosConfig {
5888        type Owned = Self;
5889
5890        #[inline(always)]
5891        fn inline_align(_context: fidl::encoding::Context) -> usize {
5892            8
5893        }
5894
5895        #[inline(always)]
5896        fn inline_size(_context: fidl::encoding::Context) -> usize {
5897            16
5898        }
5899    }
5900
5901    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AllocateVmosConfig, D>
5902        for &AllocateVmosConfig
5903    {
5904        unsafe fn encode(
5905            self,
5906            encoder: &mut fidl::encoding::Encoder<'_, D>,
5907            offset: usize,
5908            mut depth: fidl::encoding::Depth,
5909        ) -> fidl::Result<()> {
5910            encoder.debug_check_bounds::<AllocateVmosConfig>(offset);
5911            // Vector header
5912            let max_ordinal: u64 = self.max_ordinal_present();
5913            encoder.write_num(max_ordinal, offset);
5914            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5915            // Calling encoder.out_of_line_offset(0) is not allowed.
5916            if max_ordinal == 0 {
5917                return Ok(());
5918            }
5919            depth.increment()?;
5920            let envelope_size = 8;
5921            let bytes_len = max_ordinal as usize * envelope_size;
5922            #[allow(unused_variables)]
5923            let offset = encoder.out_of_line_offset(bytes_len);
5924            let mut _prev_end_offset: usize = 0;
5925            if 1 > max_ordinal {
5926                return Ok(());
5927            }
5928
5929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5930            // are envelope_size bytes.
5931            let cur_offset: usize = (1 - 1) * envelope_size;
5932
5933            // Zero reserved fields.
5934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5935
5936            // Safety:
5937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5939            //   envelope_size bytes, there is always sufficient room.
5940            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5941                self.min_vmo_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5942                encoder,
5943                offset + cur_offset,
5944                depth,
5945            )?;
5946
5947            _prev_end_offset = cur_offset + envelope_size;
5948            if 2 > max_ordinal {
5949                return Ok(());
5950            }
5951
5952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5953            // are envelope_size bytes.
5954            let cur_offset: usize = (2 - 1) * envelope_size;
5955
5956            // Zero reserved fields.
5957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5958
5959            // Safety:
5960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5962            //   envelope_size bytes, there is always sufficient room.
5963            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5964                self.vmo_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5965                encoder,
5966                offset + cur_offset,
5967                depth,
5968            )?;
5969
5970            _prev_end_offset = cur_offset + envelope_size;
5971
5972            Ok(())
5973        }
5974    }
5975
5976    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AllocateVmosConfig {
5977        #[inline(always)]
5978        fn new_empty() -> Self {
5979            Self::default()
5980        }
5981
5982        unsafe fn decode(
5983            &mut self,
5984            decoder: &mut fidl::encoding::Decoder<'_, D>,
5985            offset: usize,
5986            mut depth: fidl::encoding::Depth,
5987        ) -> fidl::Result<()> {
5988            decoder.debug_check_bounds::<Self>(offset);
5989            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5990                None => return Err(fidl::Error::NotNullable),
5991                Some(len) => len,
5992            };
5993            // Calling decoder.out_of_line_offset(0) is not allowed.
5994            if len == 0 {
5995                return Ok(());
5996            };
5997            depth.increment()?;
5998            let envelope_size = 8;
5999            let bytes_len = len * envelope_size;
6000            let offset = decoder.out_of_line_offset(bytes_len)?;
6001            // Decode the envelope for each type.
6002            let mut _next_ordinal_to_read = 0;
6003            let mut next_offset = offset;
6004            let end_offset = offset + bytes_len;
6005            _next_ordinal_to_read += 1;
6006            if next_offset >= end_offset {
6007                return Ok(());
6008            }
6009
6010            // Decode unknown envelopes for gaps in ordinals.
6011            while _next_ordinal_to_read < 1 {
6012                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6013                _next_ordinal_to_read += 1;
6014                next_offset += envelope_size;
6015            }
6016
6017            let next_out_of_line = decoder.next_out_of_line();
6018            let handles_before = decoder.remaining_handles();
6019            if let Some((inlined, num_bytes, num_handles)) =
6020                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6021            {
6022                let member_inline_size =
6023                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6024                if inlined != (member_inline_size <= 4) {
6025                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6026                }
6027                let inner_offset;
6028                let mut inner_depth = depth.clone();
6029                if inlined {
6030                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6031                    inner_offset = next_offset;
6032                } else {
6033                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6034                    inner_depth.increment()?;
6035                }
6036                let val_ref = self.min_vmo_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
6037                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6038                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6039                {
6040                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6041                }
6042                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6043                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6044                }
6045            }
6046
6047            next_offset += envelope_size;
6048            _next_ordinal_to_read += 1;
6049            if next_offset >= end_offset {
6050                return Ok(());
6051            }
6052
6053            // Decode unknown envelopes for gaps in ordinals.
6054            while _next_ordinal_to_read < 2 {
6055                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6056                _next_ordinal_to_read += 1;
6057                next_offset += envelope_size;
6058            }
6059
6060            let next_out_of_line = decoder.next_out_of_line();
6061            let handles_before = decoder.remaining_handles();
6062            if let Some((inlined, num_bytes, num_handles)) =
6063                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6064            {
6065                let member_inline_size =
6066                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6067                if inlined != (member_inline_size <= 4) {
6068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6069                }
6070                let inner_offset;
6071                let mut inner_depth = depth.clone();
6072                if inlined {
6073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6074                    inner_offset = next_offset;
6075                } else {
6076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6077                    inner_depth.increment()?;
6078                }
6079                let val_ref = self.vmo_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
6080                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6082                {
6083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6084                }
6085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6087                }
6088            }
6089
6090            next_offset += envelope_size;
6091
6092            // Decode the remaining unknown envelopes.
6093            while next_offset < end_offset {
6094                _next_ordinal_to_read += 1;
6095                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6096                next_offset += envelope_size;
6097            }
6098
6099            Ok(())
6100        }
6101    }
6102
6103    impl ChannelAttributes {
6104        #[inline(always)]
6105        fn max_ordinal_present(&self) -> u64 {
6106            if let Some(_) = self.max_frequency {
6107                return 2;
6108            }
6109            if let Some(_) = self.min_frequency {
6110                return 1;
6111            }
6112            0
6113        }
6114    }
6115
6116    impl fidl::encoding::ValueTypeMarker for ChannelAttributes {
6117        type Borrowed<'a> = &'a Self;
6118        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6119            value
6120        }
6121    }
6122
6123    unsafe impl fidl::encoding::TypeMarker for ChannelAttributes {
6124        type Owned = Self;
6125
6126        #[inline(always)]
6127        fn inline_align(_context: fidl::encoding::Context) -> usize {
6128            8
6129        }
6130
6131        #[inline(always)]
6132        fn inline_size(_context: fidl::encoding::Context) -> usize {
6133            16
6134        }
6135    }
6136
6137    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelAttributes, D>
6138        for &ChannelAttributes
6139    {
6140        unsafe fn encode(
6141            self,
6142            encoder: &mut fidl::encoding::Encoder<'_, D>,
6143            offset: usize,
6144            mut depth: fidl::encoding::Depth,
6145        ) -> fidl::Result<()> {
6146            encoder.debug_check_bounds::<ChannelAttributes>(offset);
6147            // Vector header
6148            let max_ordinal: u64 = self.max_ordinal_present();
6149            encoder.write_num(max_ordinal, offset);
6150            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6151            // Calling encoder.out_of_line_offset(0) is not allowed.
6152            if max_ordinal == 0 {
6153                return Ok(());
6154            }
6155            depth.increment()?;
6156            let envelope_size = 8;
6157            let bytes_len = max_ordinal as usize * envelope_size;
6158            #[allow(unused_variables)]
6159            let offset = encoder.out_of_line_offset(bytes_len);
6160            let mut _prev_end_offset: usize = 0;
6161            if 1 > max_ordinal {
6162                return Ok(());
6163            }
6164
6165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6166            // are envelope_size bytes.
6167            let cur_offset: usize = (1 - 1) * envelope_size;
6168
6169            // Zero reserved fields.
6170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6171
6172            // Safety:
6173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6175            //   envelope_size bytes, there is always sufficient room.
6176            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6177                self.min_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6178                encoder,
6179                offset + cur_offset,
6180                depth,
6181            )?;
6182
6183            _prev_end_offset = cur_offset + envelope_size;
6184            if 2 > max_ordinal {
6185                return Ok(());
6186            }
6187
6188            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6189            // are envelope_size bytes.
6190            let cur_offset: usize = (2 - 1) * envelope_size;
6191
6192            // Zero reserved fields.
6193            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6194
6195            // Safety:
6196            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6197            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6198            //   envelope_size bytes, there is always sufficient room.
6199            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6200                self.max_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6201                encoder,
6202                offset + cur_offset,
6203                depth,
6204            )?;
6205
6206            _prev_end_offset = cur_offset + envelope_size;
6207
6208            Ok(())
6209        }
6210    }
6211
6212    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelAttributes {
6213        #[inline(always)]
6214        fn new_empty() -> Self {
6215            Self::default()
6216        }
6217
6218        unsafe fn decode(
6219            &mut self,
6220            decoder: &mut fidl::encoding::Decoder<'_, D>,
6221            offset: usize,
6222            mut depth: fidl::encoding::Depth,
6223        ) -> fidl::Result<()> {
6224            decoder.debug_check_bounds::<Self>(offset);
6225            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6226                None => return Err(fidl::Error::NotNullable),
6227                Some(len) => len,
6228            };
6229            // Calling decoder.out_of_line_offset(0) is not allowed.
6230            if len == 0 {
6231                return Ok(());
6232            };
6233            depth.increment()?;
6234            let envelope_size = 8;
6235            let bytes_len = len * envelope_size;
6236            let offset = decoder.out_of_line_offset(bytes_len)?;
6237            // Decode the envelope for each type.
6238            let mut _next_ordinal_to_read = 0;
6239            let mut next_offset = offset;
6240            let end_offset = offset + bytes_len;
6241            _next_ordinal_to_read += 1;
6242            if next_offset >= end_offset {
6243                return Ok(());
6244            }
6245
6246            // Decode unknown envelopes for gaps in ordinals.
6247            while _next_ordinal_to_read < 1 {
6248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6249                _next_ordinal_to_read += 1;
6250                next_offset += envelope_size;
6251            }
6252
6253            let next_out_of_line = decoder.next_out_of_line();
6254            let handles_before = decoder.remaining_handles();
6255            if let Some((inlined, num_bytes, num_handles)) =
6256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6257            {
6258                let member_inline_size =
6259                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6260                if inlined != (member_inline_size <= 4) {
6261                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6262                }
6263                let inner_offset;
6264                let mut inner_depth = depth.clone();
6265                if inlined {
6266                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6267                    inner_offset = next_offset;
6268                } else {
6269                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6270                    inner_depth.increment()?;
6271                }
6272                let val_ref = self.min_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6273                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6274                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6275                {
6276                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6277                }
6278                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6279                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6280                }
6281            }
6282
6283            next_offset += envelope_size;
6284            _next_ordinal_to_read += 1;
6285            if next_offset >= end_offset {
6286                return Ok(());
6287            }
6288
6289            // Decode unknown envelopes for gaps in ordinals.
6290            while _next_ordinal_to_read < 2 {
6291                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6292                _next_ordinal_to_read += 1;
6293                next_offset += envelope_size;
6294            }
6295
6296            let next_out_of_line = decoder.next_out_of_line();
6297            let handles_before = decoder.remaining_handles();
6298            if let Some((inlined, num_bytes, num_handles)) =
6299                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6300            {
6301                let member_inline_size =
6302                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6303                if inlined != (member_inline_size <= 4) {
6304                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6305                }
6306                let inner_offset;
6307                let mut inner_depth = depth.clone();
6308                if inlined {
6309                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6310                    inner_offset = next_offset;
6311                } else {
6312                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6313                    inner_depth.increment()?;
6314                }
6315                let val_ref = self.max_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6316                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6317                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6318                {
6319                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6320                }
6321                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6322                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6323                }
6324            }
6325
6326            next_offset += envelope_size;
6327
6328            // Decode the remaining unknown envelopes.
6329            while next_offset < end_offset {
6330                _next_ordinal_to_read += 1;
6331                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6332                next_offset += envelope_size;
6333            }
6334
6335            Ok(())
6336        }
6337    }
6338
6339    impl ChannelSet {
6340        #[inline(always)]
6341        fn max_ordinal_present(&self) -> u64 {
6342            if let Some(_) = self.attributes {
6343                return 1;
6344            }
6345            0
6346        }
6347    }
6348
6349    impl fidl::encoding::ValueTypeMarker for ChannelSet {
6350        type Borrowed<'a> = &'a Self;
6351        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6352            value
6353        }
6354    }
6355
6356    unsafe impl fidl::encoding::TypeMarker for ChannelSet {
6357        type Owned = Self;
6358
6359        #[inline(always)]
6360        fn inline_align(_context: fidl::encoding::Context) -> usize {
6361            8
6362        }
6363
6364        #[inline(always)]
6365        fn inline_size(_context: fidl::encoding::Context) -> usize {
6366            16
6367        }
6368    }
6369
6370    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSet, D>
6371        for &ChannelSet
6372    {
6373        unsafe fn encode(
6374            self,
6375            encoder: &mut fidl::encoding::Encoder<'_, D>,
6376            offset: usize,
6377            mut depth: fidl::encoding::Depth,
6378        ) -> fidl::Result<()> {
6379            encoder.debug_check_bounds::<ChannelSet>(offset);
6380            // Vector header
6381            let max_ordinal: u64 = self.max_ordinal_present();
6382            encoder.write_num(max_ordinal, offset);
6383            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6384            // Calling encoder.out_of_line_offset(0) is not allowed.
6385            if max_ordinal == 0 {
6386                return Ok(());
6387            }
6388            depth.increment()?;
6389            let envelope_size = 8;
6390            let bytes_len = max_ordinal as usize * envelope_size;
6391            #[allow(unused_variables)]
6392            let offset = encoder.out_of_line_offset(bytes_len);
6393            let mut _prev_end_offset: usize = 0;
6394            if 1 > max_ordinal {
6395                return Ok(());
6396            }
6397
6398            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6399            // are envelope_size bytes.
6400            let cur_offset: usize = (1 - 1) * envelope_size;
6401
6402            // Zero reserved fields.
6403            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6404
6405            // Safety:
6406            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6407            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6408            //   envelope_size bytes, there is always sufficient room.
6409            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelAttributes, 64>, D>(
6410            self.attributes.as_ref().map(<fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::ValueTypeMarker>::borrow),
6411            encoder, offset + cur_offset, depth
6412        )?;
6413
6414            _prev_end_offset = cur_offset + envelope_size;
6415
6416            Ok(())
6417        }
6418    }
6419
6420    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSet {
6421        #[inline(always)]
6422        fn new_empty() -> Self {
6423            Self::default()
6424        }
6425
6426        unsafe fn decode(
6427            &mut self,
6428            decoder: &mut fidl::encoding::Decoder<'_, D>,
6429            offset: usize,
6430            mut depth: fidl::encoding::Depth,
6431        ) -> fidl::Result<()> {
6432            decoder.debug_check_bounds::<Self>(offset);
6433            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6434                None => return Err(fidl::Error::NotNullable),
6435                Some(len) => len,
6436            };
6437            // Calling decoder.out_of_line_offset(0) is not allowed.
6438            if len == 0 {
6439                return Ok(());
6440            };
6441            depth.increment()?;
6442            let envelope_size = 8;
6443            let bytes_len = len * envelope_size;
6444            let offset = decoder.out_of_line_offset(bytes_len)?;
6445            // Decode the envelope for each type.
6446            let mut _next_ordinal_to_read = 0;
6447            let mut next_offset = offset;
6448            let end_offset = offset + bytes_len;
6449            _next_ordinal_to_read += 1;
6450            if next_offset >= end_offset {
6451                return Ok(());
6452            }
6453
6454            // Decode unknown envelopes for gaps in ordinals.
6455            while _next_ordinal_to_read < 1 {
6456                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6457                _next_ordinal_to_read += 1;
6458                next_offset += envelope_size;
6459            }
6460
6461            let next_out_of_line = decoder.next_out_of_line();
6462            let handles_before = decoder.remaining_handles();
6463            if let Some((inlined, num_bytes, num_handles)) =
6464                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6465            {
6466                let member_inline_size = <fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6467                if inlined != (member_inline_size <= 4) {
6468                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6469                }
6470                let inner_offset;
6471                let mut inner_depth = depth.clone();
6472                if inlined {
6473                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6474                    inner_offset = next_offset;
6475                } else {
6476                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6477                    inner_depth.increment()?;
6478                }
6479                let val_ref = self.attributes.get_or_insert_with(
6480                    || fidl::new_empty!(fidl::encoding::Vector<ChannelAttributes, 64>, D),
6481                );
6482                fidl::decode!(fidl::encoding::Vector<ChannelAttributes, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
6483                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6484                {
6485                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6486                }
6487                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6488                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6489                }
6490            }
6491
6492            next_offset += envelope_size;
6493
6494            // Decode the remaining unknown envelopes.
6495            while next_offset < end_offset {
6496                _next_ordinal_to_read += 1;
6497                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6498                next_offset += envelope_size;
6499            }
6500
6501            Ok(())
6502        }
6503    }
6504
6505    impl CodecFormatInfo {
6506        #[inline(always)]
6507        fn max_ordinal_present(&self) -> u64 {
6508            if let Some(_) = self.turn_off_delay {
6509                return 3;
6510            }
6511            if let Some(_) = self.turn_on_delay {
6512                return 2;
6513            }
6514            if let Some(_) = self.external_delay {
6515                return 1;
6516            }
6517            0
6518        }
6519    }
6520
6521    impl fidl::encoding::ValueTypeMarker for CodecFormatInfo {
6522        type Borrowed<'a> = &'a Self;
6523        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6524            value
6525        }
6526    }
6527
6528    unsafe impl fidl::encoding::TypeMarker for CodecFormatInfo {
6529        type Owned = Self;
6530
6531        #[inline(always)]
6532        fn inline_align(_context: fidl::encoding::Context) -> usize {
6533            8
6534        }
6535
6536        #[inline(always)]
6537        fn inline_size(_context: fidl::encoding::Context) -> usize {
6538            16
6539        }
6540    }
6541
6542    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecFormatInfo, D>
6543        for &CodecFormatInfo
6544    {
6545        unsafe fn encode(
6546            self,
6547            encoder: &mut fidl::encoding::Encoder<'_, D>,
6548            offset: usize,
6549            mut depth: fidl::encoding::Depth,
6550        ) -> fidl::Result<()> {
6551            encoder.debug_check_bounds::<CodecFormatInfo>(offset);
6552            // Vector header
6553            let max_ordinal: u64 = self.max_ordinal_present();
6554            encoder.write_num(max_ordinal, offset);
6555            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6556            // Calling encoder.out_of_line_offset(0) is not allowed.
6557            if max_ordinal == 0 {
6558                return Ok(());
6559            }
6560            depth.increment()?;
6561            let envelope_size = 8;
6562            let bytes_len = max_ordinal as usize * envelope_size;
6563            #[allow(unused_variables)]
6564            let offset = encoder.out_of_line_offset(bytes_len);
6565            let mut _prev_end_offset: usize = 0;
6566            if 1 > max_ordinal {
6567                return Ok(());
6568            }
6569
6570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6571            // are envelope_size bytes.
6572            let cur_offset: usize = (1 - 1) * envelope_size;
6573
6574            // Zero reserved fields.
6575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6576
6577            // Safety:
6578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6580            //   envelope_size bytes, there is always sufficient room.
6581            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6582                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6583                encoder,
6584                offset + cur_offset,
6585                depth,
6586            )?;
6587
6588            _prev_end_offset = cur_offset + envelope_size;
6589            if 2 > max_ordinal {
6590                return Ok(());
6591            }
6592
6593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6594            // are envelope_size bytes.
6595            let cur_offset: usize = (2 - 1) * envelope_size;
6596
6597            // Zero reserved fields.
6598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6599
6600            // Safety:
6601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6603            //   envelope_size bytes, there is always sufficient room.
6604            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6605                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6606                encoder,
6607                offset + cur_offset,
6608                depth,
6609            )?;
6610
6611            _prev_end_offset = cur_offset + envelope_size;
6612            if 3 > max_ordinal {
6613                return Ok(());
6614            }
6615
6616            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6617            // are envelope_size bytes.
6618            let cur_offset: usize = (3 - 1) * envelope_size;
6619
6620            // Zero reserved fields.
6621            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6622
6623            // Safety:
6624            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6625            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6626            //   envelope_size bytes, there is always sufficient room.
6627            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6628                self.turn_off_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6629                encoder,
6630                offset + cur_offset,
6631                depth,
6632            )?;
6633
6634            _prev_end_offset = cur_offset + envelope_size;
6635
6636            Ok(())
6637        }
6638    }
6639
6640    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecFormatInfo {
6641        #[inline(always)]
6642        fn new_empty() -> Self {
6643            Self::default()
6644        }
6645
6646        unsafe fn decode(
6647            &mut self,
6648            decoder: &mut fidl::encoding::Decoder<'_, D>,
6649            offset: usize,
6650            mut depth: fidl::encoding::Depth,
6651        ) -> fidl::Result<()> {
6652            decoder.debug_check_bounds::<Self>(offset);
6653            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6654                None => return Err(fidl::Error::NotNullable),
6655                Some(len) => len,
6656            };
6657            // Calling decoder.out_of_line_offset(0) is not allowed.
6658            if len == 0 {
6659                return Ok(());
6660            };
6661            depth.increment()?;
6662            let envelope_size = 8;
6663            let bytes_len = len * envelope_size;
6664            let offset = decoder.out_of_line_offset(bytes_len)?;
6665            // Decode the envelope for each type.
6666            let mut _next_ordinal_to_read = 0;
6667            let mut next_offset = offset;
6668            let end_offset = offset + bytes_len;
6669            _next_ordinal_to_read += 1;
6670            if next_offset >= end_offset {
6671                return Ok(());
6672            }
6673
6674            // Decode unknown envelopes for gaps in ordinals.
6675            while _next_ordinal_to_read < 1 {
6676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6677                _next_ordinal_to_read += 1;
6678                next_offset += envelope_size;
6679            }
6680
6681            let next_out_of_line = decoder.next_out_of_line();
6682            let handles_before = decoder.remaining_handles();
6683            if let Some((inlined, num_bytes, num_handles)) =
6684                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6685            {
6686                let member_inline_size =
6687                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6688                if inlined != (member_inline_size <= 4) {
6689                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6690                }
6691                let inner_offset;
6692                let mut inner_depth = depth.clone();
6693                if inlined {
6694                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6695                    inner_offset = next_offset;
6696                } else {
6697                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6698                    inner_depth.increment()?;
6699                }
6700                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6701                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6702                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6703                {
6704                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6705                }
6706                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6707                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6708                }
6709            }
6710
6711            next_offset += envelope_size;
6712            _next_ordinal_to_read += 1;
6713            if next_offset >= end_offset {
6714                return Ok(());
6715            }
6716
6717            // Decode unknown envelopes for gaps in ordinals.
6718            while _next_ordinal_to_read < 2 {
6719                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6720                _next_ordinal_to_read += 1;
6721                next_offset += envelope_size;
6722            }
6723
6724            let next_out_of_line = decoder.next_out_of_line();
6725            let handles_before = decoder.remaining_handles();
6726            if let Some((inlined, num_bytes, num_handles)) =
6727                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6728            {
6729                let member_inline_size =
6730                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6731                if inlined != (member_inline_size <= 4) {
6732                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6733                }
6734                let inner_offset;
6735                let mut inner_depth = depth.clone();
6736                if inlined {
6737                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6738                    inner_offset = next_offset;
6739                } else {
6740                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6741                    inner_depth.increment()?;
6742                }
6743                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6744                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6745                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6746                {
6747                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6748                }
6749                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6750                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6751                }
6752            }
6753
6754            next_offset += envelope_size;
6755            _next_ordinal_to_read += 1;
6756            if next_offset >= end_offset {
6757                return Ok(());
6758            }
6759
6760            // Decode unknown envelopes for gaps in ordinals.
6761            while _next_ordinal_to_read < 3 {
6762                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6763                _next_ordinal_to_read += 1;
6764                next_offset += envelope_size;
6765            }
6766
6767            let next_out_of_line = decoder.next_out_of_line();
6768            let handles_before = decoder.remaining_handles();
6769            if let Some((inlined, num_bytes, num_handles)) =
6770                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6771            {
6772                let member_inline_size =
6773                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6774                if inlined != (member_inline_size <= 4) {
6775                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6776                }
6777                let inner_offset;
6778                let mut inner_depth = depth.clone();
6779                if inlined {
6780                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6781                    inner_offset = next_offset;
6782                } else {
6783                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6784                    inner_depth.increment()?;
6785                }
6786                let val_ref = self.turn_off_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6787                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6788                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6789                {
6790                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6791                }
6792                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6793                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6794                }
6795            }
6796
6797            next_offset += envelope_size;
6798
6799            // Decode the remaining unknown envelopes.
6800            while next_offset < end_offset {
6801                _next_ordinal_to_read += 1;
6802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6803                next_offset += envelope_size;
6804            }
6805
6806            Ok(())
6807        }
6808    }
6809
6810    impl CodecProperties {
6811        #[inline(always)]
6812        fn max_ordinal_present(&self) -> u64 {
6813            if let Some(_) = self.plug_detect_capabilities {
6814                return 5;
6815            }
6816            if let Some(_) = self.unique_id {
6817                return 4;
6818            }
6819            if let Some(_) = self.product {
6820                return 3;
6821            }
6822            if let Some(_) = self.manufacturer {
6823                return 2;
6824            }
6825            if let Some(_) = self.is_input {
6826                return 1;
6827            }
6828            0
6829        }
6830    }
6831
6832    impl fidl::encoding::ValueTypeMarker for CodecProperties {
6833        type Borrowed<'a> = &'a Self;
6834        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6835            value
6836        }
6837    }
6838
6839    unsafe impl fidl::encoding::TypeMarker for CodecProperties {
6840        type Owned = Self;
6841
6842        #[inline(always)]
6843        fn inline_align(_context: fidl::encoding::Context) -> usize {
6844            8
6845        }
6846
6847        #[inline(always)]
6848        fn inline_size(_context: fidl::encoding::Context) -> usize {
6849            16
6850        }
6851    }
6852
6853    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecProperties, D>
6854        for &CodecProperties
6855    {
6856        unsafe fn encode(
6857            self,
6858            encoder: &mut fidl::encoding::Encoder<'_, D>,
6859            offset: usize,
6860            mut depth: fidl::encoding::Depth,
6861        ) -> fidl::Result<()> {
6862            encoder.debug_check_bounds::<CodecProperties>(offset);
6863            // Vector header
6864            let max_ordinal: u64 = self.max_ordinal_present();
6865            encoder.write_num(max_ordinal, offset);
6866            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6867            // Calling encoder.out_of_line_offset(0) is not allowed.
6868            if max_ordinal == 0 {
6869                return Ok(());
6870            }
6871            depth.increment()?;
6872            let envelope_size = 8;
6873            let bytes_len = max_ordinal as usize * envelope_size;
6874            #[allow(unused_variables)]
6875            let offset = encoder.out_of_line_offset(bytes_len);
6876            let mut _prev_end_offset: usize = 0;
6877            if 1 > max_ordinal {
6878                return Ok(());
6879            }
6880
6881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6882            // are envelope_size bytes.
6883            let cur_offset: usize = (1 - 1) * envelope_size;
6884
6885            // Zero reserved fields.
6886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6887
6888            // Safety:
6889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6891            //   envelope_size bytes, there is always sufficient room.
6892            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6893                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6894                encoder,
6895                offset + cur_offset,
6896                depth,
6897            )?;
6898
6899            _prev_end_offset = cur_offset + envelope_size;
6900            if 2 > max_ordinal {
6901                return Ok(());
6902            }
6903
6904            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6905            // are envelope_size bytes.
6906            let cur_offset: usize = (2 - 1) * envelope_size;
6907
6908            // Zero reserved fields.
6909            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6910
6911            // Safety:
6912            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6913            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6914            //   envelope_size bytes, there is always sufficient room.
6915            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6916                self.manufacturer.as_ref().map(
6917                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6918                ),
6919                encoder,
6920                offset + cur_offset,
6921                depth,
6922            )?;
6923
6924            _prev_end_offset = cur_offset + envelope_size;
6925            if 3 > max_ordinal {
6926                return Ok(());
6927            }
6928
6929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6930            // are envelope_size bytes.
6931            let cur_offset: usize = (3 - 1) * envelope_size;
6932
6933            // Zero reserved fields.
6934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6935
6936            // Safety:
6937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6939            //   envelope_size bytes, there is always sufficient room.
6940            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6941                self.product.as_ref().map(
6942                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6943                ),
6944                encoder,
6945                offset + cur_offset,
6946                depth,
6947            )?;
6948
6949            _prev_end_offset = cur_offset + envelope_size;
6950            if 4 > max_ordinal {
6951                return Ok(());
6952            }
6953
6954            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6955            // are envelope_size bytes.
6956            let cur_offset: usize = (4 - 1) * envelope_size;
6957
6958            // Zero reserved fields.
6959            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6960
6961            // Safety:
6962            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6963            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6964            //   envelope_size bytes, there is always sufficient room.
6965            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6966                self.unique_id.as_ref().map(
6967                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6968                ),
6969                encoder,
6970                offset + cur_offset,
6971                depth,
6972            )?;
6973
6974            _prev_end_offset = cur_offset + envelope_size;
6975            if 5 > max_ordinal {
6976                return Ok(());
6977            }
6978
6979            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6980            // are envelope_size bytes.
6981            let cur_offset: usize = (5 - 1) * envelope_size;
6982
6983            // Zero reserved fields.
6984            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6985
6986            // Safety:
6987            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6988            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6989            //   envelope_size bytes, there is always sufficient room.
6990            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
6991                self.plug_detect_capabilities
6992                    .as_ref()
6993                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
6994                encoder,
6995                offset + cur_offset,
6996                depth,
6997            )?;
6998
6999            _prev_end_offset = cur_offset + envelope_size;
7000
7001            Ok(())
7002        }
7003    }
7004
7005    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProperties {
7006        #[inline(always)]
7007        fn new_empty() -> Self {
7008            Self::default()
7009        }
7010
7011        unsafe fn decode(
7012            &mut self,
7013            decoder: &mut fidl::encoding::Decoder<'_, D>,
7014            offset: usize,
7015            mut depth: fidl::encoding::Depth,
7016        ) -> fidl::Result<()> {
7017            decoder.debug_check_bounds::<Self>(offset);
7018            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7019                None => return Err(fidl::Error::NotNullable),
7020                Some(len) => len,
7021            };
7022            // Calling decoder.out_of_line_offset(0) is not allowed.
7023            if len == 0 {
7024                return Ok(());
7025            };
7026            depth.increment()?;
7027            let envelope_size = 8;
7028            let bytes_len = len * envelope_size;
7029            let offset = decoder.out_of_line_offset(bytes_len)?;
7030            // Decode the envelope for each type.
7031            let mut _next_ordinal_to_read = 0;
7032            let mut next_offset = offset;
7033            let end_offset = offset + bytes_len;
7034            _next_ordinal_to_read += 1;
7035            if next_offset >= end_offset {
7036                return Ok(());
7037            }
7038
7039            // Decode unknown envelopes for gaps in ordinals.
7040            while _next_ordinal_to_read < 1 {
7041                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7042                _next_ordinal_to_read += 1;
7043                next_offset += envelope_size;
7044            }
7045
7046            let next_out_of_line = decoder.next_out_of_line();
7047            let handles_before = decoder.remaining_handles();
7048            if let Some((inlined, num_bytes, num_handles)) =
7049                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7050            {
7051                let member_inline_size =
7052                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7053                if inlined != (member_inline_size <= 4) {
7054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7055                }
7056                let inner_offset;
7057                let mut inner_depth = depth.clone();
7058                if inlined {
7059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7060                    inner_offset = next_offset;
7061                } else {
7062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7063                    inner_depth.increment()?;
7064                }
7065                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7066                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7067                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7068                {
7069                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7070                }
7071                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7072                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7073                }
7074            }
7075
7076            next_offset += envelope_size;
7077            _next_ordinal_to_read += 1;
7078            if next_offset >= end_offset {
7079                return Ok(());
7080            }
7081
7082            // Decode unknown envelopes for gaps in ordinals.
7083            while _next_ordinal_to_read < 2 {
7084                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7085                _next_ordinal_to_read += 1;
7086                next_offset += envelope_size;
7087            }
7088
7089            let next_out_of_line = decoder.next_out_of_line();
7090            let handles_before = decoder.remaining_handles();
7091            if let Some((inlined, num_bytes, num_handles)) =
7092                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7093            {
7094                let member_inline_size =
7095                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7096                        decoder.context,
7097                    );
7098                if inlined != (member_inline_size <= 4) {
7099                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7100                }
7101                let inner_offset;
7102                let mut inner_depth = depth.clone();
7103                if inlined {
7104                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7105                    inner_offset = next_offset;
7106                } else {
7107                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7108                    inner_depth.increment()?;
7109                }
7110                let val_ref = self
7111                    .manufacturer
7112                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7113                fidl::decode!(
7114                    fidl::encoding::BoundedString<256>,
7115                    D,
7116                    val_ref,
7117                    decoder,
7118                    inner_offset,
7119                    inner_depth
7120                )?;
7121                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7122                {
7123                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7124                }
7125                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7126                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7127                }
7128            }
7129
7130            next_offset += envelope_size;
7131            _next_ordinal_to_read += 1;
7132            if next_offset >= end_offset {
7133                return Ok(());
7134            }
7135
7136            // Decode unknown envelopes for gaps in ordinals.
7137            while _next_ordinal_to_read < 3 {
7138                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7139                _next_ordinal_to_read += 1;
7140                next_offset += envelope_size;
7141            }
7142
7143            let next_out_of_line = decoder.next_out_of_line();
7144            let handles_before = decoder.remaining_handles();
7145            if let Some((inlined, num_bytes, num_handles)) =
7146                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7147            {
7148                let member_inline_size =
7149                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7150                        decoder.context,
7151                    );
7152                if inlined != (member_inline_size <= 4) {
7153                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7154                }
7155                let inner_offset;
7156                let mut inner_depth = depth.clone();
7157                if inlined {
7158                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7159                    inner_offset = next_offset;
7160                } else {
7161                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7162                    inner_depth.increment()?;
7163                }
7164                let val_ref = self
7165                    .product
7166                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7167                fidl::decode!(
7168                    fidl::encoding::BoundedString<256>,
7169                    D,
7170                    val_ref,
7171                    decoder,
7172                    inner_offset,
7173                    inner_depth
7174                )?;
7175                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7176                {
7177                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7178                }
7179                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7180                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7181                }
7182            }
7183
7184            next_offset += envelope_size;
7185            _next_ordinal_to_read += 1;
7186            if next_offset >= end_offset {
7187                return Ok(());
7188            }
7189
7190            // Decode unknown envelopes for gaps in ordinals.
7191            while _next_ordinal_to_read < 4 {
7192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7193                _next_ordinal_to_read += 1;
7194                next_offset += envelope_size;
7195            }
7196
7197            let next_out_of_line = decoder.next_out_of_line();
7198            let handles_before = decoder.remaining_handles();
7199            if let Some((inlined, num_bytes, num_handles)) =
7200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7201            {
7202                let member_inline_size =
7203                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7204                        decoder.context,
7205                    );
7206                if inlined != (member_inline_size <= 4) {
7207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7208                }
7209                let inner_offset;
7210                let mut inner_depth = depth.clone();
7211                if inlined {
7212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7213                    inner_offset = next_offset;
7214                } else {
7215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7216                    inner_depth.increment()?;
7217                }
7218                let val_ref = self
7219                    .unique_id
7220                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7221                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7222                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7223                {
7224                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7225                }
7226                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7227                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7228                }
7229            }
7230
7231            next_offset += envelope_size;
7232            _next_ordinal_to_read += 1;
7233            if next_offset >= end_offset {
7234                return Ok(());
7235            }
7236
7237            // Decode unknown envelopes for gaps in ordinals.
7238            while _next_ordinal_to_read < 5 {
7239                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7240                _next_ordinal_to_read += 1;
7241                next_offset += envelope_size;
7242            }
7243
7244            let next_out_of_line = decoder.next_out_of_line();
7245            let handles_before = decoder.remaining_handles();
7246            if let Some((inlined, num_bytes, num_handles)) =
7247                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7248            {
7249                let member_inline_size =
7250                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
7251                        decoder.context,
7252                    );
7253                if inlined != (member_inline_size <= 4) {
7254                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7255                }
7256                let inner_offset;
7257                let mut inner_depth = depth.clone();
7258                if inlined {
7259                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7260                    inner_offset = next_offset;
7261                } else {
7262                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7263                    inner_depth.increment()?;
7264                }
7265                let val_ref = self
7266                    .plug_detect_capabilities
7267                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
7268                fidl::decode!(
7269                    PlugDetectCapabilities,
7270                    D,
7271                    val_ref,
7272                    decoder,
7273                    inner_offset,
7274                    inner_depth
7275                )?;
7276                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7277                {
7278                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7279                }
7280                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7281                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7282                }
7283            }
7284
7285            next_offset += envelope_size;
7286
7287            // Decode the remaining unknown envelopes.
7288            while next_offset < end_offset {
7289                _next_ordinal_to_read += 1;
7290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7291                next_offset += envelope_size;
7292            }
7293
7294            Ok(())
7295        }
7296    }
7297
7298    impl CompositeProperties {
7299        #[inline(always)]
7300        fn max_ordinal_present(&self) -> u64 {
7301            if let Some(_) = self.clock_domain {
7302                return 5;
7303            }
7304            if let Some(_) = self.unique_id {
7305                return 4;
7306            }
7307            if let Some(_) = self.product {
7308                return 3;
7309            }
7310            if let Some(_) = self.manufacturer {
7311                return 2;
7312            }
7313            0
7314        }
7315    }
7316
7317    impl fidl::encoding::ValueTypeMarker for CompositeProperties {
7318        type Borrowed<'a> = &'a Self;
7319        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7320            value
7321        }
7322    }
7323
7324    unsafe impl fidl::encoding::TypeMarker for CompositeProperties {
7325        type Owned = Self;
7326
7327        #[inline(always)]
7328        fn inline_align(_context: fidl::encoding::Context) -> usize {
7329            8
7330        }
7331
7332        #[inline(always)]
7333        fn inline_size(_context: fidl::encoding::Context) -> usize {
7334            16
7335        }
7336    }
7337
7338    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeProperties, D>
7339        for &CompositeProperties
7340    {
7341        unsafe fn encode(
7342            self,
7343            encoder: &mut fidl::encoding::Encoder<'_, D>,
7344            offset: usize,
7345            mut depth: fidl::encoding::Depth,
7346        ) -> fidl::Result<()> {
7347            encoder.debug_check_bounds::<CompositeProperties>(offset);
7348            // Vector header
7349            let max_ordinal: u64 = self.max_ordinal_present();
7350            encoder.write_num(max_ordinal, offset);
7351            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7352            // Calling encoder.out_of_line_offset(0) is not allowed.
7353            if max_ordinal == 0 {
7354                return Ok(());
7355            }
7356            depth.increment()?;
7357            let envelope_size = 8;
7358            let bytes_len = max_ordinal as usize * envelope_size;
7359            #[allow(unused_variables)]
7360            let offset = encoder.out_of_line_offset(bytes_len);
7361            let mut _prev_end_offset: usize = 0;
7362            if 2 > max_ordinal {
7363                return Ok(());
7364            }
7365
7366            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7367            // are envelope_size bytes.
7368            let cur_offset: usize = (2 - 1) * envelope_size;
7369
7370            // Zero reserved fields.
7371            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7372
7373            // Safety:
7374            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7375            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7376            //   envelope_size bytes, there is always sufficient room.
7377            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7378                self.manufacturer.as_ref().map(
7379                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7380                ),
7381                encoder,
7382                offset + cur_offset,
7383                depth,
7384            )?;
7385
7386            _prev_end_offset = cur_offset + envelope_size;
7387            if 3 > max_ordinal {
7388                return Ok(());
7389            }
7390
7391            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7392            // are envelope_size bytes.
7393            let cur_offset: usize = (3 - 1) * envelope_size;
7394
7395            // Zero reserved fields.
7396            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7397
7398            // Safety:
7399            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7400            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7401            //   envelope_size bytes, there is always sufficient room.
7402            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7403                self.product.as_ref().map(
7404                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7405                ),
7406                encoder,
7407                offset + cur_offset,
7408                depth,
7409            )?;
7410
7411            _prev_end_offset = cur_offset + envelope_size;
7412            if 4 > max_ordinal {
7413                return Ok(());
7414            }
7415
7416            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7417            // are envelope_size bytes.
7418            let cur_offset: usize = (4 - 1) * envelope_size;
7419
7420            // Zero reserved fields.
7421            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7422
7423            // Safety:
7424            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7425            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7426            //   envelope_size bytes, there is always sufficient room.
7427            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7428                self.unique_id.as_ref().map(
7429                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7430                ),
7431                encoder,
7432                offset + cur_offset,
7433                depth,
7434            )?;
7435
7436            _prev_end_offset = cur_offset + envelope_size;
7437            if 5 > max_ordinal {
7438                return Ok(());
7439            }
7440
7441            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7442            // are envelope_size bytes.
7443            let cur_offset: usize = (5 - 1) * envelope_size;
7444
7445            // Zero reserved fields.
7446            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7447
7448            // Safety:
7449            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7450            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7451            //   envelope_size bytes, there is always sufficient room.
7452            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7453                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7454                encoder,
7455                offset + cur_offset,
7456                depth,
7457            )?;
7458
7459            _prev_end_offset = cur_offset + envelope_size;
7460
7461            Ok(())
7462        }
7463    }
7464
7465    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeProperties {
7466        #[inline(always)]
7467        fn new_empty() -> Self {
7468            Self::default()
7469        }
7470
7471        unsafe fn decode(
7472            &mut self,
7473            decoder: &mut fidl::encoding::Decoder<'_, D>,
7474            offset: usize,
7475            mut depth: fidl::encoding::Depth,
7476        ) -> fidl::Result<()> {
7477            decoder.debug_check_bounds::<Self>(offset);
7478            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7479                None => return Err(fidl::Error::NotNullable),
7480                Some(len) => len,
7481            };
7482            // Calling decoder.out_of_line_offset(0) is not allowed.
7483            if len == 0 {
7484                return Ok(());
7485            };
7486            depth.increment()?;
7487            let envelope_size = 8;
7488            let bytes_len = len * envelope_size;
7489            let offset = decoder.out_of_line_offset(bytes_len)?;
7490            // Decode the envelope for each type.
7491            let mut _next_ordinal_to_read = 0;
7492            let mut next_offset = offset;
7493            let end_offset = offset + bytes_len;
7494            _next_ordinal_to_read += 1;
7495            if next_offset >= end_offset {
7496                return Ok(());
7497            }
7498
7499            // Decode unknown envelopes for gaps in ordinals.
7500            while _next_ordinal_to_read < 2 {
7501                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7502                _next_ordinal_to_read += 1;
7503                next_offset += envelope_size;
7504            }
7505
7506            let next_out_of_line = decoder.next_out_of_line();
7507            let handles_before = decoder.remaining_handles();
7508            if let Some((inlined, num_bytes, num_handles)) =
7509                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7510            {
7511                let member_inline_size =
7512                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7513                        decoder.context,
7514                    );
7515                if inlined != (member_inline_size <= 4) {
7516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7517                }
7518                let inner_offset;
7519                let mut inner_depth = depth.clone();
7520                if inlined {
7521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7522                    inner_offset = next_offset;
7523                } else {
7524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7525                    inner_depth.increment()?;
7526                }
7527                let val_ref = self
7528                    .manufacturer
7529                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7530                fidl::decode!(
7531                    fidl::encoding::BoundedString<256>,
7532                    D,
7533                    val_ref,
7534                    decoder,
7535                    inner_offset,
7536                    inner_depth
7537                )?;
7538                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7539                {
7540                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7541                }
7542                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7543                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7544                }
7545            }
7546
7547            next_offset += envelope_size;
7548            _next_ordinal_to_read += 1;
7549            if next_offset >= end_offset {
7550                return Ok(());
7551            }
7552
7553            // Decode unknown envelopes for gaps in ordinals.
7554            while _next_ordinal_to_read < 3 {
7555                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7556                _next_ordinal_to_read += 1;
7557                next_offset += envelope_size;
7558            }
7559
7560            let next_out_of_line = decoder.next_out_of_line();
7561            let handles_before = decoder.remaining_handles();
7562            if let Some((inlined, num_bytes, num_handles)) =
7563                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7564            {
7565                let member_inline_size =
7566                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7567                        decoder.context,
7568                    );
7569                if inlined != (member_inline_size <= 4) {
7570                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7571                }
7572                let inner_offset;
7573                let mut inner_depth = depth.clone();
7574                if inlined {
7575                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7576                    inner_offset = next_offset;
7577                } else {
7578                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7579                    inner_depth.increment()?;
7580                }
7581                let val_ref = self
7582                    .product
7583                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7584                fidl::decode!(
7585                    fidl::encoding::BoundedString<256>,
7586                    D,
7587                    val_ref,
7588                    decoder,
7589                    inner_offset,
7590                    inner_depth
7591                )?;
7592                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7593                {
7594                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7595                }
7596                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7597                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7598                }
7599            }
7600
7601            next_offset += envelope_size;
7602            _next_ordinal_to_read += 1;
7603            if next_offset >= end_offset {
7604                return Ok(());
7605            }
7606
7607            // Decode unknown envelopes for gaps in ordinals.
7608            while _next_ordinal_to_read < 4 {
7609                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7610                _next_ordinal_to_read += 1;
7611                next_offset += envelope_size;
7612            }
7613
7614            let next_out_of_line = decoder.next_out_of_line();
7615            let handles_before = decoder.remaining_handles();
7616            if let Some((inlined, num_bytes, num_handles)) =
7617                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7618            {
7619                let member_inline_size =
7620                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7621                        decoder.context,
7622                    );
7623                if inlined != (member_inline_size <= 4) {
7624                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7625                }
7626                let inner_offset;
7627                let mut inner_depth = depth.clone();
7628                if inlined {
7629                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7630                    inner_offset = next_offset;
7631                } else {
7632                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7633                    inner_depth.increment()?;
7634                }
7635                let val_ref = self
7636                    .unique_id
7637                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7638                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7639                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7640                {
7641                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7642                }
7643                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7644                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7645                }
7646            }
7647
7648            next_offset += envelope_size;
7649            _next_ordinal_to_read += 1;
7650            if next_offset >= end_offset {
7651                return Ok(());
7652            }
7653
7654            // Decode unknown envelopes for gaps in ordinals.
7655            while _next_ordinal_to_read < 5 {
7656                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7657                _next_ordinal_to_read += 1;
7658                next_offset += envelope_size;
7659            }
7660
7661            let next_out_of_line = decoder.next_out_of_line();
7662            let handles_before = decoder.remaining_handles();
7663            if let Some((inlined, num_bytes, num_handles)) =
7664                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7665            {
7666                let member_inline_size =
7667                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7668                if inlined != (member_inline_size <= 4) {
7669                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7670                }
7671                let inner_offset;
7672                let mut inner_depth = depth.clone();
7673                if inlined {
7674                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7675                    inner_offset = next_offset;
7676                } else {
7677                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7678                    inner_depth.increment()?;
7679                }
7680                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
7681                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7682                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7683                {
7684                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7685                }
7686                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7687                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7688                }
7689            }
7690
7691            next_offset += envelope_size;
7692
7693            // Decode the remaining unknown envelopes.
7694            while next_offset < end_offset {
7695                _next_ordinal_to_read += 1;
7696                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7697                next_offset += envelope_size;
7698            }
7699
7700            Ok(())
7701        }
7702    }
7703
7704    impl DaiProperties {
7705        #[inline(always)]
7706        fn max_ordinal_present(&self) -> u64 {
7707            if let Some(_) = self.clock_domain {
7708                return 5;
7709            }
7710            if let Some(_) = self.unique_id {
7711                return 4;
7712            }
7713            if let Some(_) = self.product_name {
7714                return 3;
7715            }
7716            if let Some(_) = self.manufacturer {
7717                return 2;
7718            }
7719            if let Some(_) = self.is_input {
7720                return 1;
7721            }
7722            0
7723        }
7724    }
7725
7726    impl fidl::encoding::ValueTypeMarker for DaiProperties {
7727        type Borrowed<'a> = &'a Self;
7728        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7729            value
7730        }
7731    }
7732
7733    unsafe impl fidl::encoding::TypeMarker for DaiProperties {
7734        type Owned = Self;
7735
7736        #[inline(always)]
7737        fn inline_align(_context: fidl::encoding::Context) -> usize {
7738            8
7739        }
7740
7741        #[inline(always)]
7742        fn inline_size(_context: fidl::encoding::Context) -> usize {
7743            16
7744        }
7745    }
7746
7747    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiProperties, D>
7748        for &DaiProperties
7749    {
7750        unsafe fn encode(
7751            self,
7752            encoder: &mut fidl::encoding::Encoder<'_, D>,
7753            offset: usize,
7754            mut depth: fidl::encoding::Depth,
7755        ) -> fidl::Result<()> {
7756            encoder.debug_check_bounds::<DaiProperties>(offset);
7757            // Vector header
7758            let max_ordinal: u64 = self.max_ordinal_present();
7759            encoder.write_num(max_ordinal, offset);
7760            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7761            // Calling encoder.out_of_line_offset(0) is not allowed.
7762            if max_ordinal == 0 {
7763                return Ok(());
7764            }
7765            depth.increment()?;
7766            let envelope_size = 8;
7767            let bytes_len = max_ordinal as usize * envelope_size;
7768            #[allow(unused_variables)]
7769            let offset = encoder.out_of_line_offset(bytes_len);
7770            let mut _prev_end_offset: usize = 0;
7771            if 1 > max_ordinal {
7772                return Ok(());
7773            }
7774
7775            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7776            // are envelope_size bytes.
7777            let cur_offset: usize = (1 - 1) * envelope_size;
7778
7779            // Zero reserved fields.
7780            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7781
7782            // Safety:
7783            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7784            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7785            //   envelope_size bytes, there is always sufficient room.
7786            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7787                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7788                encoder,
7789                offset + cur_offset,
7790                depth,
7791            )?;
7792
7793            _prev_end_offset = cur_offset + envelope_size;
7794            if 2 > max_ordinal {
7795                return Ok(());
7796            }
7797
7798            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7799            // are envelope_size bytes.
7800            let cur_offset: usize = (2 - 1) * envelope_size;
7801
7802            // Zero reserved fields.
7803            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7804
7805            // Safety:
7806            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7807            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7808            //   envelope_size bytes, there is always sufficient room.
7809            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7810                self.manufacturer.as_ref().map(
7811                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7812                ),
7813                encoder,
7814                offset + cur_offset,
7815                depth,
7816            )?;
7817
7818            _prev_end_offset = cur_offset + envelope_size;
7819            if 3 > max_ordinal {
7820                return Ok(());
7821            }
7822
7823            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7824            // are envelope_size bytes.
7825            let cur_offset: usize = (3 - 1) * envelope_size;
7826
7827            // Zero reserved fields.
7828            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7829
7830            // Safety:
7831            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7832            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7833            //   envelope_size bytes, there is always sufficient room.
7834            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7835                self.product_name.as_ref().map(
7836                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7837                ),
7838                encoder,
7839                offset + cur_offset,
7840                depth,
7841            )?;
7842
7843            _prev_end_offset = cur_offset + envelope_size;
7844            if 4 > max_ordinal {
7845                return Ok(());
7846            }
7847
7848            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7849            // are envelope_size bytes.
7850            let cur_offset: usize = (4 - 1) * envelope_size;
7851
7852            // Zero reserved fields.
7853            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7854
7855            // Safety:
7856            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7857            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7858            //   envelope_size bytes, there is always sufficient room.
7859            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7860                self.unique_id.as_ref().map(
7861                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7862                ),
7863                encoder,
7864                offset + cur_offset,
7865                depth,
7866            )?;
7867
7868            _prev_end_offset = cur_offset + envelope_size;
7869            if 5 > max_ordinal {
7870                return Ok(());
7871            }
7872
7873            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7874            // are envelope_size bytes.
7875            let cur_offset: usize = (5 - 1) * envelope_size;
7876
7877            // Zero reserved fields.
7878            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7879
7880            // Safety:
7881            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7882            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7883            //   envelope_size bytes, there is always sufficient room.
7884            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7885                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7886                encoder,
7887                offset + cur_offset,
7888                depth,
7889            )?;
7890
7891            _prev_end_offset = cur_offset + envelope_size;
7892
7893            Ok(())
7894        }
7895    }
7896
7897    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiProperties {
7898        #[inline(always)]
7899        fn new_empty() -> Self {
7900            Self::default()
7901        }
7902
7903        unsafe fn decode(
7904            &mut self,
7905            decoder: &mut fidl::encoding::Decoder<'_, D>,
7906            offset: usize,
7907            mut depth: fidl::encoding::Depth,
7908        ) -> fidl::Result<()> {
7909            decoder.debug_check_bounds::<Self>(offset);
7910            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7911                None => return Err(fidl::Error::NotNullable),
7912                Some(len) => len,
7913            };
7914            // Calling decoder.out_of_line_offset(0) is not allowed.
7915            if len == 0 {
7916                return Ok(());
7917            };
7918            depth.increment()?;
7919            let envelope_size = 8;
7920            let bytes_len = len * envelope_size;
7921            let offset = decoder.out_of_line_offset(bytes_len)?;
7922            // Decode the envelope for each type.
7923            let mut _next_ordinal_to_read = 0;
7924            let mut next_offset = offset;
7925            let end_offset = offset + bytes_len;
7926            _next_ordinal_to_read += 1;
7927            if next_offset >= end_offset {
7928                return Ok(());
7929            }
7930
7931            // Decode unknown envelopes for gaps in ordinals.
7932            while _next_ordinal_to_read < 1 {
7933                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7934                _next_ordinal_to_read += 1;
7935                next_offset += envelope_size;
7936            }
7937
7938            let next_out_of_line = decoder.next_out_of_line();
7939            let handles_before = decoder.remaining_handles();
7940            if let Some((inlined, num_bytes, num_handles)) =
7941                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7942            {
7943                let member_inline_size =
7944                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7945                if inlined != (member_inline_size <= 4) {
7946                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7947                }
7948                let inner_offset;
7949                let mut inner_depth = depth.clone();
7950                if inlined {
7951                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7952                    inner_offset = next_offset;
7953                } else {
7954                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7955                    inner_depth.increment()?;
7956                }
7957                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7958                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7959                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7960                {
7961                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7962                }
7963                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7964                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7965                }
7966            }
7967
7968            next_offset += envelope_size;
7969            _next_ordinal_to_read += 1;
7970            if next_offset >= end_offset {
7971                return Ok(());
7972            }
7973
7974            // Decode unknown envelopes for gaps in ordinals.
7975            while _next_ordinal_to_read < 2 {
7976                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7977                _next_ordinal_to_read += 1;
7978                next_offset += envelope_size;
7979            }
7980
7981            let next_out_of_line = decoder.next_out_of_line();
7982            let handles_before = decoder.remaining_handles();
7983            if let Some((inlined, num_bytes, num_handles)) =
7984                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7985            {
7986                let member_inline_size =
7987                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7988                        decoder.context,
7989                    );
7990                if inlined != (member_inline_size <= 4) {
7991                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7992                }
7993                let inner_offset;
7994                let mut inner_depth = depth.clone();
7995                if inlined {
7996                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7997                    inner_offset = next_offset;
7998                } else {
7999                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8000                    inner_depth.increment()?;
8001                }
8002                let val_ref = self
8003                    .manufacturer
8004                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8005                fidl::decode!(
8006                    fidl::encoding::BoundedString<256>,
8007                    D,
8008                    val_ref,
8009                    decoder,
8010                    inner_offset,
8011                    inner_depth
8012                )?;
8013                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8014                {
8015                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8016                }
8017                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8018                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8019                }
8020            }
8021
8022            next_offset += envelope_size;
8023            _next_ordinal_to_read += 1;
8024            if next_offset >= end_offset {
8025                return Ok(());
8026            }
8027
8028            // Decode unknown envelopes for gaps in ordinals.
8029            while _next_ordinal_to_read < 3 {
8030                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8031                _next_ordinal_to_read += 1;
8032                next_offset += envelope_size;
8033            }
8034
8035            let next_out_of_line = decoder.next_out_of_line();
8036            let handles_before = decoder.remaining_handles();
8037            if let Some((inlined, num_bytes, num_handles)) =
8038                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8039            {
8040                let member_inline_size =
8041                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8042                        decoder.context,
8043                    );
8044                if inlined != (member_inline_size <= 4) {
8045                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8046                }
8047                let inner_offset;
8048                let mut inner_depth = depth.clone();
8049                if inlined {
8050                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8051                    inner_offset = next_offset;
8052                } else {
8053                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8054                    inner_depth.increment()?;
8055                }
8056                let val_ref = self
8057                    .product_name
8058                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8059                fidl::decode!(
8060                    fidl::encoding::BoundedString<256>,
8061                    D,
8062                    val_ref,
8063                    decoder,
8064                    inner_offset,
8065                    inner_depth
8066                )?;
8067                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8068                {
8069                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8070                }
8071                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8072                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8073                }
8074            }
8075
8076            next_offset += envelope_size;
8077            _next_ordinal_to_read += 1;
8078            if next_offset >= end_offset {
8079                return Ok(());
8080            }
8081
8082            // Decode unknown envelopes for gaps in ordinals.
8083            while _next_ordinal_to_read < 4 {
8084                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8085                _next_ordinal_to_read += 1;
8086                next_offset += envelope_size;
8087            }
8088
8089            let next_out_of_line = decoder.next_out_of_line();
8090            let handles_before = decoder.remaining_handles();
8091            if let Some((inlined, num_bytes, num_handles)) =
8092                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8093            {
8094                let member_inline_size =
8095                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
8096                        decoder.context,
8097                    );
8098                if inlined != (member_inline_size <= 4) {
8099                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8100                }
8101                let inner_offset;
8102                let mut inner_depth = depth.clone();
8103                if inlined {
8104                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8105                    inner_offset = next_offset;
8106                } else {
8107                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8108                    inner_depth.increment()?;
8109                }
8110                let val_ref = self
8111                    .unique_id
8112                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
8113                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
8114                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8115                {
8116                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8117                }
8118                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8119                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8120                }
8121            }
8122
8123            next_offset += envelope_size;
8124            _next_ordinal_to_read += 1;
8125            if next_offset >= end_offset {
8126                return Ok(());
8127            }
8128
8129            // Decode unknown envelopes for gaps in ordinals.
8130            while _next_ordinal_to_read < 5 {
8131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8132                _next_ordinal_to_read += 1;
8133                next_offset += envelope_size;
8134            }
8135
8136            let next_out_of_line = decoder.next_out_of_line();
8137            let handles_before = decoder.remaining_handles();
8138            if let Some((inlined, num_bytes, num_handles)) =
8139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8140            {
8141                let member_inline_size =
8142                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8143                if inlined != (member_inline_size <= 4) {
8144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8145                }
8146                let inner_offset;
8147                let mut inner_depth = depth.clone();
8148                if inlined {
8149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8150                    inner_offset = next_offset;
8151                } else {
8152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8153                    inner_depth.increment()?;
8154                }
8155                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
8156                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8158                {
8159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8160                }
8161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8163                }
8164            }
8165
8166            next_offset += envelope_size;
8167
8168            // Decode the remaining unknown envelopes.
8169            while next_offset < end_offset {
8170                _next_ordinal_to_read += 1;
8171                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8172                next_offset += envelope_size;
8173            }
8174
8175            Ok(())
8176        }
8177    }
8178
8179    impl DelayInfo {
8180        #[inline(always)]
8181        fn max_ordinal_present(&self) -> u64 {
8182            if let Some(_) = self.external_delay {
8183                return 2;
8184            }
8185            if let Some(_) = self.internal_delay {
8186                return 1;
8187            }
8188            0
8189        }
8190    }
8191
8192    impl fidl::encoding::ValueTypeMarker for DelayInfo {
8193        type Borrowed<'a> = &'a Self;
8194        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8195            value
8196        }
8197    }
8198
8199    unsafe impl fidl::encoding::TypeMarker for DelayInfo {
8200        type Owned = Self;
8201
8202        #[inline(always)]
8203        fn inline_align(_context: fidl::encoding::Context) -> usize {
8204            8
8205        }
8206
8207        #[inline(always)]
8208        fn inline_size(_context: fidl::encoding::Context) -> usize {
8209            16
8210        }
8211    }
8212
8213    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DelayInfo, D>
8214        for &DelayInfo
8215    {
8216        unsafe fn encode(
8217            self,
8218            encoder: &mut fidl::encoding::Encoder<'_, D>,
8219            offset: usize,
8220            mut depth: fidl::encoding::Depth,
8221        ) -> fidl::Result<()> {
8222            encoder.debug_check_bounds::<DelayInfo>(offset);
8223            // Vector header
8224            let max_ordinal: u64 = self.max_ordinal_present();
8225            encoder.write_num(max_ordinal, offset);
8226            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8227            // Calling encoder.out_of_line_offset(0) is not allowed.
8228            if max_ordinal == 0 {
8229                return Ok(());
8230            }
8231            depth.increment()?;
8232            let envelope_size = 8;
8233            let bytes_len = max_ordinal as usize * envelope_size;
8234            #[allow(unused_variables)]
8235            let offset = encoder.out_of_line_offset(bytes_len);
8236            let mut _prev_end_offset: usize = 0;
8237            if 1 > max_ordinal {
8238                return Ok(());
8239            }
8240
8241            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8242            // are envelope_size bytes.
8243            let cur_offset: usize = (1 - 1) * envelope_size;
8244
8245            // Zero reserved fields.
8246            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8247
8248            // Safety:
8249            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8250            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8251            //   envelope_size bytes, there is always sufficient room.
8252            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8253                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8254                encoder,
8255                offset + cur_offset,
8256                depth,
8257            )?;
8258
8259            _prev_end_offset = cur_offset + envelope_size;
8260            if 2 > max_ordinal {
8261                return Ok(());
8262            }
8263
8264            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8265            // are envelope_size bytes.
8266            let cur_offset: usize = (2 - 1) * envelope_size;
8267
8268            // Zero reserved fields.
8269            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8270
8271            // Safety:
8272            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8273            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8274            //   envelope_size bytes, there is always sufficient room.
8275            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8276                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8277                encoder,
8278                offset + cur_offset,
8279                depth,
8280            )?;
8281
8282            _prev_end_offset = cur_offset + envelope_size;
8283
8284            Ok(())
8285        }
8286    }
8287
8288    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DelayInfo {
8289        #[inline(always)]
8290        fn new_empty() -> Self {
8291            Self::default()
8292        }
8293
8294        unsafe fn decode(
8295            &mut self,
8296            decoder: &mut fidl::encoding::Decoder<'_, D>,
8297            offset: usize,
8298            mut depth: fidl::encoding::Depth,
8299        ) -> fidl::Result<()> {
8300            decoder.debug_check_bounds::<Self>(offset);
8301            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8302                None => return Err(fidl::Error::NotNullable),
8303                Some(len) => len,
8304            };
8305            // Calling decoder.out_of_line_offset(0) is not allowed.
8306            if len == 0 {
8307                return Ok(());
8308            };
8309            depth.increment()?;
8310            let envelope_size = 8;
8311            let bytes_len = len * envelope_size;
8312            let offset = decoder.out_of_line_offset(bytes_len)?;
8313            // Decode the envelope for each type.
8314            let mut _next_ordinal_to_read = 0;
8315            let mut next_offset = offset;
8316            let end_offset = offset + bytes_len;
8317            _next_ordinal_to_read += 1;
8318            if next_offset >= end_offset {
8319                return Ok(());
8320            }
8321
8322            // Decode unknown envelopes for gaps in ordinals.
8323            while _next_ordinal_to_read < 1 {
8324                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8325                _next_ordinal_to_read += 1;
8326                next_offset += envelope_size;
8327            }
8328
8329            let next_out_of_line = decoder.next_out_of_line();
8330            let handles_before = decoder.remaining_handles();
8331            if let Some((inlined, num_bytes, num_handles)) =
8332                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8333            {
8334                let member_inline_size =
8335                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8336                if inlined != (member_inline_size <= 4) {
8337                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8338                }
8339                let inner_offset;
8340                let mut inner_depth = depth.clone();
8341                if inlined {
8342                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8343                    inner_offset = next_offset;
8344                } else {
8345                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8346                    inner_depth.increment()?;
8347                }
8348                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8349                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8350                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8351                {
8352                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8353                }
8354                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8355                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8356                }
8357            }
8358
8359            next_offset += envelope_size;
8360            _next_ordinal_to_read += 1;
8361            if next_offset >= end_offset {
8362                return Ok(());
8363            }
8364
8365            // Decode unknown envelopes for gaps in ordinals.
8366            while _next_ordinal_to_read < 2 {
8367                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8368                _next_ordinal_to_read += 1;
8369                next_offset += envelope_size;
8370            }
8371
8372            let next_out_of_line = decoder.next_out_of_line();
8373            let handles_before = decoder.remaining_handles();
8374            if let Some((inlined, num_bytes, num_handles)) =
8375                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8376            {
8377                let member_inline_size =
8378                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8379                if inlined != (member_inline_size <= 4) {
8380                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8381                }
8382                let inner_offset;
8383                let mut inner_depth = depth.clone();
8384                if inlined {
8385                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8386                    inner_offset = next_offset;
8387                } else {
8388                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8389                    inner_depth.increment()?;
8390                }
8391                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8392                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8393                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8394                {
8395                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8396                }
8397                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8398                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8399                }
8400            }
8401
8402            next_offset += envelope_size;
8403
8404            // Decode the remaining unknown envelopes.
8405            while next_offset < end_offset {
8406                _next_ordinal_to_read += 1;
8407                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8408                next_offset += envelope_size;
8409            }
8410
8411            Ok(())
8412        }
8413    }
8414
8415    impl Encoding {
8416        #[inline(always)]
8417        fn max_ordinal_present(&self) -> u64 {
8418            if let Some(_) = self.encoding_type {
8419                return 4;
8420            }
8421            if let Some(_) = self.average_encoding_bitrate {
8422                return 3;
8423            }
8424            if let Some(_) = self.decoded_frame_rate {
8425                return 2;
8426            }
8427            if let Some(_) = self.decoded_channel_count {
8428                return 1;
8429            }
8430            0
8431        }
8432    }
8433
8434    impl fidl::encoding::ValueTypeMarker for Encoding {
8435        type Borrowed<'a> = &'a Self;
8436        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8437            value
8438        }
8439    }
8440
8441    unsafe impl fidl::encoding::TypeMarker for Encoding {
8442        type Owned = Self;
8443
8444        #[inline(always)]
8445        fn inline_align(_context: fidl::encoding::Context) -> usize {
8446            8
8447        }
8448
8449        #[inline(always)]
8450        fn inline_size(_context: fidl::encoding::Context) -> usize {
8451            16
8452        }
8453    }
8454
8455    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Encoding, D> for &Encoding {
8456        unsafe fn encode(
8457            self,
8458            encoder: &mut fidl::encoding::Encoder<'_, D>,
8459            offset: usize,
8460            mut depth: fidl::encoding::Depth,
8461        ) -> fidl::Result<()> {
8462            encoder.debug_check_bounds::<Encoding>(offset);
8463            // Vector header
8464            let max_ordinal: u64 = self.max_ordinal_present();
8465            encoder.write_num(max_ordinal, offset);
8466            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8467            // Calling encoder.out_of_line_offset(0) is not allowed.
8468            if max_ordinal == 0 {
8469                return Ok(());
8470            }
8471            depth.increment()?;
8472            let envelope_size = 8;
8473            let bytes_len = max_ordinal as usize * envelope_size;
8474            #[allow(unused_variables)]
8475            let offset = encoder.out_of_line_offset(bytes_len);
8476            let mut _prev_end_offset: usize = 0;
8477            if 1 > max_ordinal {
8478                return Ok(());
8479            }
8480
8481            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8482            // are envelope_size bytes.
8483            let cur_offset: usize = (1 - 1) * envelope_size;
8484
8485            // Zero reserved fields.
8486            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8487
8488            // Safety:
8489            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8490            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8491            //   envelope_size bytes, there is always sufficient room.
8492            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8493                self.decoded_channel_count
8494                    .as_ref()
8495                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8496                encoder,
8497                offset + cur_offset,
8498                depth,
8499            )?;
8500
8501            _prev_end_offset = cur_offset + envelope_size;
8502            if 2 > max_ordinal {
8503                return Ok(());
8504            }
8505
8506            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8507            // are envelope_size bytes.
8508            let cur_offset: usize = (2 - 1) * envelope_size;
8509
8510            // Zero reserved fields.
8511            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8512
8513            // Safety:
8514            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8515            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8516            //   envelope_size bytes, there is always sufficient room.
8517            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8518                self.decoded_frame_rate
8519                    .as_ref()
8520                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8521                encoder,
8522                offset + cur_offset,
8523                depth,
8524            )?;
8525
8526            _prev_end_offset = cur_offset + envelope_size;
8527            if 3 > max_ordinal {
8528                return Ok(());
8529            }
8530
8531            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8532            // are envelope_size bytes.
8533            let cur_offset: usize = (3 - 1) * envelope_size;
8534
8535            // Zero reserved fields.
8536            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8537
8538            // Safety:
8539            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8540            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8541            //   envelope_size bytes, there is always sufficient room.
8542            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8543                self.average_encoding_bitrate
8544                    .as_ref()
8545                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8546                encoder,
8547                offset + cur_offset,
8548                depth,
8549            )?;
8550
8551            _prev_end_offset = cur_offset + envelope_size;
8552            if 4 > max_ordinal {
8553                return Ok(());
8554            }
8555
8556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8557            // are envelope_size bytes.
8558            let cur_offset: usize = (4 - 1) * envelope_size;
8559
8560            // Zero reserved fields.
8561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8562
8563            // Safety:
8564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8566            //   envelope_size bytes, there is always sufficient room.
8567            fidl::encoding::encode_in_envelope_optional::<EncodingType, D>(
8568                self.encoding_type
8569                    .as_ref()
8570                    .map(<EncodingType as fidl::encoding::ValueTypeMarker>::borrow),
8571                encoder,
8572                offset + cur_offset,
8573                depth,
8574            )?;
8575
8576            _prev_end_offset = cur_offset + envelope_size;
8577
8578            Ok(())
8579        }
8580    }
8581
8582    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Encoding {
8583        #[inline(always)]
8584        fn new_empty() -> Self {
8585            Self::default()
8586        }
8587
8588        unsafe fn decode(
8589            &mut self,
8590            decoder: &mut fidl::encoding::Decoder<'_, D>,
8591            offset: usize,
8592            mut depth: fidl::encoding::Depth,
8593        ) -> fidl::Result<()> {
8594            decoder.debug_check_bounds::<Self>(offset);
8595            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8596                None => return Err(fidl::Error::NotNullable),
8597                Some(len) => len,
8598            };
8599            // Calling decoder.out_of_line_offset(0) is not allowed.
8600            if len == 0 {
8601                return Ok(());
8602            };
8603            depth.increment()?;
8604            let envelope_size = 8;
8605            let bytes_len = len * envelope_size;
8606            let offset = decoder.out_of_line_offset(bytes_len)?;
8607            // Decode the envelope for each type.
8608            let mut _next_ordinal_to_read = 0;
8609            let mut next_offset = offset;
8610            let end_offset = offset + bytes_len;
8611            _next_ordinal_to_read += 1;
8612            if next_offset >= end_offset {
8613                return Ok(());
8614            }
8615
8616            // Decode unknown envelopes for gaps in ordinals.
8617            while _next_ordinal_to_read < 1 {
8618                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8619                _next_ordinal_to_read += 1;
8620                next_offset += envelope_size;
8621            }
8622
8623            let next_out_of_line = decoder.next_out_of_line();
8624            let handles_before = decoder.remaining_handles();
8625            if let Some((inlined, num_bytes, num_handles)) =
8626                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8627            {
8628                let member_inline_size =
8629                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8630                if inlined != (member_inline_size <= 4) {
8631                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8632                }
8633                let inner_offset;
8634                let mut inner_depth = depth.clone();
8635                if inlined {
8636                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8637                    inner_offset = next_offset;
8638                } else {
8639                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8640                    inner_depth.increment()?;
8641                }
8642                let val_ref =
8643                    self.decoded_channel_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
8644                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8645                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8646                {
8647                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8648                }
8649                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8650                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8651                }
8652            }
8653
8654            next_offset += envelope_size;
8655            _next_ordinal_to_read += 1;
8656            if next_offset >= end_offset {
8657                return Ok(());
8658            }
8659
8660            // Decode unknown envelopes for gaps in ordinals.
8661            while _next_ordinal_to_read < 2 {
8662                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8663                _next_ordinal_to_read += 1;
8664                next_offset += envelope_size;
8665            }
8666
8667            let next_out_of_line = decoder.next_out_of_line();
8668            let handles_before = decoder.remaining_handles();
8669            if let Some((inlined, num_bytes, num_handles)) =
8670                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8671            {
8672                let member_inline_size =
8673                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8674                if inlined != (member_inline_size <= 4) {
8675                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8676                }
8677                let inner_offset;
8678                let mut inner_depth = depth.clone();
8679                if inlined {
8680                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8681                    inner_offset = next_offset;
8682                } else {
8683                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8684                    inner_depth.increment()?;
8685                }
8686                let val_ref =
8687                    self.decoded_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8688                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8689                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8690                {
8691                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8692                }
8693                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8694                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8695                }
8696            }
8697
8698            next_offset += envelope_size;
8699            _next_ordinal_to_read += 1;
8700            if next_offset >= end_offset {
8701                return Ok(());
8702            }
8703
8704            // Decode unknown envelopes for gaps in ordinals.
8705            while _next_ordinal_to_read < 3 {
8706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8707                _next_ordinal_to_read += 1;
8708                next_offset += envelope_size;
8709            }
8710
8711            let next_out_of_line = decoder.next_out_of_line();
8712            let handles_before = decoder.remaining_handles();
8713            if let Some((inlined, num_bytes, num_handles)) =
8714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8715            {
8716                let member_inline_size =
8717                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8718                if inlined != (member_inline_size <= 4) {
8719                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8720                }
8721                let inner_offset;
8722                let mut inner_depth = depth.clone();
8723                if inlined {
8724                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8725                    inner_offset = next_offset;
8726                } else {
8727                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8728                    inner_depth.increment()?;
8729                }
8730                let val_ref =
8731                    self.average_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8732                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8733                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8734                {
8735                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8736                }
8737                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8738                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8739                }
8740            }
8741
8742            next_offset += envelope_size;
8743            _next_ordinal_to_read += 1;
8744            if next_offset >= end_offset {
8745                return Ok(());
8746            }
8747
8748            // Decode unknown envelopes for gaps in ordinals.
8749            while _next_ordinal_to_read < 4 {
8750                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8751                _next_ordinal_to_read += 1;
8752                next_offset += envelope_size;
8753            }
8754
8755            let next_out_of_line = decoder.next_out_of_line();
8756            let handles_before = decoder.remaining_handles();
8757            if let Some((inlined, num_bytes, num_handles)) =
8758                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8759            {
8760                let member_inline_size =
8761                    <EncodingType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8762                if inlined != (member_inline_size <= 4) {
8763                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8764                }
8765                let inner_offset;
8766                let mut inner_depth = depth.clone();
8767                if inlined {
8768                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8769                    inner_offset = next_offset;
8770                } else {
8771                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8772                    inner_depth.increment()?;
8773                }
8774                let val_ref =
8775                    self.encoding_type.get_or_insert_with(|| fidl::new_empty!(EncodingType, D));
8776                fidl::decode!(EncodingType, D, val_ref, decoder, inner_offset, inner_depth)?;
8777                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8778                {
8779                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8780                }
8781                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8782                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8783                }
8784            }
8785
8786            next_offset += envelope_size;
8787
8788            // Decode the remaining unknown envelopes.
8789            while next_offset < end_offset {
8790                _next_ordinal_to_read += 1;
8791                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8792                next_offset += envelope_size;
8793            }
8794
8795            Ok(())
8796        }
8797    }
8798
8799    impl Format {
8800        #[inline(always)]
8801        fn max_ordinal_present(&self) -> u64 {
8802            if let Some(_) = self.pcm_format {
8803                return 1;
8804            }
8805            0
8806        }
8807    }
8808
8809    impl fidl::encoding::ValueTypeMarker for Format {
8810        type Borrowed<'a> = &'a Self;
8811        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8812            value
8813        }
8814    }
8815
8816    unsafe impl fidl::encoding::TypeMarker for Format {
8817        type Owned = Self;
8818
8819        #[inline(always)]
8820        fn inline_align(_context: fidl::encoding::Context) -> usize {
8821            8
8822        }
8823
8824        #[inline(always)]
8825        fn inline_size(_context: fidl::encoding::Context) -> usize {
8826            16
8827        }
8828    }
8829
8830    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format, D> for &Format {
8831        unsafe fn encode(
8832            self,
8833            encoder: &mut fidl::encoding::Encoder<'_, D>,
8834            offset: usize,
8835            mut depth: fidl::encoding::Depth,
8836        ) -> fidl::Result<()> {
8837            encoder.debug_check_bounds::<Format>(offset);
8838            // Vector header
8839            let max_ordinal: u64 = self.max_ordinal_present();
8840            encoder.write_num(max_ordinal, offset);
8841            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8842            // Calling encoder.out_of_line_offset(0) is not allowed.
8843            if max_ordinal == 0 {
8844                return Ok(());
8845            }
8846            depth.increment()?;
8847            let envelope_size = 8;
8848            let bytes_len = max_ordinal as usize * envelope_size;
8849            #[allow(unused_variables)]
8850            let offset = encoder.out_of_line_offset(bytes_len);
8851            let mut _prev_end_offset: usize = 0;
8852            if 1 > max_ordinal {
8853                return Ok(());
8854            }
8855
8856            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8857            // are envelope_size bytes.
8858            let cur_offset: usize = (1 - 1) * envelope_size;
8859
8860            // Zero reserved fields.
8861            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8862
8863            // Safety:
8864            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8865            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8866            //   envelope_size bytes, there is always sufficient room.
8867            fidl::encoding::encode_in_envelope_optional::<PcmFormat, D>(
8868                self.pcm_format
8869                    .as_ref()
8870                    .map(<PcmFormat as fidl::encoding::ValueTypeMarker>::borrow),
8871                encoder,
8872                offset + cur_offset,
8873                depth,
8874            )?;
8875
8876            _prev_end_offset = cur_offset + envelope_size;
8877
8878            Ok(())
8879        }
8880    }
8881
8882    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
8883        #[inline(always)]
8884        fn new_empty() -> Self {
8885            Self::default()
8886        }
8887
8888        unsafe fn decode(
8889            &mut self,
8890            decoder: &mut fidl::encoding::Decoder<'_, D>,
8891            offset: usize,
8892            mut depth: fidl::encoding::Depth,
8893        ) -> fidl::Result<()> {
8894            decoder.debug_check_bounds::<Self>(offset);
8895            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8896                None => return Err(fidl::Error::NotNullable),
8897                Some(len) => len,
8898            };
8899            // Calling decoder.out_of_line_offset(0) is not allowed.
8900            if len == 0 {
8901                return Ok(());
8902            };
8903            depth.increment()?;
8904            let envelope_size = 8;
8905            let bytes_len = len * envelope_size;
8906            let offset = decoder.out_of_line_offset(bytes_len)?;
8907            // Decode the envelope for each type.
8908            let mut _next_ordinal_to_read = 0;
8909            let mut next_offset = offset;
8910            let end_offset = offset + bytes_len;
8911            _next_ordinal_to_read += 1;
8912            if next_offset >= end_offset {
8913                return Ok(());
8914            }
8915
8916            // Decode unknown envelopes for gaps in ordinals.
8917            while _next_ordinal_to_read < 1 {
8918                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8919                _next_ordinal_to_read += 1;
8920                next_offset += envelope_size;
8921            }
8922
8923            let next_out_of_line = decoder.next_out_of_line();
8924            let handles_before = decoder.remaining_handles();
8925            if let Some((inlined, num_bytes, num_handles)) =
8926                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8927            {
8928                let member_inline_size =
8929                    <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8930                if inlined != (member_inline_size <= 4) {
8931                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8932                }
8933                let inner_offset;
8934                let mut inner_depth = depth.clone();
8935                if inlined {
8936                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8937                    inner_offset = next_offset;
8938                } else {
8939                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8940                    inner_depth.increment()?;
8941                }
8942                let val_ref = self.pcm_format.get_or_insert_with(|| fidl::new_empty!(PcmFormat, D));
8943                fidl::decode!(PcmFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
8944                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8945                {
8946                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8947                }
8948                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8949                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8950                }
8951            }
8952
8953            next_offset += envelope_size;
8954
8955            // Decode the remaining unknown envelopes.
8956            while next_offset < end_offset {
8957                _next_ordinal_to_read += 1;
8958                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8959                next_offset += envelope_size;
8960            }
8961
8962            Ok(())
8963        }
8964    }
8965
8966    impl GainState {
8967        #[inline(always)]
8968        fn max_ordinal_present(&self) -> u64 {
8969            if let Some(_) = self.gain_db {
8970                return 3;
8971            }
8972            if let Some(_) = self.agc_enabled {
8973                return 2;
8974            }
8975            if let Some(_) = self.muted {
8976                return 1;
8977            }
8978            0
8979        }
8980    }
8981
8982    impl fidl::encoding::ValueTypeMarker for GainState {
8983        type Borrowed<'a> = &'a Self;
8984        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8985            value
8986        }
8987    }
8988
8989    unsafe impl fidl::encoding::TypeMarker for GainState {
8990        type Owned = Self;
8991
8992        #[inline(always)]
8993        fn inline_align(_context: fidl::encoding::Context) -> usize {
8994            8
8995        }
8996
8997        #[inline(always)]
8998        fn inline_size(_context: fidl::encoding::Context) -> usize {
8999            16
9000        }
9001    }
9002
9003    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainState, D>
9004        for &GainState
9005    {
9006        unsafe fn encode(
9007            self,
9008            encoder: &mut fidl::encoding::Encoder<'_, D>,
9009            offset: usize,
9010            mut depth: fidl::encoding::Depth,
9011        ) -> fidl::Result<()> {
9012            encoder.debug_check_bounds::<GainState>(offset);
9013            // Vector header
9014            let max_ordinal: u64 = self.max_ordinal_present();
9015            encoder.write_num(max_ordinal, offset);
9016            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9017            // Calling encoder.out_of_line_offset(0) is not allowed.
9018            if max_ordinal == 0 {
9019                return Ok(());
9020            }
9021            depth.increment()?;
9022            let envelope_size = 8;
9023            let bytes_len = max_ordinal as usize * envelope_size;
9024            #[allow(unused_variables)]
9025            let offset = encoder.out_of_line_offset(bytes_len);
9026            let mut _prev_end_offset: usize = 0;
9027            if 1 > max_ordinal {
9028                return Ok(());
9029            }
9030
9031            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9032            // are envelope_size bytes.
9033            let cur_offset: usize = (1 - 1) * envelope_size;
9034
9035            // Zero reserved fields.
9036            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9037
9038            // Safety:
9039            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9040            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9041            //   envelope_size bytes, there is always sufficient room.
9042            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9043                self.muted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9044                encoder,
9045                offset + cur_offset,
9046                depth,
9047            )?;
9048
9049            _prev_end_offset = cur_offset + envelope_size;
9050            if 2 > max_ordinal {
9051                return Ok(());
9052            }
9053
9054            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9055            // are envelope_size bytes.
9056            let cur_offset: usize = (2 - 1) * envelope_size;
9057
9058            // Zero reserved fields.
9059            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9060
9061            // Safety:
9062            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9063            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9064            //   envelope_size bytes, there is always sufficient room.
9065            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9066                self.agc_enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9067                encoder,
9068                offset + cur_offset,
9069                depth,
9070            )?;
9071
9072            _prev_end_offset = cur_offset + envelope_size;
9073            if 3 > max_ordinal {
9074                return Ok(());
9075            }
9076
9077            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9078            // are envelope_size bytes.
9079            let cur_offset: usize = (3 - 1) * envelope_size;
9080
9081            // Zero reserved fields.
9082            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9083
9084            // Safety:
9085            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9086            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9087            //   envelope_size bytes, there is always sufficient room.
9088            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9089                self.gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9090                encoder,
9091                offset + cur_offset,
9092                depth,
9093            )?;
9094
9095            _prev_end_offset = cur_offset + envelope_size;
9096
9097            Ok(())
9098        }
9099    }
9100
9101    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainState {
9102        #[inline(always)]
9103        fn new_empty() -> Self {
9104            Self::default()
9105        }
9106
9107        unsafe fn decode(
9108            &mut self,
9109            decoder: &mut fidl::encoding::Decoder<'_, D>,
9110            offset: usize,
9111            mut depth: fidl::encoding::Depth,
9112        ) -> fidl::Result<()> {
9113            decoder.debug_check_bounds::<Self>(offset);
9114            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9115                None => return Err(fidl::Error::NotNullable),
9116                Some(len) => len,
9117            };
9118            // Calling decoder.out_of_line_offset(0) is not allowed.
9119            if len == 0 {
9120                return Ok(());
9121            };
9122            depth.increment()?;
9123            let envelope_size = 8;
9124            let bytes_len = len * envelope_size;
9125            let offset = decoder.out_of_line_offset(bytes_len)?;
9126            // Decode the envelope for each type.
9127            let mut _next_ordinal_to_read = 0;
9128            let mut next_offset = offset;
9129            let end_offset = offset + bytes_len;
9130            _next_ordinal_to_read += 1;
9131            if next_offset >= end_offset {
9132                return Ok(());
9133            }
9134
9135            // Decode unknown envelopes for gaps in ordinals.
9136            while _next_ordinal_to_read < 1 {
9137                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9138                _next_ordinal_to_read += 1;
9139                next_offset += envelope_size;
9140            }
9141
9142            let next_out_of_line = decoder.next_out_of_line();
9143            let handles_before = decoder.remaining_handles();
9144            if let Some((inlined, num_bytes, num_handles)) =
9145                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9146            {
9147                let member_inline_size =
9148                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9149                if inlined != (member_inline_size <= 4) {
9150                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9151                }
9152                let inner_offset;
9153                let mut inner_depth = depth.clone();
9154                if inlined {
9155                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9156                    inner_offset = next_offset;
9157                } else {
9158                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9159                    inner_depth.increment()?;
9160                }
9161                let val_ref = self.muted.get_or_insert_with(|| fidl::new_empty!(bool, D));
9162                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9163                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9164                {
9165                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9166                }
9167                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9168                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9169                }
9170            }
9171
9172            next_offset += envelope_size;
9173            _next_ordinal_to_read += 1;
9174            if next_offset >= end_offset {
9175                return Ok(());
9176            }
9177
9178            // Decode unknown envelopes for gaps in ordinals.
9179            while _next_ordinal_to_read < 2 {
9180                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9181                _next_ordinal_to_read += 1;
9182                next_offset += envelope_size;
9183            }
9184
9185            let next_out_of_line = decoder.next_out_of_line();
9186            let handles_before = decoder.remaining_handles();
9187            if let Some((inlined, num_bytes, num_handles)) =
9188                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9189            {
9190                let member_inline_size =
9191                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9192                if inlined != (member_inline_size <= 4) {
9193                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9194                }
9195                let inner_offset;
9196                let mut inner_depth = depth.clone();
9197                if inlined {
9198                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9199                    inner_offset = next_offset;
9200                } else {
9201                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9202                    inner_depth.increment()?;
9203                }
9204                let val_ref = self.agc_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
9205                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9206                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9207                {
9208                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9209                }
9210                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9211                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9212                }
9213            }
9214
9215            next_offset += envelope_size;
9216            _next_ordinal_to_read += 1;
9217            if next_offset >= end_offset {
9218                return Ok(());
9219            }
9220
9221            // Decode unknown envelopes for gaps in ordinals.
9222            while _next_ordinal_to_read < 3 {
9223                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9224                _next_ordinal_to_read += 1;
9225                next_offset += envelope_size;
9226            }
9227
9228            let next_out_of_line = decoder.next_out_of_line();
9229            let handles_before = decoder.remaining_handles();
9230            if let Some((inlined, num_bytes, num_handles)) =
9231                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9232            {
9233                let member_inline_size =
9234                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9235                if inlined != (member_inline_size <= 4) {
9236                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9237                }
9238                let inner_offset;
9239                let mut inner_depth = depth.clone();
9240                if inlined {
9241                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9242                    inner_offset = next_offset;
9243                } else {
9244                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9245                    inner_depth.increment()?;
9246                }
9247                let val_ref = self.gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9248                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9249                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9250                {
9251                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9252                }
9253                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9254                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9255                }
9256            }
9257
9258            next_offset += envelope_size;
9259
9260            // Decode the remaining unknown envelopes.
9261            while next_offset < end_offset {
9262                _next_ordinal_to_read += 1;
9263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9264                next_offset += envelope_size;
9265            }
9266
9267            Ok(())
9268        }
9269    }
9270
9271    impl HealthState {
9272        #[inline(always)]
9273        fn max_ordinal_present(&self) -> u64 {
9274            if let Some(_) = self.healthy {
9275                return 1;
9276            }
9277            0
9278        }
9279    }
9280
9281    impl fidl::encoding::ValueTypeMarker for HealthState {
9282        type Borrowed<'a> = &'a Self;
9283        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9284            value
9285        }
9286    }
9287
9288    unsafe impl fidl::encoding::TypeMarker for HealthState {
9289        type Owned = Self;
9290
9291        #[inline(always)]
9292        fn inline_align(_context: fidl::encoding::Context) -> usize {
9293            8
9294        }
9295
9296        #[inline(always)]
9297        fn inline_size(_context: fidl::encoding::Context) -> usize {
9298            16
9299        }
9300    }
9301
9302    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthState, D>
9303        for &HealthState
9304    {
9305        unsafe fn encode(
9306            self,
9307            encoder: &mut fidl::encoding::Encoder<'_, D>,
9308            offset: usize,
9309            mut depth: fidl::encoding::Depth,
9310        ) -> fidl::Result<()> {
9311            encoder.debug_check_bounds::<HealthState>(offset);
9312            // Vector header
9313            let max_ordinal: u64 = self.max_ordinal_present();
9314            encoder.write_num(max_ordinal, offset);
9315            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9316            // Calling encoder.out_of_line_offset(0) is not allowed.
9317            if max_ordinal == 0 {
9318                return Ok(());
9319            }
9320            depth.increment()?;
9321            let envelope_size = 8;
9322            let bytes_len = max_ordinal as usize * envelope_size;
9323            #[allow(unused_variables)]
9324            let offset = encoder.out_of_line_offset(bytes_len);
9325            let mut _prev_end_offset: usize = 0;
9326            if 1 > max_ordinal {
9327                return Ok(());
9328            }
9329
9330            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9331            // are envelope_size bytes.
9332            let cur_offset: usize = (1 - 1) * envelope_size;
9333
9334            // Zero reserved fields.
9335            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9336
9337            // Safety:
9338            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9339            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9340            //   envelope_size bytes, there is always sufficient room.
9341            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9342                self.healthy.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9343                encoder,
9344                offset + cur_offset,
9345                depth,
9346            )?;
9347
9348            _prev_end_offset = cur_offset + envelope_size;
9349
9350            Ok(())
9351        }
9352    }
9353
9354    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthState {
9355        #[inline(always)]
9356        fn new_empty() -> Self {
9357            Self::default()
9358        }
9359
9360        unsafe fn decode(
9361            &mut self,
9362            decoder: &mut fidl::encoding::Decoder<'_, D>,
9363            offset: usize,
9364            mut depth: fidl::encoding::Depth,
9365        ) -> fidl::Result<()> {
9366            decoder.debug_check_bounds::<Self>(offset);
9367            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9368                None => return Err(fidl::Error::NotNullable),
9369                Some(len) => len,
9370            };
9371            // Calling decoder.out_of_line_offset(0) is not allowed.
9372            if len == 0 {
9373                return Ok(());
9374            };
9375            depth.increment()?;
9376            let envelope_size = 8;
9377            let bytes_len = len * envelope_size;
9378            let offset = decoder.out_of_line_offset(bytes_len)?;
9379            // Decode the envelope for each type.
9380            let mut _next_ordinal_to_read = 0;
9381            let mut next_offset = offset;
9382            let end_offset = offset + bytes_len;
9383            _next_ordinal_to_read += 1;
9384            if next_offset >= end_offset {
9385                return Ok(());
9386            }
9387
9388            // Decode unknown envelopes for gaps in ordinals.
9389            while _next_ordinal_to_read < 1 {
9390                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9391                _next_ordinal_to_read += 1;
9392                next_offset += envelope_size;
9393            }
9394
9395            let next_out_of_line = decoder.next_out_of_line();
9396            let handles_before = decoder.remaining_handles();
9397            if let Some((inlined, num_bytes, num_handles)) =
9398                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9399            {
9400                let member_inline_size =
9401                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9402                if inlined != (member_inline_size <= 4) {
9403                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9404                }
9405                let inner_offset;
9406                let mut inner_depth = depth.clone();
9407                if inlined {
9408                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9409                    inner_offset = next_offset;
9410                } else {
9411                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9412                    inner_depth.increment()?;
9413                }
9414                let val_ref = self.healthy.get_or_insert_with(|| fidl::new_empty!(bool, D));
9415                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9416                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9417                {
9418                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9419                }
9420                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9421                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9422                }
9423            }
9424
9425            next_offset += envelope_size;
9426
9427            // Decode the remaining unknown envelopes.
9428            while next_offset < end_offset {
9429                _next_ordinal_to_read += 1;
9430                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9431                next_offset += envelope_size;
9432            }
9433
9434            Ok(())
9435        }
9436    }
9437
9438    impl PacketStreamProperties {
9439        #[inline(always)]
9440        fn max_ordinal_present(&self) -> u64 {
9441            if let Some(_) = self.supported_buffer_types {
9442                return 2;
9443            }
9444            if let Some(_) = self.needs_cache_flush_or_invalidate {
9445                return 1;
9446            }
9447            0
9448        }
9449    }
9450
9451    impl fidl::encoding::ValueTypeMarker for PacketStreamProperties {
9452        type Borrowed<'a> = &'a Self;
9453        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9454            value
9455        }
9456    }
9457
9458    unsafe impl fidl::encoding::TypeMarker for PacketStreamProperties {
9459        type Owned = Self;
9460
9461        #[inline(always)]
9462        fn inline_align(_context: fidl::encoding::Context) -> usize {
9463            8
9464        }
9465
9466        #[inline(always)]
9467        fn inline_size(_context: fidl::encoding::Context) -> usize {
9468            16
9469        }
9470    }
9471
9472    unsafe impl<D: fidl::encoding::ResourceDialect>
9473        fidl::encoding::Encode<PacketStreamProperties, D> for &PacketStreamProperties
9474    {
9475        unsafe fn encode(
9476            self,
9477            encoder: &mut fidl::encoding::Encoder<'_, D>,
9478            offset: usize,
9479            mut depth: fidl::encoding::Depth,
9480        ) -> fidl::Result<()> {
9481            encoder.debug_check_bounds::<PacketStreamProperties>(offset);
9482            // Vector header
9483            let max_ordinal: u64 = self.max_ordinal_present();
9484            encoder.write_num(max_ordinal, offset);
9485            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9486            // Calling encoder.out_of_line_offset(0) is not allowed.
9487            if max_ordinal == 0 {
9488                return Ok(());
9489            }
9490            depth.increment()?;
9491            let envelope_size = 8;
9492            let bytes_len = max_ordinal as usize * envelope_size;
9493            #[allow(unused_variables)]
9494            let offset = encoder.out_of_line_offset(bytes_len);
9495            let mut _prev_end_offset: usize = 0;
9496            if 1 > max_ordinal {
9497                return Ok(());
9498            }
9499
9500            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9501            // are envelope_size bytes.
9502            let cur_offset: usize = (1 - 1) * envelope_size;
9503
9504            // Zero reserved fields.
9505            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9506
9507            // Safety:
9508            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9509            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9510            //   envelope_size bytes, there is always sufficient room.
9511            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9512                self.needs_cache_flush_or_invalidate
9513                    .as_ref()
9514                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9515                encoder,
9516                offset + cur_offset,
9517                depth,
9518            )?;
9519
9520            _prev_end_offset = cur_offset + envelope_size;
9521            if 2 > max_ordinal {
9522                return Ok(());
9523            }
9524
9525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9526            // are envelope_size bytes.
9527            let cur_offset: usize = (2 - 1) * envelope_size;
9528
9529            // Zero reserved fields.
9530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9531
9532            // Safety:
9533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9535            //   envelope_size bytes, there is always sufficient room.
9536            fidl::encoding::encode_in_envelope_optional::<BufferType, D>(
9537                self.supported_buffer_types
9538                    .as_ref()
9539                    .map(<BufferType as fidl::encoding::ValueTypeMarker>::borrow),
9540                encoder,
9541                offset + cur_offset,
9542                depth,
9543            )?;
9544
9545            _prev_end_offset = cur_offset + envelope_size;
9546
9547            Ok(())
9548        }
9549    }
9550
9551    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9552        for PacketStreamProperties
9553    {
9554        #[inline(always)]
9555        fn new_empty() -> Self {
9556            Self::default()
9557        }
9558
9559        unsafe fn decode(
9560            &mut self,
9561            decoder: &mut fidl::encoding::Decoder<'_, D>,
9562            offset: usize,
9563            mut depth: fidl::encoding::Depth,
9564        ) -> fidl::Result<()> {
9565            decoder.debug_check_bounds::<Self>(offset);
9566            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9567                None => return Err(fidl::Error::NotNullable),
9568                Some(len) => len,
9569            };
9570            // Calling decoder.out_of_line_offset(0) is not allowed.
9571            if len == 0 {
9572                return Ok(());
9573            };
9574            depth.increment()?;
9575            let envelope_size = 8;
9576            let bytes_len = len * envelope_size;
9577            let offset = decoder.out_of_line_offset(bytes_len)?;
9578            // Decode the envelope for each type.
9579            let mut _next_ordinal_to_read = 0;
9580            let mut next_offset = offset;
9581            let end_offset = offset + bytes_len;
9582            _next_ordinal_to_read += 1;
9583            if next_offset >= end_offset {
9584                return Ok(());
9585            }
9586
9587            // Decode unknown envelopes for gaps in ordinals.
9588            while _next_ordinal_to_read < 1 {
9589                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9590                _next_ordinal_to_read += 1;
9591                next_offset += envelope_size;
9592            }
9593
9594            let next_out_of_line = decoder.next_out_of_line();
9595            let handles_before = decoder.remaining_handles();
9596            if let Some((inlined, num_bytes, num_handles)) =
9597                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9598            {
9599                let member_inline_size =
9600                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9601                if inlined != (member_inline_size <= 4) {
9602                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9603                }
9604                let inner_offset;
9605                let mut inner_depth = depth.clone();
9606                if inlined {
9607                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9608                    inner_offset = next_offset;
9609                } else {
9610                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9611                    inner_depth.increment()?;
9612                }
9613                let val_ref = self
9614                    .needs_cache_flush_or_invalidate
9615                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9616                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9617                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9618                {
9619                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9620                }
9621                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9622                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9623                }
9624            }
9625
9626            next_offset += envelope_size;
9627            _next_ordinal_to_read += 1;
9628            if next_offset >= end_offset {
9629                return Ok(());
9630            }
9631
9632            // Decode unknown envelopes for gaps in ordinals.
9633            while _next_ordinal_to_read < 2 {
9634                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9635                _next_ordinal_to_read += 1;
9636                next_offset += envelope_size;
9637            }
9638
9639            let next_out_of_line = decoder.next_out_of_line();
9640            let handles_before = decoder.remaining_handles();
9641            if let Some((inlined, num_bytes, num_handles)) =
9642                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9643            {
9644                let member_inline_size =
9645                    <BufferType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9646                if inlined != (member_inline_size <= 4) {
9647                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9648                }
9649                let inner_offset;
9650                let mut inner_depth = depth.clone();
9651                if inlined {
9652                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9653                    inner_offset = next_offset;
9654                } else {
9655                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9656                    inner_depth.increment()?;
9657                }
9658                let val_ref = self
9659                    .supported_buffer_types
9660                    .get_or_insert_with(|| fidl::new_empty!(BufferType, D));
9661                fidl::decode!(BufferType, D, val_ref, decoder, inner_offset, inner_depth)?;
9662                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9663                {
9664                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9665                }
9666                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9667                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9668                }
9669            }
9670
9671            next_offset += envelope_size;
9672
9673            // Decode the remaining unknown envelopes.
9674            while next_offset < end_offset {
9675                _next_ordinal_to_read += 1;
9676                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9677                next_offset += envelope_size;
9678            }
9679
9680            Ok(())
9681        }
9682    }
9683
9684    impl PacketStreamSinkPutPacketResponse {
9685        #[inline(always)]
9686        fn max_ordinal_present(&self) -> u64 {
9687            0
9688        }
9689    }
9690
9691    impl fidl::encoding::ValueTypeMarker for PacketStreamSinkPutPacketResponse {
9692        type Borrowed<'a> = &'a Self;
9693        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9694            value
9695        }
9696    }
9697
9698    unsafe impl fidl::encoding::TypeMarker for PacketStreamSinkPutPacketResponse {
9699        type Owned = Self;
9700
9701        #[inline(always)]
9702        fn inline_align(_context: fidl::encoding::Context) -> usize {
9703            8
9704        }
9705
9706        #[inline(always)]
9707        fn inline_size(_context: fidl::encoding::Context) -> usize {
9708            16
9709        }
9710    }
9711
9712    unsafe impl<D: fidl::encoding::ResourceDialect>
9713        fidl::encoding::Encode<PacketStreamSinkPutPacketResponse, D>
9714        for &PacketStreamSinkPutPacketResponse
9715    {
9716        unsafe fn encode(
9717            self,
9718            encoder: &mut fidl::encoding::Encoder<'_, D>,
9719            offset: usize,
9720            mut depth: fidl::encoding::Depth,
9721        ) -> fidl::Result<()> {
9722            encoder.debug_check_bounds::<PacketStreamSinkPutPacketResponse>(offset);
9723            // Vector header
9724            let max_ordinal: u64 = self.max_ordinal_present();
9725            encoder.write_num(max_ordinal, offset);
9726            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9727            // Calling encoder.out_of_line_offset(0) is not allowed.
9728            if max_ordinal == 0 {
9729                return Ok(());
9730            }
9731            depth.increment()?;
9732            let envelope_size = 8;
9733            let bytes_len = max_ordinal as usize * envelope_size;
9734            #[allow(unused_variables)]
9735            let offset = encoder.out_of_line_offset(bytes_len);
9736            let mut _prev_end_offset: usize = 0;
9737
9738            Ok(())
9739        }
9740    }
9741
9742    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9743        for PacketStreamSinkPutPacketResponse
9744    {
9745        #[inline(always)]
9746        fn new_empty() -> Self {
9747            Self::default()
9748        }
9749
9750        unsafe fn decode(
9751            &mut self,
9752            decoder: &mut fidl::encoding::Decoder<'_, D>,
9753            offset: usize,
9754            mut depth: fidl::encoding::Depth,
9755        ) -> fidl::Result<()> {
9756            decoder.debug_check_bounds::<Self>(offset);
9757            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9758                None => return Err(fidl::Error::NotNullable),
9759                Some(len) => len,
9760            };
9761            // Calling decoder.out_of_line_offset(0) is not allowed.
9762            if len == 0 {
9763                return Ok(());
9764            };
9765            depth.increment()?;
9766            let envelope_size = 8;
9767            let bytes_len = len * envelope_size;
9768            let offset = decoder.out_of_line_offset(bytes_len)?;
9769            // Decode the envelope for each type.
9770            let mut _next_ordinal_to_read = 0;
9771            let mut next_offset = offset;
9772            let end_offset = offset + bytes_len;
9773
9774            // Decode the remaining unknown envelopes.
9775            while next_offset < end_offset {
9776                _next_ordinal_to_read += 1;
9777                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9778                next_offset += envelope_size;
9779            }
9780
9781            Ok(())
9782        }
9783    }
9784
9785    impl PcmSupportedFormats {
9786        #[inline(always)]
9787        fn max_ordinal_present(&self) -> u64 {
9788            if let Some(_) = self.frame_rates {
9789                return 5;
9790            }
9791            if let Some(_) = self.valid_bits_per_sample {
9792                return 4;
9793            }
9794            if let Some(_) = self.bytes_per_sample {
9795                return 3;
9796            }
9797            if let Some(_) = self.sample_formats {
9798                return 2;
9799            }
9800            if let Some(_) = self.channel_sets {
9801                return 1;
9802            }
9803            0
9804        }
9805    }
9806
9807    impl fidl::encoding::ValueTypeMarker for PcmSupportedFormats {
9808        type Borrowed<'a> = &'a Self;
9809        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9810            value
9811        }
9812    }
9813
9814    unsafe impl fidl::encoding::TypeMarker for PcmSupportedFormats {
9815        type Owned = Self;
9816
9817        #[inline(always)]
9818        fn inline_align(_context: fidl::encoding::Context) -> usize {
9819            8
9820        }
9821
9822        #[inline(always)]
9823        fn inline_size(_context: fidl::encoding::Context) -> usize {
9824            16
9825        }
9826    }
9827
9828    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmSupportedFormats, D>
9829        for &PcmSupportedFormats
9830    {
9831        unsafe fn encode(
9832            self,
9833            encoder: &mut fidl::encoding::Encoder<'_, D>,
9834            offset: usize,
9835            mut depth: fidl::encoding::Depth,
9836        ) -> fidl::Result<()> {
9837            encoder.debug_check_bounds::<PcmSupportedFormats>(offset);
9838            // Vector header
9839            let max_ordinal: u64 = self.max_ordinal_present();
9840            encoder.write_num(max_ordinal, offset);
9841            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9842            // Calling encoder.out_of_line_offset(0) is not allowed.
9843            if max_ordinal == 0 {
9844                return Ok(());
9845            }
9846            depth.increment()?;
9847            let envelope_size = 8;
9848            let bytes_len = max_ordinal as usize * envelope_size;
9849            #[allow(unused_variables)]
9850            let offset = encoder.out_of_line_offset(bytes_len);
9851            let mut _prev_end_offset: usize = 0;
9852            if 1 > max_ordinal {
9853                return Ok(());
9854            }
9855
9856            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9857            // are envelope_size bytes.
9858            let cur_offset: usize = (1 - 1) * envelope_size;
9859
9860            // Zero reserved fields.
9861            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9862
9863            // Safety:
9864            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9865            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9866            //   envelope_size bytes, there is always sufficient room.
9867            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
9868            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
9869            encoder, offset + cur_offset, depth
9870        )?;
9871
9872            _prev_end_offset = cur_offset + envelope_size;
9873            if 2 > max_ordinal {
9874                return Ok(());
9875            }
9876
9877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9878            // are envelope_size bytes.
9879            let cur_offset: usize = (2 - 1) * envelope_size;
9880
9881            // Zero reserved fields.
9882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9883
9884            // Safety:
9885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9887            //   envelope_size bytes, there is always sufficient room.
9888            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleFormat, 3>, D>(
9889            self.sample_formats.as_ref().map(<fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::ValueTypeMarker>::borrow),
9890            encoder, offset + cur_offset, depth
9891        )?;
9892
9893            _prev_end_offset = cur_offset + envelope_size;
9894            if 3 > max_ordinal {
9895                return Ok(());
9896            }
9897
9898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9899            // are envelope_size bytes.
9900            let cur_offset: usize = (3 - 1) * envelope_size;
9901
9902            // Zero reserved fields.
9903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9904
9905            // Safety:
9906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9908            //   envelope_size bytes, there is always sufficient room.
9909            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9910                self.bytes_per_sample.as_ref().map(
9911                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9912                ),
9913                encoder,
9914                offset + cur_offset,
9915                depth,
9916            )?;
9917
9918            _prev_end_offset = cur_offset + envelope_size;
9919            if 4 > max_ordinal {
9920                return Ok(());
9921            }
9922
9923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9924            // are envelope_size bytes.
9925            let cur_offset: usize = (4 - 1) * envelope_size;
9926
9927            // Zero reserved fields.
9928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9929
9930            // Safety:
9931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9933            //   envelope_size bytes, there is always sufficient room.
9934            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9935                self.valid_bits_per_sample.as_ref().map(
9936                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9937                ),
9938                encoder,
9939                offset + cur_offset,
9940                depth,
9941            )?;
9942
9943            _prev_end_offset = cur_offset + envelope_size;
9944            if 5 > max_ordinal {
9945                return Ok(());
9946            }
9947
9948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9949            // are envelope_size bytes.
9950            let cur_offset: usize = (5 - 1) * envelope_size;
9951
9952            // Zero reserved fields.
9953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9954
9955            // Safety:
9956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9958            //   envelope_size bytes, there is always sufficient room.
9959            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
9960                self.frame_rates.as_ref().map(
9961                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
9962                ),
9963                encoder,
9964                offset + cur_offset,
9965                depth,
9966            )?;
9967
9968            _prev_end_offset = cur_offset + envelope_size;
9969
9970            Ok(())
9971        }
9972    }
9973
9974    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmSupportedFormats {
9975        #[inline(always)]
9976        fn new_empty() -> Self {
9977            Self::default()
9978        }
9979
9980        unsafe fn decode(
9981            &mut self,
9982            decoder: &mut fidl::encoding::Decoder<'_, D>,
9983            offset: usize,
9984            mut depth: fidl::encoding::Depth,
9985        ) -> fidl::Result<()> {
9986            decoder.debug_check_bounds::<Self>(offset);
9987            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9988                None => return Err(fidl::Error::NotNullable),
9989                Some(len) => len,
9990            };
9991            // Calling decoder.out_of_line_offset(0) is not allowed.
9992            if len == 0 {
9993                return Ok(());
9994            };
9995            depth.increment()?;
9996            let envelope_size = 8;
9997            let bytes_len = len * envelope_size;
9998            let offset = decoder.out_of_line_offset(bytes_len)?;
9999            // Decode the envelope for each type.
10000            let mut _next_ordinal_to_read = 0;
10001            let mut next_offset = offset;
10002            let end_offset = offset + bytes_len;
10003            _next_ordinal_to_read += 1;
10004            if next_offset >= end_offset {
10005                return Ok(());
10006            }
10007
10008            // Decode unknown envelopes for gaps in ordinals.
10009            while _next_ordinal_to_read < 1 {
10010                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10011                _next_ordinal_to_read += 1;
10012                next_offset += envelope_size;
10013            }
10014
10015            let next_out_of_line = decoder.next_out_of_line();
10016            let handles_before = decoder.remaining_handles();
10017            if let Some((inlined, num_bytes, num_handles)) =
10018                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10019            {
10020                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10021                if inlined != (member_inline_size <= 4) {
10022                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10023                }
10024                let inner_offset;
10025                let mut inner_depth = depth.clone();
10026                if inlined {
10027                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10028                    inner_offset = next_offset;
10029                } else {
10030                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10031                    inner_depth.increment()?;
10032                }
10033                let val_ref = self.channel_sets.get_or_insert_with(
10034                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
10035                );
10036                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10037                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10038                {
10039                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10040                }
10041                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10042                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10043                }
10044            }
10045
10046            next_offset += envelope_size;
10047            _next_ordinal_to_read += 1;
10048            if next_offset >= end_offset {
10049                return Ok(());
10050            }
10051
10052            // Decode unknown envelopes for gaps in ordinals.
10053            while _next_ordinal_to_read < 2 {
10054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10055                _next_ordinal_to_read += 1;
10056                next_offset += envelope_size;
10057            }
10058
10059            let next_out_of_line = decoder.next_out_of_line();
10060            let handles_before = decoder.remaining_handles();
10061            if let Some((inlined, num_bytes, num_handles)) =
10062                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10063            {
10064                let member_inline_size = <fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10065                if inlined != (member_inline_size <= 4) {
10066                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10067                }
10068                let inner_offset;
10069                let mut inner_depth = depth.clone();
10070                if inlined {
10071                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10072                    inner_offset = next_offset;
10073                } else {
10074                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10075                    inner_depth.increment()?;
10076                }
10077                let val_ref = self.sample_formats.get_or_insert_with(
10078                    || fidl::new_empty!(fidl::encoding::Vector<SampleFormat, 3>, D),
10079                );
10080                fidl::decode!(fidl::encoding::Vector<SampleFormat, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
10081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10082                {
10083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10084                }
10085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10087                }
10088            }
10089
10090            next_offset += envelope_size;
10091            _next_ordinal_to_read += 1;
10092            if next_offset >= end_offset {
10093                return Ok(());
10094            }
10095
10096            // Decode unknown envelopes for gaps in ordinals.
10097            while _next_ordinal_to_read < 3 {
10098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10099                _next_ordinal_to_read += 1;
10100                next_offset += envelope_size;
10101            }
10102
10103            let next_out_of_line = decoder.next_out_of_line();
10104            let handles_before = decoder.remaining_handles();
10105            if let Some((inlined, num_bytes, num_handles)) =
10106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10107            {
10108                let member_inline_size =
10109                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10110                        decoder.context,
10111                    );
10112                if inlined != (member_inline_size <= 4) {
10113                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10114                }
10115                let inner_offset;
10116                let mut inner_depth = depth.clone();
10117                if inlined {
10118                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10119                    inner_offset = next_offset;
10120                } else {
10121                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10122                    inner_depth.increment()?;
10123                }
10124                let val_ref = self
10125                    .bytes_per_sample
10126                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10127                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10128                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10129                {
10130                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10131                }
10132                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10133                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10134                }
10135            }
10136
10137            next_offset += envelope_size;
10138            _next_ordinal_to_read += 1;
10139            if next_offset >= end_offset {
10140                return Ok(());
10141            }
10142
10143            // Decode unknown envelopes for gaps in ordinals.
10144            while _next_ordinal_to_read < 4 {
10145                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10146                _next_ordinal_to_read += 1;
10147                next_offset += envelope_size;
10148            }
10149
10150            let next_out_of_line = decoder.next_out_of_line();
10151            let handles_before = decoder.remaining_handles();
10152            if let Some((inlined, num_bytes, num_handles)) =
10153                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10154            {
10155                let member_inline_size =
10156                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10157                        decoder.context,
10158                    );
10159                if inlined != (member_inline_size <= 4) {
10160                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10161                }
10162                let inner_offset;
10163                let mut inner_depth = depth.clone();
10164                if inlined {
10165                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10166                    inner_offset = next_offset;
10167                } else {
10168                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10169                    inner_depth.increment()?;
10170                }
10171                let val_ref = self
10172                    .valid_bits_per_sample
10173                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10174                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10175                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10176                {
10177                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10178                }
10179                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10180                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10181                }
10182            }
10183
10184            next_offset += envelope_size;
10185            _next_ordinal_to_read += 1;
10186            if next_offset >= end_offset {
10187                return Ok(());
10188            }
10189
10190            // Decode unknown envelopes for gaps in ordinals.
10191            while _next_ordinal_to_read < 5 {
10192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10193                _next_ordinal_to_read += 1;
10194                next_offset += envelope_size;
10195            }
10196
10197            let next_out_of_line = decoder.next_out_of_line();
10198            let handles_before = decoder.remaining_handles();
10199            if let Some((inlined, num_bytes, num_handles)) =
10200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10201            {
10202                let member_inline_size =
10203                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
10204                        decoder.context,
10205                    );
10206                if inlined != (member_inline_size <= 4) {
10207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10208                }
10209                let inner_offset;
10210                let mut inner_depth = depth.clone();
10211                if inlined {
10212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10213                    inner_offset = next_offset;
10214                } else {
10215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10216                    inner_depth.increment()?;
10217                }
10218                let val_ref = self
10219                    .frame_rates
10220                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
10221                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10222                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10223                {
10224                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10225                }
10226                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10227                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10228                }
10229            }
10230
10231            next_offset += envelope_size;
10232
10233            // Decode the remaining unknown envelopes.
10234            while next_offset < end_offset {
10235                _next_ordinal_to_read += 1;
10236                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10237                next_offset += envelope_size;
10238            }
10239
10240            Ok(())
10241        }
10242    }
10243
10244    impl PlugState {
10245        #[inline(always)]
10246        fn max_ordinal_present(&self) -> u64 {
10247            if let Some(_) = self.plug_state_time {
10248                return 2;
10249            }
10250            if let Some(_) = self.plugged {
10251                return 1;
10252            }
10253            0
10254        }
10255    }
10256
10257    impl fidl::encoding::ValueTypeMarker for PlugState {
10258        type Borrowed<'a> = &'a Self;
10259        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10260            value
10261        }
10262    }
10263
10264    unsafe impl fidl::encoding::TypeMarker for PlugState {
10265        type Owned = Self;
10266
10267        #[inline(always)]
10268        fn inline_align(_context: fidl::encoding::Context) -> usize {
10269            8
10270        }
10271
10272        #[inline(always)]
10273        fn inline_size(_context: fidl::encoding::Context) -> usize {
10274            16
10275        }
10276    }
10277
10278    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugState, D>
10279        for &PlugState
10280    {
10281        unsafe fn encode(
10282            self,
10283            encoder: &mut fidl::encoding::Encoder<'_, D>,
10284            offset: usize,
10285            mut depth: fidl::encoding::Depth,
10286        ) -> fidl::Result<()> {
10287            encoder.debug_check_bounds::<PlugState>(offset);
10288            // Vector header
10289            let max_ordinal: u64 = self.max_ordinal_present();
10290            encoder.write_num(max_ordinal, offset);
10291            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10292            // Calling encoder.out_of_line_offset(0) is not allowed.
10293            if max_ordinal == 0 {
10294                return Ok(());
10295            }
10296            depth.increment()?;
10297            let envelope_size = 8;
10298            let bytes_len = max_ordinal as usize * envelope_size;
10299            #[allow(unused_variables)]
10300            let offset = encoder.out_of_line_offset(bytes_len);
10301            let mut _prev_end_offset: usize = 0;
10302            if 1 > max_ordinal {
10303                return Ok(());
10304            }
10305
10306            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10307            // are envelope_size bytes.
10308            let cur_offset: usize = (1 - 1) * envelope_size;
10309
10310            // Zero reserved fields.
10311            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10312
10313            // Safety:
10314            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10315            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10316            //   envelope_size bytes, there is always sufficient room.
10317            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10318                self.plugged.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10319                encoder,
10320                offset + cur_offset,
10321                depth,
10322            )?;
10323
10324            _prev_end_offset = cur_offset + envelope_size;
10325            if 2 > max_ordinal {
10326                return Ok(());
10327            }
10328
10329            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10330            // are envelope_size bytes.
10331            let cur_offset: usize = (2 - 1) * envelope_size;
10332
10333            // Zero reserved fields.
10334            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10335
10336            // Safety:
10337            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10338            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10339            //   envelope_size bytes, there is always sufficient room.
10340            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10341                self.plug_state_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10342                encoder,
10343                offset + cur_offset,
10344                depth,
10345            )?;
10346
10347            _prev_end_offset = cur_offset + envelope_size;
10348
10349            Ok(())
10350        }
10351    }
10352
10353    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugState {
10354        #[inline(always)]
10355        fn new_empty() -> Self {
10356            Self::default()
10357        }
10358
10359        unsafe fn decode(
10360            &mut self,
10361            decoder: &mut fidl::encoding::Decoder<'_, D>,
10362            offset: usize,
10363            mut depth: fidl::encoding::Depth,
10364        ) -> fidl::Result<()> {
10365            decoder.debug_check_bounds::<Self>(offset);
10366            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10367                None => return Err(fidl::Error::NotNullable),
10368                Some(len) => len,
10369            };
10370            // Calling decoder.out_of_line_offset(0) is not allowed.
10371            if len == 0 {
10372                return Ok(());
10373            };
10374            depth.increment()?;
10375            let envelope_size = 8;
10376            let bytes_len = len * envelope_size;
10377            let offset = decoder.out_of_line_offset(bytes_len)?;
10378            // Decode the envelope for each type.
10379            let mut _next_ordinal_to_read = 0;
10380            let mut next_offset = offset;
10381            let end_offset = offset + bytes_len;
10382            _next_ordinal_to_read += 1;
10383            if next_offset >= end_offset {
10384                return Ok(());
10385            }
10386
10387            // Decode unknown envelopes for gaps in ordinals.
10388            while _next_ordinal_to_read < 1 {
10389                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10390                _next_ordinal_to_read += 1;
10391                next_offset += envelope_size;
10392            }
10393
10394            let next_out_of_line = decoder.next_out_of_line();
10395            let handles_before = decoder.remaining_handles();
10396            if let Some((inlined, num_bytes, num_handles)) =
10397                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10398            {
10399                let member_inline_size =
10400                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10401                if inlined != (member_inline_size <= 4) {
10402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10403                }
10404                let inner_offset;
10405                let mut inner_depth = depth.clone();
10406                if inlined {
10407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10408                    inner_offset = next_offset;
10409                } else {
10410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10411                    inner_depth.increment()?;
10412                }
10413                let val_ref = self.plugged.get_or_insert_with(|| fidl::new_empty!(bool, D));
10414                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10415                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10416                {
10417                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10418                }
10419                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10420                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10421                }
10422            }
10423
10424            next_offset += envelope_size;
10425            _next_ordinal_to_read += 1;
10426            if next_offset >= end_offset {
10427                return Ok(());
10428            }
10429
10430            // Decode unknown envelopes for gaps in ordinals.
10431            while _next_ordinal_to_read < 2 {
10432                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10433                _next_ordinal_to_read += 1;
10434                next_offset += envelope_size;
10435            }
10436
10437            let next_out_of_line = decoder.next_out_of_line();
10438            let handles_before = decoder.remaining_handles();
10439            if let Some((inlined, num_bytes, num_handles)) =
10440                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10441            {
10442                let member_inline_size =
10443                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10444                if inlined != (member_inline_size <= 4) {
10445                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10446                }
10447                let inner_offset;
10448                let mut inner_depth = depth.clone();
10449                if inlined {
10450                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10451                    inner_offset = next_offset;
10452                } else {
10453                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10454                    inner_depth.increment()?;
10455                }
10456                let val_ref = self.plug_state_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
10457                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10458                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10459                {
10460                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10461                }
10462                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10463                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10464                }
10465            }
10466
10467            next_offset += envelope_size;
10468
10469            // Decode the remaining unknown envelopes.
10470            while next_offset < end_offset {
10471                _next_ordinal_to_read += 1;
10472                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10473                next_offset += envelope_size;
10474            }
10475
10476            Ok(())
10477        }
10478    }
10479
10480    impl RingBufferProperties {
10481        #[inline(always)]
10482        fn max_ordinal_present(&self) -> u64 {
10483            if let Some(_) = self.driver_transfer_bytes {
10484                return 5;
10485            }
10486            if let Some(_) = self.turn_on_delay {
10487                return 4;
10488            }
10489            if let Some(_) = self.needs_cache_flush_or_invalidate {
10490                return 3;
10491            }
10492            0
10493        }
10494    }
10495
10496    impl fidl::encoding::ValueTypeMarker for RingBufferProperties {
10497        type Borrowed<'a> = &'a Self;
10498        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10499            value
10500        }
10501    }
10502
10503    unsafe impl fidl::encoding::TypeMarker for RingBufferProperties {
10504        type Owned = Self;
10505
10506        #[inline(always)]
10507        fn inline_align(_context: fidl::encoding::Context) -> usize {
10508            8
10509        }
10510
10511        #[inline(always)]
10512        fn inline_size(_context: fidl::encoding::Context) -> usize {
10513            16
10514        }
10515    }
10516
10517    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferProperties, D>
10518        for &RingBufferProperties
10519    {
10520        unsafe fn encode(
10521            self,
10522            encoder: &mut fidl::encoding::Encoder<'_, D>,
10523            offset: usize,
10524            mut depth: fidl::encoding::Depth,
10525        ) -> fidl::Result<()> {
10526            encoder.debug_check_bounds::<RingBufferProperties>(offset);
10527            // Vector header
10528            let max_ordinal: u64 = self.max_ordinal_present();
10529            encoder.write_num(max_ordinal, offset);
10530            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10531            // Calling encoder.out_of_line_offset(0) is not allowed.
10532            if max_ordinal == 0 {
10533                return Ok(());
10534            }
10535            depth.increment()?;
10536            let envelope_size = 8;
10537            let bytes_len = max_ordinal as usize * envelope_size;
10538            #[allow(unused_variables)]
10539            let offset = encoder.out_of_line_offset(bytes_len);
10540            let mut _prev_end_offset: usize = 0;
10541            if 3 > max_ordinal {
10542                return Ok(());
10543            }
10544
10545            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10546            // are envelope_size bytes.
10547            let cur_offset: usize = (3 - 1) * envelope_size;
10548
10549            // Zero reserved fields.
10550            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10551
10552            // Safety:
10553            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10554            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10555            //   envelope_size bytes, there is always sufficient room.
10556            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10557                self.needs_cache_flush_or_invalidate
10558                    .as_ref()
10559                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10560                encoder,
10561                offset + cur_offset,
10562                depth,
10563            )?;
10564
10565            _prev_end_offset = cur_offset + envelope_size;
10566            if 4 > max_ordinal {
10567                return Ok(());
10568            }
10569
10570            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10571            // are envelope_size bytes.
10572            let cur_offset: usize = (4 - 1) * envelope_size;
10573
10574            // Zero reserved fields.
10575            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10576
10577            // Safety:
10578            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10579            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10580            //   envelope_size bytes, there is always sufficient room.
10581            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10582                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10583                encoder,
10584                offset + cur_offset,
10585                depth,
10586            )?;
10587
10588            _prev_end_offset = cur_offset + envelope_size;
10589            if 5 > max_ordinal {
10590                return Ok(());
10591            }
10592
10593            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10594            // are envelope_size bytes.
10595            let cur_offset: usize = (5 - 1) * envelope_size;
10596
10597            // Zero reserved fields.
10598            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10599
10600            // Safety:
10601            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10602            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10603            //   envelope_size bytes, there is always sufficient room.
10604            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10605                self.driver_transfer_bytes
10606                    .as_ref()
10607                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10608                encoder,
10609                offset + cur_offset,
10610                depth,
10611            )?;
10612
10613            _prev_end_offset = cur_offset + envelope_size;
10614
10615            Ok(())
10616        }
10617    }
10618
10619    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferProperties {
10620        #[inline(always)]
10621        fn new_empty() -> Self {
10622            Self::default()
10623        }
10624
10625        unsafe fn decode(
10626            &mut self,
10627            decoder: &mut fidl::encoding::Decoder<'_, D>,
10628            offset: usize,
10629            mut depth: fidl::encoding::Depth,
10630        ) -> fidl::Result<()> {
10631            decoder.debug_check_bounds::<Self>(offset);
10632            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10633                None => return Err(fidl::Error::NotNullable),
10634                Some(len) => len,
10635            };
10636            // Calling decoder.out_of_line_offset(0) is not allowed.
10637            if len == 0 {
10638                return Ok(());
10639            };
10640            depth.increment()?;
10641            let envelope_size = 8;
10642            let bytes_len = len * envelope_size;
10643            let offset = decoder.out_of_line_offset(bytes_len)?;
10644            // Decode the envelope for each type.
10645            let mut _next_ordinal_to_read = 0;
10646            let mut next_offset = offset;
10647            let end_offset = offset + bytes_len;
10648            _next_ordinal_to_read += 1;
10649            if next_offset >= end_offset {
10650                return Ok(());
10651            }
10652
10653            // Decode unknown envelopes for gaps in ordinals.
10654            while _next_ordinal_to_read < 3 {
10655                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10656                _next_ordinal_to_read += 1;
10657                next_offset += envelope_size;
10658            }
10659
10660            let next_out_of_line = decoder.next_out_of_line();
10661            let handles_before = decoder.remaining_handles();
10662            if let Some((inlined, num_bytes, num_handles)) =
10663                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10664            {
10665                let member_inline_size =
10666                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10667                if inlined != (member_inline_size <= 4) {
10668                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10669                }
10670                let inner_offset;
10671                let mut inner_depth = depth.clone();
10672                if inlined {
10673                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10674                    inner_offset = next_offset;
10675                } else {
10676                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10677                    inner_depth.increment()?;
10678                }
10679                let val_ref = self
10680                    .needs_cache_flush_or_invalidate
10681                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10682                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10683                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10684                {
10685                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10686                }
10687                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10688                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10689                }
10690            }
10691
10692            next_offset += envelope_size;
10693            _next_ordinal_to_read += 1;
10694            if next_offset >= end_offset {
10695                return Ok(());
10696            }
10697
10698            // Decode unknown envelopes for gaps in ordinals.
10699            while _next_ordinal_to_read < 4 {
10700                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10701                _next_ordinal_to_read += 1;
10702                next_offset += envelope_size;
10703            }
10704
10705            let next_out_of_line = decoder.next_out_of_line();
10706            let handles_before = decoder.remaining_handles();
10707            if let Some((inlined, num_bytes, num_handles)) =
10708                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10709            {
10710                let member_inline_size =
10711                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10712                if inlined != (member_inline_size <= 4) {
10713                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10714                }
10715                let inner_offset;
10716                let mut inner_depth = depth.clone();
10717                if inlined {
10718                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10719                    inner_offset = next_offset;
10720                } else {
10721                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10722                    inner_depth.increment()?;
10723                }
10724                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
10725                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10726                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10727                {
10728                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10729                }
10730                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10731                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10732                }
10733            }
10734
10735            next_offset += envelope_size;
10736            _next_ordinal_to_read += 1;
10737            if next_offset >= end_offset {
10738                return Ok(());
10739            }
10740
10741            // Decode unknown envelopes for gaps in ordinals.
10742            while _next_ordinal_to_read < 5 {
10743                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10744                _next_ordinal_to_read += 1;
10745                next_offset += envelope_size;
10746            }
10747
10748            let next_out_of_line = decoder.next_out_of_line();
10749            let handles_before = decoder.remaining_handles();
10750            if let Some((inlined, num_bytes, num_handles)) =
10751                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10752            {
10753                let member_inline_size =
10754                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10755                if inlined != (member_inline_size <= 4) {
10756                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10757                }
10758                let inner_offset;
10759                let mut inner_depth = depth.clone();
10760                if inlined {
10761                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10762                    inner_offset = next_offset;
10763                } else {
10764                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10765                    inner_depth.increment()?;
10766                }
10767                let val_ref =
10768                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
10769                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
10770                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10771                {
10772                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10773                }
10774                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10775                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10776                }
10777            }
10778
10779            next_offset += envelope_size;
10780
10781            // Decode the remaining unknown envelopes.
10782            while next_offset < end_offset {
10783                _next_ordinal_to_read += 1;
10784                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10785                next_offset += envelope_size;
10786            }
10787
10788            Ok(())
10789        }
10790    }
10791
10792    impl StreamProperties {
10793        #[inline(always)]
10794        fn max_ordinal_present(&self) -> u64 {
10795            if let Some(_) = self.clock_domain {
10796                return 11;
10797            }
10798            if let Some(_) = self.product {
10799                return 10;
10800            }
10801            if let Some(_) = self.manufacturer {
10802                return 9;
10803            }
10804            if let Some(_) = self.plug_detect_capabilities {
10805                return 8;
10806            }
10807            if let Some(_) = self.gain_step_db {
10808                return 7;
10809            }
10810            if let Some(_) = self.max_gain_db {
10811                return 6;
10812            }
10813            if let Some(_) = self.min_gain_db {
10814                return 5;
10815            }
10816            if let Some(_) = self.can_agc {
10817                return 4;
10818            }
10819            if let Some(_) = self.can_mute {
10820                return 3;
10821            }
10822            if let Some(_) = self.is_input {
10823                return 2;
10824            }
10825            if let Some(_) = self.unique_id {
10826                return 1;
10827            }
10828            0
10829        }
10830    }
10831
10832    impl fidl::encoding::ValueTypeMarker for StreamProperties {
10833        type Borrowed<'a> = &'a Self;
10834        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10835            value
10836        }
10837    }
10838
10839    unsafe impl fidl::encoding::TypeMarker for StreamProperties {
10840        type Owned = Self;
10841
10842        #[inline(always)]
10843        fn inline_align(_context: fidl::encoding::Context) -> usize {
10844            8
10845        }
10846
10847        #[inline(always)]
10848        fn inline_size(_context: fidl::encoding::Context) -> usize {
10849            16
10850        }
10851    }
10852
10853    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamProperties, D>
10854        for &StreamProperties
10855    {
10856        unsafe fn encode(
10857            self,
10858            encoder: &mut fidl::encoding::Encoder<'_, D>,
10859            offset: usize,
10860            mut depth: fidl::encoding::Depth,
10861        ) -> fidl::Result<()> {
10862            encoder.debug_check_bounds::<StreamProperties>(offset);
10863            // Vector header
10864            let max_ordinal: u64 = self.max_ordinal_present();
10865            encoder.write_num(max_ordinal, offset);
10866            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10867            // Calling encoder.out_of_line_offset(0) is not allowed.
10868            if max_ordinal == 0 {
10869                return Ok(());
10870            }
10871            depth.increment()?;
10872            let envelope_size = 8;
10873            let bytes_len = max_ordinal as usize * envelope_size;
10874            #[allow(unused_variables)]
10875            let offset = encoder.out_of_line_offset(bytes_len);
10876            let mut _prev_end_offset: usize = 0;
10877            if 1 > max_ordinal {
10878                return Ok(());
10879            }
10880
10881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10882            // are envelope_size bytes.
10883            let cur_offset: usize = (1 - 1) * envelope_size;
10884
10885            // Zero reserved fields.
10886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10887
10888            // Safety:
10889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10891            //   envelope_size bytes, there is always sufficient room.
10892            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
10893                self.unique_id.as_ref().map(
10894                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
10895                ),
10896                encoder,
10897                offset + cur_offset,
10898                depth,
10899            )?;
10900
10901            _prev_end_offset = cur_offset + envelope_size;
10902            if 2 > max_ordinal {
10903                return Ok(());
10904            }
10905
10906            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10907            // are envelope_size bytes.
10908            let cur_offset: usize = (2 - 1) * envelope_size;
10909
10910            // Zero reserved fields.
10911            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10912
10913            // Safety:
10914            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10915            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10916            //   envelope_size bytes, there is always sufficient room.
10917            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10918                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10919                encoder,
10920                offset + cur_offset,
10921                depth,
10922            )?;
10923
10924            _prev_end_offset = cur_offset + envelope_size;
10925            if 3 > max_ordinal {
10926                return Ok(());
10927            }
10928
10929            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10930            // are envelope_size bytes.
10931            let cur_offset: usize = (3 - 1) * envelope_size;
10932
10933            // Zero reserved fields.
10934            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10935
10936            // Safety:
10937            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10938            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10939            //   envelope_size bytes, there is always sufficient room.
10940            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10941                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10942                encoder,
10943                offset + cur_offset,
10944                depth,
10945            )?;
10946
10947            _prev_end_offset = cur_offset + envelope_size;
10948            if 4 > max_ordinal {
10949                return Ok(());
10950            }
10951
10952            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10953            // are envelope_size bytes.
10954            let cur_offset: usize = (4 - 1) * envelope_size;
10955
10956            // Zero reserved fields.
10957            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10958
10959            // Safety:
10960            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10961            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10962            //   envelope_size bytes, there is always sufficient room.
10963            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10964                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10965                encoder,
10966                offset + cur_offset,
10967                depth,
10968            )?;
10969
10970            _prev_end_offset = cur_offset + envelope_size;
10971            if 5 > max_ordinal {
10972                return Ok(());
10973            }
10974
10975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10976            // are envelope_size bytes.
10977            let cur_offset: usize = (5 - 1) * envelope_size;
10978
10979            // Zero reserved fields.
10980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10981
10982            // Safety:
10983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10985            //   envelope_size bytes, there is always sufficient room.
10986            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10987                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10988                encoder,
10989                offset + cur_offset,
10990                depth,
10991            )?;
10992
10993            _prev_end_offset = cur_offset + envelope_size;
10994            if 6 > max_ordinal {
10995                return Ok(());
10996            }
10997
10998            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10999            // are envelope_size bytes.
11000            let cur_offset: usize = (6 - 1) * envelope_size;
11001
11002            // Zero reserved fields.
11003            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11004
11005            // Safety:
11006            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11007            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11008            //   envelope_size bytes, there is always sufficient room.
11009            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11010                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11011                encoder,
11012                offset + cur_offset,
11013                depth,
11014            )?;
11015
11016            _prev_end_offset = cur_offset + envelope_size;
11017            if 7 > max_ordinal {
11018                return Ok(());
11019            }
11020
11021            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11022            // are envelope_size bytes.
11023            let cur_offset: usize = (7 - 1) * envelope_size;
11024
11025            // Zero reserved fields.
11026            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11027
11028            // Safety:
11029            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11030            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11031            //   envelope_size bytes, there is always sufficient room.
11032            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11033                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11034                encoder,
11035                offset + cur_offset,
11036                depth,
11037            )?;
11038
11039            _prev_end_offset = cur_offset + envelope_size;
11040            if 8 > max_ordinal {
11041                return Ok(());
11042            }
11043
11044            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11045            // are envelope_size bytes.
11046            let cur_offset: usize = (8 - 1) * envelope_size;
11047
11048            // Zero reserved fields.
11049            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11050
11051            // Safety:
11052            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11053            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11054            //   envelope_size bytes, there is always sufficient room.
11055            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
11056                self.plug_detect_capabilities
11057                    .as_ref()
11058                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
11059                encoder,
11060                offset + cur_offset,
11061                depth,
11062            )?;
11063
11064            _prev_end_offset = cur_offset + envelope_size;
11065            if 9 > max_ordinal {
11066                return Ok(());
11067            }
11068
11069            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11070            // are envelope_size bytes.
11071            let cur_offset: usize = (9 - 1) * envelope_size;
11072
11073            // Zero reserved fields.
11074            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11075
11076            // Safety:
11077            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11078            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11079            //   envelope_size bytes, there is always sufficient room.
11080            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11081                self.manufacturer.as_ref().map(
11082                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11083                ),
11084                encoder,
11085                offset + cur_offset,
11086                depth,
11087            )?;
11088
11089            _prev_end_offset = cur_offset + envelope_size;
11090            if 10 > max_ordinal {
11091                return Ok(());
11092            }
11093
11094            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11095            // are envelope_size bytes.
11096            let cur_offset: usize = (10 - 1) * envelope_size;
11097
11098            // Zero reserved fields.
11099            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11100
11101            // Safety:
11102            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11103            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11104            //   envelope_size bytes, there is always sufficient room.
11105            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11106                self.product.as_ref().map(
11107                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11108                ),
11109                encoder,
11110                offset + cur_offset,
11111                depth,
11112            )?;
11113
11114            _prev_end_offset = cur_offset + envelope_size;
11115            if 11 > max_ordinal {
11116                return Ok(());
11117            }
11118
11119            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11120            // are envelope_size bytes.
11121            let cur_offset: usize = (11 - 1) * envelope_size;
11122
11123            // Zero reserved fields.
11124            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11125
11126            // Safety:
11127            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11128            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11129            //   envelope_size bytes, there is always sufficient room.
11130            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11131                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11132                encoder,
11133                offset + cur_offset,
11134                depth,
11135            )?;
11136
11137            _prev_end_offset = cur_offset + envelope_size;
11138
11139            Ok(())
11140        }
11141    }
11142
11143    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamProperties {
11144        #[inline(always)]
11145        fn new_empty() -> Self {
11146            Self::default()
11147        }
11148
11149        unsafe fn decode(
11150            &mut self,
11151            decoder: &mut fidl::encoding::Decoder<'_, D>,
11152            offset: usize,
11153            mut depth: fidl::encoding::Depth,
11154        ) -> fidl::Result<()> {
11155            decoder.debug_check_bounds::<Self>(offset);
11156            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11157                None => return Err(fidl::Error::NotNullable),
11158                Some(len) => len,
11159            };
11160            // Calling decoder.out_of_line_offset(0) is not allowed.
11161            if len == 0 {
11162                return Ok(());
11163            };
11164            depth.increment()?;
11165            let envelope_size = 8;
11166            let bytes_len = len * envelope_size;
11167            let offset = decoder.out_of_line_offset(bytes_len)?;
11168            // Decode the envelope for each type.
11169            let mut _next_ordinal_to_read = 0;
11170            let mut next_offset = offset;
11171            let end_offset = offset + bytes_len;
11172            _next_ordinal_to_read += 1;
11173            if next_offset >= end_offset {
11174                return Ok(());
11175            }
11176
11177            // Decode unknown envelopes for gaps in ordinals.
11178            while _next_ordinal_to_read < 1 {
11179                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11180                _next_ordinal_to_read += 1;
11181                next_offset += envelope_size;
11182            }
11183
11184            let next_out_of_line = decoder.next_out_of_line();
11185            let handles_before = decoder.remaining_handles();
11186            if let Some((inlined, num_bytes, num_handles)) =
11187                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11188            {
11189                let member_inline_size =
11190                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
11191                        decoder.context,
11192                    );
11193                if inlined != (member_inline_size <= 4) {
11194                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11195                }
11196                let inner_offset;
11197                let mut inner_depth = depth.clone();
11198                if inlined {
11199                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11200                    inner_offset = next_offset;
11201                } else {
11202                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11203                    inner_depth.increment()?;
11204                }
11205                let val_ref = self
11206                    .unique_id
11207                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
11208                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
11209                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11210                {
11211                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11212                }
11213                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11214                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11215                }
11216            }
11217
11218            next_offset += envelope_size;
11219            _next_ordinal_to_read += 1;
11220            if next_offset >= end_offset {
11221                return Ok(());
11222            }
11223
11224            // Decode unknown envelopes for gaps in ordinals.
11225            while _next_ordinal_to_read < 2 {
11226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11227                _next_ordinal_to_read += 1;
11228                next_offset += envelope_size;
11229            }
11230
11231            let next_out_of_line = decoder.next_out_of_line();
11232            let handles_before = decoder.remaining_handles();
11233            if let Some((inlined, num_bytes, num_handles)) =
11234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11235            {
11236                let member_inline_size =
11237                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11238                if inlined != (member_inline_size <= 4) {
11239                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11240                }
11241                let inner_offset;
11242                let mut inner_depth = depth.clone();
11243                if inlined {
11244                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11245                    inner_offset = next_offset;
11246                } else {
11247                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11248                    inner_depth.increment()?;
11249                }
11250                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
11251                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11253                {
11254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11255                }
11256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11258                }
11259            }
11260
11261            next_offset += envelope_size;
11262            _next_ordinal_to_read += 1;
11263            if next_offset >= end_offset {
11264                return Ok(());
11265            }
11266
11267            // Decode unknown envelopes for gaps in ordinals.
11268            while _next_ordinal_to_read < 3 {
11269                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11270                _next_ordinal_to_read += 1;
11271                next_offset += envelope_size;
11272            }
11273
11274            let next_out_of_line = decoder.next_out_of_line();
11275            let handles_before = decoder.remaining_handles();
11276            if let Some((inlined, num_bytes, num_handles)) =
11277                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11278            {
11279                let member_inline_size =
11280                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11281                if inlined != (member_inline_size <= 4) {
11282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11283                }
11284                let inner_offset;
11285                let mut inner_depth = depth.clone();
11286                if inlined {
11287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11288                    inner_offset = next_offset;
11289                } else {
11290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11291                    inner_depth.increment()?;
11292                }
11293                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
11294                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11296                {
11297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11298                }
11299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11301                }
11302            }
11303
11304            next_offset += envelope_size;
11305            _next_ordinal_to_read += 1;
11306            if next_offset >= end_offset {
11307                return Ok(());
11308            }
11309
11310            // Decode unknown envelopes for gaps in ordinals.
11311            while _next_ordinal_to_read < 4 {
11312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11313                _next_ordinal_to_read += 1;
11314                next_offset += envelope_size;
11315            }
11316
11317            let next_out_of_line = decoder.next_out_of_line();
11318            let handles_before = decoder.remaining_handles();
11319            if let Some((inlined, num_bytes, num_handles)) =
11320                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11321            {
11322                let member_inline_size =
11323                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11324                if inlined != (member_inline_size <= 4) {
11325                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11326                }
11327                let inner_offset;
11328                let mut inner_depth = depth.clone();
11329                if inlined {
11330                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11331                    inner_offset = next_offset;
11332                } else {
11333                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11334                    inner_depth.increment()?;
11335                }
11336                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
11337                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11338                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11339                {
11340                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11341                }
11342                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11343                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11344                }
11345            }
11346
11347            next_offset += envelope_size;
11348            _next_ordinal_to_read += 1;
11349            if next_offset >= end_offset {
11350                return Ok(());
11351            }
11352
11353            // Decode unknown envelopes for gaps in ordinals.
11354            while _next_ordinal_to_read < 5 {
11355                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11356                _next_ordinal_to_read += 1;
11357                next_offset += envelope_size;
11358            }
11359
11360            let next_out_of_line = decoder.next_out_of_line();
11361            let handles_before = decoder.remaining_handles();
11362            if let Some((inlined, num_bytes, num_handles)) =
11363                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11364            {
11365                let member_inline_size =
11366                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11367                if inlined != (member_inline_size <= 4) {
11368                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11369                }
11370                let inner_offset;
11371                let mut inner_depth = depth.clone();
11372                if inlined {
11373                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11374                    inner_offset = next_offset;
11375                } else {
11376                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11377                    inner_depth.increment()?;
11378                }
11379                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11380                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11381                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11382                {
11383                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11384                }
11385                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11386                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11387                }
11388            }
11389
11390            next_offset += envelope_size;
11391            _next_ordinal_to_read += 1;
11392            if next_offset >= end_offset {
11393                return Ok(());
11394            }
11395
11396            // Decode unknown envelopes for gaps in ordinals.
11397            while _next_ordinal_to_read < 6 {
11398                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11399                _next_ordinal_to_read += 1;
11400                next_offset += envelope_size;
11401            }
11402
11403            let next_out_of_line = decoder.next_out_of_line();
11404            let handles_before = decoder.remaining_handles();
11405            if let Some((inlined, num_bytes, num_handles)) =
11406                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11407            {
11408                let member_inline_size =
11409                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11410                if inlined != (member_inline_size <= 4) {
11411                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11412                }
11413                let inner_offset;
11414                let mut inner_depth = depth.clone();
11415                if inlined {
11416                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11417                    inner_offset = next_offset;
11418                } else {
11419                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11420                    inner_depth.increment()?;
11421                }
11422                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11423                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11424                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11425                {
11426                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11427                }
11428                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11429                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11430                }
11431            }
11432
11433            next_offset += envelope_size;
11434            _next_ordinal_to_read += 1;
11435            if next_offset >= end_offset {
11436                return Ok(());
11437            }
11438
11439            // Decode unknown envelopes for gaps in ordinals.
11440            while _next_ordinal_to_read < 7 {
11441                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11442                _next_ordinal_to_read += 1;
11443                next_offset += envelope_size;
11444            }
11445
11446            let next_out_of_line = decoder.next_out_of_line();
11447            let handles_before = decoder.remaining_handles();
11448            if let Some((inlined, num_bytes, num_handles)) =
11449                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11450            {
11451                let member_inline_size =
11452                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11453                if inlined != (member_inline_size <= 4) {
11454                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11455                }
11456                let inner_offset;
11457                let mut inner_depth = depth.clone();
11458                if inlined {
11459                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11460                    inner_offset = next_offset;
11461                } else {
11462                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11463                    inner_depth.increment()?;
11464                }
11465                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11466                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11467                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11468                {
11469                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11470                }
11471                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11472                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11473                }
11474            }
11475
11476            next_offset += envelope_size;
11477            _next_ordinal_to_read += 1;
11478            if next_offset >= end_offset {
11479                return Ok(());
11480            }
11481
11482            // Decode unknown envelopes for gaps in ordinals.
11483            while _next_ordinal_to_read < 8 {
11484                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11485                _next_ordinal_to_read += 1;
11486                next_offset += envelope_size;
11487            }
11488
11489            let next_out_of_line = decoder.next_out_of_line();
11490            let handles_before = decoder.remaining_handles();
11491            if let Some((inlined, num_bytes, num_handles)) =
11492                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11493            {
11494                let member_inline_size =
11495                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
11496                        decoder.context,
11497                    );
11498                if inlined != (member_inline_size <= 4) {
11499                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11500                }
11501                let inner_offset;
11502                let mut inner_depth = depth.clone();
11503                if inlined {
11504                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11505                    inner_offset = next_offset;
11506                } else {
11507                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11508                    inner_depth.increment()?;
11509                }
11510                let val_ref = self
11511                    .plug_detect_capabilities
11512                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
11513                fidl::decode!(
11514                    PlugDetectCapabilities,
11515                    D,
11516                    val_ref,
11517                    decoder,
11518                    inner_offset,
11519                    inner_depth
11520                )?;
11521                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11522                {
11523                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11524                }
11525                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11526                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11527                }
11528            }
11529
11530            next_offset += envelope_size;
11531            _next_ordinal_to_read += 1;
11532            if next_offset >= end_offset {
11533                return Ok(());
11534            }
11535
11536            // Decode unknown envelopes for gaps in ordinals.
11537            while _next_ordinal_to_read < 9 {
11538                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11539                _next_ordinal_to_read += 1;
11540                next_offset += envelope_size;
11541            }
11542
11543            let next_out_of_line = decoder.next_out_of_line();
11544            let handles_before = decoder.remaining_handles();
11545            if let Some((inlined, num_bytes, num_handles)) =
11546                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11547            {
11548                let member_inline_size =
11549                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11550                        decoder.context,
11551                    );
11552                if inlined != (member_inline_size <= 4) {
11553                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11554                }
11555                let inner_offset;
11556                let mut inner_depth = depth.clone();
11557                if inlined {
11558                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11559                    inner_offset = next_offset;
11560                } else {
11561                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11562                    inner_depth.increment()?;
11563                }
11564                let val_ref = self
11565                    .manufacturer
11566                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11567                fidl::decode!(
11568                    fidl::encoding::BoundedString<256>,
11569                    D,
11570                    val_ref,
11571                    decoder,
11572                    inner_offset,
11573                    inner_depth
11574                )?;
11575                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11576                {
11577                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11578                }
11579                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11580                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11581                }
11582            }
11583
11584            next_offset += envelope_size;
11585            _next_ordinal_to_read += 1;
11586            if next_offset >= end_offset {
11587                return Ok(());
11588            }
11589
11590            // Decode unknown envelopes for gaps in ordinals.
11591            while _next_ordinal_to_read < 10 {
11592                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11593                _next_ordinal_to_read += 1;
11594                next_offset += envelope_size;
11595            }
11596
11597            let next_out_of_line = decoder.next_out_of_line();
11598            let handles_before = decoder.remaining_handles();
11599            if let Some((inlined, num_bytes, num_handles)) =
11600                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11601            {
11602                let member_inline_size =
11603                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11604                        decoder.context,
11605                    );
11606                if inlined != (member_inline_size <= 4) {
11607                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11608                }
11609                let inner_offset;
11610                let mut inner_depth = depth.clone();
11611                if inlined {
11612                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11613                    inner_offset = next_offset;
11614                } else {
11615                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11616                    inner_depth.increment()?;
11617                }
11618                let val_ref = self
11619                    .product
11620                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11621                fidl::decode!(
11622                    fidl::encoding::BoundedString<256>,
11623                    D,
11624                    val_ref,
11625                    decoder,
11626                    inner_offset,
11627                    inner_depth
11628                )?;
11629                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11630                {
11631                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11632                }
11633                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11634                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11635                }
11636            }
11637
11638            next_offset += envelope_size;
11639            _next_ordinal_to_read += 1;
11640            if next_offset >= end_offset {
11641                return Ok(());
11642            }
11643
11644            // Decode unknown envelopes for gaps in ordinals.
11645            while _next_ordinal_to_read < 11 {
11646                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11647                _next_ordinal_to_read += 1;
11648                next_offset += envelope_size;
11649            }
11650
11651            let next_out_of_line = decoder.next_out_of_line();
11652            let handles_before = decoder.remaining_handles();
11653            if let Some((inlined, num_bytes, num_handles)) =
11654                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11655            {
11656                let member_inline_size =
11657                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11658                if inlined != (member_inline_size <= 4) {
11659                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11660                }
11661                let inner_offset;
11662                let mut inner_depth = depth.clone();
11663                if inlined {
11664                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11665                    inner_offset = next_offset;
11666                } else {
11667                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11668                    inner_depth.increment()?;
11669                }
11670                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
11671                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11672                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11673                {
11674                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11675                }
11676                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11677                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11678                }
11679            }
11680
11681            next_offset += envelope_size;
11682
11683            // Decode the remaining unknown envelopes.
11684            while next_offset < end_offset {
11685                _next_ordinal_to_read += 1;
11686                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11687                next_offset += envelope_size;
11688            }
11689
11690            Ok(())
11691        }
11692    }
11693
11694    impl SupportedEncodings {
11695        #[inline(always)]
11696        fn max_ordinal_present(&self) -> u64 {
11697            if let Some(_) = self.encoding_types {
11698                return 5;
11699            }
11700            if let Some(_) = self.max_encoding_bitrate {
11701                return 4;
11702            }
11703            if let Some(_) = self.min_encoding_bitrate {
11704                return 3;
11705            }
11706            if let Some(_) = self.decoded_frame_rates {
11707                return 2;
11708            }
11709            if let Some(_) = self.decoded_channel_sets {
11710                return 1;
11711            }
11712            0
11713        }
11714    }
11715
11716    impl fidl::encoding::ValueTypeMarker for SupportedEncodings {
11717        type Borrowed<'a> = &'a Self;
11718        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11719            value
11720        }
11721    }
11722
11723    unsafe impl fidl::encoding::TypeMarker for SupportedEncodings {
11724        type Owned = Self;
11725
11726        #[inline(always)]
11727        fn inline_align(_context: fidl::encoding::Context) -> usize {
11728            8
11729        }
11730
11731        #[inline(always)]
11732        fn inline_size(_context: fidl::encoding::Context) -> usize {
11733            16
11734        }
11735    }
11736
11737    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedEncodings, D>
11738        for &SupportedEncodings
11739    {
11740        unsafe fn encode(
11741            self,
11742            encoder: &mut fidl::encoding::Encoder<'_, D>,
11743            offset: usize,
11744            mut depth: fidl::encoding::Depth,
11745        ) -> fidl::Result<()> {
11746            encoder.debug_check_bounds::<SupportedEncodings>(offset);
11747            // Vector header
11748            let max_ordinal: u64 = self.max_ordinal_present();
11749            encoder.write_num(max_ordinal, offset);
11750            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11751            // Calling encoder.out_of_line_offset(0) is not allowed.
11752            if max_ordinal == 0 {
11753                return Ok(());
11754            }
11755            depth.increment()?;
11756            let envelope_size = 8;
11757            let bytes_len = max_ordinal as usize * envelope_size;
11758            #[allow(unused_variables)]
11759            let offset = encoder.out_of_line_offset(bytes_len);
11760            let mut _prev_end_offset: usize = 0;
11761            if 1 > max_ordinal {
11762                return Ok(());
11763            }
11764
11765            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11766            // are envelope_size bytes.
11767            let cur_offset: usize = (1 - 1) * envelope_size;
11768
11769            // Zero reserved fields.
11770            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11771
11772            // Safety:
11773            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11774            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11775            //   envelope_size bytes, there is always sufficient room.
11776            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
11777            self.decoded_channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11778            encoder, offset + cur_offset, depth
11779        )?;
11780
11781            _prev_end_offset = cur_offset + envelope_size;
11782            if 2 > max_ordinal {
11783                return Ok(());
11784            }
11785
11786            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11787            // are envelope_size bytes.
11788            let cur_offset: usize = (2 - 1) * envelope_size;
11789
11790            // Zero reserved fields.
11791            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11792
11793            // Safety:
11794            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11795            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11796            //   envelope_size bytes, there is always sufficient room.
11797            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
11798                self.decoded_frame_rates.as_ref().map(
11799                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
11800                ),
11801                encoder,
11802                offset + cur_offset,
11803                depth,
11804            )?;
11805
11806            _prev_end_offset = cur_offset + envelope_size;
11807            if 3 > max_ordinal {
11808                return Ok(());
11809            }
11810
11811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11812            // are envelope_size bytes.
11813            let cur_offset: usize = (3 - 1) * envelope_size;
11814
11815            // Zero reserved fields.
11816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11817
11818            // Safety:
11819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11821            //   envelope_size bytes, there is always sufficient room.
11822            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11823                self.min_encoding_bitrate
11824                    .as_ref()
11825                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11826                encoder,
11827                offset + cur_offset,
11828                depth,
11829            )?;
11830
11831            _prev_end_offset = cur_offset + envelope_size;
11832            if 4 > max_ordinal {
11833                return Ok(());
11834            }
11835
11836            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11837            // are envelope_size bytes.
11838            let cur_offset: usize = (4 - 1) * envelope_size;
11839
11840            // Zero reserved fields.
11841            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11842
11843            // Safety:
11844            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11845            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11846            //   envelope_size bytes, there is always sufficient room.
11847            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11848                self.max_encoding_bitrate
11849                    .as_ref()
11850                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11851                encoder,
11852                offset + cur_offset,
11853                depth,
11854            )?;
11855
11856            _prev_end_offset = cur_offset + envelope_size;
11857            if 5 > max_ordinal {
11858                return Ok(());
11859            }
11860
11861            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11862            // are envelope_size bytes.
11863            let cur_offset: usize = (5 - 1) * envelope_size;
11864
11865            // Zero reserved fields.
11866            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11867
11868            // Safety:
11869            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11870            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11871            //   envelope_size bytes, there is always sufficient room.
11872            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EncodingType, 64>, D>(
11873            self.encoding_types.as_ref().map(<fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11874            encoder, offset + cur_offset, depth
11875        )?;
11876
11877            _prev_end_offset = cur_offset + envelope_size;
11878
11879            Ok(())
11880        }
11881    }
11882
11883    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedEncodings {
11884        #[inline(always)]
11885        fn new_empty() -> Self {
11886            Self::default()
11887        }
11888
11889        unsafe fn decode(
11890            &mut self,
11891            decoder: &mut fidl::encoding::Decoder<'_, D>,
11892            offset: usize,
11893            mut depth: fidl::encoding::Depth,
11894        ) -> fidl::Result<()> {
11895            decoder.debug_check_bounds::<Self>(offset);
11896            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11897                None => return Err(fidl::Error::NotNullable),
11898                Some(len) => len,
11899            };
11900            // Calling decoder.out_of_line_offset(0) is not allowed.
11901            if len == 0 {
11902                return Ok(());
11903            };
11904            depth.increment()?;
11905            let envelope_size = 8;
11906            let bytes_len = len * envelope_size;
11907            let offset = decoder.out_of_line_offset(bytes_len)?;
11908            // Decode the envelope for each type.
11909            let mut _next_ordinal_to_read = 0;
11910            let mut next_offset = offset;
11911            let end_offset = offset + bytes_len;
11912            _next_ordinal_to_read += 1;
11913            if next_offset >= end_offset {
11914                return Ok(());
11915            }
11916
11917            // Decode unknown envelopes for gaps in ordinals.
11918            while _next_ordinal_to_read < 1 {
11919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11920                _next_ordinal_to_read += 1;
11921                next_offset += envelope_size;
11922            }
11923
11924            let next_out_of_line = decoder.next_out_of_line();
11925            let handles_before = decoder.remaining_handles();
11926            if let Some((inlined, num_bytes, num_handles)) =
11927                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11928            {
11929                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11930                if inlined != (member_inline_size <= 4) {
11931                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11932                }
11933                let inner_offset;
11934                let mut inner_depth = depth.clone();
11935                if inlined {
11936                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11937                    inner_offset = next_offset;
11938                } else {
11939                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11940                    inner_depth.increment()?;
11941                }
11942                let val_ref = self.decoded_channel_sets.get_or_insert_with(
11943                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
11944                );
11945                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11946                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11947                {
11948                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11949                }
11950                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11951                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11952                }
11953            }
11954
11955            next_offset += envelope_size;
11956            _next_ordinal_to_read += 1;
11957            if next_offset >= end_offset {
11958                return Ok(());
11959            }
11960
11961            // Decode unknown envelopes for gaps in ordinals.
11962            while _next_ordinal_to_read < 2 {
11963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11964                _next_ordinal_to_read += 1;
11965                next_offset += envelope_size;
11966            }
11967
11968            let next_out_of_line = decoder.next_out_of_line();
11969            let handles_before = decoder.remaining_handles();
11970            if let Some((inlined, num_bytes, num_handles)) =
11971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11972            {
11973                let member_inline_size =
11974                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
11975                        decoder.context,
11976                    );
11977                if inlined != (member_inline_size <= 4) {
11978                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11979                }
11980                let inner_offset;
11981                let mut inner_depth = depth.clone();
11982                if inlined {
11983                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11984                    inner_offset = next_offset;
11985                } else {
11986                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11987                    inner_depth.increment()?;
11988                }
11989                let val_ref = self
11990                    .decoded_frame_rates
11991                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
11992                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11993                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11994                {
11995                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11996                }
11997                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11998                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11999                }
12000            }
12001
12002            next_offset += envelope_size;
12003            _next_ordinal_to_read += 1;
12004            if next_offset >= end_offset {
12005                return Ok(());
12006            }
12007
12008            // Decode unknown envelopes for gaps in ordinals.
12009            while _next_ordinal_to_read < 3 {
12010                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12011                _next_ordinal_to_read += 1;
12012                next_offset += envelope_size;
12013            }
12014
12015            let next_out_of_line = decoder.next_out_of_line();
12016            let handles_before = decoder.remaining_handles();
12017            if let Some((inlined, num_bytes, num_handles)) =
12018                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12019            {
12020                let member_inline_size =
12021                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12022                if inlined != (member_inline_size <= 4) {
12023                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12024                }
12025                let inner_offset;
12026                let mut inner_depth = depth.clone();
12027                if inlined {
12028                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12029                    inner_offset = next_offset;
12030                } else {
12031                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12032                    inner_depth.increment()?;
12033                }
12034                let val_ref =
12035                    self.min_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12036                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12037                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12038                {
12039                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12040                }
12041                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12042                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12043                }
12044            }
12045
12046            next_offset += envelope_size;
12047            _next_ordinal_to_read += 1;
12048            if next_offset >= end_offset {
12049                return Ok(());
12050            }
12051
12052            // Decode unknown envelopes for gaps in ordinals.
12053            while _next_ordinal_to_read < 4 {
12054                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12055                _next_ordinal_to_read += 1;
12056                next_offset += envelope_size;
12057            }
12058
12059            let next_out_of_line = decoder.next_out_of_line();
12060            let handles_before = decoder.remaining_handles();
12061            if let Some((inlined, num_bytes, num_handles)) =
12062                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12063            {
12064                let member_inline_size =
12065                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12066                if inlined != (member_inline_size <= 4) {
12067                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12068                }
12069                let inner_offset;
12070                let mut inner_depth = depth.clone();
12071                if inlined {
12072                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12073                    inner_offset = next_offset;
12074                } else {
12075                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12076                    inner_depth.increment()?;
12077                }
12078                let val_ref =
12079                    self.max_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12080                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12081                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12082                {
12083                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12084                }
12085                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12086                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12087                }
12088            }
12089
12090            next_offset += envelope_size;
12091            _next_ordinal_to_read += 1;
12092            if next_offset >= end_offset {
12093                return Ok(());
12094            }
12095
12096            // Decode unknown envelopes for gaps in ordinals.
12097            while _next_ordinal_to_read < 5 {
12098                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12099                _next_ordinal_to_read += 1;
12100                next_offset += envelope_size;
12101            }
12102
12103            let next_out_of_line = decoder.next_out_of_line();
12104            let handles_before = decoder.remaining_handles();
12105            if let Some((inlined, num_bytes, num_handles)) =
12106                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12107            {
12108                let member_inline_size = <fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12109                if inlined != (member_inline_size <= 4) {
12110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12111                }
12112                let inner_offset;
12113                let mut inner_depth = depth.clone();
12114                if inlined {
12115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12116                    inner_offset = next_offset;
12117                } else {
12118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12119                    inner_depth.increment()?;
12120                }
12121                let val_ref = self.encoding_types.get_or_insert_with(
12122                    || fidl::new_empty!(fidl::encoding::Vector<EncodingType, 64>, D),
12123                );
12124                fidl::decode!(fidl::encoding::Vector<EncodingType, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
12125                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12126                {
12127                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12128                }
12129                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12130                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12131                }
12132            }
12133
12134            next_offset += envelope_size;
12135
12136            // Decode the remaining unknown envelopes.
12137            while next_offset < end_offset {
12138                _next_ordinal_to_read += 1;
12139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12140                next_offset += envelope_size;
12141            }
12142
12143            Ok(())
12144        }
12145    }
12146
12147    impl SupportedFormats {
12148        #[inline(always)]
12149        fn max_ordinal_present(&self) -> u64 {
12150            if let Some(_) = self.pcm_supported_formats {
12151                return 1;
12152            }
12153            0
12154        }
12155    }
12156
12157    impl fidl::encoding::ValueTypeMarker for SupportedFormats {
12158        type Borrowed<'a> = &'a Self;
12159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12160            value
12161        }
12162    }
12163
12164    unsafe impl fidl::encoding::TypeMarker for SupportedFormats {
12165        type Owned = Self;
12166
12167        #[inline(always)]
12168        fn inline_align(_context: fidl::encoding::Context) -> usize {
12169            8
12170        }
12171
12172        #[inline(always)]
12173        fn inline_size(_context: fidl::encoding::Context) -> usize {
12174            16
12175        }
12176    }
12177
12178    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats, D>
12179        for &SupportedFormats
12180    {
12181        unsafe fn encode(
12182            self,
12183            encoder: &mut fidl::encoding::Encoder<'_, D>,
12184            offset: usize,
12185            mut depth: fidl::encoding::Depth,
12186        ) -> fidl::Result<()> {
12187            encoder.debug_check_bounds::<SupportedFormats>(offset);
12188            // Vector header
12189            let max_ordinal: u64 = self.max_ordinal_present();
12190            encoder.write_num(max_ordinal, offset);
12191            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12192            // Calling encoder.out_of_line_offset(0) is not allowed.
12193            if max_ordinal == 0 {
12194                return Ok(());
12195            }
12196            depth.increment()?;
12197            let envelope_size = 8;
12198            let bytes_len = max_ordinal as usize * envelope_size;
12199            #[allow(unused_variables)]
12200            let offset = encoder.out_of_line_offset(bytes_len);
12201            let mut _prev_end_offset: usize = 0;
12202            if 1 > max_ordinal {
12203                return Ok(());
12204            }
12205
12206            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12207            // are envelope_size bytes.
12208            let cur_offset: usize = (1 - 1) * envelope_size;
12209
12210            // Zero reserved fields.
12211            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12212
12213            // Safety:
12214            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12215            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12216            //   envelope_size bytes, there is always sufficient room.
12217            fidl::encoding::encode_in_envelope_optional::<PcmSupportedFormats, D>(
12218                self.pcm_supported_formats
12219                    .as_ref()
12220                    .map(<PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow),
12221                encoder,
12222                offset + cur_offset,
12223                depth,
12224            )?;
12225
12226            _prev_end_offset = cur_offset + envelope_size;
12227
12228            Ok(())
12229        }
12230    }
12231
12232    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats {
12233        #[inline(always)]
12234        fn new_empty() -> Self {
12235            Self::default()
12236        }
12237
12238        unsafe fn decode(
12239            &mut self,
12240            decoder: &mut fidl::encoding::Decoder<'_, D>,
12241            offset: usize,
12242            mut depth: fidl::encoding::Depth,
12243        ) -> fidl::Result<()> {
12244            decoder.debug_check_bounds::<Self>(offset);
12245            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12246                None => return Err(fidl::Error::NotNullable),
12247                Some(len) => len,
12248            };
12249            // Calling decoder.out_of_line_offset(0) is not allowed.
12250            if len == 0 {
12251                return Ok(());
12252            };
12253            depth.increment()?;
12254            let envelope_size = 8;
12255            let bytes_len = len * envelope_size;
12256            let offset = decoder.out_of_line_offset(bytes_len)?;
12257            // Decode the envelope for each type.
12258            let mut _next_ordinal_to_read = 0;
12259            let mut next_offset = offset;
12260            let end_offset = offset + bytes_len;
12261            _next_ordinal_to_read += 1;
12262            if next_offset >= end_offset {
12263                return Ok(());
12264            }
12265
12266            // Decode unknown envelopes for gaps in ordinals.
12267            while _next_ordinal_to_read < 1 {
12268                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12269                _next_ordinal_to_read += 1;
12270                next_offset += envelope_size;
12271            }
12272
12273            let next_out_of_line = decoder.next_out_of_line();
12274            let handles_before = decoder.remaining_handles();
12275            if let Some((inlined, num_bytes, num_handles)) =
12276                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12277            {
12278                let member_inline_size =
12279                    <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12280                        decoder.context,
12281                    );
12282                if inlined != (member_inline_size <= 4) {
12283                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12284                }
12285                let inner_offset;
12286                let mut inner_depth = depth.clone();
12287                if inlined {
12288                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12289                    inner_offset = next_offset;
12290                } else {
12291                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12292                    inner_depth.increment()?;
12293                }
12294                let val_ref = self
12295                    .pcm_supported_formats
12296                    .get_or_insert_with(|| fidl::new_empty!(PcmSupportedFormats, D));
12297                fidl::decode!(PcmSupportedFormats, D, val_ref, decoder, inner_offset, inner_depth)?;
12298                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12299                {
12300                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12301                }
12302                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12303                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12304                }
12305            }
12306
12307            next_offset += envelope_size;
12308
12309            // Decode the remaining unknown envelopes.
12310            while next_offset < end_offset {
12311                _next_ordinal_to_read += 1;
12312                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12313                next_offset += envelope_size;
12314            }
12315
12316            Ok(())
12317        }
12318    }
12319
12320    impl fidl::encoding::ValueTypeMarker for DaiFrameFormat {
12321        type Borrowed<'a> = &'a Self;
12322        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12323            value
12324        }
12325    }
12326
12327    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormat {
12328        type Owned = Self;
12329
12330        #[inline(always)]
12331        fn inline_align(_context: fidl::encoding::Context) -> usize {
12332            8
12333        }
12334
12335        #[inline(always)]
12336        fn inline_size(_context: fidl::encoding::Context) -> usize {
12337            16
12338        }
12339    }
12340
12341    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormat, D>
12342        for &DaiFrameFormat
12343    {
12344        #[inline]
12345        unsafe fn encode(
12346            self,
12347            encoder: &mut fidl::encoding::Encoder<'_, D>,
12348            offset: usize,
12349            _depth: fidl::encoding::Depth,
12350        ) -> fidl::Result<()> {
12351            encoder.debug_check_bounds::<DaiFrameFormat>(offset);
12352            encoder.write_num::<u64>(self.ordinal(), offset);
12353            match self {
12354                DaiFrameFormat::FrameFormatStandard(ref val) => {
12355                    fidl::encoding::encode_in_envelope::<DaiFrameFormatStandard, D>(
12356                        <DaiFrameFormatStandard as fidl::encoding::ValueTypeMarker>::borrow(val),
12357                        encoder,
12358                        offset + 8,
12359                        _depth,
12360                    )
12361                }
12362                DaiFrameFormat::FrameFormatCustom(ref val) => {
12363                    fidl::encoding::encode_in_envelope::<DaiFrameFormatCustom, D>(
12364                        <DaiFrameFormatCustom as fidl::encoding::ValueTypeMarker>::borrow(val),
12365                        encoder,
12366                        offset + 8,
12367                        _depth,
12368                    )
12369                }
12370            }
12371        }
12372    }
12373
12374    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormat {
12375        #[inline(always)]
12376        fn new_empty() -> Self {
12377            Self::FrameFormatStandard(fidl::new_empty!(DaiFrameFormatStandard, D))
12378        }
12379
12380        #[inline]
12381        unsafe fn decode(
12382            &mut self,
12383            decoder: &mut fidl::encoding::Decoder<'_, D>,
12384            offset: usize,
12385            mut depth: fidl::encoding::Depth,
12386        ) -> fidl::Result<()> {
12387            decoder.debug_check_bounds::<Self>(offset);
12388            #[allow(unused_variables)]
12389            let next_out_of_line = decoder.next_out_of_line();
12390            let handles_before = decoder.remaining_handles();
12391            let (ordinal, inlined, num_bytes, num_handles) =
12392                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12393
12394            let member_inline_size = match ordinal {
12395                1 => <DaiFrameFormatStandard as fidl::encoding::TypeMarker>::inline_size(
12396                    decoder.context,
12397                ),
12398                2 => <DaiFrameFormatCustom as fidl::encoding::TypeMarker>::inline_size(
12399                    decoder.context,
12400                ),
12401                _ => return Err(fidl::Error::UnknownUnionTag),
12402            };
12403
12404            if inlined != (member_inline_size <= 4) {
12405                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12406            }
12407            let _inner_offset;
12408            if inlined {
12409                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12410                _inner_offset = offset + 8;
12411            } else {
12412                depth.increment()?;
12413                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12414            }
12415            match ordinal {
12416                1 => {
12417                    #[allow(irrefutable_let_patterns)]
12418                    if let DaiFrameFormat::FrameFormatStandard(_) = self {
12419                        // Do nothing, read the value into the object
12420                    } else {
12421                        // Initialize `self` to the right variant
12422                        *self = DaiFrameFormat::FrameFormatStandard(fidl::new_empty!(
12423                            DaiFrameFormatStandard,
12424                            D
12425                        ));
12426                    }
12427                    #[allow(irrefutable_let_patterns)]
12428                    if let DaiFrameFormat::FrameFormatStandard(ref mut val) = self {
12429                        fidl::decode!(
12430                            DaiFrameFormatStandard,
12431                            D,
12432                            val,
12433                            decoder,
12434                            _inner_offset,
12435                            depth
12436                        )?;
12437                    } else {
12438                        unreachable!()
12439                    }
12440                }
12441                2 => {
12442                    #[allow(irrefutable_let_patterns)]
12443                    if let DaiFrameFormat::FrameFormatCustom(_) = self {
12444                        // Do nothing, read the value into the object
12445                    } else {
12446                        // Initialize `self` to the right variant
12447                        *self = DaiFrameFormat::FrameFormatCustom(fidl::new_empty!(
12448                            DaiFrameFormatCustom,
12449                            D
12450                        ));
12451                    }
12452                    #[allow(irrefutable_let_patterns)]
12453                    if let DaiFrameFormat::FrameFormatCustom(ref mut val) = self {
12454                        fidl::decode!(DaiFrameFormatCustom, D, val, decoder, _inner_offset, depth)?;
12455                    } else {
12456                        unreachable!()
12457                    }
12458                }
12459                ordinal => panic!("unexpected ordinal {:?}", ordinal),
12460            }
12461            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12462                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12463            }
12464            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12465                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12466            }
12467            Ok(())
12468        }
12469    }
12470
12471    impl fidl::encoding::ValueTypeMarker for Format2 {
12472        type Borrowed<'a> = &'a Self;
12473        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12474            value
12475        }
12476    }
12477
12478    unsafe impl fidl::encoding::TypeMarker for Format2 {
12479        type Owned = Self;
12480
12481        #[inline(always)]
12482        fn inline_align(_context: fidl::encoding::Context) -> usize {
12483            8
12484        }
12485
12486        #[inline(always)]
12487        fn inline_size(_context: fidl::encoding::Context) -> usize {
12488            16
12489        }
12490    }
12491
12492    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format2, D> for &Format2 {
12493        #[inline]
12494        unsafe fn encode(
12495            self,
12496            encoder: &mut fidl::encoding::Encoder<'_, D>,
12497            offset: usize,
12498            _depth: fidl::encoding::Depth,
12499        ) -> fidl::Result<()> {
12500            encoder.debug_check_bounds::<Format2>(offset);
12501            encoder.write_num::<u64>(self.ordinal(), offset);
12502            match self {
12503                Format2::PcmFormat(ref val) => fidl::encoding::encode_in_envelope::<PcmFormat, D>(
12504                    <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
12505                    encoder,
12506                    offset + 8,
12507                    _depth,
12508                ),
12509                Format2::Encoding(ref val) => fidl::encoding::encode_in_envelope::<Encoding, D>(
12510                    <Encoding as fidl::encoding::ValueTypeMarker>::borrow(val),
12511                    encoder,
12512                    offset + 8,
12513                    _depth,
12514                ),
12515                Format2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12516            }
12517        }
12518    }
12519
12520    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format2 {
12521        #[inline(always)]
12522        fn new_empty() -> Self {
12523            Self::__SourceBreaking { unknown_ordinal: 0 }
12524        }
12525
12526        #[inline]
12527        unsafe fn decode(
12528            &mut self,
12529            decoder: &mut fidl::encoding::Decoder<'_, D>,
12530            offset: usize,
12531            mut depth: fidl::encoding::Depth,
12532        ) -> fidl::Result<()> {
12533            decoder.debug_check_bounds::<Self>(offset);
12534            #[allow(unused_variables)]
12535            let next_out_of_line = decoder.next_out_of_line();
12536            let handles_before = decoder.remaining_handles();
12537            let (ordinal, inlined, num_bytes, num_handles) =
12538                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12539
12540            let member_inline_size = match ordinal {
12541                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12542                2 => <Encoding as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12543                0 => return Err(fidl::Error::UnknownUnionTag),
12544                _ => num_bytes as usize,
12545            };
12546
12547            if inlined != (member_inline_size <= 4) {
12548                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12549            }
12550            let _inner_offset;
12551            if inlined {
12552                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12553                _inner_offset = offset + 8;
12554            } else {
12555                depth.increment()?;
12556                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12557            }
12558            match ordinal {
12559                1 => {
12560                    #[allow(irrefutable_let_patterns)]
12561                    if let Format2::PcmFormat(_) = self {
12562                        // Do nothing, read the value into the object
12563                    } else {
12564                        // Initialize `self` to the right variant
12565                        *self = Format2::PcmFormat(fidl::new_empty!(PcmFormat, D));
12566                    }
12567                    #[allow(irrefutable_let_patterns)]
12568                    if let Format2::PcmFormat(ref mut val) = self {
12569                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
12570                    } else {
12571                        unreachable!()
12572                    }
12573                }
12574                2 => {
12575                    #[allow(irrefutable_let_patterns)]
12576                    if let Format2::Encoding(_) = self {
12577                        // Do nothing, read the value into the object
12578                    } else {
12579                        // Initialize `self` to the right variant
12580                        *self = Format2::Encoding(fidl::new_empty!(Encoding, D));
12581                    }
12582                    #[allow(irrefutable_let_patterns)]
12583                    if let Format2::Encoding(ref mut val) = self {
12584                        fidl::decode!(Encoding, D, val, decoder, _inner_offset, depth)?;
12585                    } else {
12586                        unreachable!()
12587                    }
12588                }
12589                #[allow(deprecated)]
12590                ordinal => {
12591                    for _ in 0..num_handles {
12592                        decoder.drop_next_handle()?;
12593                    }
12594                    *self = Format2::__SourceBreaking { unknown_ordinal: ordinal };
12595                }
12596            }
12597            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12598                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12599            }
12600            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12601                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12602            }
12603            Ok(())
12604        }
12605    }
12606
12607    impl fidl::encoding::ValueTypeMarker for SupportedFormats2 {
12608        type Borrowed<'a> = &'a Self;
12609        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12610            value
12611        }
12612    }
12613
12614    unsafe impl fidl::encoding::TypeMarker for SupportedFormats2 {
12615        type Owned = Self;
12616
12617        #[inline(always)]
12618        fn inline_align(_context: fidl::encoding::Context) -> usize {
12619            8
12620        }
12621
12622        #[inline(always)]
12623        fn inline_size(_context: fidl::encoding::Context) -> usize {
12624            16
12625        }
12626    }
12627
12628    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats2, D>
12629        for &SupportedFormats2
12630    {
12631        #[inline]
12632        unsafe fn encode(
12633            self,
12634            encoder: &mut fidl::encoding::Encoder<'_, D>,
12635            offset: usize,
12636            _depth: fidl::encoding::Depth,
12637        ) -> fidl::Result<()> {
12638            encoder.debug_check_bounds::<SupportedFormats2>(offset);
12639            encoder.write_num::<u64>(self.ordinal(), offset);
12640            match self {
12641                SupportedFormats2::PcmSupportedFormats(ref val) => {
12642                    fidl::encoding::encode_in_envelope::<PcmSupportedFormats, D>(
12643                        <PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow(val),
12644                        encoder,
12645                        offset + 8,
12646                        _depth,
12647                    )
12648                }
12649                SupportedFormats2::SupportedEncodings(ref val) => {
12650                    fidl::encoding::encode_in_envelope::<SupportedEncodings, D>(
12651                        <SupportedEncodings as fidl::encoding::ValueTypeMarker>::borrow(val),
12652                        encoder,
12653                        offset + 8,
12654                        _depth,
12655                    )
12656                }
12657                SupportedFormats2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12658            }
12659        }
12660    }
12661
12662    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats2 {
12663        #[inline(always)]
12664        fn new_empty() -> Self {
12665            Self::__SourceBreaking { unknown_ordinal: 0 }
12666        }
12667
12668        #[inline]
12669        unsafe fn decode(
12670            &mut self,
12671            decoder: &mut fidl::encoding::Decoder<'_, D>,
12672            offset: usize,
12673            mut depth: fidl::encoding::Depth,
12674        ) -> fidl::Result<()> {
12675            decoder.debug_check_bounds::<Self>(offset);
12676            #[allow(unused_variables)]
12677            let next_out_of_line = decoder.next_out_of_line();
12678            let handles_before = decoder.remaining_handles();
12679            let (ordinal, inlined, num_bytes, num_handles) =
12680                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12681
12682            let member_inline_size = match ordinal {
12683                1 => <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12684                    decoder.context,
12685                ),
12686                2 => {
12687                    <SupportedEncodings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
12688                }
12689                0 => return Err(fidl::Error::UnknownUnionTag),
12690                _ => num_bytes as usize,
12691            };
12692
12693            if inlined != (member_inline_size <= 4) {
12694                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12695            }
12696            let _inner_offset;
12697            if inlined {
12698                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12699                _inner_offset = offset + 8;
12700            } else {
12701                depth.increment()?;
12702                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12703            }
12704            match ordinal {
12705                1 => {
12706                    #[allow(irrefutable_let_patterns)]
12707                    if let SupportedFormats2::PcmSupportedFormats(_) = self {
12708                        // Do nothing, read the value into the object
12709                    } else {
12710                        // Initialize `self` to the right variant
12711                        *self = SupportedFormats2::PcmSupportedFormats(fidl::new_empty!(
12712                            PcmSupportedFormats,
12713                            D
12714                        ));
12715                    }
12716                    #[allow(irrefutable_let_patterns)]
12717                    if let SupportedFormats2::PcmSupportedFormats(ref mut val) = self {
12718                        fidl::decode!(PcmSupportedFormats, D, val, decoder, _inner_offset, depth)?;
12719                    } else {
12720                        unreachable!()
12721                    }
12722                }
12723                2 => {
12724                    #[allow(irrefutable_let_patterns)]
12725                    if let SupportedFormats2::SupportedEncodings(_) = self {
12726                        // Do nothing, read the value into the object
12727                    } else {
12728                        // Initialize `self` to the right variant
12729                        *self = SupportedFormats2::SupportedEncodings(fidl::new_empty!(
12730                            SupportedEncodings,
12731                            D
12732                        ));
12733                    }
12734                    #[allow(irrefutable_let_patterns)]
12735                    if let SupportedFormats2::SupportedEncodings(ref mut val) = self {
12736                        fidl::decode!(SupportedEncodings, D, val, decoder, _inner_offset, depth)?;
12737                    } else {
12738                        unreachable!()
12739                    }
12740                }
12741                #[allow(deprecated)]
12742                ordinal => {
12743                    for _ in 0..num_handles {
12744                        decoder.drop_next_handle()?;
12745                    }
12746                    *self = SupportedFormats2::__SourceBreaking { unknown_ordinal: ordinal };
12747                }
12748            }
12749            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12750                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12751            }
12752            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12753                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12754            }
12755            Ok(())
12756        }
12757    }
12758}