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        const INLINE = 4;
89    }
90}
91
92impl BufferType {
93    #[inline(always)]
94    pub fn from_bits_allow_unknown(bits: u64) -> Self {
95        Self::from_bits_retain(bits)
96    }
97
98    #[inline(always)]
99    pub fn has_unknown_bits(&self) -> bool {
100        self.get_unknown_bits() != 0
101    }
102
103    #[inline(always)]
104    pub fn get_unknown_bits(&self) -> u64 {
105        self.bits() & !Self::all().bits()
106    }
107}
108
109/// Standard Frame format.
110#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
111#[repr(u8)]
112pub enum DaiFrameFormatStandard {
113    /// No frame format as in samples without a frame sync like PDM.
114    None = 1,
115    /// Format as specified in the I2S specification (left justified, 2 channels, 32 bits per
116    /// sample, frame sync stays low for the left channel and high for the right channel, data
117    /// starts one clock cycle after frame sync changes clocked out at the falling edge of sclk).
118    I2S = 2,
119    /// Left justified, 2 channels. Data starts at frame sync changes from low to high clocked out
120    /// at the falling edge of sclk. The frame sync must stay high for `bits_per_sample` bits for
121    /// the first channel and low for `bits_per_sample` bits for the second channel.
122    StereoLeft = 3,
123    /// Right justified, 2 channels. The frame sync must stay high for `bits_per_sample` bits for
124    /// the first channel and low for `bits_per_sample` bits for the second channel.
125    StereoRight = 4,
126    /// Left justified, variable number of channels, data starts at frame sync changes from low to
127    /// high clocked out at the rising edge of sclk. The frame sync must stay high for exactly 1
128    /// clock cycle.
129    Tdm1 = 5,
130    /// Left justified, variable number of channels, data starts one clock cycle after the frame
131    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
132    /// stay high for exactly 1 clock cycle.
133    Tdm2 = 6,
134    /// Left justified, variable number of channels, data starts two clock cycles after the frame
135    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
136    /// stay high for exactly 1 clock cycle.
137    Tdm3 = 7,
138}
139
140impl DaiFrameFormatStandard {
141    #[inline]
142    pub fn from_primitive(prim: u8) -> Option<Self> {
143        match prim {
144            1 => Some(Self::None),
145            2 => Some(Self::I2S),
146            3 => Some(Self::StereoLeft),
147            4 => Some(Self::StereoRight),
148            5 => Some(Self::Tdm1),
149            6 => Some(Self::Tdm2),
150            7 => Some(Self::Tdm3),
151            _ => None,
152        }
153    }
154
155    #[inline]
156    pub const fn into_primitive(self) -> u8 {
157        self as u8
158    }
159}
160
161#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
162#[repr(u8)]
163pub enum DaiSampleFormat {
164    /// Pulse Density Modulation samples.
165    Pdm = 1,
166    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
167    PcmSigned = 2,
168    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
169    PcmUnsigned = 3,
170    /// Floating point samples, encoded per the IEEE-754 standard.
171    PcmFloat = 4,
172}
173
174impl DaiSampleFormat {
175    #[inline]
176    pub fn from_primitive(prim: u8) -> Option<Self> {
177        match prim {
178            1 => Some(Self::Pdm),
179            2 => Some(Self::PcmSigned),
180            3 => Some(Self::PcmUnsigned),
181            4 => Some(Self::PcmFloat),
182            _ => None,
183        }
184    }
185
186    #[inline]
187    pub const fn into_primitive(self) -> u8 {
188        self as u8
189    }
190}
191
192#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
193pub enum DeviceType {
194    /// Device supports the fuchsia.hardware.audio/StreamConfig protocol.
195    StreamConfig,
196    /// Device supports the fuchsia.hardware.audio/Dai protocol.
197    Dai,
198    /// Device supports the fuchsia.hardware.audio/Codec protocol.
199    Codec,
200    /// Device supports the fuchsia.hardware.audio/Composite protocol.
201    Composite,
202    #[doc(hidden)]
203    __SourceBreaking { unknown_ordinal: u32 },
204}
205
206/// Pattern that matches an unknown `DeviceType` member.
207#[macro_export]
208macro_rules! DeviceTypeUnknown {
209    () => {
210        _
211    };
212}
213
214impl DeviceType {
215    #[inline]
216    pub fn from_primitive(prim: u32) -> Option<Self> {
217        match prim {
218            1 => Some(Self::StreamConfig),
219            2 => Some(Self::Dai),
220            3 => Some(Self::Codec),
221            4 => Some(Self::Composite),
222            _ => None,
223        }
224    }
225
226    #[inline]
227    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
228        match prim {
229            1 => Self::StreamConfig,
230            2 => Self::Dai,
231            3 => Self::Codec,
232            4 => Self::Composite,
233            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
234        }
235    }
236
237    #[inline]
238    pub fn unknown() -> Self {
239        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
240    }
241
242    #[inline]
243    pub const fn into_primitive(self) -> u32 {
244        match self {
245            Self::StreamConfig => 1,
246            Self::Dai => 2,
247            Self::Codec => 3,
248            Self::Composite => 4,
249            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
250        }
251    }
252
253    #[inline]
254    pub fn is_unknown(&self) -> bool {
255        match self {
256            Self::__SourceBreaking { unknown_ordinal: _ } => true,
257            _ => false,
258        }
259    }
260}
261
262#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
263pub enum DriverError {
264    /// The driver encountered an otherwise unspecified error while performing the operation.
265    InternalError,
266    /// The operation is not implemented, supported, or enabled.
267    NotSupported,
268    /// An argument is invalid.
269    InvalidArgs,
270    /// The subject of the operation is the wrong type to perform the operation.
271    WrongType,
272    /// The operation cannot be performed currently but potentially could succeed if
273    /// the caller waits for a prerequisite to be satisfied.
274    ShouldWait,
275    /// A fatal error has occurred in the driver. The connection is no longer
276    /// usable and the client should close it.
277    FatalError,
278    #[doc(hidden)]
279    __SourceBreaking { unknown_ordinal: u32 },
280}
281
282/// Pattern that matches an unknown `DriverError` member.
283#[macro_export]
284macro_rules! DriverErrorUnknown {
285    () => {
286        _
287    };
288}
289
290impl DriverError {
291    #[inline]
292    pub fn from_primitive(prim: u32) -> Option<Self> {
293        match prim {
294            1 => Some(Self::InternalError),
295            2 => Some(Self::NotSupported),
296            3 => Some(Self::InvalidArgs),
297            4 => Some(Self::WrongType),
298            5 => Some(Self::ShouldWait),
299            6 => Some(Self::FatalError),
300            _ => None,
301        }
302    }
303
304    #[inline]
305    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
306        match prim {
307            1 => Self::InternalError,
308            2 => Self::NotSupported,
309            3 => Self::InvalidArgs,
310            4 => Self::WrongType,
311            5 => Self::ShouldWait,
312            6 => Self::FatalError,
313            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
314        }
315    }
316
317    #[inline]
318    pub fn unknown() -> Self {
319        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
320    }
321
322    #[inline]
323    pub const fn into_primitive(self) -> u32 {
324        match self {
325            Self::InternalError => 1,
326            Self::NotSupported => 2,
327            Self::InvalidArgs => 3,
328            Self::WrongType => 4,
329            Self::ShouldWait => 5,
330            Self::FatalError => 6,
331            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
332        }
333    }
334
335    #[inline]
336    pub fn is_unknown(&self) -> bool {
337        match self {
338            Self::__SourceBreaking { unknown_ordinal: _ } => true,
339            _ => false,
340        }
341    }
342}
343
344/// The type of encoding used for the stream.
345#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
346pub enum EncodingType {
347    Aac,
348    Sbc,
349    #[doc(hidden)]
350    __SourceBreaking {
351        unknown_ordinal: u32,
352    },
353}
354
355/// Pattern that matches an unknown `EncodingType` member.
356#[macro_export]
357macro_rules! EncodingTypeUnknown {
358    () => {
359        _
360    };
361}
362
363impl EncodingType {
364    #[inline]
365    pub fn from_primitive(prim: u32) -> Option<Self> {
366        match prim {
367            1 => Some(Self::Aac),
368            2 => Some(Self::Sbc),
369            _ => None,
370        }
371    }
372
373    #[inline]
374    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
375        match prim {
376            1 => Self::Aac,
377            2 => Self::Sbc,
378            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
379        }
380    }
381
382    #[inline]
383    pub fn unknown() -> Self {
384        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
385    }
386
387    #[inline]
388    pub const fn into_primitive(self) -> u32 {
389        match self {
390            Self::Aac => 1,
391            Self::Sbc => 2,
392            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
393        }
394    }
395
396    #[inline]
397    pub fn is_unknown(&self) -> bool {
398        match self {
399            Self::__SourceBreaking { unknown_ordinal: _ } => true,
400            _ => false,
401        }
402    }
403}
404
405#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
406#[repr(u32)]
407pub enum GetVmoError {
408    /// The ring buffer setup failed due to an invalid argument, e.g. min_frames is too big.
409    InvalidArgs = 1,
410    /// The ring buffer setup failed due to an internal error.
411    InternalError = 2,
412}
413
414impl GetVmoError {
415    #[inline]
416    pub fn from_primitive(prim: u32) -> Option<Self> {
417        match prim {
418            1 => Some(Self::InvalidArgs),
419            2 => Some(Self::InternalError),
420            _ => None,
421        }
422    }
423
424    #[inline]
425    pub const fn into_primitive(self) -> u32 {
426        self as u32
427    }
428}
429
430#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
431#[repr(u32)]
432pub enum PlugDetectCapabilities {
433    /// Driver is hardwired (will always be plugged in).
434    Hardwired = 0,
435    /// Driver is able to asynchronously notify of plug state changes.
436    CanAsyncNotify = 1,
437}
438
439impl PlugDetectCapabilities {
440    #[inline]
441    pub fn from_primitive(prim: u32) -> Option<Self> {
442        match prim {
443            0 => Some(Self::Hardwired),
444            1 => Some(Self::CanAsyncNotify),
445            _ => None,
446        }
447    }
448
449    #[inline]
450    pub const fn into_primitive(self) -> u32 {
451        self as u32
452    }
453}
454
455#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
456#[repr(u8)]
457pub enum SampleFormat {
458    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
459    PcmSigned = 1,
460    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
461    PcmUnsigned = 2,
462    /// Floating point samples, encoded per the IEEE-754 standard.
463    PcmFloat = 3,
464}
465
466impl SampleFormat {
467    #[inline]
468    pub fn from_primitive(prim: u8) -> Option<Self> {
469        match prim {
470            1 => Some(Self::PcmSigned),
471            2 => Some(Self::PcmUnsigned),
472            3 => Some(Self::PcmFloat),
473            _ => None,
474        }
475    }
476
477    #[inline]
478    pub const fn into_primitive(self) -> u8 {
479        self as u8
480    }
481}
482
483/// Identifies devices that are unique within the system.
484/// A UniqueId for these devices consists of the enum value followed by (UNIQUE_ID_SIZE - 1) zeroes.
485#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
486pub enum SingularUniqueId {
487    Dsp,
488    BuiltinSpeaker,
489    BuiltinHeadphoneJack,
490    BuiltinMicrophone,
491    BuiltinHeadsetJack,
492    #[doc(hidden)]
493    __SourceBreaking {
494        unknown_ordinal: u8,
495    },
496}
497
498/// Pattern that matches an unknown `SingularUniqueId` member.
499#[macro_export]
500macro_rules! SingularUniqueIdUnknown {
501    () => {
502        _
503    };
504}
505
506impl SingularUniqueId {
507    #[inline]
508    pub fn from_primitive(prim: u8) -> Option<Self> {
509        match prim {
510            0 => Some(Self::Dsp),
511            1 => Some(Self::BuiltinSpeaker),
512            2 => Some(Self::BuiltinHeadphoneJack),
513            3 => Some(Self::BuiltinMicrophone),
514            4 => Some(Self::BuiltinHeadsetJack),
515            _ => None,
516        }
517    }
518
519    #[inline]
520    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
521        match prim {
522            0 => Self::Dsp,
523            1 => Self::BuiltinSpeaker,
524            2 => Self::BuiltinHeadphoneJack,
525            3 => Self::BuiltinMicrophone,
526            4 => Self::BuiltinHeadsetJack,
527            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
528        }
529    }
530
531    #[inline]
532    pub fn unknown() -> Self {
533        Self::__SourceBreaking { unknown_ordinal: 0xff }
534    }
535
536    #[inline]
537    pub const fn into_primitive(self) -> u8 {
538        match self {
539            Self::Dsp => 0,
540            Self::BuiltinSpeaker => 1,
541            Self::BuiltinHeadphoneJack => 2,
542            Self::BuiltinMicrophone => 3,
543            Self::BuiltinHeadsetJack => 4,
544            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
545        }
546    }
547
548    #[inline]
549    pub fn is_unknown(&self) -> bool {
550        match self {
551            Self::__SourceBreaking { unknown_ordinal: _ } => true,
552            _ => false,
553        }
554    }
555}
556
557#[derive(Clone, Debug, PartialEq)]
558pub struct CodecGetPropertiesResponse {
559    pub properties: CodecProperties,
560}
561
562impl fidl::Persistable for CodecGetPropertiesResponse {}
563
564#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
565pub struct CodecSetDaiFormatRequest {
566    pub format: DaiFormat,
567}
568
569impl fidl::Persistable for CodecSetDaiFormatRequest {}
570
571#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
572#[repr(C)]
573pub struct CodecStartResponse {
574    pub start_time: i64,
575}
576
577impl fidl::Persistable for CodecStartResponse {}
578
579#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
580#[repr(C)]
581pub struct CodecStopResponse {
582    pub stop_time: i64,
583}
584
585impl fidl::Persistable for CodecStopResponse {}
586
587#[derive(Clone, Debug, PartialEq)]
588pub struct CodecWatchPlugStateResponse {
589    pub plug_state: PlugState,
590}
591
592impl fidl::Persistable for CodecWatchPlugStateResponse {}
593
594#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
595pub struct CodecGetDaiFormatsResponse {
596    pub formats: Vec<DaiSupportedFormats>,
597}
598
599impl fidl::Persistable for CodecGetDaiFormatsResponse {}
600
601#[derive(Clone, Debug, PartialEq)]
602pub struct CodecSetDaiFormatResponse {
603    pub state: CodecFormatInfo,
604}
605
606impl fidl::Persistable for CodecSetDaiFormatResponse {}
607
608#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
609#[repr(C)]
610pub struct CompositeGetDaiFormatsRequest {
611    pub processing_element_id: u64,
612}
613
614impl fidl::Persistable for CompositeGetDaiFormatsRequest {}
615
616#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
617#[repr(C)]
618pub struct CompositeGetPacketStreamFormatsRequest {
619    pub processing_element_id: u64,
620}
621
622impl fidl::Persistable for CompositeGetPacketStreamFormatsRequest {}
623
624#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
625#[repr(C)]
626pub struct CompositeGetRingBufferFormatsRequest {
627    pub processing_element_id: u64,
628}
629
630impl fidl::Persistable for CompositeGetRingBufferFormatsRequest {}
631
632#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
633pub struct CompositeSetDaiFormatRequest {
634    pub processing_element_id: u64,
635    pub format: DaiFormat,
636}
637
638impl fidl::Persistable for CompositeSetDaiFormatRequest {}
639
640#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
641pub struct CompositeGetDaiFormatsResponse {
642    pub dai_formats: Vec<DaiSupportedFormats>,
643}
644
645impl fidl::Persistable for CompositeGetDaiFormatsResponse {}
646
647#[derive(Clone, Debug, PartialEq)]
648pub struct CompositeGetPacketStreamFormatsResponse {
649    pub packet_stream_formats: Vec<SupportedFormats2>,
650}
651
652impl fidl::Persistable for CompositeGetPacketStreamFormatsResponse {}
653
654#[derive(Clone, Debug, PartialEq)]
655pub struct CompositeGetPropertiesResponse {
656    pub properties: CompositeProperties,
657}
658
659impl fidl::Persistable for CompositeGetPropertiesResponse {}
660
661#[derive(Clone, Debug, PartialEq)]
662pub struct CompositeGetRingBufferFormatsResponse {
663    pub ring_buffer_formats: Vec<SupportedFormats2>,
664}
665
666impl fidl::Persistable for CompositeGetRingBufferFormatsResponse {}
667
668/// DAI format. Frames are made up of `number_of_channels` samples which have `bits_per_sample` bits
669/// of data within `bits_per_slot` arranged in `frame_format`. For more detailed information see
670/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
671#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
672pub struct DaiFormat {
673    /// Number of channels.
674    /// Must be 2, if `frame_format` is DaiFrameFormatStandard::I2S, STEREO_LEFT or STEREO_RIGHT.
675    pub number_of_channels: u32,
676    /// Sets which channels are active via a bitmask.
677    /// The least significant bit corresponds to channel index 0.
678    /// Must not set bits beyond the least-significant `number_of_channels` bits.
679    pub channels_to_use_bitmask: u64,
680    /// The sample format of all samples.
681    pub sample_format: DaiSampleFormat,
682    /// The frame format of all samples.
683    pub frame_format: DaiFrameFormat,
684    /// The frame rate for all samples.
685    pub frame_rate: u32,
686    /// The bits per slot for all channels.
687    pub bits_per_slot: u8,
688    /// The bits per sample for each channel.
689    /// Must be smaller than `bits_per_slot` for all samples to fit.
690    pub bits_per_sample: u8,
691}
692
693impl fidl::Persistable for DaiFormat {}
694
695/// Custom Frame format.
696#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
697pub struct DaiFrameFormatCustom {
698    /// Justification of the samples within a slot.
699    pub left_justified: bool,
700    /// Clocking of data samples and frame sync output on either raising or falling sclk.
701    /// If true then the sclk raises on the raising edge of the data and frame sync, i.e.
702    /// the data will be sampled on the falling edge of sclk (the middle of the sclk cycle).
703    /// Hence, if false then data will be sampled on the raising edge of sclk.
704    pub sclk_on_raising: bool,
705    /// Number of sclks between the beginning of a frame sync change and audio samples.
706    /// For example, for I2S set to 1 and for stereo left justified set to 0.
707    pub frame_sync_sclks_offset: i8,
708    /// Number of sclks the frame sync is high within a frame.
709    /// For example, for I2S with 32 bits slots set to 32, for TDM usually set to 1.
710    pub frame_sync_size: u8,
711}
712
713impl fidl::Persistable for DaiFrameFormatCustom {}
714
715#[derive(Clone, Debug, PartialEq)]
716pub struct DaiGetPropertiesResponse {
717    pub properties: DaiProperties,
718}
719
720impl fidl::Persistable for DaiGetPropertiesResponse {}
721
722/// Formats supported by the DAI. Frames are made up of `number_of_channels` samples which have
723/// `bits_per_sample` bits of data within `bits_per_slot` bits arranged in `frame_formats`.
724/// All values listed in each vector are supported. When not all combinations supported by the driver
725/// can be described with one `DaiSupportedFormats`, `GetDaiSupportedFormats` returns more than one
726/// `DaiSupportedFormats` in the returned vector.
727/// For more detailed information see
728/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
729#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
730pub struct DaiSupportedFormats {
731    /// Possible number of channels supported.
732    pub number_of_channels: Vec<u32>,
733    /// Sample formats supported.
734    pub sample_formats: Vec<DaiSampleFormat>,
735    /// Frame formats supported.
736    pub frame_formats: Vec<DaiFrameFormat>,
737    /// Rates supported. Values must be listed in ascending order.
738    pub frame_rates: Vec<u32>,
739    /// The bits per slot supported. Values must be listed in ascending order.
740    pub bits_per_slot: Vec<u8>,
741    /// Bits per sample supported. Values must be listed in ascending order.
742    pub bits_per_sample: Vec<u8>,
743}
744
745impl fidl::Persistable for DaiSupportedFormats {}
746
747#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
748pub struct DaiGetDaiFormatsResponse {
749    pub dai_formats: Vec<DaiSupportedFormats>,
750}
751
752impl fidl::Persistable for DaiGetDaiFormatsResponse {}
753
754#[derive(Clone, Debug, PartialEq)]
755pub struct DaiGetRingBufferFormatsResponse {
756    pub ring_buffer_formats: Vec<SupportedFormats>,
757}
758
759impl fidl::Persistable for DaiGetRingBufferFormatsResponse {}
760
761#[derive(Clone, Debug, PartialEq)]
762pub struct HealthGetHealthStateResponse {
763    pub state: HealthState,
764}
765
766impl fidl::Persistable for HealthGetHealthStateResponse {}
767
768#[derive(Clone, Debug, PartialEq)]
769pub struct PacketStreamControlGetPropertiesResponse {
770    pub properties: PacketStreamProperties,
771}
772
773impl fidl::Persistable for PacketStreamControlGetPropertiesResponse {}
774
775/// Format supporting PCM audio. Frames are made up of `number_of_channels` samples
776/// which have `valid_bits_per_sample` bits of most-significant (left-justified) data within
777/// `bytes_per_sample` bytes.
778///
779/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
780#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
781pub struct PcmFormat {
782    /// Number of channels.
783    pub number_of_channels: u8,
784    /// The format of all samples.
785    pub sample_format: SampleFormat,
786    /// Bytes allocated to hold a sample, must be greater than or equal to the valid sample size in
787    /// `valid_bits_per_sample`.
788    pub bytes_per_sample: u8,
789    /// Number of valid bits in a sample, must be less than or equal to `bytes_per_sample * 8`.
790    /// If less than `bytes_per_sample * 8`, the valid bits (those containing audio)
791    /// are left justified, and any additional bits must be ignored by the
792    /// receiver.
793    pub valid_bits_per_sample: u8,
794    /// The frame rate for all samples.
795    pub frame_rate: u32,
796}
797
798impl fidl::Persistable for PcmFormat {}
799
800#[derive(Clone, Debug, PartialEq)]
801pub struct RingBufferGetPropertiesResponse {
802    pub properties: RingBufferProperties,
803}
804
805impl fidl::Persistable for RingBufferGetPropertiesResponse {}
806
807#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
808#[repr(C)]
809pub struct RingBufferGetVmoRequest {
810    pub min_frames: u32,
811    pub clock_recovery_notifications_per_ring: u32,
812}
813
814impl fidl::Persistable for RingBufferGetVmoRequest {}
815
816#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
817#[repr(C)]
818pub struct RingBufferPositionInfo {
819    /// The driver's best estimate of the time (in the CLOCK_MONOTONIC timeline) at which the
820    /// playback/capture pointer reached the position indicated by `position`.
821    ///
822    /// `turn_on_delay` impact should not be incorporated into 'timestamp'.
823    /// No delays indicated in `DelayInfo` should be incorporated.
824    pub timestamp: i64,
825    /// The playback/capture pointer position (in bytes) in the ring buffer at time
826    /// `timestamp` as estimated by the driver.
827    pub position: u32,
828}
829
830impl fidl::Persistable for RingBufferPositionInfo {}
831
832#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
833#[repr(C)]
834pub struct RingBufferSetActiveChannelsRequest {
835    pub active_channels_bitmask: u64,
836}
837
838impl fidl::Persistable for RingBufferSetActiveChannelsRequest {}
839
840#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
841#[repr(C)]
842pub struct RingBufferStartResponse {
843    pub start_time: i64,
844}
845
846impl fidl::Persistable for RingBufferStartResponse {}
847
848#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
849#[repr(C)]
850pub struct RingBufferWatchClockRecoveryPositionInfoResponse {
851    pub position_info: RingBufferPositionInfo,
852}
853
854impl fidl::Persistable for RingBufferWatchClockRecoveryPositionInfoResponse {}
855
856#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
857#[repr(C)]
858pub struct RingBufferSetActiveChannelsResponse {
859    pub set_time: i64,
860}
861
862impl fidl::Persistable for RingBufferSetActiveChannelsResponse {}
863
864#[derive(Clone, Debug, PartialEq)]
865pub struct RingBufferWatchDelayInfoResponse {
866    pub delay_info: DelayInfo,
867}
868
869impl fidl::Persistable for RingBufferWatchDelayInfoResponse {}
870
871#[derive(Clone, Debug, PartialEq)]
872pub struct StreamConfigGetPropertiesResponse {
873    pub properties: StreamProperties,
874}
875
876impl fidl::Persistable for StreamConfigGetPropertiesResponse {}
877
878#[derive(Clone, Debug, PartialEq)]
879pub struct StreamConfigGetSupportedFormatsResponse {
880    pub supported_formats: Vec<SupportedFormats>,
881}
882
883impl fidl::Persistable for StreamConfigGetSupportedFormatsResponse {}
884
885#[derive(Clone, Debug, PartialEq)]
886pub struct StreamConfigSetGainRequest {
887    pub target_state: GainState,
888}
889
890impl fidl::Persistable for StreamConfigSetGainRequest {}
891
892#[derive(Clone, Debug, PartialEq)]
893pub struct StreamConfigWatchGainStateResponse {
894    pub gain_state: GainState,
895}
896
897impl fidl::Persistable for StreamConfigWatchGainStateResponse {}
898
899#[derive(Clone, Debug, PartialEq)]
900pub struct StreamConfigWatchPlugStateResponse {
901    pub plug_state: PlugState,
902}
903
904impl fidl::Persistable for StreamConfigWatchPlugStateResponse {}
905
906#[derive(Clone, Debug, Default, PartialEq)]
907pub struct AllocateVmosConfig {
908    /// The minimum size required for each VMO, in bytes.
909    ///
910    /// Required.
911    pub min_vmo_size: Option<u64>,
912    /// The number of VMOs to allocate.
913    ///
914    /// Required.
915    pub vmo_count: Option<u32>,
916    #[doc(hidden)]
917    pub __source_breaking: fidl::marker::SourceBreaking,
918}
919
920impl fidl::Persistable for AllocateVmosConfig {}
921
922/// The specification of a single channel, within the overall channel configuration.
923#[derive(Clone, Debug, Default, PartialEq)]
924pub struct ChannelAttributes {
925    /// Minimum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
926    /// If `min_frequency` is not included, then this channel is assumed to cover the entire
927    /// low-frequency range of this device.
928    ///
929    /// Optional.
930    pub min_frequency: Option<u32>,
931    /// Maximum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
932    /// If `max_frequency` is not included, then this channel is assumed to cover the entire
933    /// high-frequency range of this device.
934    ///
935    /// Optional.
936    pub max_frequency: Option<u32>,
937    #[doc(hidden)]
938    pub __source_breaking: fidl::marker::SourceBreaking,
939}
940
941impl fidl::Persistable for ChannelAttributes {}
942
943/// The specification of a channel configuration.
944#[derive(Clone, Debug, Default, PartialEq)]
945pub struct ChannelSet {
946    /// Describes attributes for this channel set.
947    /// The size of this vector defines the number of channels supported by this `ChannelSet`.
948    /// Each element of the `attributes` vector defines attributes of a single channel.
949    ///
950    /// Required.
951    pub attributes: Option<Vec<ChannelAttributes>>,
952    #[doc(hidden)]
953    pub __source_breaking: fidl::marker::SourceBreaking,
954}
955
956impl fidl::Persistable for ChannelSet {}
957
958/// Codec format information.
959#[derive(Clone, Debug, Default, PartialEq)]
960pub struct CodecFormatInfo {
961    /// The driver's best estimate of the external delay (in nanoseconds) present in the pipeline
962    /// for the chosen format. When precisely synchronizing presentation across multiple entities
963    /// (e.g. devices), the external delay should be taken into account.
964    /// If not included `external_delay` is unknown.
965    ///
966    /// Optional.
967    pub external_delay: Option<i64>,
968    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
969    /// actually start playback/capture after a `Start` command is issued.
970    /// It may take some time for the hardware to get into fully operational mode, for example due
971    /// a power state change. This delay must be taken into account if not getting the initial audio
972    /// samples played or captured is not acceptable.
973    /// If not included `turn_on_delay` is unknown.
974    ///
975    /// Optional.
976    pub turn_on_delay: Option<i64>,
977    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
978    /// actually stop playback/capture after a `Stop` command is issued.
979    /// It may take some time for the hardware to get into fully stopped mode, for example due
980    /// a power state change. This delay must be taken into account if playback/capture of samples
981    /// after a 'Stop' command is not acceptable.
982    /// If not included, the turn off delay is unknown.
983    ///
984    /// Optional.
985    pub turn_off_delay: Option<i64>,
986    #[doc(hidden)]
987    pub __source_breaking: fidl::marker::SourceBreaking,
988}
989
990impl fidl::Persistable for CodecFormatInfo {}
991
992#[derive(Clone, Debug, Default, PartialEq)]
993pub struct CodecProperties {
994    /// Driver type is input (true) or output (false)
995    /// If not included, then the driver may be used for both input and output.
996    ///
997    /// Optional.
998    pub is_input: Option<bool>,
999    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1000    /// If included, this string must be non-empty.
1001    ///
1002    /// Optional.
1003    pub manufacturer: Option<String>,
1004    /// UI string for the product name. If not included, the product name is unspecified.
1005    /// If included, this string must be non-empty.
1006    ///
1007    /// Optional.
1008    pub product: Option<String>,
1009    /// Unique identifier for the codec. If not included, there is no unique id for this Codec.
1010    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1011    ///
1012    /// Optional.
1013    pub unique_id: Option<[u8; 16]>,
1014    /// Plug Detect Capabilities.
1015    ///
1016    /// Required.
1017    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1018    #[doc(hidden)]
1019    pub __source_breaking: fidl::marker::SourceBreaking,
1020}
1021
1022impl fidl::Persistable for CodecProperties {}
1023
1024#[derive(Clone, Debug, Default, PartialEq)]
1025pub struct CompositeProperties {
1026    /// UI string for the manufacturer name. If not set, the manufacturer is unknown.
1027    /// If included, this string must be non-empty.
1028    ///
1029    /// Optional.
1030    pub manufacturer: Option<String>,
1031    /// UI string for the product name. If not set, the product name is unknown.
1032    /// If included, this string must be non-empty.
1033    ///
1034    /// Optional.
1035    pub product: Option<String>,
1036    /// A unique identifier. If not included, there is no unique id for this Device.
1037    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1038    ///
1039    /// Optional.
1040    pub unique_id: Option<[u8; 16]>,
1041    /// An identifier for the clock domain in which this hardware operates. If
1042    /// two hardware devices have the same clock domain, their clock rates are
1043    /// identical and perfectly synchronized. Although these two clocks have the
1044    /// same rate, the clock positions may be offset from each other by an
1045    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1046    /// system wide entity, such as a platform bus or global clock tree.
1047    ///
1048    /// There are two special values:
1049    ///
1050    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1051    ///    rate as the system montonic clock.
1052    ///
1053    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1054    ///    rate and is not synchronized with any known clock, not even with
1055    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1056    ///
1057    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1058    /// notification updates to recover the hardware's clock.
1059    ///
1060    /// Required.
1061    pub clock_domain: Option<u32>,
1062    #[doc(hidden)]
1063    pub __source_breaking: fidl::marker::SourceBreaking,
1064}
1065
1066impl fidl::Persistable for CompositeProperties {}
1067
1068#[derive(Clone, Debug, Default, PartialEq)]
1069pub struct DaiProperties {
1070    /// Driver type is input (true) or output (false)
1071    ///
1072    /// Required.
1073    pub is_input: Option<bool>,
1074    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1075    /// If included, this string must be non-empty.
1076    ///
1077    /// Optional.
1078    pub manufacturer: Option<String>,
1079    /// UI string for the product name. If not included, the product name is unspecified.
1080    /// If included, this string must be non-empty.
1081    ///
1082    /// Optional.
1083    pub product_name: Option<String>,
1084    /// A unique identifier for the DAI. If not included, there is no unique id for this DAI.
1085    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1086    ///
1087    /// Optional.
1088    pub unique_id: Option<[u8; 16]>,
1089    /// An identifier for the clock domain in which this hardware operates. If
1090    /// two hardware devices have the same clock domain, their clock rates are
1091    /// identical and perfectly synchronized. Although these two clocks have the
1092    /// same rate, the clock positions may be offset from each other by an
1093    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1094    /// system wide entity, such as a platform bus or global clock tree.
1095    ///
1096    /// There are two special values:
1097    ///
1098    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1099    ///    rate as the system montonic clock.
1100    ///
1101    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1102    ///    rate and is not synchronized with any known clock, not even with
1103    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1104    ///
1105    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1106    /// notification updates to recover the hardware's clock.
1107    ///
1108    /// Required.
1109    pub clock_domain: Option<u32>,
1110    #[doc(hidden)]
1111    pub __source_breaking: fidl::marker::SourceBreaking,
1112}
1113
1114impl fidl::Persistable for DaiProperties {}
1115
1116/// Delay information as returned by the driver.
1117#[derive(Clone, Debug, Default, PartialEq)]
1118pub struct DelayInfo {
1119    /// The driver's best estimate (for the chosen format) of the delay internal to the hardware it
1120    /// abstracts.
1121    ///
1122    /// "Internal" refers to the hardware between the DAI interconnect and the ring buffer (such as
1123    /// an SoC audio subsystem), whereas "external" refers to hardware on the far side of any DAI
1124    /// interconnect (such as hardware codecs).
1125    ///
1126    /// For a given frame during playback, this is any delay after the driver copies it out of the
1127    /// ring buffer, before it exits any interconnect.
1128    /// For a given frame during recording, this is any delay after it enters the interconnect,
1129    /// before the driver moves it into the ring buffer.
1130    ///
1131    /// `internal_delay` must be taken into account by the client when determining the requirements
1132    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1133    ///
1134    /// This delay must not include the inherent delay added by the temporary buffering needed
1135    /// to copy data in and out of the ring buffer, which is contained in `RingBufferProperties`
1136    /// field `driver_transfer_bytes`.
1137    ///
1138    /// Required.
1139    pub internal_delay: Option<i64>,
1140    /// The driver's best estimate (for the chosen format) of the delay external to the hardware it
1141    /// abstracts.
1142    ///
1143    /// "External" refers to hardware on the far side of any DAI interconnect (such as hardware
1144    /// codecs), whereas "internal" refers to hardware between the DAI interconnect and the ring
1145    /// buffer (such as an SoC audio subsystem).
1146    ///
1147    /// `external_delay` must be taken into account by the client when determining the requirements
1148    /// for minimum lead time (during playback) and minimum capture delay (during capture).
1149    ///
1150    /// If not included, `external_delay` is unknown. If unknown, a client may treat it however it
1151    /// chooses (consider it zero or some large number, autodetect it, etc).
1152    ///
1153    /// Like `internal_delay`, this delay must not include the inherent delay added by the temporary
1154    /// buffering needed to copy data in and out of the ring buffer, which is contained in
1155    /// `RingBufferProperties` field `driver_transfer_bytes`.
1156    ///
1157    /// Optional.
1158    pub external_delay: Option<i64>,
1159    #[doc(hidden)]
1160    pub __source_breaking: fidl::marker::SourceBreaking,
1161}
1162
1163impl fidl::Persistable for DelayInfo {}
1164
1165/// Format specification for an encoded audio stream.
1166#[derive(Clone, Debug, Default, PartialEq)]
1167pub struct Encoding {
1168    /// Number of channels for the stream, once it is decoded.
1169    ///
1170    /// Required.
1171    pub decoded_channel_count: Option<u32>,
1172    /// The frame rate for the stream, once it is decoded. This is a hint for decoders.
1173    ///
1174    /// Optional.
1175    pub decoded_frame_rate: Option<u32>,
1176    /// The average bitrate of the stream in bits per second.
1177    ///
1178    /// Required.
1179    pub average_encoding_bitrate: Option<u32>,
1180    /// The encoding type for the stream.
1181    ///
1182    /// Required.
1183    pub encoding_type: Option<EncodingType>,
1184    #[doc(hidden)]
1185    pub __source_breaking: fidl::marker::SourceBreaking,
1186}
1187
1188impl fidl::Persistable for Encoding {}
1189
1190/// Deprecated: Use `Format2` instead.
1191#[derive(Clone, Debug, Default, PartialEq)]
1192pub struct Format {
1193    pub pcm_format: Option<PcmFormat>,
1194    #[doc(hidden)]
1195    pub __source_breaking: fidl::marker::SourceBreaking,
1196}
1197
1198impl fidl::Persistable for Format {}
1199
1200/// Gain state requested by the client or returned by the driver.
1201#[derive(Clone, Debug, Default, PartialEq)]
1202pub struct GainState {
1203    /// Current mute state. If not included, the state is unmuted.
1204    ///
1205    /// Optional.
1206    pub muted: Option<bool>,
1207    /// Current Automatic Gain Control (AGC) state. If not included, AGC is disabled.
1208    ///
1209    /// Optional.
1210    pub agc_enabled: Option<bool>,
1211    /// Current gain in decibels.
1212    ///
1213    /// Required.
1214    pub gain_db: Option<f32>,
1215    #[doc(hidden)]
1216    pub __source_breaking: fidl::marker::SourceBreaking,
1217}
1218
1219impl fidl::Persistable for GainState {}
1220
1221#[derive(Clone, Debug, Default, PartialEq)]
1222pub struct HealthState {
1223    /// Driver is currently healthy.
1224    /// No health information is provided if this field is not included.
1225    /// This allows drivers to signal their health state in scenarios where they have not enough
1226    /// capabilities or resources to recover on their own, for instance not able to power down the
1227    /// hardware via a GPIO or control over the power subsystem.
1228    ///
1229    /// Optional.
1230    pub healthy: Option<bool>,
1231    #[doc(hidden)]
1232    pub __source_breaking: fidl::marker::SourceBreaking,
1233}
1234
1235impl fidl::Persistable for HealthState {}
1236
1237/// Properties of the packet-stream. These values don't change once the packet-stream is created.
1238#[derive(Clone, Debug, Default, PartialEq)]
1239pub struct PacketStreamProperties {
1240    /// When set to true, indicates that the packet-stream runs in a different cache coherency
1241    /// domain. Clients must ensure data writes are flushed to main memory (during output)
1242    /// or invalidated before reading (during input).
1243    ///
1244    /// When set to false, the server and client are in the same coherency domain.
1245    /// Synchronization (e.g., fences) is still required to order reads and writes.
1246    ///
1247    /// Required.
1248    pub needs_cache_flush_or_invalidate: Option<bool>,
1249    /// The buffer methods supported by this driver.
1250    ///
1251    /// Required.
1252    pub supported_buffer_types: Option<BufferType>,
1253    #[doc(hidden)]
1254    pub __source_breaking: fidl::marker::SourceBreaking,
1255}
1256
1257impl fidl::Persistable for PacketStreamProperties {}
1258
1259#[derive(Clone, Debug, Default, PartialEq)]
1260pub struct PacketStreamSinkPutPacketResponse {
1261    #[doc(hidden)]
1262    pub __source_breaking: fidl::marker::SourceBreaking,
1263}
1264
1265impl fidl::Persistable for PacketStreamSinkPutPacketResponse {}
1266
1267/// Format supporting PCM audio. Each frame consists of one or more
1268/// (number_of_channels) samples, stored contiguously. Within the `bytes_per_sample` allocated for
1269/// each sample, `valid_bits_per_sample` bits of data are stored in the most-significant
1270/// (left-justified) portion.
1271///
1272/// All values listed in each vector are supported. This implies a cross-product: any listed
1273/// item in one vector is supported in combination with any listed item in another vector.
1274/// When not all combinations supported by the driver can be described with one
1275/// `PcmSupportedFormats` table, `GetSupportedFormats` must return a vector with multiple
1276/// `SupportedFormats` entries.
1277///
1278/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
1279#[derive(Clone, Debug, Default, PartialEq)]
1280pub struct PcmSupportedFormats {
1281    /// Vector of possible `ChannelSets` supported.
1282    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1283    /// of optional attributes.
1284    /// Only one `ChannelSet` is allowed for each unique channel-count. As a result, no two entries
1285    /// in `channel_sets` can contain `attributes` vectors with the same length.
1286    ///
1287    /// Required.
1288    pub channel_sets: Option<Vec<ChannelSet>>,
1289    /// Vector of possible `SampleFormat`s supported.
1290    /// Values in this vector must be unique.
1291    ///
1292    /// Required.
1293    pub sample_formats: Option<Vec<SampleFormat>>,
1294    /// Vector of possible bytes allocated for each sample. Values must be listed in ascending
1295    /// order. All values listed in `valid_bits_per_sample` must fit into at least the largest
1296    /// `bytes_per_sample` value.
1297    ///
1298    /// Required.
1299    pub bytes_per_sample: Option<Vec<u8>>,
1300    /// Vector of possible number of bits containing valid data, within the sample container defined
1301    /// by `bytes_per_sample`. Values must be listed in ascending order. All values listed must fit
1302    /// into the largest `bytes_per_sample` value. The valid data bits must be most-significant
1303    /// (left-justified) within the sample container, and any additional bits will be ignored.
1304    ///
1305    /// Required.
1306    pub valid_bits_per_sample: Option<Vec<u8>>,
1307    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1308    ///
1309    /// Required.
1310    pub frame_rates: Option<Vec<u32>>,
1311    #[doc(hidden)]
1312    pub __source_breaking: fidl::marker::SourceBreaking,
1313}
1314
1315impl fidl::Persistable for PcmSupportedFormats {}
1316
1317/// Plug state as returned by the driver.
1318/// If the driver reports a `plug_detect_capabilities` equal to HARDWIRED, then the driver should
1319/// respond to `WatchPlugState` only the first time it is called, with `plugged` set to true and
1320/// `plug_state_time` set to time '0'.
1321#[derive(Clone, Debug, Default, PartialEq)]
1322pub struct PlugState {
1323    /// Driver is currently plugged in. Required
1324    pub plugged: Option<bool>,
1325    /// Timestamps the information provided in the rest of the fields of this struct. Required.
1326    pub plug_state_time: Option<i64>,
1327    #[doc(hidden)]
1328    pub __source_breaking: fidl::marker::SourceBreaking,
1329}
1330
1331impl fidl::Persistable for PlugState {}
1332
1333/// Properties of the ring buffer. These values don't change once the ring buffer is created.
1334#[derive(Clone, Debug, Default, PartialEq)]
1335pub struct RingBufferProperties {
1336    /// When set to true, indicates that the ring buffer runs in a different cache coherency domain,
1337    /// and thus clients must ensure that their data writes are flushed all the way to main memory
1338    /// (during playback), or that their view of the ring buffer must be invalidated before any
1339    /// reads (during capture). This is because there may be hardware external to the CPUs that
1340    /// reads/writes main memory, bypassing the CPUs.
1341    ///
1342    /// When set to false, indicates that the ring buffer runs in the same cache coherency domain as
1343    /// the CPUs, hence the driver is not required to flush/invalidate the ring buffer.
1344    /// Note that in this case, the driver and client still must synchronize their data access, for
1345    /// instance by inserting the appropriate acquire fences before reading and releasing fences
1346    /// after writing, or (more commonly) by obeying the Producer/Consumer pattern described in
1347    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1348    ///
1349    /// Required.
1350    pub needs_cache_flush_or_invalidate: Option<bool>,
1351    /// The driver's best estimate of the time needed for the hardware to emit (during playback) or
1352    /// accept (during capture) frames, after a channel is activated by `SetActiveChannels`.
1353    ///
1354    /// The driver estimates that after `SetActiveChannels(channel)->(set_time)` enables a channel,
1355    /// its data will resume flowing at approximately `set_time` + `turn_on_delay`.
1356    /// Hardware can take time to become fully operational (e.g. due to a power state change, or
1357    /// communication delays between a Bluetooth driver's multiple hardware entities). The client
1358    /// must take this delay into account, if it is unacceptable to drop the actual audio frames
1359    /// and instead play/capture silence during this interval.
1360    /// If not included, `turn_on_delay` is unknown.
1361    ///
1362    /// Optional.
1363    pub turn_on_delay: Option<i64>,
1364    /// Size (in bytes) of the temporary buffers or FIFOs used by the driver when consuming or
1365    /// generating the ring buffer contents.
1366    ///
1367    /// The `driver_transfer_bytes` field is covered extensively in
1368    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1369    ///
1370    /// `driver_transfer_bytes` must not include the impact of delays caused by hardware or software
1371    /// processing abstracted by the driver. Those delays are communicated by `internal_delay` and
1372    /// `external_delay` fields in `DelayInfo`; they are orthogonal to this value.
1373    ///
1374    /// Required.
1375    pub driver_transfer_bytes: Option<u32>,
1376    #[doc(hidden)]
1377    pub __source_breaking: fidl::marker::SourceBreaking,
1378}
1379
1380impl fidl::Persistable for RingBufferProperties {}
1381
1382#[derive(Clone, Debug, Default, PartialEq)]
1383pub struct StreamProperties {
1384    /// A unique identifier. If not included, there is no unique id for this StreamConfig.
1385    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1386    ///
1387    /// Optional.
1388    pub unique_id: Option<[u8; 16]>,
1389    /// Driver type is input (true) or output (false)
1390    ///
1391    /// Required.
1392    pub is_input: Option<bool>,
1393    /// Gain mute capability. If not included, the StreamConfig can't mute.
1394    ///
1395    /// Optional.
1396    pub can_mute: Option<bool>,
1397    /// Automatic Gain Control (AGC) capability. If not included, the StreamConfig can't AGC.
1398    ///
1399    /// Optional.
1400    pub can_agc: Option<bool>,
1401    /// Minimum gain in decibels.
1402    ///
1403    /// Required.
1404    pub min_gain_db: Option<f32>,
1405    /// Maximum gain in decibels.
1406    ///
1407    /// Required.
1408    pub max_gain_db: Option<f32>,
1409    /// Gain step in decibels, this value must not be negative, but may be zero to convey an
1410    /// effectively continuous range of values. Must not exceed `max_gain_db` - `min_gain_db`.
1411    ///
1412    /// Required.
1413    pub gain_step_db: Option<f32>,
1414    /// Plug Detect Capabilities.
1415    ///
1416    /// Required.
1417    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1418    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1419    /// If included, this string must be non-empty.
1420    ///
1421    /// Optional.
1422    pub manufacturer: Option<String>,
1423    /// UI string for the product name. If not included, the product name is unspecified.
1424    /// If included, this string must be non-empty.
1425    ///
1426    /// Optional.
1427    pub product: Option<String>,
1428    /// An identifier for the clock domain in which this hardware operates. If
1429    /// two hardware devices have the same clock domain, their clock rates are
1430    /// identical and perfectly synchronized. Although these two clocks have the
1431    /// same rate, the clock positions may be offset from each other by an
1432    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1433    /// system wide entity, such as a platform bus or global clock tree.
1434    ///
1435    /// There are two special values:
1436    ///
1437    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1438    ///    rate as the system montonic clock.
1439    ///
1440    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1441    ///    rate and is not synchronized with any known clock, not even with
1442    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1443    ///
1444    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1445    /// notification updates to recover the hardware's clock.
1446    ///
1447    /// Required.
1448    pub clock_domain: Option<u32>,
1449    #[doc(hidden)]
1450    pub __source_breaking: fidl::marker::SourceBreaking,
1451}
1452
1453impl fidl::Persistable for StreamProperties {}
1454
1455/// Supported formats for encoded audio.
1456///
1457/// This table defines a valid set of configurations. All fields are independent, which
1458/// implies a cross-product: any listed `channel_set` is supported at any listed
1459/// `frame_rate` for any listed `encoded_type`.
1460///
1461/// If a device supports multiple encoders with *different* rate/channel constraints
1462/// (e.g. AAC supports 48kHz but SBC only supports 44.1kHz), the device must
1463/// report them as separate entries in the `SupportedFormats` vector.
1464#[derive(Clone, Debug, Default, PartialEq)]
1465pub struct SupportedEncodings {
1466    /// Vector of possible `ChannelSets` supported.
1467    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1468    /// of optional attributes.
1469    ///
1470    /// Each entry in this vector must describe a unique channel count. For example, this
1471    /// vector cannot contain two different `ChannelSet` entries that both apply to a
1472    /// 2-channel configuration.
1473    /// Values must be listed in ascending order of channel count.
1474    ///
1475    /// Required.
1476    pub decoded_channel_sets: Option<Vec<ChannelSet>>,
1477    /// Vector of possible frame rates supported.
1478    /// If present, must contain at least one value.
1479    /// Values must be listed in ascending order.
1480    ///
1481    /// Optional.
1482    pub decoded_frame_rates: Option<Vec<u32>>,
1483    /// The minimum encoding bitrate of the stream in bits per second.
1484    /// Cannot exceed 'max_encoding_bitrate', if both are present.
1485    ///
1486    /// Optional.
1487    pub min_encoding_bitrate: Option<u32>,
1488    /// The maximum encoding bitrate of the stream in bits per second.
1489    /// Cannot be less than 'min_encoding_bitrate', if both are present.
1490    ///
1491    /// Optional.
1492    pub max_encoding_bitrate: Option<u32>,
1493    /// The encoder types that support the configurations listed above.
1494    /// Must contain at least one value. Values in this vector must be unique.
1495    ///
1496    /// Required.
1497    pub encoding_types: Option<Vec<EncodingType>>,
1498    #[doc(hidden)]
1499    pub __source_breaking: fidl::marker::SourceBreaking,
1500}
1501
1502impl fidl::Persistable for SupportedEncodings {}
1503
1504/// Deprecated: Use `SupportedFormats2` instead.
1505#[derive(Clone, Debug, Default, PartialEq)]
1506pub struct SupportedFormats {
1507    pub pcm_supported_formats: Option<PcmSupportedFormats>,
1508    #[doc(hidden)]
1509    pub __source_breaking: fidl::marker::SourceBreaking,
1510}
1511
1512impl fidl::Persistable for SupportedFormats {}
1513
1514/// Either a standard or custom frame format.
1515#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1516pub enum DaiFrameFormat {
1517    /// The format type of all samples in the DAI, listed in `DaiFrameFormatStandard`.
1518    FrameFormatStandard(DaiFrameFormatStandard),
1519    /// The format type of all samples in the DAI, specified in `DaiFrameFormatCustom`.
1520    FrameFormatCustom(DaiFrameFormatCustom),
1521}
1522
1523impl DaiFrameFormat {
1524    #[inline]
1525    pub fn ordinal(&self) -> u64 {
1526        match *self {
1527            Self::FrameFormatStandard(_) => 1,
1528            Self::FrameFormatCustom(_) => 2,
1529        }
1530    }
1531}
1532
1533impl fidl::Persistable for DaiFrameFormat {}
1534
1535#[derive(Clone, Debug)]
1536pub enum Format2 {
1537    /// Format for linear PCM (uncompressed) samples.
1538    PcmFormat(PcmFormat),
1539    /// Format for encoded audio.
1540    Encoding(Encoding),
1541    #[doc(hidden)]
1542    __SourceBreaking { unknown_ordinal: u64 },
1543}
1544
1545/// Pattern that matches an unknown `Format2` member.
1546#[macro_export]
1547macro_rules! Format2Unknown {
1548    () => {
1549        _
1550    };
1551}
1552
1553// Custom PartialEq so that unknown variants are not equal to themselves.
1554impl PartialEq for Format2 {
1555    fn eq(&self, other: &Self) -> bool {
1556        match (self, other) {
1557            (Self::PcmFormat(x), Self::PcmFormat(y)) => *x == *y,
1558            (Self::Encoding(x), Self::Encoding(y)) => *x == *y,
1559            _ => false,
1560        }
1561    }
1562}
1563
1564impl Format2 {
1565    #[inline]
1566    pub fn ordinal(&self) -> u64 {
1567        match *self {
1568            Self::PcmFormat(_) => 1,
1569            Self::Encoding(_) => 2,
1570            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1571        }
1572    }
1573
1574    #[inline]
1575    pub fn unknown_variant_for_testing() -> Self {
1576        Self::__SourceBreaking { unknown_ordinal: 0 }
1577    }
1578
1579    #[inline]
1580    pub fn is_unknown(&self) -> bool {
1581        match self {
1582            Self::__SourceBreaking { .. } => true,
1583            _ => false,
1584        }
1585    }
1586}
1587
1588impl fidl::Persistable for Format2 {}
1589
1590/// All the possible formats supported by this device.
1591#[derive(Clone, Debug)]
1592pub enum SupportedFormats2 {
1593    /// Supported formats for linear PCM (uncompressed) samples, with attributes.
1594    PcmSupportedFormats(PcmSupportedFormats),
1595    /// Supported formats for non-LPCM encoded audio (e.g. AAC, MP3).
1596    SupportedEncodings(SupportedEncodings),
1597    #[doc(hidden)]
1598    __SourceBreaking { unknown_ordinal: u64 },
1599}
1600
1601/// Pattern that matches an unknown `SupportedFormats2` member.
1602#[macro_export]
1603macro_rules! SupportedFormats2Unknown {
1604    () => {
1605        _
1606    };
1607}
1608
1609// Custom PartialEq so that unknown variants are not equal to themselves.
1610impl PartialEq for SupportedFormats2 {
1611    fn eq(&self, other: &Self) -> bool {
1612        match (self, other) {
1613            (Self::PcmSupportedFormats(x), Self::PcmSupportedFormats(y)) => *x == *y,
1614            (Self::SupportedEncodings(x), Self::SupportedEncodings(y)) => *x == *y,
1615            _ => false,
1616        }
1617    }
1618}
1619
1620impl SupportedFormats2 {
1621    #[inline]
1622    pub fn ordinal(&self) -> u64 {
1623        match *self {
1624            Self::PcmSupportedFormats(_) => 1,
1625            Self::SupportedEncodings(_) => 2,
1626            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1627        }
1628    }
1629
1630    #[inline]
1631    pub fn unknown_variant_for_testing() -> Self {
1632        Self::__SourceBreaking { unknown_ordinal: 0 }
1633    }
1634
1635    #[inline]
1636    pub fn is_unknown(&self) -> bool {
1637        match self {
1638            Self::__SourceBreaking { .. } => true,
1639            _ => false,
1640        }
1641    }
1642}
1643
1644impl fidl::Persistable for SupportedFormats2 {}
1645
1646pub mod codec_ordinals {
1647    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1648    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1649    pub const RESET: u64 = 0x50757ae579a7bd6b;
1650    pub const GET_PROPERTIES: u64 = 0x7a0d138a6a1d9d90;
1651    pub const STOP: u64 = 0x5c2e380df1332dbd;
1652    pub const START: u64 = 0x329cdacb286ab00;
1653    pub const GET_DAI_FORMATS: u64 = 0xf8bbc46b4ba6a52;
1654    pub const SET_DAI_FORMAT: u64 = 0x2f829df9e5a7a1ea;
1655    pub const WATCH_PLUG_STATE: u64 = 0x182b87f935ca7326;
1656}
1657
1658pub mod codec_connector_ordinals {
1659    pub const CONNECT: u64 = 0x1413f551544026c9;
1660}
1661
1662pub mod composite_ordinals {
1663    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1664    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1665    pub const RESET: u64 = 0xac355fb98341996;
1666    pub const GET_PROPERTIES: u64 = 0x31846fa0a459942b;
1667    pub const GET_RING_BUFFER_FORMATS: u64 = 0x1d89b701b6816ac4;
1668    pub const CREATE_RING_BUFFER: u64 = 0x28c5685f85262033;
1669    pub const GET_DAI_FORMATS: u64 = 0x3cbeaed59c8f69b;
1670    pub const SET_DAI_FORMAT: u64 = 0x155acf5cc0dc8a84;
1671    pub const GET_PACKET_STREAM_FORMATS: u64 = 0x73cc47c6ad39bca7;
1672    pub const CREATE_PACKET_STREAM: u64 = 0x50e8902b756c707c;
1673}
1674
1675pub mod composite_connector_ordinals {
1676    pub const CONNECT: u64 = 0x7ee557529079e466;
1677}
1678
1679pub mod dai_ordinals {
1680    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1681    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1682    pub const RESET: u64 = 0x69e5fa9fa2f78c14;
1683    pub const GET_PROPERTIES: u64 = 0x2c25a1a66149510b;
1684    pub const GET_DAI_FORMATS: u64 = 0x1eb37b0cddf79d69;
1685    pub const GET_RING_BUFFER_FORMATS: u64 = 0x760371081d8c92e4;
1686    pub const CREATE_RING_BUFFER: u64 = 0x5af9760589a75257;
1687}
1688
1689pub mod dai_connector_ordinals {
1690    pub const CONNECT: u64 = 0x4e4db05c2eca1450;
1691}
1692
1693pub mod health_ordinals {
1694    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1695}
1696
1697pub mod packet_stream_control_ordinals {
1698    pub const GET_PROPERTIES: u64 = 0x586cf4f0f8d2771f;
1699    pub const ALLOCATE_VMOS: u64 = 0x7ff1473165ed344b;
1700    pub const DEALLOCATE_VMOS: u64 = 0x4db5cc85a7b8405b;
1701    pub const REGISTER_VMOS: u64 = 0x29c3b656a1020bfd;
1702    pub const UNREGISTER_VMOS: u64 = 0x3e3b4dbfe26b6094;
1703    pub const GET_PACKET_STREAM_SINK: u64 = 0x7394726463ebbc6a;
1704    pub const SET_PACKET_STREAM_SINK: u64 = 0xab88800e31dc0e4;
1705    pub const START: u64 = 0x3a584b94d8a6bfd0;
1706    pub const STOP: u64 = 0x703e4fafcdd7ef32;
1707}
1708
1709pub mod packet_stream_sink_ordinals {
1710    pub const PUT_PACKET: u64 = 0x25a8e35efba81f2b;
1711    pub const FLUSH_PACKETS: u64 = 0x13f16ca37ede8a4;
1712}
1713
1714pub mod ring_buffer_ordinals {
1715    pub const GET_PROPERTIES: u64 = 0x12947f061a8fe1;
1716    pub const WATCH_CLOCK_RECOVERY_POSITION_INFO: u64 = 0x694d5b898a4167e5;
1717    pub const GET_VMO: u64 = 0x44c8f4f5680e853a;
1718    pub const START: u64 = 0x5dd780a769a8892d;
1719    pub const STOP: u64 = 0x49a73d9cf1d4e110;
1720    pub const SET_ACTIVE_CHANNELS: u64 = 0x605464c1d384f309;
1721    pub const WATCH_DELAY_INFO: u64 = 0x6c1248db213fcf9f;
1722}
1723
1724pub mod stream_config_ordinals {
1725    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1726    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1727    pub const GET_PROPERTIES: u64 = 0x7d89c02f3e2d3c01;
1728    pub const GET_SUPPORTED_FORMATS: u64 = 0x448efa7850cafe7e;
1729    pub const CREATE_RING_BUFFER: u64 = 0x2afb19dd13faa1ba;
1730    pub const WATCH_GAIN_STATE: u64 = 0x4772506136ab65c1;
1731    pub const SET_GAIN: u64 = 0x3943b41498c6a384;
1732    pub const WATCH_PLUG_STATE: u64 = 0x497345a6f048b2a6;
1733}
1734
1735pub mod stream_config_connector_ordinals {
1736    pub const CONNECT: u64 = 0x22051ff3021eafec;
1737}
1738
1739mod internal {
1740    use super::*;
1741    unsafe impl fidl::encoding::TypeMarker for BufferType {
1742        type Owned = Self;
1743
1744        #[inline(always)]
1745        fn inline_align(_context: fidl::encoding::Context) -> usize {
1746            8
1747        }
1748
1749        #[inline(always)]
1750        fn inline_size(_context: fidl::encoding::Context) -> usize {
1751            8
1752        }
1753    }
1754
1755    impl fidl::encoding::ValueTypeMarker for BufferType {
1756        type Borrowed<'a> = Self;
1757        #[inline(always)]
1758        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1759            *value
1760        }
1761    }
1762
1763    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BufferType {
1764        #[inline]
1765        unsafe fn encode(
1766            self,
1767            encoder: &mut fidl::encoding::Encoder<'_, D>,
1768            offset: usize,
1769            _depth: fidl::encoding::Depth,
1770        ) -> fidl::Result<()> {
1771            encoder.debug_check_bounds::<Self>(offset);
1772            encoder.write_num(self.bits(), offset);
1773            Ok(())
1774        }
1775    }
1776
1777    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferType {
1778        #[inline(always)]
1779        fn new_empty() -> Self {
1780            Self::empty()
1781        }
1782
1783        #[inline]
1784        unsafe fn decode(
1785            &mut self,
1786            decoder: &mut fidl::encoding::Decoder<'_, D>,
1787            offset: usize,
1788            _depth: fidl::encoding::Depth,
1789        ) -> fidl::Result<()> {
1790            decoder.debug_check_bounds::<Self>(offset);
1791            let prim = decoder.read_num::<u64>(offset);
1792            *self = Self::from_bits_allow_unknown(prim);
1793            Ok(())
1794        }
1795    }
1796    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatStandard {
1797        type Owned = Self;
1798
1799        #[inline(always)]
1800        fn inline_align(_context: fidl::encoding::Context) -> usize {
1801            std::mem::align_of::<u8>()
1802        }
1803
1804        #[inline(always)]
1805        fn inline_size(_context: fidl::encoding::Context) -> usize {
1806            std::mem::size_of::<u8>()
1807        }
1808
1809        #[inline(always)]
1810        fn encode_is_copy() -> bool {
1811            true
1812        }
1813
1814        #[inline(always)]
1815        fn decode_is_copy() -> bool {
1816            false
1817        }
1818    }
1819
1820    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatStandard {
1821        type Borrowed<'a> = Self;
1822        #[inline(always)]
1823        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1824            *value
1825        }
1826    }
1827
1828    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1829        for DaiFrameFormatStandard
1830    {
1831        #[inline]
1832        unsafe fn encode(
1833            self,
1834            encoder: &mut fidl::encoding::Encoder<'_, D>,
1835            offset: usize,
1836            _depth: fidl::encoding::Depth,
1837        ) -> fidl::Result<()> {
1838            encoder.debug_check_bounds::<Self>(offset);
1839            encoder.write_num(self.into_primitive(), offset);
1840            Ok(())
1841        }
1842    }
1843
1844    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1845        for DaiFrameFormatStandard
1846    {
1847        #[inline(always)]
1848        fn new_empty() -> Self {
1849            Self::None
1850        }
1851
1852        #[inline]
1853        unsafe fn decode(
1854            &mut self,
1855            decoder: &mut fidl::encoding::Decoder<'_, D>,
1856            offset: usize,
1857            _depth: fidl::encoding::Depth,
1858        ) -> fidl::Result<()> {
1859            decoder.debug_check_bounds::<Self>(offset);
1860            let prim = decoder.read_num::<u8>(offset);
1861
1862            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1863            Ok(())
1864        }
1865    }
1866    unsafe impl fidl::encoding::TypeMarker for DaiSampleFormat {
1867        type Owned = Self;
1868
1869        #[inline(always)]
1870        fn inline_align(_context: fidl::encoding::Context) -> usize {
1871            std::mem::align_of::<u8>()
1872        }
1873
1874        #[inline(always)]
1875        fn inline_size(_context: fidl::encoding::Context) -> usize {
1876            std::mem::size_of::<u8>()
1877        }
1878
1879        #[inline(always)]
1880        fn encode_is_copy() -> bool {
1881            true
1882        }
1883
1884        #[inline(always)]
1885        fn decode_is_copy() -> bool {
1886            false
1887        }
1888    }
1889
1890    impl fidl::encoding::ValueTypeMarker for DaiSampleFormat {
1891        type Borrowed<'a> = Self;
1892        #[inline(always)]
1893        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1894            *value
1895        }
1896    }
1897
1898    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1899        for DaiSampleFormat
1900    {
1901        #[inline]
1902        unsafe fn encode(
1903            self,
1904            encoder: &mut fidl::encoding::Encoder<'_, D>,
1905            offset: usize,
1906            _depth: fidl::encoding::Depth,
1907        ) -> fidl::Result<()> {
1908            encoder.debug_check_bounds::<Self>(offset);
1909            encoder.write_num(self.into_primitive(), offset);
1910            Ok(())
1911        }
1912    }
1913
1914    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSampleFormat {
1915        #[inline(always)]
1916        fn new_empty() -> Self {
1917            Self::Pdm
1918        }
1919
1920        #[inline]
1921        unsafe fn decode(
1922            &mut self,
1923            decoder: &mut fidl::encoding::Decoder<'_, D>,
1924            offset: usize,
1925            _depth: fidl::encoding::Depth,
1926        ) -> fidl::Result<()> {
1927            decoder.debug_check_bounds::<Self>(offset);
1928            let prim = decoder.read_num::<u8>(offset);
1929
1930            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1931            Ok(())
1932        }
1933    }
1934    unsafe impl fidl::encoding::TypeMarker for DeviceType {
1935        type Owned = Self;
1936
1937        #[inline(always)]
1938        fn inline_align(_context: fidl::encoding::Context) -> usize {
1939            std::mem::align_of::<u32>()
1940        }
1941
1942        #[inline(always)]
1943        fn inline_size(_context: fidl::encoding::Context) -> usize {
1944            std::mem::size_of::<u32>()
1945        }
1946
1947        #[inline(always)]
1948        fn encode_is_copy() -> bool {
1949            false
1950        }
1951
1952        #[inline(always)]
1953        fn decode_is_copy() -> bool {
1954            false
1955        }
1956    }
1957
1958    impl fidl::encoding::ValueTypeMarker for DeviceType {
1959        type Borrowed<'a> = Self;
1960        #[inline(always)]
1961        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1962            *value
1963        }
1964    }
1965
1966    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
1967        #[inline]
1968        unsafe fn encode(
1969            self,
1970            encoder: &mut fidl::encoding::Encoder<'_, D>,
1971            offset: usize,
1972            _depth: fidl::encoding::Depth,
1973        ) -> fidl::Result<()> {
1974            encoder.debug_check_bounds::<Self>(offset);
1975            encoder.write_num(self.into_primitive(), offset);
1976            Ok(())
1977        }
1978    }
1979
1980    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
1981        #[inline(always)]
1982        fn new_empty() -> Self {
1983            Self::unknown()
1984        }
1985
1986        #[inline]
1987        unsafe fn decode(
1988            &mut self,
1989            decoder: &mut fidl::encoding::Decoder<'_, D>,
1990            offset: usize,
1991            _depth: fidl::encoding::Depth,
1992        ) -> fidl::Result<()> {
1993            decoder.debug_check_bounds::<Self>(offset);
1994            let prim = decoder.read_num::<u32>(offset);
1995
1996            *self = Self::from_primitive_allow_unknown(prim);
1997            Ok(())
1998        }
1999    }
2000    unsafe impl fidl::encoding::TypeMarker for DriverError {
2001        type Owned = Self;
2002
2003        #[inline(always)]
2004        fn inline_align(_context: fidl::encoding::Context) -> usize {
2005            std::mem::align_of::<u32>()
2006        }
2007
2008        #[inline(always)]
2009        fn inline_size(_context: fidl::encoding::Context) -> usize {
2010            std::mem::size_of::<u32>()
2011        }
2012
2013        #[inline(always)]
2014        fn encode_is_copy() -> bool {
2015            false
2016        }
2017
2018        #[inline(always)]
2019        fn decode_is_copy() -> bool {
2020            false
2021        }
2022    }
2023
2024    impl fidl::encoding::ValueTypeMarker for DriverError {
2025        type Borrowed<'a> = Self;
2026        #[inline(always)]
2027        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2028            *value
2029        }
2030    }
2031
2032    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DriverError {
2033        #[inline]
2034        unsafe fn encode(
2035            self,
2036            encoder: &mut fidl::encoding::Encoder<'_, D>,
2037            offset: usize,
2038            _depth: fidl::encoding::Depth,
2039        ) -> fidl::Result<()> {
2040            encoder.debug_check_bounds::<Self>(offset);
2041            encoder.write_num(self.into_primitive(), offset);
2042            Ok(())
2043        }
2044    }
2045
2046    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverError {
2047        #[inline(always)]
2048        fn new_empty() -> Self {
2049            Self::unknown()
2050        }
2051
2052        #[inline]
2053        unsafe fn decode(
2054            &mut self,
2055            decoder: &mut fidl::encoding::Decoder<'_, D>,
2056            offset: usize,
2057            _depth: fidl::encoding::Depth,
2058        ) -> fidl::Result<()> {
2059            decoder.debug_check_bounds::<Self>(offset);
2060            let prim = decoder.read_num::<u32>(offset);
2061
2062            *self = Self::from_primitive_allow_unknown(prim);
2063            Ok(())
2064        }
2065    }
2066    unsafe impl fidl::encoding::TypeMarker for EncodingType {
2067        type Owned = Self;
2068
2069        #[inline(always)]
2070        fn inline_align(_context: fidl::encoding::Context) -> usize {
2071            std::mem::align_of::<u32>()
2072        }
2073
2074        #[inline(always)]
2075        fn inline_size(_context: fidl::encoding::Context) -> usize {
2076            std::mem::size_of::<u32>()
2077        }
2078
2079        #[inline(always)]
2080        fn encode_is_copy() -> bool {
2081            false
2082        }
2083
2084        #[inline(always)]
2085        fn decode_is_copy() -> bool {
2086            false
2087        }
2088    }
2089
2090    impl fidl::encoding::ValueTypeMarker for EncodingType {
2091        type Borrowed<'a> = Self;
2092        #[inline(always)]
2093        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2094            *value
2095        }
2096    }
2097
2098    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EncodingType {
2099        #[inline]
2100        unsafe fn encode(
2101            self,
2102            encoder: &mut fidl::encoding::Encoder<'_, D>,
2103            offset: usize,
2104            _depth: fidl::encoding::Depth,
2105        ) -> fidl::Result<()> {
2106            encoder.debug_check_bounds::<Self>(offset);
2107            encoder.write_num(self.into_primitive(), offset);
2108            Ok(())
2109        }
2110    }
2111
2112    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncodingType {
2113        #[inline(always)]
2114        fn new_empty() -> Self {
2115            Self::unknown()
2116        }
2117
2118        #[inline]
2119        unsafe fn decode(
2120            &mut self,
2121            decoder: &mut fidl::encoding::Decoder<'_, D>,
2122            offset: usize,
2123            _depth: fidl::encoding::Depth,
2124        ) -> fidl::Result<()> {
2125            decoder.debug_check_bounds::<Self>(offset);
2126            let prim = decoder.read_num::<u32>(offset);
2127
2128            *self = Self::from_primitive_allow_unknown(prim);
2129            Ok(())
2130        }
2131    }
2132    unsafe impl fidl::encoding::TypeMarker for GetVmoError {
2133        type Owned = Self;
2134
2135        #[inline(always)]
2136        fn inline_align(_context: fidl::encoding::Context) -> usize {
2137            std::mem::align_of::<u32>()
2138        }
2139
2140        #[inline(always)]
2141        fn inline_size(_context: fidl::encoding::Context) -> usize {
2142            std::mem::size_of::<u32>()
2143        }
2144
2145        #[inline(always)]
2146        fn encode_is_copy() -> bool {
2147            true
2148        }
2149
2150        #[inline(always)]
2151        fn decode_is_copy() -> bool {
2152            false
2153        }
2154    }
2155
2156    impl fidl::encoding::ValueTypeMarker for GetVmoError {
2157        type Borrowed<'a> = Self;
2158        #[inline(always)]
2159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2160            *value
2161        }
2162    }
2163
2164    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GetVmoError {
2165        #[inline]
2166        unsafe fn encode(
2167            self,
2168            encoder: &mut fidl::encoding::Encoder<'_, D>,
2169            offset: usize,
2170            _depth: fidl::encoding::Depth,
2171        ) -> fidl::Result<()> {
2172            encoder.debug_check_bounds::<Self>(offset);
2173            encoder.write_num(self.into_primitive(), offset);
2174            Ok(())
2175        }
2176    }
2177
2178    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetVmoError {
2179        #[inline(always)]
2180        fn new_empty() -> Self {
2181            Self::InvalidArgs
2182        }
2183
2184        #[inline]
2185        unsafe fn decode(
2186            &mut self,
2187            decoder: &mut fidl::encoding::Decoder<'_, D>,
2188            offset: usize,
2189            _depth: fidl::encoding::Depth,
2190        ) -> fidl::Result<()> {
2191            decoder.debug_check_bounds::<Self>(offset);
2192            let prim = decoder.read_num::<u32>(offset);
2193
2194            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2195            Ok(())
2196        }
2197    }
2198    unsafe impl fidl::encoding::TypeMarker for PlugDetectCapabilities {
2199        type Owned = Self;
2200
2201        #[inline(always)]
2202        fn inline_align(_context: fidl::encoding::Context) -> usize {
2203            std::mem::align_of::<u32>()
2204        }
2205
2206        #[inline(always)]
2207        fn inline_size(_context: fidl::encoding::Context) -> usize {
2208            std::mem::size_of::<u32>()
2209        }
2210
2211        #[inline(always)]
2212        fn encode_is_copy() -> bool {
2213            true
2214        }
2215
2216        #[inline(always)]
2217        fn decode_is_copy() -> bool {
2218            false
2219        }
2220    }
2221
2222    impl fidl::encoding::ValueTypeMarker for PlugDetectCapabilities {
2223        type Borrowed<'a> = Self;
2224        #[inline(always)]
2225        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2226            *value
2227        }
2228    }
2229
2230    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2231        for PlugDetectCapabilities
2232    {
2233        #[inline]
2234        unsafe fn encode(
2235            self,
2236            encoder: &mut fidl::encoding::Encoder<'_, D>,
2237            offset: usize,
2238            _depth: fidl::encoding::Depth,
2239        ) -> fidl::Result<()> {
2240            encoder.debug_check_bounds::<Self>(offset);
2241            encoder.write_num(self.into_primitive(), offset);
2242            Ok(())
2243        }
2244    }
2245
2246    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2247        for PlugDetectCapabilities
2248    {
2249        #[inline(always)]
2250        fn new_empty() -> Self {
2251            Self::Hardwired
2252        }
2253
2254        #[inline]
2255        unsafe fn decode(
2256            &mut self,
2257            decoder: &mut fidl::encoding::Decoder<'_, D>,
2258            offset: usize,
2259            _depth: fidl::encoding::Depth,
2260        ) -> fidl::Result<()> {
2261            decoder.debug_check_bounds::<Self>(offset);
2262            let prim = decoder.read_num::<u32>(offset);
2263
2264            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2265            Ok(())
2266        }
2267    }
2268    unsafe impl fidl::encoding::TypeMarker for SampleFormat {
2269        type Owned = Self;
2270
2271        #[inline(always)]
2272        fn inline_align(_context: fidl::encoding::Context) -> usize {
2273            std::mem::align_of::<u8>()
2274        }
2275
2276        #[inline(always)]
2277        fn inline_size(_context: fidl::encoding::Context) -> usize {
2278            std::mem::size_of::<u8>()
2279        }
2280
2281        #[inline(always)]
2282        fn encode_is_copy() -> bool {
2283            true
2284        }
2285
2286        #[inline(always)]
2287        fn decode_is_copy() -> bool {
2288            false
2289        }
2290    }
2291
2292    impl fidl::encoding::ValueTypeMarker for SampleFormat {
2293        type Borrowed<'a> = Self;
2294        #[inline(always)]
2295        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2296            *value
2297        }
2298    }
2299
2300    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleFormat {
2301        #[inline]
2302        unsafe fn encode(
2303            self,
2304            encoder: &mut fidl::encoding::Encoder<'_, D>,
2305            offset: usize,
2306            _depth: fidl::encoding::Depth,
2307        ) -> fidl::Result<()> {
2308            encoder.debug_check_bounds::<Self>(offset);
2309            encoder.write_num(self.into_primitive(), offset);
2310            Ok(())
2311        }
2312    }
2313
2314    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleFormat {
2315        #[inline(always)]
2316        fn new_empty() -> Self {
2317            Self::PcmSigned
2318        }
2319
2320        #[inline]
2321        unsafe fn decode(
2322            &mut self,
2323            decoder: &mut fidl::encoding::Decoder<'_, D>,
2324            offset: usize,
2325            _depth: fidl::encoding::Depth,
2326        ) -> fidl::Result<()> {
2327            decoder.debug_check_bounds::<Self>(offset);
2328            let prim = decoder.read_num::<u8>(offset);
2329
2330            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2331            Ok(())
2332        }
2333    }
2334    unsafe impl fidl::encoding::TypeMarker for SingularUniqueId {
2335        type Owned = Self;
2336
2337        #[inline(always)]
2338        fn inline_align(_context: fidl::encoding::Context) -> usize {
2339            std::mem::align_of::<u8>()
2340        }
2341
2342        #[inline(always)]
2343        fn inline_size(_context: fidl::encoding::Context) -> usize {
2344            std::mem::size_of::<u8>()
2345        }
2346
2347        #[inline(always)]
2348        fn encode_is_copy() -> bool {
2349            false
2350        }
2351
2352        #[inline(always)]
2353        fn decode_is_copy() -> bool {
2354            false
2355        }
2356    }
2357
2358    impl fidl::encoding::ValueTypeMarker for SingularUniqueId {
2359        type Borrowed<'a> = Self;
2360        #[inline(always)]
2361        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2362            *value
2363        }
2364    }
2365
2366    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2367        for SingularUniqueId
2368    {
2369        #[inline]
2370        unsafe fn encode(
2371            self,
2372            encoder: &mut fidl::encoding::Encoder<'_, D>,
2373            offset: usize,
2374            _depth: fidl::encoding::Depth,
2375        ) -> fidl::Result<()> {
2376            encoder.debug_check_bounds::<Self>(offset);
2377            encoder.write_num(self.into_primitive(), offset);
2378            Ok(())
2379        }
2380    }
2381
2382    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SingularUniqueId {
2383        #[inline(always)]
2384        fn new_empty() -> Self {
2385            Self::unknown()
2386        }
2387
2388        #[inline]
2389        unsafe fn decode(
2390            &mut self,
2391            decoder: &mut fidl::encoding::Decoder<'_, D>,
2392            offset: usize,
2393            _depth: fidl::encoding::Depth,
2394        ) -> fidl::Result<()> {
2395            decoder.debug_check_bounds::<Self>(offset);
2396            let prim = decoder.read_num::<u8>(offset);
2397
2398            *self = Self::from_primitive_allow_unknown(prim);
2399            Ok(())
2400        }
2401    }
2402
2403    impl fidl::encoding::ValueTypeMarker for CodecGetPropertiesResponse {
2404        type Borrowed<'a> = &'a Self;
2405        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2406            value
2407        }
2408    }
2409
2410    unsafe impl fidl::encoding::TypeMarker for CodecGetPropertiesResponse {
2411        type Owned = Self;
2412
2413        #[inline(always)]
2414        fn inline_align(_context: fidl::encoding::Context) -> usize {
2415            8
2416        }
2417
2418        #[inline(always)]
2419        fn inline_size(_context: fidl::encoding::Context) -> usize {
2420            16
2421        }
2422    }
2423
2424    unsafe impl<D: fidl::encoding::ResourceDialect>
2425        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for &CodecGetPropertiesResponse
2426    {
2427        #[inline]
2428        unsafe fn encode(
2429            self,
2430            encoder: &mut fidl::encoding::Encoder<'_, D>,
2431            offset: usize,
2432            _depth: fidl::encoding::Depth,
2433        ) -> fidl::Result<()> {
2434            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2435            // Delegate to tuple encoding.
2436            fidl::encoding::Encode::<CodecGetPropertiesResponse, D>::encode(
2437                (<CodecProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
2438                encoder,
2439                offset,
2440                _depth,
2441            )
2442        }
2443    }
2444    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecProperties, D>>
2445        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for (T0,)
2446    {
2447        #[inline]
2448        unsafe fn encode(
2449            self,
2450            encoder: &mut fidl::encoding::Encoder<'_, D>,
2451            offset: usize,
2452            depth: fidl::encoding::Depth,
2453        ) -> fidl::Result<()> {
2454            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2455            // Zero out padding regions. There's no need to apply masks
2456            // because the unmasked parts will be overwritten by fields.
2457            // Write the fields.
2458            self.0.encode(encoder, offset + 0, depth)?;
2459            Ok(())
2460        }
2461    }
2462
2463    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2464        for CodecGetPropertiesResponse
2465    {
2466        #[inline(always)]
2467        fn new_empty() -> Self {
2468            Self { properties: fidl::new_empty!(CodecProperties, D) }
2469        }
2470
2471        #[inline]
2472        unsafe fn decode(
2473            &mut self,
2474            decoder: &mut fidl::encoding::Decoder<'_, D>,
2475            offset: usize,
2476            _depth: fidl::encoding::Depth,
2477        ) -> fidl::Result<()> {
2478            decoder.debug_check_bounds::<Self>(offset);
2479            // Verify that padding bytes are zero.
2480            fidl::decode!(CodecProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
2481            Ok(())
2482        }
2483    }
2484
2485    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatRequest {
2486        type Borrowed<'a> = &'a Self;
2487        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2488            value
2489        }
2490    }
2491
2492    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatRequest {
2493        type Owned = Self;
2494
2495        #[inline(always)]
2496        fn inline_align(_context: fidl::encoding::Context) -> usize {
2497            8
2498        }
2499
2500        #[inline(always)]
2501        fn inline_size(_context: fidl::encoding::Context) -> usize {
2502            48
2503        }
2504    }
2505
2506    unsafe impl<D: fidl::encoding::ResourceDialect>
2507        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for &CodecSetDaiFormatRequest
2508    {
2509        #[inline]
2510        unsafe fn encode(
2511            self,
2512            encoder: &mut fidl::encoding::Encoder<'_, D>,
2513            offset: usize,
2514            _depth: fidl::encoding::Depth,
2515        ) -> fidl::Result<()> {
2516            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2517            // Delegate to tuple encoding.
2518            fidl::encoding::Encode::<CodecSetDaiFormatRequest, D>::encode(
2519                (<DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),),
2520                encoder,
2521                offset,
2522                _depth,
2523            )
2524        }
2525    }
2526    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiFormat, D>>
2527        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for (T0,)
2528    {
2529        #[inline]
2530        unsafe fn encode(
2531            self,
2532            encoder: &mut fidl::encoding::Encoder<'_, D>,
2533            offset: usize,
2534            depth: fidl::encoding::Depth,
2535        ) -> fidl::Result<()> {
2536            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2537            // Zero out padding regions. There's no need to apply masks
2538            // because the unmasked parts will be overwritten by fields.
2539            // Write the fields.
2540            self.0.encode(encoder, offset + 0, depth)?;
2541            Ok(())
2542        }
2543    }
2544
2545    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2546        for CodecSetDaiFormatRequest
2547    {
2548        #[inline(always)]
2549        fn new_empty() -> Self {
2550            Self { format: fidl::new_empty!(DaiFormat, D) }
2551        }
2552
2553        #[inline]
2554        unsafe fn decode(
2555            &mut self,
2556            decoder: &mut fidl::encoding::Decoder<'_, D>,
2557            offset: usize,
2558            _depth: fidl::encoding::Depth,
2559        ) -> fidl::Result<()> {
2560            decoder.debug_check_bounds::<Self>(offset);
2561            // Verify that padding bytes are zero.
2562            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 0, _depth)?;
2563            Ok(())
2564        }
2565    }
2566
2567    impl fidl::encoding::ValueTypeMarker for CodecStartResponse {
2568        type Borrowed<'a> = &'a Self;
2569        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2570            value
2571        }
2572    }
2573
2574    unsafe impl fidl::encoding::TypeMarker for CodecStartResponse {
2575        type Owned = Self;
2576
2577        #[inline(always)]
2578        fn inline_align(_context: fidl::encoding::Context) -> usize {
2579            8
2580        }
2581
2582        #[inline(always)]
2583        fn inline_size(_context: fidl::encoding::Context) -> usize {
2584            8
2585        }
2586        #[inline(always)]
2587        fn encode_is_copy() -> bool {
2588            true
2589        }
2590
2591        #[inline(always)]
2592        fn decode_is_copy() -> bool {
2593            true
2594        }
2595    }
2596
2597    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStartResponse, D>
2598        for &CodecStartResponse
2599    {
2600        #[inline]
2601        unsafe fn encode(
2602            self,
2603            encoder: &mut fidl::encoding::Encoder<'_, D>,
2604            offset: usize,
2605            _depth: fidl::encoding::Depth,
2606        ) -> fidl::Result<()> {
2607            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2608            unsafe {
2609                // Copy the object into the buffer.
2610                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2611                (buf_ptr as *mut CodecStartResponse)
2612                    .write_unaligned((self as *const CodecStartResponse).read());
2613                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2614                // done second because the memcpy will write garbage to these bytes.
2615            }
2616            Ok(())
2617        }
2618    }
2619    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2620        fidl::encoding::Encode<CodecStartResponse, D> for (T0,)
2621    {
2622        #[inline]
2623        unsafe fn encode(
2624            self,
2625            encoder: &mut fidl::encoding::Encoder<'_, D>,
2626            offset: usize,
2627            depth: fidl::encoding::Depth,
2628        ) -> fidl::Result<()> {
2629            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2630            // Zero out padding regions. There's no need to apply masks
2631            // because the unmasked parts will be overwritten by fields.
2632            // Write the fields.
2633            self.0.encode(encoder, offset + 0, depth)?;
2634            Ok(())
2635        }
2636    }
2637
2638    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStartResponse {
2639        #[inline(always)]
2640        fn new_empty() -> Self {
2641            Self { start_time: fidl::new_empty!(i64, D) }
2642        }
2643
2644        #[inline]
2645        unsafe fn decode(
2646            &mut self,
2647            decoder: &mut fidl::encoding::Decoder<'_, D>,
2648            offset: usize,
2649            _depth: fidl::encoding::Depth,
2650        ) -> fidl::Result<()> {
2651            decoder.debug_check_bounds::<Self>(offset);
2652            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2653            // Verify that padding bytes are zero.
2654            // Copy from the buffer into the object.
2655            unsafe {
2656                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2657            }
2658            Ok(())
2659        }
2660    }
2661
2662    impl fidl::encoding::ValueTypeMarker for CodecStopResponse {
2663        type Borrowed<'a> = &'a Self;
2664        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2665            value
2666        }
2667    }
2668
2669    unsafe impl fidl::encoding::TypeMarker for CodecStopResponse {
2670        type Owned = Self;
2671
2672        #[inline(always)]
2673        fn inline_align(_context: fidl::encoding::Context) -> usize {
2674            8
2675        }
2676
2677        #[inline(always)]
2678        fn inline_size(_context: fidl::encoding::Context) -> usize {
2679            8
2680        }
2681        #[inline(always)]
2682        fn encode_is_copy() -> bool {
2683            true
2684        }
2685
2686        #[inline(always)]
2687        fn decode_is_copy() -> bool {
2688            true
2689        }
2690    }
2691
2692    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStopResponse, D>
2693        for &CodecStopResponse
2694    {
2695        #[inline]
2696        unsafe fn encode(
2697            self,
2698            encoder: &mut fidl::encoding::Encoder<'_, D>,
2699            offset: usize,
2700            _depth: fidl::encoding::Depth,
2701        ) -> fidl::Result<()> {
2702            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2703            unsafe {
2704                // Copy the object into the buffer.
2705                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2706                (buf_ptr as *mut CodecStopResponse)
2707                    .write_unaligned((self as *const CodecStopResponse).read());
2708                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2709                // done second because the memcpy will write garbage to these bytes.
2710            }
2711            Ok(())
2712        }
2713    }
2714    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2715        fidl::encoding::Encode<CodecStopResponse, D> for (T0,)
2716    {
2717        #[inline]
2718        unsafe fn encode(
2719            self,
2720            encoder: &mut fidl::encoding::Encoder<'_, D>,
2721            offset: usize,
2722            depth: fidl::encoding::Depth,
2723        ) -> fidl::Result<()> {
2724            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2725            // Zero out padding regions. There's no need to apply masks
2726            // because the unmasked parts will be overwritten by fields.
2727            // Write the fields.
2728            self.0.encode(encoder, offset + 0, depth)?;
2729            Ok(())
2730        }
2731    }
2732
2733    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStopResponse {
2734        #[inline(always)]
2735        fn new_empty() -> Self {
2736            Self { stop_time: fidl::new_empty!(i64, D) }
2737        }
2738
2739        #[inline]
2740        unsafe fn decode(
2741            &mut self,
2742            decoder: &mut fidl::encoding::Decoder<'_, D>,
2743            offset: usize,
2744            _depth: fidl::encoding::Depth,
2745        ) -> fidl::Result<()> {
2746            decoder.debug_check_bounds::<Self>(offset);
2747            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2748            // Verify that padding bytes are zero.
2749            // Copy from the buffer into the object.
2750            unsafe {
2751                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2752            }
2753            Ok(())
2754        }
2755    }
2756
2757    impl fidl::encoding::ValueTypeMarker for CodecWatchPlugStateResponse {
2758        type Borrowed<'a> = &'a Self;
2759        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2760            value
2761        }
2762    }
2763
2764    unsafe impl fidl::encoding::TypeMarker for CodecWatchPlugStateResponse {
2765        type Owned = Self;
2766
2767        #[inline(always)]
2768        fn inline_align(_context: fidl::encoding::Context) -> usize {
2769            8
2770        }
2771
2772        #[inline(always)]
2773        fn inline_size(_context: fidl::encoding::Context) -> usize {
2774            16
2775        }
2776    }
2777
2778    unsafe impl<D: fidl::encoding::ResourceDialect>
2779        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for &CodecWatchPlugStateResponse
2780    {
2781        #[inline]
2782        unsafe fn encode(
2783            self,
2784            encoder: &mut fidl::encoding::Encoder<'_, D>,
2785            offset: usize,
2786            _depth: fidl::encoding::Depth,
2787        ) -> fidl::Result<()> {
2788            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2789            // Delegate to tuple encoding.
2790            fidl::encoding::Encode::<CodecWatchPlugStateResponse, D>::encode(
2791                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
2792                encoder,
2793                offset,
2794                _depth,
2795            )
2796        }
2797    }
2798    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
2799        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for (T0,)
2800    {
2801        #[inline]
2802        unsafe fn encode(
2803            self,
2804            encoder: &mut fidl::encoding::Encoder<'_, D>,
2805            offset: usize,
2806            depth: fidl::encoding::Depth,
2807        ) -> fidl::Result<()> {
2808            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2809            // Zero out padding regions. There's no need to apply masks
2810            // because the unmasked parts will be overwritten by fields.
2811            // Write the fields.
2812            self.0.encode(encoder, offset + 0, depth)?;
2813            Ok(())
2814        }
2815    }
2816
2817    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2818        for CodecWatchPlugStateResponse
2819    {
2820        #[inline(always)]
2821        fn new_empty() -> Self {
2822            Self { plug_state: fidl::new_empty!(PlugState, D) }
2823        }
2824
2825        #[inline]
2826        unsafe fn decode(
2827            &mut self,
2828            decoder: &mut fidl::encoding::Decoder<'_, D>,
2829            offset: usize,
2830            _depth: fidl::encoding::Depth,
2831        ) -> fidl::Result<()> {
2832            decoder.debug_check_bounds::<Self>(offset);
2833            // Verify that padding bytes are zero.
2834            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
2835            Ok(())
2836        }
2837    }
2838
2839    impl fidl::encoding::ValueTypeMarker for CodecGetDaiFormatsResponse {
2840        type Borrowed<'a> = &'a Self;
2841        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2842            value
2843        }
2844    }
2845
2846    unsafe impl fidl::encoding::TypeMarker for CodecGetDaiFormatsResponse {
2847        type Owned = Self;
2848
2849        #[inline(always)]
2850        fn inline_align(_context: fidl::encoding::Context) -> usize {
2851            8
2852        }
2853
2854        #[inline(always)]
2855        fn inline_size(_context: fidl::encoding::Context) -> usize {
2856            16
2857        }
2858    }
2859
2860    unsafe impl<D: fidl::encoding::ResourceDialect>
2861        fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for &CodecGetDaiFormatsResponse
2862    {
2863        #[inline]
2864        unsafe fn encode(
2865            self,
2866            encoder: &mut fidl::encoding::Encoder<'_, D>,
2867            offset: usize,
2868            _depth: fidl::encoding::Depth,
2869        ) -> fidl::Result<()> {
2870            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2871            // Delegate to tuple encoding.
2872            fidl::encoding::Encode::<CodecGetDaiFormatsResponse, D>::encode(
2873                (
2874                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.formats),
2875                ),
2876                encoder, offset, _depth
2877            )
2878        }
2879    }
2880    unsafe impl<
2881        D: fidl::encoding::ResourceDialect,
2882        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2883    > fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for (T0,)
2884    {
2885        #[inline]
2886        unsafe fn encode(
2887            self,
2888            encoder: &mut fidl::encoding::Encoder<'_, D>,
2889            offset: usize,
2890            depth: fidl::encoding::Depth,
2891        ) -> fidl::Result<()> {
2892            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2893            // Zero out padding regions. There's no need to apply masks
2894            // because the unmasked parts will be overwritten by fields.
2895            // Write the fields.
2896            self.0.encode(encoder, offset + 0, depth)?;
2897            Ok(())
2898        }
2899    }
2900
2901    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2902        for CodecGetDaiFormatsResponse
2903    {
2904        #[inline(always)]
2905        fn new_empty() -> Self {
2906            Self { formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D) }
2907        }
2908
2909        #[inline]
2910        unsafe fn decode(
2911            &mut self,
2912            decoder: &mut fidl::encoding::Decoder<'_, D>,
2913            offset: usize,
2914            _depth: fidl::encoding::Depth,
2915        ) -> fidl::Result<()> {
2916            decoder.debug_check_bounds::<Self>(offset);
2917            // Verify that padding bytes are zero.
2918            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.formats, decoder, offset + 0, _depth)?;
2919            Ok(())
2920        }
2921    }
2922
2923    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatResponse {
2924        type Borrowed<'a> = &'a Self;
2925        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2926            value
2927        }
2928    }
2929
2930    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatResponse {
2931        type Owned = Self;
2932
2933        #[inline(always)]
2934        fn inline_align(_context: fidl::encoding::Context) -> usize {
2935            8
2936        }
2937
2938        #[inline(always)]
2939        fn inline_size(_context: fidl::encoding::Context) -> usize {
2940            16
2941        }
2942    }
2943
2944    unsafe impl<D: fidl::encoding::ResourceDialect>
2945        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for &CodecSetDaiFormatResponse
2946    {
2947        #[inline]
2948        unsafe fn encode(
2949            self,
2950            encoder: &mut fidl::encoding::Encoder<'_, D>,
2951            offset: usize,
2952            _depth: fidl::encoding::Depth,
2953        ) -> fidl::Result<()> {
2954            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2955            // Delegate to tuple encoding.
2956            fidl::encoding::Encode::<CodecSetDaiFormatResponse, D>::encode(
2957                (<CodecFormatInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
2958                encoder,
2959                offset,
2960                _depth,
2961            )
2962        }
2963    }
2964    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecFormatInfo, D>>
2965        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for (T0,)
2966    {
2967        #[inline]
2968        unsafe fn encode(
2969            self,
2970            encoder: &mut fidl::encoding::Encoder<'_, D>,
2971            offset: usize,
2972            depth: fidl::encoding::Depth,
2973        ) -> fidl::Result<()> {
2974            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2975            // Zero out padding regions. There's no need to apply masks
2976            // because the unmasked parts will be overwritten by fields.
2977            // Write the fields.
2978            self.0.encode(encoder, offset + 0, depth)?;
2979            Ok(())
2980        }
2981    }
2982
2983    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2984        for CodecSetDaiFormatResponse
2985    {
2986        #[inline(always)]
2987        fn new_empty() -> Self {
2988            Self { state: fidl::new_empty!(CodecFormatInfo, D) }
2989        }
2990
2991        #[inline]
2992        unsafe fn decode(
2993            &mut self,
2994            decoder: &mut fidl::encoding::Decoder<'_, D>,
2995            offset: usize,
2996            _depth: fidl::encoding::Depth,
2997        ) -> fidl::Result<()> {
2998            decoder.debug_check_bounds::<Self>(offset);
2999            // Verify that padding bytes are zero.
3000            fidl::decode!(CodecFormatInfo, D, &mut self.state, decoder, offset + 0, _depth)?;
3001            Ok(())
3002        }
3003    }
3004
3005    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsRequest {
3006        type Borrowed<'a> = &'a Self;
3007        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3008            value
3009        }
3010    }
3011
3012    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsRequest {
3013        type Owned = Self;
3014
3015        #[inline(always)]
3016        fn inline_align(_context: fidl::encoding::Context) -> usize {
3017            8
3018        }
3019
3020        #[inline(always)]
3021        fn inline_size(_context: fidl::encoding::Context) -> usize {
3022            8
3023        }
3024        #[inline(always)]
3025        fn encode_is_copy() -> bool {
3026            true
3027        }
3028
3029        #[inline(always)]
3030        fn decode_is_copy() -> bool {
3031            true
3032        }
3033    }
3034
3035    unsafe impl<D: fidl::encoding::ResourceDialect>
3036        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D>
3037        for &CompositeGetDaiFormatsRequest
3038    {
3039        #[inline]
3040        unsafe fn encode(
3041            self,
3042            encoder: &mut fidl::encoding::Encoder<'_, D>,
3043            offset: usize,
3044            _depth: fidl::encoding::Depth,
3045        ) -> fidl::Result<()> {
3046            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3047            unsafe {
3048                // Copy the object into the buffer.
3049                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3050                (buf_ptr as *mut CompositeGetDaiFormatsRequest)
3051                    .write_unaligned((self as *const CompositeGetDaiFormatsRequest).read());
3052                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3053                // done second because the memcpy will write garbage to these bytes.
3054            }
3055            Ok(())
3056        }
3057    }
3058    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3059        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D> for (T0,)
3060    {
3061        #[inline]
3062        unsafe fn encode(
3063            self,
3064            encoder: &mut fidl::encoding::Encoder<'_, D>,
3065            offset: usize,
3066            depth: fidl::encoding::Depth,
3067        ) -> fidl::Result<()> {
3068            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3069            // Zero out padding regions. There's no need to apply masks
3070            // because the unmasked parts will be overwritten by fields.
3071            // Write the fields.
3072            self.0.encode(encoder, offset + 0, depth)?;
3073            Ok(())
3074        }
3075    }
3076
3077    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3078        for CompositeGetDaiFormatsRequest
3079    {
3080        #[inline(always)]
3081        fn new_empty() -> Self {
3082            Self { processing_element_id: fidl::new_empty!(u64, D) }
3083        }
3084
3085        #[inline]
3086        unsafe fn decode(
3087            &mut self,
3088            decoder: &mut fidl::encoding::Decoder<'_, D>,
3089            offset: usize,
3090            _depth: fidl::encoding::Depth,
3091        ) -> fidl::Result<()> {
3092            decoder.debug_check_bounds::<Self>(offset);
3093            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3094            // Verify that padding bytes are zero.
3095            // Copy from the buffer into the object.
3096            unsafe {
3097                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3098            }
3099            Ok(())
3100        }
3101    }
3102
3103    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsRequest {
3104        type Borrowed<'a> = &'a Self;
3105        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3106            value
3107        }
3108    }
3109
3110    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsRequest {
3111        type Owned = Self;
3112
3113        #[inline(always)]
3114        fn inline_align(_context: fidl::encoding::Context) -> usize {
3115            8
3116        }
3117
3118        #[inline(always)]
3119        fn inline_size(_context: fidl::encoding::Context) -> usize {
3120            8
3121        }
3122        #[inline(always)]
3123        fn encode_is_copy() -> bool {
3124            true
3125        }
3126
3127        #[inline(always)]
3128        fn decode_is_copy() -> bool {
3129            true
3130        }
3131    }
3132
3133    unsafe impl<D: fidl::encoding::ResourceDialect>
3134        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D>
3135        for &CompositeGetPacketStreamFormatsRequest
3136    {
3137        #[inline]
3138        unsafe fn encode(
3139            self,
3140            encoder: &mut fidl::encoding::Encoder<'_, D>,
3141            offset: usize,
3142            _depth: fidl::encoding::Depth,
3143        ) -> fidl::Result<()> {
3144            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3145            unsafe {
3146                // Copy the object into the buffer.
3147                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3148                (buf_ptr as *mut CompositeGetPacketStreamFormatsRequest).write_unaligned(
3149                    (self as *const CompositeGetPacketStreamFormatsRequest).read(),
3150                );
3151                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3152                // done second because the memcpy will write garbage to these bytes.
3153            }
3154            Ok(())
3155        }
3156    }
3157    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3158        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D> for (T0,)
3159    {
3160        #[inline]
3161        unsafe fn encode(
3162            self,
3163            encoder: &mut fidl::encoding::Encoder<'_, D>,
3164            offset: usize,
3165            depth: fidl::encoding::Depth,
3166        ) -> fidl::Result<()> {
3167            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3168            // Zero out padding regions. There's no need to apply masks
3169            // because the unmasked parts will be overwritten by fields.
3170            // Write the fields.
3171            self.0.encode(encoder, offset + 0, depth)?;
3172            Ok(())
3173        }
3174    }
3175
3176    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3177        for CompositeGetPacketStreamFormatsRequest
3178    {
3179        #[inline(always)]
3180        fn new_empty() -> Self {
3181            Self { processing_element_id: fidl::new_empty!(u64, D) }
3182        }
3183
3184        #[inline]
3185        unsafe fn decode(
3186            &mut self,
3187            decoder: &mut fidl::encoding::Decoder<'_, D>,
3188            offset: usize,
3189            _depth: fidl::encoding::Depth,
3190        ) -> fidl::Result<()> {
3191            decoder.debug_check_bounds::<Self>(offset);
3192            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3193            // Verify that padding bytes are zero.
3194            // Copy from the buffer into the object.
3195            unsafe {
3196                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3197            }
3198            Ok(())
3199        }
3200    }
3201
3202    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsRequest {
3203        type Borrowed<'a> = &'a Self;
3204        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3205            value
3206        }
3207    }
3208
3209    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsRequest {
3210        type Owned = Self;
3211
3212        #[inline(always)]
3213        fn inline_align(_context: fidl::encoding::Context) -> usize {
3214            8
3215        }
3216
3217        #[inline(always)]
3218        fn inline_size(_context: fidl::encoding::Context) -> usize {
3219            8
3220        }
3221        #[inline(always)]
3222        fn encode_is_copy() -> bool {
3223            true
3224        }
3225
3226        #[inline(always)]
3227        fn decode_is_copy() -> bool {
3228            true
3229        }
3230    }
3231
3232    unsafe impl<D: fidl::encoding::ResourceDialect>
3233        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D>
3234        for &CompositeGetRingBufferFormatsRequest
3235    {
3236        #[inline]
3237        unsafe fn encode(
3238            self,
3239            encoder: &mut fidl::encoding::Encoder<'_, D>,
3240            offset: usize,
3241            _depth: fidl::encoding::Depth,
3242        ) -> fidl::Result<()> {
3243            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3244            unsafe {
3245                // Copy the object into the buffer.
3246                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3247                (buf_ptr as *mut CompositeGetRingBufferFormatsRequest)
3248                    .write_unaligned((self as *const CompositeGetRingBufferFormatsRequest).read());
3249                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3250                // done second because the memcpy will write garbage to these bytes.
3251            }
3252            Ok(())
3253        }
3254    }
3255    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3256        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D> for (T0,)
3257    {
3258        #[inline]
3259        unsafe fn encode(
3260            self,
3261            encoder: &mut fidl::encoding::Encoder<'_, D>,
3262            offset: usize,
3263            depth: fidl::encoding::Depth,
3264        ) -> fidl::Result<()> {
3265            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3266            // Zero out padding regions. There's no need to apply masks
3267            // because the unmasked parts will be overwritten by fields.
3268            // Write the fields.
3269            self.0.encode(encoder, offset + 0, depth)?;
3270            Ok(())
3271        }
3272    }
3273
3274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3275        for CompositeGetRingBufferFormatsRequest
3276    {
3277        #[inline(always)]
3278        fn new_empty() -> Self {
3279            Self { processing_element_id: fidl::new_empty!(u64, D) }
3280        }
3281
3282        #[inline]
3283        unsafe fn decode(
3284            &mut self,
3285            decoder: &mut fidl::encoding::Decoder<'_, D>,
3286            offset: usize,
3287            _depth: fidl::encoding::Depth,
3288        ) -> fidl::Result<()> {
3289            decoder.debug_check_bounds::<Self>(offset);
3290            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3291            // Verify that padding bytes are zero.
3292            // Copy from the buffer into the object.
3293            unsafe {
3294                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3295            }
3296            Ok(())
3297        }
3298    }
3299
3300    impl fidl::encoding::ValueTypeMarker for CompositeSetDaiFormatRequest {
3301        type Borrowed<'a> = &'a Self;
3302        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3303            value
3304        }
3305    }
3306
3307    unsafe impl fidl::encoding::TypeMarker for CompositeSetDaiFormatRequest {
3308        type Owned = Self;
3309
3310        #[inline(always)]
3311        fn inline_align(_context: fidl::encoding::Context) -> usize {
3312            8
3313        }
3314
3315        #[inline(always)]
3316        fn inline_size(_context: fidl::encoding::Context) -> usize {
3317            56
3318        }
3319    }
3320
3321    unsafe impl<D: fidl::encoding::ResourceDialect>
3322        fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for &CompositeSetDaiFormatRequest
3323    {
3324        #[inline]
3325        unsafe fn encode(
3326            self,
3327            encoder: &mut fidl::encoding::Encoder<'_, D>,
3328            offset: usize,
3329            _depth: fidl::encoding::Depth,
3330        ) -> fidl::Result<()> {
3331            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3332            // Delegate to tuple encoding.
3333            fidl::encoding::Encode::<CompositeSetDaiFormatRequest, D>::encode(
3334                (
3335                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.processing_element_id),
3336                    <DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),
3337                ),
3338                encoder,
3339                offset,
3340                _depth,
3341            )
3342        }
3343    }
3344    unsafe impl<
3345        D: fidl::encoding::ResourceDialect,
3346        T0: fidl::encoding::Encode<u64, D>,
3347        T1: fidl::encoding::Encode<DaiFormat, D>,
3348    > fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for (T0, T1)
3349    {
3350        #[inline]
3351        unsafe fn encode(
3352            self,
3353            encoder: &mut fidl::encoding::Encoder<'_, D>,
3354            offset: usize,
3355            depth: fidl::encoding::Depth,
3356        ) -> fidl::Result<()> {
3357            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3358            // Zero out padding regions. There's no need to apply masks
3359            // because the unmasked parts will be overwritten by fields.
3360            // Write the fields.
3361            self.0.encode(encoder, offset + 0, depth)?;
3362            self.1.encode(encoder, offset + 8, depth)?;
3363            Ok(())
3364        }
3365    }
3366
3367    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3368        for CompositeSetDaiFormatRequest
3369    {
3370        #[inline(always)]
3371        fn new_empty() -> Self {
3372            Self {
3373                processing_element_id: fidl::new_empty!(u64, D),
3374                format: fidl::new_empty!(DaiFormat, D),
3375            }
3376        }
3377
3378        #[inline]
3379        unsafe fn decode(
3380            &mut self,
3381            decoder: &mut fidl::encoding::Decoder<'_, D>,
3382            offset: usize,
3383            _depth: fidl::encoding::Depth,
3384        ) -> fidl::Result<()> {
3385            decoder.debug_check_bounds::<Self>(offset);
3386            // Verify that padding bytes are zero.
3387            fidl::decode!(u64, D, &mut self.processing_element_id, decoder, offset + 0, _depth)?;
3388            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 8, _depth)?;
3389            Ok(())
3390        }
3391    }
3392
3393    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsResponse {
3394        type Borrowed<'a> = &'a Self;
3395        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3396            value
3397        }
3398    }
3399
3400    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsResponse {
3401        type Owned = Self;
3402
3403        #[inline(always)]
3404        fn inline_align(_context: fidl::encoding::Context) -> usize {
3405            8
3406        }
3407
3408        #[inline(always)]
3409        fn inline_size(_context: fidl::encoding::Context) -> usize {
3410            16
3411        }
3412    }
3413
3414    unsafe impl<D: fidl::encoding::ResourceDialect>
3415        fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D>
3416        for &CompositeGetDaiFormatsResponse
3417    {
3418        #[inline]
3419        unsafe fn encode(
3420            self,
3421            encoder: &mut fidl::encoding::Encoder<'_, D>,
3422            offset: usize,
3423            _depth: fidl::encoding::Depth,
3424        ) -> fidl::Result<()> {
3425            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3426            // Delegate to tuple encoding.
3427            fidl::encoding::Encode::<CompositeGetDaiFormatsResponse, D>::encode(
3428                (
3429                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
3430                ),
3431                encoder, offset, _depth
3432            )
3433        }
3434    }
3435    unsafe impl<
3436        D: fidl::encoding::ResourceDialect,
3437        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
3438    > fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D> for (T0,)
3439    {
3440        #[inline]
3441        unsafe fn encode(
3442            self,
3443            encoder: &mut fidl::encoding::Encoder<'_, D>,
3444            offset: usize,
3445            depth: fidl::encoding::Depth,
3446        ) -> fidl::Result<()> {
3447            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3448            // Zero out padding regions. There's no need to apply masks
3449            // because the unmasked parts will be overwritten by fields.
3450            // Write the fields.
3451            self.0.encode(encoder, offset + 0, depth)?;
3452            Ok(())
3453        }
3454    }
3455
3456    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3457        for CompositeGetDaiFormatsResponse
3458    {
3459        #[inline(always)]
3460        fn new_empty() -> Self {
3461            Self {
3462                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
3463            }
3464        }
3465
3466        #[inline]
3467        unsafe fn decode(
3468            &mut self,
3469            decoder: &mut fidl::encoding::Decoder<'_, D>,
3470            offset: usize,
3471            _depth: fidl::encoding::Depth,
3472        ) -> fidl::Result<()> {
3473            decoder.debug_check_bounds::<Self>(offset);
3474            // Verify that padding bytes are zero.
3475            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
3476            Ok(())
3477        }
3478    }
3479
3480    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsResponse {
3481        type Borrowed<'a> = &'a Self;
3482        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3483            value
3484        }
3485    }
3486
3487    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsResponse {
3488        type Owned = Self;
3489
3490        #[inline(always)]
3491        fn inline_align(_context: fidl::encoding::Context) -> usize {
3492            8
3493        }
3494
3495        #[inline(always)]
3496        fn inline_size(_context: fidl::encoding::Context) -> usize {
3497            16
3498        }
3499    }
3500
3501    unsafe impl<D: fidl::encoding::ResourceDialect>
3502        fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D>
3503        for &CompositeGetPacketStreamFormatsResponse
3504    {
3505        #[inline]
3506        unsafe fn encode(
3507            self,
3508            encoder: &mut fidl::encoding::Encoder<'_, D>,
3509            offset: usize,
3510            _depth: fidl::encoding::Depth,
3511        ) -> fidl::Result<()> {
3512            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3513            // Delegate to tuple encoding.
3514            fidl::encoding::Encode::<CompositeGetPacketStreamFormatsResponse, D>::encode(
3515                (
3516                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.packet_stream_formats),
3517                ),
3518                encoder, offset, _depth
3519            )
3520        }
3521    }
3522    unsafe impl<
3523        D: fidl::encoding::ResourceDialect,
3524        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3525    > fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D> for (T0,)
3526    {
3527        #[inline]
3528        unsafe fn encode(
3529            self,
3530            encoder: &mut fidl::encoding::Encoder<'_, D>,
3531            offset: usize,
3532            depth: fidl::encoding::Depth,
3533        ) -> fidl::Result<()> {
3534            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3535            // Zero out padding regions. There's no need to apply masks
3536            // because the unmasked parts will be overwritten by fields.
3537            // Write the fields.
3538            self.0.encode(encoder, offset + 0, depth)?;
3539            Ok(())
3540        }
3541    }
3542
3543    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3544        for CompositeGetPacketStreamFormatsResponse
3545    {
3546        #[inline(always)]
3547        fn new_empty() -> Self {
3548            Self {
3549                packet_stream_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3550            }
3551        }
3552
3553        #[inline]
3554        unsafe fn decode(
3555            &mut self,
3556            decoder: &mut fidl::encoding::Decoder<'_, D>,
3557            offset: usize,
3558            _depth: fidl::encoding::Depth,
3559        ) -> fidl::Result<()> {
3560            decoder.debug_check_bounds::<Self>(offset);
3561            // Verify that padding bytes are zero.
3562            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.packet_stream_formats, decoder, offset + 0, _depth)?;
3563            Ok(())
3564        }
3565    }
3566
3567    impl fidl::encoding::ValueTypeMarker for CompositeGetPropertiesResponse {
3568        type Borrowed<'a> = &'a Self;
3569        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3570            value
3571        }
3572    }
3573
3574    unsafe impl fidl::encoding::TypeMarker for CompositeGetPropertiesResponse {
3575        type Owned = Self;
3576
3577        #[inline(always)]
3578        fn inline_align(_context: fidl::encoding::Context) -> usize {
3579            8
3580        }
3581
3582        #[inline(always)]
3583        fn inline_size(_context: fidl::encoding::Context) -> usize {
3584            16
3585        }
3586    }
3587
3588    unsafe impl<D: fidl::encoding::ResourceDialect>
3589        fidl::encoding::Encode<CompositeGetPropertiesResponse, D>
3590        for &CompositeGetPropertiesResponse
3591    {
3592        #[inline]
3593        unsafe fn encode(
3594            self,
3595            encoder: &mut fidl::encoding::Encoder<'_, D>,
3596            offset: usize,
3597            _depth: fidl::encoding::Depth,
3598        ) -> fidl::Result<()> {
3599            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3600            // Delegate to tuple encoding.
3601            fidl::encoding::Encode::<CompositeGetPropertiesResponse, D>::encode(
3602                (<CompositeProperties as fidl::encoding::ValueTypeMarker>::borrow(
3603                    &self.properties,
3604                ),),
3605                encoder,
3606                offset,
3607                _depth,
3608            )
3609        }
3610    }
3611    unsafe impl<
3612        D: fidl::encoding::ResourceDialect,
3613        T0: fidl::encoding::Encode<CompositeProperties, D>,
3614    > fidl::encoding::Encode<CompositeGetPropertiesResponse, D> for (T0,)
3615    {
3616        #[inline]
3617        unsafe fn encode(
3618            self,
3619            encoder: &mut fidl::encoding::Encoder<'_, D>,
3620            offset: usize,
3621            depth: fidl::encoding::Depth,
3622        ) -> fidl::Result<()> {
3623            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3624            // Zero out padding regions. There's no need to apply masks
3625            // because the unmasked parts will be overwritten by fields.
3626            // Write the fields.
3627            self.0.encode(encoder, offset + 0, depth)?;
3628            Ok(())
3629        }
3630    }
3631
3632    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3633        for CompositeGetPropertiesResponse
3634    {
3635        #[inline(always)]
3636        fn new_empty() -> Self {
3637            Self { properties: fidl::new_empty!(CompositeProperties, D) }
3638        }
3639
3640        #[inline]
3641        unsafe fn decode(
3642            &mut self,
3643            decoder: &mut fidl::encoding::Decoder<'_, D>,
3644            offset: usize,
3645            _depth: fidl::encoding::Depth,
3646        ) -> fidl::Result<()> {
3647            decoder.debug_check_bounds::<Self>(offset);
3648            // Verify that padding bytes are zero.
3649            fidl::decode!(
3650                CompositeProperties,
3651                D,
3652                &mut self.properties,
3653                decoder,
3654                offset + 0,
3655                _depth
3656            )?;
3657            Ok(())
3658        }
3659    }
3660
3661    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsResponse {
3662        type Borrowed<'a> = &'a Self;
3663        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3664            value
3665        }
3666    }
3667
3668    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsResponse {
3669        type Owned = Self;
3670
3671        #[inline(always)]
3672        fn inline_align(_context: fidl::encoding::Context) -> usize {
3673            8
3674        }
3675
3676        #[inline(always)]
3677        fn inline_size(_context: fidl::encoding::Context) -> usize {
3678            16
3679        }
3680    }
3681
3682    unsafe impl<D: fidl::encoding::ResourceDialect>
3683        fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D>
3684        for &CompositeGetRingBufferFormatsResponse
3685    {
3686        #[inline]
3687        unsafe fn encode(
3688            self,
3689            encoder: &mut fidl::encoding::Encoder<'_, D>,
3690            offset: usize,
3691            _depth: fidl::encoding::Depth,
3692        ) -> fidl::Result<()> {
3693            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3694            // Delegate to tuple encoding.
3695            fidl::encoding::Encode::<CompositeGetRingBufferFormatsResponse, D>::encode(
3696                (
3697                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
3698                ),
3699                encoder, offset, _depth
3700            )
3701        }
3702    }
3703    unsafe impl<
3704        D: fidl::encoding::ResourceDialect,
3705        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3706    > fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D> for (T0,)
3707    {
3708        #[inline]
3709        unsafe fn encode(
3710            self,
3711            encoder: &mut fidl::encoding::Encoder<'_, D>,
3712            offset: usize,
3713            depth: fidl::encoding::Depth,
3714        ) -> fidl::Result<()> {
3715            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3716            // Zero out padding regions. There's no need to apply masks
3717            // because the unmasked parts will be overwritten by fields.
3718            // Write the fields.
3719            self.0.encode(encoder, offset + 0, depth)?;
3720            Ok(())
3721        }
3722    }
3723
3724    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3725        for CompositeGetRingBufferFormatsResponse
3726    {
3727        #[inline(always)]
3728        fn new_empty() -> Self {
3729            Self {
3730                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3731            }
3732        }
3733
3734        #[inline]
3735        unsafe fn decode(
3736            &mut self,
3737            decoder: &mut fidl::encoding::Decoder<'_, D>,
3738            offset: usize,
3739            _depth: fidl::encoding::Depth,
3740        ) -> fidl::Result<()> {
3741            decoder.debug_check_bounds::<Self>(offset);
3742            // Verify that padding bytes are zero.
3743            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
3744            Ok(())
3745        }
3746    }
3747
3748    impl fidl::encoding::ValueTypeMarker for DaiFormat {
3749        type Borrowed<'a> = &'a Self;
3750        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3751            value
3752        }
3753    }
3754
3755    unsafe impl fidl::encoding::TypeMarker for DaiFormat {
3756        type Owned = Self;
3757
3758        #[inline(always)]
3759        fn inline_align(_context: fidl::encoding::Context) -> usize {
3760            8
3761        }
3762
3763        #[inline(always)]
3764        fn inline_size(_context: fidl::encoding::Context) -> usize {
3765            48
3766        }
3767    }
3768
3769    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFormat, D>
3770        for &DaiFormat
3771    {
3772        #[inline]
3773        unsafe fn encode(
3774            self,
3775            encoder: &mut fidl::encoding::Encoder<'_, D>,
3776            offset: usize,
3777            _depth: fidl::encoding::Depth,
3778        ) -> fidl::Result<()> {
3779            encoder.debug_check_bounds::<DaiFormat>(offset);
3780            // Delegate to tuple encoding.
3781            fidl::encoding::Encode::<DaiFormat, D>::encode(
3782                (
3783                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3784                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_to_use_bitmask),
3785                    <DaiSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
3786                        &self.sample_format,
3787                    ),
3788                    <DaiFrameFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_format),
3789                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
3790                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3791                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3792                ),
3793                encoder,
3794                offset,
3795                _depth,
3796            )
3797        }
3798    }
3799    unsafe impl<
3800        D: fidl::encoding::ResourceDialect,
3801        T0: fidl::encoding::Encode<u32, D>,
3802        T1: fidl::encoding::Encode<u64, D>,
3803        T2: fidl::encoding::Encode<DaiSampleFormat, D>,
3804        T3: fidl::encoding::Encode<DaiFrameFormat, D>,
3805        T4: fidl::encoding::Encode<u32, D>,
3806        T5: fidl::encoding::Encode<u8, D>,
3807        T6: fidl::encoding::Encode<u8, D>,
3808    > fidl::encoding::Encode<DaiFormat, D> for (T0, T1, T2, T3, T4, T5, T6)
3809    {
3810        #[inline]
3811        unsafe fn encode(
3812            self,
3813            encoder: &mut fidl::encoding::Encoder<'_, D>,
3814            offset: usize,
3815            depth: fidl::encoding::Depth,
3816        ) -> fidl::Result<()> {
3817            encoder.debug_check_bounds::<DaiFormat>(offset);
3818            // Zero out padding regions. There's no need to apply masks
3819            // because the unmasked parts will be overwritten by fields.
3820            unsafe {
3821                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3822                (ptr as *mut u64).write_unaligned(0);
3823            }
3824            unsafe {
3825                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3826                (ptr as *mut u64).write_unaligned(0);
3827            }
3828            unsafe {
3829                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
3830                (ptr as *mut u64).write_unaligned(0);
3831            }
3832            // Write the fields.
3833            self.0.encode(encoder, offset + 0, depth)?;
3834            self.1.encode(encoder, offset + 8, depth)?;
3835            self.2.encode(encoder, offset + 16, depth)?;
3836            self.3.encode(encoder, offset + 24, depth)?;
3837            self.4.encode(encoder, offset + 40, depth)?;
3838            self.5.encode(encoder, offset + 44, depth)?;
3839            self.6.encode(encoder, offset + 45, depth)?;
3840            Ok(())
3841        }
3842    }
3843
3844    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFormat {
3845        #[inline(always)]
3846        fn new_empty() -> Self {
3847            Self {
3848                number_of_channels: fidl::new_empty!(u32, D),
3849                channels_to_use_bitmask: fidl::new_empty!(u64, D),
3850                sample_format: fidl::new_empty!(DaiSampleFormat, D),
3851                frame_format: fidl::new_empty!(DaiFrameFormat, D),
3852                frame_rate: fidl::new_empty!(u32, D),
3853                bits_per_slot: fidl::new_empty!(u8, D),
3854                bits_per_sample: fidl::new_empty!(u8, D),
3855            }
3856        }
3857
3858        #[inline]
3859        unsafe fn decode(
3860            &mut self,
3861            decoder: &mut fidl::encoding::Decoder<'_, D>,
3862            offset: usize,
3863            _depth: fidl::encoding::Depth,
3864        ) -> fidl::Result<()> {
3865            decoder.debug_check_bounds::<Self>(offset);
3866            // Verify that padding bytes are zero.
3867            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3868            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3869            let mask = 0xffffffff00000000u64;
3870            let maskedval = padval & mask;
3871            if maskedval != 0 {
3872                return Err(fidl::Error::NonZeroPadding {
3873                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3874                });
3875            }
3876            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3877            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3878            let mask = 0xffffffffffffff00u64;
3879            let maskedval = padval & mask;
3880            if maskedval != 0 {
3881                return Err(fidl::Error::NonZeroPadding {
3882                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3883                });
3884            }
3885            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
3886            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3887            let mask = 0xffff000000000000u64;
3888            let maskedval = padval & mask;
3889            if maskedval != 0 {
3890                return Err(fidl::Error::NonZeroPadding {
3891                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
3892                });
3893            }
3894            fidl::decode!(u32, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3895            fidl::decode!(u64, D, &mut self.channels_to_use_bitmask, decoder, offset + 8, _depth)?;
3896            fidl::decode!(
3897                DaiSampleFormat,
3898                D,
3899                &mut self.sample_format,
3900                decoder,
3901                offset + 16,
3902                _depth
3903            )?;
3904            fidl::decode!(DaiFrameFormat, D, &mut self.frame_format, decoder, offset + 24, _depth)?;
3905            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 40, _depth)?;
3906            fidl::decode!(u8, D, &mut self.bits_per_slot, decoder, offset + 44, _depth)?;
3907            fidl::decode!(u8, D, &mut self.bits_per_sample, decoder, offset + 45, _depth)?;
3908            Ok(())
3909        }
3910    }
3911
3912    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatCustom {
3913        type Borrowed<'a> = &'a Self;
3914        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3915            value
3916        }
3917    }
3918
3919    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatCustom {
3920        type Owned = Self;
3921
3922        #[inline(always)]
3923        fn inline_align(_context: fidl::encoding::Context) -> usize {
3924            1
3925        }
3926
3927        #[inline(always)]
3928        fn inline_size(_context: fidl::encoding::Context) -> usize {
3929            4
3930        }
3931    }
3932
3933    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormatCustom, D>
3934        for &DaiFrameFormatCustom
3935    {
3936        #[inline]
3937        unsafe fn encode(
3938            self,
3939            encoder: &mut fidl::encoding::Encoder<'_, D>,
3940            offset: usize,
3941            _depth: fidl::encoding::Depth,
3942        ) -> fidl::Result<()> {
3943            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3944            // Delegate to tuple encoding.
3945            fidl::encoding::Encode::<DaiFrameFormatCustom, D>::encode(
3946                (
3947                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.left_justified),
3948                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.sclk_on_raising),
3949                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_sclks_offset),
3950                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_size),
3951                ),
3952                encoder,
3953                offset,
3954                _depth,
3955            )
3956        }
3957    }
3958    unsafe impl<
3959        D: fidl::encoding::ResourceDialect,
3960        T0: fidl::encoding::Encode<bool, D>,
3961        T1: fidl::encoding::Encode<bool, D>,
3962        T2: fidl::encoding::Encode<i8, D>,
3963        T3: fidl::encoding::Encode<u8, D>,
3964    > fidl::encoding::Encode<DaiFrameFormatCustom, D> for (T0, T1, T2, T3)
3965    {
3966        #[inline]
3967        unsafe fn encode(
3968            self,
3969            encoder: &mut fidl::encoding::Encoder<'_, D>,
3970            offset: usize,
3971            depth: fidl::encoding::Depth,
3972        ) -> fidl::Result<()> {
3973            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3974            // Zero out padding regions. There's no need to apply masks
3975            // because the unmasked parts will be overwritten by fields.
3976            // Write the fields.
3977            self.0.encode(encoder, offset + 0, depth)?;
3978            self.1.encode(encoder, offset + 1, depth)?;
3979            self.2.encode(encoder, offset + 2, depth)?;
3980            self.3.encode(encoder, offset + 3, depth)?;
3981            Ok(())
3982        }
3983    }
3984
3985    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormatCustom {
3986        #[inline(always)]
3987        fn new_empty() -> Self {
3988            Self {
3989                left_justified: fidl::new_empty!(bool, D),
3990                sclk_on_raising: fidl::new_empty!(bool, D),
3991                frame_sync_sclks_offset: fidl::new_empty!(i8, D),
3992                frame_sync_size: fidl::new_empty!(u8, D),
3993            }
3994        }
3995
3996        #[inline]
3997        unsafe fn decode(
3998            &mut self,
3999            decoder: &mut fidl::encoding::Decoder<'_, D>,
4000            offset: usize,
4001            _depth: fidl::encoding::Depth,
4002        ) -> fidl::Result<()> {
4003            decoder.debug_check_bounds::<Self>(offset);
4004            // Verify that padding bytes are zero.
4005            fidl::decode!(bool, D, &mut self.left_justified, decoder, offset + 0, _depth)?;
4006            fidl::decode!(bool, D, &mut self.sclk_on_raising, decoder, offset + 1, _depth)?;
4007            fidl::decode!(i8, D, &mut self.frame_sync_sclks_offset, decoder, offset + 2, _depth)?;
4008            fidl::decode!(u8, D, &mut self.frame_sync_size, decoder, offset + 3, _depth)?;
4009            Ok(())
4010        }
4011    }
4012
4013    impl fidl::encoding::ValueTypeMarker for DaiGetPropertiesResponse {
4014        type Borrowed<'a> = &'a Self;
4015        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4016            value
4017        }
4018    }
4019
4020    unsafe impl fidl::encoding::TypeMarker for DaiGetPropertiesResponse {
4021        type Owned = Self;
4022
4023        #[inline(always)]
4024        fn inline_align(_context: fidl::encoding::Context) -> usize {
4025            8
4026        }
4027
4028        #[inline(always)]
4029        fn inline_size(_context: fidl::encoding::Context) -> usize {
4030            16
4031        }
4032    }
4033
4034    unsafe impl<D: fidl::encoding::ResourceDialect>
4035        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for &DaiGetPropertiesResponse
4036    {
4037        #[inline]
4038        unsafe fn encode(
4039            self,
4040            encoder: &mut fidl::encoding::Encoder<'_, D>,
4041            offset: usize,
4042            _depth: fidl::encoding::Depth,
4043        ) -> fidl::Result<()> {
4044            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4045            // Delegate to tuple encoding.
4046            fidl::encoding::Encode::<DaiGetPropertiesResponse, D>::encode(
4047                (<DaiProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
4048                encoder,
4049                offset,
4050                _depth,
4051            )
4052        }
4053    }
4054    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiProperties, D>>
4055        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for (T0,)
4056    {
4057        #[inline]
4058        unsafe fn encode(
4059            self,
4060            encoder: &mut fidl::encoding::Encoder<'_, D>,
4061            offset: usize,
4062            depth: fidl::encoding::Depth,
4063        ) -> fidl::Result<()> {
4064            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4065            // Zero out padding regions. There's no need to apply masks
4066            // because the unmasked parts will be overwritten by fields.
4067            // Write the fields.
4068            self.0.encode(encoder, offset + 0, depth)?;
4069            Ok(())
4070        }
4071    }
4072
4073    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4074        for DaiGetPropertiesResponse
4075    {
4076        #[inline(always)]
4077        fn new_empty() -> Self {
4078            Self { properties: fidl::new_empty!(DaiProperties, D) }
4079        }
4080
4081        #[inline]
4082        unsafe fn decode(
4083            &mut self,
4084            decoder: &mut fidl::encoding::Decoder<'_, D>,
4085            offset: usize,
4086            _depth: fidl::encoding::Depth,
4087        ) -> fidl::Result<()> {
4088            decoder.debug_check_bounds::<Self>(offset);
4089            // Verify that padding bytes are zero.
4090            fidl::decode!(DaiProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
4091            Ok(())
4092        }
4093    }
4094
4095    impl fidl::encoding::ValueTypeMarker for DaiSupportedFormats {
4096        type Borrowed<'a> = &'a Self;
4097        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4098            value
4099        }
4100    }
4101
4102    unsafe impl fidl::encoding::TypeMarker for DaiSupportedFormats {
4103        type Owned = Self;
4104
4105        #[inline(always)]
4106        fn inline_align(_context: fidl::encoding::Context) -> usize {
4107            8
4108        }
4109
4110        #[inline(always)]
4111        fn inline_size(_context: fidl::encoding::Context) -> usize {
4112            96
4113        }
4114    }
4115
4116    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiSupportedFormats, D>
4117        for &DaiSupportedFormats
4118    {
4119        #[inline]
4120        unsafe fn encode(
4121            self,
4122            encoder: &mut fidl::encoding::Encoder<'_, D>,
4123            offset: usize,
4124            _depth: fidl::encoding::Depth,
4125        ) -> fidl::Result<()> {
4126            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4127            // Delegate to tuple encoding.
4128            fidl::encoding::Encode::<DaiSupportedFormats, D>::encode(
4129                (
4130                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4131                    <fidl::encoding::Vector<DaiSampleFormat, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_formats),
4132                    <fidl::encoding::Vector<DaiFrameFormat, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_formats),
4133                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rates),
4134                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
4135                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
4136                ),
4137                encoder, offset, _depth
4138            )
4139        }
4140    }
4141    unsafe impl<
4142        D: fidl::encoding::ResourceDialect,
4143        T0: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4144        T1: fidl::encoding::Encode<fidl::encoding::Vector<DaiSampleFormat, 4>, D>,
4145        T2: fidl::encoding::Encode<fidl::encoding::Vector<DaiFrameFormat, 64>, D>,
4146        T3: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4147        T4: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4148        T5: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4149    > fidl::encoding::Encode<DaiSupportedFormats, D> for (T0, T1, T2, T3, T4, T5)
4150    {
4151        #[inline]
4152        unsafe fn encode(
4153            self,
4154            encoder: &mut fidl::encoding::Encoder<'_, D>,
4155            offset: usize,
4156            depth: fidl::encoding::Depth,
4157        ) -> fidl::Result<()> {
4158            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4159            // Zero out padding regions. There's no need to apply masks
4160            // because the unmasked parts will be overwritten by fields.
4161            // Write the fields.
4162            self.0.encode(encoder, offset + 0, depth)?;
4163            self.1.encode(encoder, offset + 16, depth)?;
4164            self.2.encode(encoder, offset + 32, depth)?;
4165            self.3.encode(encoder, offset + 48, depth)?;
4166            self.4.encode(encoder, offset + 64, depth)?;
4167            self.5.encode(encoder, offset + 80, depth)?;
4168            Ok(())
4169        }
4170    }
4171
4172    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSupportedFormats {
4173        #[inline(always)]
4174        fn new_empty() -> Self {
4175            Self {
4176                number_of_channels: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4177                sample_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSampleFormat, 4>, D),
4178                frame_formats: fidl::new_empty!(fidl::encoding::Vector<DaiFrameFormat, 64>, D),
4179                frame_rates: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4180                bits_per_slot: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4181                bits_per_sample: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4182            }
4183        }
4184
4185        #[inline]
4186        unsafe fn decode(
4187            &mut self,
4188            decoder: &mut fidl::encoding::Decoder<'_, D>,
4189            offset: usize,
4190            _depth: fidl::encoding::Depth,
4191        ) -> fidl::Result<()> {
4192            decoder.debug_check_bounds::<Self>(offset);
4193            // Verify that padding bytes are zero.
4194            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4195            fidl::decode!(fidl::encoding::Vector<DaiSampleFormat, 4>, D, &mut self.sample_formats, decoder, offset + 16, _depth)?;
4196            fidl::decode!(fidl::encoding::Vector<DaiFrameFormat, 64>, D, &mut self.frame_formats, decoder, offset + 32, _depth)?;
4197            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.frame_rates, decoder, offset + 48, _depth)?;
4198            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_slot, decoder, offset + 64, _depth)?;
4199            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_sample, decoder, offset + 80, _depth)?;
4200            Ok(())
4201        }
4202    }
4203
4204    impl fidl::encoding::ValueTypeMarker for DaiGetDaiFormatsResponse {
4205        type Borrowed<'a> = &'a Self;
4206        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4207            value
4208        }
4209    }
4210
4211    unsafe impl fidl::encoding::TypeMarker for DaiGetDaiFormatsResponse {
4212        type Owned = Self;
4213
4214        #[inline(always)]
4215        fn inline_align(_context: fidl::encoding::Context) -> usize {
4216            8
4217        }
4218
4219        #[inline(always)]
4220        fn inline_size(_context: fidl::encoding::Context) -> usize {
4221            16
4222        }
4223    }
4224
4225    unsafe impl<D: fidl::encoding::ResourceDialect>
4226        fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for &DaiGetDaiFormatsResponse
4227    {
4228        #[inline]
4229        unsafe fn encode(
4230            self,
4231            encoder: &mut fidl::encoding::Encoder<'_, D>,
4232            offset: usize,
4233            _depth: fidl::encoding::Depth,
4234        ) -> fidl::Result<()> {
4235            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4236            // Delegate to tuple encoding.
4237            fidl::encoding::Encode::<DaiGetDaiFormatsResponse, D>::encode(
4238                (
4239                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
4240                ),
4241                encoder, offset, _depth
4242            )
4243        }
4244    }
4245    unsafe impl<
4246        D: fidl::encoding::ResourceDialect,
4247        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
4248    > fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for (T0,)
4249    {
4250        #[inline]
4251        unsafe fn encode(
4252            self,
4253            encoder: &mut fidl::encoding::Encoder<'_, D>,
4254            offset: usize,
4255            depth: fidl::encoding::Depth,
4256        ) -> fidl::Result<()> {
4257            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4258            // Zero out padding regions. There's no need to apply masks
4259            // because the unmasked parts will be overwritten by fields.
4260            // Write the fields.
4261            self.0.encode(encoder, offset + 0, depth)?;
4262            Ok(())
4263        }
4264    }
4265
4266    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4267        for DaiGetDaiFormatsResponse
4268    {
4269        #[inline(always)]
4270        fn new_empty() -> Self {
4271            Self {
4272                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
4273            }
4274        }
4275
4276        #[inline]
4277        unsafe fn decode(
4278            &mut self,
4279            decoder: &mut fidl::encoding::Decoder<'_, D>,
4280            offset: usize,
4281            _depth: fidl::encoding::Depth,
4282        ) -> fidl::Result<()> {
4283            decoder.debug_check_bounds::<Self>(offset);
4284            // Verify that padding bytes are zero.
4285            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
4286            Ok(())
4287        }
4288    }
4289
4290    impl fidl::encoding::ValueTypeMarker for DaiGetRingBufferFormatsResponse {
4291        type Borrowed<'a> = &'a Self;
4292        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4293            value
4294        }
4295    }
4296
4297    unsafe impl fidl::encoding::TypeMarker for DaiGetRingBufferFormatsResponse {
4298        type Owned = Self;
4299
4300        #[inline(always)]
4301        fn inline_align(_context: fidl::encoding::Context) -> usize {
4302            8
4303        }
4304
4305        #[inline(always)]
4306        fn inline_size(_context: fidl::encoding::Context) -> usize {
4307            16
4308        }
4309    }
4310
4311    unsafe impl<D: fidl::encoding::ResourceDialect>
4312        fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D>
4313        for &DaiGetRingBufferFormatsResponse
4314    {
4315        #[inline]
4316        unsafe fn encode(
4317            self,
4318            encoder: &mut fidl::encoding::Encoder<'_, D>,
4319            offset: usize,
4320            _depth: fidl::encoding::Depth,
4321        ) -> fidl::Result<()> {
4322            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4323            // Delegate to tuple encoding.
4324            fidl::encoding::Encode::<DaiGetRingBufferFormatsResponse, D>::encode(
4325                (
4326                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
4327                ),
4328                encoder, offset, _depth
4329            )
4330        }
4331    }
4332    unsafe impl<
4333        D: fidl::encoding::ResourceDialect,
4334        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
4335    > fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D> for (T0,)
4336    {
4337        #[inline]
4338        unsafe fn encode(
4339            self,
4340            encoder: &mut fidl::encoding::Encoder<'_, D>,
4341            offset: usize,
4342            depth: fidl::encoding::Depth,
4343        ) -> fidl::Result<()> {
4344            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4345            // Zero out padding regions. There's no need to apply masks
4346            // because the unmasked parts will be overwritten by fields.
4347            // Write the fields.
4348            self.0.encode(encoder, offset + 0, depth)?;
4349            Ok(())
4350        }
4351    }
4352
4353    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4354        for DaiGetRingBufferFormatsResponse
4355    {
4356        #[inline(always)]
4357        fn new_empty() -> Self {
4358            Self {
4359                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
4360            }
4361        }
4362
4363        #[inline]
4364        unsafe fn decode(
4365            &mut self,
4366            decoder: &mut fidl::encoding::Decoder<'_, D>,
4367            offset: usize,
4368            _depth: fidl::encoding::Depth,
4369        ) -> fidl::Result<()> {
4370            decoder.debug_check_bounds::<Self>(offset);
4371            // Verify that padding bytes are zero.
4372            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
4373            Ok(())
4374        }
4375    }
4376
4377    impl fidl::encoding::ValueTypeMarker for HealthGetHealthStateResponse {
4378        type Borrowed<'a> = &'a Self;
4379        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4380            value
4381        }
4382    }
4383
4384    unsafe impl fidl::encoding::TypeMarker for HealthGetHealthStateResponse {
4385        type Owned = Self;
4386
4387        #[inline(always)]
4388        fn inline_align(_context: fidl::encoding::Context) -> usize {
4389            8
4390        }
4391
4392        #[inline(always)]
4393        fn inline_size(_context: fidl::encoding::Context) -> usize {
4394            16
4395        }
4396    }
4397
4398    unsafe impl<D: fidl::encoding::ResourceDialect>
4399        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for &HealthGetHealthStateResponse
4400    {
4401        #[inline]
4402        unsafe fn encode(
4403            self,
4404            encoder: &mut fidl::encoding::Encoder<'_, D>,
4405            offset: usize,
4406            _depth: fidl::encoding::Depth,
4407        ) -> fidl::Result<()> {
4408            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4409            // Delegate to tuple encoding.
4410            fidl::encoding::Encode::<HealthGetHealthStateResponse, D>::encode(
4411                (<HealthState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
4412                encoder,
4413                offset,
4414                _depth,
4415            )
4416        }
4417    }
4418    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HealthState, D>>
4419        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for (T0,)
4420    {
4421        #[inline]
4422        unsafe fn encode(
4423            self,
4424            encoder: &mut fidl::encoding::Encoder<'_, D>,
4425            offset: usize,
4426            depth: fidl::encoding::Depth,
4427        ) -> fidl::Result<()> {
4428            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4429            // Zero out padding regions. There's no need to apply masks
4430            // because the unmasked parts will be overwritten by fields.
4431            // Write the fields.
4432            self.0.encode(encoder, offset + 0, depth)?;
4433            Ok(())
4434        }
4435    }
4436
4437    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4438        for HealthGetHealthStateResponse
4439    {
4440        #[inline(always)]
4441        fn new_empty() -> Self {
4442            Self { state: fidl::new_empty!(HealthState, D) }
4443        }
4444
4445        #[inline]
4446        unsafe fn decode(
4447            &mut self,
4448            decoder: &mut fidl::encoding::Decoder<'_, D>,
4449            offset: usize,
4450            _depth: fidl::encoding::Depth,
4451        ) -> fidl::Result<()> {
4452            decoder.debug_check_bounds::<Self>(offset);
4453            // Verify that padding bytes are zero.
4454            fidl::decode!(HealthState, D, &mut self.state, decoder, offset + 0, _depth)?;
4455            Ok(())
4456        }
4457    }
4458
4459    impl fidl::encoding::ValueTypeMarker for PacketStreamControlGetPropertiesResponse {
4460        type Borrowed<'a> = &'a Self;
4461        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4462            value
4463        }
4464    }
4465
4466    unsafe impl fidl::encoding::TypeMarker for PacketStreamControlGetPropertiesResponse {
4467        type Owned = Self;
4468
4469        #[inline(always)]
4470        fn inline_align(_context: fidl::encoding::Context) -> usize {
4471            8
4472        }
4473
4474        #[inline(always)]
4475        fn inline_size(_context: fidl::encoding::Context) -> usize {
4476            16
4477        }
4478    }
4479
4480    unsafe impl<D: fidl::encoding::ResourceDialect>
4481        fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D>
4482        for &PacketStreamControlGetPropertiesResponse
4483    {
4484        #[inline]
4485        unsafe fn encode(
4486            self,
4487            encoder: &mut fidl::encoding::Encoder<'_, D>,
4488            offset: usize,
4489            _depth: fidl::encoding::Depth,
4490        ) -> fidl::Result<()> {
4491            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4492            // Delegate to tuple encoding.
4493            fidl::encoding::Encode::<PacketStreamControlGetPropertiesResponse, D>::encode(
4494                (<PacketStreamProperties as fidl::encoding::ValueTypeMarker>::borrow(
4495                    &self.properties,
4496                ),),
4497                encoder,
4498                offset,
4499                _depth,
4500            )
4501        }
4502    }
4503    unsafe impl<
4504        D: fidl::encoding::ResourceDialect,
4505        T0: fidl::encoding::Encode<PacketStreamProperties, D>,
4506    > fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D> for (T0,)
4507    {
4508        #[inline]
4509        unsafe fn encode(
4510            self,
4511            encoder: &mut fidl::encoding::Encoder<'_, D>,
4512            offset: usize,
4513            depth: fidl::encoding::Depth,
4514        ) -> fidl::Result<()> {
4515            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4516            // Zero out padding regions. There's no need to apply masks
4517            // because the unmasked parts will be overwritten by fields.
4518            // Write the fields.
4519            self.0.encode(encoder, offset + 0, depth)?;
4520            Ok(())
4521        }
4522    }
4523
4524    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4525        for PacketStreamControlGetPropertiesResponse
4526    {
4527        #[inline(always)]
4528        fn new_empty() -> Self {
4529            Self { properties: fidl::new_empty!(PacketStreamProperties, D) }
4530        }
4531
4532        #[inline]
4533        unsafe fn decode(
4534            &mut self,
4535            decoder: &mut fidl::encoding::Decoder<'_, D>,
4536            offset: usize,
4537            _depth: fidl::encoding::Depth,
4538        ) -> fidl::Result<()> {
4539            decoder.debug_check_bounds::<Self>(offset);
4540            // Verify that padding bytes are zero.
4541            fidl::decode!(
4542                PacketStreamProperties,
4543                D,
4544                &mut self.properties,
4545                decoder,
4546                offset + 0,
4547                _depth
4548            )?;
4549            Ok(())
4550        }
4551    }
4552
4553    impl fidl::encoding::ValueTypeMarker for PcmFormat {
4554        type Borrowed<'a> = &'a Self;
4555        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4556            value
4557        }
4558    }
4559
4560    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
4561        type Owned = Self;
4562
4563        #[inline(always)]
4564        fn inline_align(_context: fidl::encoding::Context) -> usize {
4565            4
4566        }
4567
4568        #[inline(always)]
4569        fn inline_size(_context: fidl::encoding::Context) -> usize {
4570            8
4571        }
4572    }
4573
4574    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
4575        for &PcmFormat
4576    {
4577        #[inline]
4578        unsafe fn encode(
4579            self,
4580            encoder: &mut fidl::encoding::Encoder<'_, D>,
4581            offset: usize,
4582            _depth: fidl::encoding::Depth,
4583        ) -> fidl::Result<()> {
4584            encoder.debug_check_bounds::<PcmFormat>(offset);
4585            // Delegate to tuple encoding.
4586            fidl::encoding::Encode::<PcmFormat, D>::encode(
4587                (
4588                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4589                    <SampleFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_format),
4590                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bytes_per_sample),
4591                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.valid_bits_per_sample),
4592                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
4593                ),
4594                encoder,
4595                offset,
4596                _depth,
4597            )
4598        }
4599    }
4600    unsafe impl<
4601        D: fidl::encoding::ResourceDialect,
4602        T0: fidl::encoding::Encode<u8, D>,
4603        T1: fidl::encoding::Encode<SampleFormat, D>,
4604        T2: fidl::encoding::Encode<u8, D>,
4605        T3: fidl::encoding::Encode<u8, D>,
4606        T4: fidl::encoding::Encode<u32, D>,
4607    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3, T4)
4608    {
4609        #[inline]
4610        unsafe fn encode(
4611            self,
4612            encoder: &mut fidl::encoding::Encoder<'_, D>,
4613            offset: usize,
4614            depth: fidl::encoding::Depth,
4615        ) -> fidl::Result<()> {
4616            encoder.debug_check_bounds::<PcmFormat>(offset);
4617            // Zero out padding regions. There's no need to apply masks
4618            // because the unmasked parts will be overwritten by fields.
4619            // Write the fields.
4620            self.0.encode(encoder, offset + 0, depth)?;
4621            self.1.encode(encoder, offset + 1, depth)?;
4622            self.2.encode(encoder, offset + 2, depth)?;
4623            self.3.encode(encoder, offset + 3, depth)?;
4624            self.4.encode(encoder, offset + 4, depth)?;
4625            Ok(())
4626        }
4627    }
4628
4629    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
4630        #[inline(always)]
4631        fn new_empty() -> Self {
4632            Self {
4633                number_of_channels: fidl::new_empty!(u8, D),
4634                sample_format: fidl::new_empty!(SampleFormat, D),
4635                bytes_per_sample: fidl::new_empty!(u8, D),
4636                valid_bits_per_sample: fidl::new_empty!(u8, D),
4637                frame_rate: fidl::new_empty!(u32, D),
4638            }
4639        }
4640
4641        #[inline]
4642        unsafe fn decode(
4643            &mut self,
4644            decoder: &mut fidl::encoding::Decoder<'_, D>,
4645            offset: usize,
4646            _depth: fidl::encoding::Depth,
4647        ) -> fidl::Result<()> {
4648            decoder.debug_check_bounds::<Self>(offset);
4649            // Verify that padding bytes are zero.
4650            fidl::decode!(u8, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4651            fidl::decode!(SampleFormat, D, &mut self.sample_format, decoder, offset + 1, _depth)?;
4652            fidl::decode!(u8, D, &mut self.bytes_per_sample, decoder, offset + 2, _depth)?;
4653            fidl::decode!(u8, D, &mut self.valid_bits_per_sample, decoder, offset + 3, _depth)?;
4654            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 4, _depth)?;
4655            Ok(())
4656        }
4657    }
4658
4659    impl fidl::encoding::ValueTypeMarker for RingBufferGetPropertiesResponse {
4660        type Borrowed<'a> = &'a Self;
4661        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4662            value
4663        }
4664    }
4665
4666    unsafe impl fidl::encoding::TypeMarker for RingBufferGetPropertiesResponse {
4667        type Owned = Self;
4668
4669        #[inline(always)]
4670        fn inline_align(_context: fidl::encoding::Context) -> usize {
4671            8
4672        }
4673
4674        #[inline(always)]
4675        fn inline_size(_context: fidl::encoding::Context) -> usize {
4676            16
4677        }
4678    }
4679
4680    unsafe impl<D: fidl::encoding::ResourceDialect>
4681        fidl::encoding::Encode<RingBufferGetPropertiesResponse, D>
4682        for &RingBufferGetPropertiesResponse
4683    {
4684        #[inline]
4685        unsafe fn encode(
4686            self,
4687            encoder: &mut fidl::encoding::Encoder<'_, D>,
4688            offset: usize,
4689            _depth: fidl::encoding::Depth,
4690        ) -> fidl::Result<()> {
4691            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4692            // Delegate to tuple encoding.
4693            fidl::encoding::Encode::<RingBufferGetPropertiesResponse, D>::encode(
4694                (<RingBufferProperties as fidl::encoding::ValueTypeMarker>::borrow(
4695                    &self.properties,
4696                ),),
4697                encoder,
4698                offset,
4699                _depth,
4700            )
4701        }
4702    }
4703    unsafe impl<
4704        D: fidl::encoding::ResourceDialect,
4705        T0: fidl::encoding::Encode<RingBufferProperties, D>,
4706    > fidl::encoding::Encode<RingBufferGetPropertiesResponse, D> for (T0,)
4707    {
4708        #[inline]
4709        unsafe fn encode(
4710            self,
4711            encoder: &mut fidl::encoding::Encoder<'_, D>,
4712            offset: usize,
4713            depth: fidl::encoding::Depth,
4714        ) -> fidl::Result<()> {
4715            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4716            // Zero out padding regions. There's no need to apply masks
4717            // because the unmasked parts will be overwritten by fields.
4718            // Write the fields.
4719            self.0.encode(encoder, offset + 0, depth)?;
4720            Ok(())
4721        }
4722    }
4723
4724    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4725        for RingBufferGetPropertiesResponse
4726    {
4727        #[inline(always)]
4728        fn new_empty() -> Self {
4729            Self { properties: fidl::new_empty!(RingBufferProperties, D) }
4730        }
4731
4732        #[inline]
4733        unsafe fn decode(
4734            &mut self,
4735            decoder: &mut fidl::encoding::Decoder<'_, D>,
4736            offset: usize,
4737            _depth: fidl::encoding::Depth,
4738        ) -> fidl::Result<()> {
4739            decoder.debug_check_bounds::<Self>(offset);
4740            // Verify that padding bytes are zero.
4741            fidl::decode!(
4742                RingBufferProperties,
4743                D,
4744                &mut self.properties,
4745                decoder,
4746                offset + 0,
4747                _depth
4748            )?;
4749            Ok(())
4750        }
4751    }
4752
4753    impl fidl::encoding::ValueTypeMarker for RingBufferGetVmoRequest {
4754        type Borrowed<'a> = &'a Self;
4755        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4756            value
4757        }
4758    }
4759
4760    unsafe impl fidl::encoding::TypeMarker for RingBufferGetVmoRequest {
4761        type Owned = Self;
4762
4763        #[inline(always)]
4764        fn inline_align(_context: fidl::encoding::Context) -> usize {
4765            4
4766        }
4767
4768        #[inline(always)]
4769        fn inline_size(_context: fidl::encoding::Context) -> usize {
4770            8
4771        }
4772        #[inline(always)]
4773        fn encode_is_copy() -> bool {
4774            true
4775        }
4776
4777        #[inline(always)]
4778        fn decode_is_copy() -> bool {
4779            true
4780        }
4781    }
4782
4783    unsafe impl<D: fidl::encoding::ResourceDialect>
4784        fidl::encoding::Encode<RingBufferGetVmoRequest, D> for &RingBufferGetVmoRequest
4785    {
4786        #[inline]
4787        unsafe fn encode(
4788            self,
4789            encoder: &mut fidl::encoding::Encoder<'_, D>,
4790            offset: usize,
4791            _depth: fidl::encoding::Depth,
4792        ) -> fidl::Result<()> {
4793            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4794            unsafe {
4795                // Copy the object into the buffer.
4796                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4797                (buf_ptr as *mut RingBufferGetVmoRequest)
4798                    .write_unaligned((self as *const RingBufferGetVmoRequest).read());
4799                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4800                // done second because the memcpy will write garbage to these bytes.
4801            }
4802            Ok(())
4803        }
4804    }
4805    unsafe impl<
4806        D: fidl::encoding::ResourceDialect,
4807        T0: fidl::encoding::Encode<u32, D>,
4808        T1: fidl::encoding::Encode<u32, D>,
4809    > fidl::encoding::Encode<RingBufferGetVmoRequest, D> for (T0, T1)
4810    {
4811        #[inline]
4812        unsafe fn encode(
4813            self,
4814            encoder: &mut fidl::encoding::Encoder<'_, D>,
4815            offset: usize,
4816            depth: fidl::encoding::Depth,
4817        ) -> fidl::Result<()> {
4818            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4819            // Zero out padding regions. There's no need to apply masks
4820            // because the unmasked parts will be overwritten by fields.
4821            // Write the fields.
4822            self.0.encode(encoder, offset + 0, depth)?;
4823            self.1.encode(encoder, offset + 4, depth)?;
4824            Ok(())
4825        }
4826    }
4827
4828    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4829        for RingBufferGetVmoRequest
4830    {
4831        #[inline(always)]
4832        fn new_empty() -> Self {
4833            Self {
4834                min_frames: fidl::new_empty!(u32, D),
4835                clock_recovery_notifications_per_ring: fidl::new_empty!(u32, D),
4836            }
4837        }
4838
4839        #[inline]
4840        unsafe fn decode(
4841            &mut self,
4842            decoder: &mut fidl::encoding::Decoder<'_, D>,
4843            offset: usize,
4844            _depth: fidl::encoding::Depth,
4845        ) -> fidl::Result<()> {
4846            decoder.debug_check_bounds::<Self>(offset);
4847            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4848            // Verify that padding bytes are zero.
4849            // Copy from the buffer into the object.
4850            unsafe {
4851                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4852            }
4853            Ok(())
4854        }
4855    }
4856
4857    impl fidl::encoding::ValueTypeMarker for RingBufferPositionInfo {
4858        type Borrowed<'a> = &'a Self;
4859        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4860            value
4861        }
4862    }
4863
4864    unsafe impl fidl::encoding::TypeMarker for RingBufferPositionInfo {
4865        type Owned = Self;
4866
4867        #[inline(always)]
4868        fn inline_align(_context: fidl::encoding::Context) -> usize {
4869            8
4870        }
4871
4872        #[inline(always)]
4873        fn inline_size(_context: fidl::encoding::Context) -> usize {
4874            16
4875        }
4876    }
4877
4878    unsafe impl<D: fidl::encoding::ResourceDialect>
4879        fidl::encoding::Encode<RingBufferPositionInfo, D> for &RingBufferPositionInfo
4880    {
4881        #[inline]
4882        unsafe fn encode(
4883            self,
4884            encoder: &mut fidl::encoding::Encoder<'_, D>,
4885            offset: usize,
4886            _depth: fidl::encoding::Depth,
4887        ) -> fidl::Result<()> {
4888            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4889            unsafe {
4890                // Copy the object into the buffer.
4891                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4892                (buf_ptr as *mut RingBufferPositionInfo)
4893                    .write_unaligned((self as *const RingBufferPositionInfo).read());
4894                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4895                // done second because the memcpy will write garbage to these bytes.
4896                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4897                let padding_mask = 0xffffffff00000000u64;
4898                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4899            }
4900            Ok(())
4901        }
4902    }
4903    unsafe impl<
4904        D: fidl::encoding::ResourceDialect,
4905        T0: fidl::encoding::Encode<i64, D>,
4906        T1: fidl::encoding::Encode<u32, D>,
4907    > fidl::encoding::Encode<RingBufferPositionInfo, D> for (T0, T1)
4908    {
4909        #[inline]
4910        unsafe fn encode(
4911            self,
4912            encoder: &mut fidl::encoding::Encoder<'_, D>,
4913            offset: usize,
4914            depth: fidl::encoding::Depth,
4915        ) -> fidl::Result<()> {
4916            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4917            // Zero out padding regions. There's no need to apply masks
4918            // because the unmasked parts will be overwritten by fields.
4919            unsafe {
4920                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4921                (ptr as *mut u64).write_unaligned(0);
4922            }
4923            // Write the fields.
4924            self.0.encode(encoder, offset + 0, depth)?;
4925            self.1.encode(encoder, offset + 8, depth)?;
4926            Ok(())
4927        }
4928    }
4929
4930    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4931        for RingBufferPositionInfo
4932    {
4933        #[inline(always)]
4934        fn new_empty() -> Self {
4935            Self { timestamp: fidl::new_empty!(i64, D), position: fidl::new_empty!(u32, D) }
4936        }
4937
4938        #[inline]
4939        unsafe fn decode(
4940            &mut self,
4941            decoder: &mut fidl::encoding::Decoder<'_, D>,
4942            offset: usize,
4943            _depth: fidl::encoding::Depth,
4944        ) -> fidl::Result<()> {
4945            decoder.debug_check_bounds::<Self>(offset);
4946            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4947            // Verify that padding bytes are zero.
4948            let ptr = unsafe { buf_ptr.offset(8) };
4949            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4950            let mask = 0xffffffff00000000u64;
4951            let maskedval = padval & mask;
4952            if maskedval != 0 {
4953                return Err(fidl::Error::NonZeroPadding {
4954                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4955                });
4956            }
4957            // Copy from the buffer into the object.
4958            unsafe {
4959                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4960            }
4961            Ok(())
4962        }
4963    }
4964
4965    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsRequest {
4966        type Borrowed<'a> = &'a Self;
4967        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4968            value
4969        }
4970    }
4971
4972    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsRequest {
4973        type Owned = Self;
4974
4975        #[inline(always)]
4976        fn inline_align(_context: fidl::encoding::Context) -> usize {
4977            8
4978        }
4979
4980        #[inline(always)]
4981        fn inline_size(_context: fidl::encoding::Context) -> usize {
4982            8
4983        }
4984        #[inline(always)]
4985        fn encode_is_copy() -> bool {
4986            true
4987        }
4988
4989        #[inline(always)]
4990        fn decode_is_copy() -> bool {
4991            true
4992        }
4993    }
4994
4995    unsafe impl<D: fidl::encoding::ResourceDialect>
4996        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D>
4997        for &RingBufferSetActiveChannelsRequest
4998    {
4999        #[inline]
5000        unsafe fn encode(
5001            self,
5002            encoder: &mut fidl::encoding::Encoder<'_, D>,
5003            offset: usize,
5004            _depth: fidl::encoding::Depth,
5005        ) -> fidl::Result<()> {
5006            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5007            unsafe {
5008                // Copy the object into the buffer.
5009                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5010                (buf_ptr as *mut RingBufferSetActiveChannelsRequest)
5011                    .write_unaligned((self as *const RingBufferSetActiveChannelsRequest).read());
5012                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5013                // done second because the memcpy will write garbage to these bytes.
5014            }
5015            Ok(())
5016        }
5017    }
5018    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
5019        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D> for (T0,)
5020    {
5021        #[inline]
5022        unsafe fn encode(
5023            self,
5024            encoder: &mut fidl::encoding::Encoder<'_, D>,
5025            offset: usize,
5026            depth: fidl::encoding::Depth,
5027        ) -> fidl::Result<()> {
5028            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5029            // Zero out padding regions. There's no need to apply masks
5030            // because the unmasked parts will be overwritten by fields.
5031            // Write the fields.
5032            self.0.encode(encoder, offset + 0, depth)?;
5033            Ok(())
5034        }
5035    }
5036
5037    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5038        for RingBufferSetActiveChannelsRequest
5039    {
5040        #[inline(always)]
5041        fn new_empty() -> Self {
5042            Self { active_channels_bitmask: fidl::new_empty!(u64, D) }
5043        }
5044
5045        #[inline]
5046        unsafe fn decode(
5047            &mut self,
5048            decoder: &mut fidl::encoding::Decoder<'_, D>,
5049            offset: usize,
5050            _depth: fidl::encoding::Depth,
5051        ) -> fidl::Result<()> {
5052            decoder.debug_check_bounds::<Self>(offset);
5053            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5054            // Verify that padding bytes are zero.
5055            // Copy from the buffer into the object.
5056            unsafe {
5057                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5058            }
5059            Ok(())
5060        }
5061    }
5062
5063    impl fidl::encoding::ValueTypeMarker for RingBufferStartResponse {
5064        type Borrowed<'a> = &'a Self;
5065        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5066            value
5067        }
5068    }
5069
5070    unsafe impl fidl::encoding::TypeMarker for RingBufferStartResponse {
5071        type Owned = Self;
5072
5073        #[inline(always)]
5074        fn inline_align(_context: fidl::encoding::Context) -> usize {
5075            8
5076        }
5077
5078        #[inline(always)]
5079        fn inline_size(_context: fidl::encoding::Context) -> usize {
5080            8
5081        }
5082        #[inline(always)]
5083        fn encode_is_copy() -> bool {
5084            true
5085        }
5086
5087        #[inline(always)]
5088        fn decode_is_copy() -> bool {
5089            true
5090        }
5091    }
5092
5093    unsafe impl<D: fidl::encoding::ResourceDialect>
5094        fidl::encoding::Encode<RingBufferStartResponse, D> for &RingBufferStartResponse
5095    {
5096        #[inline]
5097        unsafe fn encode(
5098            self,
5099            encoder: &mut fidl::encoding::Encoder<'_, D>,
5100            offset: usize,
5101            _depth: fidl::encoding::Depth,
5102        ) -> fidl::Result<()> {
5103            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5104            unsafe {
5105                // Copy the object into the buffer.
5106                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5107                (buf_ptr as *mut RingBufferStartResponse)
5108                    .write_unaligned((self as *const RingBufferStartResponse).read());
5109                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5110                // done second because the memcpy will write garbage to these bytes.
5111            }
5112            Ok(())
5113        }
5114    }
5115    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5116        fidl::encoding::Encode<RingBufferStartResponse, D> for (T0,)
5117    {
5118        #[inline]
5119        unsafe fn encode(
5120            self,
5121            encoder: &mut fidl::encoding::Encoder<'_, D>,
5122            offset: usize,
5123            depth: fidl::encoding::Depth,
5124        ) -> fidl::Result<()> {
5125            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5126            // Zero out padding regions. There's no need to apply masks
5127            // because the unmasked parts will be overwritten by fields.
5128            // Write the fields.
5129            self.0.encode(encoder, offset + 0, depth)?;
5130            Ok(())
5131        }
5132    }
5133
5134    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5135        for RingBufferStartResponse
5136    {
5137        #[inline(always)]
5138        fn new_empty() -> Self {
5139            Self { start_time: fidl::new_empty!(i64, D) }
5140        }
5141
5142        #[inline]
5143        unsafe fn decode(
5144            &mut self,
5145            decoder: &mut fidl::encoding::Decoder<'_, D>,
5146            offset: usize,
5147            _depth: fidl::encoding::Depth,
5148        ) -> fidl::Result<()> {
5149            decoder.debug_check_bounds::<Self>(offset);
5150            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5151            // Verify that padding bytes are zero.
5152            // Copy from the buffer into the object.
5153            unsafe {
5154                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5155            }
5156            Ok(())
5157        }
5158    }
5159
5160    impl fidl::encoding::ValueTypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5161        type Borrowed<'a> = &'a Self;
5162        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5163            value
5164        }
5165    }
5166
5167    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5168        type Owned = Self;
5169
5170        #[inline(always)]
5171        fn inline_align(_context: fidl::encoding::Context) -> usize {
5172            8
5173        }
5174
5175        #[inline(always)]
5176        fn inline_size(_context: fidl::encoding::Context) -> usize {
5177            16
5178        }
5179    }
5180
5181    unsafe impl<D: fidl::encoding::ResourceDialect>
5182        fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D>
5183        for &RingBufferWatchClockRecoveryPositionInfoResponse
5184    {
5185        #[inline]
5186        unsafe fn encode(
5187            self,
5188            encoder: &mut fidl::encoding::Encoder<'_, D>,
5189            offset: usize,
5190            _depth: fidl::encoding::Depth,
5191        ) -> fidl::Result<()> {
5192            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5193            unsafe {
5194                // Copy the object into the buffer.
5195                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5196                (buf_ptr as *mut RingBufferWatchClockRecoveryPositionInfoResponse).write_unaligned(
5197                    (self as *const RingBufferWatchClockRecoveryPositionInfoResponse).read(),
5198                );
5199                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5200                // done second because the memcpy will write garbage to these bytes.
5201                let padding_ptr = buf_ptr.offset(8) as *mut u64;
5202                let padding_mask = 0xffffffff00000000u64;
5203                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5204            }
5205            Ok(())
5206        }
5207    }
5208    unsafe impl<
5209        D: fidl::encoding::ResourceDialect,
5210        T0: fidl::encoding::Encode<RingBufferPositionInfo, D>,
5211    > fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D> for (T0,)
5212    {
5213        #[inline]
5214        unsafe fn encode(
5215            self,
5216            encoder: &mut fidl::encoding::Encoder<'_, D>,
5217            offset: usize,
5218            depth: fidl::encoding::Depth,
5219        ) -> fidl::Result<()> {
5220            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5221            // Zero out padding regions. There's no need to apply masks
5222            // because the unmasked parts will be overwritten by fields.
5223            // Write the fields.
5224            self.0.encode(encoder, offset + 0, depth)?;
5225            Ok(())
5226        }
5227    }
5228
5229    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5230        for RingBufferWatchClockRecoveryPositionInfoResponse
5231    {
5232        #[inline(always)]
5233        fn new_empty() -> Self {
5234            Self { position_info: fidl::new_empty!(RingBufferPositionInfo, D) }
5235        }
5236
5237        #[inline]
5238        unsafe fn decode(
5239            &mut self,
5240            decoder: &mut fidl::encoding::Decoder<'_, D>,
5241            offset: usize,
5242            _depth: fidl::encoding::Depth,
5243        ) -> fidl::Result<()> {
5244            decoder.debug_check_bounds::<Self>(offset);
5245            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5246            // Verify that padding bytes are zero.
5247            let ptr = unsafe { buf_ptr.offset(8) };
5248            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5249            let mask = 0xffffffff00000000u64;
5250            let maskedval = padval & mask;
5251            if maskedval != 0 {
5252                return Err(fidl::Error::NonZeroPadding {
5253                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
5254                });
5255            }
5256            // Copy from the buffer into the object.
5257            unsafe {
5258                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
5259            }
5260            Ok(())
5261        }
5262    }
5263
5264    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsResponse {
5265        type Borrowed<'a> = &'a Self;
5266        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5267            value
5268        }
5269    }
5270
5271    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsResponse {
5272        type Owned = Self;
5273
5274        #[inline(always)]
5275        fn inline_align(_context: fidl::encoding::Context) -> usize {
5276            8
5277        }
5278
5279        #[inline(always)]
5280        fn inline_size(_context: fidl::encoding::Context) -> usize {
5281            8
5282        }
5283        #[inline(always)]
5284        fn encode_is_copy() -> bool {
5285            true
5286        }
5287
5288        #[inline(always)]
5289        fn decode_is_copy() -> bool {
5290            true
5291        }
5292    }
5293
5294    unsafe impl<D: fidl::encoding::ResourceDialect>
5295        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D>
5296        for &RingBufferSetActiveChannelsResponse
5297    {
5298        #[inline]
5299        unsafe fn encode(
5300            self,
5301            encoder: &mut fidl::encoding::Encoder<'_, D>,
5302            offset: usize,
5303            _depth: fidl::encoding::Depth,
5304        ) -> fidl::Result<()> {
5305            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5306            unsafe {
5307                // Copy the object into the buffer.
5308                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5309                (buf_ptr as *mut RingBufferSetActiveChannelsResponse)
5310                    .write_unaligned((self as *const RingBufferSetActiveChannelsResponse).read());
5311                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5312                // done second because the memcpy will write garbage to these bytes.
5313            }
5314            Ok(())
5315        }
5316    }
5317    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5318        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D> for (T0,)
5319    {
5320        #[inline]
5321        unsafe fn encode(
5322            self,
5323            encoder: &mut fidl::encoding::Encoder<'_, D>,
5324            offset: usize,
5325            depth: fidl::encoding::Depth,
5326        ) -> fidl::Result<()> {
5327            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5328            // Zero out padding regions. There's no need to apply masks
5329            // because the unmasked parts will be overwritten by fields.
5330            // Write the fields.
5331            self.0.encode(encoder, offset + 0, depth)?;
5332            Ok(())
5333        }
5334    }
5335
5336    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5337        for RingBufferSetActiveChannelsResponse
5338    {
5339        #[inline(always)]
5340        fn new_empty() -> Self {
5341            Self { set_time: fidl::new_empty!(i64, D) }
5342        }
5343
5344        #[inline]
5345        unsafe fn decode(
5346            &mut self,
5347            decoder: &mut fidl::encoding::Decoder<'_, D>,
5348            offset: usize,
5349            _depth: fidl::encoding::Depth,
5350        ) -> fidl::Result<()> {
5351            decoder.debug_check_bounds::<Self>(offset);
5352            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5353            // Verify that padding bytes are zero.
5354            // Copy from the buffer into the object.
5355            unsafe {
5356                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5357            }
5358            Ok(())
5359        }
5360    }
5361
5362    impl fidl::encoding::ValueTypeMarker for RingBufferWatchDelayInfoResponse {
5363        type Borrowed<'a> = &'a Self;
5364        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5365            value
5366        }
5367    }
5368
5369    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchDelayInfoResponse {
5370        type Owned = Self;
5371
5372        #[inline(always)]
5373        fn inline_align(_context: fidl::encoding::Context) -> usize {
5374            8
5375        }
5376
5377        #[inline(always)]
5378        fn inline_size(_context: fidl::encoding::Context) -> usize {
5379            16
5380        }
5381    }
5382
5383    unsafe impl<D: fidl::encoding::ResourceDialect>
5384        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D>
5385        for &RingBufferWatchDelayInfoResponse
5386    {
5387        #[inline]
5388        unsafe fn encode(
5389            self,
5390            encoder: &mut fidl::encoding::Encoder<'_, D>,
5391            offset: usize,
5392            _depth: fidl::encoding::Depth,
5393        ) -> fidl::Result<()> {
5394            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5395            // Delegate to tuple encoding.
5396            fidl::encoding::Encode::<RingBufferWatchDelayInfoResponse, D>::encode(
5397                (<DelayInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.delay_info),),
5398                encoder,
5399                offset,
5400                _depth,
5401            )
5402        }
5403    }
5404    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DelayInfo, D>>
5405        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D> for (T0,)
5406    {
5407        #[inline]
5408        unsafe fn encode(
5409            self,
5410            encoder: &mut fidl::encoding::Encoder<'_, D>,
5411            offset: usize,
5412            depth: fidl::encoding::Depth,
5413        ) -> fidl::Result<()> {
5414            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5415            // Zero out padding regions. There's no need to apply masks
5416            // because the unmasked parts will be overwritten by fields.
5417            // Write the fields.
5418            self.0.encode(encoder, offset + 0, depth)?;
5419            Ok(())
5420        }
5421    }
5422
5423    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5424        for RingBufferWatchDelayInfoResponse
5425    {
5426        #[inline(always)]
5427        fn new_empty() -> Self {
5428            Self { delay_info: fidl::new_empty!(DelayInfo, D) }
5429        }
5430
5431        #[inline]
5432        unsafe fn decode(
5433            &mut self,
5434            decoder: &mut fidl::encoding::Decoder<'_, D>,
5435            offset: usize,
5436            _depth: fidl::encoding::Depth,
5437        ) -> fidl::Result<()> {
5438            decoder.debug_check_bounds::<Self>(offset);
5439            // Verify that padding bytes are zero.
5440            fidl::decode!(DelayInfo, D, &mut self.delay_info, decoder, offset + 0, _depth)?;
5441            Ok(())
5442        }
5443    }
5444
5445    impl fidl::encoding::ValueTypeMarker for StreamConfigGetPropertiesResponse {
5446        type Borrowed<'a> = &'a Self;
5447        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5448            value
5449        }
5450    }
5451
5452    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetPropertiesResponse {
5453        type Owned = Self;
5454
5455        #[inline(always)]
5456        fn inline_align(_context: fidl::encoding::Context) -> usize {
5457            8
5458        }
5459
5460        #[inline(always)]
5461        fn inline_size(_context: fidl::encoding::Context) -> usize {
5462            16
5463        }
5464    }
5465
5466    unsafe impl<D: fidl::encoding::ResourceDialect>
5467        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D>
5468        for &StreamConfigGetPropertiesResponse
5469    {
5470        #[inline]
5471        unsafe fn encode(
5472            self,
5473            encoder: &mut fidl::encoding::Encoder<'_, D>,
5474            offset: usize,
5475            _depth: fidl::encoding::Depth,
5476        ) -> fidl::Result<()> {
5477            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5478            // Delegate to tuple encoding.
5479            fidl::encoding::Encode::<StreamConfigGetPropertiesResponse, D>::encode(
5480                (<StreamProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
5481                encoder,
5482                offset,
5483                _depth,
5484            )
5485        }
5486    }
5487    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamProperties, D>>
5488        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D> for (T0,)
5489    {
5490        #[inline]
5491        unsafe fn encode(
5492            self,
5493            encoder: &mut fidl::encoding::Encoder<'_, D>,
5494            offset: usize,
5495            depth: fidl::encoding::Depth,
5496        ) -> fidl::Result<()> {
5497            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5498            // Zero out padding regions. There's no need to apply masks
5499            // because the unmasked parts will be overwritten by fields.
5500            // Write the fields.
5501            self.0.encode(encoder, offset + 0, depth)?;
5502            Ok(())
5503        }
5504    }
5505
5506    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5507        for StreamConfigGetPropertiesResponse
5508    {
5509        #[inline(always)]
5510        fn new_empty() -> Self {
5511            Self { properties: fidl::new_empty!(StreamProperties, D) }
5512        }
5513
5514        #[inline]
5515        unsafe fn decode(
5516            &mut self,
5517            decoder: &mut fidl::encoding::Decoder<'_, D>,
5518            offset: usize,
5519            _depth: fidl::encoding::Depth,
5520        ) -> fidl::Result<()> {
5521            decoder.debug_check_bounds::<Self>(offset);
5522            // Verify that padding bytes are zero.
5523            fidl::decode!(StreamProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
5524            Ok(())
5525        }
5526    }
5527
5528    impl fidl::encoding::ValueTypeMarker for StreamConfigGetSupportedFormatsResponse {
5529        type Borrowed<'a> = &'a Self;
5530        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5531            value
5532        }
5533    }
5534
5535    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetSupportedFormatsResponse {
5536        type Owned = Self;
5537
5538        #[inline(always)]
5539        fn inline_align(_context: fidl::encoding::Context) -> usize {
5540            8
5541        }
5542
5543        #[inline(always)]
5544        fn inline_size(_context: fidl::encoding::Context) -> usize {
5545            16
5546        }
5547    }
5548
5549    unsafe impl<D: fidl::encoding::ResourceDialect>
5550        fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D>
5551        for &StreamConfigGetSupportedFormatsResponse
5552    {
5553        #[inline]
5554        unsafe fn encode(
5555            self,
5556            encoder: &mut fidl::encoding::Encoder<'_, D>,
5557            offset: usize,
5558            _depth: fidl::encoding::Depth,
5559        ) -> fidl::Result<()> {
5560            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5561            // Delegate to tuple encoding.
5562            fidl::encoding::Encode::<StreamConfigGetSupportedFormatsResponse, D>::encode(
5563                (
5564                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.supported_formats),
5565                ),
5566                encoder, offset, _depth
5567            )
5568        }
5569    }
5570    unsafe impl<
5571        D: fidl::encoding::ResourceDialect,
5572        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
5573    > fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D> for (T0,)
5574    {
5575        #[inline]
5576        unsafe fn encode(
5577            self,
5578            encoder: &mut fidl::encoding::Encoder<'_, D>,
5579            offset: usize,
5580            depth: fidl::encoding::Depth,
5581        ) -> fidl::Result<()> {
5582            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5583            // Zero out padding regions. There's no need to apply masks
5584            // because the unmasked parts will be overwritten by fields.
5585            // Write the fields.
5586            self.0.encode(encoder, offset + 0, depth)?;
5587            Ok(())
5588        }
5589    }
5590
5591    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5592        for StreamConfigGetSupportedFormatsResponse
5593    {
5594        #[inline(always)]
5595        fn new_empty() -> Self {
5596            Self {
5597                supported_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
5598            }
5599        }
5600
5601        #[inline]
5602        unsafe fn decode(
5603            &mut self,
5604            decoder: &mut fidl::encoding::Decoder<'_, D>,
5605            offset: usize,
5606            _depth: fidl::encoding::Depth,
5607        ) -> fidl::Result<()> {
5608            decoder.debug_check_bounds::<Self>(offset);
5609            // Verify that padding bytes are zero.
5610            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.supported_formats, decoder, offset + 0, _depth)?;
5611            Ok(())
5612        }
5613    }
5614
5615    impl fidl::encoding::ValueTypeMarker for StreamConfigSetGainRequest {
5616        type Borrowed<'a> = &'a Self;
5617        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5618            value
5619        }
5620    }
5621
5622    unsafe impl fidl::encoding::TypeMarker for StreamConfigSetGainRequest {
5623        type Owned = Self;
5624
5625        #[inline(always)]
5626        fn inline_align(_context: fidl::encoding::Context) -> usize {
5627            8
5628        }
5629
5630        #[inline(always)]
5631        fn inline_size(_context: fidl::encoding::Context) -> usize {
5632            16
5633        }
5634    }
5635
5636    unsafe impl<D: fidl::encoding::ResourceDialect>
5637        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for &StreamConfigSetGainRequest
5638    {
5639        #[inline]
5640        unsafe fn encode(
5641            self,
5642            encoder: &mut fidl::encoding::Encoder<'_, D>,
5643            offset: usize,
5644            _depth: fidl::encoding::Depth,
5645        ) -> fidl::Result<()> {
5646            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5647            // Delegate to tuple encoding.
5648            fidl::encoding::Encode::<StreamConfigSetGainRequest, D>::encode(
5649                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.target_state),),
5650                encoder,
5651                offset,
5652                _depth,
5653            )
5654        }
5655    }
5656    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5657        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for (T0,)
5658    {
5659        #[inline]
5660        unsafe fn encode(
5661            self,
5662            encoder: &mut fidl::encoding::Encoder<'_, D>,
5663            offset: usize,
5664            depth: fidl::encoding::Depth,
5665        ) -> fidl::Result<()> {
5666            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5667            // Zero out padding regions. There's no need to apply masks
5668            // because the unmasked parts will be overwritten by fields.
5669            // Write the fields.
5670            self.0.encode(encoder, offset + 0, depth)?;
5671            Ok(())
5672        }
5673    }
5674
5675    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5676        for StreamConfigSetGainRequest
5677    {
5678        #[inline(always)]
5679        fn new_empty() -> Self {
5680            Self { target_state: fidl::new_empty!(GainState, D) }
5681        }
5682
5683        #[inline]
5684        unsafe fn decode(
5685            &mut self,
5686            decoder: &mut fidl::encoding::Decoder<'_, D>,
5687            offset: usize,
5688            _depth: fidl::encoding::Depth,
5689        ) -> fidl::Result<()> {
5690            decoder.debug_check_bounds::<Self>(offset);
5691            // Verify that padding bytes are zero.
5692            fidl::decode!(GainState, D, &mut self.target_state, decoder, offset + 0, _depth)?;
5693            Ok(())
5694        }
5695    }
5696
5697    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchGainStateResponse {
5698        type Borrowed<'a> = &'a Self;
5699        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5700            value
5701        }
5702    }
5703
5704    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchGainStateResponse {
5705        type Owned = Self;
5706
5707        #[inline(always)]
5708        fn inline_align(_context: fidl::encoding::Context) -> usize {
5709            8
5710        }
5711
5712        #[inline(always)]
5713        fn inline_size(_context: fidl::encoding::Context) -> usize {
5714            16
5715        }
5716    }
5717
5718    unsafe impl<D: fidl::encoding::ResourceDialect>
5719        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D>
5720        for &StreamConfigWatchGainStateResponse
5721    {
5722        #[inline]
5723        unsafe fn encode(
5724            self,
5725            encoder: &mut fidl::encoding::Encoder<'_, D>,
5726            offset: usize,
5727            _depth: fidl::encoding::Depth,
5728        ) -> fidl::Result<()> {
5729            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5730            // Delegate to tuple encoding.
5731            fidl::encoding::Encode::<StreamConfigWatchGainStateResponse, D>::encode(
5732                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_state),),
5733                encoder,
5734                offset,
5735                _depth,
5736            )
5737        }
5738    }
5739    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5740        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D> for (T0,)
5741    {
5742        #[inline]
5743        unsafe fn encode(
5744            self,
5745            encoder: &mut fidl::encoding::Encoder<'_, D>,
5746            offset: usize,
5747            depth: fidl::encoding::Depth,
5748        ) -> fidl::Result<()> {
5749            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5750            // Zero out padding regions. There's no need to apply masks
5751            // because the unmasked parts will be overwritten by fields.
5752            // Write the fields.
5753            self.0.encode(encoder, offset + 0, depth)?;
5754            Ok(())
5755        }
5756    }
5757
5758    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5759        for StreamConfigWatchGainStateResponse
5760    {
5761        #[inline(always)]
5762        fn new_empty() -> Self {
5763            Self { gain_state: fidl::new_empty!(GainState, D) }
5764        }
5765
5766        #[inline]
5767        unsafe fn decode(
5768            &mut self,
5769            decoder: &mut fidl::encoding::Decoder<'_, D>,
5770            offset: usize,
5771            _depth: fidl::encoding::Depth,
5772        ) -> fidl::Result<()> {
5773            decoder.debug_check_bounds::<Self>(offset);
5774            // Verify that padding bytes are zero.
5775            fidl::decode!(GainState, D, &mut self.gain_state, decoder, offset + 0, _depth)?;
5776            Ok(())
5777        }
5778    }
5779
5780    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchPlugStateResponse {
5781        type Borrowed<'a> = &'a Self;
5782        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5783            value
5784        }
5785    }
5786
5787    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchPlugStateResponse {
5788        type Owned = Self;
5789
5790        #[inline(always)]
5791        fn inline_align(_context: fidl::encoding::Context) -> usize {
5792            8
5793        }
5794
5795        #[inline(always)]
5796        fn inline_size(_context: fidl::encoding::Context) -> usize {
5797            16
5798        }
5799    }
5800
5801    unsafe impl<D: fidl::encoding::ResourceDialect>
5802        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D>
5803        for &StreamConfigWatchPlugStateResponse
5804    {
5805        #[inline]
5806        unsafe fn encode(
5807            self,
5808            encoder: &mut fidl::encoding::Encoder<'_, D>,
5809            offset: usize,
5810            _depth: fidl::encoding::Depth,
5811        ) -> fidl::Result<()> {
5812            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5813            // Delegate to tuple encoding.
5814            fidl::encoding::Encode::<StreamConfigWatchPlugStateResponse, D>::encode(
5815                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
5816                encoder,
5817                offset,
5818                _depth,
5819            )
5820        }
5821    }
5822    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
5823        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D> for (T0,)
5824    {
5825        #[inline]
5826        unsafe fn encode(
5827            self,
5828            encoder: &mut fidl::encoding::Encoder<'_, D>,
5829            offset: usize,
5830            depth: fidl::encoding::Depth,
5831        ) -> fidl::Result<()> {
5832            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5833            // Zero out padding regions. There's no need to apply masks
5834            // because the unmasked parts will be overwritten by fields.
5835            // Write the fields.
5836            self.0.encode(encoder, offset + 0, depth)?;
5837            Ok(())
5838        }
5839    }
5840
5841    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5842        for StreamConfigWatchPlugStateResponse
5843    {
5844        #[inline(always)]
5845        fn new_empty() -> Self {
5846            Self { plug_state: fidl::new_empty!(PlugState, D) }
5847        }
5848
5849        #[inline]
5850        unsafe fn decode(
5851            &mut self,
5852            decoder: &mut fidl::encoding::Decoder<'_, D>,
5853            offset: usize,
5854            _depth: fidl::encoding::Depth,
5855        ) -> fidl::Result<()> {
5856            decoder.debug_check_bounds::<Self>(offset);
5857            // Verify that padding bytes are zero.
5858            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
5859            Ok(())
5860        }
5861    }
5862
5863    impl AllocateVmosConfig {
5864        #[inline(always)]
5865        fn max_ordinal_present(&self) -> u64 {
5866            if let Some(_) = self.vmo_count {
5867                return 2;
5868            }
5869            if let Some(_) = self.min_vmo_size {
5870                return 1;
5871            }
5872            0
5873        }
5874    }
5875
5876    impl fidl::encoding::ValueTypeMarker for AllocateVmosConfig {
5877        type Borrowed<'a> = &'a Self;
5878        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5879            value
5880        }
5881    }
5882
5883    unsafe impl fidl::encoding::TypeMarker for AllocateVmosConfig {
5884        type Owned = Self;
5885
5886        #[inline(always)]
5887        fn inline_align(_context: fidl::encoding::Context) -> usize {
5888            8
5889        }
5890
5891        #[inline(always)]
5892        fn inline_size(_context: fidl::encoding::Context) -> usize {
5893            16
5894        }
5895    }
5896
5897    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AllocateVmosConfig, D>
5898        for &AllocateVmosConfig
5899    {
5900        unsafe fn encode(
5901            self,
5902            encoder: &mut fidl::encoding::Encoder<'_, D>,
5903            offset: usize,
5904            mut depth: fidl::encoding::Depth,
5905        ) -> fidl::Result<()> {
5906            encoder.debug_check_bounds::<AllocateVmosConfig>(offset);
5907            // Vector header
5908            let max_ordinal: u64 = self.max_ordinal_present();
5909            encoder.write_num(max_ordinal, offset);
5910            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5911            // Calling encoder.out_of_line_offset(0) is not allowed.
5912            if max_ordinal == 0 {
5913                return Ok(());
5914            }
5915            depth.increment()?;
5916            let envelope_size = 8;
5917            let bytes_len = max_ordinal as usize * envelope_size;
5918            #[allow(unused_variables)]
5919            let offset = encoder.out_of_line_offset(bytes_len);
5920            let mut _prev_end_offset: usize = 0;
5921            if 1 > max_ordinal {
5922                return Ok(());
5923            }
5924
5925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5926            // are envelope_size bytes.
5927            let cur_offset: usize = (1 - 1) * envelope_size;
5928
5929            // Zero reserved fields.
5930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5931
5932            // Safety:
5933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5935            //   envelope_size bytes, there is always sufficient room.
5936            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5937                self.min_vmo_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5938                encoder,
5939                offset + cur_offset,
5940                depth,
5941            )?;
5942
5943            _prev_end_offset = cur_offset + envelope_size;
5944            if 2 > max_ordinal {
5945                return Ok(());
5946            }
5947
5948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5949            // are envelope_size bytes.
5950            let cur_offset: usize = (2 - 1) * envelope_size;
5951
5952            // Zero reserved fields.
5953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5954
5955            // Safety:
5956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5958            //   envelope_size bytes, there is always sufficient room.
5959            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5960                self.vmo_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5961                encoder,
5962                offset + cur_offset,
5963                depth,
5964            )?;
5965
5966            _prev_end_offset = cur_offset + envelope_size;
5967
5968            Ok(())
5969        }
5970    }
5971
5972    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AllocateVmosConfig {
5973        #[inline(always)]
5974        fn new_empty() -> Self {
5975            Self::default()
5976        }
5977
5978        unsafe fn decode(
5979            &mut self,
5980            decoder: &mut fidl::encoding::Decoder<'_, D>,
5981            offset: usize,
5982            mut depth: fidl::encoding::Depth,
5983        ) -> fidl::Result<()> {
5984            decoder.debug_check_bounds::<Self>(offset);
5985            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5986                None => return Err(fidl::Error::NotNullable),
5987                Some(len) => len,
5988            };
5989            // Calling decoder.out_of_line_offset(0) is not allowed.
5990            if len == 0 {
5991                return Ok(());
5992            };
5993            depth.increment()?;
5994            let envelope_size = 8;
5995            let bytes_len = len * envelope_size;
5996            let offset = decoder.out_of_line_offset(bytes_len)?;
5997            // Decode the envelope for each type.
5998            let mut _next_ordinal_to_read = 0;
5999            let mut next_offset = offset;
6000            let end_offset = offset + bytes_len;
6001            _next_ordinal_to_read += 1;
6002            if next_offset >= end_offset {
6003                return Ok(());
6004            }
6005
6006            // Decode unknown envelopes for gaps in ordinals.
6007            while _next_ordinal_to_read < 1 {
6008                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6009                _next_ordinal_to_read += 1;
6010                next_offset += envelope_size;
6011            }
6012
6013            let next_out_of_line = decoder.next_out_of_line();
6014            let handles_before = decoder.remaining_handles();
6015            if let Some((inlined, num_bytes, num_handles)) =
6016                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6017            {
6018                let member_inline_size =
6019                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6020                if inlined != (member_inline_size <= 4) {
6021                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6022                }
6023                let inner_offset;
6024                let mut inner_depth = depth.clone();
6025                if inlined {
6026                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6027                    inner_offset = next_offset;
6028                } else {
6029                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6030                    inner_depth.increment()?;
6031                }
6032                let val_ref = self.min_vmo_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
6033                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6034                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6035                {
6036                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6037                }
6038                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6039                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6040                }
6041            }
6042
6043            next_offset += envelope_size;
6044            _next_ordinal_to_read += 1;
6045            if next_offset >= end_offset {
6046                return Ok(());
6047            }
6048
6049            // Decode unknown envelopes for gaps in ordinals.
6050            while _next_ordinal_to_read < 2 {
6051                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6052                _next_ordinal_to_read += 1;
6053                next_offset += envelope_size;
6054            }
6055
6056            let next_out_of_line = decoder.next_out_of_line();
6057            let handles_before = decoder.remaining_handles();
6058            if let Some((inlined, num_bytes, num_handles)) =
6059                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6060            {
6061                let member_inline_size =
6062                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6063                if inlined != (member_inline_size <= 4) {
6064                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6065                }
6066                let inner_offset;
6067                let mut inner_depth = depth.clone();
6068                if inlined {
6069                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6070                    inner_offset = next_offset;
6071                } else {
6072                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6073                    inner_depth.increment()?;
6074                }
6075                let val_ref = self.vmo_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
6076                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6077                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6078                {
6079                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6080                }
6081                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6082                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6083                }
6084            }
6085
6086            next_offset += envelope_size;
6087
6088            // Decode the remaining unknown envelopes.
6089            while next_offset < end_offset {
6090                _next_ordinal_to_read += 1;
6091                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6092                next_offset += envelope_size;
6093            }
6094
6095            Ok(())
6096        }
6097    }
6098
6099    impl ChannelAttributes {
6100        #[inline(always)]
6101        fn max_ordinal_present(&self) -> u64 {
6102            if let Some(_) = self.max_frequency {
6103                return 2;
6104            }
6105            if let Some(_) = self.min_frequency {
6106                return 1;
6107            }
6108            0
6109        }
6110    }
6111
6112    impl fidl::encoding::ValueTypeMarker for ChannelAttributes {
6113        type Borrowed<'a> = &'a Self;
6114        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6115            value
6116        }
6117    }
6118
6119    unsafe impl fidl::encoding::TypeMarker for ChannelAttributes {
6120        type Owned = Self;
6121
6122        #[inline(always)]
6123        fn inline_align(_context: fidl::encoding::Context) -> usize {
6124            8
6125        }
6126
6127        #[inline(always)]
6128        fn inline_size(_context: fidl::encoding::Context) -> usize {
6129            16
6130        }
6131    }
6132
6133    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelAttributes, D>
6134        for &ChannelAttributes
6135    {
6136        unsafe fn encode(
6137            self,
6138            encoder: &mut fidl::encoding::Encoder<'_, D>,
6139            offset: usize,
6140            mut depth: fidl::encoding::Depth,
6141        ) -> fidl::Result<()> {
6142            encoder.debug_check_bounds::<ChannelAttributes>(offset);
6143            // Vector header
6144            let max_ordinal: u64 = self.max_ordinal_present();
6145            encoder.write_num(max_ordinal, offset);
6146            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6147            // Calling encoder.out_of_line_offset(0) is not allowed.
6148            if max_ordinal == 0 {
6149                return Ok(());
6150            }
6151            depth.increment()?;
6152            let envelope_size = 8;
6153            let bytes_len = max_ordinal as usize * envelope_size;
6154            #[allow(unused_variables)]
6155            let offset = encoder.out_of_line_offset(bytes_len);
6156            let mut _prev_end_offset: usize = 0;
6157            if 1 > max_ordinal {
6158                return Ok(());
6159            }
6160
6161            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6162            // are envelope_size bytes.
6163            let cur_offset: usize = (1 - 1) * envelope_size;
6164
6165            // Zero reserved fields.
6166            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6167
6168            // Safety:
6169            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6170            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6171            //   envelope_size bytes, there is always sufficient room.
6172            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6173                self.min_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6174                encoder,
6175                offset + cur_offset,
6176                depth,
6177            )?;
6178
6179            _prev_end_offset = cur_offset + envelope_size;
6180            if 2 > max_ordinal {
6181                return Ok(());
6182            }
6183
6184            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6185            // are envelope_size bytes.
6186            let cur_offset: usize = (2 - 1) * envelope_size;
6187
6188            // Zero reserved fields.
6189            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6190
6191            // Safety:
6192            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6193            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6194            //   envelope_size bytes, there is always sufficient room.
6195            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6196                self.max_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6197                encoder,
6198                offset + cur_offset,
6199                depth,
6200            )?;
6201
6202            _prev_end_offset = cur_offset + envelope_size;
6203
6204            Ok(())
6205        }
6206    }
6207
6208    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelAttributes {
6209        #[inline(always)]
6210        fn new_empty() -> Self {
6211            Self::default()
6212        }
6213
6214        unsafe fn decode(
6215            &mut self,
6216            decoder: &mut fidl::encoding::Decoder<'_, D>,
6217            offset: usize,
6218            mut depth: fidl::encoding::Depth,
6219        ) -> fidl::Result<()> {
6220            decoder.debug_check_bounds::<Self>(offset);
6221            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6222                None => return Err(fidl::Error::NotNullable),
6223                Some(len) => len,
6224            };
6225            // Calling decoder.out_of_line_offset(0) is not allowed.
6226            if len == 0 {
6227                return Ok(());
6228            };
6229            depth.increment()?;
6230            let envelope_size = 8;
6231            let bytes_len = len * envelope_size;
6232            let offset = decoder.out_of_line_offset(bytes_len)?;
6233            // Decode the envelope for each type.
6234            let mut _next_ordinal_to_read = 0;
6235            let mut next_offset = offset;
6236            let end_offset = offset + bytes_len;
6237            _next_ordinal_to_read += 1;
6238            if next_offset >= end_offset {
6239                return Ok(());
6240            }
6241
6242            // Decode unknown envelopes for gaps in ordinals.
6243            while _next_ordinal_to_read < 1 {
6244                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6245                _next_ordinal_to_read += 1;
6246                next_offset += envelope_size;
6247            }
6248
6249            let next_out_of_line = decoder.next_out_of_line();
6250            let handles_before = decoder.remaining_handles();
6251            if let Some((inlined, num_bytes, num_handles)) =
6252                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6253            {
6254                let member_inline_size =
6255                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6256                if inlined != (member_inline_size <= 4) {
6257                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6258                }
6259                let inner_offset;
6260                let mut inner_depth = depth.clone();
6261                if inlined {
6262                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6263                    inner_offset = next_offset;
6264                } else {
6265                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6266                    inner_depth.increment()?;
6267                }
6268                let val_ref = self.min_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6269                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6270                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6271                {
6272                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6273                }
6274                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6275                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6276                }
6277            }
6278
6279            next_offset += envelope_size;
6280            _next_ordinal_to_read += 1;
6281            if next_offset >= end_offset {
6282                return Ok(());
6283            }
6284
6285            // Decode unknown envelopes for gaps in ordinals.
6286            while _next_ordinal_to_read < 2 {
6287                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6288                _next_ordinal_to_read += 1;
6289                next_offset += envelope_size;
6290            }
6291
6292            let next_out_of_line = decoder.next_out_of_line();
6293            let handles_before = decoder.remaining_handles();
6294            if let Some((inlined, num_bytes, num_handles)) =
6295                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6296            {
6297                let member_inline_size =
6298                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6299                if inlined != (member_inline_size <= 4) {
6300                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6301                }
6302                let inner_offset;
6303                let mut inner_depth = depth.clone();
6304                if inlined {
6305                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6306                    inner_offset = next_offset;
6307                } else {
6308                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6309                    inner_depth.increment()?;
6310                }
6311                let val_ref = self.max_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6312                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6313                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6314                {
6315                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6316                }
6317                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6318                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6319                }
6320            }
6321
6322            next_offset += envelope_size;
6323
6324            // Decode the remaining unknown envelopes.
6325            while next_offset < end_offset {
6326                _next_ordinal_to_read += 1;
6327                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6328                next_offset += envelope_size;
6329            }
6330
6331            Ok(())
6332        }
6333    }
6334
6335    impl ChannelSet {
6336        #[inline(always)]
6337        fn max_ordinal_present(&self) -> u64 {
6338            if let Some(_) = self.attributes {
6339                return 1;
6340            }
6341            0
6342        }
6343    }
6344
6345    impl fidl::encoding::ValueTypeMarker for ChannelSet {
6346        type Borrowed<'a> = &'a Self;
6347        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6348            value
6349        }
6350    }
6351
6352    unsafe impl fidl::encoding::TypeMarker for ChannelSet {
6353        type Owned = Self;
6354
6355        #[inline(always)]
6356        fn inline_align(_context: fidl::encoding::Context) -> usize {
6357            8
6358        }
6359
6360        #[inline(always)]
6361        fn inline_size(_context: fidl::encoding::Context) -> usize {
6362            16
6363        }
6364    }
6365
6366    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSet, D>
6367        for &ChannelSet
6368    {
6369        unsafe fn encode(
6370            self,
6371            encoder: &mut fidl::encoding::Encoder<'_, D>,
6372            offset: usize,
6373            mut depth: fidl::encoding::Depth,
6374        ) -> fidl::Result<()> {
6375            encoder.debug_check_bounds::<ChannelSet>(offset);
6376            // Vector header
6377            let max_ordinal: u64 = self.max_ordinal_present();
6378            encoder.write_num(max_ordinal, offset);
6379            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6380            // Calling encoder.out_of_line_offset(0) is not allowed.
6381            if max_ordinal == 0 {
6382                return Ok(());
6383            }
6384            depth.increment()?;
6385            let envelope_size = 8;
6386            let bytes_len = max_ordinal as usize * envelope_size;
6387            #[allow(unused_variables)]
6388            let offset = encoder.out_of_line_offset(bytes_len);
6389            let mut _prev_end_offset: usize = 0;
6390            if 1 > max_ordinal {
6391                return Ok(());
6392            }
6393
6394            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6395            // are envelope_size bytes.
6396            let cur_offset: usize = (1 - 1) * envelope_size;
6397
6398            // Zero reserved fields.
6399            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6400
6401            // Safety:
6402            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6403            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6404            //   envelope_size bytes, there is always sufficient room.
6405            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelAttributes, 64>, D>(
6406            self.attributes.as_ref().map(<fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::ValueTypeMarker>::borrow),
6407            encoder, offset + cur_offset, depth
6408        )?;
6409
6410            _prev_end_offset = cur_offset + envelope_size;
6411
6412            Ok(())
6413        }
6414    }
6415
6416    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSet {
6417        #[inline(always)]
6418        fn new_empty() -> Self {
6419            Self::default()
6420        }
6421
6422        unsafe fn decode(
6423            &mut self,
6424            decoder: &mut fidl::encoding::Decoder<'_, D>,
6425            offset: usize,
6426            mut depth: fidl::encoding::Depth,
6427        ) -> fidl::Result<()> {
6428            decoder.debug_check_bounds::<Self>(offset);
6429            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6430                None => return Err(fidl::Error::NotNullable),
6431                Some(len) => len,
6432            };
6433            // Calling decoder.out_of_line_offset(0) is not allowed.
6434            if len == 0 {
6435                return Ok(());
6436            };
6437            depth.increment()?;
6438            let envelope_size = 8;
6439            let bytes_len = len * envelope_size;
6440            let offset = decoder.out_of_line_offset(bytes_len)?;
6441            // Decode the envelope for each type.
6442            let mut _next_ordinal_to_read = 0;
6443            let mut next_offset = offset;
6444            let end_offset = offset + bytes_len;
6445            _next_ordinal_to_read += 1;
6446            if next_offset >= end_offset {
6447                return Ok(());
6448            }
6449
6450            // Decode unknown envelopes for gaps in ordinals.
6451            while _next_ordinal_to_read < 1 {
6452                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6453                _next_ordinal_to_read += 1;
6454                next_offset += envelope_size;
6455            }
6456
6457            let next_out_of_line = decoder.next_out_of_line();
6458            let handles_before = decoder.remaining_handles();
6459            if let Some((inlined, num_bytes, num_handles)) =
6460                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6461            {
6462                let member_inline_size = <fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6463                if inlined != (member_inline_size <= 4) {
6464                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6465                }
6466                let inner_offset;
6467                let mut inner_depth = depth.clone();
6468                if inlined {
6469                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6470                    inner_offset = next_offset;
6471                } else {
6472                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6473                    inner_depth.increment()?;
6474                }
6475                let val_ref = self.attributes.get_or_insert_with(
6476                    || fidl::new_empty!(fidl::encoding::Vector<ChannelAttributes, 64>, D),
6477                );
6478                fidl::decode!(fidl::encoding::Vector<ChannelAttributes, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
6479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6480                {
6481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6482                }
6483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6485                }
6486            }
6487
6488            next_offset += envelope_size;
6489
6490            // Decode the remaining unknown envelopes.
6491            while next_offset < end_offset {
6492                _next_ordinal_to_read += 1;
6493                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6494                next_offset += envelope_size;
6495            }
6496
6497            Ok(())
6498        }
6499    }
6500
6501    impl CodecFormatInfo {
6502        #[inline(always)]
6503        fn max_ordinal_present(&self) -> u64 {
6504            if let Some(_) = self.turn_off_delay {
6505                return 3;
6506            }
6507            if let Some(_) = self.turn_on_delay {
6508                return 2;
6509            }
6510            if let Some(_) = self.external_delay {
6511                return 1;
6512            }
6513            0
6514        }
6515    }
6516
6517    impl fidl::encoding::ValueTypeMarker for CodecFormatInfo {
6518        type Borrowed<'a> = &'a Self;
6519        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6520            value
6521        }
6522    }
6523
6524    unsafe impl fidl::encoding::TypeMarker for CodecFormatInfo {
6525        type Owned = Self;
6526
6527        #[inline(always)]
6528        fn inline_align(_context: fidl::encoding::Context) -> usize {
6529            8
6530        }
6531
6532        #[inline(always)]
6533        fn inline_size(_context: fidl::encoding::Context) -> usize {
6534            16
6535        }
6536    }
6537
6538    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecFormatInfo, D>
6539        for &CodecFormatInfo
6540    {
6541        unsafe fn encode(
6542            self,
6543            encoder: &mut fidl::encoding::Encoder<'_, D>,
6544            offset: usize,
6545            mut depth: fidl::encoding::Depth,
6546        ) -> fidl::Result<()> {
6547            encoder.debug_check_bounds::<CodecFormatInfo>(offset);
6548            // Vector header
6549            let max_ordinal: u64 = self.max_ordinal_present();
6550            encoder.write_num(max_ordinal, offset);
6551            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6552            // Calling encoder.out_of_line_offset(0) is not allowed.
6553            if max_ordinal == 0 {
6554                return Ok(());
6555            }
6556            depth.increment()?;
6557            let envelope_size = 8;
6558            let bytes_len = max_ordinal as usize * envelope_size;
6559            #[allow(unused_variables)]
6560            let offset = encoder.out_of_line_offset(bytes_len);
6561            let mut _prev_end_offset: usize = 0;
6562            if 1 > max_ordinal {
6563                return Ok(());
6564            }
6565
6566            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6567            // are envelope_size bytes.
6568            let cur_offset: usize = (1 - 1) * envelope_size;
6569
6570            // Zero reserved fields.
6571            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6572
6573            // Safety:
6574            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6575            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6576            //   envelope_size bytes, there is always sufficient room.
6577            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6578                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6579                encoder,
6580                offset + cur_offset,
6581                depth,
6582            )?;
6583
6584            _prev_end_offset = cur_offset + envelope_size;
6585            if 2 > max_ordinal {
6586                return Ok(());
6587            }
6588
6589            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6590            // are envelope_size bytes.
6591            let cur_offset: usize = (2 - 1) * envelope_size;
6592
6593            // Zero reserved fields.
6594            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6595
6596            // Safety:
6597            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6598            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6599            //   envelope_size bytes, there is always sufficient room.
6600            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6601                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6602                encoder,
6603                offset + cur_offset,
6604                depth,
6605            )?;
6606
6607            _prev_end_offset = cur_offset + envelope_size;
6608            if 3 > max_ordinal {
6609                return Ok(());
6610            }
6611
6612            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6613            // are envelope_size bytes.
6614            let cur_offset: usize = (3 - 1) * envelope_size;
6615
6616            // Zero reserved fields.
6617            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6618
6619            // Safety:
6620            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6621            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6622            //   envelope_size bytes, there is always sufficient room.
6623            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6624                self.turn_off_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6625                encoder,
6626                offset + cur_offset,
6627                depth,
6628            )?;
6629
6630            _prev_end_offset = cur_offset + envelope_size;
6631
6632            Ok(())
6633        }
6634    }
6635
6636    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecFormatInfo {
6637        #[inline(always)]
6638        fn new_empty() -> Self {
6639            Self::default()
6640        }
6641
6642        unsafe fn decode(
6643            &mut self,
6644            decoder: &mut fidl::encoding::Decoder<'_, D>,
6645            offset: usize,
6646            mut depth: fidl::encoding::Depth,
6647        ) -> fidl::Result<()> {
6648            decoder.debug_check_bounds::<Self>(offset);
6649            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6650                None => return Err(fidl::Error::NotNullable),
6651                Some(len) => len,
6652            };
6653            // Calling decoder.out_of_line_offset(0) is not allowed.
6654            if len == 0 {
6655                return Ok(());
6656            };
6657            depth.increment()?;
6658            let envelope_size = 8;
6659            let bytes_len = len * envelope_size;
6660            let offset = decoder.out_of_line_offset(bytes_len)?;
6661            // Decode the envelope for each type.
6662            let mut _next_ordinal_to_read = 0;
6663            let mut next_offset = offset;
6664            let end_offset = offset + bytes_len;
6665            _next_ordinal_to_read += 1;
6666            if next_offset >= end_offset {
6667                return Ok(());
6668            }
6669
6670            // Decode unknown envelopes for gaps in ordinals.
6671            while _next_ordinal_to_read < 1 {
6672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6673                _next_ordinal_to_read += 1;
6674                next_offset += envelope_size;
6675            }
6676
6677            let next_out_of_line = decoder.next_out_of_line();
6678            let handles_before = decoder.remaining_handles();
6679            if let Some((inlined, num_bytes, num_handles)) =
6680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6681            {
6682                let member_inline_size =
6683                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6684                if inlined != (member_inline_size <= 4) {
6685                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6686                }
6687                let inner_offset;
6688                let mut inner_depth = depth.clone();
6689                if inlined {
6690                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6691                    inner_offset = next_offset;
6692                } else {
6693                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6694                    inner_depth.increment()?;
6695                }
6696                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6697                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6699                {
6700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6701                }
6702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6704                }
6705            }
6706
6707            next_offset += envelope_size;
6708            _next_ordinal_to_read += 1;
6709            if next_offset >= end_offset {
6710                return Ok(());
6711            }
6712
6713            // Decode unknown envelopes for gaps in ordinals.
6714            while _next_ordinal_to_read < 2 {
6715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6716                _next_ordinal_to_read += 1;
6717                next_offset += envelope_size;
6718            }
6719
6720            let next_out_of_line = decoder.next_out_of_line();
6721            let handles_before = decoder.remaining_handles();
6722            if let Some((inlined, num_bytes, num_handles)) =
6723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6724            {
6725                let member_inline_size =
6726                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6727                if inlined != (member_inline_size <= 4) {
6728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6729                }
6730                let inner_offset;
6731                let mut inner_depth = depth.clone();
6732                if inlined {
6733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6734                    inner_offset = next_offset;
6735                } else {
6736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6737                    inner_depth.increment()?;
6738                }
6739                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6740                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6741                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6742                {
6743                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6744                }
6745                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6746                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6747                }
6748            }
6749
6750            next_offset += envelope_size;
6751            _next_ordinal_to_read += 1;
6752            if next_offset >= end_offset {
6753                return Ok(());
6754            }
6755
6756            // Decode unknown envelopes for gaps in ordinals.
6757            while _next_ordinal_to_read < 3 {
6758                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6759                _next_ordinal_to_read += 1;
6760                next_offset += envelope_size;
6761            }
6762
6763            let next_out_of_line = decoder.next_out_of_line();
6764            let handles_before = decoder.remaining_handles();
6765            if let Some((inlined, num_bytes, num_handles)) =
6766                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6767            {
6768                let member_inline_size =
6769                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6770                if inlined != (member_inline_size <= 4) {
6771                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6772                }
6773                let inner_offset;
6774                let mut inner_depth = depth.clone();
6775                if inlined {
6776                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6777                    inner_offset = next_offset;
6778                } else {
6779                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6780                    inner_depth.increment()?;
6781                }
6782                let val_ref = self.turn_off_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6783                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6784                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6785                {
6786                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6787                }
6788                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6789                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6790                }
6791            }
6792
6793            next_offset += envelope_size;
6794
6795            // Decode the remaining unknown envelopes.
6796            while next_offset < end_offset {
6797                _next_ordinal_to_read += 1;
6798                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6799                next_offset += envelope_size;
6800            }
6801
6802            Ok(())
6803        }
6804    }
6805
6806    impl CodecProperties {
6807        #[inline(always)]
6808        fn max_ordinal_present(&self) -> u64 {
6809            if let Some(_) = self.plug_detect_capabilities {
6810                return 5;
6811            }
6812            if let Some(_) = self.unique_id {
6813                return 4;
6814            }
6815            if let Some(_) = self.product {
6816                return 3;
6817            }
6818            if let Some(_) = self.manufacturer {
6819                return 2;
6820            }
6821            if let Some(_) = self.is_input {
6822                return 1;
6823            }
6824            0
6825        }
6826    }
6827
6828    impl fidl::encoding::ValueTypeMarker for CodecProperties {
6829        type Borrowed<'a> = &'a Self;
6830        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6831            value
6832        }
6833    }
6834
6835    unsafe impl fidl::encoding::TypeMarker for CodecProperties {
6836        type Owned = Self;
6837
6838        #[inline(always)]
6839        fn inline_align(_context: fidl::encoding::Context) -> usize {
6840            8
6841        }
6842
6843        #[inline(always)]
6844        fn inline_size(_context: fidl::encoding::Context) -> usize {
6845            16
6846        }
6847    }
6848
6849    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecProperties, D>
6850        for &CodecProperties
6851    {
6852        unsafe fn encode(
6853            self,
6854            encoder: &mut fidl::encoding::Encoder<'_, D>,
6855            offset: usize,
6856            mut depth: fidl::encoding::Depth,
6857        ) -> fidl::Result<()> {
6858            encoder.debug_check_bounds::<CodecProperties>(offset);
6859            // Vector header
6860            let max_ordinal: u64 = self.max_ordinal_present();
6861            encoder.write_num(max_ordinal, offset);
6862            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6863            // Calling encoder.out_of_line_offset(0) is not allowed.
6864            if max_ordinal == 0 {
6865                return Ok(());
6866            }
6867            depth.increment()?;
6868            let envelope_size = 8;
6869            let bytes_len = max_ordinal as usize * envelope_size;
6870            #[allow(unused_variables)]
6871            let offset = encoder.out_of_line_offset(bytes_len);
6872            let mut _prev_end_offset: usize = 0;
6873            if 1 > max_ordinal {
6874                return Ok(());
6875            }
6876
6877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6878            // are envelope_size bytes.
6879            let cur_offset: usize = (1 - 1) * envelope_size;
6880
6881            // Zero reserved fields.
6882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6883
6884            // Safety:
6885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6887            //   envelope_size bytes, there is always sufficient room.
6888            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6889                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6890                encoder,
6891                offset + cur_offset,
6892                depth,
6893            )?;
6894
6895            _prev_end_offset = cur_offset + envelope_size;
6896            if 2 > max_ordinal {
6897                return Ok(());
6898            }
6899
6900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6901            // are envelope_size bytes.
6902            let cur_offset: usize = (2 - 1) * envelope_size;
6903
6904            // Zero reserved fields.
6905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6906
6907            // Safety:
6908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6910            //   envelope_size bytes, there is always sufficient room.
6911            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6912                self.manufacturer.as_ref().map(
6913                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6914                ),
6915                encoder,
6916                offset + cur_offset,
6917                depth,
6918            )?;
6919
6920            _prev_end_offset = cur_offset + envelope_size;
6921            if 3 > max_ordinal {
6922                return Ok(());
6923            }
6924
6925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6926            // are envelope_size bytes.
6927            let cur_offset: usize = (3 - 1) * envelope_size;
6928
6929            // Zero reserved fields.
6930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6931
6932            // Safety:
6933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6935            //   envelope_size bytes, there is always sufficient room.
6936            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6937                self.product.as_ref().map(
6938                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6939                ),
6940                encoder,
6941                offset + cur_offset,
6942                depth,
6943            )?;
6944
6945            _prev_end_offset = cur_offset + envelope_size;
6946            if 4 > max_ordinal {
6947                return Ok(());
6948            }
6949
6950            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6951            // are envelope_size bytes.
6952            let cur_offset: usize = (4 - 1) * envelope_size;
6953
6954            // Zero reserved fields.
6955            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6956
6957            // Safety:
6958            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6959            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6960            //   envelope_size bytes, there is always sufficient room.
6961            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6962                self.unique_id.as_ref().map(
6963                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6964                ),
6965                encoder,
6966                offset + cur_offset,
6967                depth,
6968            )?;
6969
6970            _prev_end_offset = cur_offset + envelope_size;
6971            if 5 > max_ordinal {
6972                return Ok(());
6973            }
6974
6975            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6976            // are envelope_size bytes.
6977            let cur_offset: usize = (5 - 1) * envelope_size;
6978
6979            // Zero reserved fields.
6980            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6981
6982            // Safety:
6983            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6984            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6985            //   envelope_size bytes, there is always sufficient room.
6986            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
6987                self.plug_detect_capabilities
6988                    .as_ref()
6989                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
6990                encoder,
6991                offset + cur_offset,
6992                depth,
6993            )?;
6994
6995            _prev_end_offset = cur_offset + envelope_size;
6996
6997            Ok(())
6998        }
6999    }
7000
7001    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProperties {
7002        #[inline(always)]
7003        fn new_empty() -> Self {
7004            Self::default()
7005        }
7006
7007        unsafe fn decode(
7008            &mut self,
7009            decoder: &mut fidl::encoding::Decoder<'_, D>,
7010            offset: usize,
7011            mut depth: fidl::encoding::Depth,
7012        ) -> fidl::Result<()> {
7013            decoder.debug_check_bounds::<Self>(offset);
7014            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7015                None => return Err(fidl::Error::NotNullable),
7016                Some(len) => len,
7017            };
7018            // Calling decoder.out_of_line_offset(0) is not allowed.
7019            if len == 0 {
7020                return Ok(());
7021            };
7022            depth.increment()?;
7023            let envelope_size = 8;
7024            let bytes_len = len * envelope_size;
7025            let offset = decoder.out_of_line_offset(bytes_len)?;
7026            // Decode the envelope for each type.
7027            let mut _next_ordinal_to_read = 0;
7028            let mut next_offset = offset;
7029            let end_offset = offset + bytes_len;
7030            _next_ordinal_to_read += 1;
7031            if next_offset >= end_offset {
7032                return Ok(());
7033            }
7034
7035            // Decode unknown envelopes for gaps in ordinals.
7036            while _next_ordinal_to_read < 1 {
7037                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7038                _next_ordinal_to_read += 1;
7039                next_offset += envelope_size;
7040            }
7041
7042            let next_out_of_line = decoder.next_out_of_line();
7043            let handles_before = decoder.remaining_handles();
7044            if let Some((inlined, num_bytes, num_handles)) =
7045                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7046            {
7047                let member_inline_size =
7048                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7049                if inlined != (member_inline_size <= 4) {
7050                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7051                }
7052                let inner_offset;
7053                let mut inner_depth = depth.clone();
7054                if inlined {
7055                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7056                    inner_offset = next_offset;
7057                } else {
7058                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7059                    inner_depth.increment()?;
7060                }
7061                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7062                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7063                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7064                {
7065                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7066                }
7067                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7068                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7069                }
7070            }
7071
7072            next_offset += envelope_size;
7073            _next_ordinal_to_read += 1;
7074            if next_offset >= end_offset {
7075                return Ok(());
7076            }
7077
7078            // Decode unknown envelopes for gaps in ordinals.
7079            while _next_ordinal_to_read < 2 {
7080                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7081                _next_ordinal_to_read += 1;
7082                next_offset += envelope_size;
7083            }
7084
7085            let next_out_of_line = decoder.next_out_of_line();
7086            let handles_before = decoder.remaining_handles();
7087            if let Some((inlined, num_bytes, num_handles)) =
7088                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7089            {
7090                let member_inline_size =
7091                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7092                        decoder.context,
7093                    );
7094                if inlined != (member_inline_size <= 4) {
7095                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7096                }
7097                let inner_offset;
7098                let mut inner_depth = depth.clone();
7099                if inlined {
7100                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7101                    inner_offset = next_offset;
7102                } else {
7103                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7104                    inner_depth.increment()?;
7105                }
7106                let val_ref = self
7107                    .manufacturer
7108                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7109                fidl::decode!(
7110                    fidl::encoding::BoundedString<256>,
7111                    D,
7112                    val_ref,
7113                    decoder,
7114                    inner_offset,
7115                    inner_depth
7116                )?;
7117                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7118                {
7119                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7120                }
7121                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7122                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7123                }
7124            }
7125
7126            next_offset += envelope_size;
7127            _next_ordinal_to_read += 1;
7128            if next_offset >= end_offset {
7129                return Ok(());
7130            }
7131
7132            // Decode unknown envelopes for gaps in ordinals.
7133            while _next_ordinal_to_read < 3 {
7134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7135                _next_ordinal_to_read += 1;
7136                next_offset += envelope_size;
7137            }
7138
7139            let next_out_of_line = decoder.next_out_of_line();
7140            let handles_before = decoder.remaining_handles();
7141            if let Some((inlined, num_bytes, num_handles)) =
7142                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7143            {
7144                let member_inline_size =
7145                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7146                        decoder.context,
7147                    );
7148                if inlined != (member_inline_size <= 4) {
7149                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7150                }
7151                let inner_offset;
7152                let mut inner_depth = depth.clone();
7153                if inlined {
7154                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7155                    inner_offset = next_offset;
7156                } else {
7157                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7158                    inner_depth.increment()?;
7159                }
7160                let val_ref = self
7161                    .product
7162                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7163                fidl::decode!(
7164                    fidl::encoding::BoundedString<256>,
7165                    D,
7166                    val_ref,
7167                    decoder,
7168                    inner_offset,
7169                    inner_depth
7170                )?;
7171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7172                {
7173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7174                }
7175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7177                }
7178            }
7179
7180            next_offset += envelope_size;
7181            _next_ordinal_to_read += 1;
7182            if next_offset >= end_offset {
7183                return Ok(());
7184            }
7185
7186            // Decode unknown envelopes for gaps in ordinals.
7187            while _next_ordinal_to_read < 4 {
7188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7189                _next_ordinal_to_read += 1;
7190                next_offset += envelope_size;
7191            }
7192
7193            let next_out_of_line = decoder.next_out_of_line();
7194            let handles_before = decoder.remaining_handles();
7195            if let Some((inlined, num_bytes, num_handles)) =
7196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7197            {
7198                let member_inline_size =
7199                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7200                        decoder.context,
7201                    );
7202                if inlined != (member_inline_size <= 4) {
7203                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7204                }
7205                let inner_offset;
7206                let mut inner_depth = depth.clone();
7207                if inlined {
7208                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7209                    inner_offset = next_offset;
7210                } else {
7211                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7212                    inner_depth.increment()?;
7213                }
7214                let val_ref = self
7215                    .unique_id
7216                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7217                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7219                {
7220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7221                }
7222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7224                }
7225            }
7226
7227            next_offset += envelope_size;
7228            _next_ordinal_to_read += 1;
7229            if next_offset >= end_offset {
7230                return Ok(());
7231            }
7232
7233            // Decode unknown envelopes for gaps in ordinals.
7234            while _next_ordinal_to_read < 5 {
7235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7236                _next_ordinal_to_read += 1;
7237                next_offset += envelope_size;
7238            }
7239
7240            let next_out_of_line = decoder.next_out_of_line();
7241            let handles_before = decoder.remaining_handles();
7242            if let Some((inlined, num_bytes, num_handles)) =
7243                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7244            {
7245                let member_inline_size =
7246                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
7247                        decoder.context,
7248                    );
7249                if inlined != (member_inline_size <= 4) {
7250                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7251                }
7252                let inner_offset;
7253                let mut inner_depth = depth.clone();
7254                if inlined {
7255                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7256                    inner_offset = next_offset;
7257                } else {
7258                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7259                    inner_depth.increment()?;
7260                }
7261                let val_ref = self
7262                    .plug_detect_capabilities
7263                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
7264                fidl::decode!(
7265                    PlugDetectCapabilities,
7266                    D,
7267                    val_ref,
7268                    decoder,
7269                    inner_offset,
7270                    inner_depth
7271                )?;
7272                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7273                {
7274                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7275                }
7276                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7277                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7278                }
7279            }
7280
7281            next_offset += envelope_size;
7282
7283            // Decode the remaining unknown envelopes.
7284            while next_offset < end_offset {
7285                _next_ordinal_to_read += 1;
7286                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7287                next_offset += envelope_size;
7288            }
7289
7290            Ok(())
7291        }
7292    }
7293
7294    impl CompositeProperties {
7295        #[inline(always)]
7296        fn max_ordinal_present(&self) -> u64 {
7297            if let Some(_) = self.clock_domain {
7298                return 5;
7299            }
7300            if let Some(_) = self.unique_id {
7301                return 4;
7302            }
7303            if let Some(_) = self.product {
7304                return 3;
7305            }
7306            if let Some(_) = self.manufacturer {
7307                return 2;
7308            }
7309            0
7310        }
7311    }
7312
7313    impl fidl::encoding::ValueTypeMarker for CompositeProperties {
7314        type Borrowed<'a> = &'a Self;
7315        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7316            value
7317        }
7318    }
7319
7320    unsafe impl fidl::encoding::TypeMarker for CompositeProperties {
7321        type Owned = Self;
7322
7323        #[inline(always)]
7324        fn inline_align(_context: fidl::encoding::Context) -> usize {
7325            8
7326        }
7327
7328        #[inline(always)]
7329        fn inline_size(_context: fidl::encoding::Context) -> usize {
7330            16
7331        }
7332    }
7333
7334    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeProperties, D>
7335        for &CompositeProperties
7336    {
7337        unsafe fn encode(
7338            self,
7339            encoder: &mut fidl::encoding::Encoder<'_, D>,
7340            offset: usize,
7341            mut depth: fidl::encoding::Depth,
7342        ) -> fidl::Result<()> {
7343            encoder.debug_check_bounds::<CompositeProperties>(offset);
7344            // Vector header
7345            let max_ordinal: u64 = self.max_ordinal_present();
7346            encoder.write_num(max_ordinal, offset);
7347            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7348            // Calling encoder.out_of_line_offset(0) is not allowed.
7349            if max_ordinal == 0 {
7350                return Ok(());
7351            }
7352            depth.increment()?;
7353            let envelope_size = 8;
7354            let bytes_len = max_ordinal as usize * envelope_size;
7355            #[allow(unused_variables)]
7356            let offset = encoder.out_of_line_offset(bytes_len);
7357            let mut _prev_end_offset: usize = 0;
7358            if 2 > max_ordinal {
7359                return Ok(());
7360            }
7361
7362            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7363            // are envelope_size bytes.
7364            let cur_offset: usize = (2 - 1) * envelope_size;
7365
7366            // Zero reserved fields.
7367            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7368
7369            // Safety:
7370            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7371            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7372            //   envelope_size bytes, there is always sufficient room.
7373            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7374                self.manufacturer.as_ref().map(
7375                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7376                ),
7377                encoder,
7378                offset + cur_offset,
7379                depth,
7380            )?;
7381
7382            _prev_end_offset = cur_offset + envelope_size;
7383            if 3 > max_ordinal {
7384                return Ok(());
7385            }
7386
7387            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7388            // are envelope_size bytes.
7389            let cur_offset: usize = (3 - 1) * envelope_size;
7390
7391            // Zero reserved fields.
7392            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7393
7394            // Safety:
7395            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7396            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7397            //   envelope_size bytes, there is always sufficient room.
7398            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7399                self.product.as_ref().map(
7400                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7401                ),
7402                encoder,
7403                offset + cur_offset,
7404                depth,
7405            )?;
7406
7407            _prev_end_offset = cur_offset + envelope_size;
7408            if 4 > max_ordinal {
7409                return Ok(());
7410            }
7411
7412            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7413            // are envelope_size bytes.
7414            let cur_offset: usize = (4 - 1) * envelope_size;
7415
7416            // Zero reserved fields.
7417            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7418
7419            // Safety:
7420            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7421            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7422            //   envelope_size bytes, there is always sufficient room.
7423            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7424                self.unique_id.as_ref().map(
7425                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7426                ),
7427                encoder,
7428                offset + cur_offset,
7429                depth,
7430            )?;
7431
7432            _prev_end_offset = cur_offset + envelope_size;
7433            if 5 > max_ordinal {
7434                return Ok(());
7435            }
7436
7437            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7438            // are envelope_size bytes.
7439            let cur_offset: usize = (5 - 1) * envelope_size;
7440
7441            // Zero reserved fields.
7442            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7443
7444            // Safety:
7445            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7446            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7447            //   envelope_size bytes, there is always sufficient room.
7448            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7449                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7450                encoder,
7451                offset + cur_offset,
7452                depth,
7453            )?;
7454
7455            _prev_end_offset = cur_offset + envelope_size;
7456
7457            Ok(())
7458        }
7459    }
7460
7461    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeProperties {
7462        #[inline(always)]
7463        fn new_empty() -> Self {
7464            Self::default()
7465        }
7466
7467        unsafe fn decode(
7468            &mut self,
7469            decoder: &mut fidl::encoding::Decoder<'_, D>,
7470            offset: usize,
7471            mut depth: fidl::encoding::Depth,
7472        ) -> fidl::Result<()> {
7473            decoder.debug_check_bounds::<Self>(offset);
7474            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7475                None => return Err(fidl::Error::NotNullable),
7476                Some(len) => len,
7477            };
7478            // Calling decoder.out_of_line_offset(0) is not allowed.
7479            if len == 0 {
7480                return Ok(());
7481            };
7482            depth.increment()?;
7483            let envelope_size = 8;
7484            let bytes_len = len * envelope_size;
7485            let offset = decoder.out_of_line_offset(bytes_len)?;
7486            // Decode the envelope for each type.
7487            let mut _next_ordinal_to_read = 0;
7488            let mut next_offset = offset;
7489            let end_offset = offset + bytes_len;
7490            _next_ordinal_to_read += 1;
7491            if next_offset >= end_offset {
7492                return Ok(());
7493            }
7494
7495            // Decode unknown envelopes for gaps in ordinals.
7496            while _next_ordinal_to_read < 2 {
7497                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7498                _next_ordinal_to_read += 1;
7499                next_offset += envelope_size;
7500            }
7501
7502            let next_out_of_line = decoder.next_out_of_line();
7503            let handles_before = decoder.remaining_handles();
7504            if let Some((inlined, num_bytes, num_handles)) =
7505                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7506            {
7507                let member_inline_size =
7508                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7509                        decoder.context,
7510                    );
7511                if inlined != (member_inline_size <= 4) {
7512                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7513                }
7514                let inner_offset;
7515                let mut inner_depth = depth.clone();
7516                if inlined {
7517                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7518                    inner_offset = next_offset;
7519                } else {
7520                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7521                    inner_depth.increment()?;
7522                }
7523                let val_ref = self
7524                    .manufacturer
7525                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7526                fidl::decode!(
7527                    fidl::encoding::BoundedString<256>,
7528                    D,
7529                    val_ref,
7530                    decoder,
7531                    inner_offset,
7532                    inner_depth
7533                )?;
7534                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7535                {
7536                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7537                }
7538                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7539                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7540                }
7541            }
7542
7543            next_offset += envelope_size;
7544            _next_ordinal_to_read += 1;
7545            if next_offset >= end_offset {
7546                return Ok(());
7547            }
7548
7549            // Decode unknown envelopes for gaps in ordinals.
7550            while _next_ordinal_to_read < 3 {
7551                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7552                _next_ordinal_to_read += 1;
7553                next_offset += envelope_size;
7554            }
7555
7556            let next_out_of_line = decoder.next_out_of_line();
7557            let handles_before = decoder.remaining_handles();
7558            if let Some((inlined, num_bytes, num_handles)) =
7559                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7560            {
7561                let member_inline_size =
7562                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7563                        decoder.context,
7564                    );
7565                if inlined != (member_inline_size <= 4) {
7566                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7567                }
7568                let inner_offset;
7569                let mut inner_depth = depth.clone();
7570                if inlined {
7571                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7572                    inner_offset = next_offset;
7573                } else {
7574                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7575                    inner_depth.increment()?;
7576                }
7577                let val_ref = self
7578                    .product
7579                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7580                fidl::decode!(
7581                    fidl::encoding::BoundedString<256>,
7582                    D,
7583                    val_ref,
7584                    decoder,
7585                    inner_offset,
7586                    inner_depth
7587                )?;
7588                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7589                {
7590                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7591                }
7592                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7593                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7594                }
7595            }
7596
7597            next_offset += envelope_size;
7598            _next_ordinal_to_read += 1;
7599            if next_offset >= end_offset {
7600                return Ok(());
7601            }
7602
7603            // Decode unknown envelopes for gaps in ordinals.
7604            while _next_ordinal_to_read < 4 {
7605                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7606                _next_ordinal_to_read += 1;
7607                next_offset += envelope_size;
7608            }
7609
7610            let next_out_of_line = decoder.next_out_of_line();
7611            let handles_before = decoder.remaining_handles();
7612            if let Some((inlined, num_bytes, num_handles)) =
7613                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7614            {
7615                let member_inline_size =
7616                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7617                        decoder.context,
7618                    );
7619                if inlined != (member_inline_size <= 4) {
7620                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7621                }
7622                let inner_offset;
7623                let mut inner_depth = depth.clone();
7624                if inlined {
7625                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7626                    inner_offset = next_offset;
7627                } else {
7628                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7629                    inner_depth.increment()?;
7630                }
7631                let val_ref = self
7632                    .unique_id
7633                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7634                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7635                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7636                {
7637                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7638                }
7639                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7640                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7641                }
7642            }
7643
7644            next_offset += envelope_size;
7645            _next_ordinal_to_read += 1;
7646            if next_offset >= end_offset {
7647                return Ok(());
7648            }
7649
7650            // Decode unknown envelopes for gaps in ordinals.
7651            while _next_ordinal_to_read < 5 {
7652                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7653                _next_ordinal_to_read += 1;
7654                next_offset += envelope_size;
7655            }
7656
7657            let next_out_of_line = decoder.next_out_of_line();
7658            let handles_before = decoder.remaining_handles();
7659            if let Some((inlined, num_bytes, num_handles)) =
7660                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7661            {
7662                let member_inline_size =
7663                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7664                if inlined != (member_inline_size <= 4) {
7665                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7666                }
7667                let inner_offset;
7668                let mut inner_depth = depth.clone();
7669                if inlined {
7670                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7671                    inner_offset = next_offset;
7672                } else {
7673                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7674                    inner_depth.increment()?;
7675                }
7676                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
7677                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7678                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7679                {
7680                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7681                }
7682                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7683                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7684                }
7685            }
7686
7687            next_offset += envelope_size;
7688
7689            // Decode the remaining unknown envelopes.
7690            while next_offset < end_offset {
7691                _next_ordinal_to_read += 1;
7692                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7693                next_offset += envelope_size;
7694            }
7695
7696            Ok(())
7697        }
7698    }
7699
7700    impl DaiProperties {
7701        #[inline(always)]
7702        fn max_ordinal_present(&self) -> u64 {
7703            if let Some(_) = self.clock_domain {
7704                return 5;
7705            }
7706            if let Some(_) = self.unique_id {
7707                return 4;
7708            }
7709            if let Some(_) = self.product_name {
7710                return 3;
7711            }
7712            if let Some(_) = self.manufacturer {
7713                return 2;
7714            }
7715            if let Some(_) = self.is_input {
7716                return 1;
7717            }
7718            0
7719        }
7720    }
7721
7722    impl fidl::encoding::ValueTypeMarker for DaiProperties {
7723        type Borrowed<'a> = &'a Self;
7724        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7725            value
7726        }
7727    }
7728
7729    unsafe impl fidl::encoding::TypeMarker for DaiProperties {
7730        type Owned = Self;
7731
7732        #[inline(always)]
7733        fn inline_align(_context: fidl::encoding::Context) -> usize {
7734            8
7735        }
7736
7737        #[inline(always)]
7738        fn inline_size(_context: fidl::encoding::Context) -> usize {
7739            16
7740        }
7741    }
7742
7743    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiProperties, D>
7744        for &DaiProperties
7745    {
7746        unsafe fn encode(
7747            self,
7748            encoder: &mut fidl::encoding::Encoder<'_, D>,
7749            offset: usize,
7750            mut depth: fidl::encoding::Depth,
7751        ) -> fidl::Result<()> {
7752            encoder.debug_check_bounds::<DaiProperties>(offset);
7753            // Vector header
7754            let max_ordinal: u64 = self.max_ordinal_present();
7755            encoder.write_num(max_ordinal, offset);
7756            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7757            // Calling encoder.out_of_line_offset(0) is not allowed.
7758            if max_ordinal == 0 {
7759                return Ok(());
7760            }
7761            depth.increment()?;
7762            let envelope_size = 8;
7763            let bytes_len = max_ordinal as usize * envelope_size;
7764            #[allow(unused_variables)]
7765            let offset = encoder.out_of_line_offset(bytes_len);
7766            let mut _prev_end_offset: usize = 0;
7767            if 1 > max_ordinal {
7768                return Ok(());
7769            }
7770
7771            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7772            // are envelope_size bytes.
7773            let cur_offset: usize = (1 - 1) * envelope_size;
7774
7775            // Zero reserved fields.
7776            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7777
7778            // Safety:
7779            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7780            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7781            //   envelope_size bytes, there is always sufficient room.
7782            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7783                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7784                encoder,
7785                offset + cur_offset,
7786                depth,
7787            )?;
7788
7789            _prev_end_offset = cur_offset + envelope_size;
7790            if 2 > max_ordinal {
7791                return Ok(());
7792            }
7793
7794            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7795            // are envelope_size bytes.
7796            let cur_offset: usize = (2 - 1) * envelope_size;
7797
7798            // Zero reserved fields.
7799            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7800
7801            // Safety:
7802            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7803            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7804            //   envelope_size bytes, there is always sufficient room.
7805            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7806                self.manufacturer.as_ref().map(
7807                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7808                ),
7809                encoder,
7810                offset + cur_offset,
7811                depth,
7812            )?;
7813
7814            _prev_end_offset = cur_offset + envelope_size;
7815            if 3 > max_ordinal {
7816                return Ok(());
7817            }
7818
7819            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7820            // are envelope_size bytes.
7821            let cur_offset: usize = (3 - 1) * envelope_size;
7822
7823            // Zero reserved fields.
7824            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7825
7826            // Safety:
7827            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7828            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7829            //   envelope_size bytes, there is always sufficient room.
7830            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7831                self.product_name.as_ref().map(
7832                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7833                ),
7834                encoder,
7835                offset + cur_offset,
7836                depth,
7837            )?;
7838
7839            _prev_end_offset = cur_offset + envelope_size;
7840            if 4 > max_ordinal {
7841                return Ok(());
7842            }
7843
7844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7845            // are envelope_size bytes.
7846            let cur_offset: usize = (4 - 1) * envelope_size;
7847
7848            // Zero reserved fields.
7849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7850
7851            // Safety:
7852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7854            //   envelope_size bytes, there is always sufficient room.
7855            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7856                self.unique_id.as_ref().map(
7857                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7858                ),
7859                encoder,
7860                offset + cur_offset,
7861                depth,
7862            )?;
7863
7864            _prev_end_offset = cur_offset + envelope_size;
7865            if 5 > max_ordinal {
7866                return Ok(());
7867            }
7868
7869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7870            // are envelope_size bytes.
7871            let cur_offset: usize = (5 - 1) * envelope_size;
7872
7873            // Zero reserved fields.
7874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7875
7876            // Safety:
7877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7879            //   envelope_size bytes, there is always sufficient room.
7880            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7881                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7882                encoder,
7883                offset + cur_offset,
7884                depth,
7885            )?;
7886
7887            _prev_end_offset = cur_offset + envelope_size;
7888
7889            Ok(())
7890        }
7891    }
7892
7893    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiProperties {
7894        #[inline(always)]
7895        fn new_empty() -> Self {
7896            Self::default()
7897        }
7898
7899        unsafe fn decode(
7900            &mut self,
7901            decoder: &mut fidl::encoding::Decoder<'_, D>,
7902            offset: usize,
7903            mut depth: fidl::encoding::Depth,
7904        ) -> fidl::Result<()> {
7905            decoder.debug_check_bounds::<Self>(offset);
7906            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7907                None => return Err(fidl::Error::NotNullable),
7908                Some(len) => len,
7909            };
7910            // Calling decoder.out_of_line_offset(0) is not allowed.
7911            if len == 0 {
7912                return Ok(());
7913            };
7914            depth.increment()?;
7915            let envelope_size = 8;
7916            let bytes_len = len * envelope_size;
7917            let offset = decoder.out_of_line_offset(bytes_len)?;
7918            // Decode the envelope for each type.
7919            let mut _next_ordinal_to_read = 0;
7920            let mut next_offset = offset;
7921            let end_offset = offset + bytes_len;
7922            _next_ordinal_to_read += 1;
7923            if next_offset >= end_offset {
7924                return Ok(());
7925            }
7926
7927            // Decode unknown envelopes for gaps in ordinals.
7928            while _next_ordinal_to_read < 1 {
7929                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7930                _next_ordinal_to_read += 1;
7931                next_offset += envelope_size;
7932            }
7933
7934            let next_out_of_line = decoder.next_out_of_line();
7935            let handles_before = decoder.remaining_handles();
7936            if let Some((inlined, num_bytes, num_handles)) =
7937                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7938            {
7939                let member_inline_size =
7940                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7941                if inlined != (member_inline_size <= 4) {
7942                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7943                }
7944                let inner_offset;
7945                let mut inner_depth = depth.clone();
7946                if inlined {
7947                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7948                    inner_offset = next_offset;
7949                } else {
7950                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7951                    inner_depth.increment()?;
7952                }
7953                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7954                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7955                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7956                {
7957                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7958                }
7959                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7960                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7961                }
7962            }
7963
7964            next_offset += envelope_size;
7965            _next_ordinal_to_read += 1;
7966            if next_offset >= end_offset {
7967                return Ok(());
7968            }
7969
7970            // Decode unknown envelopes for gaps in ordinals.
7971            while _next_ordinal_to_read < 2 {
7972                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7973                _next_ordinal_to_read += 1;
7974                next_offset += envelope_size;
7975            }
7976
7977            let next_out_of_line = decoder.next_out_of_line();
7978            let handles_before = decoder.remaining_handles();
7979            if let Some((inlined, num_bytes, num_handles)) =
7980                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7981            {
7982                let member_inline_size =
7983                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7984                        decoder.context,
7985                    );
7986                if inlined != (member_inline_size <= 4) {
7987                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7988                }
7989                let inner_offset;
7990                let mut inner_depth = depth.clone();
7991                if inlined {
7992                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7993                    inner_offset = next_offset;
7994                } else {
7995                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7996                    inner_depth.increment()?;
7997                }
7998                let val_ref = self
7999                    .manufacturer
8000                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8001                fidl::decode!(
8002                    fidl::encoding::BoundedString<256>,
8003                    D,
8004                    val_ref,
8005                    decoder,
8006                    inner_offset,
8007                    inner_depth
8008                )?;
8009                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8010                {
8011                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8012                }
8013                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8014                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8015                }
8016            }
8017
8018            next_offset += envelope_size;
8019            _next_ordinal_to_read += 1;
8020            if next_offset >= end_offset {
8021                return Ok(());
8022            }
8023
8024            // Decode unknown envelopes for gaps in ordinals.
8025            while _next_ordinal_to_read < 3 {
8026                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8027                _next_ordinal_to_read += 1;
8028                next_offset += envelope_size;
8029            }
8030
8031            let next_out_of_line = decoder.next_out_of_line();
8032            let handles_before = decoder.remaining_handles();
8033            if let Some((inlined, num_bytes, num_handles)) =
8034                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8035            {
8036                let member_inline_size =
8037                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8038                        decoder.context,
8039                    );
8040                if inlined != (member_inline_size <= 4) {
8041                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8042                }
8043                let inner_offset;
8044                let mut inner_depth = depth.clone();
8045                if inlined {
8046                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8047                    inner_offset = next_offset;
8048                } else {
8049                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8050                    inner_depth.increment()?;
8051                }
8052                let val_ref = self
8053                    .product_name
8054                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8055                fidl::decode!(
8056                    fidl::encoding::BoundedString<256>,
8057                    D,
8058                    val_ref,
8059                    decoder,
8060                    inner_offset,
8061                    inner_depth
8062                )?;
8063                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8064                {
8065                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8066                }
8067                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8068                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8069                }
8070            }
8071
8072            next_offset += envelope_size;
8073            _next_ordinal_to_read += 1;
8074            if next_offset >= end_offset {
8075                return Ok(());
8076            }
8077
8078            // Decode unknown envelopes for gaps in ordinals.
8079            while _next_ordinal_to_read < 4 {
8080                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8081                _next_ordinal_to_read += 1;
8082                next_offset += envelope_size;
8083            }
8084
8085            let next_out_of_line = decoder.next_out_of_line();
8086            let handles_before = decoder.remaining_handles();
8087            if let Some((inlined, num_bytes, num_handles)) =
8088                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8089            {
8090                let member_inline_size =
8091                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
8092                        decoder.context,
8093                    );
8094                if inlined != (member_inline_size <= 4) {
8095                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8096                }
8097                let inner_offset;
8098                let mut inner_depth = depth.clone();
8099                if inlined {
8100                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8101                    inner_offset = next_offset;
8102                } else {
8103                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8104                    inner_depth.increment()?;
8105                }
8106                let val_ref = self
8107                    .unique_id
8108                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
8109                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
8110                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8111                {
8112                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8113                }
8114                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8115                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8116                }
8117            }
8118
8119            next_offset += envelope_size;
8120            _next_ordinal_to_read += 1;
8121            if next_offset >= end_offset {
8122                return Ok(());
8123            }
8124
8125            // Decode unknown envelopes for gaps in ordinals.
8126            while _next_ordinal_to_read < 5 {
8127                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8128                _next_ordinal_to_read += 1;
8129                next_offset += envelope_size;
8130            }
8131
8132            let next_out_of_line = decoder.next_out_of_line();
8133            let handles_before = decoder.remaining_handles();
8134            if let Some((inlined, num_bytes, num_handles)) =
8135                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8136            {
8137                let member_inline_size =
8138                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8139                if inlined != (member_inline_size <= 4) {
8140                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8141                }
8142                let inner_offset;
8143                let mut inner_depth = depth.clone();
8144                if inlined {
8145                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8146                    inner_offset = next_offset;
8147                } else {
8148                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8149                    inner_depth.increment()?;
8150                }
8151                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
8152                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8153                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8154                {
8155                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8156                }
8157                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8158                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8159                }
8160            }
8161
8162            next_offset += envelope_size;
8163
8164            // Decode the remaining unknown envelopes.
8165            while next_offset < end_offset {
8166                _next_ordinal_to_read += 1;
8167                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8168                next_offset += envelope_size;
8169            }
8170
8171            Ok(())
8172        }
8173    }
8174
8175    impl DelayInfo {
8176        #[inline(always)]
8177        fn max_ordinal_present(&self) -> u64 {
8178            if let Some(_) = self.external_delay {
8179                return 2;
8180            }
8181            if let Some(_) = self.internal_delay {
8182                return 1;
8183            }
8184            0
8185        }
8186    }
8187
8188    impl fidl::encoding::ValueTypeMarker for DelayInfo {
8189        type Borrowed<'a> = &'a Self;
8190        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8191            value
8192        }
8193    }
8194
8195    unsafe impl fidl::encoding::TypeMarker for DelayInfo {
8196        type Owned = Self;
8197
8198        #[inline(always)]
8199        fn inline_align(_context: fidl::encoding::Context) -> usize {
8200            8
8201        }
8202
8203        #[inline(always)]
8204        fn inline_size(_context: fidl::encoding::Context) -> usize {
8205            16
8206        }
8207    }
8208
8209    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DelayInfo, D>
8210        for &DelayInfo
8211    {
8212        unsafe fn encode(
8213            self,
8214            encoder: &mut fidl::encoding::Encoder<'_, D>,
8215            offset: usize,
8216            mut depth: fidl::encoding::Depth,
8217        ) -> fidl::Result<()> {
8218            encoder.debug_check_bounds::<DelayInfo>(offset);
8219            // Vector header
8220            let max_ordinal: u64 = self.max_ordinal_present();
8221            encoder.write_num(max_ordinal, offset);
8222            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8223            // Calling encoder.out_of_line_offset(0) is not allowed.
8224            if max_ordinal == 0 {
8225                return Ok(());
8226            }
8227            depth.increment()?;
8228            let envelope_size = 8;
8229            let bytes_len = max_ordinal as usize * envelope_size;
8230            #[allow(unused_variables)]
8231            let offset = encoder.out_of_line_offset(bytes_len);
8232            let mut _prev_end_offset: usize = 0;
8233            if 1 > max_ordinal {
8234                return Ok(());
8235            }
8236
8237            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8238            // are envelope_size bytes.
8239            let cur_offset: usize = (1 - 1) * envelope_size;
8240
8241            // Zero reserved fields.
8242            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8243
8244            // Safety:
8245            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8246            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8247            //   envelope_size bytes, there is always sufficient room.
8248            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8249                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8250                encoder,
8251                offset + cur_offset,
8252                depth,
8253            )?;
8254
8255            _prev_end_offset = cur_offset + envelope_size;
8256            if 2 > max_ordinal {
8257                return Ok(());
8258            }
8259
8260            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8261            // are envelope_size bytes.
8262            let cur_offset: usize = (2 - 1) * envelope_size;
8263
8264            // Zero reserved fields.
8265            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8266
8267            // Safety:
8268            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8269            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8270            //   envelope_size bytes, there is always sufficient room.
8271            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8272                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8273                encoder,
8274                offset + cur_offset,
8275                depth,
8276            )?;
8277
8278            _prev_end_offset = cur_offset + envelope_size;
8279
8280            Ok(())
8281        }
8282    }
8283
8284    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DelayInfo {
8285        #[inline(always)]
8286        fn new_empty() -> Self {
8287            Self::default()
8288        }
8289
8290        unsafe fn decode(
8291            &mut self,
8292            decoder: &mut fidl::encoding::Decoder<'_, D>,
8293            offset: usize,
8294            mut depth: fidl::encoding::Depth,
8295        ) -> fidl::Result<()> {
8296            decoder.debug_check_bounds::<Self>(offset);
8297            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8298                None => return Err(fidl::Error::NotNullable),
8299                Some(len) => len,
8300            };
8301            // Calling decoder.out_of_line_offset(0) is not allowed.
8302            if len == 0 {
8303                return Ok(());
8304            };
8305            depth.increment()?;
8306            let envelope_size = 8;
8307            let bytes_len = len * envelope_size;
8308            let offset = decoder.out_of_line_offset(bytes_len)?;
8309            // Decode the envelope for each type.
8310            let mut _next_ordinal_to_read = 0;
8311            let mut next_offset = offset;
8312            let end_offset = offset + bytes_len;
8313            _next_ordinal_to_read += 1;
8314            if next_offset >= end_offset {
8315                return Ok(());
8316            }
8317
8318            // Decode unknown envelopes for gaps in ordinals.
8319            while _next_ordinal_to_read < 1 {
8320                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8321                _next_ordinal_to_read += 1;
8322                next_offset += envelope_size;
8323            }
8324
8325            let next_out_of_line = decoder.next_out_of_line();
8326            let handles_before = decoder.remaining_handles();
8327            if let Some((inlined, num_bytes, num_handles)) =
8328                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8329            {
8330                let member_inline_size =
8331                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8332                if inlined != (member_inline_size <= 4) {
8333                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8334                }
8335                let inner_offset;
8336                let mut inner_depth = depth.clone();
8337                if inlined {
8338                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8339                    inner_offset = next_offset;
8340                } else {
8341                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8342                    inner_depth.increment()?;
8343                }
8344                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8345                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8346                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8347                {
8348                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8349                }
8350                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8351                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8352                }
8353            }
8354
8355            next_offset += envelope_size;
8356            _next_ordinal_to_read += 1;
8357            if next_offset >= end_offset {
8358                return Ok(());
8359            }
8360
8361            // Decode unknown envelopes for gaps in ordinals.
8362            while _next_ordinal_to_read < 2 {
8363                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8364                _next_ordinal_to_read += 1;
8365                next_offset += envelope_size;
8366            }
8367
8368            let next_out_of_line = decoder.next_out_of_line();
8369            let handles_before = decoder.remaining_handles();
8370            if let Some((inlined, num_bytes, num_handles)) =
8371                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8372            {
8373                let member_inline_size =
8374                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8375                if inlined != (member_inline_size <= 4) {
8376                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8377                }
8378                let inner_offset;
8379                let mut inner_depth = depth.clone();
8380                if inlined {
8381                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8382                    inner_offset = next_offset;
8383                } else {
8384                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8385                    inner_depth.increment()?;
8386                }
8387                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8388                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8389                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8390                {
8391                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8392                }
8393                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8394                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8395                }
8396            }
8397
8398            next_offset += envelope_size;
8399
8400            // Decode the remaining unknown envelopes.
8401            while next_offset < end_offset {
8402                _next_ordinal_to_read += 1;
8403                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8404                next_offset += envelope_size;
8405            }
8406
8407            Ok(())
8408        }
8409    }
8410
8411    impl Encoding {
8412        #[inline(always)]
8413        fn max_ordinal_present(&self) -> u64 {
8414            if let Some(_) = self.encoding_type {
8415                return 4;
8416            }
8417            if let Some(_) = self.average_encoding_bitrate {
8418                return 3;
8419            }
8420            if let Some(_) = self.decoded_frame_rate {
8421                return 2;
8422            }
8423            if let Some(_) = self.decoded_channel_count {
8424                return 1;
8425            }
8426            0
8427        }
8428    }
8429
8430    impl fidl::encoding::ValueTypeMarker for Encoding {
8431        type Borrowed<'a> = &'a Self;
8432        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8433            value
8434        }
8435    }
8436
8437    unsafe impl fidl::encoding::TypeMarker for Encoding {
8438        type Owned = Self;
8439
8440        #[inline(always)]
8441        fn inline_align(_context: fidl::encoding::Context) -> usize {
8442            8
8443        }
8444
8445        #[inline(always)]
8446        fn inline_size(_context: fidl::encoding::Context) -> usize {
8447            16
8448        }
8449    }
8450
8451    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Encoding, D> for &Encoding {
8452        unsafe fn encode(
8453            self,
8454            encoder: &mut fidl::encoding::Encoder<'_, D>,
8455            offset: usize,
8456            mut depth: fidl::encoding::Depth,
8457        ) -> fidl::Result<()> {
8458            encoder.debug_check_bounds::<Encoding>(offset);
8459            // Vector header
8460            let max_ordinal: u64 = self.max_ordinal_present();
8461            encoder.write_num(max_ordinal, offset);
8462            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8463            // Calling encoder.out_of_line_offset(0) is not allowed.
8464            if max_ordinal == 0 {
8465                return Ok(());
8466            }
8467            depth.increment()?;
8468            let envelope_size = 8;
8469            let bytes_len = max_ordinal as usize * envelope_size;
8470            #[allow(unused_variables)]
8471            let offset = encoder.out_of_line_offset(bytes_len);
8472            let mut _prev_end_offset: usize = 0;
8473            if 1 > max_ordinal {
8474                return Ok(());
8475            }
8476
8477            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8478            // are envelope_size bytes.
8479            let cur_offset: usize = (1 - 1) * envelope_size;
8480
8481            // Zero reserved fields.
8482            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8483
8484            // Safety:
8485            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8486            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8487            //   envelope_size bytes, there is always sufficient room.
8488            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8489                self.decoded_channel_count
8490                    .as_ref()
8491                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8492                encoder,
8493                offset + cur_offset,
8494                depth,
8495            )?;
8496
8497            _prev_end_offset = cur_offset + envelope_size;
8498            if 2 > max_ordinal {
8499                return Ok(());
8500            }
8501
8502            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8503            // are envelope_size bytes.
8504            let cur_offset: usize = (2 - 1) * envelope_size;
8505
8506            // Zero reserved fields.
8507            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8508
8509            // Safety:
8510            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8511            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8512            //   envelope_size bytes, there is always sufficient room.
8513            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8514                self.decoded_frame_rate
8515                    .as_ref()
8516                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8517                encoder,
8518                offset + cur_offset,
8519                depth,
8520            )?;
8521
8522            _prev_end_offset = cur_offset + envelope_size;
8523            if 3 > max_ordinal {
8524                return Ok(());
8525            }
8526
8527            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8528            // are envelope_size bytes.
8529            let cur_offset: usize = (3 - 1) * envelope_size;
8530
8531            // Zero reserved fields.
8532            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8533
8534            // Safety:
8535            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8536            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8537            //   envelope_size bytes, there is always sufficient room.
8538            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8539                self.average_encoding_bitrate
8540                    .as_ref()
8541                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8542                encoder,
8543                offset + cur_offset,
8544                depth,
8545            )?;
8546
8547            _prev_end_offset = cur_offset + envelope_size;
8548            if 4 > max_ordinal {
8549                return Ok(());
8550            }
8551
8552            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8553            // are envelope_size bytes.
8554            let cur_offset: usize = (4 - 1) * envelope_size;
8555
8556            // Zero reserved fields.
8557            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8558
8559            // Safety:
8560            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8561            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8562            //   envelope_size bytes, there is always sufficient room.
8563            fidl::encoding::encode_in_envelope_optional::<EncodingType, D>(
8564                self.encoding_type
8565                    .as_ref()
8566                    .map(<EncodingType as fidl::encoding::ValueTypeMarker>::borrow),
8567                encoder,
8568                offset + cur_offset,
8569                depth,
8570            )?;
8571
8572            _prev_end_offset = cur_offset + envelope_size;
8573
8574            Ok(())
8575        }
8576    }
8577
8578    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Encoding {
8579        #[inline(always)]
8580        fn new_empty() -> Self {
8581            Self::default()
8582        }
8583
8584        unsafe fn decode(
8585            &mut self,
8586            decoder: &mut fidl::encoding::Decoder<'_, D>,
8587            offset: usize,
8588            mut depth: fidl::encoding::Depth,
8589        ) -> fidl::Result<()> {
8590            decoder.debug_check_bounds::<Self>(offset);
8591            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8592                None => return Err(fidl::Error::NotNullable),
8593                Some(len) => len,
8594            };
8595            // Calling decoder.out_of_line_offset(0) is not allowed.
8596            if len == 0 {
8597                return Ok(());
8598            };
8599            depth.increment()?;
8600            let envelope_size = 8;
8601            let bytes_len = len * envelope_size;
8602            let offset = decoder.out_of_line_offset(bytes_len)?;
8603            // Decode the envelope for each type.
8604            let mut _next_ordinal_to_read = 0;
8605            let mut next_offset = offset;
8606            let end_offset = offset + bytes_len;
8607            _next_ordinal_to_read += 1;
8608            if next_offset >= end_offset {
8609                return Ok(());
8610            }
8611
8612            // Decode unknown envelopes for gaps in ordinals.
8613            while _next_ordinal_to_read < 1 {
8614                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8615                _next_ordinal_to_read += 1;
8616                next_offset += envelope_size;
8617            }
8618
8619            let next_out_of_line = decoder.next_out_of_line();
8620            let handles_before = decoder.remaining_handles();
8621            if let Some((inlined, num_bytes, num_handles)) =
8622                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8623            {
8624                let member_inline_size =
8625                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8626                if inlined != (member_inline_size <= 4) {
8627                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8628                }
8629                let inner_offset;
8630                let mut inner_depth = depth.clone();
8631                if inlined {
8632                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8633                    inner_offset = next_offset;
8634                } else {
8635                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8636                    inner_depth.increment()?;
8637                }
8638                let val_ref =
8639                    self.decoded_channel_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
8640                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8641                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8642                {
8643                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8644                }
8645                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8646                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8647                }
8648            }
8649
8650            next_offset += envelope_size;
8651            _next_ordinal_to_read += 1;
8652            if next_offset >= end_offset {
8653                return Ok(());
8654            }
8655
8656            // Decode unknown envelopes for gaps in ordinals.
8657            while _next_ordinal_to_read < 2 {
8658                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8659                _next_ordinal_to_read += 1;
8660                next_offset += envelope_size;
8661            }
8662
8663            let next_out_of_line = decoder.next_out_of_line();
8664            let handles_before = decoder.remaining_handles();
8665            if let Some((inlined, num_bytes, num_handles)) =
8666                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8667            {
8668                let member_inline_size =
8669                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8670                if inlined != (member_inline_size <= 4) {
8671                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8672                }
8673                let inner_offset;
8674                let mut inner_depth = depth.clone();
8675                if inlined {
8676                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8677                    inner_offset = next_offset;
8678                } else {
8679                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8680                    inner_depth.increment()?;
8681                }
8682                let val_ref =
8683                    self.decoded_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8684                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8686                {
8687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8688                }
8689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8691                }
8692            }
8693
8694            next_offset += envelope_size;
8695            _next_ordinal_to_read += 1;
8696            if next_offset >= end_offset {
8697                return Ok(());
8698            }
8699
8700            // Decode unknown envelopes for gaps in ordinals.
8701            while _next_ordinal_to_read < 3 {
8702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8703                _next_ordinal_to_read += 1;
8704                next_offset += envelope_size;
8705            }
8706
8707            let next_out_of_line = decoder.next_out_of_line();
8708            let handles_before = decoder.remaining_handles();
8709            if let Some((inlined, num_bytes, num_handles)) =
8710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8711            {
8712                let member_inline_size =
8713                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8714                if inlined != (member_inline_size <= 4) {
8715                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8716                }
8717                let inner_offset;
8718                let mut inner_depth = depth.clone();
8719                if inlined {
8720                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8721                    inner_offset = next_offset;
8722                } else {
8723                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8724                    inner_depth.increment()?;
8725                }
8726                let val_ref =
8727                    self.average_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8728                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8729                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8730                {
8731                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8732                }
8733                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8734                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8735                }
8736            }
8737
8738            next_offset += envelope_size;
8739            _next_ordinal_to_read += 1;
8740            if next_offset >= end_offset {
8741                return Ok(());
8742            }
8743
8744            // Decode unknown envelopes for gaps in ordinals.
8745            while _next_ordinal_to_read < 4 {
8746                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8747                _next_ordinal_to_read += 1;
8748                next_offset += envelope_size;
8749            }
8750
8751            let next_out_of_line = decoder.next_out_of_line();
8752            let handles_before = decoder.remaining_handles();
8753            if let Some((inlined, num_bytes, num_handles)) =
8754                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8755            {
8756                let member_inline_size =
8757                    <EncodingType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8758                if inlined != (member_inline_size <= 4) {
8759                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8760                }
8761                let inner_offset;
8762                let mut inner_depth = depth.clone();
8763                if inlined {
8764                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8765                    inner_offset = next_offset;
8766                } else {
8767                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8768                    inner_depth.increment()?;
8769                }
8770                let val_ref =
8771                    self.encoding_type.get_or_insert_with(|| fidl::new_empty!(EncodingType, D));
8772                fidl::decode!(EncodingType, D, val_ref, decoder, inner_offset, inner_depth)?;
8773                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8774                {
8775                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8776                }
8777                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8778                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8779                }
8780            }
8781
8782            next_offset += envelope_size;
8783
8784            // Decode the remaining unknown envelopes.
8785            while next_offset < end_offset {
8786                _next_ordinal_to_read += 1;
8787                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8788                next_offset += envelope_size;
8789            }
8790
8791            Ok(())
8792        }
8793    }
8794
8795    impl Format {
8796        #[inline(always)]
8797        fn max_ordinal_present(&self) -> u64 {
8798            if let Some(_) = self.pcm_format {
8799                return 1;
8800            }
8801            0
8802        }
8803    }
8804
8805    impl fidl::encoding::ValueTypeMarker for Format {
8806        type Borrowed<'a> = &'a Self;
8807        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8808            value
8809        }
8810    }
8811
8812    unsafe impl fidl::encoding::TypeMarker for Format {
8813        type Owned = Self;
8814
8815        #[inline(always)]
8816        fn inline_align(_context: fidl::encoding::Context) -> usize {
8817            8
8818        }
8819
8820        #[inline(always)]
8821        fn inline_size(_context: fidl::encoding::Context) -> usize {
8822            16
8823        }
8824    }
8825
8826    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format, D> for &Format {
8827        unsafe fn encode(
8828            self,
8829            encoder: &mut fidl::encoding::Encoder<'_, D>,
8830            offset: usize,
8831            mut depth: fidl::encoding::Depth,
8832        ) -> fidl::Result<()> {
8833            encoder.debug_check_bounds::<Format>(offset);
8834            // Vector header
8835            let max_ordinal: u64 = self.max_ordinal_present();
8836            encoder.write_num(max_ordinal, offset);
8837            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8838            // Calling encoder.out_of_line_offset(0) is not allowed.
8839            if max_ordinal == 0 {
8840                return Ok(());
8841            }
8842            depth.increment()?;
8843            let envelope_size = 8;
8844            let bytes_len = max_ordinal as usize * envelope_size;
8845            #[allow(unused_variables)]
8846            let offset = encoder.out_of_line_offset(bytes_len);
8847            let mut _prev_end_offset: usize = 0;
8848            if 1 > max_ordinal {
8849                return Ok(());
8850            }
8851
8852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8853            // are envelope_size bytes.
8854            let cur_offset: usize = (1 - 1) * envelope_size;
8855
8856            // Zero reserved fields.
8857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8858
8859            // Safety:
8860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8862            //   envelope_size bytes, there is always sufficient room.
8863            fidl::encoding::encode_in_envelope_optional::<PcmFormat, D>(
8864                self.pcm_format
8865                    .as_ref()
8866                    .map(<PcmFormat as fidl::encoding::ValueTypeMarker>::borrow),
8867                encoder,
8868                offset + cur_offset,
8869                depth,
8870            )?;
8871
8872            _prev_end_offset = cur_offset + envelope_size;
8873
8874            Ok(())
8875        }
8876    }
8877
8878    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
8879        #[inline(always)]
8880        fn new_empty() -> Self {
8881            Self::default()
8882        }
8883
8884        unsafe fn decode(
8885            &mut self,
8886            decoder: &mut fidl::encoding::Decoder<'_, D>,
8887            offset: usize,
8888            mut depth: fidl::encoding::Depth,
8889        ) -> fidl::Result<()> {
8890            decoder.debug_check_bounds::<Self>(offset);
8891            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8892                None => return Err(fidl::Error::NotNullable),
8893                Some(len) => len,
8894            };
8895            // Calling decoder.out_of_line_offset(0) is not allowed.
8896            if len == 0 {
8897                return Ok(());
8898            };
8899            depth.increment()?;
8900            let envelope_size = 8;
8901            let bytes_len = len * envelope_size;
8902            let offset = decoder.out_of_line_offset(bytes_len)?;
8903            // Decode the envelope for each type.
8904            let mut _next_ordinal_to_read = 0;
8905            let mut next_offset = offset;
8906            let end_offset = offset + bytes_len;
8907            _next_ordinal_to_read += 1;
8908            if next_offset >= end_offset {
8909                return Ok(());
8910            }
8911
8912            // Decode unknown envelopes for gaps in ordinals.
8913            while _next_ordinal_to_read < 1 {
8914                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8915                _next_ordinal_to_read += 1;
8916                next_offset += envelope_size;
8917            }
8918
8919            let next_out_of_line = decoder.next_out_of_line();
8920            let handles_before = decoder.remaining_handles();
8921            if let Some((inlined, num_bytes, num_handles)) =
8922                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8923            {
8924                let member_inline_size =
8925                    <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8926                if inlined != (member_inline_size <= 4) {
8927                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8928                }
8929                let inner_offset;
8930                let mut inner_depth = depth.clone();
8931                if inlined {
8932                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8933                    inner_offset = next_offset;
8934                } else {
8935                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8936                    inner_depth.increment()?;
8937                }
8938                let val_ref = self.pcm_format.get_or_insert_with(|| fidl::new_empty!(PcmFormat, D));
8939                fidl::decode!(PcmFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
8940                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8941                {
8942                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8943                }
8944                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8945                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8946                }
8947            }
8948
8949            next_offset += envelope_size;
8950
8951            // Decode the remaining unknown envelopes.
8952            while next_offset < end_offset {
8953                _next_ordinal_to_read += 1;
8954                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8955                next_offset += envelope_size;
8956            }
8957
8958            Ok(())
8959        }
8960    }
8961
8962    impl GainState {
8963        #[inline(always)]
8964        fn max_ordinal_present(&self) -> u64 {
8965            if let Some(_) = self.gain_db {
8966                return 3;
8967            }
8968            if let Some(_) = self.agc_enabled {
8969                return 2;
8970            }
8971            if let Some(_) = self.muted {
8972                return 1;
8973            }
8974            0
8975        }
8976    }
8977
8978    impl fidl::encoding::ValueTypeMarker for GainState {
8979        type Borrowed<'a> = &'a Self;
8980        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8981            value
8982        }
8983    }
8984
8985    unsafe impl fidl::encoding::TypeMarker for GainState {
8986        type Owned = Self;
8987
8988        #[inline(always)]
8989        fn inline_align(_context: fidl::encoding::Context) -> usize {
8990            8
8991        }
8992
8993        #[inline(always)]
8994        fn inline_size(_context: fidl::encoding::Context) -> usize {
8995            16
8996        }
8997    }
8998
8999    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainState, D>
9000        for &GainState
9001    {
9002        unsafe fn encode(
9003            self,
9004            encoder: &mut fidl::encoding::Encoder<'_, D>,
9005            offset: usize,
9006            mut depth: fidl::encoding::Depth,
9007        ) -> fidl::Result<()> {
9008            encoder.debug_check_bounds::<GainState>(offset);
9009            // Vector header
9010            let max_ordinal: u64 = self.max_ordinal_present();
9011            encoder.write_num(max_ordinal, offset);
9012            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9013            // Calling encoder.out_of_line_offset(0) is not allowed.
9014            if max_ordinal == 0 {
9015                return Ok(());
9016            }
9017            depth.increment()?;
9018            let envelope_size = 8;
9019            let bytes_len = max_ordinal as usize * envelope_size;
9020            #[allow(unused_variables)]
9021            let offset = encoder.out_of_line_offset(bytes_len);
9022            let mut _prev_end_offset: usize = 0;
9023            if 1 > max_ordinal {
9024                return Ok(());
9025            }
9026
9027            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9028            // are envelope_size bytes.
9029            let cur_offset: usize = (1 - 1) * envelope_size;
9030
9031            // Zero reserved fields.
9032            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9033
9034            // Safety:
9035            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9036            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9037            //   envelope_size bytes, there is always sufficient room.
9038            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9039                self.muted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9040                encoder,
9041                offset + cur_offset,
9042                depth,
9043            )?;
9044
9045            _prev_end_offset = cur_offset + envelope_size;
9046            if 2 > max_ordinal {
9047                return Ok(());
9048            }
9049
9050            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9051            // are envelope_size bytes.
9052            let cur_offset: usize = (2 - 1) * envelope_size;
9053
9054            // Zero reserved fields.
9055            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9056
9057            // Safety:
9058            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9059            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9060            //   envelope_size bytes, there is always sufficient room.
9061            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9062                self.agc_enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9063                encoder,
9064                offset + cur_offset,
9065                depth,
9066            )?;
9067
9068            _prev_end_offset = cur_offset + envelope_size;
9069            if 3 > max_ordinal {
9070                return Ok(());
9071            }
9072
9073            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9074            // are envelope_size bytes.
9075            let cur_offset: usize = (3 - 1) * envelope_size;
9076
9077            // Zero reserved fields.
9078            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9079
9080            // Safety:
9081            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9082            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9083            //   envelope_size bytes, there is always sufficient room.
9084            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9085                self.gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9086                encoder,
9087                offset + cur_offset,
9088                depth,
9089            )?;
9090
9091            _prev_end_offset = cur_offset + envelope_size;
9092
9093            Ok(())
9094        }
9095    }
9096
9097    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainState {
9098        #[inline(always)]
9099        fn new_empty() -> Self {
9100            Self::default()
9101        }
9102
9103        unsafe fn decode(
9104            &mut self,
9105            decoder: &mut fidl::encoding::Decoder<'_, D>,
9106            offset: usize,
9107            mut depth: fidl::encoding::Depth,
9108        ) -> fidl::Result<()> {
9109            decoder.debug_check_bounds::<Self>(offset);
9110            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9111                None => return Err(fidl::Error::NotNullable),
9112                Some(len) => len,
9113            };
9114            // Calling decoder.out_of_line_offset(0) is not allowed.
9115            if len == 0 {
9116                return Ok(());
9117            };
9118            depth.increment()?;
9119            let envelope_size = 8;
9120            let bytes_len = len * envelope_size;
9121            let offset = decoder.out_of_line_offset(bytes_len)?;
9122            // Decode the envelope for each type.
9123            let mut _next_ordinal_to_read = 0;
9124            let mut next_offset = offset;
9125            let end_offset = offset + bytes_len;
9126            _next_ordinal_to_read += 1;
9127            if next_offset >= end_offset {
9128                return Ok(());
9129            }
9130
9131            // Decode unknown envelopes for gaps in ordinals.
9132            while _next_ordinal_to_read < 1 {
9133                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9134                _next_ordinal_to_read += 1;
9135                next_offset += envelope_size;
9136            }
9137
9138            let next_out_of_line = decoder.next_out_of_line();
9139            let handles_before = decoder.remaining_handles();
9140            if let Some((inlined, num_bytes, num_handles)) =
9141                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9142            {
9143                let member_inline_size =
9144                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9145                if inlined != (member_inline_size <= 4) {
9146                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9147                }
9148                let inner_offset;
9149                let mut inner_depth = depth.clone();
9150                if inlined {
9151                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9152                    inner_offset = next_offset;
9153                } else {
9154                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9155                    inner_depth.increment()?;
9156                }
9157                let val_ref = self.muted.get_or_insert_with(|| fidl::new_empty!(bool, D));
9158                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9159                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9160                {
9161                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9162                }
9163                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9164                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9165                }
9166            }
9167
9168            next_offset += envelope_size;
9169            _next_ordinal_to_read += 1;
9170            if next_offset >= end_offset {
9171                return Ok(());
9172            }
9173
9174            // Decode unknown envelopes for gaps in ordinals.
9175            while _next_ordinal_to_read < 2 {
9176                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9177                _next_ordinal_to_read += 1;
9178                next_offset += envelope_size;
9179            }
9180
9181            let next_out_of_line = decoder.next_out_of_line();
9182            let handles_before = decoder.remaining_handles();
9183            if let Some((inlined, num_bytes, num_handles)) =
9184                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9185            {
9186                let member_inline_size =
9187                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9188                if inlined != (member_inline_size <= 4) {
9189                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9190                }
9191                let inner_offset;
9192                let mut inner_depth = depth.clone();
9193                if inlined {
9194                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9195                    inner_offset = next_offset;
9196                } else {
9197                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9198                    inner_depth.increment()?;
9199                }
9200                let val_ref = self.agc_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
9201                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9202                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9203                {
9204                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9205                }
9206                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9207                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9208                }
9209            }
9210
9211            next_offset += envelope_size;
9212            _next_ordinal_to_read += 1;
9213            if next_offset >= end_offset {
9214                return Ok(());
9215            }
9216
9217            // Decode unknown envelopes for gaps in ordinals.
9218            while _next_ordinal_to_read < 3 {
9219                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9220                _next_ordinal_to_read += 1;
9221                next_offset += envelope_size;
9222            }
9223
9224            let next_out_of_line = decoder.next_out_of_line();
9225            let handles_before = decoder.remaining_handles();
9226            if let Some((inlined, num_bytes, num_handles)) =
9227                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9228            {
9229                let member_inline_size =
9230                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9231                if inlined != (member_inline_size <= 4) {
9232                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9233                }
9234                let inner_offset;
9235                let mut inner_depth = depth.clone();
9236                if inlined {
9237                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9238                    inner_offset = next_offset;
9239                } else {
9240                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9241                    inner_depth.increment()?;
9242                }
9243                let val_ref = self.gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9244                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9245                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9246                {
9247                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9248                }
9249                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9250                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9251                }
9252            }
9253
9254            next_offset += envelope_size;
9255
9256            // Decode the remaining unknown envelopes.
9257            while next_offset < end_offset {
9258                _next_ordinal_to_read += 1;
9259                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9260                next_offset += envelope_size;
9261            }
9262
9263            Ok(())
9264        }
9265    }
9266
9267    impl HealthState {
9268        #[inline(always)]
9269        fn max_ordinal_present(&self) -> u64 {
9270            if let Some(_) = self.healthy {
9271                return 1;
9272            }
9273            0
9274        }
9275    }
9276
9277    impl fidl::encoding::ValueTypeMarker for HealthState {
9278        type Borrowed<'a> = &'a Self;
9279        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9280            value
9281        }
9282    }
9283
9284    unsafe impl fidl::encoding::TypeMarker for HealthState {
9285        type Owned = Self;
9286
9287        #[inline(always)]
9288        fn inline_align(_context: fidl::encoding::Context) -> usize {
9289            8
9290        }
9291
9292        #[inline(always)]
9293        fn inline_size(_context: fidl::encoding::Context) -> usize {
9294            16
9295        }
9296    }
9297
9298    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthState, D>
9299        for &HealthState
9300    {
9301        unsafe fn encode(
9302            self,
9303            encoder: &mut fidl::encoding::Encoder<'_, D>,
9304            offset: usize,
9305            mut depth: fidl::encoding::Depth,
9306        ) -> fidl::Result<()> {
9307            encoder.debug_check_bounds::<HealthState>(offset);
9308            // Vector header
9309            let max_ordinal: u64 = self.max_ordinal_present();
9310            encoder.write_num(max_ordinal, offset);
9311            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9312            // Calling encoder.out_of_line_offset(0) is not allowed.
9313            if max_ordinal == 0 {
9314                return Ok(());
9315            }
9316            depth.increment()?;
9317            let envelope_size = 8;
9318            let bytes_len = max_ordinal as usize * envelope_size;
9319            #[allow(unused_variables)]
9320            let offset = encoder.out_of_line_offset(bytes_len);
9321            let mut _prev_end_offset: usize = 0;
9322            if 1 > max_ordinal {
9323                return Ok(());
9324            }
9325
9326            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9327            // are envelope_size bytes.
9328            let cur_offset: usize = (1 - 1) * envelope_size;
9329
9330            // Zero reserved fields.
9331            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9332
9333            // Safety:
9334            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9335            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9336            //   envelope_size bytes, there is always sufficient room.
9337            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9338                self.healthy.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9339                encoder,
9340                offset + cur_offset,
9341                depth,
9342            )?;
9343
9344            _prev_end_offset = cur_offset + envelope_size;
9345
9346            Ok(())
9347        }
9348    }
9349
9350    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthState {
9351        #[inline(always)]
9352        fn new_empty() -> Self {
9353            Self::default()
9354        }
9355
9356        unsafe fn decode(
9357            &mut self,
9358            decoder: &mut fidl::encoding::Decoder<'_, D>,
9359            offset: usize,
9360            mut depth: fidl::encoding::Depth,
9361        ) -> fidl::Result<()> {
9362            decoder.debug_check_bounds::<Self>(offset);
9363            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9364                None => return Err(fidl::Error::NotNullable),
9365                Some(len) => len,
9366            };
9367            // Calling decoder.out_of_line_offset(0) is not allowed.
9368            if len == 0 {
9369                return Ok(());
9370            };
9371            depth.increment()?;
9372            let envelope_size = 8;
9373            let bytes_len = len * envelope_size;
9374            let offset = decoder.out_of_line_offset(bytes_len)?;
9375            // Decode the envelope for each type.
9376            let mut _next_ordinal_to_read = 0;
9377            let mut next_offset = offset;
9378            let end_offset = offset + bytes_len;
9379            _next_ordinal_to_read += 1;
9380            if next_offset >= end_offset {
9381                return Ok(());
9382            }
9383
9384            // Decode unknown envelopes for gaps in ordinals.
9385            while _next_ordinal_to_read < 1 {
9386                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9387                _next_ordinal_to_read += 1;
9388                next_offset += envelope_size;
9389            }
9390
9391            let next_out_of_line = decoder.next_out_of_line();
9392            let handles_before = decoder.remaining_handles();
9393            if let Some((inlined, num_bytes, num_handles)) =
9394                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9395            {
9396                let member_inline_size =
9397                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9398                if inlined != (member_inline_size <= 4) {
9399                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9400                }
9401                let inner_offset;
9402                let mut inner_depth = depth.clone();
9403                if inlined {
9404                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9405                    inner_offset = next_offset;
9406                } else {
9407                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9408                    inner_depth.increment()?;
9409                }
9410                let val_ref = self.healthy.get_or_insert_with(|| fidl::new_empty!(bool, D));
9411                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9412                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9413                {
9414                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9415                }
9416                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9417                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9418                }
9419            }
9420
9421            next_offset += envelope_size;
9422
9423            // Decode the remaining unknown envelopes.
9424            while next_offset < end_offset {
9425                _next_ordinal_to_read += 1;
9426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9427                next_offset += envelope_size;
9428            }
9429
9430            Ok(())
9431        }
9432    }
9433
9434    impl PacketStreamProperties {
9435        #[inline(always)]
9436        fn max_ordinal_present(&self) -> u64 {
9437            if let Some(_) = self.supported_buffer_types {
9438                return 2;
9439            }
9440            if let Some(_) = self.needs_cache_flush_or_invalidate {
9441                return 1;
9442            }
9443            0
9444        }
9445    }
9446
9447    impl fidl::encoding::ValueTypeMarker for PacketStreamProperties {
9448        type Borrowed<'a> = &'a Self;
9449        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9450            value
9451        }
9452    }
9453
9454    unsafe impl fidl::encoding::TypeMarker for PacketStreamProperties {
9455        type Owned = Self;
9456
9457        #[inline(always)]
9458        fn inline_align(_context: fidl::encoding::Context) -> usize {
9459            8
9460        }
9461
9462        #[inline(always)]
9463        fn inline_size(_context: fidl::encoding::Context) -> usize {
9464            16
9465        }
9466    }
9467
9468    unsafe impl<D: fidl::encoding::ResourceDialect>
9469        fidl::encoding::Encode<PacketStreamProperties, D> for &PacketStreamProperties
9470    {
9471        unsafe fn encode(
9472            self,
9473            encoder: &mut fidl::encoding::Encoder<'_, D>,
9474            offset: usize,
9475            mut depth: fidl::encoding::Depth,
9476        ) -> fidl::Result<()> {
9477            encoder.debug_check_bounds::<PacketStreamProperties>(offset);
9478            // Vector header
9479            let max_ordinal: u64 = self.max_ordinal_present();
9480            encoder.write_num(max_ordinal, offset);
9481            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9482            // Calling encoder.out_of_line_offset(0) is not allowed.
9483            if max_ordinal == 0 {
9484                return Ok(());
9485            }
9486            depth.increment()?;
9487            let envelope_size = 8;
9488            let bytes_len = max_ordinal as usize * envelope_size;
9489            #[allow(unused_variables)]
9490            let offset = encoder.out_of_line_offset(bytes_len);
9491            let mut _prev_end_offset: usize = 0;
9492            if 1 > max_ordinal {
9493                return Ok(());
9494            }
9495
9496            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9497            // are envelope_size bytes.
9498            let cur_offset: usize = (1 - 1) * envelope_size;
9499
9500            // Zero reserved fields.
9501            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9502
9503            // Safety:
9504            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9505            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9506            //   envelope_size bytes, there is always sufficient room.
9507            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9508                self.needs_cache_flush_or_invalidate
9509                    .as_ref()
9510                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9511                encoder,
9512                offset + cur_offset,
9513                depth,
9514            )?;
9515
9516            _prev_end_offset = cur_offset + envelope_size;
9517            if 2 > max_ordinal {
9518                return Ok(());
9519            }
9520
9521            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9522            // are envelope_size bytes.
9523            let cur_offset: usize = (2 - 1) * envelope_size;
9524
9525            // Zero reserved fields.
9526            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9527
9528            // Safety:
9529            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9530            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9531            //   envelope_size bytes, there is always sufficient room.
9532            fidl::encoding::encode_in_envelope_optional::<BufferType, D>(
9533                self.supported_buffer_types
9534                    .as_ref()
9535                    .map(<BufferType as fidl::encoding::ValueTypeMarker>::borrow),
9536                encoder,
9537                offset + cur_offset,
9538                depth,
9539            )?;
9540
9541            _prev_end_offset = cur_offset + envelope_size;
9542
9543            Ok(())
9544        }
9545    }
9546
9547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9548        for PacketStreamProperties
9549    {
9550        #[inline(always)]
9551        fn new_empty() -> Self {
9552            Self::default()
9553        }
9554
9555        unsafe fn decode(
9556            &mut self,
9557            decoder: &mut fidl::encoding::Decoder<'_, D>,
9558            offset: usize,
9559            mut depth: fidl::encoding::Depth,
9560        ) -> fidl::Result<()> {
9561            decoder.debug_check_bounds::<Self>(offset);
9562            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9563                None => return Err(fidl::Error::NotNullable),
9564                Some(len) => len,
9565            };
9566            // Calling decoder.out_of_line_offset(0) is not allowed.
9567            if len == 0 {
9568                return Ok(());
9569            };
9570            depth.increment()?;
9571            let envelope_size = 8;
9572            let bytes_len = len * envelope_size;
9573            let offset = decoder.out_of_line_offset(bytes_len)?;
9574            // Decode the envelope for each type.
9575            let mut _next_ordinal_to_read = 0;
9576            let mut next_offset = offset;
9577            let end_offset = offset + bytes_len;
9578            _next_ordinal_to_read += 1;
9579            if next_offset >= end_offset {
9580                return Ok(());
9581            }
9582
9583            // Decode unknown envelopes for gaps in ordinals.
9584            while _next_ordinal_to_read < 1 {
9585                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9586                _next_ordinal_to_read += 1;
9587                next_offset += envelope_size;
9588            }
9589
9590            let next_out_of_line = decoder.next_out_of_line();
9591            let handles_before = decoder.remaining_handles();
9592            if let Some((inlined, num_bytes, num_handles)) =
9593                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9594            {
9595                let member_inline_size =
9596                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9597                if inlined != (member_inline_size <= 4) {
9598                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9599                }
9600                let inner_offset;
9601                let mut inner_depth = depth.clone();
9602                if inlined {
9603                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9604                    inner_offset = next_offset;
9605                } else {
9606                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9607                    inner_depth.increment()?;
9608                }
9609                let val_ref = self
9610                    .needs_cache_flush_or_invalidate
9611                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9612                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9613                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9614                {
9615                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9616                }
9617                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9618                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9619                }
9620            }
9621
9622            next_offset += envelope_size;
9623            _next_ordinal_to_read += 1;
9624            if next_offset >= end_offset {
9625                return Ok(());
9626            }
9627
9628            // Decode unknown envelopes for gaps in ordinals.
9629            while _next_ordinal_to_read < 2 {
9630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9631                _next_ordinal_to_read += 1;
9632                next_offset += envelope_size;
9633            }
9634
9635            let next_out_of_line = decoder.next_out_of_line();
9636            let handles_before = decoder.remaining_handles();
9637            if let Some((inlined, num_bytes, num_handles)) =
9638                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9639            {
9640                let member_inline_size =
9641                    <BufferType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9642                if inlined != (member_inline_size <= 4) {
9643                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9644                }
9645                let inner_offset;
9646                let mut inner_depth = depth.clone();
9647                if inlined {
9648                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9649                    inner_offset = next_offset;
9650                } else {
9651                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9652                    inner_depth.increment()?;
9653                }
9654                let val_ref = self
9655                    .supported_buffer_types
9656                    .get_or_insert_with(|| fidl::new_empty!(BufferType, D));
9657                fidl::decode!(BufferType, D, val_ref, decoder, inner_offset, inner_depth)?;
9658                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9659                {
9660                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9661                }
9662                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9663                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9664                }
9665            }
9666
9667            next_offset += envelope_size;
9668
9669            // Decode the remaining unknown envelopes.
9670            while next_offset < end_offset {
9671                _next_ordinal_to_read += 1;
9672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9673                next_offset += envelope_size;
9674            }
9675
9676            Ok(())
9677        }
9678    }
9679
9680    impl PacketStreamSinkPutPacketResponse {
9681        #[inline(always)]
9682        fn max_ordinal_present(&self) -> u64 {
9683            0
9684        }
9685    }
9686
9687    impl fidl::encoding::ValueTypeMarker for PacketStreamSinkPutPacketResponse {
9688        type Borrowed<'a> = &'a Self;
9689        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9690            value
9691        }
9692    }
9693
9694    unsafe impl fidl::encoding::TypeMarker for PacketStreamSinkPutPacketResponse {
9695        type Owned = Self;
9696
9697        #[inline(always)]
9698        fn inline_align(_context: fidl::encoding::Context) -> usize {
9699            8
9700        }
9701
9702        #[inline(always)]
9703        fn inline_size(_context: fidl::encoding::Context) -> usize {
9704            16
9705        }
9706    }
9707
9708    unsafe impl<D: fidl::encoding::ResourceDialect>
9709        fidl::encoding::Encode<PacketStreamSinkPutPacketResponse, D>
9710        for &PacketStreamSinkPutPacketResponse
9711    {
9712        unsafe fn encode(
9713            self,
9714            encoder: &mut fidl::encoding::Encoder<'_, D>,
9715            offset: usize,
9716            mut depth: fidl::encoding::Depth,
9717        ) -> fidl::Result<()> {
9718            encoder.debug_check_bounds::<PacketStreamSinkPutPacketResponse>(offset);
9719            // Vector header
9720            let max_ordinal: u64 = self.max_ordinal_present();
9721            encoder.write_num(max_ordinal, offset);
9722            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9723            // Calling encoder.out_of_line_offset(0) is not allowed.
9724            if max_ordinal == 0 {
9725                return Ok(());
9726            }
9727            depth.increment()?;
9728            let envelope_size = 8;
9729            let bytes_len = max_ordinal as usize * envelope_size;
9730            #[allow(unused_variables)]
9731            let offset = encoder.out_of_line_offset(bytes_len);
9732            let mut _prev_end_offset: usize = 0;
9733
9734            Ok(())
9735        }
9736    }
9737
9738    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9739        for PacketStreamSinkPutPacketResponse
9740    {
9741        #[inline(always)]
9742        fn new_empty() -> Self {
9743            Self::default()
9744        }
9745
9746        unsafe fn decode(
9747            &mut self,
9748            decoder: &mut fidl::encoding::Decoder<'_, D>,
9749            offset: usize,
9750            mut depth: fidl::encoding::Depth,
9751        ) -> fidl::Result<()> {
9752            decoder.debug_check_bounds::<Self>(offset);
9753            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9754                None => return Err(fidl::Error::NotNullable),
9755                Some(len) => len,
9756            };
9757            // Calling decoder.out_of_line_offset(0) is not allowed.
9758            if len == 0 {
9759                return Ok(());
9760            };
9761            depth.increment()?;
9762            let envelope_size = 8;
9763            let bytes_len = len * envelope_size;
9764            let offset = decoder.out_of_line_offset(bytes_len)?;
9765            // Decode the envelope for each type.
9766            let mut _next_ordinal_to_read = 0;
9767            let mut next_offset = offset;
9768            let end_offset = offset + bytes_len;
9769
9770            // Decode the remaining unknown envelopes.
9771            while next_offset < end_offset {
9772                _next_ordinal_to_read += 1;
9773                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9774                next_offset += envelope_size;
9775            }
9776
9777            Ok(())
9778        }
9779    }
9780
9781    impl PcmSupportedFormats {
9782        #[inline(always)]
9783        fn max_ordinal_present(&self) -> u64 {
9784            if let Some(_) = self.frame_rates {
9785                return 5;
9786            }
9787            if let Some(_) = self.valid_bits_per_sample {
9788                return 4;
9789            }
9790            if let Some(_) = self.bytes_per_sample {
9791                return 3;
9792            }
9793            if let Some(_) = self.sample_formats {
9794                return 2;
9795            }
9796            if let Some(_) = self.channel_sets {
9797                return 1;
9798            }
9799            0
9800        }
9801    }
9802
9803    impl fidl::encoding::ValueTypeMarker for PcmSupportedFormats {
9804        type Borrowed<'a> = &'a Self;
9805        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9806            value
9807        }
9808    }
9809
9810    unsafe impl fidl::encoding::TypeMarker for PcmSupportedFormats {
9811        type Owned = Self;
9812
9813        #[inline(always)]
9814        fn inline_align(_context: fidl::encoding::Context) -> usize {
9815            8
9816        }
9817
9818        #[inline(always)]
9819        fn inline_size(_context: fidl::encoding::Context) -> usize {
9820            16
9821        }
9822    }
9823
9824    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmSupportedFormats, D>
9825        for &PcmSupportedFormats
9826    {
9827        unsafe fn encode(
9828            self,
9829            encoder: &mut fidl::encoding::Encoder<'_, D>,
9830            offset: usize,
9831            mut depth: fidl::encoding::Depth,
9832        ) -> fidl::Result<()> {
9833            encoder.debug_check_bounds::<PcmSupportedFormats>(offset);
9834            // Vector header
9835            let max_ordinal: u64 = self.max_ordinal_present();
9836            encoder.write_num(max_ordinal, offset);
9837            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9838            // Calling encoder.out_of_line_offset(0) is not allowed.
9839            if max_ordinal == 0 {
9840                return Ok(());
9841            }
9842            depth.increment()?;
9843            let envelope_size = 8;
9844            let bytes_len = max_ordinal as usize * envelope_size;
9845            #[allow(unused_variables)]
9846            let offset = encoder.out_of_line_offset(bytes_len);
9847            let mut _prev_end_offset: usize = 0;
9848            if 1 > max_ordinal {
9849                return Ok(());
9850            }
9851
9852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9853            // are envelope_size bytes.
9854            let cur_offset: usize = (1 - 1) * envelope_size;
9855
9856            // Zero reserved fields.
9857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9858
9859            // Safety:
9860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9862            //   envelope_size bytes, there is always sufficient room.
9863            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
9864            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
9865            encoder, offset + cur_offset, depth
9866        )?;
9867
9868            _prev_end_offset = cur_offset + envelope_size;
9869            if 2 > max_ordinal {
9870                return Ok(());
9871            }
9872
9873            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9874            // are envelope_size bytes.
9875            let cur_offset: usize = (2 - 1) * envelope_size;
9876
9877            // Zero reserved fields.
9878            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9879
9880            // Safety:
9881            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9882            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9883            //   envelope_size bytes, there is always sufficient room.
9884            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleFormat, 3>, D>(
9885            self.sample_formats.as_ref().map(<fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::ValueTypeMarker>::borrow),
9886            encoder, offset + cur_offset, depth
9887        )?;
9888
9889            _prev_end_offset = cur_offset + envelope_size;
9890            if 3 > max_ordinal {
9891                return Ok(());
9892            }
9893
9894            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9895            // are envelope_size bytes.
9896            let cur_offset: usize = (3 - 1) * envelope_size;
9897
9898            // Zero reserved fields.
9899            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9900
9901            // Safety:
9902            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9903            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9904            //   envelope_size bytes, there is always sufficient room.
9905            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9906                self.bytes_per_sample.as_ref().map(
9907                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9908                ),
9909                encoder,
9910                offset + cur_offset,
9911                depth,
9912            )?;
9913
9914            _prev_end_offset = cur_offset + envelope_size;
9915            if 4 > max_ordinal {
9916                return Ok(());
9917            }
9918
9919            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9920            // are envelope_size bytes.
9921            let cur_offset: usize = (4 - 1) * envelope_size;
9922
9923            // Zero reserved fields.
9924            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9925
9926            // Safety:
9927            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9928            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9929            //   envelope_size bytes, there is always sufficient room.
9930            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9931                self.valid_bits_per_sample.as_ref().map(
9932                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9933                ),
9934                encoder,
9935                offset + cur_offset,
9936                depth,
9937            )?;
9938
9939            _prev_end_offset = cur_offset + envelope_size;
9940            if 5 > max_ordinal {
9941                return Ok(());
9942            }
9943
9944            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9945            // are envelope_size bytes.
9946            let cur_offset: usize = (5 - 1) * envelope_size;
9947
9948            // Zero reserved fields.
9949            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9950
9951            // Safety:
9952            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9953            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9954            //   envelope_size bytes, there is always sufficient room.
9955            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
9956                self.frame_rates.as_ref().map(
9957                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
9958                ),
9959                encoder,
9960                offset + cur_offset,
9961                depth,
9962            )?;
9963
9964            _prev_end_offset = cur_offset + envelope_size;
9965
9966            Ok(())
9967        }
9968    }
9969
9970    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmSupportedFormats {
9971        #[inline(always)]
9972        fn new_empty() -> Self {
9973            Self::default()
9974        }
9975
9976        unsafe fn decode(
9977            &mut self,
9978            decoder: &mut fidl::encoding::Decoder<'_, D>,
9979            offset: usize,
9980            mut depth: fidl::encoding::Depth,
9981        ) -> fidl::Result<()> {
9982            decoder.debug_check_bounds::<Self>(offset);
9983            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9984                None => return Err(fidl::Error::NotNullable),
9985                Some(len) => len,
9986            };
9987            // Calling decoder.out_of_line_offset(0) is not allowed.
9988            if len == 0 {
9989                return Ok(());
9990            };
9991            depth.increment()?;
9992            let envelope_size = 8;
9993            let bytes_len = len * envelope_size;
9994            let offset = decoder.out_of_line_offset(bytes_len)?;
9995            // Decode the envelope for each type.
9996            let mut _next_ordinal_to_read = 0;
9997            let mut next_offset = offset;
9998            let end_offset = offset + bytes_len;
9999            _next_ordinal_to_read += 1;
10000            if next_offset >= end_offset {
10001                return Ok(());
10002            }
10003
10004            // Decode unknown envelopes for gaps in ordinals.
10005            while _next_ordinal_to_read < 1 {
10006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10007                _next_ordinal_to_read += 1;
10008                next_offset += envelope_size;
10009            }
10010
10011            let next_out_of_line = decoder.next_out_of_line();
10012            let handles_before = decoder.remaining_handles();
10013            if let Some((inlined, num_bytes, num_handles)) =
10014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10015            {
10016                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10017                if inlined != (member_inline_size <= 4) {
10018                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10019                }
10020                let inner_offset;
10021                let mut inner_depth = depth.clone();
10022                if inlined {
10023                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10024                    inner_offset = next_offset;
10025                } else {
10026                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10027                    inner_depth.increment()?;
10028                }
10029                let val_ref = self.channel_sets.get_or_insert_with(
10030                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
10031                );
10032                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10034                {
10035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10036                }
10037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10039                }
10040            }
10041
10042            next_offset += envelope_size;
10043            _next_ordinal_to_read += 1;
10044            if next_offset >= end_offset {
10045                return Ok(());
10046            }
10047
10048            // Decode unknown envelopes for gaps in ordinals.
10049            while _next_ordinal_to_read < 2 {
10050                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10051                _next_ordinal_to_read += 1;
10052                next_offset += envelope_size;
10053            }
10054
10055            let next_out_of_line = decoder.next_out_of_line();
10056            let handles_before = decoder.remaining_handles();
10057            if let Some((inlined, num_bytes, num_handles)) =
10058                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10059            {
10060                let member_inline_size = <fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10061                if inlined != (member_inline_size <= 4) {
10062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10063                }
10064                let inner_offset;
10065                let mut inner_depth = depth.clone();
10066                if inlined {
10067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10068                    inner_offset = next_offset;
10069                } else {
10070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10071                    inner_depth.increment()?;
10072                }
10073                let val_ref = self.sample_formats.get_or_insert_with(
10074                    || fidl::new_empty!(fidl::encoding::Vector<SampleFormat, 3>, D),
10075                );
10076                fidl::decode!(fidl::encoding::Vector<SampleFormat, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
10077                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10078                {
10079                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10080                }
10081                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10082                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10083                }
10084            }
10085
10086            next_offset += envelope_size;
10087            _next_ordinal_to_read += 1;
10088            if next_offset >= end_offset {
10089                return Ok(());
10090            }
10091
10092            // Decode unknown envelopes for gaps in ordinals.
10093            while _next_ordinal_to_read < 3 {
10094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10095                _next_ordinal_to_read += 1;
10096                next_offset += envelope_size;
10097            }
10098
10099            let next_out_of_line = decoder.next_out_of_line();
10100            let handles_before = decoder.remaining_handles();
10101            if let Some((inlined, num_bytes, num_handles)) =
10102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10103            {
10104                let member_inline_size =
10105                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10106                        decoder.context,
10107                    );
10108                if inlined != (member_inline_size <= 4) {
10109                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10110                }
10111                let inner_offset;
10112                let mut inner_depth = depth.clone();
10113                if inlined {
10114                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10115                    inner_offset = next_offset;
10116                } else {
10117                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10118                    inner_depth.increment()?;
10119                }
10120                let val_ref = self
10121                    .bytes_per_sample
10122                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10123                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10125                {
10126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10127                }
10128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10130                }
10131            }
10132
10133            next_offset += envelope_size;
10134            _next_ordinal_to_read += 1;
10135            if next_offset >= end_offset {
10136                return Ok(());
10137            }
10138
10139            // Decode unknown envelopes for gaps in ordinals.
10140            while _next_ordinal_to_read < 4 {
10141                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10142                _next_ordinal_to_read += 1;
10143                next_offset += envelope_size;
10144            }
10145
10146            let next_out_of_line = decoder.next_out_of_line();
10147            let handles_before = decoder.remaining_handles();
10148            if let Some((inlined, num_bytes, num_handles)) =
10149                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10150            {
10151                let member_inline_size =
10152                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10153                        decoder.context,
10154                    );
10155                if inlined != (member_inline_size <= 4) {
10156                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10157                }
10158                let inner_offset;
10159                let mut inner_depth = depth.clone();
10160                if inlined {
10161                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10162                    inner_offset = next_offset;
10163                } else {
10164                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10165                    inner_depth.increment()?;
10166                }
10167                let val_ref = self
10168                    .valid_bits_per_sample
10169                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10170                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10172                {
10173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10174                }
10175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10177                }
10178            }
10179
10180            next_offset += envelope_size;
10181            _next_ordinal_to_read += 1;
10182            if next_offset >= end_offset {
10183                return Ok(());
10184            }
10185
10186            // Decode unknown envelopes for gaps in ordinals.
10187            while _next_ordinal_to_read < 5 {
10188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10189                _next_ordinal_to_read += 1;
10190                next_offset += envelope_size;
10191            }
10192
10193            let next_out_of_line = decoder.next_out_of_line();
10194            let handles_before = decoder.remaining_handles();
10195            if let Some((inlined, num_bytes, num_handles)) =
10196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10197            {
10198                let member_inline_size =
10199                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
10200                        decoder.context,
10201                    );
10202                if inlined != (member_inline_size <= 4) {
10203                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10204                }
10205                let inner_offset;
10206                let mut inner_depth = depth.clone();
10207                if inlined {
10208                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10209                    inner_offset = next_offset;
10210                } else {
10211                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10212                    inner_depth.increment()?;
10213                }
10214                let val_ref = self
10215                    .frame_rates
10216                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
10217                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10219                {
10220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10221                }
10222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10224                }
10225            }
10226
10227            next_offset += envelope_size;
10228
10229            // Decode the remaining unknown envelopes.
10230            while next_offset < end_offset {
10231                _next_ordinal_to_read += 1;
10232                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10233                next_offset += envelope_size;
10234            }
10235
10236            Ok(())
10237        }
10238    }
10239
10240    impl PlugState {
10241        #[inline(always)]
10242        fn max_ordinal_present(&self) -> u64 {
10243            if let Some(_) = self.plug_state_time {
10244                return 2;
10245            }
10246            if let Some(_) = self.plugged {
10247                return 1;
10248            }
10249            0
10250        }
10251    }
10252
10253    impl fidl::encoding::ValueTypeMarker for PlugState {
10254        type Borrowed<'a> = &'a Self;
10255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10256            value
10257        }
10258    }
10259
10260    unsafe impl fidl::encoding::TypeMarker for PlugState {
10261        type Owned = Self;
10262
10263        #[inline(always)]
10264        fn inline_align(_context: fidl::encoding::Context) -> usize {
10265            8
10266        }
10267
10268        #[inline(always)]
10269        fn inline_size(_context: fidl::encoding::Context) -> usize {
10270            16
10271        }
10272    }
10273
10274    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugState, D>
10275        for &PlugState
10276    {
10277        unsafe fn encode(
10278            self,
10279            encoder: &mut fidl::encoding::Encoder<'_, D>,
10280            offset: usize,
10281            mut depth: fidl::encoding::Depth,
10282        ) -> fidl::Result<()> {
10283            encoder.debug_check_bounds::<PlugState>(offset);
10284            // Vector header
10285            let max_ordinal: u64 = self.max_ordinal_present();
10286            encoder.write_num(max_ordinal, offset);
10287            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10288            // Calling encoder.out_of_line_offset(0) is not allowed.
10289            if max_ordinal == 0 {
10290                return Ok(());
10291            }
10292            depth.increment()?;
10293            let envelope_size = 8;
10294            let bytes_len = max_ordinal as usize * envelope_size;
10295            #[allow(unused_variables)]
10296            let offset = encoder.out_of_line_offset(bytes_len);
10297            let mut _prev_end_offset: usize = 0;
10298            if 1 > max_ordinal {
10299                return Ok(());
10300            }
10301
10302            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10303            // are envelope_size bytes.
10304            let cur_offset: usize = (1 - 1) * envelope_size;
10305
10306            // Zero reserved fields.
10307            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10308
10309            // Safety:
10310            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10311            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10312            //   envelope_size bytes, there is always sufficient room.
10313            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10314                self.plugged.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10315                encoder,
10316                offset + cur_offset,
10317                depth,
10318            )?;
10319
10320            _prev_end_offset = cur_offset + envelope_size;
10321            if 2 > max_ordinal {
10322                return Ok(());
10323            }
10324
10325            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10326            // are envelope_size bytes.
10327            let cur_offset: usize = (2 - 1) * envelope_size;
10328
10329            // Zero reserved fields.
10330            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10331
10332            // Safety:
10333            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10334            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10335            //   envelope_size bytes, there is always sufficient room.
10336            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10337                self.plug_state_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10338                encoder,
10339                offset + cur_offset,
10340                depth,
10341            )?;
10342
10343            _prev_end_offset = cur_offset + envelope_size;
10344
10345            Ok(())
10346        }
10347    }
10348
10349    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugState {
10350        #[inline(always)]
10351        fn new_empty() -> Self {
10352            Self::default()
10353        }
10354
10355        unsafe fn decode(
10356            &mut self,
10357            decoder: &mut fidl::encoding::Decoder<'_, D>,
10358            offset: usize,
10359            mut depth: fidl::encoding::Depth,
10360        ) -> fidl::Result<()> {
10361            decoder.debug_check_bounds::<Self>(offset);
10362            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10363                None => return Err(fidl::Error::NotNullable),
10364                Some(len) => len,
10365            };
10366            // Calling decoder.out_of_line_offset(0) is not allowed.
10367            if len == 0 {
10368                return Ok(());
10369            };
10370            depth.increment()?;
10371            let envelope_size = 8;
10372            let bytes_len = len * envelope_size;
10373            let offset = decoder.out_of_line_offset(bytes_len)?;
10374            // Decode the envelope for each type.
10375            let mut _next_ordinal_to_read = 0;
10376            let mut next_offset = offset;
10377            let end_offset = offset + bytes_len;
10378            _next_ordinal_to_read += 1;
10379            if next_offset >= end_offset {
10380                return Ok(());
10381            }
10382
10383            // Decode unknown envelopes for gaps in ordinals.
10384            while _next_ordinal_to_read < 1 {
10385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10386                _next_ordinal_to_read += 1;
10387                next_offset += envelope_size;
10388            }
10389
10390            let next_out_of_line = decoder.next_out_of_line();
10391            let handles_before = decoder.remaining_handles();
10392            if let Some((inlined, num_bytes, num_handles)) =
10393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10394            {
10395                let member_inline_size =
10396                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10397                if inlined != (member_inline_size <= 4) {
10398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10399                }
10400                let inner_offset;
10401                let mut inner_depth = depth.clone();
10402                if inlined {
10403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10404                    inner_offset = next_offset;
10405                } else {
10406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10407                    inner_depth.increment()?;
10408                }
10409                let val_ref = self.plugged.get_or_insert_with(|| fidl::new_empty!(bool, D));
10410                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10411                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10412                {
10413                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10414                }
10415                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10416                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10417                }
10418            }
10419
10420            next_offset += envelope_size;
10421            _next_ordinal_to_read += 1;
10422            if next_offset >= end_offset {
10423                return Ok(());
10424            }
10425
10426            // Decode unknown envelopes for gaps in ordinals.
10427            while _next_ordinal_to_read < 2 {
10428                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10429                _next_ordinal_to_read += 1;
10430                next_offset += envelope_size;
10431            }
10432
10433            let next_out_of_line = decoder.next_out_of_line();
10434            let handles_before = decoder.remaining_handles();
10435            if let Some((inlined, num_bytes, num_handles)) =
10436                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10437            {
10438                let member_inline_size =
10439                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10440                if inlined != (member_inline_size <= 4) {
10441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10442                }
10443                let inner_offset;
10444                let mut inner_depth = depth.clone();
10445                if inlined {
10446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10447                    inner_offset = next_offset;
10448                } else {
10449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10450                    inner_depth.increment()?;
10451                }
10452                let val_ref = self.plug_state_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
10453                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10454                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10455                {
10456                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10457                }
10458                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10459                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10460                }
10461            }
10462
10463            next_offset += envelope_size;
10464
10465            // Decode the remaining unknown envelopes.
10466            while next_offset < end_offset {
10467                _next_ordinal_to_read += 1;
10468                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10469                next_offset += envelope_size;
10470            }
10471
10472            Ok(())
10473        }
10474    }
10475
10476    impl RingBufferProperties {
10477        #[inline(always)]
10478        fn max_ordinal_present(&self) -> u64 {
10479            if let Some(_) = self.driver_transfer_bytes {
10480                return 5;
10481            }
10482            if let Some(_) = self.turn_on_delay {
10483                return 4;
10484            }
10485            if let Some(_) = self.needs_cache_flush_or_invalidate {
10486                return 3;
10487            }
10488            0
10489        }
10490    }
10491
10492    impl fidl::encoding::ValueTypeMarker for RingBufferProperties {
10493        type Borrowed<'a> = &'a Self;
10494        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10495            value
10496        }
10497    }
10498
10499    unsafe impl fidl::encoding::TypeMarker for RingBufferProperties {
10500        type Owned = Self;
10501
10502        #[inline(always)]
10503        fn inline_align(_context: fidl::encoding::Context) -> usize {
10504            8
10505        }
10506
10507        #[inline(always)]
10508        fn inline_size(_context: fidl::encoding::Context) -> usize {
10509            16
10510        }
10511    }
10512
10513    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferProperties, D>
10514        for &RingBufferProperties
10515    {
10516        unsafe fn encode(
10517            self,
10518            encoder: &mut fidl::encoding::Encoder<'_, D>,
10519            offset: usize,
10520            mut depth: fidl::encoding::Depth,
10521        ) -> fidl::Result<()> {
10522            encoder.debug_check_bounds::<RingBufferProperties>(offset);
10523            // Vector header
10524            let max_ordinal: u64 = self.max_ordinal_present();
10525            encoder.write_num(max_ordinal, offset);
10526            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10527            // Calling encoder.out_of_line_offset(0) is not allowed.
10528            if max_ordinal == 0 {
10529                return Ok(());
10530            }
10531            depth.increment()?;
10532            let envelope_size = 8;
10533            let bytes_len = max_ordinal as usize * envelope_size;
10534            #[allow(unused_variables)]
10535            let offset = encoder.out_of_line_offset(bytes_len);
10536            let mut _prev_end_offset: usize = 0;
10537            if 3 > max_ordinal {
10538                return Ok(());
10539            }
10540
10541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10542            // are envelope_size bytes.
10543            let cur_offset: usize = (3 - 1) * envelope_size;
10544
10545            // Zero reserved fields.
10546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10547
10548            // Safety:
10549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10551            //   envelope_size bytes, there is always sufficient room.
10552            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10553                self.needs_cache_flush_or_invalidate
10554                    .as_ref()
10555                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10556                encoder,
10557                offset + cur_offset,
10558                depth,
10559            )?;
10560
10561            _prev_end_offset = cur_offset + envelope_size;
10562            if 4 > max_ordinal {
10563                return Ok(());
10564            }
10565
10566            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10567            // are envelope_size bytes.
10568            let cur_offset: usize = (4 - 1) * envelope_size;
10569
10570            // Zero reserved fields.
10571            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10572
10573            // Safety:
10574            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10575            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10576            //   envelope_size bytes, there is always sufficient room.
10577            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10578                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10579                encoder,
10580                offset + cur_offset,
10581                depth,
10582            )?;
10583
10584            _prev_end_offset = cur_offset + envelope_size;
10585            if 5 > max_ordinal {
10586                return Ok(());
10587            }
10588
10589            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10590            // are envelope_size bytes.
10591            let cur_offset: usize = (5 - 1) * envelope_size;
10592
10593            // Zero reserved fields.
10594            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10595
10596            // Safety:
10597            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10598            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10599            //   envelope_size bytes, there is always sufficient room.
10600            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10601                self.driver_transfer_bytes
10602                    .as_ref()
10603                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10604                encoder,
10605                offset + cur_offset,
10606                depth,
10607            )?;
10608
10609            _prev_end_offset = cur_offset + envelope_size;
10610
10611            Ok(())
10612        }
10613    }
10614
10615    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferProperties {
10616        #[inline(always)]
10617        fn new_empty() -> Self {
10618            Self::default()
10619        }
10620
10621        unsafe fn decode(
10622            &mut self,
10623            decoder: &mut fidl::encoding::Decoder<'_, D>,
10624            offset: usize,
10625            mut depth: fidl::encoding::Depth,
10626        ) -> fidl::Result<()> {
10627            decoder.debug_check_bounds::<Self>(offset);
10628            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10629                None => return Err(fidl::Error::NotNullable),
10630                Some(len) => len,
10631            };
10632            // Calling decoder.out_of_line_offset(0) is not allowed.
10633            if len == 0 {
10634                return Ok(());
10635            };
10636            depth.increment()?;
10637            let envelope_size = 8;
10638            let bytes_len = len * envelope_size;
10639            let offset = decoder.out_of_line_offset(bytes_len)?;
10640            // Decode the envelope for each type.
10641            let mut _next_ordinal_to_read = 0;
10642            let mut next_offset = offset;
10643            let end_offset = offset + bytes_len;
10644            _next_ordinal_to_read += 1;
10645            if next_offset >= end_offset {
10646                return Ok(());
10647            }
10648
10649            // Decode unknown envelopes for gaps in ordinals.
10650            while _next_ordinal_to_read < 3 {
10651                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10652                _next_ordinal_to_read += 1;
10653                next_offset += envelope_size;
10654            }
10655
10656            let next_out_of_line = decoder.next_out_of_line();
10657            let handles_before = decoder.remaining_handles();
10658            if let Some((inlined, num_bytes, num_handles)) =
10659                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10660            {
10661                let member_inline_size =
10662                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10663                if inlined != (member_inline_size <= 4) {
10664                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10665                }
10666                let inner_offset;
10667                let mut inner_depth = depth.clone();
10668                if inlined {
10669                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10670                    inner_offset = next_offset;
10671                } else {
10672                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10673                    inner_depth.increment()?;
10674                }
10675                let val_ref = self
10676                    .needs_cache_flush_or_invalidate
10677                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10678                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10679                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10680                {
10681                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10682                }
10683                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10684                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10685                }
10686            }
10687
10688            next_offset += envelope_size;
10689            _next_ordinal_to_read += 1;
10690            if next_offset >= end_offset {
10691                return Ok(());
10692            }
10693
10694            // Decode unknown envelopes for gaps in ordinals.
10695            while _next_ordinal_to_read < 4 {
10696                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10697                _next_ordinal_to_read += 1;
10698                next_offset += envelope_size;
10699            }
10700
10701            let next_out_of_line = decoder.next_out_of_line();
10702            let handles_before = decoder.remaining_handles();
10703            if let Some((inlined, num_bytes, num_handles)) =
10704                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10705            {
10706                let member_inline_size =
10707                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10708                if inlined != (member_inline_size <= 4) {
10709                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10710                }
10711                let inner_offset;
10712                let mut inner_depth = depth.clone();
10713                if inlined {
10714                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10715                    inner_offset = next_offset;
10716                } else {
10717                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10718                    inner_depth.increment()?;
10719                }
10720                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
10721                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10722                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10723                {
10724                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10725                }
10726                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10727                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10728                }
10729            }
10730
10731            next_offset += envelope_size;
10732            _next_ordinal_to_read += 1;
10733            if next_offset >= end_offset {
10734                return Ok(());
10735            }
10736
10737            // Decode unknown envelopes for gaps in ordinals.
10738            while _next_ordinal_to_read < 5 {
10739                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10740                _next_ordinal_to_read += 1;
10741                next_offset += envelope_size;
10742            }
10743
10744            let next_out_of_line = decoder.next_out_of_line();
10745            let handles_before = decoder.remaining_handles();
10746            if let Some((inlined, num_bytes, num_handles)) =
10747                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10748            {
10749                let member_inline_size =
10750                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10751                if inlined != (member_inline_size <= 4) {
10752                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10753                }
10754                let inner_offset;
10755                let mut inner_depth = depth.clone();
10756                if inlined {
10757                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10758                    inner_offset = next_offset;
10759                } else {
10760                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10761                    inner_depth.increment()?;
10762                }
10763                let val_ref =
10764                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
10765                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
10766                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10767                {
10768                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10769                }
10770                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10771                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10772                }
10773            }
10774
10775            next_offset += envelope_size;
10776
10777            // Decode the remaining unknown envelopes.
10778            while next_offset < end_offset {
10779                _next_ordinal_to_read += 1;
10780                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10781                next_offset += envelope_size;
10782            }
10783
10784            Ok(())
10785        }
10786    }
10787
10788    impl StreamProperties {
10789        #[inline(always)]
10790        fn max_ordinal_present(&self) -> u64 {
10791            if let Some(_) = self.clock_domain {
10792                return 11;
10793            }
10794            if let Some(_) = self.product {
10795                return 10;
10796            }
10797            if let Some(_) = self.manufacturer {
10798                return 9;
10799            }
10800            if let Some(_) = self.plug_detect_capabilities {
10801                return 8;
10802            }
10803            if let Some(_) = self.gain_step_db {
10804                return 7;
10805            }
10806            if let Some(_) = self.max_gain_db {
10807                return 6;
10808            }
10809            if let Some(_) = self.min_gain_db {
10810                return 5;
10811            }
10812            if let Some(_) = self.can_agc {
10813                return 4;
10814            }
10815            if let Some(_) = self.can_mute {
10816                return 3;
10817            }
10818            if let Some(_) = self.is_input {
10819                return 2;
10820            }
10821            if let Some(_) = self.unique_id {
10822                return 1;
10823            }
10824            0
10825        }
10826    }
10827
10828    impl fidl::encoding::ValueTypeMarker for StreamProperties {
10829        type Borrowed<'a> = &'a Self;
10830        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10831            value
10832        }
10833    }
10834
10835    unsafe impl fidl::encoding::TypeMarker for StreamProperties {
10836        type Owned = Self;
10837
10838        #[inline(always)]
10839        fn inline_align(_context: fidl::encoding::Context) -> usize {
10840            8
10841        }
10842
10843        #[inline(always)]
10844        fn inline_size(_context: fidl::encoding::Context) -> usize {
10845            16
10846        }
10847    }
10848
10849    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamProperties, D>
10850        for &StreamProperties
10851    {
10852        unsafe fn encode(
10853            self,
10854            encoder: &mut fidl::encoding::Encoder<'_, D>,
10855            offset: usize,
10856            mut depth: fidl::encoding::Depth,
10857        ) -> fidl::Result<()> {
10858            encoder.debug_check_bounds::<StreamProperties>(offset);
10859            // Vector header
10860            let max_ordinal: u64 = self.max_ordinal_present();
10861            encoder.write_num(max_ordinal, offset);
10862            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10863            // Calling encoder.out_of_line_offset(0) is not allowed.
10864            if max_ordinal == 0 {
10865                return Ok(());
10866            }
10867            depth.increment()?;
10868            let envelope_size = 8;
10869            let bytes_len = max_ordinal as usize * envelope_size;
10870            #[allow(unused_variables)]
10871            let offset = encoder.out_of_line_offset(bytes_len);
10872            let mut _prev_end_offset: usize = 0;
10873            if 1 > max_ordinal {
10874                return Ok(());
10875            }
10876
10877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10878            // are envelope_size bytes.
10879            let cur_offset: usize = (1 - 1) * envelope_size;
10880
10881            // Zero reserved fields.
10882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10883
10884            // Safety:
10885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10887            //   envelope_size bytes, there is always sufficient room.
10888            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
10889                self.unique_id.as_ref().map(
10890                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
10891                ),
10892                encoder,
10893                offset + cur_offset,
10894                depth,
10895            )?;
10896
10897            _prev_end_offset = cur_offset + envelope_size;
10898            if 2 > max_ordinal {
10899                return Ok(());
10900            }
10901
10902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10903            // are envelope_size bytes.
10904            let cur_offset: usize = (2 - 1) * envelope_size;
10905
10906            // Zero reserved fields.
10907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10908
10909            // Safety:
10910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10912            //   envelope_size bytes, there is always sufficient room.
10913            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10914                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10915                encoder,
10916                offset + cur_offset,
10917                depth,
10918            )?;
10919
10920            _prev_end_offset = cur_offset + envelope_size;
10921            if 3 > max_ordinal {
10922                return Ok(());
10923            }
10924
10925            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10926            // are envelope_size bytes.
10927            let cur_offset: usize = (3 - 1) * envelope_size;
10928
10929            // Zero reserved fields.
10930            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10931
10932            // Safety:
10933            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10934            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10935            //   envelope_size bytes, there is always sufficient room.
10936            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10937                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10938                encoder,
10939                offset + cur_offset,
10940                depth,
10941            )?;
10942
10943            _prev_end_offset = cur_offset + envelope_size;
10944            if 4 > max_ordinal {
10945                return Ok(());
10946            }
10947
10948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10949            // are envelope_size bytes.
10950            let cur_offset: usize = (4 - 1) * envelope_size;
10951
10952            // Zero reserved fields.
10953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10954
10955            // Safety:
10956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10958            //   envelope_size bytes, there is always sufficient room.
10959            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10960                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10961                encoder,
10962                offset + cur_offset,
10963                depth,
10964            )?;
10965
10966            _prev_end_offset = cur_offset + envelope_size;
10967            if 5 > max_ordinal {
10968                return Ok(());
10969            }
10970
10971            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10972            // are envelope_size bytes.
10973            let cur_offset: usize = (5 - 1) * envelope_size;
10974
10975            // Zero reserved fields.
10976            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10977
10978            // Safety:
10979            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10980            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10981            //   envelope_size bytes, there is always sufficient room.
10982            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10983                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10984                encoder,
10985                offset + cur_offset,
10986                depth,
10987            )?;
10988
10989            _prev_end_offset = cur_offset + envelope_size;
10990            if 6 > max_ordinal {
10991                return Ok(());
10992            }
10993
10994            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10995            // are envelope_size bytes.
10996            let cur_offset: usize = (6 - 1) * envelope_size;
10997
10998            // Zero reserved fields.
10999            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11000
11001            // Safety:
11002            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11003            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11004            //   envelope_size bytes, there is always sufficient room.
11005            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11006                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11007                encoder,
11008                offset + cur_offset,
11009                depth,
11010            )?;
11011
11012            _prev_end_offset = cur_offset + envelope_size;
11013            if 7 > max_ordinal {
11014                return Ok(());
11015            }
11016
11017            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11018            // are envelope_size bytes.
11019            let cur_offset: usize = (7 - 1) * envelope_size;
11020
11021            // Zero reserved fields.
11022            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11023
11024            // Safety:
11025            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11026            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11027            //   envelope_size bytes, there is always sufficient room.
11028            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11029                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11030                encoder,
11031                offset + cur_offset,
11032                depth,
11033            )?;
11034
11035            _prev_end_offset = cur_offset + envelope_size;
11036            if 8 > max_ordinal {
11037                return Ok(());
11038            }
11039
11040            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11041            // are envelope_size bytes.
11042            let cur_offset: usize = (8 - 1) * envelope_size;
11043
11044            // Zero reserved fields.
11045            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11046
11047            // Safety:
11048            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11049            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11050            //   envelope_size bytes, there is always sufficient room.
11051            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
11052                self.plug_detect_capabilities
11053                    .as_ref()
11054                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
11055                encoder,
11056                offset + cur_offset,
11057                depth,
11058            )?;
11059
11060            _prev_end_offset = cur_offset + envelope_size;
11061            if 9 > max_ordinal {
11062                return Ok(());
11063            }
11064
11065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11066            // are envelope_size bytes.
11067            let cur_offset: usize = (9 - 1) * envelope_size;
11068
11069            // Zero reserved fields.
11070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11071
11072            // Safety:
11073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11075            //   envelope_size bytes, there is always sufficient room.
11076            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11077                self.manufacturer.as_ref().map(
11078                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11079                ),
11080                encoder,
11081                offset + cur_offset,
11082                depth,
11083            )?;
11084
11085            _prev_end_offset = cur_offset + envelope_size;
11086            if 10 > max_ordinal {
11087                return Ok(());
11088            }
11089
11090            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11091            // are envelope_size bytes.
11092            let cur_offset: usize = (10 - 1) * envelope_size;
11093
11094            // Zero reserved fields.
11095            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11096
11097            // Safety:
11098            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11099            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11100            //   envelope_size bytes, there is always sufficient room.
11101            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11102                self.product.as_ref().map(
11103                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11104                ),
11105                encoder,
11106                offset + cur_offset,
11107                depth,
11108            )?;
11109
11110            _prev_end_offset = cur_offset + envelope_size;
11111            if 11 > max_ordinal {
11112                return Ok(());
11113            }
11114
11115            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11116            // are envelope_size bytes.
11117            let cur_offset: usize = (11 - 1) * envelope_size;
11118
11119            // Zero reserved fields.
11120            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11121
11122            // Safety:
11123            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11124            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11125            //   envelope_size bytes, there is always sufficient room.
11126            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11127                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11128                encoder,
11129                offset + cur_offset,
11130                depth,
11131            )?;
11132
11133            _prev_end_offset = cur_offset + envelope_size;
11134
11135            Ok(())
11136        }
11137    }
11138
11139    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamProperties {
11140        #[inline(always)]
11141        fn new_empty() -> Self {
11142            Self::default()
11143        }
11144
11145        unsafe fn decode(
11146            &mut self,
11147            decoder: &mut fidl::encoding::Decoder<'_, D>,
11148            offset: usize,
11149            mut depth: fidl::encoding::Depth,
11150        ) -> fidl::Result<()> {
11151            decoder.debug_check_bounds::<Self>(offset);
11152            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11153                None => return Err(fidl::Error::NotNullable),
11154                Some(len) => len,
11155            };
11156            // Calling decoder.out_of_line_offset(0) is not allowed.
11157            if len == 0 {
11158                return Ok(());
11159            };
11160            depth.increment()?;
11161            let envelope_size = 8;
11162            let bytes_len = len * envelope_size;
11163            let offset = decoder.out_of_line_offset(bytes_len)?;
11164            // Decode the envelope for each type.
11165            let mut _next_ordinal_to_read = 0;
11166            let mut next_offset = offset;
11167            let end_offset = offset + bytes_len;
11168            _next_ordinal_to_read += 1;
11169            if next_offset >= end_offset {
11170                return Ok(());
11171            }
11172
11173            // Decode unknown envelopes for gaps in ordinals.
11174            while _next_ordinal_to_read < 1 {
11175                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11176                _next_ordinal_to_read += 1;
11177                next_offset += envelope_size;
11178            }
11179
11180            let next_out_of_line = decoder.next_out_of_line();
11181            let handles_before = decoder.remaining_handles();
11182            if let Some((inlined, num_bytes, num_handles)) =
11183                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11184            {
11185                let member_inline_size =
11186                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
11187                        decoder.context,
11188                    );
11189                if inlined != (member_inline_size <= 4) {
11190                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11191                }
11192                let inner_offset;
11193                let mut inner_depth = depth.clone();
11194                if inlined {
11195                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11196                    inner_offset = next_offset;
11197                } else {
11198                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11199                    inner_depth.increment()?;
11200                }
11201                let val_ref = self
11202                    .unique_id
11203                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
11204                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
11205                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11206                {
11207                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11208                }
11209                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11210                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11211                }
11212            }
11213
11214            next_offset += envelope_size;
11215            _next_ordinal_to_read += 1;
11216            if next_offset >= end_offset {
11217                return Ok(());
11218            }
11219
11220            // Decode unknown envelopes for gaps in ordinals.
11221            while _next_ordinal_to_read < 2 {
11222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11223                _next_ordinal_to_read += 1;
11224                next_offset += envelope_size;
11225            }
11226
11227            let next_out_of_line = decoder.next_out_of_line();
11228            let handles_before = decoder.remaining_handles();
11229            if let Some((inlined, num_bytes, num_handles)) =
11230                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11231            {
11232                let member_inline_size =
11233                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11234                if inlined != (member_inline_size <= 4) {
11235                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11236                }
11237                let inner_offset;
11238                let mut inner_depth = depth.clone();
11239                if inlined {
11240                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11241                    inner_offset = next_offset;
11242                } else {
11243                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11244                    inner_depth.increment()?;
11245                }
11246                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
11247                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11248                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11249                {
11250                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11251                }
11252                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11253                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11254                }
11255            }
11256
11257            next_offset += envelope_size;
11258            _next_ordinal_to_read += 1;
11259            if next_offset >= end_offset {
11260                return Ok(());
11261            }
11262
11263            // Decode unknown envelopes for gaps in ordinals.
11264            while _next_ordinal_to_read < 3 {
11265                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11266                _next_ordinal_to_read += 1;
11267                next_offset += envelope_size;
11268            }
11269
11270            let next_out_of_line = decoder.next_out_of_line();
11271            let handles_before = decoder.remaining_handles();
11272            if let Some((inlined, num_bytes, num_handles)) =
11273                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11274            {
11275                let member_inline_size =
11276                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11277                if inlined != (member_inline_size <= 4) {
11278                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11279                }
11280                let inner_offset;
11281                let mut inner_depth = depth.clone();
11282                if inlined {
11283                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11284                    inner_offset = next_offset;
11285                } else {
11286                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11287                    inner_depth.increment()?;
11288                }
11289                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
11290                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11291                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11292                {
11293                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11294                }
11295                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11296                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11297                }
11298            }
11299
11300            next_offset += envelope_size;
11301            _next_ordinal_to_read += 1;
11302            if next_offset >= end_offset {
11303                return Ok(());
11304            }
11305
11306            // Decode unknown envelopes for gaps in ordinals.
11307            while _next_ordinal_to_read < 4 {
11308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11309                _next_ordinal_to_read += 1;
11310                next_offset += envelope_size;
11311            }
11312
11313            let next_out_of_line = decoder.next_out_of_line();
11314            let handles_before = decoder.remaining_handles();
11315            if let Some((inlined, num_bytes, num_handles)) =
11316                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11317            {
11318                let member_inline_size =
11319                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11320                if inlined != (member_inline_size <= 4) {
11321                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11322                }
11323                let inner_offset;
11324                let mut inner_depth = depth.clone();
11325                if inlined {
11326                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11327                    inner_offset = next_offset;
11328                } else {
11329                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11330                    inner_depth.increment()?;
11331                }
11332                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
11333                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11334                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11335                {
11336                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11337                }
11338                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11339                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11340                }
11341            }
11342
11343            next_offset += envelope_size;
11344            _next_ordinal_to_read += 1;
11345            if next_offset >= end_offset {
11346                return Ok(());
11347            }
11348
11349            // Decode unknown envelopes for gaps in ordinals.
11350            while _next_ordinal_to_read < 5 {
11351                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11352                _next_ordinal_to_read += 1;
11353                next_offset += envelope_size;
11354            }
11355
11356            let next_out_of_line = decoder.next_out_of_line();
11357            let handles_before = decoder.remaining_handles();
11358            if let Some((inlined, num_bytes, num_handles)) =
11359                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11360            {
11361                let member_inline_size =
11362                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11363                if inlined != (member_inline_size <= 4) {
11364                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11365                }
11366                let inner_offset;
11367                let mut inner_depth = depth.clone();
11368                if inlined {
11369                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11370                    inner_offset = next_offset;
11371                } else {
11372                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11373                    inner_depth.increment()?;
11374                }
11375                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11376                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11377                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11378                {
11379                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11380                }
11381                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11382                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11383                }
11384            }
11385
11386            next_offset += envelope_size;
11387            _next_ordinal_to_read += 1;
11388            if next_offset >= end_offset {
11389                return Ok(());
11390            }
11391
11392            // Decode unknown envelopes for gaps in ordinals.
11393            while _next_ordinal_to_read < 6 {
11394                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11395                _next_ordinal_to_read += 1;
11396                next_offset += envelope_size;
11397            }
11398
11399            let next_out_of_line = decoder.next_out_of_line();
11400            let handles_before = decoder.remaining_handles();
11401            if let Some((inlined, num_bytes, num_handles)) =
11402                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11403            {
11404                let member_inline_size =
11405                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11406                if inlined != (member_inline_size <= 4) {
11407                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11408                }
11409                let inner_offset;
11410                let mut inner_depth = depth.clone();
11411                if inlined {
11412                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11413                    inner_offset = next_offset;
11414                } else {
11415                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11416                    inner_depth.increment()?;
11417                }
11418                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11419                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11420                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11421                {
11422                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11423                }
11424                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11425                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11426                }
11427            }
11428
11429            next_offset += envelope_size;
11430            _next_ordinal_to_read += 1;
11431            if next_offset >= end_offset {
11432                return Ok(());
11433            }
11434
11435            // Decode unknown envelopes for gaps in ordinals.
11436            while _next_ordinal_to_read < 7 {
11437                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11438                _next_ordinal_to_read += 1;
11439                next_offset += envelope_size;
11440            }
11441
11442            let next_out_of_line = decoder.next_out_of_line();
11443            let handles_before = decoder.remaining_handles();
11444            if let Some((inlined, num_bytes, num_handles)) =
11445                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11446            {
11447                let member_inline_size =
11448                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11449                if inlined != (member_inline_size <= 4) {
11450                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11451                }
11452                let inner_offset;
11453                let mut inner_depth = depth.clone();
11454                if inlined {
11455                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11456                    inner_offset = next_offset;
11457                } else {
11458                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11459                    inner_depth.increment()?;
11460                }
11461                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11462                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11464                {
11465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11466                }
11467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11469                }
11470            }
11471
11472            next_offset += envelope_size;
11473            _next_ordinal_to_read += 1;
11474            if next_offset >= end_offset {
11475                return Ok(());
11476            }
11477
11478            // Decode unknown envelopes for gaps in ordinals.
11479            while _next_ordinal_to_read < 8 {
11480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11481                _next_ordinal_to_read += 1;
11482                next_offset += envelope_size;
11483            }
11484
11485            let next_out_of_line = decoder.next_out_of_line();
11486            let handles_before = decoder.remaining_handles();
11487            if let Some((inlined, num_bytes, num_handles)) =
11488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11489            {
11490                let member_inline_size =
11491                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
11492                        decoder.context,
11493                    );
11494                if inlined != (member_inline_size <= 4) {
11495                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11496                }
11497                let inner_offset;
11498                let mut inner_depth = depth.clone();
11499                if inlined {
11500                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11501                    inner_offset = next_offset;
11502                } else {
11503                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11504                    inner_depth.increment()?;
11505                }
11506                let val_ref = self
11507                    .plug_detect_capabilities
11508                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
11509                fidl::decode!(
11510                    PlugDetectCapabilities,
11511                    D,
11512                    val_ref,
11513                    decoder,
11514                    inner_offset,
11515                    inner_depth
11516                )?;
11517                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11518                {
11519                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11520                }
11521                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11522                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11523                }
11524            }
11525
11526            next_offset += envelope_size;
11527            _next_ordinal_to_read += 1;
11528            if next_offset >= end_offset {
11529                return Ok(());
11530            }
11531
11532            // Decode unknown envelopes for gaps in ordinals.
11533            while _next_ordinal_to_read < 9 {
11534                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11535                _next_ordinal_to_read += 1;
11536                next_offset += envelope_size;
11537            }
11538
11539            let next_out_of_line = decoder.next_out_of_line();
11540            let handles_before = decoder.remaining_handles();
11541            if let Some((inlined, num_bytes, num_handles)) =
11542                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11543            {
11544                let member_inline_size =
11545                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11546                        decoder.context,
11547                    );
11548                if inlined != (member_inline_size <= 4) {
11549                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11550                }
11551                let inner_offset;
11552                let mut inner_depth = depth.clone();
11553                if inlined {
11554                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11555                    inner_offset = next_offset;
11556                } else {
11557                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11558                    inner_depth.increment()?;
11559                }
11560                let val_ref = self
11561                    .manufacturer
11562                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11563                fidl::decode!(
11564                    fidl::encoding::BoundedString<256>,
11565                    D,
11566                    val_ref,
11567                    decoder,
11568                    inner_offset,
11569                    inner_depth
11570                )?;
11571                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11572                {
11573                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11574                }
11575                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11576                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11577                }
11578            }
11579
11580            next_offset += envelope_size;
11581            _next_ordinal_to_read += 1;
11582            if next_offset >= end_offset {
11583                return Ok(());
11584            }
11585
11586            // Decode unknown envelopes for gaps in ordinals.
11587            while _next_ordinal_to_read < 10 {
11588                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11589                _next_ordinal_to_read += 1;
11590                next_offset += envelope_size;
11591            }
11592
11593            let next_out_of_line = decoder.next_out_of_line();
11594            let handles_before = decoder.remaining_handles();
11595            if let Some((inlined, num_bytes, num_handles)) =
11596                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11597            {
11598                let member_inline_size =
11599                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11600                        decoder.context,
11601                    );
11602                if inlined != (member_inline_size <= 4) {
11603                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11604                }
11605                let inner_offset;
11606                let mut inner_depth = depth.clone();
11607                if inlined {
11608                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11609                    inner_offset = next_offset;
11610                } else {
11611                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11612                    inner_depth.increment()?;
11613                }
11614                let val_ref = self
11615                    .product
11616                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11617                fidl::decode!(
11618                    fidl::encoding::BoundedString<256>,
11619                    D,
11620                    val_ref,
11621                    decoder,
11622                    inner_offset,
11623                    inner_depth
11624                )?;
11625                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11626                {
11627                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11628                }
11629                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11630                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11631                }
11632            }
11633
11634            next_offset += envelope_size;
11635            _next_ordinal_to_read += 1;
11636            if next_offset >= end_offset {
11637                return Ok(());
11638            }
11639
11640            // Decode unknown envelopes for gaps in ordinals.
11641            while _next_ordinal_to_read < 11 {
11642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11643                _next_ordinal_to_read += 1;
11644                next_offset += envelope_size;
11645            }
11646
11647            let next_out_of_line = decoder.next_out_of_line();
11648            let handles_before = decoder.remaining_handles();
11649            if let Some((inlined, num_bytes, num_handles)) =
11650                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11651            {
11652                let member_inline_size =
11653                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11654                if inlined != (member_inline_size <= 4) {
11655                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11656                }
11657                let inner_offset;
11658                let mut inner_depth = depth.clone();
11659                if inlined {
11660                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11661                    inner_offset = next_offset;
11662                } else {
11663                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11664                    inner_depth.increment()?;
11665                }
11666                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
11667                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11668                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11669                {
11670                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11671                }
11672                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11673                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11674                }
11675            }
11676
11677            next_offset += envelope_size;
11678
11679            // Decode the remaining unknown envelopes.
11680            while next_offset < end_offset {
11681                _next_ordinal_to_read += 1;
11682                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11683                next_offset += envelope_size;
11684            }
11685
11686            Ok(())
11687        }
11688    }
11689
11690    impl SupportedEncodings {
11691        #[inline(always)]
11692        fn max_ordinal_present(&self) -> u64 {
11693            if let Some(_) = self.encoding_types {
11694                return 5;
11695            }
11696            if let Some(_) = self.max_encoding_bitrate {
11697                return 4;
11698            }
11699            if let Some(_) = self.min_encoding_bitrate {
11700                return 3;
11701            }
11702            if let Some(_) = self.decoded_frame_rates {
11703                return 2;
11704            }
11705            if let Some(_) = self.decoded_channel_sets {
11706                return 1;
11707            }
11708            0
11709        }
11710    }
11711
11712    impl fidl::encoding::ValueTypeMarker for SupportedEncodings {
11713        type Borrowed<'a> = &'a Self;
11714        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11715            value
11716        }
11717    }
11718
11719    unsafe impl fidl::encoding::TypeMarker for SupportedEncodings {
11720        type Owned = Self;
11721
11722        #[inline(always)]
11723        fn inline_align(_context: fidl::encoding::Context) -> usize {
11724            8
11725        }
11726
11727        #[inline(always)]
11728        fn inline_size(_context: fidl::encoding::Context) -> usize {
11729            16
11730        }
11731    }
11732
11733    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedEncodings, D>
11734        for &SupportedEncodings
11735    {
11736        unsafe fn encode(
11737            self,
11738            encoder: &mut fidl::encoding::Encoder<'_, D>,
11739            offset: usize,
11740            mut depth: fidl::encoding::Depth,
11741        ) -> fidl::Result<()> {
11742            encoder.debug_check_bounds::<SupportedEncodings>(offset);
11743            // Vector header
11744            let max_ordinal: u64 = self.max_ordinal_present();
11745            encoder.write_num(max_ordinal, offset);
11746            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11747            // Calling encoder.out_of_line_offset(0) is not allowed.
11748            if max_ordinal == 0 {
11749                return Ok(());
11750            }
11751            depth.increment()?;
11752            let envelope_size = 8;
11753            let bytes_len = max_ordinal as usize * envelope_size;
11754            #[allow(unused_variables)]
11755            let offset = encoder.out_of_line_offset(bytes_len);
11756            let mut _prev_end_offset: usize = 0;
11757            if 1 > max_ordinal {
11758                return Ok(());
11759            }
11760
11761            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11762            // are envelope_size bytes.
11763            let cur_offset: usize = (1 - 1) * envelope_size;
11764
11765            // Zero reserved fields.
11766            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11767
11768            // Safety:
11769            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11770            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11771            //   envelope_size bytes, there is always sufficient room.
11772            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
11773            self.decoded_channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11774            encoder, offset + cur_offset, depth
11775        )?;
11776
11777            _prev_end_offset = cur_offset + envelope_size;
11778            if 2 > max_ordinal {
11779                return Ok(());
11780            }
11781
11782            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11783            // are envelope_size bytes.
11784            let cur_offset: usize = (2 - 1) * envelope_size;
11785
11786            // Zero reserved fields.
11787            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11788
11789            // Safety:
11790            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11791            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11792            //   envelope_size bytes, there is always sufficient room.
11793            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
11794                self.decoded_frame_rates.as_ref().map(
11795                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
11796                ),
11797                encoder,
11798                offset + cur_offset,
11799                depth,
11800            )?;
11801
11802            _prev_end_offset = cur_offset + envelope_size;
11803            if 3 > max_ordinal {
11804                return Ok(());
11805            }
11806
11807            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11808            // are envelope_size bytes.
11809            let cur_offset: usize = (3 - 1) * envelope_size;
11810
11811            // Zero reserved fields.
11812            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11813
11814            // Safety:
11815            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11816            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11817            //   envelope_size bytes, there is always sufficient room.
11818            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11819                self.min_encoding_bitrate
11820                    .as_ref()
11821                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11822                encoder,
11823                offset + cur_offset,
11824                depth,
11825            )?;
11826
11827            _prev_end_offset = cur_offset + envelope_size;
11828            if 4 > max_ordinal {
11829                return Ok(());
11830            }
11831
11832            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11833            // are envelope_size bytes.
11834            let cur_offset: usize = (4 - 1) * envelope_size;
11835
11836            // Zero reserved fields.
11837            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11838
11839            // Safety:
11840            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11841            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11842            //   envelope_size bytes, there is always sufficient room.
11843            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11844                self.max_encoding_bitrate
11845                    .as_ref()
11846                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11847                encoder,
11848                offset + cur_offset,
11849                depth,
11850            )?;
11851
11852            _prev_end_offset = cur_offset + envelope_size;
11853            if 5 > max_ordinal {
11854                return Ok(());
11855            }
11856
11857            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11858            // are envelope_size bytes.
11859            let cur_offset: usize = (5 - 1) * envelope_size;
11860
11861            // Zero reserved fields.
11862            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11863
11864            // Safety:
11865            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11866            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11867            //   envelope_size bytes, there is always sufficient room.
11868            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EncodingType, 64>, D>(
11869            self.encoding_types.as_ref().map(<fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11870            encoder, offset + cur_offset, depth
11871        )?;
11872
11873            _prev_end_offset = cur_offset + envelope_size;
11874
11875            Ok(())
11876        }
11877    }
11878
11879    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedEncodings {
11880        #[inline(always)]
11881        fn new_empty() -> Self {
11882            Self::default()
11883        }
11884
11885        unsafe fn decode(
11886            &mut self,
11887            decoder: &mut fidl::encoding::Decoder<'_, D>,
11888            offset: usize,
11889            mut depth: fidl::encoding::Depth,
11890        ) -> fidl::Result<()> {
11891            decoder.debug_check_bounds::<Self>(offset);
11892            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11893                None => return Err(fidl::Error::NotNullable),
11894                Some(len) => len,
11895            };
11896            // Calling decoder.out_of_line_offset(0) is not allowed.
11897            if len == 0 {
11898                return Ok(());
11899            };
11900            depth.increment()?;
11901            let envelope_size = 8;
11902            let bytes_len = len * envelope_size;
11903            let offset = decoder.out_of_line_offset(bytes_len)?;
11904            // Decode the envelope for each type.
11905            let mut _next_ordinal_to_read = 0;
11906            let mut next_offset = offset;
11907            let end_offset = offset + bytes_len;
11908            _next_ordinal_to_read += 1;
11909            if next_offset >= end_offset {
11910                return Ok(());
11911            }
11912
11913            // Decode unknown envelopes for gaps in ordinals.
11914            while _next_ordinal_to_read < 1 {
11915                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11916                _next_ordinal_to_read += 1;
11917                next_offset += envelope_size;
11918            }
11919
11920            let next_out_of_line = decoder.next_out_of_line();
11921            let handles_before = decoder.remaining_handles();
11922            if let Some((inlined, num_bytes, num_handles)) =
11923                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11924            {
11925                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11926                if inlined != (member_inline_size <= 4) {
11927                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11928                }
11929                let inner_offset;
11930                let mut inner_depth = depth.clone();
11931                if inlined {
11932                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11933                    inner_offset = next_offset;
11934                } else {
11935                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11936                    inner_depth.increment()?;
11937                }
11938                let val_ref = self.decoded_channel_sets.get_or_insert_with(
11939                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
11940                );
11941                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11942                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11943                {
11944                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11945                }
11946                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11947                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11948                }
11949            }
11950
11951            next_offset += envelope_size;
11952            _next_ordinal_to_read += 1;
11953            if next_offset >= end_offset {
11954                return Ok(());
11955            }
11956
11957            // Decode unknown envelopes for gaps in ordinals.
11958            while _next_ordinal_to_read < 2 {
11959                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11960                _next_ordinal_to_read += 1;
11961                next_offset += envelope_size;
11962            }
11963
11964            let next_out_of_line = decoder.next_out_of_line();
11965            let handles_before = decoder.remaining_handles();
11966            if let Some((inlined, num_bytes, num_handles)) =
11967                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11968            {
11969                let member_inline_size =
11970                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
11971                        decoder.context,
11972                    );
11973                if inlined != (member_inline_size <= 4) {
11974                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11975                }
11976                let inner_offset;
11977                let mut inner_depth = depth.clone();
11978                if inlined {
11979                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11980                    inner_offset = next_offset;
11981                } else {
11982                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11983                    inner_depth.increment()?;
11984                }
11985                let val_ref = self
11986                    .decoded_frame_rates
11987                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
11988                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11990                {
11991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11992                }
11993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11995                }
11996            }
11997
11998            next_offset += envelope_size;
11999            _next_ordinal_to_read += 1;
12000            if next_offset >= end_offset {
12001                return Ok(());
12002            }
12003
12004            // Decode unknown envelopes for gaps in ordinals.
12005            while _next_ordinal_to_read < 3 {
12006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12007                _next_ordinal_to_read += 1;
12008                next_offset += envelope_size;
12009            }
12010
12011            let next_out_of_line = decoder.next_out_of_line();
12012            let handles_before = decoder.remaining_handles();
12013            if let Some((inlined, num_bytes, num_handles)) =
12014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12015            {
12016                let member_inline_size =
12017                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12018                if inlined != (member_inline_size <= 4) {
12019                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12020                }
12021                let inner_offset;
12022                let mut inner_depth = depth.clone();
12023                if inlined {
12024                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12025                    inner_offset = next_offset;
12026                } else {
12027                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12028                    inner_depth.increment()?;
12029                }
12030                let val_ref =
12031                    self.min_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12032                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12034                {
12035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12036                }
12037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12039                }
12040            }
12041
12042            next_offset += envelope_size;
12043            _next_ordinal_to_read += 1;
12044            if next_offset >= end_offset {
12045                return Ok(());
12046            }
12047
12048            // Decode unknown envelopes for gaps in ordinals.
12049            while _next_ordinal_to_read < 4 {
12050                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12051                _next_ordinal_to_read += 1;
12052                next_offset += envelope_size;
12053            }
12054
12055            let next_out_of_line = decoder.next_out_of_line();
12056            let handles_before = decoder.remaining_handles();
12057            if let Some((inlined, num_bytes, num_handles)) =
12058                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12059            {
12060                let member_inline_size =
12061                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12062                if inlined != (member_inline_size <= 4) {
12063                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12064                }
12065                let inner_offset;
12066                let mut inner_depth = depth.clone();
12067                if inlined {
12068                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12069                    inner_offset = next_offset;
12070                } else {
12071                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12072                    inner_depth.increment()?;
12073                }
12074                let val_ref =
12075                    self.max_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12076                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12077                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12078                {
12079                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12080                }
12081                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12082                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12083                }
12084            }
12085
12086            next_offset += envelope_size;
12087            _next_ordinal_to_read += 1;
12088            if next_offset >= end_offset {
12089                return Ok(());
12090            }
12091
12092            // Decode unknown envelopes for gaps in ordinals.
12093            while _next_ordinal_to_read < 5 {
12094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12095                _next_ordinal_to_read += 1;
12096                next_offset += envelope_size;
12097            }
12098
12099            let next_out_of_line = decoder.next_out_of_line();
12100            let handles_before = decoder.remaining_handles();
12101            if let Some((inlined, num_bytes, num_handles)) =
12102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12103            {
12104                let member_inline_size = <fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12105                if inlined != (member_inline_size <= 4) {
12106                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12107                }
12108                let inner_offset;
12109                let mut inner_depth = depth.clone();
12110                if inlined {
12111                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12112                    inner_offset = next_offset;
12113                } else {
12114                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12115                    inner_depth.increment()?;
12116                }
12117                let val_ref = self.encoding_types.get_or_insert_with(
12118                    || fidl::new_empty!(fidl::encoding::Vector<EncodingType, 64>, D),
12119                );
12120                fidl::decode!(fidl::encoding::Vector<EncodingType, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
12121                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12122                {
12123                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12124                }
12125                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12126                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12127                }
12128            }
12129
12130            next_offset += envelope_size;
12131
12132            // Decode the remaining unknown envelopes.
12133            while next_offset < end_offset {
12134                _next_ordinal_to_read += 1;
12135                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12136                next_offset += envelope_size;
12137            }
12138
12139            Ok(())
12140        }
12141    }
12142
12143    impl SupportedFormats {
12144        #[inline(always)]
12145        fn max_ordinal_present(&self) -> u64 {
12146            if let Some(_) = self.pcm_supported_formats {
12147                return 1;
12148            }
12149            0
12150        }
12151    }
12152
12153    impl fidl::encoding::ValueTypeMarker for SupportedFormats {
12154        type Borrowed<'a> = &'a Self;
12155        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12156            value
12157        }
12158    }
12159
12160    unsafe impl fidl::encoding::TypeMarker for SupportedFormats {
12161        type Owned = Self;
12162
12163        #[inline(always)]
12164        fn inline_align(_context: fidl::encoding::Context) -> usize {
12165            8
12166        }
12167
12168        #[inline(always)]
12169        fn inline_size(_context: fidl::encoding::Context) -> usize {
12170            16
12171        }
12172    }
12173
12174    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats, D>
12175        for &SupportedFormats
12176    {
12177        unsafe fn encode(
12178            self,
12179            encoder: &mut fidl::encoding::Encoder<'_, D>,
12180            offset: usize,
12181            mut depth: fidl::encoding::Depth,
12182        ) -> fidl::Result<()> {
12183            encoder.debug_check_bounds::<SupportedFormats>(offset);
12184            // Vector header
12185            let max_ordinal: u64 = self.max_ordinal_present();
12186            encoder.write_num(max_ordinal, offset);
12187            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12188            // Calling encoder.out_of_line_offset(0) is not allowed.
12189            if max_ordinal == 0 {
12190                return Ok(());
12191            }
12192            depth.increment()?;
12193            let envelope_size = 8;
12194            let bytes_len = max_ordinal as usize * envelope_size;
12195            #[allow(unused_variables)]
12196            let offset = encoder.out_of_line_offset(bytes_len);
12197            let mut _prev_end_offset: usize = 0;
12198            if 1 > max_ordinal {
12199                return Ok(());
12200            }
12201
12202            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12203            // are envelope_size bytes.
12204            let cur_offset: usize = (1 - 1) * envelope_size;
12205
12206            // Zero reserved fields.
12207            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12208
12209            // Safety:
12210            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12211            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12212            //   envelope_size bytes, there is always sufficient room.
12213            fidl::encoding::encode_in_envelope_optional::<PcmSupportedFormats, D>(
12214                self.pcm_supported_formats
12215                    .as_ref()
12216                    .map(<PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow),
12217                encoder,
12218                offset + cur_offset,
12219                depth,
12220            )?;
12221
12222            _prev_end_offset = cur_offset + envelope_size;
12223
12224            Ok(())
12225        }
12226    }
12227
12228    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats {
12229        #[inline(always)]
12230        fn new_empty() -> Self {
12231            Self::default()
12232        }
12233
12234        unsafe fn decode(
12235            &mut self,
12236            decoder: &mut fidl::encoding::Decoder<'_, D>,
12237            offset: usize,
12238            mut depth: fidl::encoding::Depth,
12239        ) -> fidl::Result<()> {
12240            decoder.debug_check_bounds::<Self>(offset);
12241            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12242                None => return Err(fidl::Error::NotNullable),
12243                Some(len) => len,
12244            };
12245            // Calling decoder.out_of_line_offset(0) is not allowed.
12246            if len == 0 {
12247                return Ok(());
12248            };
12249            depth.increment()?;
12250            let envelope_size = 8;
12251            let bytes_len = len * envelope_size;
12252            let offset = decoder.out_of_line_offset(bytes_len)?;
12253            // Decode the envelope for each type.
12254            let mut _next_ordinal_to_read = 0;
12255            let mut next_offset = offset;
12256            let end_offset = offset + bytes_len;
12257            _next_ordinal_to_read += 1;
12258            if next_offset >= end_offset {
12259                return Ok(());
12260            }
12261
12262            // Decode unknown envelopes for gaps in ordinals.
12263            while _next_ordinal_to_read < 1 {
12264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12265                _next_ordinal_to_read += 1;
12266                next_offset += envelope_size;
12267            }
12268
12269            let next_out_of_line = decoder.next_out_of_line();
12270            let handles_before = decoder.remaining_handles();
12271            if let Some((inlined, num_bytes, num_handles)) =
12272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12273            {
12274                let member_inline_size =
12275                    <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12276                        decoder.context,
12277                    );
12278                if inlined != (member_inline_size <= 4) {
12279                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12280                }
12281                let inner_offset;
12282                let mut inner_depth = depth.clone();
12283                if inlined {
12284                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12285                    inner_offset = next_offset;
12286                } else {
12287                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12288                    inner_depth.increment()?;
12289                }
12290                let val_ref = self
12291                    .pcm_supported_formats
12292                    .get_or_insert_with(|| fidl::new_empty!(PcmSupportedFormats, D));
12293                fidl::decode!(PcmSupportedFormats, D, val_ref, decoder, inner_offset, inner_depth)?;
12294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12295                {
12296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12297                }
12298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12300                }
12301            }
12302
12303            next_offset += envelope_size;
12304
12305            // Decode the remaining unknown envelopes.
12306            while next_offset < end_offset {
12307                _next_ordinal_to_read += 1;
12308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12309                next_offset += envelope_size;
12310            }
12311
12312            Ok(())
12313        }
12314    }
12315
12316    impl fidl::encoding::ValueTypeMarker for DaiFrameFormat {
12317        type Borrowed<'a> = &'a Self;
12318        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12319            value
12320        }
12321    }
12322
12323    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormat {
12324        type Owned = Self;
12325
12326        #[inline(always)]
12327        fn inline_align(_context: fidl::encoding::Context) -> usize {
12328            8
12329        }
12330
12331        #[inline(always)]
12332        fn inline_size(_context: fidl::encoding::Context) -> usize {
12333            16
12334        }
12335    }
12336
12337    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormat, D>
12338        for &DaiFrameFormat
12339    {
12340        #[inline]
12341        unsafe fn encode(
12342            self,
12343            encoder: &mut fidl::encoding::Encoder<'_, D>,
12344            offset: usize,
12345            _depth: fidl::encoding::Depth,
12346        ) -> fidl::Result<()> {
12347            encoder.debug_check_bounds::<DaiFrameFormat>(offset);
12348            encoder.write_num::<u64>(self.ordinal(), offset);
12349            match self {
12350                DaiFrameFormat::FrameFormatStandard(ref val) => {
12351                    fidl::encoding::encode_in_envelope::<DaiFrameFormatStandard, D>(
12352                        <DaiFrameFormatStandard as fidl::encoding::ValueTypeMarker>::borrow(val),
12353                        encoder,
12354                        offset + 8,
12355                        _depth,
12356                    )
12357                }
12358                DaiFrameFormat::FrameFormatCustom(ref val) => {
12359                    fidl::encoding::encode_in_envelope::<DaiFrameFormatCustom, D>(
12360                        <DaiFrameFormatCustom as fidl::encoding::ValueTypeMarker>::borrow(val),
12361                        encoder,
12362                        offset + 8,
12363                        _depth,
12364                    )
12365                }
12366            }
12367        }
12368    }
12369
12370    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormat {
12371        #[inline(always)]
12372        fn new_empty() -> Self {
12373            Self::FrameFormatStandard(fidl::new_empty!(DaiFrameFormatStandard, D))
12374        }
12375
12376        #[inline]
12377        unsafe fn decode(
12378            &mut self,
12379            decoder: &mut fidl::encoding::Decoder<'_, D>,
12380            offset: usize,
12381            mut depth: fidl::encoding::Depth,
12382        ) -> fidl::Result<()> {
12383            decoder.debug_check_bounds::<Self>(offset);
12384            #[allow(unused_variables)]
12385            let next_out_of_line = decoder.next_out_of_line();
12386            let handles_before = decoder.remaining_handles();
12387            let (ordinal, inlined, num_bytes, num_handles) =
12388                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12389
12390            let member_inline_size = match ordinal {
12391                1 => <DaiFrameFormatStandard as fidl::encoding::TypeMarker>::inline_size(
12392                    decoder.context,
12393                ),
12394                2 => <DaiFrameFormatCustom as fidl::encoding::TypeMarker>::inline_size(
12395                    decoder.context,
12396                ),
12397                _ => return Err(fidl::Error::UnknownUnionTag),
12398            };
12399
12400            if inlined != (member_inline_size <= 4) {
12401                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12402            }
12403            let _inner_offset;
12404            if inlined {
12405                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12406                _inner_offset = offset + 8;
12407            } else {
12408                depth.increment()?;
12409                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12410            }
12411            match ordinal {
12412                1 => {
12413                    #[allow(irrefutable_let_patterns)]
12414                    if let DaiFrameFormat::FrameFormatStandard(_) = self {
12415                        // Do nothing, read the value into the object
12416                    } else {
12417                        // Initialize `self` to the right variant
12418                        *self = DaiFrameFormat::FrameFormatStandard(fidl::new_empty!(
12419                            DaiFrameFormatStandard,
12420                            D
12421                        ));
12422                    }
12423                    #[allow(irrefutable_let_patterns)]
12424                    if let DaiFrameFormat::FrameFormatStandard(ref mut val) = self {
12425                        fidl::decode!(
12426                            DaiFrameFormatStandard,
12427                            D,
12428                            val,
12429                            decoder,
12430                            _inner_offset,
12431                            depth
12432                        )?;
12433                    } else {
12434                        unreachable!()
12435                    }
12436                }
12437                2 => {
12438                    #[allow(irrefutable_let_patterns)]
12439                    if let DaiFrameFormat::FrameFormatCustom(_) = self {
12440                        // Do nothing, read the value into the object
12441                    } else {
12442                        // Initialize `self` to the right variant
12443                        *self = DaiFrameFormat::FrameFormatCustom(fidl::new_empty!(
12444                            DaiFrameFormatCustom,
12445                            D
12446                        ));
12447                    }
12448                    #[allow(irrefutable_let_patterns)]
12449                    if let DaiFrameFormat::FrameFormatCustom(ref mut val) = self {
12450                        fidl::decode!(DaiFrameFormatCustom, D, val, decoder, _inner_offset, depth)?;
12451                    } else {
12452                        unreachable!()
12453                    }
12454                }
12455                ordinal => panic!("unexpected ordinal {:?}", ordinal),
12456            }
12457            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12458                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12459            }
12460            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12461                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12462            }
12463            Ok(())
12464        }
12465    }
12466
12467    impl fidl::encoding::ValueTypeMarker for Format2 {
12468        type Borrowed<'a> = &'a Self;
12469        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12470            value
12471        }
12472    }
12473
12474    unsafe impl fidl::encoding::TypeMarker for Format2 {
12475        type Owned = Self;
12476
12477        #[inline(always)]
12478        fn inline_align(_context: fidl::encoding::Context) -> usize {
12479            8
12480        }
12481
12482        #[inline(always)]
12483        fn inline_size(_context: fidl::encoding::Context) -> usize {
12484            16
12485        }
12486    }
12487
12488    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format2, D> for &Format2 {
12489        #[inline]
12490        unsafe fn encode(
12491            self,
12492            encoder: &mut fidl::encoding::Encoder<'_, D>,
12493            offset: usize,
12494            _depth: fidl::encoding::Depth,
12495        ) -> fidl::Result<()> {
12496            encoder.debug_check_bounds::<Format2>(offset);
12497            encoder.write_num::<u64>(self.ordinal(), offset);
12498            match self {
12499                Format2::PcmFormat(ref val) => fidl::encoding::encode_in_envelope::<PcmFormat, D>(
12500                    <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
12501                    encoder,
12502                    offset + 8,
12503                    _depth,
12504                ),
12505                Format2::Encoding(ref val) => fidl::encoding::encode_in_envelope::<Encoding, D>(
12506                    <Encoding as fidl::encoding::ValueTypeMarker>::borrow(val),
12507                    encoder,
12508                    offset + 8,
12509                    _depth,
12510                ),
12511                Format2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12512            }
12513        }
12514    }
12515
12516    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format2 {
12517        #[inline(always)]
12518        fn new_empty() -> Self {
12519            Self::__SourceBreaking { unknown_ordinal: 0 }
12520        }
12521
12522        #[inline]
12523        unsafe fn decode(
12524            &mut self,
12525            decoder: &mut fidl::encoding::Decoder<'_, D>,
12526            offset: usize,
12527            mut depth: fidl::encoding::Depth,
12528        ) -> fidl::Result<()> {
12529            decoder.debug_check_bounds::<Self>(offset);
12530            #[allow(unused_variables)]
12531            let next_out_of_line = decoder.next_out_of_line();
12532            let handles_before = decoder.remaining_handles();
12533            let (ordinal, inlined, num_bytes, num_handles) =
12534                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12535
12536            let member_inline_size = match ordinal {
12537                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12538                2 => <Encoding as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12539                0 => return Err(fidl::Error::UnknownUnionTag),
12540                _ => num_bytes as usize,
12541            };
12542
12543            if inlined != (member_inline_size <= 4) {
12544                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12545            }
12546            let _inner_offset;
12547            if inlined {
12548                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12549                _inner_offset = offset + 8;
12550            } else {
12551                depth.increment()?;
12552                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12553            }
12554            match ordinal {
12555                1 => {
12556                    #[allow(irrefutable_let_patterns)]
12557                    if let Format2::PcmFormat(_) = self {
12558                        // Do nothing, read the value into the object
12559                    } else {
12560                        // Initialize `self` to the right variant
12561                        *self = Format2::PcmFormat(fidl::new_empty!(PcmFormat, D));
12562                    }
12563                    #[allow(irrefutable_let_patterns)]
12564                    if let Format2::PcmFormat(ref mut val) = self {
12565                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
12566                    } else {
12567                        unreachable!()
12568                    }
12569                }
12570                2 => {
12571                    #[allow(irrefutable_let_patterns)]
12572                    if let Format2::Encoding(_) = self {
12573                        // Do nothing, read the value into the object
12574                    } else {
12575                        // Initialize `self` to the right variant
12576                        *self = Format2::Encoding(fidl::new_empty!(Encoding, D));
12577                    }
12578                    #[allow(irrefutable_let_patterns)]
12579                    if let Format2::Encoding(ref mut val) = self {
12580                        fidl::decode!(Encoding, D, val, decoder, _inner_offset, depth)?;
12581                    } else {
12582                        unreachable!()
12583                    }
12584                }
12585                #[allow(deprecated)]
12586                ordinal => {
12587                    for _ in 0..num_handles {
12588                        decoder.drop_next_handle()?;
12589                    }
12590                    *self = Format2::__SourceBreaking { unknown_ordinal: ordinal };
12591                }
12592            }
12593            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12594                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12595            }
12596            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12597                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12598            }
12599            Ok(())
12600        }
12601    }
12602
12603    impl fidl::encoding::ValueTypeMarker for SupportedFormats2 {
12604        type Borrowed<'a> = &'a Self;
12605        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12606            value
12607        }
12608    }
12609
12610    unsafe impl fidl::encoding::TypeMarker for SupportedFormats2 {
12611        type Owned = Self;
12612
12613        #[inline(always)]
12614        fn inline_align(_context: fidl::encoding::Context) -> usize {
12615            8
12616        }
12617
12618        #[inline(always)]
12619        fn inline_size(_context: fidl::encoding::Context) -> usize {
12620            16
12621        }
12622    }
12623
12624    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats2, D>
12625        for &SupportedFormats2
12626    {
12627        #[inline]
12628        unsafe fn encode(
12629            self,
12630            encoder: &mut fidl::encoding::Encoder<'_, D>,
12631            offset: usize,
12632            _depth: fidl::encoding::Depth,
12633        ) -> fidl::Result<()> {
12634            encoder.debug_check_bounds::<SupportedFormats2>(offset);
12635            encoder.write_num::<u64>(self.ordinal(), offset);
12636            match self {
12637                SupportedFormats2::PcmSupportedFormats(ref val) => {
12638                    fidl::encoding::encode_in_envelope::<PcmSupportedFormats, D>(
12639                        <PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow(val),
12640                        encoder,
12641                        offset + 8,
12642                        _depth,
12643                    )
12644                }
12645                SupportedFormats2::SupportedEncodings(ref val) => {
12646                    fidl::encoding::encode_in_envelope::<SupportedEncodings, D>(
12647                        <SupportedEncodings as fidl::encoding::ValueTypeMarker>::borrow(val),
12648                        encoder,
12649                        offset + 8,
12650                        _depth,
12651                    )
12652                }
12653                SupportedFormats2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12654            }
12655        }
12656    }
12657
12658    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats2 {
12659        #[inline(always)]
12660        fn new_empty() -> Self {
12661            Self::__SourceBreaking { unknown_ordinal: 0 }
12662        }
12663
12664        #[inline]
12665        unsafe fn decode(
12666            &mut self,
12667            decoder: &mut fidl::encoding::Decoder<'_, D>,
12668            offset: usize,
12669            mut depth: fidl::encoding::Depth,
12670        ) -> fidl::Result<()> {
12671            decoder.debug_check_bounds::<Self>(offset);
12672            #[allow(unused_variables)]
12673            let next_out_of_line = decoder.next_out_of_line();
12674            let handles_before = decoder.remaining_handles();
12675            let (ordinal, inlined, num_bytes, num_handles) =
12676                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12677
12678            let member_inline_size = match ordinal {
12679                1 => <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12680                    decoder.context,
12681                ),
12682                2 => {
12683                    <SupportedEncodings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
12684                }
12685                0 => return Err(fidl::Error::UnknownUnionTag),
12686                _ => num_bytes as usize,
12687            };
12688
12689            if inlined != (member_inline_size <= 4) {
12690                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12691            }
12692            let _inner_offset;
12693            if inlined {
12694                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12695                _inner_offset = offset + 8;
12696            } else {
12697                depth.increment()?;
12698                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12699            }
12700            match ordinal {
12701                1 => {
12702                    #[allow(irrefutable_let_patterns)]
12703                    if let SupportedFormats2::PcmSupportedFormats(_) = self {
12704                        // Do nothing, read the value into the object
12705                    } else {
12706                        // Initialize `self` to the right variant
12707                        *self = SupportedFormats2::PcmSupportedFormats(fidl::new_empty!(
12708                            PcmSupportedFormats,
12709                            D
12710                        ));
12711                    }
12712                    #[allow(irrefutable_let_patterns)]
12713                    if let SupportedFormats2::PcmSupportedFormats(ref mut val) = self {
12714                        fidl::decode!(PcmSupportedFormats, D, val, decoder, _inner_offset, depth)?;
12715                    } else {
12716                        unreachable!()
12717                    }
12718                }
12719                2 => {
12720                    #[allow(irrefutable_let_patterns)]
12721                    if let SupportedFormats2::SupportedEncodings(_) = self {
12722                        // Do nothing, read the value into the object
12723                    } else {
12724                        // Initialize `self` to the right variant
12725                        *self = SupportedFormats2::SupportedEncodings(fidl::new_empty!(
12726                            SupportedEncodings,
12727                            D
12728                        ));
12729                    }
12730                    #[allow(irrefutable_let_patterns)]
12731                    if let SupportedFormats2::SupportedEncodings(ref mut val) = self {
12732                        fidl::decode!(SupportedEncodings, D, val, decoder, _inner_offset, depth)?;
12733                    } else {
12734                        unreachable!()
12735                    }
12736                }
12737                #[allow(deprecated)]
12738                ordinal => {
12739                    for _ in 0..num_handles {
12740                        decoder.drop_next_handle()?;
12741                    }
12742                    *self = SupportedFormats2::__SourceBreaking { unknown_ordinal: ordinal };
12743                }
12744            }
12745            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12746                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12747            }
12748            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12749                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12750            }
12751            Ok(())
12752        }
12753    }
12754}