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    BuiltinSpeakers,
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::BuiltinSpeakers),
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::BuiltinSpeakers,
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::BuiltinSpeakers => 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    ///
1291    /// Required.
1292    pub sample_formats: Option<Vec<SampleFormat>>,
1293    /// Vector of possible bytes allocated for each sample. Values must be listed in ascending
1294    /// order. All values listed in `valid_bits_per_sample` must fit into at least the largest
1295    /// `bytes_per_sample` value.
1296    ///
1297    /// Required.
1298    pub bytes_per_sample: Option<Vec<u8>>,
1299    /// Vector of possible number of bits containing valid data, within the sample container defined
1300    /// by `bytes_per_sample`. Values must be listed in ascending order. All values listed must fit
1301    /// into the largest `bytes_per_sample` value. The valid data bits must be most-significant
1302    /// (left-justified) within the sample container, and any additional bits will be ignored.
1303    ///
1304    /// Required.
1305    pub valid_bits_per_sample: Option<Vec<u8>>,
1306    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1307    ///
1308    /// Required.
1309    pub frame_rates: Option<Vec<u32>>,
1310    #[doc(hidden)]
1311    pub __source_breaking: fidl::marker::SourceBreaking,
1312}
1313
1314impl fidl::Persistable for PcmSupportedFormats {}
1315
1316/// Plug state as returned by the driver.
1317/// If the driver reports a `plug_detect_capabilities` equal to HARDWIRED, then the driver should
1318/// respond to `WatchPlugState` only the first time it is called, with `plugged` set to true and
1319/// `plug_state_time` set to time '0'.
1320#[derive(Clone, Debug, Default, PartialEq)]
1321pub struct PlugState {
1322    /// Driver is currently plugged in. Required
1323    pub plugged: Option<bool>,
1324    /// Timestamps the information provided in the rest of the fields of this struct. Required.
1325    pub plug_state_time: Option<i64>,
1326    #[doc(hidden)]
1327    pub __source_breaking: fidl::marker::SourceBreaking,
1328}
1329
1330impl fidl::Persistable for PlugState {}
1331
1332/// Properties of the ring buffer. These values don't change once the ring buffer is created.
1333#[derive(Clone, Debug, Default, PartialEq)]
1334pub struct RingBufferProperties {
1335    /// When set to true, indicates that the ring buffer runs in a different cache coherency domain,
1336    /// and thus clients must ensure that their data writes are flushed all the way to main memory
1337    /// (during playback), or that their view of the ring buffer must be invalidated before any
1338    /// reads (during capture). This is because there may be hardware external to the CPUs that
1339    /// reads/writes main memory, bypassing the CPUs.
1340    ///
1341    /// When set to false, indicates that the ring buffer runs in the same cache coherency domain as
1342    /// the CPUs, hence the driver is not required to flush/invalidate the ring buffer.
1343    /// Note that in this case, the driver and client still must synchronize their data access, for
1344    /// instance by inserting the appropriate acquire fences before reading and releasing fences
1345    /// after writing, or (more commonly) by obeying the Producer/Consumer pattern described in
1346    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1347    ///
1348    /// Required.
1349    pub needs_cache_flush_or_invalidate: Option<bool>,
1350    /// The driver's best estimate of the time needed for the hardware to emit (during playback) or
1351    /// accept (during capture) frames, after a channel is activated by `SetActiveChannels`.
1352    ///
1353    /// The driver estimates that after `SetActiveChannels(channel)->(set_time)` enables a channel,
1354    /// its data will resume flowing at approximately `set_time` + `turn_on_delay`.
1355    /// Hardware can take time to become fully operational (e.g. due to a power state change, or
1356    /// communication delays between a Bluetooth driver's multiple hardware entities). The client
1357    /// must take this delay into account, if it is unacceptable to drop the actual audio frames
1358    /// and instead play/capture silence during this interval.
1359    /// If not included, `turn_on_delay` is unknown.
1360    ///
1361    /// Optional.
1362    pub turn_on_delay: Option<i64>,
1363    /// Size (in bytes) of the temporary buffers or FIFOs used by the driver when consuming or
1364    /// generating the ring buffer contents.
1365    ///
1366    /// The `driver_transfer_bytes` field is covered extensively in
1367    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1368    ///
1369    /// `driver_transfer_bytes` must not include the impact of delays caused by hardware or software
1370    /// processing abstracted by the driver. Those delays are communicated by `internal_delay` and
1371    /// `external_delay` fields in `DelayInfo`; they are orthogonal to this value.
1372    ///
1373    /// Required.
1374    pub driver_transfer_bytes: Option<u32>,
1375    #[doc(hidden)]
1376    pub __source_breaking: fidl::marker::SourceBreaking,
1377}
1378
1379impl fidl::Persistable for RingBufferProperties {}
1380
1381#[derive(Clone, Debug, Default, PartialEq)]
1382pub struct StreamProperties {
1383    /// A unique identifier. If not included, there is no unique id for this StreamConfig.
1384    /// See `unique_id.fidl` for considerations about specific pre-defined values and ranges.
1385    ///
1386    /// Optional.
1387    pub unique_id: Option<[u8; 16]>,
1388    /// Driver type is input (true) or output (false)
1389    ///
1390    /// Required.
1391    pub is_input: Option<bool>,
1392    /// Gain mute capability. If not included, the StreamConfig can't mute.
1393    ///
1394    /// Optional.
1395    pub can_mute: Option<bool>,
1396    /// Automatic Gain Control (AGC) capability. If not included, the StreamConfig can't AGC.
1397    ///
1398    /// Optional.
1399    pub can_agc: Option<bool>,
1400    /// Minimum gain in decibels.
1401    ///
1402    /// Required.
1403    pub min_gain_db: Option<f32>,
1404    /// Maximum gain in decibels.
1405    ///
1406    /// Required.
1407    pub max_gain_db: Option<f32>,
1408    /// Gain step in decibels, this value must not be negative, but may be zero to convey an
1409    /// effectively continuous range of values. Must not exceed `max_gain_db` - `min_gain_db`.
1410    ///
1411    /// Required.
1412    pub gain_step_db: Option<f32>,
1413    /// Plug Detect Capabilities.
1414    ///
1415    /// Required.
1416    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1417    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1418    /// If included, this string must be non-empty.
1419    ///
1420    /// Optional.
1421    pub manufacturer: Option<String>,
1422    /// UI string for the product name. If not included, the product name is unspecified.
1423    /// If included, this string must be non-empty.
1424    ///
1425    /// Optional.
1426    pub product: Option<String>,
1427    /// An identifier for the clock domain in which this hardware operates. If
1428    /// two hardware devices have the same clock domain, their clock rates are
1429    /// identical and perfectly synchronized. Although these two clocks have the
1430    /// same rate, the clock positions may be offset from each other by an
1431    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1432    /// system wide entity, such as a platform bus or global clock tree.
1433    ///
1434    /// There are two special values:
1435    ///
1436    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1437    ///    rate as the system montonic clock.
1438    ///
1439    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1440    ///    rate and is not synchronized with any known clock, not even with
1441    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1442    ///
1443    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1444    /// notification updates to recover the hardware's clock.
1445    ///
1446    /// Required.
1447    pub clock_domain: Option<u32>,
1448    #[doc(hidden)]
1449    pub __source_breaking: fidl::marker::SourceBreaking,
1450}
1451
1452impl fidl::Persistable for StreamProperties {}
1453
1454/// Supported formats for encoded audio.
1455///
1456/// This table defines a valid set of configurations. All fields are independent, which
1457/// implies a cross-product: any listed `channel_set` is supported at any listed
1458/// `frame_rate` for any listed `encoded_type`.
1459///
1460/// If a device supports multiple encoders with *different* rate/channel constraints
1461/// (e.g. AAC supports 48kHz but SBC only supports 44.1kHz), the device must
1462/// report them as separate entries in the `SupportedFormats` vector.
1463#[derive(Clone, Debug, Default, PartialEq)]
1464pub struct SupportedEncodings {
1465    /// Vector of possible `ChannelSets` supported.
1466    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1467    /// of optional attributes.
1468    ///
1469    /// Each entry in this vector must describe a unique channel count. For example, this
1470    /// vector cannot contain two different `ChannelSet` entries that both apply to a
1471    /// 2-channel configuration.
1472    ///
1473    /// Required.
1474    pub decoded_channel_sets: Option<Vec<ChannelSet>>,
1475    /// Vector of possible frame rates supported.
1476    /// If present, must contain at least one value.
1477    /// Values must be listed in ascending order.
1478    ///
1479    /// Optional.
1480    pub decoded_frame_rates: Option<Vec<u32>>,
1481    /// The minimum encoding bitrate of the stream in bits per second.
1482    /// Cannot exceed 'max_encoding_bitrate', if both are present.
1483    ///
1484    /// Optional.
1485    pub min_encoding_bitrate: Option<u32>,
1486    /// The maximum encoding bitrate of the stream in bits per second.
1487    /// Cannot be less than 'min_encoding_bitrate', if both are present.
1488    ///
1489    /// Optional.
1490    pub max_encoding_bitrate: Option<u32>,
1491    /// The encoder types that support the configurations listed above.
1492    /// Must contain at least one value. Values in this vector must be unique.
1493    ///
1494    /// Required.
1495    pub encoding_types: Option<Vec<EncodingType>>,
1496    #[doc(hidden)]
1497    pub __source_breaking: fidl::marker::SourceBreaking,
1498}
1499
1500impl fidl::Persistable for SupportedEncodings {}
1501
1502/// Deprecated: Use `SupportedFormats2` instead.
1503#[derive(Clone, Debug, Default, PartialEq)]
1504pub struct SupportedFormats {
1505    pub pcm_supported_formats: Option<PcmSupportedFormats>,
1506    #[doc(hidden)]
1507    pub __source_breaking: fidl::marker::SourceBreaking,
1508}
1509
1510impl fidl::Persistable for SupportedFormats {}
1511
1512/// Either a standard or custom frame format.
1513#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1514pub enum DaiFrameFormat {
1515    /// The format type of all samples in the DAI, listed in `DaiFrameFormatStandard`.
1516    FrameFormatStandard(DaiFrameFormatStandard),
1517    /// The format type of all samples in the DAI, specified in `DaiFrameFormatCustom`.
1518    FrameFormatCustom(DaiFrameFormatCustom),
1519}
1520
1521impl DaiFrameFormat {
1522    #[inline]
1523    pub fn ordinal(&self) -> u64 {
1524        match *self {
1525            Self::FrameFormatStandard(_) => 1,
1526            Self::FrameFormatCustom(_) => 2,
1527        }
1528    }
1529}
1530
1531impl fidl::Persistable for DaiFrameFormat {}
1532
1533#[derive(Clone, Debug)]
1534pub enum Format2 {
1535    /// Format for linear PCM (uncompressed) samples.
1536    PcmFormat(PcmFormat),
1537    /// Format for encoded audio.
1538    Encoding(Encoding),
1539    #[doc(hidden)]
1540    __SourceBreaking { unknown_ordinal: u64 },
1541}
1542
1543/// Pattern that matches an unknown `Format2` member.
1544#[macro_export]
1545macro_rules! Format2Unknown {
1546    () => {
1547        _
1548    };
1549}
1550
1551// Custom PartialEq so that unknown variants are not equal to themselves.
1552impl PartialEq for Format2 {
1553    fn eq(&self, other: &Self) -> bool {
1554        match (self, other) {
1555            (Self::PcmFormat(x), Self::PcmFormat(y)) => *x == *y,
1556            (Self::Encoding(x), Self::Encoding(y)) => *x == *y,
1557            _ => false,
1558        }
1559    }
1560}
1561
1562impl Format2 {
1563    #[inline]
1564    pub fn ordinal(&self) -> u64 {
1565        match *self {
1566            Self::PcmFormat(_) => 1,
1567            Self::Encoding(_) => 2,
1568            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1569        }
1570    }
1571
1572    #[inline]
1573    pub fn unknown_variant_for_testing() -> Self {
1574        Self::__SourceBreaking { unknown_ordinal: 0 }
1575    }
1576
1577    #[inline]
1578    pub fn is_unknown(&self) -> bool {
1579        match self {
1580            Self::__SourceBreaking { .. } => true,
1581            _ => false,
1582        }
1583    }
1584}
1585
1586impl fidl::Persistable for Format2 {}
1587
1588/// All the possible formats supported by this device.
1589#[derive(Clone, Debug)]
1590pub enum SupportedFormats2 {
1591    /// Supported formats for linear PCM (uncompressed) samples, with attributes.
1592    PcmSupportedFormats(PcmSupportedFormats),
1593    /// Supported formats for non-LPCM encoded audio (e.g. AAC, MP3).
1594    SupportedEncodings(SupportedEncodings),
1595    #[doc(hidden)]
1596    __SourceBreaking { unknown_ordinal: u64 },
1597}
1598
1599/// Pattern that matches an unknown `SupportedFormats2` member.
1600#[macro_export]
1601macro_rules! SupportedFormats2Unknown {
1602    () => {
1603        _
1604    };
1605}
1606
1607// Custom PartialEq so that unknown variants are not equal to themselves.
1608impl PartialEq for SupportedFormats2 {
1609    fn eq(&self, other: &Self) -> bool {
1610        match (self, other) {
1611            (Self::PcmSupportedFormats(x), Self::PcmSupportedFormats(y)) => *x == *y,
1612            (Self::SupportedEncodings(x), Self::SupportedEncodings(y)) => *x == *y,
1613            _ => false,
1614        }
1615    }
1616}
1617
1618impl SupportedFormats2 {
1619    #[inline]
1620    pub fn ordinal(&self) -> u64 {
1621        match *self {
1622            Self::PcmSupportedFormats(_) => 1,
1623            Self::SupportedEncodings(_) => 2,
1624            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1625        }
1626    }
1627
1628    #[inline]
1629    pub fn unknown_variant_for_testing() -> Self {
1630        Self::__SourceBreaking { unknown_ordinal: 0 }
1631    }
1632
1633    #[inline]
1634    pub fn is_unknown(&self) -> bool {
1635        match self {
1636            Self::__SourceBreaking { .. } => true,
1637            _ => false,
1638        }
1639    }
1640}
1641
1642impl fidl::Persistable for SupportedFormats2 {}
1643
1644pub mod codec_ordinals {
1645    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1646    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1647    pub const RESET: u64 = 0x50757ae579a7bd6b;
1648    pub const GET_PROPERTIES: u64 = 0x7a0d138a6a1d9d90;
1649    pub const STOP: u64 = 0x5c2e380df1332dbd;
1650    pub const START: u64 = 0x329cdacb286ab00;
1651    pub const GET_DAI_FORMATS: u64 = 0xf8bbc46b4ba6a52;
1652    pub const SET_DAI_FORMAT: u64 = 0x2f829df9e5a7a1ea;
1653    pub const WATCH_PLUG_STATE: u64 = 0x182b87f935ca7326;
1654}
1655
1656pub mod codec_connector_ordinals {
1657    pub const CONNECT: u64 = 0x1413f551544026c9;
1658}
1659
1660pub mod composite_ordinals {
1661    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1662    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1663    pub const RESET: u64 = 0xac355fb98341996;
1664    pub const GET_PROPERTIES: u64 = 0x31846fa0a459942b;
1665    pub const GET_RING_BUFFER_FORMATS: u64 = 0x1d89b701b6816ac4;
1666    pub const CREATE_RING_BUFFER: u64 = 0x28c5685f85262033;
1667    pub const GET_DAI_FORMATS: u64 = 0x3cbeaed59c8f69b;
1668    pub const SET_DAI_FORMAT: u64 = 0x155acf5cc0dc8a84;
1669    pub const GET_PACKET_STREAM_FORMATS: u64 = 0x73cc47c6ad39bca7;
1670    pub const CREATE_PACKET_STREAM: u64 = 0x50e8902b756c707c;
1671}
1672
1673pub mod composite_connector_ordinals {
1674    pub const CONNECT: u64 = 0x7ee557529079e466;
1675}
1676
1677pub mod dai_ordinals {
1678    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1679    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1680    pub const RESET: u64 = 0x69e5fa9fa2f78c14;
1681    pub const GET_PROPERTIES: u64 = 0x2c25a1a66149510b;
1682    pub const GET_DAI_FORMATS: u64 = 0x1eb37b0cddf79d69;
1683    pub const GET_RING_BUFFER_FORMATS: u64 = 0x760371081d8c92e4;
1684    pub const CREATE_RING_BUFFER: u64 = 0x5af9760589a75257;
1685}
1686
1687pub mod dai_connector_ordinals {
1688    pub const CONNECT: u64 = 0x4e4db05c2eca1450;
1689}
1690
1691pub mod health_ordinals {
1692    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1693}
1694
1695pub mod packet_stream_control_ordinals {
1696    pub const GET_PROPERTIES: u64 = 0x586cf4f0f8d2771f;
1697    pub const ALLOCATE_VMOS: u64 = 0x7ff1473165ed344b;
1698    pub const DEALLOCATE_VMOS: u64 = 0x4db5cc85a7b8405b;
1699    pub const REGISTER_VMOS: u64 = 0x29c3b656a1020bfd;
1700    pub const UNREGISTER_VMOS: u64 = 0x3e3b4dbfe26b6094;
1701    pub const GET_PACKET_STREAM_SINK: u64 = 0x7394726463ebbc6a;
1702    pub const SET_PACKET_STREAM_SINK: u64 = 0xab88800e31dc0e4;
1703    pub const START: u64 = 0x3a584b94d8a6bfd0;
1704    pub const STOP: u64 = 0x703e4fafcdd7ef32;
1705}
1706
1707pub mod packet_stream_sink_ordinals {
1708    pub const PUT_PACKET: u64 = 0x25a8e35efba81f2b;
1709    pub const FLUSH_PACKETS: u64 = 0x13f16ca37ede8a4;
1710}
1711
1712pub mod ring_buffer_ordinals {
1713    pub const GET_PROPERTIES: u64 = 0x12947f061a8fe1;
1714    pub const WATCH_CLOCK_RECOVERY_POSITION_INFO: u64 = 0x694d5b898a4167e5;
1715    pub const GET_VMO: u64 = 0x44c8f4f5680e853a;
1716    pub const START: u64 = 0x5dd780a769a8892d;
1717    pub const STOP: u64 = 0x49a73d9cf1d4e110;
1718    pub const SET_ACTIVE_CHANNELS: u64 = 0x605464c1d384f309;
1719    pub const WATCH_DELAY_INFO: u64 = 0x6c1248db213fcf9f;
1720}
1721
1722pub mod stream_config_ordinals {
1723    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1724    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1725    pub const GET_PROPERTIES: u64 = 0x7d89c02f3e2d3c01;
1726    pub const GET_SUPPORTED_FORMATS: u64 = 0x448efa7850cafe7e;
1727    pub const CREATE_RING_BUFFER: u64 = 0x2afb19dd13faa1ba;
1728    pub const WATCH_GAIN_STATE: u64 = 0x4772506136ab65c1;
1729    pub const SET_GAIN: u64 = 0x3943b41498c6a384;
1730    pub const WATCH_PLUG_STATE: u64 = 0x497345a6f048b2a6;
1731}
1732
1733pub mod stream_config_connector_ordinals {
1734    pub const CONNECT: u64 = 0x22051ff3021eafec;
1735}
1736
1737mod internal {
1738    use super::*;
1739    unsafe impl fidl::encoding::TypeMarker for BufferType {
1740        type Owned = Self;
1741
1742        #[inline(always)]
1743        fn inline_align(_context: fidl::encoding::Context) -> usize {
1744            8
1745        }
1746
1747        #[inline(always)]
1748        fn inline_size(_context: fidl::encoding::Context) -> usize {
1749            8
1750        }
1751    }
1752
1753    impl fidl::encoding::ValueTypeMarker for BufferType {
1754        type Borrowed<'a> = Self;
1755        #[inline(always)]
1756        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1757            *value
1758        }
1759    }
1760
1761    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BufferType {
1762        #[inline]
1763        unsafe fn encode(
1764            self,
1765            encoder: &mut fidl::encoding::Encoder<'_, D>,
1766            offset: usize,
1767            _depth: fidl::encoding::Depth,
1768        ) -> fidl::Result<()> {
1769            encoder.debug_check_bounds::<Self>(offset);
1770            encoder.write_num(self.bits(), offset);
1771            Ok(())
1772        }
1773    }
1774
1775    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferType {
1776        #[inline(always)]
1777        fn new_empty() -> Self {
1778            Self::empty()
1779        }
1780
1781        #[inline]
1782        unsafe fn decode(
1783            &mut self,
1784            decoder: &mut fidl::encoding::Decoder<'_, D>,
1785            offset: usize,
1786            _depth: fidl::encoding::Depth,
1787        ) -> fidl::Result<()> {
1788            decoder.debug_check_bounds::<Self>(offset);
1789            let prim = decoder.read_num::<u64>(offset);
1790            *self = Self::from_bits_allow_unknown(prim);
1791            Ok(())
1792        }
1793    }
1794    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatStandard {
1795        type Owned = Self;
1796
1797        #[inline(always)]
1798        fn inline_align(_context: fidl::encoding::Context) -> usize {
1799            std::mem::align_of::<u8>()
1800        }
1801
1802        #[inline(always)]
1803        fn inline_size(_context: fidl::encoding::Context) -> usize {
1804            std::mem::size_of::<u8>()
1805        }
1806
1807        #[inline(always)]
1808        fn encode_is_copy() -> bool {
1809            true
1810        }
1811
1812        #[inline(always)]
1813        fn decode_is_copy() -> bool {
1814            false
1815        }
1816    }
1817
1818    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatStandard {
1819        type Borrowed<'a> = Self;
1820        #[inline(always)]
1821        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1822            *value
1823        }
1824    }
1825
1826    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1827        for DaiFrameFormatStandard
1828    {
1829        #[inline]
1830        unsafe fn encode(
1831            self,
1832            encoder: &mut fidl::encoding::Encoder<'_, D>,
1833            offset: usize,
1834            _depth: fidl::encoding::Depth,
1835        ) -> fidl::Result<()> {
1836            encoder.debug_check_bounds::<Self>(offset);
1837            encoder.write_num(self.into_primitive(), offset);
1838            Ok(())
1839        }
1840    }
1841
1842    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1843        for DaiFrameFormatStandard
1844    {
1845        #[inline(always)]
1846        fn new_empty() -> Self {
1847            Self::None
1848        }
1849
1850        #[inline]
1851        unsafe fn decode(
1852            &mut self,
1853            decoder: &mut fidl::encoding::Decoder<'_, D>,
1854            offset: usize,
1855            _depth: fidl::encoding::Depth,
1856        ) -> fidl::Result<()> {
1857            decoder.debug_check_bounds::<Self>(offset);
1858            let prim = decoder.read_num::<u8>(offset);
1859
1860            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1861            Ok(())
1862        }
1863    }
1864    unsafe impl fidl::encoding::TypeMarker for DaiSampleFormat {
1865        type Owned = Self;
1866
1867        #[inline(always)]
1868        fn inline_align(_context: fidl::encoding::Context) -> usize {
1869            std::mem::align_of::<u8>()
1870        }
1871
1872        #[inline(always)]
1873        fn inline_size(_context: fidl::encoding::Context) -> usize {
1874            std::mem::size_of::<u8>()
1875        }
1876
1877        #[inline(always)]
1878        fn encode_is_copy() -> bool {
1879            true
1880        }
1881
1882        #[inline(always)]
1883        fn decode_is_copy() -> bool {
1884            false
1885        }
1886    }
1887
1888    impl fidl::encoding::ValueTypeMarker for DaiSampleFormat {
1889        type Borrowed<'a> = Self;
1890        #[inline(always)]
1891        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1892            *value
1893        }
1894    }
1895
1896    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1897        for DaiSampleFormat
1898    {
1899        #[inline]
1900        unsafe fn encode(
1901            self,
1902            encoder: &mut fidl::encoding::Encoder<'_, D>,
1903            offset: usize,
1904            _depth: fidl::encoding::Depth,
1905        ) -> fidl::Result<()> {
1906            encoder.debug_check_bounds::<Self>(offset);
1907            encoder.write_num(self.into_primitive(), offset);
1908            Ok(())
1909        }
1910    }
1911
1912    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSampleFormat {
1913        #[inline(always)]
1914        fn new_empty() -> Self {
1915            Self::Pdm
1916        }
1917
1918        #[inline]
1919        unsafe fn decode(
1920            &mut self,
1921            decoder: &mut fidl::encoding::Decoder<'_, D>,
1922            offset: usize,
1923            _depth: fidl::encoding::Depth,
1924        ) -> fidl::Result<()> {
1925            decoder.debug_check_bounds::<Self>(offset);
1926            let prim = decoder.read_num::<u8>(offset);
1927
1928            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1929            Ok(())
1930        }
1931    }
1932    unsafe impl fidl::encoding::TypeMarker for DeviceType {
1933        type Owned = Self;
1934
1935        #[inline(always)]
1936        fn inline_align(_context: fidl::encoding::Context) -> usize {
1937            std::mem::align_of::<u32>()
1938        }
1939
1940        #[inline(always)]
1941        fn inline_size(_context: fidl::encoding::Context) -> usize {
1942            std::mem::size_of::<u32>()
1943        }
1944
1945        #[inline(always)]
1946        fn encode_is_copy() -> bool {
1947            false
1948        }
1949
1950        #[inline(always)]
1951        fn decode_is_copy() -> bool {
1952            false
1953        }
1954    }
1955
1956    impl fidl::encoding::ValueTypeMarker for DeviceType {
1957        type Borrowed<'a> = Self;
1958        #[inline(always)]
1959        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1960            *value
1961        }
1962    }
1963
1964    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
1965        #[inline]
1966        unsafe fn encode(
1967            self,
1968            encoder: &mut fidl::encoding::Encoder<'_, D>,
1969            offset: usize,
1970            _depth: fidl::encoding::Depth,
1971        ) -> fidl::Result<()> {
1972            encoder.debug_check_bounds::<Self>(offset);
1973            encoder.write_num(self.into_primitive(), offset);
1974            Ok(())
1975        }
1976    }
1977
1978    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
1979        #[inline(always)]
1980        fn new_empty() -> Self {
1981            Self::unknown()
1982        }
1983
1984        #[inline]
1985        unsafe fn decode(
1986            &mut self,
1987            decoder: &mut fidl::encoding::Decoder<'_, D>,
1988            offset: usize,
1989            _depth: fidl::encoding::Depth,
1990        ) -> fidl::Result<()> {
1991            decoder.debug_check_bounds::<Self>(offset);
1992            let prim = decoder.read_num::<u32>(offset);
1993
1994            *self = Self::from_primitive_allow_unknown(prim);
1995            Ok(())
1996        }
1997    }
1998    unsafe impl fidl::encoding::TypeMarker for DriverError {
1999        type Owned = Self;
2000
2001        #[inline(always)]
2002        fn inline_align(_context: fidl::encoding::Context) -> usize {
2003            std::mem::align_of::<u32>()
2004        }
2005
2006        #[inline(always)]
2007        fn inline_size(_context: fidl::encoding::Context) -> usize {
2008            std::mem::size_of::<u32>()
2009        }
2010
2011        #[inline(always)]
2012        fn encode_is_copy() -> bool {
2013            false
2014        }
2015
2016        #[inline(always)]
2017        fn decode_is_copy() -> bool {
2018            false
2019        }
2020    }
2021
2022    impl fidl::encoding::ValueTypeMarker for DriverError {
2023        type Borrowed<'a> = Self;
2024        #[inline(always)]
2025        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2026            *value
2027        }
2028    }
2029
2030    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DriverError {
2031        #[inline]
2032        unsafe fn encode(
2033            self,
2034            encoder: &mut fidl::encoding::Encoder<'_, D>,
2035            offset: usize,
2036            _depth: fidl::encoding::Depth,
2037        ) -> fidl::Result<()> {
2038            encoder.debug_check_bounds::<Self>(offset);
2039            encoder.write_num(self.into_primitive(), offset);
2040            Ok(())
2041        }
2042    }
2043
2044    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverError {
2045        #[inline(always)]
2046        fn new_empty() -> Self {
2047            Self::unknown()
2048        }
2049
2050        #[inline]
2051        unsafe fn decode(
2052            &mut self,
2053            decoder: &mut fidl::encoding::Decoder<'_, D>,
2054            offset: usize,
2055            _depth: fidl::encoding::Depth,
2056        ) -> fidl::Result<()> {
2057            decoder.debug_check_bounds::<Self>(offset);
2058            let prim = decoder.read_num::<u32>(offset);
2059
2060            *self = Self::from_primitive_allow_unknown(prim);
2061            Ok(())
2062        }
2063    }
2064    unsafe impl fidl::encoding::TypeMarker for EncodingType {
2065        type Owned = Self;
2066
2067        #[inline(always)]
2068        fn inline_align(_context: fidl::encoding::Context) -> usize {
2069            std::mem::align_of::<u32>()
2070        }
2071
2072        #[inline(always)]
2073        fn inline_size(_context: fidl::encoding::Context) -> usize {
2074            std::mem::size_of::<u32>()
2075        }
2076
2077        #[inline(always)]
2078        fn encode_is_copy() -> bool {
2079            false
2080        }
2081
2082        #[inline(always)]
2083        fn decode_is_copy() -> bool {
2084            false
2085        }
2086    }
2087
2088    impl fidl::encoding::ValueTypeMarker for EncodingType {
2089        type Borrowed<'a> = Self;
2090        #[inline(always)]
2091        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2092            *value
2093        }
2094    }
2095
2096    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EncodingType {
2097        #[inline]
2098        unsafe fn encode(
2099            self,
2100            encoder: &mut fidl::encoding::Encoder<'_, D>,
2101            offset: usize,
2102            _depth: fidl::encoding::Depth,
2103        ) -> fidl::Result<()> {
2104            encoder.debug_check_bounds::<Self>(offset);
2105            encoder.write_num(self.into_primitive(), offset);
2106            Ok(())
2107        }
2108    }
2109
2110    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EncodingType {
2111        #[inline(always)]
2112        fn new_empty() -> Self {
2113            Self::unknown()
2114        }
2115
2116        #[inline]
2117        unsafe fn decode(
2118            &mut self,
2119            decoder: &mut fidl::encoding::Decoder<'_, D>,
2120            offset: usize,
2121            _depth: fidl::encoding::Depth,
2122        ) -> fidl::Result<()> {
2123            decoder.debug_check_bounds::<Self>(offset);
2124            let prim = decoder.read_num::<u32>(offset);
2125
2126            *self = Self::from_primitive_allow_unknown(prim);
2127            Ok(())
2128        }
2129    }
2130    unsafe impl fidl::encoding::TypeMarker for GetVmoError {
2131        type Owned = Self;
2132
2133        #[inline(always)]
2134        fn inline_align(_context: fidl::encoding::Context) -> usize {
2135            std::mem::align_of::<u32>()
2136        }
2137
2138        #[inline(always)]
2139        fn inline_size(_context: fidl::encoding::Context) -> usize {
2140            std::mem::size_of::<u32>()
2141        }
2142
2143        #[inline(always)]
2144        fn encode_is_copy() -> bool {
2145            true
2146        }
2147
2148        #[inline(always)]
2149        fn decode_is_copy() -> bool {
2150            false
2151        }
2152    }
2153
2154    impl fidl::encoding::ValueTypeMarker for GetVmoError {
2155        type Borrowed<'a> = Self;
2156        #[inline(always)]
2157        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2158            *value
2159        }
2160    }
2161
2162    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GetVmoError {
2163        #[inline]
2164        unsafe fn encode(
2165            self,
2166            encoder: &mut fidl::encoding::Encoder<'_, D>,
2167            offset: usize,
2168            _depth: fidl::encoding::Depth,
2169        ) -> fidl::Result<()> {
2170            encoder.debug_check_bounds::<Self>(offset);
2171            encoder.write_num(self.into_primitive(), offset);
2172            Ok(())
2173        }
2174    }
2175
2176    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetVmoError {
2177        #[inline(always)]
2178        fn new_empty() -> Self {
2179            Self::InvalidArgs
2180        }
2181
2182        #[inline]
2183        unsafe fn decode(
2184            &mut self,
2185            decoder: &mut fidl::encoding::Decoder<'_, D>,
2186            offset: usize,
2187            _depth: fidl::encoding::Depth,
2188        ) -> fidl::Result<()> {
2189            decoder.debug_check_bounds::<Self>(offset);
2190            let prim = decoder.read_num::<u32>(offset);
2191
2192            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2193            Ok(())
2194        }
2195    }
2196    unsafe impl fidl::encoding::TypeMarker for PlugDetectCapabilities {
2197        type Owned = Self;
2198
2199        #[inline(always)]
2200        fn inline_align(_context: fidl::encoding::Context) -> usize {
2201            std::mem::align_of::<u32>()
2202        }
2203
2204        #[inline(always)]
2205        fn inline_size(_context: fidl::encoding::Context) -> usize {
2206            std::mem::size_of::<u32>()
2207        }
2208
2209        #[inline(always)]
2210        fn encode_is_copy() -> bool {
2211            true
2212        }
2213
2214        #[inline(always)]
2215        fn decode_is_copy() -> bool {
2216            false
2217        }
2218    }
2219
2220    impl fidl::encoding::ValueTypeMarker for PlugDetectCapabilities {
2221        type Borrowed<'a> = Self;
2222        #[inline(always)]
2223        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2224            *value
2225        }
2226    }
2227
2228    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2229        for PlugDetectCapabilities
2230    {
2231        #[inline]
2232        unsafe fn encode(
2233            self,
2234            encoder: &mut fidl::encoding::Encoder<'_, D>,
2235            offset: usize,
2236            _depth: fidl::encoding::Depth,
2237        ) -> fidl::Result<()> {
2238            encoder.debug_check_bounds::<Self>(offset);
2239            encoder.write_num(self.into_primitive(), offset);
2240            Ok(())
2241        }
2242    }
2243
2244    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2245        for PlugDetectCapabilities
2246    {
2247        #[inline(always)]
2248        fn new_empty() -> Self {
2249            Self::Hardwired
2250        }
2251
2252        #[inline]
2253        unsafe fn decode(
2254            &mut self,
2255            decoder: &mut fidl::encoding::Decoder<'_, D>,
2256            offset: usize,
2257            _depth: fidl::encoding::Depth,
2258        ) -> fidl::Result<()> {
2259            decoder.debug_check_bounds::<Self>(offset);
2260            let prim = decoder.read_num::<u32>(offset);
2261
2262            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2263            Ok(())
2264        }
2265    }
2266    unsafe impl fidl::encoding::TypeMarker for SampleFormat {
2267        type Owned = Self;
2268
2269        #[inline(always)]
2270        fn inline_align(_context: fidl::encoding::Context) -> usize {
2271            std::mem::align_of::<u8>()
2272        }
2273
2274        #[inline(always)]
2275        fn inline_size(_context: fidl::encoding::Context) -> usize {
2276            std::mem::size_of::<u8>()
2277        }
2278
2279        #[inline(always)]
2280        fn encode_is_copy() -> bool {
2281            true
2282        }
2283
2284        #[inline(always)]
2285        fn decode_is_copy() -> bool {
2286            false
2287        }
2288    }
2289
2290    impl fidl::encoding::ValueTypeMarker for SampleFormat {
2291        type Borrowed<'a> = Self;
2292        #[inline(always)]
2293        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2294            *value
2295        }
2296    }
2297
2298    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleFormat {
2299        #[inline]
2300        unsafe fn encode(
2301            self,
2302            encoder: &mut fidl::encoding::Encoder<'_, D>,
2303            offset: usize,
2304            _depth: fidl::encoding::Depth,
2305        ) -> fidl::Result<()> {
2306            encoder.debug_check_bounds::<Self>(offset);
2307            encoder.write_num(self.into_primitive(), offset);
2308            Ok(())
2309        }
2310    }
2311
2312    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleFormat {
2313        #[inline(always)]
2314        fn new_empty() -> Self {
2315            Self::PcmSigned
2316        }
2317
2318        #[inline]
2319        unsafe fn decode(
2320            &mut self,
2321            decoder: &mut fidl::encoding::Decoder<'_, D>,
2322            offset: usize,
2323            _depth: fidl::encoding::Depth,
2324        ) -> fidl::Result<()> {
2325            decoder.debug_check_bounds::<Self>(offset);
2326            let prim = decoder.read_num::<u8>(offset);
2327
2328            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
2329            Ok(())
2330        }
2331    }
2332    unsafe impl fidl::encoding::TypeMarker for SingularUniqueId {
2333        type Owned = Self;
2334
2335        #[inline(always)]
2336        fn inline_align(_context: fidl::encoding::Context) -> usize {
2337            std::mem::align_of::<u8>()
2338        }
2339
2340        #[inline(always)]
2341        fn inline_size(_context: fidl::encoding::Context) -> usize {
2342            std::mem::size_of::<u8>()
2343        }
2344
2345        #[inline(always)]
2346        fn encode_is_copy() -> bool {
2347            false
2348        }
2349
2350        #[inline(always)]
2351        fn decode_is_copy() -> bool {
2352            false
2353        }
2354    }
2355
2356    impl fidl::encoding::ValueTypeMarker for SingularUniqueId {
2357        type Borrowed<'a> = Self;
2358        #[inline(always)]
2359        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2360            *value
2361        }
2362    }
2363
2364    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
2365        for SingularUniqueId
2366    {
2367        #[inline]
2368        unsafe fn encode(
2369            self,
2370            encoder: &mut fidl::encoding::Encoder<'_, D>,
2371            offset: usize,
2372            _depth: fidl::encoding::Depth,
2373        ) -> fidl::Result<()> {
2374            encoder.debug_check_bounds::<Self>(offset);
2375            encoder.write_num(self.into_primitive(), offset);
2376            Ok(())
2377        }
2378    }
2379
2380    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SingularUniqueId {
2381        #[inline(always)]
2382        fn new_empty() -> Self {
2383            Self::unknown()
2384        }
2385
2386        #[inline]
2387        unsafe fn decode(
2388            &mut self,
2389            decoder: &mut fidl::encoding::Decoder<'_, D>,
2390            offset: usize,
2391            _depth: fidl::encoding::Depth,
2392        ) -> fidl::Result<()> {
2393            decoder.debug_check_bounds::<Self>(offset);
2394            let prim = decoder.read_num::<u8>(offset);
2395
2396            *self = Self::from_primitive_allow_unknown(prim);
2397            Ok(())
2398        }
2399    }
2400
2401    impl fidl::encoding::ValueTypeMarker for CodecGetPropertiesResponse {
2402        type Borrowed<'a> = &'a Self;
2403        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2404            value
2405        }
2406    }
2407
2408    unsafe impl fidl::encoding::TypeMarker for CodecGetPropertiesResponse {
2409        type Owned = Self;
2410
2411        #[inline(always)]
2412        fn inline_align(_context: fidl::encoding::Context) -> usize {
2413            8
2414        }
2415
2416        #[inline(always)]
2417        fn inline_size(_context: fidl::encoding::Context) -> usize {
2418            16
2419        }
2420    }
2421
2422    unsafe impl<D: fidl::encoding::ResourceDialect>
2423        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for &CodecGetPropertiesResponse
2424    {
2425        #[inline]
2426        unsafe fn encode(
2427            self,
2428            encoder: &mut fidl::encoding::Encoder<'_, D>,
2429            offset: usize,
2430            _depth: fidl::encoding::Depth,
2431        ) -> fidl::Result<()> {
2432            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2433            // Delegate to tuple encoding.
2434            fidl::encoding::Encode::<CodecGetPropertiesResponse, D>::encode(
2435                (<CodecProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
2436                encoder,
2437                offset,
2438                _depth,
2439            )
2440        }
2441    }
2442    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecProperties, D>>
2443        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for (T0,)
2444    {
2445        #[inline]
2446        unsafe fn encode(
2447            self,
2448            encoder: &mut fidl::encoding::Encoder<'_, D>,
2449            offset: usize,
2450            depth: fidl::encoding::Depth,
2451        ) -> fidl::Result<()> {
2452            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
2453            // Zero out padding regions. There's no need to apply masks
2454            // because the unmasked parts will be overwritten by fields.
2455            // Write the fields.
2456            self.0.encode(encoder, offset + 0, depth)?;
2457            Ok(())
2458        }
2459    }
2460
2461    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2462        for CodecGetPropertiesResponse
2463    {
2464        #[inline(always)]
2465        fn new_empty() -> Self {
2466            Self { properties: fidl::new_empty!(CodecProperties, D) }
2467        }
2468
2469        #[inline]
2470        unsafe fn decode(
2471            &mut self,
2472            decoder: &mut fidl::encoding::Decoder<'_, D>,
2473            offset: usize,
2474            _depth: fidl::encoding::Depth,
2475        ) -> fidl::Result<()> {
2476            decoder.debug_check_bounds::<Self>(offset);
2477            // Verify that padding bytes are zero.
2478            fidl::decode!(CodecProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
2479            Ok(())
2480        }
2481    }
2482
2483    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatRequest {
2484        type Borrowed<'a> = &'a Self;
2485        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2486            value
2487        }
2488    }
2489
2490    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatRequest {
2491        type Owned = Self;
2492
2493        #[inline(always)]
2494        fn inline_align(_context: fidl::encoding::Context) -> usize {
2495            8
2496        }
2497
2498        #[inline(always)]
2499        fn inline_size(_context: fidl::encoding::Context) -> usize {
2500            48
2501        }
2502    }
2503
2504    unsafe impl<D: fidl::encoding::ResourceDialect>
2505        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for &CodecSetDaiFormatRequest
2506    {
2507        #[inline]
2508        unsafe fn encode(
2509            self,
2510            encoder: &mut fidl::encoding::Encoder<'_, D>,
2511            offset: usize,
2512            _depth: fidl::encoding::Depth,
2513        ) -> fidl::Result<()> {
2514            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2515            // Delegate to tuple encoding.
2516            fidl::encoding::Encode::<CodecSetDaiFormatRequest, D>::encode(
2517                (<DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),),
2518                encoder,
2519                offset,
2520                _depth,
2521            )
2522        }
2523    }
2524    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiFormat, D>>
2525        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for (T0,)
2526    {
2527        #[inline]
2528        unsafe fn encode(
2529            self,
2530            encoder: &mut fidl::encoding::Encoder<'_, D>,
2531            offset: usize,
2532            depth: fidl::encoding::Depth,
2533        ) -> fidl::Result<()> {
2534            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
2535            // Zero out padding regions. There's no need to apply masks
2536            // because the unmasked parts will be overwritten by fields.
2537            // Write the fields.
2538            self.0.encode(encoder, offset + 0, depth)?;
2539            Ok(())
2540        }
2541    }
2542
2543    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2544        for CodecSetDaiFormatRequest
2545    {
2546        #[inline(always)]
2547        fn new_empty() -> Self {
2548            Self { format: fidl::new_empty!(DaiFormat, D) }
2549        }
2550
2551        #[inline]
2552        unsafe fn decode(
2553            &mut self,
2554            decoder: &mut fidl::encoding::Decoder<'_, D>,
2555            offset: usize,
2556            _depth: fidl::encoding::Depth,
2557        ) -> fidl::Result<()> {
2558            decoder.debug_check_bounds::<Self>(offset);
2559            // Verify that padding bytes are zero.
2560            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 0, _depth)?;
2561            Ok(())
2562        }
2563    }
2564
2565    impl fidl::encoding::ValueTypeMarker for CodecStartResponse {
2566        type Borrowed<'a> = &'a Self;
2567        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2568            value
2569        }
2570    }
2571
2572    unsafe impl fidl::encoding::TypeMarker for CodecStartResponse {
2573        type Owned = Self;
2574
2575        #[inline(always)]
2576        fn inline_align(_context: fidl::encoding::Context) -> usize {
2577            8
2578        }
2579
2580        #[inline(always)]
2581        fn inline_size(_context: fidl::encoding::Context) -> usize {
2582            8
2583        }
2584        #[inline(always)]
2585        fn encode_is_copy() -> bool {
2586            true
2587        }
2588
2589        #[inline(always)]
2590        fn decode_is_copy() -> bool {
2591            true
2592        }
2593    }
2594
2595    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStartResponse, D>
2596        for &CodecStartResponse
2597    {
2598        #[inline]
2599        unsafe fn encode(
2600            self,
2601            encoder: &mut fidl::encoding::Encoder<'_, D>,
2602            offset: usize,
2603            _depth: fidl::encoding::Depth,
2604        ) -> fidl::Result<()> {
2605            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2606            unsafe {
2607                // Copy the object into the buffer.
2608                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2609                (buf_ptr as *mut CodecStartResponse)
2610                    .write_unaligned((self as *const CodecStartResponse).read());
2611                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2612                // done second because the memcpy will write garbage to these bytes.
2613            }
2614            Ok(())
2615        }
2616    }
2617    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2618        fidl::encoding::Encode<CodecStartResponse, D> for (T0,)
2619    {
2620        #[inline]
2621        unsafe fn encode(
2622            self,
2623            encoder: &mut fidl::encoding::Encoder<'_, D>,
2624            offset: usize,
2625            depth: fidl::encoding::Depth,
2626        ) -> fidl::Result<()> {
2627            encoder.debug_check_bounds::<CodecStartResponse>(offset);
2628            // Zero out padding regions. There's no need to apply masks
2629            // because the unmasked parts will be overwritten by fields.
2630            // Write the fields.
2631            self.0.encode(encoder, offset + 0, depth)?;
2632            Ok(())
2633        }
2634    }
2635
2636    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStartResponse {
2637        #[inline(always)]
2638        fn new_empty() -> Self {
2639            Self { start_time: fidl::new_empty!(i64, D) }
2640        }
2641
2642        #[inline]
2643        unsafe fn decode(
2644            &mut self,
2645            decoder: &mut fidl::encoding::Decoder<'_, D>,
2646            offset: usize,
2647            _depth: fidl::encoding::Depth,
2648        ) -> fidl::Result<()> {
2649            decoder.debug_check_bounds::<Self>(offset);
2650            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2651            // Verify that padding bytes are zero.
2652            // Copy from the buffer into the object.
2653            unsafe {
2654                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2655            }
2656            Ok(())
2657        }
2658    }
2659
2660    impl fidl::encoding::ValueTypeMarker for CodecStopResponse {
2661        type Borrowed<'a> = &'a Self;
2662        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2663            value
2664        }
2665    }
2666
2667    unsafe impl fidl::encoding::TypeMarker for CodecStopResponse {
2668        type Owned = Self;
2669
2670        #[inline(always)]
2671        fn inline_align(_context: fidl::encoding::Context) -> usize {
2672            8
2673        }
2674
2675        #[inline(always)]
2676        fn inline_size(_context: fidl::encoding::Context) -> usize {
2677            8
2678        }
2679        #[inline(always)]
2680        fn encode_is_copy() -> bool {
2681            true
2682        }
2683
2684        #[inline(always)]
2685        fn decode_is_copy() -> bool {
2686            true
2687        }
2688    }
2689
2690    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStopResponse, D>
2691        for &CodecStopResponse
2692    {
2693        #[inline]
2694        unsafe fn encode(
2695            self,
2696            encoder: &mut fidl::encoding::Encoder<'_, D>,
2697            offset: usize,
2698            _depth: fidl::encoding::Depth,
2699        ) -> fidl::Result<()> {
2700            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2701            unsafe {
2702                // Copy the object into the buffer.
2703                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2704                (buf_ptr as *mut CodecStopResponse)
2705                    .write_unaligned((self as *const CodecStopResponse).read());
2706                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2707                // done second because the memcpy will write garbage to these bytes.
2708            }
2709            Ok(())
2710        }
2711    }
2712    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2713        fidl::encoding::Encode<CodecStopResponse, D> for (T0,)
2714    {
2715        #[inline]
2716        unsafe fn encode(
2717            self,
2718            encoder: &mut fidl::encoding::Encoder<'_, D>,
2719            offset: usize,
2720            depth: fidl::encoding::Depth,
2721        ) -> fidl::Result<()> {
2722            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2723            // Zero out padding regions. There's no need to apply masks
2724            // because the unmasked parts will be overwritten by fields.
2725            // Write the fields.
2726            self.0.encode(encoder, offset + 0, depth)?;
2727            Ok(())
2728        }
2729    }
2730
2731    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStopResponse {
2732        #[inline(always)]
2733        fn new_empty() -> Self {
2734            Self { stop_time: fidl::new_empty!(i64, D) }
2735        }
2736
2737        #[inline]
2738        unsafe fn decode(
2739            &mut self,
2740            decoder: &mut fidl::encoding::Decoder<'_, D>,
2741            offset: usize,
2742            _depth: fidl::encoding::Depth,
2743        ) -> fidl::Result<()> {
2744            decoder.debug_check_bounds::<Self>(offset);
2745            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2746            // Verify that padding bytes are zero.
2747            // Copy from the buffer into the object.
2748            unsafe {
2749                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2750            }
2751            Ok(())
2752        }
2753    }
2754
2755    impl fidl::encoding::ValueTypeMarker for CodecWatchPlugStateResponse {
2756        type Borrowed<'a> = &'a Self;
2757        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2758            value
2759        }
2760    }
2761
2762    unsafe impl fidl::encoding::TypeMarker for CodecWatchPlugStateResponse {
2763        type Owned = Self;
2764
2765        #[inline(always)]
2766        fn inline_align(_context: fidl::encoding::Context) -> usize {
2767            8
2768        }
2769
2770        #[inline(always)]
2771        fn inline_size(_context: fidl::encoding::Context) -> usize {
2772            16
2773        }
2774    }
2775
2776    unsafe impl<D: fidl::encoding::ResourceDialect>
2777        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for &CodecWatchPlugStateResponse
2778    {
2779        #[inline]
2780        unsafe fn encode(
2781            self,
2782            encoder: &mut fidl::encoding::Encoder<'_, D>,
2783            offset: usize,
2784            _depth: fidl::encoding::Depth,
2785        ) -> fidl::Result<()> {
2786            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2787            // Delegate to tuple encoding.
2788            fidl::encoding::Encode::<CodecWatchPlugStateResponse, D>::encode(
2789                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
2790                encoder,
2791                offset,
2792                _depth,
2793            )
2794        }
2795    }
2796    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
2797        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for (T0,)
2798    {
2799        #[inline]
2800        unsafe fn encode(
2801            self,
2802            encoder: &mut fidl::encoding::Encoder<'_, D>,
2803            offset: usize,
2804            depth: fidl::encoding::Depth,
2805        ) -> fidl::Result<()> {
2806            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2807            // Zero out padding regions. There's no need to apply masks
2808            // because the unmasked parts will be overwritten by fields.
2809            // Write the fields.
2810            self.0.encode(encoder, offset + 0, depth)?;
2811            Ok(())
2812        }
2813    }
2814
2815    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2816        for CodecWatchPlugStateResponse
2817    {
2818        #[inline(always)]
2819        fn new_empty() -> Self {
2820            Self { plug_state: fidl::new_empty!(PlugState, D) }
2821        }
2822
2823        #[inline]
2824        unsafe fn decode(
2825            &mut self,
2826            decoder: &mut fidl::encoding::Decoder<'_, D>,
2827            offset: usize,
2828            _depth: fidl::encoding::Depth,
2829        ) -> fidl::Result<()> {
2830            decoder.debug_check_bounds::<Self>(offset);
2831            // Verify that padding bytes are zero.
2832            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
2833            Ok(())
2834        }
2835    }
2836
2837    impl fidl::encoding::ValueTypeMarker for CodecGetDaiFormatsResponse {
2838        type Borrowed<'a> = &'a Self;
2839        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2840            value
2841        }
2842    }
2843
2844    unsafe impl fidl::encoding::TypeMarker for CodecGetDaiFormatsResponse {
2845        type Owned = Self;
2846
2847        #[inline(always)]
2848        fn inline_align(_context: fidl::encoding::Context) -> usize {
2849            8
2850        }
2851
2852        #[inline(always)]
2853        fn inline_size(_context: fidl::encoding::Context) -> usize {
2854            16
2855        }
2856    }
2857
2858    unsafe impl<D: fidl::encoding::ResourceDialect>
2859        fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for &CodecGetDaiFormatsResponse
2860    {
2861        #[inline]
2862        unsafe fn encode(
2863            self,
2864            encoder: &mut fidl::encoding::Encoder<'_, D>,
2865            offset: usize,
2866            _depth: fidl::encoding::Depth,
2867        ) -> fidl::Result<()> {
2868            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2869            // Delegate to tuple encoding.
2870            fidl::encoding::Encode::<CodecGetDaiFormatsResponse, D>::encode(
2871                (
2872                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.formats),
2873                ),
2874                encoder, offset, _depth
2875            )
2876        }
2877    }
2878    unsafe impl<
2879        D: fidl::encoding::ResourceDialect,
2880        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2881    > fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for (T0,)
2882    {
2883        #[inline]
2884        unsafe fn encode(
2885            self,
2886            encoder: &mut fidl::encoding::Encoder<'_, D>,
2887            offset: usize,
2888            depth: fidl::encoding::Depth,
2889        ) -> fidl::Result<()> {
2890            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2891            // Zero out padding regions. There's no need to apply masks
2892            // because the unmasked parts will be overwritten by fields.
2893            // Write the fields.
2894            self.0.encode(encoder, offset + 0, depth)?;
2895            Ok(())
2896        }
2897    }
2898
2899    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2900        for CodecGetDaiFormatsResponse
2901    {
2902        #[inline(always)]
2903        fn new_empty() -> Self {
2904            Self { formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D) }
2905        }
2906
2907        #[inline]
2908        unsafe fn decode(
2909            &mut self,
2910            decoder: &mut fidl::encoding::Decoder<'_, D>,
2911            offset: usize,
2912            _depth: fidl::encoding::Depth,
2913        ) -> fidl::Result<()> {
2914            decoder.debug_check_bounds::<Self>(offset);
2915            // Verify that padding bytes are zero.
2916            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.formats, decoder, offset + 0, _depth)?;
2917            Ok(())
2918        }
2919    }
2920
2921    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatResponse {
2922        type Borrowed<'a> = &'a Self;
2923        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2924            value
2925        }
2926    }
2927
2928    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatResponse {
2929        type Owned = Self;
2930
2931        #[inline(always)]
2932        fn inline_align(_context: fidl::encoding::Context) -> usize {
2933            8
2934        }
2935
2936        #[inline(always)]
2937        fn inline_size(_context: fidl::encoding::Context) -> usize {
2938            16
2939        }
2940    }
2941
2942    unsafe impl<D: fidl::encoding::ResourceDialect>
2943        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for &CodecSetDaiFormatResponse
2944    {
2945        #[inline]
2946        unsafe fn encode(
2947            self,
2948            encoder: &mut fidl::encoding::Encoder<'_, D>,
2949            offset: usize,
2950            _depth: fidl::encoding::Depth,
2951        ) -> fidl::Result<()> {
2952            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2953            // Delegate to tuple encoding.
2954            fidl::encoding::Encode::<CodecSetDaiFormatResponse, D>::encode(
2955                (<CodecFormatInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
2956                encoder,
2957                offset,
2958                _depth,
2959            )
2960        }
2961    }
2962    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecFormatInfo, D>>
2963        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for (T0,)
2964    {
2965        #[inline]
2966        unsafe fn encode(
2967            self,
2968            encoder: &mut fidl::encoding::Encoder<'_, D>,
2969            offset: usize,
2970            depth: fidl::encoding::Depth,
2971        ) -> fidl::Result<()> {
2972            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2973            // Zero out padding regions. There's no need to apply masks
2974            // because the unmasked parts will be overwritten by fields.
2975            // Write the fields.
2976            self.0.encode(encoder, offset + 0, depth)?;
2977            Ok(())
2978        }
2979    }
2980
2981    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2982        for CodecSetDaiFormatResponse
2983    {
2984        #[inline(always)]
2985        fn new_empty() -> Self {
2986            Self { state: fidl::new_empty!(CodecFormatInfo, D) }
2987        }
2988
2989        #[inline]
2990        unsafe fn decode(
2991            &mut self,
2992            decoder: &mut fidl::encoding::Decoder<'_, D>,
2993            offset: usize,
2994            _depth: fidl::encoding::Depth,
2995        ) -> fidl::Result<()> {
2996            decoder.debug_check_bounds::<Self>(offset);
2997            // Verify that padding bytes are zero.
2998            fidl::decode!(CodecFormatInfo, D, &mut self.state, decoder, offset + 0, _depth)?;
2999            Ok(())
3000        }
3001    }
3002
3003    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsRequest {
3004        type Borrowed<'a> = &'a Self;
3005        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3006            value
3007        }
3008    }
3009
3010    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsRequest {
3011        type Owned = Self;
3012
3013        #[inline(always)]
3014        fn inline_align(_context: fidl::encoding::Context) -> usize {
3015            8
3016        }
3017
3018        #[inline(always)]
3019        fn inline_size(_context: fidl::encoding::Context) -> usize {
3020            8
3021        }
3022        #[inline(always)]
3023        fn encode_is_copy() -> bool {
3024            true
3025        }
3026
3027        #[inline(always)]
3028        fn decode_is_copy() -> bool {
3029            true
3030        }
3031    }
3032
3033    unsafe impl<D: fidl::encoding::ResourceDialect>
3034        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D>
3035        for &CompositeGetDaiFormatsRequest
3036    {
3037        #[inline]
3038        unsafe fn encode(
3039            self,
3040            encoder: &mut fidl::encoding::Encoder<'_, D>,
3041            offset: usize,
3042            _depth: fidl::encoding::Depth,
3043        ) -> fidl::Result<()> {
3044            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3045            unsafe {
3046                // Copy the object into the buffer.
3047                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3048                (buf_ptr as *mut CompositeGetDaiFormatsRequest)
3049                    .write_unaligned((self as *const CompositeGetDaiFormatsRequest).read());
3050                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3051                // done second because the memcpy will write garbage to these bytes.
3052            }
3053            Ok(())
3054        }
3055    }
3056    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3057        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D> for (T0,)
3058    {
3059        #[inline]
3060        unsafe fn encode(
3061            self,
3062            encoder: &mut fidl::encoding::Encoder<'_, D>,
3063            offset: usize,
3064            depth: fidl::encoding::Depth,
3065        ) -> fidl::Result<()> {
3066            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
3067            // Zero out padding regions. There's no need to apply masks
3068            // because the unmasked parts will be overwritten by fields.
3069            // Write the fields.
3070            self.0.encode(encoder, offset + 0, depth)?;
3071            Ok(())
3072        }
3073    }
3074
3075    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3076        for CompositeGetDaiFormatsRequest
3077    {
3078        #[inline(always)]
3079        fn new_empty() -> Self {
3080            Self { processing_element_id: fidl::new_empty!(u64, D) }
3081        }
3082
3083        #[inline]
3084        unsafe fn decode(
3085            &mut self,
3086            decoder: &mut fidl::encoding::Decoder<'_, D>,
3087            offset: usize,
3088            _depth: fidl::encoding::Depth,
3089        ) -> fidl::Result<()> {
3090            decoder.debug_check_bounds::<Self>(offset);
3091            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3092            // Verify that padding bytes are zero.
3093            // Copy from the buffer into the object.
3094            unsafe {
3095                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3096            }
3097            Ok(())
3098        }
3099    }
3100
3101    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsRequest {
3102        type Borrowed<'a> = &'a Self;
3103        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3104            value
3105        }
3106    }
3107
3108    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsRequest {
3109        type Owned = Self;
3110
3111        #[inline(always)]
3112        fn inline_align(_context: fidl::encoding::Context) -> usize {
3113            8
3114        }
3115
3116        #[inline(always)]
3117        fn inline_size(_context: fidl::encoding::Context) -> usize {
3118            8
3119        }
3120        #[inline(always)]
3121        fn encode_is_copy() -> bool {
3122            true
3123        }
3124
3125        #[inline(always)]
3126        fn decode_is_copy() -> bool {
3127            true
3128        }
3129    }
3130
3131    unsafe impl<D: fidl::encoding::ResourceDialect>
3132        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D>
3133        for &CompositeGetPacketStreamFormatsRequest
3134    {
3135        #[inline]
3136        unsafe fn encode(
3137            self,
3138            encoder: &mut fidl::encoding::Encoder<'_, D>,
3139            offset: usize,
3140            _depth: fidl::encoding::Depth,
3141        ) -> fidl::Result<()> {
3142            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3143            unsafe {
3144                // Copy the object into the buffer.
3145                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3146                (buf_ptr as *mut CompositeGetPacketStreamFormatsRequest).write_unaligned(
3147                    (self as *const CompositeGetPacketStreamFormatsRequest).read(),
3148                );
3149                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3150                // done second because the memcpy will write garbage to these bytes.
3151            }
3152            Ok(())
3153        }
3154    }
3155    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3156        fidl::encoding::Encode<CompositeGetPacketStreamFormatsRequest, D> for (T0,)
3157    {
3158        #[inline]
3159        unsafe fn encode(
3160            self,
3161            encoder: &mut fidl::encoding::Encoder<'_, D>,
3162            offset: usize,
3163            depth: fidl::encoding::Depth,
3164        ) -> fidl::Result<()> {
3165            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsRequest>(offset);
3166            // Zero out padding regions. There's no need to apply masks
3167            // because the unmasked parts will be overwritten by fields.
3168            // Write the fields.
3169            self.0.encode(encoder, offset + 0, depth)?;
3170            Ok(())
3171        }
3172    }
3173
3174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3175        for CompositeGetPacketStreamFormatsRequest
3176    {
3177        #[inline(always)]
3178        fn new_empty() -> Self {
3179            Self { processing_element_id: fidl::new_empty!(u64, D) }
3180        }
3181
3182        #[inline]
3183        unsafe fn decode(
3184            &mut self,
3185            decoder: &mut fidl::encoding::Decoder<'_, D>,
3186            offset: usize,
3187            _depth: fidl::encoding::Depth,
3188        ) -> fidl::Result<()> {
3189            decoder.debug_check_bounds::<Self>(offset);
3190            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3191            // Verify that padding bytes are zero.
3192            // Copy from the buffer into the object.
3193            unsafe {
3194                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3195            }
3196            Ok(())
3197        }
3198    }
3199
3200    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsRequest {
3201        type Borrowed<'a> = &'a Self;
3202        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3203            value
3204        }
3205    }
3206
3207    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsRequest {
3208        type Owned = Self;
3209
3210        #[inline(always)]
3211        fn inline_align(_context: fidl::encoding::Context) -> usize {
3212            8
3213        }
3214
3215        #[inline(always)]
3216        fn inline_size(_context: fidl::encoding::Context) -> usize {
3217            8
3218        }
3219        #[inline(always)]
3220        fn encode_is_copy() -> bool {
3221            true
3222        }
3223
3224        #[inline(always)]
3225        fn decode_is_copy() -> bool {
3226            true
3227        }
3228    }
3229
3230    unsafe impl<D: fidl::encoding::ResourceDialect>
3231        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D>
3232        for &CompositeGetRingBufferFormatsRequest
3233    {
3234        #[inline]
3235        unsafe fn encode(
3236            self,
3237            encoder: &mut fidl::encoding::Encoder<'_, D>,
3238            offset: usize,
3239            _depth: fidl::encoding::Depth,
3240        ) -> fidl::Result<()> {
3241            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3242            unsafe {
3243                // Copy the object into the buffer.
3244                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3245                (buf_ptr as *mut CompositeGetRingBufferFormatsRequest)
3246                    .write_unaligned((self as *const CompositeGetRingBufferFormatsRequest).read());
3247                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3248                // done second because the memcpy will write garbage to these bytes.
3249            }
3250            Ok(())
3251        }
3252    }
3253    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3254        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D> for (T0,)
3255    {
3256        #[inline]
3257        unsafe fn encode(
3258            self,
3259            encoder: &mut fidl::encoding::Encoder<'_, D>,
3260            offset: usize,
3261            depth: fidl::encoding::Depth,
3262        ) -> fidl::Result<()> {
3263            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
3264            // Zero out padding regions. There's no need to apply masks
3265            // because the unmasked parts will be overwritten by fields.
3266            // Write the fields.
3267            self.0.encode(encoder, offset + 0, depth)?;
3268            Ok(())
3269        }
3270    }
3271
3272    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3273        for CompositeGetRingBufferFormatsRequest
3274    {
3275        #[inline(always)]
3276        fn new_empty() -> Self {
3277            Self { processing_element_id: fidl::new_empty!(u64, D) }
3278        }
3279
3280        #[inline]
3281        unsafe fn decode(
3282            &mut self,
3283            decoder: &mut fidl::encoding::Decoder<'_, D>,
3284            offset: usize,
3285            _depth: fidl::encoding::Depth,
3286        ) -> fidl::Result<()> {
3287            decoder.debug_check_bounds::<Self>(offset);
3288            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3289            // Verify that padding bytes are zero.
3290            // Copy from the buffer into the object.
3291            unsafe {
3292                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3293            }
3294            Ok(())
3295        }
3296    }
3297
3298    impl fidl::encoding::ValueTypeMarker for CompositeSetDaiFormatRequest {
3299        type Borrowed<'a> = &'a Self;
3300        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3301            value
3302        }
3303    }
3304
3305    unsafe impl fidl::encoding::TypeMarker for CompositeSetDaiFormatRequest {
3306        type Owned = Self;
3307
3308        #[inline(always)]
3309        fn inline_align(_context: fidl::encoding::Context) -> usize {
3310            8
3311        }
3312
3313        #[inline(always)]
3314        fn inline_size(_context: fidl::encoding::Context) -> usize {
3315            56
3316        }
3317    }
3318
3319    unsafe impl<D: fidl::encoding::ResourceDialect>
3320        fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for &CompositeSetDaiFormatRequest
3321    {
3322        #[inline]
3323        unsafe fn encode(
3324            self,
3325            encoder: &mut fidl::encoding::Encoder<'_, D>,
3326            offset: usize,
3327            _depth: fidl::encoding::Depth,
3328        ) -> fidl::Result<()> {
3329            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3330            // Delegate to tuple encoding.
3331            fidl::encoding::Encode::<CompositeSetDaiFormatRequest, D>::encode(
3332                (
3333                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.processing_element_id),
3334                    <DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),
3335                ),
3336                encoder,
3337                offset,
3338                _depth,
3339            )
3340        }
3341    }
3342    unsafe impl<
3343        D: fidl::encoding::ResourceDialect,
3344        T0: fidl::encoding::Encode<u64, D>,
3345        T1: fidl::encoding::Encode<DaiFormat, D>,
3346    > fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for (T0, T1)
3347    {
3348        #[inline]
3349        unsafe fn encode(
3350            self,
3351            encoder: &mut fidl::encoding::Encoder<'_, D>,
3352            offset: usize,
3353            depth: fidl::encoding::Depth,
3354        ) -> fidl::Result<()> {
3355            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
3356            // Zero out padding regions. There's no need to apply masks
3357            // because the unmasked parts will be overwritten by fields.
3358            // Write the fields.
3359            self.0.encode(encoder, offset + 0, depth)?;
3360            self.1.encode(encoder, offset + 8, depth)?;
3361            Ok(())
3362        }
3363    }
3364
3365    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3366        for CompositeSetDaiFormatRequest
3367    {
3368        #[inline(always)]
3369        fn new_empty() -> Self {
3370            Self {
3371                processing_element_id: fidl::new_empty!(u64, D),
3372                format: fidl::new_empty!(DaiFormat, D),
3373            }
3374        }
3375
3376        #[inline]
3377        unsafe fn decode(
3378            &mut self,
3379            decoder: &mut fidl::encoding::Decoder<'_, D>,
3380            offset: usize,
3381            _depth: fidl::encoding::Depth,
3382        ) -> fidl::Result<()> {
3383            decoder.debug_check_bounds::<Self>(offset);
3384            // Verify that padding bytes are zero.
3385            fidl::decode!(u64, D, &mut self.processing_element_id, decoder, offset + 0, _depth)?;
3386            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 8, _depth)?;
3387            Ok(())
3388        }
3389    }
3390
3391    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsResponse {
3392        type Borrowed<'a> = &'a Self;
3393        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3394            value
3395        }
3396    }
3397
3398    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsResponse {
3399        type Owned = Self;
3400
3401        #[inline(always)]
3402        fn inline_align(_context: fidl::encoding::Context) -> usize {
3403            8
3404        }
3405
3406        #[inline(always)]
3407        fn inline_size(_context: fidl::encoding::Context) -> usize {
3408            16
3409        }
3410    }
3411
3412    unsafe impl<D: fidl::encoding::ResourceDialect>
3413        fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D>
3414        for &CompositeGetDaiFormatsResponse
3415    {
3416        #[inline]
3417        unsafe fn encode(
3418            self,
3419            encoder: &mut fidl::encoding::Encoder<'_, D>,
3420            offset: usize,
3421            _depth: fidl::encoding::Depth,
3422        ) -> fidl::Result<()> {
3423            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3424            // Delegate to tuple encoding.
3425            fidl::encoding::Encode::<CompositeGetDaiFormatsResponse, D>::encode(
3426                (
3427                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
3428                ),
3429                encoder, offset, _depth
3430            )
3431        }
3432    }
3433    unsafe impl<
3434        D: fidl::encoding::ResourceDialect,
3435        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
3436    > fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D> for (T0,)
3437    {
3438        #[inline]
3439        unsafe fn encode(
3440            self,
3441            encoder: &mut fidl::encoding::Encoder<'_, D>,
3442            offset: usize,
3443            depth: fidl::encoding::Depth,
3444        ) -> fidl::Result<()> {
3445            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
3446            // Zero out padding regions. There's no need to apply masks
3447            // because the unmasked parts will be overwritten by fields.
3448            // Write the fields.
3449            self.0.encode(encoder, offset + 0, depth)?;
3450            Ok(())
3451        }
3452    }
3453
3454    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3455        for CompositeGetDaiFormatsResponse
3456    {
3457        #[inline(always)]
3458        fn new_empty() -> Self {
3459            Self {
3460                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
3461            }
3462        }
3463
3464        #[inline]
3465        unsafe fn decode(
3466            &mut self,
3467            decoder: &mut fidl::encoding::Decoder<'_, D>,
3468            offset: usize,
3469            _depth: fidl::encoding::Depth,
3470        ) -> fidl::Result<()> {
3471            decoder.debug_check_bounds::<Self>(offset);
3472            // Verify that padding bytes are zero.
3473            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
3474            Ok(())
3475        }
3476    }
3477
3478    impl fidl::encoding::ValueTypeMarker for CompositeGetPacketStreamFormatsResponse {
3479        type Borrowed<'a> = &'a Self;
3480        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3481            value
3482        }
3483    }
3484
3485    unsafe impl fidl::encoding::TypeMarker for CompositeGetPacketStreamFormatsResponse {
3486        type Owned = Self;
3487
3488        #[inline(always)]
3489        fn inline_align(_context: fidl::encoding::Context) -> usize {
3490            8
3491        }
3492
3493        #[inline(always)]
3494        fn inline_size(_context: fidl::encoding::Context) -> usize {
3495            16
3496        }
3497    }
3498
3499    unsafe impl<D: fidl::encoding::ResourceDialect>
3500        fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D>
3501        for &CompositeGetPacketStreamFormatsResponse
3502    {
3503        #[inline]
3504        unsafe fn encode(
3505            self,
3506            encoder: &mut fidl::encoding::Encoder<'_, D>,
3507            offset: usize,
3508            _depth: fidl::encoding::Depth,
3509        ) -> fidl::Result<()> {
3510            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3511            // Delegate to tuple encoding.
3512            fidl::encoding::Encode::<CompositeGetPacketStreamFormatsResponse, D>::encode(
3513                (
3514                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.packet_stream_formats),
3515                ),
3516                encoder, offset, _depth
3517            )
3518        }
3519    }
3520    unsafe impl<
3521        D: fidl::encoding::ResourceDialect,
3522        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3523    > fidl::encoding::Encode<CompositeGetPacketStreamFormatsResponse, D> for (T0,)
3524    {
3525        #[inline]
3526        unsafe fn encode(
3527            self,
3528            encoder: &mut fidl::encoding::Encoder<'_, D>,
3529            offset: usize,
3530            depth: fidl::encoding::Depth,
3531        ) -> fidl::Result<()> {
3532            encoder.debug_check_bounds::<CompositeGetPacketStreamFormatsResponse>(offset);
3533            // Zero out padding regions. There's no need to apply masks
3534            // because the unmasked parts will be overwritten by fields.
3535            // Write the fields.
3536            self.0.encode(encoder, offset + 0, depth)?;
3537            Ok(())
3538        }
3539    }
3540
3541    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3542        for CompositeGetPacketStreamFormatsResponse
3543    {
3544        #[inline(always)]
3545        fn new_empty() -> Self {
3546            Self {
3547                packet_stream_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3548            }
3549        }
3550
3551        #[inline]
3552        unsafe fn decode(
3553            &mut self,
3554            decoder: &mut fidl::encoding::Decoder<'_, D>,
3555            offset: usize,
3556            _depth: fidl::encoding::Depth,
3557        ) -> fidl::Result<()> {
3558            decoder.debug_check_bounds::<Self>(offset);
3559            // Verify that padding bytes are zero.
3560            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.packet_stream_formats, decoder, offset + 0, _depth)?;
3561            Ok(())
3562        }
3563    }
3564
3565    impl fidl::encoding::ValueTypeMarker for CompositeGetPropertiesResponse {
3566        type Borrowed<'a> = &'a Self;
3567        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3568            value
3569        }
3570    }
3571
3572    unsafe impl fidl::encoding::TypeMarker for CompositeGetPropertiesResponse {
3573        type Owned = Self;
3574
3575        #[inline(always)]
3576        fn inline_align(_context: fidl::encoding::Context) -> usize {
3577            8
3578        }
3579
3580        #[inline(always)]
3581        fn inline_size(_context: fidl::encoding::Context) -> usize {
3582            16
3583        }
3584    }
3585
3586    unsafe impl<D: fidl::encoding::ResourceDialect>
3587        fidl::encoding::Encode<CompositeGetPropertiesResponse, D>
3588        for &CompositeGetPropertiesResponse
3589    {
3590        #[inline]
3591        unsafe fn encode(
3592            self,
3593            encoder: &mut fidl::encoding::Encoder<'_, D>,
3594            offset: usize,
3595            _depth: fidl::encoding::Depth,
3596        ) -> fidl::Result<()> {
3597            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3598            // Delegate to tuple encoding.
3599            fidl::encoding::Encode::<CompositeGetPropertiesResponse, D>::encode(
3600                (<CompositeProperties as fidl::encoding::ValueTypeMarker>::borrow(
3601                    &self.properties,
3602                ),),
3603                encoder,
3604                offset,
3605                _depth,
3606            )
3607        }
3608    }
3609    unsafe impl<
3610        D: fidl::encoding::ResourceDialect,
3611        T0: fidl::encoding::Encode<CompositeProperties, D>,
3612    > fidl::encoding::Encode<CompositeGetPropertiesResponse, D> for (T0,)
3613    {
3614        #[inline]
3615        unsafe fn encode(
3616            self,
3617            encoder: &mut fidl::encoding::Encoder<'_, D>,
3618            offset: usize,
3619            depth: fidl::encoding::Depth,
3620        ) -> fidl::Result<()> {
3621            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
3622            // Zero out padding regions. There's no need to apply masks
3623            // because the unmasked parts will be overwritten by fields.
3624            // Write the fields.
3625            self.0.encode(encoder, offset + 0, depth)?;
3626            Ok(())
3627        }
3628    }
3629
3630    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3631        for CompositeGetPropertiesResponse
3632    {
3633        #[inline(always)]
3634        fn new_empty() -> Self {
3635            Self { properties: fidl::new_empty!(CompositeProperties, D) }
3636        }
3637
3638        #[inline]
3639        unsafe fn decode(
3640            &mut self,
3641            decoder: &mut fidl::encoding::Decoder<'_, D>,
3642            offset: usize,
3643            _depth: fidl::encoding::Depth,
3644        ) -> fidl::Result<()> {
3645            decoder.debug_check_bounds::<Self>(offset);
3646            // Verify that padding bytes are zero.
3647            fidl::decode!(
3648                CompositeProperties,
3649                D,
3650                &mut self.properties,
3651                decoder,
3652                offset + 0,
3653                _depth
3654            )?;
3655            Ok(())
3656        }
3657    }
3658
3659    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsResponse {
3660        type Borrowed<'a> = &'a Self;
3661        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3662            value
3663        }
3664    }
3665
3666    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsResponse {
3667        type Owned = Self;
3668
3669        #[inline(always)]
3670        fn inline_align(_context: fidl::encoding::Context) -> usize {
3671            8
3672        }
3673
3674        #[inline(always)]
3675        fn inline_size(_context: fidl::encoding::Context) -> usize {
3676            16
3677        }
3678    }
3679
3680    unsafe impl<D: fidl::encoding::ResourceDialect>
3681        fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D>
3682        for &CompositeGetRingBufferFormatsResponse
3683    {
3684        #[inline]
3685        unsafe fn encode(
3686            self,
3687            encoder: &mut fidl::encoding::Encoder<'_, D>,
3688            offset: usize,
3689            _depth: fidl::encoding::Depth,
3690        ) -> fidl::Result<()> {
3691            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3692            // Delegate to tuple encoding.
3693            fidl::encoding::Encode::<CompositeGetRingBufferFormatsResponse, D>::encode(
3694                (
3695                    <fidl::encoding::Vector<SupportedFormats2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
3696                ),
3697                encoder, offset, _depth
3698            )
3699        }
3700    }
3701    unsafe impl<
3702        D: fidl::encoding::ResourceDialect,
3703        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats2, 64>, D>,
3704    > fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D> for (T0,)
3705    {
3706        #[inline]
3707        unsafe fn encode(
3708            self,
3709            encoder: &mut fidl::encoding::Encoder<'_, D>,
3710            offset: usize,
3711            depth: fidl::encoding::Depth,
3712        ) -> fidl::Result<()> {
3713            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
3714            // Zero out padding regions. There's no need to apply masks
3715            // because the unmasked parts will be overwritten by fields.
3716            // Write the fields.
3717            self.0.encode(encoder, offset + 0, depth)?;
3718            Ok(())
3719        }
3720    }
3721
3722    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3723        for CompositeGetRingBufferFormatsResponse
3724    {
3725        #[inline(always)]
3726        fn new_empty() -> Self {
3727            Self {
3728                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats2, 64>, D),
3729            }
3730        }
3731
3732        #[inline]
3733        unsafe fn decode(
3734            &mut self,
3735            decoder: &mut fidl::encoding::Decoder<'_, D>,
3736            offset: usize,
3737            _depth: fidl::encoding::Depth,
3738        ) -> fidl::Result<()> {
3739            decoder.debug_check_bounds::<Self>(offset);
3740            // Verify that padding bytes are zero.
3741            fidl::decode!(fidl::encoding::Vector<SupportedFormats2, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
3742            Ok(())
3743        }
3744    }
3745
3746    impl fidl::encoding::ValueTypeMarker for DaiFormat {
3747        type Borrowed<'a> = &'a Self;
3748        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3749            value
3750        }
3751    }
3752
3753    unsafe impl fidl::encoding::TypeMarker for DaiFormat {
3754        type Owned = Self;
3755
3756        #[inline(always)]
3757        fn inline_align(_context: fidl::encoding::Context) -> usize {
3758            8
3759        }
3760
3761        #[inline(always)]
3762        fn inline_size(_context: fidl::encoding::Context) -> usize {
3763            48
3764        }
3765    }
3766
3767    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFormat, D>
3768        for &DaiFormat
3769    {
3770        #[inline]
3771        unsafe fn encode(
3772            self,
3773            encoder: &mut fidl::encoding::Encoder<'_, D>,
3774            offset: usize,
3775            _depth: fidl::encoding::Depth,
3776        ) -> fidl::Result<()> {
3777            encoder.debug_check_bounds::<DaiFormat>(offset);
3778            // Delegate to tuple encoding.
3779            fidl::encoding::Encode::<DaiFormat, D>::encode(
3780                (
3781                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3782                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_to_use_bitmask),
3783                    <DaiSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
3784                        &self.sample_format,
3785                    ),
3786                    <DaiFrameFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_format),
3787                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
3788                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3789                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3790                ),
3791                encoder,
3792                offset,
3793                _depth,
3794            )
3795        }
3796    }
3797    unsafe impl<
3798        D: fidl::encoding::ResourceDialect,
3799        T0: fidl::encoding::Encode<u32, D>,
3800        T1: fidl::encoding::Encode<u64, D>,
3801        T2: fidl::encoding::Encode<DaiSampleFormat, D>,
3802        T3: fidl::encoding::Encode<DaiFrameFormat, D>,
3803        T4: fidl::encoding::Encode<u32, D>,
3804        T5: fidl::encoding::Encode<u8, D>,
3805        T6: fidl::encoding::Encode<u8, D>,
3806    > fidl::encoding::Encode<DaiFormat, D> for (T0, T1, T2, T3, T4, T5, T6)
3807    {
3808        #[inline]
3809        unsafe fn encode(
3810            self,
3811            encoder: &mut fidl::encoding::Encoder<'_, D>,
3812            offset: usize,
3813            depth: fidl::encoding::Depth,
3814        ) -> fidl::Result<()> {
3815            encoder.debug_check_bounds::<DaiFormat>(offset);
3816            // Zero out padding regions. There's no need to apply masks
3817            // because the unmasked parts will be overwritten by fields.
3818            unsafe {
3819                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3820                (ptr as *mut u64).write_unaligned(0);
3821            }
3822            unsafe {
3823                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3824                (ptr as *mut u64).write_unaligned(0);
3825            }
3826            unsafe {
3827                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
3828                (ptr as *mut u64).write_unaligned(0);
3829            }
3830            // Write the fields.
3831            self.0.encode(encoder, offset + 0, depth)?;
3832            self.1.encode(encoder, offset + 8, depth)?;
3833            self.2.encode(encoder, offset + 16, depth)?;
3834            self.3.encode(encoder, offset + 24, depth)?;
3835            self.4.encode(encoder, offset + 40, depth)?;
3836            self.5.encode(encoder, offset + 44, depth)?;
3837            self.6.encode(encoder, offset + 45, depth)?;
3838            Ok(())
3839        }
3840    }
3841
3842    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFormat {
3843        #[inline(always)]
3844        fn new_empty() -> Self {
3845            Self {
3846                number_of_channels: fidl::new_empty!(u32, D),
3847                channels_to_use_bitmask: fidl::new_empty!(u64, D),
3848                sample_format: fidl::new_empty!(DaiSampleFormat, D),
3849                frame_format: fidl::new_empty!(DaiFrameFormat, D),
3850                frame_rate: fidl::new_empty!(u32, D),
3851                bits_per_slot: fidl::new_empty!(u8, D),
3852                bits_per_sample: fidl::new_empty!(u8, D),
3853            }
3854        }
3855
3856        #[inline]
3857        unsafe fn decode(
3858            &mut self,
3859            decoder: &mut fidl::encoding::Decoder<'_, D>,
3860            offset: usize,
3861            _depth: fidl::encoding::Depth,
3862        ) -> fidl::Result<()> {
3863            decoder.debug_check_bounds::<Self>(offset);
3864            // Verify that padding bytes are zero.
3865            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3866            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3867            let mask = 0xffffffff00000000u64;
3868            let maskedval = padval & mask;
3869            if maskedval != 0 {
3870                return Err(fidl::Error::NonZeroPadding {
3871                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3872                });
3873            }
3874            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3875            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3876            let mask = 0xffffffffffffff00u64;
3877            let maskedval = padval & mask;
3878            if maskedval != 0 {
3879                return Err(fidl::Error::NonZeroPadding {
3880                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3881                });
3882            }
3883            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
3884            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3885            let mask = 0xffff000000000000u64;
3886            let maskedval = padval & mask;
3887            if maskedval != 0 {
3888                return Err(fidl::Error::NonZeroPadding {
3889                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
3890                });
3891            }
3892            fidl::decode!(u32, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3893            fidl::decode!(u64, D, &mut self.channels_to_use_bitmask, decoder, offset + 8, _depth)?;
3894            fidl::decode!(
3895                DaiSampleFormat,
3896                D,
3897                &mut self.sample_format,
3898                decoder,
3899                offset + 16,
3900                _depth
3901            )?;
3902            fidl::decode!(DaiFrameFormat, D, &mut self.frame_format, decoder, offset + 24, _depth)?;
3903            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 40, _depth)?;
3904            fidl::decode!(u8, D, &mut self.bits_per_slot, decoder, offset + 44, _depth)?;
3905            fidl::decode!(u8, D, &mut self.bits_per_sample, decoder, offset + 45, _depth)?;
3906            Ok(())
3907        }
3908    }
3909
3910    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatCustom {
3911        type Borrowed<'a> = &'a Self;
3912        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3913            value
3914        }
3915    }
3916
3917    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatCustom {
3918        type Owned = Self;
3919
3920        #[inline(always)]
3921        fn inline_align(_context: fidl::encoding::Context) -> usize {
3922            1
3923        }
3924
3925        #[inline(always)]
3926        fn inline_size(_context: fidl::encoding::Context) -> usize {
3927            4
3928        }
3929    }
3930
3931    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormatCustom, D>
3932        for &DaiFrameFormatCustom
3933    {
3934        #[inline]
3935        unsafe fn encode(
3936            self,
3937            encoder: &mut fidl::encoding::Encoder<'_, D>,
3938            offset: usize,
3939            _depth: fidl::encoding::Depth,
3940        ) -> fidl::Result<()> {
3941            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3942            // Delegate to tuple encoding.
3943            fidl::encoding::Encode::<DaiFrameFormatCustom, D>::encode(
3944                (
3945                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.left_justified),
3946                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.sclk_on_raising),
3947                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_sclks_offset),
3948                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_size),
3949                ),
3950                encoder,
3951                offset,
3952                _depth,
3953            )
3954        }
3955    }
3956    unsafe impl<
3957        D: fidl::encoding::ResourceDialect,
3958        T0: fidl::encoding::Encode<bool, D>,
3959        T1: fidl::encoding::Encode<bool, D>,
3960        T2: fidl::encoding::Encode<i8, D>,
3961        T3: fidl::encoding::Encode<u8, D>,
3962    > fidl::encoding::Encode<DaiFrameFormatCustom, D> for (T0, T1, T2, T3)
3963    {
3964        #[inline]
3965        unsafe fn encode(
3966            self,
3967            encoder: &mut fidl::encoding::Encoder<'_, D>,
3968            offset: usize,
3969            depth: fidl::encoding::Depth,
3970        ) -> fidl::Result<()> {
3971            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3972            // Zero out padding regions. There's no need to apply masks
3973            // because the unmasked parts will be overwritten by fields.
3974            // Write the fields.
3975            self.0.encode(encoder, offset + 0, depth)?;
3976            self.1.encode(encoder, offset + 1, depth)?;
3977            self.2.encode(encoder, offset + 2, depth)?;
3978            self.3.encode(encoder, offset + 3, depth)?;
3979            Ok(())
3980        }
3981    }
3982
3983    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormatCustom {
3984        #[inline(always)]
3985        fn new_empty() -> Self {
3986            Self {
3987                left_justified: fidl::new_empty!(bool, D),
3988                sclk_on_raising: fidl::new_empty!(bool, D),
3989                frame_sync_sclks_offset: fidl::new_empty!(i8, D),
3990                frame_sync_size: fidl::new_empty!(u8, D),
3991            }
3992        }
3993
3994        #[inline]
3995        unsafe fn decode(
3996            &mut self,
3997            decoder: &mut fidl::encoding::Decoder<'_, D>,
3998            offset: usize,
3999            _depth: fidl::encoding::Depth,
4000        ) -> fidl::Result<()> {
4001            decoder.debug_check_bounds::<Self>(offset);
4002            // Verify that padding bytes are zero.
4003            fidl::decode!(bool, D, &mut self.left_justified, decoder, offset + 0, _depth)?;
4004            fidl::decode!(bool, D, &mut self.sclk_on_raising, decoder, offset + 1, _depth)?;
4005            fidl::decode!(i8, D, &mut self.frame_sync_sclks_offset, decoder, offset + 2, _depth)?;
4006            fidl::decode!(u8, D, &mut self.frame_sync_size, decoder, offset + 3, _depth)?;
4007            Ok(())
4008        }
4009    }
4010
4011    impl fidl::encoding::ValueTypeMarker for DaiGetPropertiesResponse {
4012        type Borrowed<'a> = &'a Self;
4013        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4014            value
4015        }
4016    }
4017
4018    unsafe impl fidl::encoding::TypeMarker for DaiGetPropertiesResponse {
4019        type Owned = Self;
4020
4021        #[inline(always)]
4022        fn inline_align(_context: fidl::encoding::Context) -> usize {
4023            8
4024        }
4025
4026        #[inline(always)]
4027        fn inline_size(_context: fidl::encoding::Context) -> usize {
4028            16
4029        }
4030    }
4031
4032    unsafe impl<D: fidl::encoding::ResourceDialect>
4033        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for &DaiGetPropertiesResponse
4034    {
4035        #[inline]
4036        unsafe fn encode(
4037            self,
4038            encoder: &mut fidl::encoding::Encoder<'_, D>,
4039            offset: usize,
4040            _depth: fidl::encoding::Depth,
4041        ) -> fidl::Result<()> {
4042            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4043            // Delegate to tuple encoding.
4044            fidl::encoding::Encode::<DaiGetPropertiesResponse, D>::encode(
4045                (<DaiProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
4046                encoder,
4047                offset,
4048                _depth,
4049            )
4050        }
4051    }
4052    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiProperties, D>>
4053        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for (T0,)
4054    {
4055        #[inline]
4056        unsafe fn encode(
4057            self,
4058            encoder: &mut fidl::encoding::Encoder<'_, D>,
4059            offset: usize,
4060            depth: fidl::encoding::Depth,
4061        ) -> fidl::Result<()> {
4062            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
4063            // Zero out padding regions. There's no need to apply masks
4064            // because the unmasked parts will be overwritten by fields.
4065            // Write the fields.
4066            self.0.encode(encoder, offset + 0, depth)?;
4067            Ok(())
4068        }
4069    }
4070
4071    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4072        for DaiGetPropertiesResponse
4073    {
4074        #[inline(always)]
4075        fn new_empty() -> Self {
4076            Self { properties: fidl::new_empty!(DaiProperties, D) }
4077        }
4078
4079        #[inline]
4080        unsafe fn decode(
4081            &mut self,
4082            decoder: &mut fidl::encoding::Decoder<'_, D>,
4083            offset: usize,
4084            _depth: fidl::encoding::Depth,
4085        ) -> fidl::Result<()> {
4086            decoder.debug_check_bounds::<Self>(offset);
4087            // Verify that padding bytes are zero.
4088            fidl::decode!(DaiProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
4089            Ok(())
4090        }
4091    }
4092
4093    impl fidl::encoding::ValueTypeMarker for DaiSupportedFormats {
4094        type Borrowed<'a> = &'a Self;
4095        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4096            value
4097        }
4098    }
4099
4100    unsafe impl fidl::encoding::TypeMarker for DaiSupportedFormats {
4101        type Owned = Self;
4102
4103        #[inline(always)]
4104        fn inline_align(_context: fidl::encoding::Context) -> usize {
4105            8
4106        }
4107
4108        #[inline(always)]
4109        fn inline_size(_context: fidl::encoding::Context) -> usize {
4110            96
4111        }
4112    }
4113
4114    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiSupportedFormats, D>
4115        for &DaiSupportedFormats
4116    {
4117        #[inline]
4118        unsafe fn encode(
4119            self,
4120            encoder: &mut fidl::encoding::Encoder<'_, D>,
4121            offset: usize,
4122            _depth: fidl::encoding::Depth,
4123        ) -> fidl::Result<()> {
4124            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4125            // Delegate to tuple encoding.
4126            fidl::encoding::Encode::<DaiSupportedFormats, D>::encode(
4127                (
4128                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4129                    <fidl::encoding::Vector<DaiSampleFormat, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_formats),
4130                    <fidl::encoding::Vector<DaiFrameFormat, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_formats),
4131                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rates),
4132                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
4133                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
4134                ),
4135                encoder, offset, _depth
4136            )
4137        }
4138    }
4139    unsafe impl<
4140        D: fidl::encoding::ResourceDialect,
4141        T0: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4142        T1: fidl::encoding::Encode<fidl::encoding::Vector<DaiSampleFormat, 4>, D>,
4143        T2: fidl::encoding::Encode<fidl::encoding::Vector<DaiFrameFormat, 64>, D>,
4144        T3: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
4145        T4: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4146        T5: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
4147    > fidl::encoding::Encode<DaiSupportedFormats, D> for (T0, T1, T2, T3, T4, T5)
4148    {
4149        #[inline]
4150        unsafe fn encode(
4151            self,
4152            encoder: &mut fidl::encoding::Encoder<'_, D>,
4153            offset: usize,
4154            depth: fidl::encoding::Depth,
4155        ) -> fidl::Result<()> {
4156            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
4157            // Zero out padding regions. There's no need to apply masks
4158            // because the unmasked parts will be overwritten by fields.
4159            // Write the fields.
4160            self.0.encode(encoder, offset + 0, depth)?;
4161            self.1.encode(encoder, offset + 16, depth)?;
4162            self.2.encode(encoder, offset + 32, depth)?;
4163            self.3.encode(encoder, offset + 48, depth)?;
4164            self.4.encode(encoder, offset + 64, depth)?;
4165            self.5.encode(encoder, offset + 80, depth)?;
4166            Ok(())
4167        }
4168    }
4169
4170    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSupportedFormats {
4171        #[inline(always)]
4172        fn new_empty() -> Self {
4173            Self {
4174                number_of_channels: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4175                sample_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSampleFormat, 4>, D),
4176                frame_formats: fidl::new_empty!(fidl::encoding::Vector<DaiFrameFormat, 64>, D),
4177                frame_rates: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
4178                bits_per_slot: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4179                bits_per_sample: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
4180            }
4181        }
4182
4183        #[inline]
4184        unsafe fn decode(
4185            &mut self,
4186            decoder: &mut fidl::encoding::Decoder<'_, D>,
4187            offset: usize,
4188            _depth: fidl::encoding::Depth,
4189        ) -> fidl::Result<()> {
4190            decoder.debug_check_bounds::<Self>(offset);
4191            // Verify that padding bytes are zero.
4192            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4193            fidl::decode!(fidl::encoding::Vector<DaiSampleFormat, 4>, D, &mut self.sample_formats, decoder, offset + 16, _depth)?;
4194            fidl::decode!(fidl::encoding::Vector<DaiFrameFormat, 64>, D, &mut self.frame_formats, decoder, offset + 32, _depth)?;
4195            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.frame_rates, decoder, offset + 48, _depth)?;
4196            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_slot, decoder, offset + 64, _depth)?;
4197            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_sample, decoder, offset + 80, _depth)?;
4198            Ok(())
4199        }
4200    }
4201
4202    impl fidl::encoding::ValueTypeMarker for DaiGetDaiFormatsResponse {
4203        type Borrowed<'a> = &'a Self;
4204        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4205            value
4206        }
4207    }
4208
4209    unsafe impl fidl::encoding::TypeMarker for DaiGetDaiFormatsResponse {
4210        type Owned = Self;
4211
4212        #[inline(always)]
4213        fn inline_align(_context: fidl::encoding::Context) -> usize {
4214            8
4215        }
4216
4217        #[inline(always)]
4218        fn inline_size(_context: fidl::encoding::Context) -> usize {
4219            16
4220        }
4221    }
4222
4223    unsafe impl<D: fidl::encoding::ResourceDialect>
4224        fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for &DaiGetDaiFormatsResponse
4225    {
4226        #[inline]
4227        unsafe fn encode(
4228            self,
4229            encoder: &mut fidl::encoding::Encoder<'_, D>,
4230            offset: usize,
4231            _depth: fidl::encoding::Depth,
4232        ) -> fidl::Result<()> {
4233            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4234            // Delegate to tuple encoding.
4235            fidl::encoding::Encode::<DaiGetDaiFormatsResponse, D>::encode(
4236                (
4237                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
4238                ),
4239                encoder, offset, _depth
4240            )
4241        }
4242    }
4243    unsafe impl<
4244        D: fidl::encoding::ResourceDialect,
4245        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
4246    > fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for (T0,)
4247    {
4248        #[inline]
4249        unsafe fn encode(
4250            self,
4251            encoder: &mut fidl::encoding::Encoder<'_, D>,
4252            offset: usize,
4253            depth: fidl::encoding::Depth,
4254        ) -> fidl::Result<()> {
4255            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
4256            // Zero out padding regions. There's no need to apply masks
4257            // because the unmasked parts will be overwritten by fields.
4258            // Write the fields.
4259            self.0.encode(encoder, offset + 0, depth)?;
4260            Ok(())
4261        }
4262    }
4263
4264    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4265        for DaiGetDaiFormatsResponse
4266    {
4267        #[inline(always)]
4268        fn new_empty() -> Self {
4269            Self {
4270                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
4271            }
4272        }
4273
4274        #[inline]
4275        unsafe fn decode(
4276            &mut self,
4277            decoder: &mut fidl::encoding::Decoder<'_, D>,
4278            offset: usize,
4279            _depth: fidl::encoding::Depth,
4280        ) -> fidl::Result<()> {
4281            decoder.debug_check_bounds::<Self>(offset);
4282            // Verify that padding bytes are zero.
4283            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
4284            Ok(())
4285        }
4286    }
4287
4288    impl fidl::encoding::ValueTypeMarker for DaiGetRingBufferFormatsResponse {
4289        type Borrowed<'a> = &'a Self;
4290        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4291            value
4292        }
4293    }
4294
4295    unsafe impl fidl::encoding::TypeMarker for DaiGetRingBufferFormatsResponse {
4296        type Owned = Self;
4297
4298        #[inline(always)]
4299        fn inline_align(_context: fidl::encoding::Context) -> usize {
4300            8
4301        }
4302
4303        #[inline(always)]
4304        fn inline_size(_context: fidl::encoding::Context) -> usize {
4305            16
4306        }
4307    }
4308
4309    unsafe impl<D: fidl::encoding::ResourceDialect>
4310        fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D>
4311        for &DaiGetRingBufferFormatsResponse
4312    {
4313        #[inline]
4314        unsafe fn encode(
4315            self,
4316            encoder: &mut fidl::encoding::Encoder<'_, D>,
4317            offset: usize,
4318            _depth: fidl::encoding::Depth,
4319        ) -> fidl::Result<()> {
4320            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4321            // Delegate to tuple encoding.
4322            fidl::encoding::Encode::<DaiGetRingBufferFormatsResponse, D>::encode(
4323                (
4324                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
4325                ),
4326                encoder, offset, _depth
4327            )
4328        }
4329    }
4330    unsafe impl<
4331        D: fidl::encoding::ResourceDialect,
4332        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
4333    > fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D> for (T0,)
4334    {
4335        #[inline]
4336        unsafe fn encode(
4337            self,
4338            encoder: &mut fidl::encoding::Encoder<'_, D>,
4339            offset: usize,
4340            depth: fidl::encoding::Depth,
4341        ) -> fidl::Result<()> {
4342            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
4343            // Zero out padding regions. There's no need to apply masks
4344            // because the unmasked parts will be overwritten by fields.
4345            // Write the fields.
4346            self.0.encode(encoder, offset + 0, depth)?;
4347            Ok(())
4348        }
4349    }
4350
4351    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4352        for DaiGetRingBufferFormatsResponse
4353    {
4354        #[inline(always)]
4355        fn new_empty() -> Self {
4356            Self {
4357                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
4358            }
4359        }
4360
4361        #[inline]
4362        unsafe fn decode(
4363            &mut self,
4364            decoder: &mut fidl::encoding::Decoder<'_, D>,
4365            offset: usize,
4366            _depth: fidl::encoding::Depth,
4367        ) -> fidl::Result<()> {
4368            decoder.debug_check_bounds::<Self>(offset);
4369            // Verify that padding bytes are zero.
4370            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
4371            Ok(())
4372        }
4373    }
4374
4375    impl fidl::encoding::ValueTypeMarker for HealthGetHealthStateResponse {
4376        type Borrowed<'a> = &'a Self;
4377        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4378            value
4379        }
4380    }
4381
4382    unsafe impl fidl::encoding::TypeMarker for HealthGetHealthStateResponse {
4383        type Owned = Self;
4384
4385        #[inline(always)]
4386        fn inline_align(_context: fidl::encoding::Context) -> usize {
4387            8
4388        }
4389
4390        #[inline(always)]
4391        fn inline_size(_context: fidl::encoding::Context) -> usize {
4392            16
4393        }
4394    }
4395
4396    unsafe impl<D: fidl::encoding::ResourceDialect>
4397        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for &HealthGetHealthStateResponse
4398    {
4399        #[inline]
4400        unsafe fn encode(
4401            self,
4402            encoder: &mut fidl::encoding::Encoder<'_, D>,
4403            offset: usize,
4404            _depth: fidl::encoding::Depth,
4405        ) -> fidl::Result<()> {
4406            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4407            // Delegate to tuple encoding.
4408            fidl::encoding::Encode::<HealthGetHealthStateResponse, D>::encode(
4409                (<HealthState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
4410                encoder,
4411                offset,
4412                _depth,
4413            )
4414        }
4415    }
4416    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HealthState, D>>
4417        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for (T0,)
4418    {
4419        #[inline]
4420        unsafe fn encode(
4421            self,
4422            encoder: &mut fidl::encoding::Encoder<'_, D>,
4423            offset: usize,
4424            depth: fidl::encoding::Depth,
4425        ) -> fidl::Result<()> {
4426            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
4427            // Zero out padding regions. There's no need to apply masks
4428            // because the unmasked parts will be overwritten by fields.
4429            // Write the fields.
4430            self.0.encode(encoder, offset + 0, depth)?;
4431            Ok(())
4432        }
4433    }
4434
4435    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4436        for HealthGetHealthStateResponse
4437    {
4438        #[inline(always)]
4439        fn new_empty() -> Self {
4440            Self { state: fidl::new_empty!(HealthState, D) }
4441        }
4442
4443        #[inline]
4444        unsafe fn decode(
4445            &mut self,
4446            decoder: &mut fidl::encoding::Decoder<'_, D>,
4447            offset: usize,
4448            _depth: fidl::encoding::Depth,
4449        ) -> fidl::Result<()> {
4450            decoder.debug_check_bounds::<Self>(offset);
4451            // Verify that padding bytes are zero.
4452            fidl::decode!(HealthState, D, &mut self.state, decoder, offset + 0, _depth)?;
4453            Ok(())
4454        }
4455    }
4456
4457    impl fidl::encoding::ValueTypeMarker for PacketStreamControlGetPropertiesResponse {
4458        type Borrowed<'a> = &'a Self;
4459        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4460            value
4461        }
4462    }
4463
4464    unsafe impl fidl::encoding::TypeMarker for PacketStreamControlGetPropertiesResponse {
4465        type Owned = Self;
4466
4467        #[inline(always)]
4468        fn inline_align(_context: fidl::encoding::Context) -> usize {
4469            8
4470        }
4471
4472        #[inline(always)]
4473        fn inline_size(_context: fidl::encoding::Context) -> usize {
4474            16
4475        }
4476    }
4477
4478    unsafe impl<D: fidl::encoding::ResourceDialect>
4479        fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D>
4480        for &PacketStreamControlGetPropertiesResponse
4481    {
4482        #[inline]
4483        unsafe fn encode(
4484            self,
4485            encoder: &mut fidl::encoding::Encoder<'_, D>,
4486            offset: usize,
4487            _depth: fidl::encoding::Depth,
4488        ) -> fidl::Result<()> {
4489            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4490            // Delegate to tuple encoding.
4491            fidl::encoding::Encode::<PacketStreamControlGetPropertiesResponse, D>::encode(
4492                (<PacketStreamProperties as fidl::encoding::ValueTypeMarker>::borrow(
4493                    &self.properties,
4494                ),),
4495                encoder,
4496                offset,
4497                _depth,
4498            )
4499        }
4500    }
4501    unsafe impl<
4502        D: fidl::encoding::ResourceDialect,
4503        T0: fidl::encoding::Encode<PacketStreamProperties, D>,
4504    > fidl::encoding::Encode<PacketStreamControlGetPropertiesResponse, D> for (T0,)
4505    {
4506        #[inline]
4507        unsafe fn encode(
4508            self,
4509            encoder: &mut fidl::encoding::Encoder<'_, D>,
4510            offset: usize,
4511            depth: fidl::encoding::Depth,
4512        ) -> fidl::Result<()> {
4513            encoder.debug_check_bounds::<PacketStreamControlGetPropertiesResponse>(offset);
4514            // Zero out padding regions. There's no need to apply masks
4515            // because the unmasked parts will be overwritten by fields.
4516            // Write the fields.
4517            self.0.encode(encoder, offset + 0, depth)?;
4518            Ok(())
4519        }
4520    }
4521
4522    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4523        for PacketStreamControlGetPropertiesResponse
4524    {
4525        #[inline(always)]
4526        fn new_empty() -> Self {
4527            Self { properties: fidl::new_empty!(PacketStreamProperties, D) }
4528        }
4529
4530        #[inline]
4531        unsafe fn decode(
4532            &mut self,
4533            decoder: &mut fidl::encoding::Decoder<'_, D>,
4534            offset: usize,
4535            _depth: fidl::encoding::Depth,
4536        ) -> fidl::Result<()> {
4537            decoder.debug_check_bounds::<Self>(offset);
4538            // Verify that padding bytes are zero.
4539            fidl::decode!(
4540                PacketStreamProperties,
4541                D,
4542                &mut self.properties,
4543                decoder,
4544                offset + 0,
4545                _depth
4546            )?;
4547            Ok(())
4548        }
4549    }
4550
4551    impl fidl::encoding::ValueTypeMarker for PcmFormat {
4552        type Borrowed<'a> = &'a Self;
4553        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4554            value
4555        }
4556    }
4557
4558    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
4559        type Owned = Self;
4560
4561        #[inline(always)]
4562        fn inline_align(_context: fidl::encoding::Context) -> usize {
4563            4
4564        }
4565
4566        #[inline(always)]
4567        fn inline_size(_context: fidl::encoding::Context) -> usize {
4568            8
4569        }
4570    }
4571
4572    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
4573        for &PcmFormat
4574    {
4575        #[inline]
4576        unsafe fn encode(
4577            self,
4578            encoder: &mut fidl::encoding::Encoder<'_, D>,
4579            offset: usize,
4580            _depth: fidl::encoding::Depth,
4581        ) -> fidl::Result<()> {
4582            encoder.debug_check_bounds::<PcmFormat>(offset);
4583            // Delegate to tuple encoding.
4584            fidl::encoding::Encode::<PcmFormat, D>::encode(
4585                (
4586                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
4587                    <SampleFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_format),
4588                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bytes_per_sample),
4589                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.valid_bits_per_sample),
4590                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
4591                ),
4592                encoder,
4593                offset,
4594                _depth,
4595            )
4596        }
4597    }
4598    unsafe impl<
4599        D: fidl::encoding::ResourceDialect,
4600        T0: fidl::encoding::Encode<u8, D>,
4601        T1: fidl::encoding::Encode<SampleFormat, D>,
4602        T2: fidl::encoding::Encode<u8, D>,
4603        T3: fidl::encoding::Encode<u8, D>,
4604        T4: fidl::encoding::Encode<u32, D>,
4605    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3, T4)
4606    {
4607        #[inline]
4608        unsafe fn encode(
4609            self,
4610            encoder: &mut fidl::encoding::Encoder<'_, D>,
4611            offset: usize,
4612            depth: fidl::encoding::Depth,
4613        ) -> fidl::Result<()> {
4614            encoder.debug_check_bounds::<PcmFormat>(offset);
4615            // Zero out padding regions. There's no need to apply masks
4616            // because the unmasked parts will be overwritten by fields.
4617            // Write the fields.
4618            self.0.encode(encoder, offset + 0, depth)?;
4619            self.1.encode(encoder, offset + 1, depth)?;
4620            self.2.encode(encoder, offset + 2, depth)?;
4621            self.3.encode(encoder, offset + 3, depth)?;
4622            self.4.encode(encoder, offset + 4, depth)?;
4623            Ok(())
4624        }
4625    }
4626
4627    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
4628        #[inline(always)]
4629        fn new_empty() -> Self {
4630            Self {
4631                number_of_channels: fidl::new_empty!(u8, D),
4632                sample_format: fidl::new_empty!(SampleFormat, D),
4633                bytes_per_sample: fidl::new_empty!(u8, D),
4634                valid_bits_per_sample: fidl::new_empty!(u8, D),
4635                frame_rate: fidl::new_empty!(u32, D),
4636            }
4637        }
4638
4639        #[inline]
4640        unsafe fn decode(
4641            &mut self,
4642            decoder: &mut fidl::encoding::Decoder<'_, D>,
4643            offset: usize,
4644            _depth: fidl::encoding::Depth,
4645        ) -> fidl::Result<()> {
4646            decoder.debug_check_bounds::<Self>(offset);
4647            // Verify that padding bytes are zero.
4648            fidl::decode!(u8, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
4649            fidl::decode!(SampleFormat, D, &mut self.sample_format, decoder, offset + 1, _depth)?;
4650            fidl::decode!(u8, D, &mut self.bytes_per_sample, decoder, offset + 2, _depth)?;
4651            fidl::decode!(u8, D, &mut self.valid_bits_per_sample, decoder, offset + 3, _depth)?;
4652            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 4, _depth)?;
4653            Ok(())
4654        }
4655    }
4656
4657    impl fidl::encoding::ValueTypeMarker for RingBufferGetPropertiesResponse {
4658        type Borrowed<'a> = &'a Self;
4659        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4660            value
4661        }
4662    }
4663
4664    unsafe impl fidl::encoding::TypeMarker for RingBufferGetPropertiesResponse {
4665        type Owned = Self;
4666
4667        #[inline(always)]
4668        fn inline_align(_context: fidl::encoding::Context) -> usize {
4669            8
4670        }
4671
4672        #[inline(always)]
4673        fn inline_size(_context: fidl::encoding::Context) -> usize {
4674            16
4675        }
4676    }
4677
4678    unsafe impl<D: fidl::encoding::ResourceDialect>
4679        fidl::encoding::Encode<RingBufferGetPropertiesResponse, D>
4680        for &RingBufferGetPropertiesResponse
4681    {
4682        #[inline]
4683        unsafe fn encode(
4684            self,
4685            encoder: &mut fidl::encoding::Encoder<'_, D>,
4686            offset: usize,
4687            _depth: fidl::encoding::Depth,
4688        ) -> fidl::Result<()> {
4689            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4690            // Delegate to tuple encoding.
4691            fidl::encoding::Encode::<RingBufferGetPropertiesResponse, D>::encode(
4692                (<RingBufferProperties as fidl::encoding::ValueTypeMarker>::borrow(
4693                    &self.properties,
4694                ),),
4695                encoder,
4696                offset,
4697                _depth,
4698            )
4699        }
4700    }
4701    unsafe impl<
4702        D: fidl::encoding::ResourceDialect,
4703        T0: fidl::encoding::Encode<RingBufferProperties, D>,
4704    > fidl::encoding::Encode<RingBufferGetPropertiesResponse, D> for (T0,)
4705    {
4706        #[inline]
4707        unsafe fn encode(
4708            self,
4709            encoder: &mut fidl::encoding::Encoder<'_, D>,
4710            offset: usize,
4711            depth: fidl::encoding::Depth,
4712        ) -> fidl::Result<()> {
4713            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
4714            // Zero out padding regions. There's no need to apply masks
4715            // because the unmasked parts will be overwritten by fields.
4716            // Write the fields.
4717            self.0.encode(encoder, offset + 0, depth)?;
4718            Ok(())
4719        }
4720    }
4721
4722    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4723        for RingBufferGetPropertiesResponse
4724    {
4725        #[inline(always)]
4726        fn new_empty() -> Self {
4727            Self { properties: fidl::new_empty!(RingBufferProperties, D) }
4728        }
4729
4730        #[inline]
4731        unsafe fn decode(
4732            &mut self,
4733            decoder: &mut fidl::encoding::Decoder<'_, D>,
4734            offset: usize,
4735            _depth: fidl::encoding::Depth,
4736        ) -> fidl::Result<()> {
4737            decoder.debug_check_bounds::<Self>(offset);
4738            // Verify that padding bytes are zero.
4739            fidl::decode!(
4740                RingBufferProperties,
4741                D,
4742                &mut self.properties,
4743                decoder,
4744                offset + 0,
4745                _depth
4746            )?;
4747            Ok(())
4748        }
4749    }
4750
4751    impl fidl::encoding::ValueTypeMarker for RingBufferGetVmoRequest {
4752        type Borrowed<'a> = &'a Self;
4753        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4754            value
4755        }
4756    }
4757
4758    unsafe impl fidl::encoding::TypeMarker for RingBufferGetVmoRequest {
4759        type Owned = Self;
4760
4761        #[inline(always)]
4762        fn inline_align(_context: fidl::encoding::Context) -> usize {
4763            4
4764        }
4765
4766        #[inline(always)]
4767        fn inline_size(_context: fidl::encoding::Context) -> usize {
4768            8
4769        }
4770        #[inline(always)]
4771        fn encode_is_copy() -> bool {
4772            true
4773        }
4774
4775        #[inline(always)]
4776        fn decode_is_copy() -> bool {
4777            true
4778        }
4779    }
4780
4781    unsafe impl<D: fidl::encoding::ResourceDialect>
4782        fidl::encoding::Encode<RingBufferGetVmoRequest, D> for &RingBufferGetVmoRequest
4783    {
4784        #[inline]
4785        unsafe fn encode(
4786            self,
4787            encoder: &mut fidl::encoding::Encoder<'_, D>,
4788            offset: usize,
4789            _depth: fidl::encoding::Depth,
4790        ) -> fidl::Result<()> {
4791            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4792            unsafe {
4793                // Copy the object into the buffer.
4794                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4795                (buf_ptr as *mut RingBufferGetVmoRequest)
4796                    .write_unaligned((self as *const RingBufferGetVmoRequest).read());
4797                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4798                // done second because the memcpy will write garbage to these bytes.
4799            }
4800            Ok(())
4801        }
4802    }
4803    unsafe impl<
4804        D: fidl::encoding::ResourceDialect,
4805        T0: fidl::encoding::Encode<u32, D>,
4806        T1: fidl::encoding::Encode<u32, D>,
4807    > fidl::encoding::Encode<RingBufferGetVmoRequest, D> for (T0, T1)
4808    {
4809        #[inline]
4810        unsafe fn encode(
4811            self,
4812            encoder: &mut fidl::encoding::Encoder<'_, D>,
4813            offset: usize,
4814            depth: fidl::encoding::Depth,
4815        ) -> fidl::Result<()> {
4816            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
4817            // Zero out padding regions. There's no need to apply masks
4818            // because the unmasked parts will be overwritten by fields.
4819            // Write the fields.
4820            self.0.encode(encoder, offset + 0, depth)?;
4821            self.1.encode(encoder, offset + 4, depth)?;
4822            Ok(())
4823        }
4824    }
4825
4826    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4827        for RingBufferGetVmoRequest
4828    {
4829        #[inline(always)]
4830        fn new_empty() -> Self {
4831            Self {
4832                min_frames: fidl::new_empty!(u32, D),
4833                clock_recovery_notifications_per_ring: fidl::new_empty!(u32, D),
4834            }
4835        }
4836
4837        #[inline]
4838        unsafe fn decode(
4839            &mut self,
4840            decoder: &mut fidl::encoding::Decoder<'_, D>,
4841            offset: usize,
4842            _depth: fidl::encoding::Depth,
4843        ) -> fidl::Result<()> {
4844            decoder.debug_check_bounds::<Self>(offset);
4845            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4846            // Verify that padding bytes are zero.
4847            // Copy from the buffer into the object.
4848            unsafe {
4849                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4850            }
4851            Ok(())
4852        }
4853    }
4854
4855    impl fidl::encoding::ValueTypeMarker for RingBufferPositionInfo {
4856        type Borrowed<'a> = &'a Self;
4857        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4858            value
4859        }
4860    }
4861
4862    unsafe impl fidl::encoding::TypeMarker for RingBufferPositionInfo {
4863        type Owned = Self;
4864
4865        #[inline(always)]
4866        fn inline_align(_context: fidl::encoding::Context) -> usize {
4867            8
4868        }
4869
4870        #[inline(always)]
4871        fn inline_size(_context: fidl::encoding::Context) -> usize {
4872            16
4873        }
4874    }
4875
4876    unsafe impl<D: fidl::encoding::ResourceDialect>
4877        fidl::encoding::Encode<RingBufferPositionInfo, D> for &RingBufferPositionInfo
4878    {
4879        #[inline]
4880        unsafe fn encode(
4881            self,
4882            encoder: &mut fidl::encoding::Encoder<'_, D>,
4883            offset: usize,
4884            _depth: fidl::encoding::Depth,
4885        ) -> fidl::Result<()> {
4886            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4887            unsafe {
4888                // Copy the object into the buffer.
4889                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4890                (buf_ptr as *mut RingBufferPositionInfo)
4891                    .write_unaligned((self as *const RingBufferPositionInfo).read());
4892                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4893                // done second because the memcpy will write garbage to these bytes.
4894                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4895                let padding_mask = 0xffffffff00000000u64;
4896                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4897            }
4898            Ok(())
4899        }
4900    }
4901    unsafe impl<
4902        D: fidl::encoding::ResourceDialect,
4903        T0: fidl::encoding::Encode<i64, D>,
4904        T1: fidl::encoding::Encode<u32, D>,
4905    > fidl::encoding::Encode<RingBufferPositionInfo, D> for (T0, T1)
4906    {
4907        #[inline]
4908        unsafe fn encode(
4909            self,
4910            encoder: &mut fidl::encoding::Encoder<'_, D>,
4911            offset: usize,
4912            depth: fidl::encoding::Depth,
4913        ) -> fidl::Result<()> {
4914            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
4915            // Zero out padding regions. There's no need to apply masks
4916            // because the unmasked parts will be overwritten by fields.
4917            unsafe {
4918                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4919                (ptr as *mut u64).write_unaligned(0);
4920            }
4921            // Write the fields.
4922            self.0.encode(encoder, offset + 0, depth)?;
4923            self.1.encode(encoder, offset + 8, depth)?;
4924            Ok(())
4925        }
4926    }
4927
4928    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4929        for RingBufferPositionInfo
4930    {
4931        #[inline(always)]
4932        fn new_empty() -> Self {
4933            Self { timestamp: fidl::new_empty!(i64, D), position: fidl::new_empty!(u32, D) }
4934        }
4935
4936        #[inline]
4937        unsafe fn decode(
4938            &mut self,
4939            decoder: &mut fidl::encoding::Decoder<'_, D>,
4940            offset: usize,
4941            _depth: fidl::encoding::Depth,
4942        ) -> fidl::Result<()> {
4943            decoder.debug_check_bounds::<Self>(offset);
4944            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4945            // Verify that padding bytes are zero.
4946            let ptr = unsafe { buf_ptr.offset(8) };
4947            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4948            let mask = 0xffffffff00000000u64;
4949            let maskedval = padval & mask;
4950            if maskedval != 0 {
4951                return Err(fidl::Error::NonZeroPadding {
4952                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4953                });
4954            }
4955            // Copy from the buffer into the object.
4956            unsafe {
4957                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4958            }
4959            Ok(())
4960        }
4961    }
4962
4963    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsRequest {
4964        type Borrowed<'a> = &'a Self;
4965        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4966            value
4967        }
4968    }
4969
4970    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsRequest {
4971        type Owned = Self;
4972
4973        #[inline(always)]
4974        fn inline_align(_context: fidl::encoding::Context) -> usize {
4975            8
4976        }
4977
4978        #[inline(always)]
4979        fn inline_size(_context: fidl::encoding::Context) -> usize {
4980            8
4981        }
4982        #[inline(always)]
4983        fn encode_is_copy() -> bool {
4984            true
4985        }
4986
4987        #[inline(always)]
4988        fn decode_is_copy() -> bool {
4989            true
4990        }
4991    }
4992
4993    unsafe impl<D: fidl::encoding::ResourceDialect>
4994        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D>
4995        for &RingBufferSetActiveChannelsRequest
4996    {
4997        #[inline]
4998        unsafe fn encode(
4999            self,
5000            encoder: &mut fidl::encoding::Encoder<'_, D>,
5001            offset: usize,
5002            _depth: fidl::encoding::Depth,
5003        ) -> fidl::Result<()> {
5004            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5005            unsafe {
5006                // Copy the object into the buffer.
5007                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5008                (buf_ptr as *mut RingBufferSetActiveChannelsRequest)
5009                    .write_unaligned((self as *const RingBufferSetActiveChannelsRequest).read());
5010                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5011                // done second because the memcpy will write garbage to these bytes.
5012            }
5013            Ok(())
5014        }
5015    }
5016    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
5017        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D> for (T0,)
5018    {
5019        #[inline]
5020        unsafe fn encode(
5021            self,
5022            encoder: &mut fidl::encoding::Encoder<'_, D>,
5023            offset: usize,
5024            depth: fidl::encoding::Depth,
5025        ) -> fidl::Result<()> {
5026            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
5027            // Zero out padding regions. There's no need to apply masks
5028            // because the unmasked parts will be overwritten by fields.
5029            // Write the fields.
5030            self.0.encode(encoder, offset + 0, depth)?;
5031            Ok(())
5032        }
5033    }
5034
5035    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5036        for RingBufferSetActiveChannelsRequest
5037    {
5038        #[inline(always)]
5039        fn new_empty() -> Self {
5040            Self { active_channels_bitmask: fidl::new_empty!(u64, D) }
5041        }
5042
5043        #[inline]
5044        unsafe fn decode(
5045            &mut self,
5046            decoder: &mut fidl::encoding::Decoder<'_, D>,
5047            offset: usize,
5048            _depth: fidl::encoding::Depth,
5049        ) -> fidl::Result<()> {
5050            decoder.debug_check_bounds::<Self>(offset);
5051            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5052            // Verify that padding bytes are zero.
5053            // Copy from the buffer into the object.
5054            unsafe {
5055                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5056            }
5057            Ok(())
5058        }
5059    }
5060
5061    impl fidl::encoding::ValueTypeMarker for RingBufferStartResponse {
5062        type Borrowed<'a> = &'a Self;
5063        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5064            value
5065        }
5066    }
5067
5068    unsafe impl fidl::encoding::TypeMarker for RingBufferStartResponse {
5069        type Owned = Self;
5070
5071        #[inline(always)]
5072        fn inline_align(_context: fidl::encoding::Context) -> usize {
5073            8
5074        }
5075
5076        #[inline(always)]
5077        fn inline_size(_context: fidl::encoding::Context) -> usize {
5078            8
5079        }
5080        #[inline(always)]
5081        fn encode_is_copy() -> bool {
5082            true
5083        }
5084
5085        #[inline(always)]
5086        fn decode_is_copy() -> bool {
5087            true
5088        }
5089    }
5090
5091    unsafe impl<D: fidl::encoding::ResourceDialect>
5092        fidl::encoding::Encode<RingBufferStartResponse, D> for &RingBufferStartResponse
5093    {
5094        #[inline]
5095        unsafe fn encode(
5096            self,
5097            encoder: &mut fidl::encoding::Encoder<'_, D>,
5098            offset: usize,
5099            _depth: fidl::encoding::Depth,
5100        ) -> fidl::Result<()> {
5101            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5102            unsafe {
5103                // Copy the object into the buffer.
5104                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5105                (buf_ptr as *mut RingBufferStartResponse)
5106                    .write_unaligned((self as *const RingBufferStartResponse).read());
5107                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5108                // done second because the memcpy will write garbage to these bytes.
5109            }
5110            Ok(())
5111        }
5112    }
5113    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5114        fidl::encoding::Encode<RingBufferStartResponse, D> for (T0,)
5115    {
5116        #[inline]
5117        unsafe fn encode(
5118            self,
5119            encoder: &mut fidl::encoding::Encoder<'_, D>,
5120            offset: usize,
5121            depth: fidl::encoding::Depth,
5122        ) -> fidl::Result<()> {
5123            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
5124            // Zero out padding regions. There's no need to apply masks
5125            // because the unmasked parts will be overwritten by fields.
5126            // Write the fields.
5127            self.0.encode(encoder, offset + 0, depth)?;
5128            Ok(())
5129        }
5130    }
5131
5132    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5133        for RingBufferStartResponse
5134    {
5135        #[inline(always)]
5136        fn new_empty() -> Self {
5137            Self { start_time: fidl::new_empty!(i64, D) }
5138        }
5139
5140        #[inline]
5141        unsafe fn decode(
5142            &mut self,
5143            decoder: &mut fidl::encoding::Decoder<'_, D>,
5144            offset: usize,
5145            _depth: fidl::encoding::Depth,
5146        ) -> fidl::Result<()> {
5147            decoder.debug_check_bounds::<Self>(offset);
5148            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5149            // Verify that padding bytes are zero.
5150            // Copy from the buffer into the object.
5151            unsafe {
5152                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5153            }
5154            Ok(())
5155        }
5156    }
5157
5158    impl fidl::encoding::ValueTypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5159        type Borrowed<'a> = &'a Self;
5160        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5161            value
5162        }
5163    }
5164
5165    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
5166        type Owned = Self;
5167
5168        #[inline(always)]
5169        fn inline_align(_context: fidl::encoding::Context) -> usize {
5170            8
5171        }
5172
5173        #[inline(always)]
5174        fn inline_size(_context: fidl::encoding::Context) -> usize {
5175            16
5176        }
5177    }
5178
5179    unsafe impl<D: fidl::encoding::ResourceDialect>
5180        fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D>
5181        for &RingBufferWatchClockRecoveryPositionInfoResponse
5182    {
5183        #[inline]
5184        unsafe fn encode(
5185            self,
5186            encoder: &mut fidl::encoding::Encoder<'_, D>,
5187            offset: usize,
5188            _depth: fidl::encoding::Depth,
5189        ) -> fidl::Result<()> {
5190            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5191            unsafe {
5192                // Copy the object into the buffer.
5193                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5194                (buf_ptr as *mut RingBufferWatchClockRecoveryPositionInfoResponse).write_unaligned(
5195                    (self as *const RingBufferWatchClockRecoveryPositionInfoResponse).read(),
5196                );
5197                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5198                // done second because the memcpy will write garbage to these bytes.
5199                let padding_ptr = buf_ptr.offset(8) as *mut u64;
5200                let padding_mask = 0xffffffff00000000u64;
5201                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
5202            }
5203            Ok(())
5204        }
5205    }
5206    unsafe impl<
5207        D: fidl::encoding::ResourceDialect,
5208        T0: fidl::encoding::Encode<RingBufferPositionInfo, D>,
5209    > fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D> for (T0,)
5210    {
5211        #[inline]
5212        unsafe fn encode(
5213            self,
5214            encoder: &mut fidl::encoding::Encoder<'_, D>,
5215            offset: usize,
5216            depth: fidl::encoding::Depth,
5217        ) -> fidl::Result<()> {
5218            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
5219            // Zero out padding regions. There's no need to apply masks
5220            // because the unmasked parts will be overwritten by fields.
5221            // Write the fields.
5222            self.0.encode(encoder, offset + 0, depth)?;
5223            Ok(())
5224        }
5225    }
5226
5227    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5228        for RingBufferWatchClockRecoveryPositionInfoResponse
5229    {
5230        #[inline(always)]
5231        fn new_empty() -> Self {
5232            Self { position_info: fidl::new_empty!(RingBufferPositionInfo, D) }
5233        }
5234
5235        #[inline]
5236        unsafe fn decode(
5237            &mut self,
5238            decoder: &mut fidl::encoding::Decoder<'_, D>,
5239            offset: usize,
5240            _depth: fidl::encoding::Depth,
5241        ) -> fidl::Result<()> {
5242            decoder.debug_check_bounds::<Self>(offset);
5243            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5244            // Verify that padding bytes are zero.
5245            let ptr = unsafe { buf_ptr.offset(8) };
5246            let padval = unsafe { (ptr as *const u64).read_unaligned() };
5247            let mask = 0xffffffff00000000u64;
5248            let maskedval = padval & mask;
5249            if maskedval != 0 {
5250                return Err(fidl::Error::NonZeroPadding {
5251                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
5252                });
5253            }
5254            // Copy from the buffer into the object.
5255            unsafe {
5256                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
5257            }
5258            Ok(())
5259        }
5260    }
5261
5262    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsResponse {
5263        type Borrowed<'a> = &'a Self;
5264        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5265            value
5266        }
5267    }
5268
5269    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsResponse {
5270        type Owned = Self;
5271
5272        #[inline(always)]
5273        fn inline_align(_context: fidl::encoding::Context) -> usize {
5274            8
5275        }
5276
5277        #[inline(always)]
5278        fn inline_size(_context: fidl::encoding::Context) -> usize {
5279            8
5280        }
5281        #[inline(always)]
5282        fn encode_is_copy() -> bool {
5283            true
5284        }
5285
5286        #[inline(always)]
5287        fn decode_is_copy() -> bool {
5288            true
5289        }
5290    }
5291
5292    unsafe impl<D: fidl::encoding::ResourceDialect>
5293        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D>
5294        for &RingBufferSetActiveChannelsResponse
5295    {
5296        #[inline]
5297        unsafe fn encode(
5298            self,
5299            encoder: &mut fidl::encoding::Encoder<'_, D>,
5300            offset: usize,
5301            _depth: fidl::encoding::Depth,
5302        ) -> fidl::Result<()> {
5303            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5304            unsafe {
5305                // Copy the object into the buffer.
5306                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
5307                (buf_ptr as *mut RingBufferSetActiveChannelsResponse)
5308                    .write_unaligned((self as *const RingBufferSetActiveChannelsResponse).read());
5309                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
5310                // done second because the memcpy will write garbage to these bytes.
5311            }
5312            Ok(())
5313        }
5314    }
5315    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
5316        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D> for (T0,)
5317    {
5318        #[inline]
5319        unsafe fn encode(
5320            self,
5321            encoder: &mut fidl::encoding::Encoder<'_, D>,
5322            offset: usize,
5323            depth: fidl::encoding::Depth,
5324        ) -> fidl::Result<()> {
5325            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
5326            // Zero out padding regions. There's no need to apply masks
5327            // because the unmasked parts will be overwritten by fields.
5328            // Write the fields.
5329            self.0.encode(encoder, offset + 0, depth)?;
5330            Ok(())
5331        }
5332    }
5333
5334    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5335        for RingBufferSetActiveChannelsResponse
5336    {
5337        #[inline(always)]
5338        fn new_empty() -> Self {
5339            Self { set_time: fidl::new_empty!(i64, D) }
5340        }
5341
5342        #[inline]
5343        unsafe fn decode(
5344            &mut self,
5345            decoder: &mut fidl::encoding::Decoder<'_, D>,
5346            offset: usize,
5347            _depth: fidl::encoding::Depth,
5348        ) -> fidl::Result<()> {
5349            decoder.debug_check_bounds::<Self>(offset);
5350            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
5351            // Verify that padding bytes are zero.
5352            // Copy from the buffer into the object.
5353            unsafe {
5354                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
5355            }
5356            Ok(())
5357        }
5358    }
5359
5360    impl fidl::encoding::ValueTypeMarker for RingBufferWatchDelayInfoResponse {
5361        type Borrowed<'a> = &'a Self;
5362        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5363            value
5364        }
5365    }
5366
5367    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchDelayInfoResponse {
5368        type Owned = Self;
5369
5370        #[inline(always)]
5371        fn inline_align(_context: fidl::encoding::Context) -> usize {
5372            8
5373        }
5374
5375        #[inline(always)]
5376        fn inline_size(_context: fidl::encoding::Context) -> usize {
5377            16
5378        }
5379    }
5380
5381    unsafe impl<D: fidl::encoding::ResourceDialect>
5382        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D>
5383        for &RingBufferWatchDelayInfoResponse
5384    {
5385        #[inline]
5386        unsafe fn encode(
5387            self,
5388            encoder: &mut fidl::encoding::Encoder<'_, D>,
5389            offset: usize,
5390            _depth: fidl::encoding::Depth,
5391        ) -> fidl::Result<()> {
5392            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5393            // Delegate to tuple encoding.
5394            fidl::encoding::Encode::<RingBufferWatchDelayInfoResponse, D>::encode(
5395                (<DelayInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.delay_info),),
5396                encoder,
5397                offset,
5398                _depth,
5399            )
5400        }
5401    }
5402    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DelayInfo, D>>
5403        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D> for (T0,)
5404    {
5405        #[inline]
5406        unsafe fn encode(
5407            self,
5408            encoder: &mut fidl::encoding::Encoder<'_, D>,
5409            offset: usize,
5410            depth: fidl::encoding::Depth,
5411        ) -> fidl::Result<()> {
5412            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
5413            // Zero out padding regions. There's no need to apply masks
5414            // because the unmasked parts will be overwritten by fields.
5415            // Write the fields.
5416            self.0.encode(encoder, offset + 0, depth)?;
5417            Ok(())
5418        }
5419    }
5420
5421    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5422        for RingBufferWatchDelayInfoResponse
5423    {
5424        #[inline(always)]
5425        fn new_empty() -> Self {
5426            Self { delay_info: fidl::new_empty!(DelayInfo, D) }
5427        }
5428
5429        #[inline]
5430        unsafe fn decode(
5431            &mut self,
5432            decoder: &mut fidl::encoding::Decoder<'_, D>,
5433            offset: usize,
5434            _depth: fidl::encoding::Depth,
5435        ) -> fidl::Result<()> {
5436            decoder.debug_check_bounds::<Self>(offset);
5437            // Verify that padding bytes are zero.
5438            fidl::decode!(DelayInfo, D, &mut self.delay_info, decoder, offset + 0, _depth)?;
5439            Ok(())
5440        }
5441    }
5442
5443    impl fidl::encoding::ValueTypeMarker for StreamConfigGetPropertiesResponse {
5444        type Borrowed<'a> = &'a Self;
5445        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5446            value
5447        }
5448    }
5449
5450    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetPropertiesResponse {
5451        type Owned = Self;
5452
5453        #[inline(always)]
5454        fn inline_align(_context: fidl::encoding::Context) -> usize {
5455            8
5456        }
5457
5458        #[inline(always)]
5459        fn inline_size(_context: fidl::encoding::Context) -> usize {
5460            16
5461        }
5462    }
5463
5464    unsafe impl<D: fidl::encoding::ResourceDialect>
5465        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D>
5466        for &StreamConfigGetPropertiesResponse
5467    {
5468        #[inline]
5469        unsafe fn encode(
5470            self,
5471            encoder: &mut fidl::encoding::Encoder<'_, D>,
5472            offset: usize,
5473            _depth: fidl::encoding::Depth,
5474        ) -> fidl::Result<()> {
5475            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5476            // Delegate to tuple encoding.
5477            fidl::encoding::Encode::<StreamConfigGetPropertiesResponse, D>::encode(
5478                (<StreamProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
5479                encoder,
5480                offset,
5481                _depth,
5482            )
5483        }
5484    }
5485    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamProperties, D>>
5486        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D> for (T0,)
5487    {
5488        #[inline]
5489        unsafe fn encode(
5490            self,
5491            encoder: &mut fidl::encoding::Encoder<'_, D>,
5492            offset: usize,
5493            depth: fidl::encoding::Depth,
5494        ) -> fidl::Result<()> {
5495            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
5496            // Zero out padding regions. There's no need to apply masks
5497            // because the unmasked parts will be overwritten by fields.
5498            // Write the fields.
5499            self.0.encode(encoder, offset + 0, depth)?;
5500            Ok(())
5501        }
5502    }
5503
5504    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5505        for StreamConfigGetPropertiesResponse
5506    {
5507        #[inline(always)]
5508        fn new_empty() -> Self {
5509            Self { properties: fidl::new_empty!(StreamProperties, D) }
5510        }
5511
5512        #[inline]
5513        unsafe fn decode(
5514            &mut self,
5515            decoder: &mut fidl::encoding::Decoder<'_, D>,
5516            offset: usize,
5517            _depth: fidl::encoding::Depth,
5518        ) -> fidl::Result<()> {
5519            decoder.debug_check_bounds::<Self>(offset);
5520            // Verify that padding bytes are zero.
5521            fidl::decode!(StreamProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
5522            Ok(())
5523        }
5524    }
5525
5526    impl fidl::encoding::ValueTypeMarker for StreamConfigGetSupportedFormatsResponse {
5527        type Borrowed<'a> = &'a Self;
5528        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5529            value
5530        }
5531    }
5532
5533    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetSupportedFormatsResponse {
5534        type Owned = Self;
5535
5536        #[inline(always)]
5537        fn inline_align(_context: fidl::encoding::Context) -> usize {
5538            8
5539        }
5540
5541        #[inline(always)]
5542        fn inline_size(_context: fidl::encoding::Context) -> usize {
5543            16
5544        }
5545    }
5546
5547    unsafe impl<D: fidl::encoding::ResourceDialect>
5548        fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D>
5549        for &StreamConfigGetSupportedFormatsResponse
5550    {
5551        #[inline]
5552        unsafe fn encode(
5553            self,
5554            encoder: &mut fidl::encoding::Encoder<'_, D>,
5555            offset: usize,
5556            _depth: fidl::encoding::Depth,
5557        ) -> fidl::Result<()> {
5558            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5559            // Delegate to tuple encoding.
5560            fidl::encoding::Encode::<StreamConfigGetSupportedFormatsResponse, D>::encode(
5561                (
5562                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.supported_formats),
5563                ),
5564                encoder, offset, _depth
5565            )
5566        }
5567    }
5568    unsafe impl<
5569        D: fidl::encoding::ResourceDialect,
5570        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
5571    > fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D> for (T0,)
5572    {
5573        #[inline]
5574        unsafe fn encode(
5575            self,
5576            encoder: &mut fidl::encoding::Encoder<'_, D>,
5577            offset: usize,
5578            depth: fidl::encoding::Depth,
5579        ) -> fidl::Result<()> {
5580            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
5581            // Zero out padding regions. There's no need to apply masks
5582            // because the unmasked parts will be overwritten by fields.
5583            // Write the fields.
5584            self.0.encode(encoder, offset + 0, depth)?;
5585            Ok(())
5586        }
5587    }
5588
5589    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5590        for StreamConfigGetSupportedFormatsResponse
5591    {
5592        #[inline(always)]
5593        fn new_empty() -> Self {
5594            Self {
5595                supported_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
5596            }
5597        }
5598
5599        #[inline]
5600        unsafe fn decode(
5601            &mut self,
5602            decoder: &mut fidl::encoding::Decoder<'_, D>,
5603            offset: usize,
5604            _depth: fidl::encoding::Depth,
5605        ) -> fidl::Result<()> {
5606            decoder.debug_check_bounds::<Self>(offset);
5607            // Verify that padding bytes are zero.
5608            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.supported_formats, decoder, offset + 0, _depth)?;
5609            Ok(())
5610        }
5611    }
5612
5613    impl fidl::encoding::ValueTypeMarker for StreamConfigSetGainRequest {
5614        type Borrowed<'a> = &'a Self;
5615        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5616            value
5617        }
5618    }
5619
5620    unsafe impl fidl::encoding::TypeMarker for StreamConfigSetGainRequest {
5621        type Owned = Self;
5622
5623        #[inline(always)]
5624        fn inline_align(_context: fidl::encoding::Context) -> usize {
5625            8
5626        }
5627
5628        #[inline(always)]
5629        fn inline_size(_context: fidl::encoding::Context) -> usize {
5630            16
5631        }
5632    }
5633
5634    unsafe impl<D: fidl::encoding::ResourceDialect>
5635        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for &StreamConfigSetGainRequest
5636    {
5637        #[inline]
5638        unsafe fn encode(
5639            self,
5640            encoder: &mut fidl::encoding::Encoder<'_, D>,
5641            offset: usize,
5642            _depth: fidl::encoding::Depth,
5643        ) -> fidl::Result<()> {
5644            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5645            // Delegate to tuple encoding.
5646            fidl::encoding::Encode::<StreamConfigSetGainRequest, D>::encode(
5647                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.target_state),),
5648                encoder,
5649                offset,
5650                _depth,
5651            )
5652        }
5653    }
5654    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5655        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for (T0,)
5656    {
5657        #[inline]
5658        unsafe fn encode(
5659            self,
5660            encoder: &mut fidl::encoding::Encoder<'_, D>,
5661            offset: usize,
5662            depth: fidl::encoding::Depth,
5663        ) -> fidl::Result<()> {
5664            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
5665            // Zero out padding regions. There's no need to apply masks
5666            // because the unmasked parts will be overwritten by fields.
5667            // Write the fields.
5668            self.0.encode(encoder, offset + 0, depth)?;
5669            Ok(())
5670        }
5671    }
5672
5673    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5674        for StreamConfigSetGainRequest
5675    {
5676        #[inline(always)]
5677        fn new_empty() -> Self {
5678            Self { target_state: fidl::new_empty!(GainState, D) }
5679        }
5680
5681        #[inline]
5682        unsafe fn decode(
5683            &mut self,
5684            decoder: &mut fidl::encoding::Decoder<'_, D>,
5685            offset: usize,
5686            _depth: fidl::encoding::Depth,
5687        ) -> fidl::Result<()> {
5688            decoder.debug_check_bounds::<Self>(offset);
5689            // Verify that padding bytes are zero.
5690            fidl::decode!(GainState, D, &mut self.target_state, decoder, offset + 0, _depth)?;
5691            Ok(())
5692        }
5693    }
5694
5695    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchGainStateResponse {
5696        type Borrowed<'a> = &'a Self;
5697        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5698            value
5699        }
5700    }
5701
5702    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchGainStateResponse {
5703        type Owned = Self;
5704
5705        #[inline(always)]
5706        fn inline_align(_context: fidl::encoding::Context) -> usize {
5707            8
5708        }
5709
5710        #[inline(always)]
5711        fn inline_size(_context: fidl::encoding::Context) -> usize {
5712            16
5713        }
5714    }
5715
5716    unsafe impl<D: fidl::encoding::ResourceDialect>
5717        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D>
5718        for &StreamConfigWatchGainStateResponse
5719    {
5720        #[inline]
5721        unsafe fn encode(
5722            self,
5723            encoder: &mut fidl::encoding::Encoder<'_, D>,
5724            offset: usize,
5725            _depth: fidl::encoding::Depth,
5726        ) -> fidl::Result<()> {
5727            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5728            // Delegate to tuple encoding.
5729            fidl::encoding::Encode::<StreamConfigWatchGainStateResponse, D>::encode(
5730                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_state),),
5731                encoder,
5732                offset,
5733                _depth,
5734            )
5735        }
5736    }
5737    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
5738        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D> for (T0,)
5739    {
5740        #[inline]
5741        unsafe fn encode(
5742            self,
5743            encoder: &mut fidl::encoding::Encoder<'_, D>,
5744            offset: usize,
5745            depth: fidl::encoding::Depth,
5746        ) -> fidl::Result<()> {
5747            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
5748            // Zero out padding regions. There's no need to apply masks
5749            // because the unmasked parts will be overwritten by fields.
5750            // Write the fields.
5751            self.0.encode(encoder, offset + 0, depth)?;
5752            Ok(())
5753        }
5754    }
5755
5756    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5757        for StreamConfigWatchGainStateResponse
5758    {
5759        #[inline(always)]
5760        fn new_empty() -> Self {
5761            Self { gain_state: fidl::new_empty!(GainState, D) }
5762        }
5763
5764        #[inline]
5765        unsafe fn decode(
5766            &mut self,
5767            decoder: &mut fidl::encoding::Decoder<'_, D>,
5768            offset: usize,
5769            _depth: fidl::encoding::Depth,
5770        ) -> fidl::Result<()> {
5771            decoder.debug_check_bounds::<Self>(offset);
5772            // Verify that padding bytes are zero.
5773            fidl::decode!(GainState, D, &mut self.gain_state, decoder, offset + 0, _depth)?;
5774            Ok(())
5775        }
5776    }
5777
5778    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchPlugStateResponse {
5779        type Borrowed<'a> = &'a Self;
5780        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5781            value
5782        }
5783    }
5784
5785    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchPlugStateResponse {
5786        type Owned = Self;
5787
5788        #[inline(always)]
5789        fn inline_align(_context: fidl::encoding::Context) -> usize {
5790            8
5791        }
5792
5793        #[inline(always)]
5794        fn inline_size(_context: fidl::encoding::Context) -> usize {
5795            16
5796        }
5797    }
5798
5799    unsafe impl<D: fidl::encoding::ResourceDialect>
5800        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D>
5801        for &StreamConfigWatchPlugStateResponse
5802    {
5803        #[inline]
5804        unsafe fn encode(
5805            self,
5806            encoder: &mut fidl::encoding::Encoder<'_, D>,
5807            offset: usize,
5808            _depth: fidl::encoding::Depth,
5809        ) -> fidl::Result<()> {
5810            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5811            // Delegate to tuple encoding.
5812            fidl::encoding::Encode::<StreamConfigWatchPlugStateResponse, D>::encode(
5813                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
5814                encoder,
5815                offset,
5816                _depth,
5817            )
5818        }
5819    }
5820    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
5821        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D> for (T0,)
5822    {
5823        #[inline]
5824        unsafe fn encode(
5825            self,
5826            encoder: &mut fidl::encoding::Encoder<'_, D>,
5827            offset: usize,
5828            depth: fidl::encoding::Depth,
5829        ) -> fidl::Result<()> {
5830            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
5831            // Zero out padding regions. There's no need to apply masks
5832            // because the unmasked parts will be overwritten by fields.
5833            // Write the fields.
5834            self.0.encode(encoder, offset + 0, depth)?;
5835            Ok(())
5836        }
5837    }
5838
5839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5840        for StreamConfigWatchPlugStateResponse
5841    {
5842        #[inline(always)]
5843        fn new_empty() -> Self {
5844            Self { plug_state: fidl::new_empty!(PlugState, D) }
5845        }
5846
5847        #[inline]
5848        unsafe fn decode(
5849            &mut self,
5850            decoder: &mut fidl::encoding::Decoder<'_, D>,
5851            offset: usize,
5852            _depth: fidl::encoding::Depth,
5853        ) -> fidl::Result<()> {
5854            decoder.debug_check_bounds::<Self>(offset);
5855            // Verify that padding bytes are zero.
5856            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
5857            Ok(())
5858        }
5859    }
5860
5861    impl AllocateVmosConfig {
5862        #[inline(always)]
5863        fn max_ordinal_present(&self) -> u64 {
5864            if let Some(_) = self.vmo_count {
5865                return 2;
5866            }
5867            if let Some(_) = self.min_vmo_size {
5868                return 1;
5869            }
5870            0
5871        }
5872    }
5873
5874    impl fidl::encoding::ValueTypeMarker for AllocateVmosConfig {
5875        type Borrowed<'a> = &'a Self;
5876        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5877            value
5878        }
5879    }
5880
5881    unsafe impl fidl::encoding::TypeMarker for AllocateVmosConfig {
5882        type Owned = Self;
5883
5884        #[inline(always)]
5885        fn inline_align(_context: fidl::encoding::Context) -> usize {
5886            8
5887        }
5888
5889        #[inline(always)]
5890        fn inline_size(_context: fidl::encoding::Context) -> usize {
5891            16
5892        }
5893    }
5894
5895    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AllocateVmosConfig, D>
5896        for &AllocateVmosConfig
5897    {
5898        unsafe fn encode(
5899            self,
5900            encoder: &mut fidl::encoding::Encoder<'_, D>,
5901            offset: usize,
5902            mut depth: fidl::encoding::Depth,
5903        ) -> fidl::Result<()> {
5904            encoder.debug_check_bounds::<AllocateVmosConfig>(offset);
5905            // Vector header
5906            let max_ordinal: u64 = self.max_ordinal_present();
5907            encoder.write_num(max_ordinal, offset);
5908            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5909            // Calling encoder.out_of_line_offset(0) is not allowed.
5910            if max_ordinal == 0 {
5911                return Ok(());
5912            }
5913            depth.increment()?;
5914            let envelope_size = 8;
5915            let bytes_len = max_ordinal as usize * envelope_size;
5916            #[allow(unused_variables)]
5917            let offset = encoder.out_of_line_offset(bytes_len);
5918            let mut _prev_end_offset: usize = 0;
5919            if 1 > max_ordinal {
5920                return Ok(());
5921            }
5922
5923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5924            // are envelope_size bytes.
5925            let cur_offset: usize = (1 - 1) * envelope_size;
5926
5927            // Zero reserved fields.
5928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5929
5930            // Safety:
5931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5933            //   envelope_size bytes, there is always sufficient room.
5934            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5935                self.min_vmo_size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5936                encoder,
5937                offset + cur_offset,
5938                depth,
5939            )?;
5940
5941            _prev_end_offset = cur_offset + envelope_size;
5942            if 2 > max_ordinal {
5943                return Ok(());
5944            }
5945
5946            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5947            // are envelope_size bytes.
5948            let cur_offset: usize = (2 - 1) * envelope_size;
5949
5950            // Zero reserved fields.
5951            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5952
5953            // Safety:
5954            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5955            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5956            //   envelope_size bytes, there is always sufficient room.
5957            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5958                self.vmo_count.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5959                encoder,
5960                offset + cur_offset,
5961                depth,
5962            )?;
5963
5964            _prev_end_offset = cur_offset + envelope_size;
5965
5966            Ok(())
5967        }
5968    }
5969
5970    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AllocateVmosConfig {
5971        #[inline(always)]
5972        fn new_empty() -> Self {
5973            Self::default()
5974        }
5975
5976        unsafe fn decode(
5977            &mut self,
5978            decoder: &mut fidl::encoding::Decoder<'_, D>,
5979            offset: usize,
5980            mut depth: fidl::encoding::Depth,
5981        ) -> fidl::Result<()> {
5982            decoder.debug_check_bounds::<Self>(offset);
5983            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5984                None => return Err(fidl::Error::NotNullable),
5985                Some(len) => len,
5986            };
5987            // Calling decoder.out_of_line_offset(0) is not allowed.
5988            if len == 0 {
5989                return Ok(());
5990            };
5991            depth.increment()?;
5992            let envelope_size = 8;
5993            let bytes_len = len * envelope_size;
5994            let offset = decoder.out_of_line_offset(bytes_len)?;
5995            // Decode the envelope for each type.
5996            let mut _next_ordinal_to_read = 0;
5997            let mut next_offset = offset;
5998            let end_offset = offset + bytes_len;
5999            _next_ordinal_to_read += 1;
6000            if next_offset >= end_offset {
6001                return Ok(());
6002            }
6003
6004            // Decode unknown envelopes for gaps in ordinals.
6005            while _next_ordinal_to_read < 1 {
6006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6007                _next_ordinal_to_read += 1;
6008                next_offset += envelope_size;
6009            }
6010
6011            let next_out_of_line = decoder.next_out_of_line();
6012            let handles_before = decoder.remaining_handles();
6013            if let Some((inlined, num_bytes, num_handles)) =
6014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6015            {
6016                let member_inline_size =
6017                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6018                if inlined != (member_inline_size <= 4) {
6019                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6020                }
6021                let inner_offset;
6022                let mut inner_depth = depth.clone();
6023                if inlined {
6024                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6025                    inner_offset = next_offset;
6026                } else {
6027                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6028                    inner_depth.increment()?;
6029                }
6030                let val_ref = self.min_vmo_size.get_or_insert_with(|| fidl::new_empty!(u64, D));
6031                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6032                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6033                {
6034                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6035                }
6036                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6037                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6038                }
6039            }
6040
6041            next_offset += envelope_size;
6042            _next_ordinal_to_read += 1;
6043            if next_offset >= end_offset {
6044                return Ok(());
6045            }
6046
6047            // Decode unknown envelopes for gaps in ordinals.
6048            while _next_ordinal_to_read < 2 {
6049                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6050                _next_ordinal_to_read += 1;
6051                next_offset += envelope_size;
6052            }
6053
6054            let next_out_of_line = decoder.next_out_of_line();
6055            let handles_before = decoder.remaining_handles();
6056            if let Some((inlined, num_bytes, num_handles)) =
6057                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6058            {
6059                let member_inline_size =
6060                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6061                if inlined != (member_inline_size <= 4) {
6062                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6063                }
6064                let inner_offset;
6065                let mut inner_depth = depth.clone();
6066                if inlined {
6067                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6068                    inner_offset = next_offset;
6069                } else {
6070                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6071                    inner_depth.increment()?;
6072                }
6073                let val_ref = self.vmo_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
6074                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6075                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6076                {
6077                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6078                }
6079                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6080                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6081                }
6082            }
6083
6084            next_offset += envelope_size;
6085
6086            // Decode the remaining unknown envelopes.
6087            while next_offset < end_offset {
6088                _next_ordinal_to_read += 1;
6089                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6090                next_offset += envelope_size;
6091            }
6092
6093            Ok(())
6094        }
6095    }
6096
6097    impl ChannelAttributes {
6098        #[inline(always)]
6099        fn max_ordinal_present(&self) -> u64 {
6100            if let Some(_) = self.max_frequency {
6101                return 2;
6102            }
6103            if let Some(_) = self.min_frequency {
6104                return 1;
6105            }
6106            0
6107        }
6108    }
6109
6110    impl fidl::encoding::ValueTypeMarker for ChannelAttributes {
6111        type Borrowed<'a> = &'a Self;
6112        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6113            value
6114        }
6115    }
6116
6117    unsafe impl fidl::encoding::TypeMarker for ChannelAttributes {
6118        type Owned = Self;
6119
6120        #[inline(always)]
6121        fn inline_align(_context: fidl::encoding::Context) -> usize {
6122            8
6123        }
6124
6125        #[inline(always)]
6126        fn inline_size(_context: fidl::encoding::Context) -> usize {
6127            16
6128        }
6129    }
6130
6131    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelAttributes, D>
6132        for &ChannelAttributes
6133    {
6134        unsafe fn encode(
6135            self,
6136            encoder: &mut fidl::encoding::Encoder<'_, D>,
6137            offset: usize,
6138            mut depth: fidl::encoding::Depth,
6139        ) -> fidl::Result<()> {
6140            encoder.debug_check_bounds::<ChannelAttributes>(offset);
6141            // Vector header
6142            let max_ordinal: u64 = self.max_ordinal_present();
6143            encoder.write_num(max_ordinal, offset);
6144            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6145            // Calling encoder.out_of_line_offset(0) is not allowed.
6146            if max_ordinal == 0 {
6147                return Ok(());
6148            }
6149            depth.increment()?;
6150            let envelope_size = 8;
6151            let bytes_len = max_ordinal as usize * envelope_size;
6152            #[allow(unused_variables)]
6153            let offset = encoder.out_of_line_offset(bytes_len);
6154            let mut _prev_end_offset: usize = 0;
6155            if 1 > max_ordinal {
6156                return Ok(());
6157            }
6158
6159            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6160            // are envelope_size bytes.
6161            let cur_offset: usize = (1 - 1) * envelope_size;
6162
6163            // Zero reserved fields.
6164            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6165
6166            // Safety:
6167            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6168            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6169            //   envelope_size bytes, there is always sufficient room.
6170            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6171                self.min_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6172                encoder,
6173                offset + cur_offset,
6174                depth,
6175            )?;
6176
6177            _prev_end_offset = cur_offset + envelope_size;
6178            if 2 > max_ordinal {
6179                return Ok(());
6180            }
6181
6182            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6183            // are envelope_size bytes.
6184            let cur_offset: usize = (2 - 1) * envelope_size;
6185
6186            // Zero reserved fields.
6187            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6188
6189            // Safety:
6190            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6191            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6192            //   envelope_size bytes, there is always sufficient room.
6193            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6194                self.max_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6195                encoder,
6196                offset + cur_offset,
6197                depth,
6198            )?;
6199
6200            _prev_end_offset = cur_offset + envelope_size;
6201
6202            Ok(())
6203        }
6204    }
6205
6206    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelAttributes {
6207        #[inline(always)]
6208        fn new_empty() -> Self {
6209            Self::default()
6210        }
6211
6212        unsafe fn decode(
6213            &mut self,
6214            decoder: &mut fidl::encoding::Decoder<'_, D>,
6215            offset: usize,
6216            mut depth: fidl::encoding::Depth,
6217        ) -> fidl::Result<()> {
6218            decoder.debug_check_bounds::<Self>(offset);
6219            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6220                None => return Err(fidl::Error::NotNullable),
6221                Some(len) => len,
6222            };
6223            // Calling decoder.out_of_line_offset(0) is not allowed.
6224            if len == 0 {
6225                return Ok(());
6226            };
6227            depth.increment()?;
6228            let envelope_size = 8;
6229            let bytes_len = len * envelope_size;
6230            let offset = decoder.out_of_line_offset(bytes_len)?;
6231            // Decode the envelope for each type.
6232            let mut _next_ordinal_to_read = 0;
6233            let mut next_offset = offset;
6234            let end_offset = offset + bytes_len;
6235            _next_ordinal_to_read += 1;
6236            if next_offset >= end_offset {
6237                return Ok(());
6238            }
6239
6240            // Decode unknown envelopes for gaps in ordinals.
6241            while _next_ordinal_to_read < 1 {
6242                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6243                _next_ordinal_to_read += 1;
6244                next_offset += envelope_size;
6245            }
6246
6247            let next_out_of_line = decoder.next_out_of_line();
6248            let handles_before = decoder.remaining_handles();
6249            if let Some((inlined, num_bytes, num_handles)) =
6250                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6251            {
6252                let member_inline_size =
6253                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6254                if inlined != (member_inline_size <= 4) {
6255                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6256                }
6257                let inner_offset;
6258                let mut inner_depth = depth.clone();
6259                if inlined {
6260                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6261                    inner_offset = next_offset;
6262                } else {
6263                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6264                    inner_depth.increment()?;
6265                }
6266                let val_ref = self.min_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6267                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6268                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6269                {
6270                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6271                }
6272                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6273                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6274                }
6275            }
6276
6277            next_offset += envelope_size;
6278            _next_ordinal_to_read += 1;
6279            if next_offset >= end_offset {
6280                return Ok(());
6281            }
6282
6283            // Decode unknown envelopes for gaps in ordinals.
6284            while _next_ordinal_to_read < 2 {
6285                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6286                _next_ordinal_to_read += 1;
6287                next_offset += envelope_size;
6288            }
6289
6290            let next_out_of_line = decoder.next_out_of_line();
6291            let handles_before = decoder.remaining_handles();
6292            if let Some((inlined, num_bytes, num_handles)) =
6293                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6294            {
6295                let member_inline_size =
6296                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6297                if inlined != (member_inline_size <= 4) {
6298                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6299                }
6300                let inner_offset;
6301                let mut inner_depth = depth.clone();
6302                if inlined {
6303                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6304                    inner_offset = next_offset;
6305                } else {
6306                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6307                    inner_depth.increment()?;
6308                }
6309                let val_ref = self.max_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
6310                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6311                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6312                {
6313                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6314                }
6315                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6316                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6317                }
6318            }
6319
6320            next_offset += envelope_size;
6321
6322            // Decode the remaining unknown envelopes.
6323            while next_offset < end_offset {
6324                _next_ordinal_to_read += 1;
6325                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6326                next_offset += envelope_size;
6327            }
6328
6329            Ok(())
6330        }
6331    }
6332
6333    impl ChannelSet {
6334        #[inline(always)]
6335        fn max_ordinal_present(&self) -> u64 {
6336            if let Some(_) = self.attributes {
6337                return 1;
6338            }
6339            0
6340        }
6341    }
6342
6343    impl fidl::encoding::ValueTypeMarker for ChannelSet {
6344        type Borrowed<'a> = &'a Self;
6345        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6346            value
6347        }
6348    }
6349
6350    unsafe impl fidl::encoding::TypeMarker for ChannelSet {
6351        type Owned = Self;
6352
6353        #[inline(always)]
6354        fn inline_align(_context: fidl::encoding::Context) -> usize {
6355            8
6356        }
6357
6358        #[inline(always)]
6359        fn inline_size(_context: fidl::encoding::Context) -> usize {
6360            16
6361        }
6362    }
6363
6364    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSet, D>
6365        for &ChannelSet
6366    {
6367        unsafe fn encode(
6368            self,
6369            encoder: &mut fidl::encoding::Encoder<'_, D>,
6370            offset: usize,
6371            mut depth: fidl::encoding::Depth,
6372        ) -> fidl::Result<()> {
6373            encoder.debug_check_bounds::<ChannelSet>(offset);
6374            // Vector header
6375            let max_ordinal: u64 = self.max_ordinal_present();
6376            encoder.write_num(max_ordinal, offset);
6377            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6378            // Calling encoder.out_of_line_offset(0) is not allowed.
6379            if max_ordinal == 0 {
6380                return Ok(());
6381            }
6382            depth.increment()?;
6383            let envelope_size = 8;
6384            let bytes_len = max_ordinal as usize * envelope_size;
6385            #[allow(unused_variables)]
6386            let offset = encoder.out_of_line_offset(bytes_len);
6387            let mut _prev_end_offset: usize = 0;
6388            if 1 > max_ordinal {
6389                return Ok(());
6390            }
6391
6392            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6393            // are envelope_size bytes.
6394            let cur_offset: usize = (1 - 1) * envelope_size;
6395
6396            // Zero reserved fields.
6397            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6398
6399            // Safety:
6400            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6401            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6402            //   envelope_size bytes, there is always sufficient room.
6403            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelAttributes, 64>, D>(
6404            self.attributes.as_ref().map(<fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::ValueTypeMarker>::borrow),
6405            encoder, offset + cur_offset, depth
6406        )?;
6407
6408            _prev_end_offset = cur_offset + envelope_size;
6409
6410            Ok(())
6411        }
6412    }
6413
6414    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSet {
6415        #[inline(always)]
6416        fn new_empty() -> Self {
6417            Self::default()
6418        }
6419
6420        unsafe fn decode(
6421            &mut self,
6422            decoder: &mut fidl::encoding::Decoder<'_, D>,
6423            offset: usize,
6424            mut depth: fidl::encoding::Depth,
6425        ) -> fidl::Result<()> {
6426            decoder.debug_check_bounds::<Self>(offset);
6427            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6428                None => return Err(fidl::Error::NotNullable),
6429                Some(len) => len,
6430            };
6431            // Calling decoder.out_of_line_offset(0) is not allowed.
6432            if len == 0 {
6433                return Ok(());
6434            };
6435            depth.increment()?;
6436            let envelope_size = 8;
6437            let bytes_len = len * envelope_size;
6438            let offset = decoder.out_of_line_offset(bytes_len)?;
6439            // Decode the envelope for each type.
6440            let mut _next_ordinal_to_read = 0;
6441            let mut next_offset = offset;
6442            let end_offset = offset + bytes_len;
6443            _next_ordinal_to_read += 1;
6444            if next_offset >= end_offset {
6445                return Ok(());
6446            }
6447
6448            // Decode unknown envelopes for gaps in ordinals.
6449            while _next_ordinal_to_read < 1 {
6450                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6451                _next_ordinal_to_read += 1;
6452                next_offset += envelope_size;
6453            }
6454
6455            let next_out_of_line = decoder.next_out_of_line();
6456            let handles_before = decoder.remaining_handles();
6457            if let Some((inlined, num_bytes, num_handles)) =
6458                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6459            {
6460                let member_inline_size = <fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6461                if inlined != (member_inline_size <= 4) {
6462                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6463                }
6464                let inner_offset;
6465                let mut inner_depth = depth.clone();
6466                if inlined {
6467                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6468                    inner_offset = next_offset;
6469                } else {
6470                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6471                    inner_depth.increment()?;
6472                }
6473                let val_ref = self.attributes.get_or_insert_with(
6474                    || fidl::new_empty!(fidl::encoding::Vector<ChannelAttributes, 64>, D),
6475                );
6476                fidl::decode!(fidl::encoding::Vector<ChannelAttributes, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
6477                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6478                {
6479                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6480                }
6481                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6482                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6483                }
6484            }
6485
6486            next_offset += envelope_size;
6487
6488            // Decode the remaining unknown envelopes.
6489            while next_offset < end_offset {
6490                _next_ordinal_to_read += 1;
6491                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6492                next_offset += envelope_size;
6493            }
6494
6495            Ok(())
6496        }
6497    }
6498
6499    impl CodecFormatInfo {
6500        #[inline(always)]
6501        fn max_ordinal_present(&self) -> u64 {
6502            if let Some(_) = self.turn_off_delay {
6503                return 3;
6504            }
6505            if let Some(_) = self.turn_on_delay {
6506                return 2;
6507            }
6508            if let Some(_) = self.external_delay {
6509                return 1;
6510            }
6511            0
6512        }
6513    }
6514
6515    impl fidl::encoding::ValueTypeMarker for CodecFormatInfo {
6516        type Borrowed<'a> = &'a Self;
6517        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6518            value
6519        }
6520    }
6521
6522    unsafe impl fidl::encoding::TypeMarker for CodecFormatInfo {
6523        type Owned = Self;
6524
6525        #[inline(always)]
6526        fn inline_align(_context: fidl::encoding::Context) -> usize {
6527            8
6528        }
6529
6530        #[inline(always)]
6531        fn inline_size(_context: fidl::encoding::Context) -> usize {
6532            16
6533        }
6534    }
6535
6536    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecFormatInfo, D>
6537        for &CodecFormatInfo
6538    {
6539        unsafe fn encode(
6540            self,
6541            encoder: &mut fidl::encoding::Encoder<'_, D>,
6542            offset: usize,
6543            mut depth: fidl::encoding::Depth,
6544        ) -> fidl::Result<()> {
6545            encoder.debug_check_bounds::<CodecFormatInfo>(offset);
6546            // Vector header
6547            let max_ordinal: u64 = self.max_ordinal_present();
6548            encoder.write_num(max_ordinal, offset);
6549            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6550            // Calling encoder.out_of_line_offset(0) is not allowed.
6551            if max_ordinal == 0 {
6552                return Ok(());
6553            }
6554            depth.increment()?;
6555            let envelope_size = 8;
6556            let bytes_len = max_ordinal as usize * envelope_size;
6557            #[allow(unused_variables)]
6558            let offset = encoder.out_of_line_offset(bytes_len);
6559            let mut _prev_end_offset: usize = 0;
6560            if 1 > max_ordinal {
6561                return Ok(());
6562            }
6563
6564            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6565            // are envelope_size bytes.
6566            let cur_offset: usize = (1 - 1) * envelope_size;
6567
6568            // Zero reserved fields.
6569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6570
6571            // Safety:
6572            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6573            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6574            //   envelope_size bytes, there is always sufficient room.
6575            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6576                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6577                encoder,
6578                offset + cur_offset,
6579                depth,
6580            )?;
6581
6582            _prev_end_offset = cur_offset + envelope_size;
6583            if 2 > max_ordinal {
6584                return Ok(());
6585            }
6586
6587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6588            // are envelope_size bytes.
6589            let cur_offset: usize = (2 - 1) * envelope_size;
6590
6591            // Zero reserved fields.
6592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6593
6594            // Safety:
6595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6597            //   envelope_size bytes, there is always sufficient room.
6598            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6599                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6600                encoder,
6601                offset + cur_offset,
6602                depth,
6603            )?;
6604
6605            _prev_end_offset = cur_offset + envelope_size;
6606            if 3 > max_ordinal {
6607                return Ok(());
6608            }
6609
6610            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6611            // are envelope_size bytes.
6612            let cur_offset: usize = (3 - 1) * envelope_size;
6613
6614            // Zero reserved fields.
6615            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6616
6617            // Safety:
6618            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6619            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6620            //   envelope_size bytes, there is always sufficient room.
6621            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6622                self.turn_off_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6623                encoder,
6624                offset + cur_offset,
6625                depth,
6626            )?;
6627
6628            _prev_end_offset = cur_offset + envelope_size;
6629
6630            Ok(())
6631        }
6632    }
6633
6634    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecFormatInfo {
6635        #[inline(always)]
6636        fn new_empty() -> Self {
6637            Self::default()
6638        }
6639
6640        unsafe fn decode(
6641            &mut self,
6642            decoder: &mut fidl::encoding::Decoder<'_, D>,
6643            offset: usize,
6644            mut depth: fidl::encoding::Depth,
6645        ) -> fidl::Result<()> {
6646            decoder.debug_check_bounds::<Self>(offset);
6647            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6648                None => return Err(fidl::Error::NotNullable),
6649                Some(len) => len,
6650            };
6651            // Calling decoder.out_of_line_offset(0) is not allowed.
6652            if len == 0 {
6653                return Ok(());
6654            };
6655            depth.increment()?;
6656            let envelope_size = 8;
6657            let bytes_len = len * envelope_size;
6658            let offset = decoder.out_of_line_offset(bytes_len)?;
6659            // Decode the envelope for each type.
6660            let mut _next_ordinal_to_read = 0;
6661            let mut next_offset = offset;
6662            let end_offset = offset + bytes_len;
6663            _next_ordinal_to_read += 1;
6664            if next_offset >= end_offset {
6665                return Ok(());
6666            }
6667
6668            // Decode unknown envelopes for gaps in ordinals.
6669            while _next_ordinal_to_read < 1 {
6670                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6671                _next_ordinal_to_read += 1;
6672                next_offset += envelope_size;
6673            }
6674
6675            let next_out_of_line = decoder.next_out_of_line();
6676            let handles_before = decoder.remaining_handles();
6677            if let Some((inlined, num_bytes, num_handles)) =
6678                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6679            {
6680                let member_inline_size =
6681                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6682                if inlined != (member_inline_size <= 4) {
6683                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6684                }
6685                let inner_offset;
6686                let mut inner_depth = depth.clone();
6687                if inlined {
6688                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6689                    inner_offset = next_offset;
6690                } else {
6691                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6692                    inner_depth.increment()?;
6693                }
6694                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6695                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6696                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6697                {
6698                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6699                }
6700                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6701                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6702                }
6703            }
6704
6705            next_offset += envelope_size;
6706            _next_ordinal_to_read += 1;
6707            if next_offset >= end_offset {
6708                return Ok(());
6709            }
6710
6711            // Decode unknown envelopes for gaps in ordinals.
6712            while _next_ordinal_to_read < 2 {
6713                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6714                _next_ordinal_to_read += 1;
6715                next_offset += envelope_size;
6716            }
6717
6718            let next_out_of_line = decoder.next_out_of_line();
6719            let handles_before = decoder.remaining_handles();
6720            if let Some((inlined, num_bytes, num_handles)) =
6721                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6722            {
6723                let member_inline_size =
6724                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6725                if inlined != (member_inline_size <= 4) {
6726                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6727                }
6728                let inner_offset;
6729                let mut inner_depth = depth.clone();
6730                if inlined {
6731                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6732                    inner_offset = next_offset;
6733                } else {
6734                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6735                    inner_depth.increment()?;
6736                }
6737                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6738                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6739                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6740                {
6741                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6742                }
6743                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6744                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6745                }
6746            }
6747
6748            next_offset += envelope_size;
6749            _next_ordinal_to_read += 1;
6750            if next_offset >= end_offset {
6751                return Ok(());
6752            }
6753
6754            // Decode unknown envelopes for gaps in ordinals.
6755            while _next_ordinal_to_read < 3 {
6756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6757                _next_ordinal_to_read += 1;
6758                next_offset += envelope_size;
6759            }
6760
6761            let next_out_of_line = decoder.next_out_of_line();
6762            let handles_before = decoder.remaining_handles();
6763            if let Some((inlined, num_bytes, num_handles)) =
6764                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6765            {
6766                let member_inline_size =
6767                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6768                if inlined != (member_inline_size <= 4) {
6769                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6770                }
6771                let inner_offset;
6772                let mut inner_depth = depth.clone();
6773                if inlined {
6774                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6775                    inner_offset = next_offset;
6776                } else {
6777                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6778                    inner_depth.increment()?;
6779                }
6780                let val_ref = self.turn_off_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6781                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6782                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6783                {
6784                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6785                }
6786                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6787                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6788                }
6789            }
6790
6791            next_offset += envelope_size;
6792
6793            // Decode the remaining unknown envelopes.
6794            while next_offset < end_offset {
6795                _next_ordinal_to_read += 1;
6796                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6797                next_offset += envelope_size;
6798            }
6799
6800            Ok(())
6801        }
6802    }
6803
6804    impl CodecProperties {
6805        #[inline(always)]
6806        fn max_ordinal_present(&self) -> u64 {
6807            if let Some(_) = self.plug_detect_capabilities {
6808                return 5;
6809            }
6810            if let Some(_) = self.unique_id {
6811                return 4;
6812            }
6813            if let Some(_) = self.product {
6814                return 3;
6815            }
6816            if let Some(_) = self.manufacturer {
6817                return 2;
6818            }
6819            if let Some(_) = self.is_input {
6820                return 1;
6821            }
6822            0
6823        }
6824    }
6825
6826    impl fidl::encoding::ValueTypeMarker for CodecProperties {
6827        type Borrowed<'a> = &'a Self;
6828        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6829            value
6830        }
6831    }
6832
6833    unsafe impl fidl::encoding::TypeMarker for CodecProperties {
6834        type Owned = Self;
6835
6836        #[inline(always)]
6837        fn inline_align(_context: fidl::encoding::Context) -> usize {
6838            8
6839        }
6840
6841        #[inline(always)]
6842        fn inline_size(_context: fidl::encoding::Context) -> usize {
6843            16
6844        }
6845    }
6846
6847    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecProperties, D>
6848        for &CodecProperties
6849    {
6850        unsafe fn encode(
6851            self,
6852            encoder: &mut fidl::encoding::Encoder<'_, D>,
6853            offset: usize,
6854            mut depth: fidl::encoding::Depth,
6855        ) -> fidl::Result<()> {
6856            encoder.debug_check_bounds::<CodecProperties>(offset);
6857            // Vector header
6858            let max_ordinal: u64 = self.max_ordinal_present();
6859            encoder.write_num(max_ordinal, offset);
6860            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6861            // Calling encoder.out_of_line_offset(0) is not allowed.
6862            if max_ordinal == 0 {
6863                return Ok(());
6864            }
6865            depth.increment()?;
6866            let envelope_size = 8;
6867            let bytes_len = max_ordinal as usize * envelope_size;
6868            #[allow(unused_variables)]
6869            let offset = encoder.out_of_line_offset(bytes_len);
6870            let mut _prev_end_offset: usize = 0;
6871            if 1 > max_ordinal {
6872                return Ok(());
6873            }
6874
6875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6876            // are envelope_size bytes.
6877            let cur_offset: usize = (1 - 1) * envelope_size;
6878
6879            // Zero reserved fields.
6880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6881
6882            // Safety:
6883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6885            //   envelope_size bytes, there is always sufficient room.
6886            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6887                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6888                encoder,
6889                offset + cur_offset,
6890                depth,
6891            )?;
6892
6893            _prev_end_offset = cur_offset + envelope_size;
6894            if 2 > max_ordinal {
6895                return Ok(());
6896            }
6897
6898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6899            // are envelope_size bytes.
6900            let cur_offset: usize = (2 - 1) * envelope_size;
6901
6902            // Zero reserved fields.
6903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6904
6905            // Safety:
6906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6908            //   envelope_size bytes, there is always sufficient room.
6909            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6910                self.manufacturer.as_ref().map(
6911                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6912                ),
6913                encoder,
6914                offset + cur_offset,
6915                depth,
6916            )?;
6917
6918            _prev_end_offset = cur_offset + envelope_size;
6919            if 3 > max_ordinal {
6920                return Ok(());
6921            }
6922
6923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6924            // are envelope_size bytes.
6925            let cur_offset: usize = (3 - 1) * envelope_size;
6926
6927            // Zero reserved fields.
6928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6929
6930            // Safety:
6931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6933            //   envelope_size bytes, there is always sufficient room.
6934            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6935                self.product.as_ref().map(
6936                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6937                ),
6938                encoder,
6939                offset + cur_offset,
6940                depth,
6941            )?;
6942
6943            _prev_end_offset = cur_offset + envelope_size;
6944            if 4 > max_ordinal {
6945                return Ok(());
6946            }
6947
6948            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6949            // are envelope_size bytes.
6950            let cur_offset: usize = (4 - 1) * envelope_size;
6951
6952            // Zero reserved fields.
6953            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6954
6955            // Safety:
6956            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6957            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6958            //   envelope_size bytes, there is always sufficient room.
6959            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6960                self.unique_id.as_ref().map(
6961                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6962                ),
6963                encoder,
6964                offset + cur_offset,
6965                depth,
6966            )?;
6967
6968            _prev_end_offset = cur_offset + envelope_size;
6969            if 5 > max_ordinal {
6970                return Ok(());
6971            }
6972
6973            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6974            // are envelope_size bytes.
6975            let cur_offset: usize = (5 - 1) * envelope_size;
6976
6977            // Zero reserved fields.
6978            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6979
6980            // Safety:
6981            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6982            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6983            //   envelope_size bytes, there is always sufficient room.
6984            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
6985                self.plug_detect_capabilities
6986                    .as_ref()
6987                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
6988                encoder,
6989                offset + cur_offset,
6990                depth,
6991            )?;
6992
6993            _prev_end_offset = cur_offset + envelope_size;
6994
6995            Ok(())
6996        }
6997    }
6998
6999    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProperties {
7000        #[inline(always)]
7001        fn new_empty() -> Self {
7002            Self::default()
7003        }
7004
7005        unsafe fn decode(
7006            &mut self,
7007            decoder: &mut fidl::encoding::Decoder<'_, D>,
7008            offset: usize,
7009            mut depth: fidl::encoding::Depth,
7010        ) -> fidl::Result<()> {
7011            decoder.debug_check_bounds::<Self>(offset);
7012            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7013                None => return Err(fidl::Error::NotNullable),
7014                Some(len) => len,
7015            };
7016            // Calling decoder.out_of_line_offset(0) is not allowed.
7017            if len == 0 {
7018                return Ok(());
7019            };
7020            depth.increment()?;
7021            let envelope_size = 8;
7022            let bytes_len = len * envelope_size;
7023            let offset = decoder.out_of_line_offset(bytes_len)?;
7024            // Decode the envelope for each type.
7025            let mut _next_ordinal_to_read = 0;
7026            let mut next_offset = offset;
7027            let end_offset = offset + bytes_len;
7028            _next_ordinal_to_read += 1;
7029            if next_offset >= end_offset {
7030                return Ok(());
7031            }
7032
7033            // Decode unknown envelopes for gaps in ordinals.
7034            while _next_ordinal_to_read < 1 {
7035                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7036                _next_ordinal_to_read += 1;
7037                next_offset += envelope_size;
7038            }
7039
7040            let next_out_of_line = decoder.next_out_of_line();
7041            let handles_before = decoder.remaining_handles();
7042            if let Some((inlined, num_bytes, num_handles)) =
7043                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7044            {
7045                let member_inline_size =
7046                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7047                if inlined != (member_inline_size <= 4) {
7048                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7049                }
7050                let inner_offset;
7051                let mut inner_depth = depth.clone();
7052                if inlined {
7053                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7054                    inner_offset = next_offset;
7055                } else {
7056                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7057                    inner_depth.increment()?;
7058                }
7059                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7060                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7062                {
7063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7064                }
7065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7067                }
7068            }
7069
7070            next_offset += envelope_size;
7071            _next_ordinal_to_read += 1;
7072            if next_offset >= end_offset {
7073                return Ok(());
7074            }
7075
7076            // Decode unknown envelopes for gaps in ordinals.
7077            while _next_ordinal_to_read < 2 {
7078                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7079                _next_ordinal_to_read += 1;
7080                next_offset += envelope_size;
7081            }
7082
7083            let next_out_of_line = decoder.next_out_of_line();
7084            let handles_before = decoder.remaining_handles();
7085            if let Some((inlined, num_bytes, num_handles)) =
7086                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7087            {
7088                let member_inline_size =
7089                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7090                        decoder.context,
7091                    );
7092                if inlined != (member_inline_size <= 4) {
7093                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7094                }
7095                let inner_offset;
7096                let mut inner_depth = depth.clone();
7097                if inlined {
7098                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7099                    inner_offset = next_offset;
7100                } else {
7101                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7102                    inner_depth.increment()?;
7103                }
7104                let val_ref = self
7105                    .manufacturer
7106                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7107                fidl::decode!(
7108                    fidl::encoding::BoundedString<256>,
7109                    D,
7110                    val_ref,
7111                    decoder,
7112                    inner_offset,
7113                    inner_depth
7114                )?;
7115                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7116                {
7117                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7118                }
7119                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7120                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7121                }
7122            }
7123
7124            next_offset += envelope_size;
7125            _next_ordinal_to_read += 1;
7126            if next_offset >= end_offset {
7127                return Ok(());
7128            }
7129
7130            // Decode unknown envelopes for gaps in ordinals.
7131            while _next_ordinal_to_read < 3 {
7132                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7133                _next_ordinal_to_read += 1;
7134                next_offset += envelope_size;
7135            }
7136
7137            let next_out_of_line = decoder.next_out_of_line();
7138            let handles_before = decoder.remaining_handles();
7139            if let Some((inlined, num_bytes, num_handles)) =
7140                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7141            {
7142                let member_inline_size =
7143                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7144                        decoder.context,
7145                    );
7146                if inlined != (member_inline_size <= 4) {
7147                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7148                }
7149                let inner_offset;
7150                let mut inner_depth = depth.clone();
7151                if inlined {
7152                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7153                    inner_offset = next_offset;
7154                } else {
7155                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7156                    inner_depth.increment()?;
7157                }
7158                let val_ref = self
7159                    .product
7160                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7161                fidl::decode!(
7162                    fidl::encoding::BoundedString<256>,
7163                    D,
7164                    val_ref,
7165                    decoder,
7166                    inner_offset,
7167                    inner_depth
7168                )?;
7169                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7170                {
7171                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7172                }
7173                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7174                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7175                }
7176            }
7177
7178            next_offset += envelope_size;
7179            _next_ordinal_to_read += 1;
7180            if next_offset >= end_offset {
7181                return Ok(());
7182            }
7183
7184            // Decode unknown envelopes for gaps in ordinals.
7185            while _next_ordinal_to_read < 4 {
7186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7187                _next_ordinal_to_read += 1;
7188                next_offset += envelope_size;
7189            }
7190
7191            let next_out_of_line = decoder.next_out_of_line();
7192            let handles_before = decoder.remaining_handles();
7193            if let Some((inlined, num_bytes, num_handles)) =
7194                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7195            {
7196                let member_inline_size =
7197                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7198                        decoder.context,
7199                    );
7200                if inlined != (member_inline_size <= 4) {
7201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7202                }
7203                let inner_offset;
7204                let mut inner_depth = depth.clone();
7205                if inlined {
7206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7207                    inner_offset = next_offset;
7208                } else {
7209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7210                    inner_depth.increment()?;
7211                }
7212                let val_ref = self
7213                    .unique_id
7214                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7215                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7217                {
7218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7219                }
7220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7222                }
7223            }
7224
7225            next_offset += envelope_size;
7226            _next_ordinal_to_read += 1;
7227            if next_offset >= end_offset {
7228                return Ok(());
7229            }
7230
7231            // Decode unknown envelopes for gaps in ordinals.
7232            while _next_ordinal_to_read < 5 {
7233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7234                _next_ordinal_to_read += 1;
7235                next_offset += envelope_size;
7236            }
7237
7238            let next_out_of_line = decoder.next_out_of_line();
7239            let handles_before = decoder.remaining_handles();
7240            if let Some((inlined, num_bytes, num_handles)) =
7241                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7242            {
7243                let member_inline_size =
7244                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
7245                        decoder.context,
7246                    );
7247                if inlined != (member_inline_size <= 4) {
7248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7249                }
7250                let inner_offset;
7251                let mut inner_depth = depth.clone();
7252                if inlined {
7253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7254                    inner_offset = next_offset;
7255                } else {
7256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7257                    inner_depth.increment()?;
7258                }
7259                let val_ref = self
7260                    .plug_detect_capabilities
7261                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
7262                fidl::decode!(
7263                    PlugDetectCapabilities,
7264                    D,
7265                    val_ref,
7266                    decoder,
7267                    inner_offset,
7268                    inner_depth
7269                )?;
7270                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7271                {
7272                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7273                }
7274                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7275                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7276                }
7277            }
7278
7279            next_offset += envelope_size;
7280
7281            // Decode the remaining unknown envelopes.
7282            while next_offset < end_offset {
7283                _next_ordinal_to_read += 1;
7284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7285                next_offset += envelope_size;
7286            }
7287
7288            Ok(())
7289        }
7290    }
7291
7292    impl CompositeProperties {
7293        #[inline(always)]
7294        fn max_ordinal_present(&self) -> u64 {
7295            if let Some(_) = self.clock_domain {
7296                return 5;
7297            }
7298            if let Some(_) = self.unique_id {
7299                return 4;
7300            }
7301            if let Some(_) = self.product {
7302                return 3;
7303            }
7304            if let Some(_) = self.manufacturer {
7305                return 2;
7306            }
7307            0
7308        }
7309    }
7310
7311    impl fidl::encoding::ValueTypeMarker for CompositeProperties {
7312        type Borrowed<'a> = &'a Self;
7313        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7314            value
7315        }
7316    }
7317
7318    unsafe impl fidl::encoding::TypeMarker for CompositeProperties {
7319        type Owned = Self;
7320
7321        #[inline(always)]
7322        fn inline_align(_context: fidl::encoding::Context) -> usize {
7323            8
7324        }
7325
7326        #[inline(always)]
7327        fn inline_size(_context: fidl::encoding::Context) -> usize {
7328            16
7329        }
7330    }
7331
7332    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeProperties, D>
7333        for &CompositeProperties
7334    {
7335        unsafe fn encode(
7336            self,
7337            encoder: &mut fidl::encoding::Encoder<'_, D>,
7338            offset: usize,
7339            mut depth: fidl::encoding::Depth,
7340        ) -> fidl::Result<()> {
7341            encoder.debug_check_bounds::<CompositeProperties>(offset);
7342            // Vector header
7343            let max_ordinal: u64 = self.max_ordinal_present();
7344            encoder.write_num(max_ordinal, offset);
7345            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7346            // Calling encoder.out_of_line_offset(0) is not allowed.
7347            if max_ordinal == 0 {
7348                return Ok(());
7349            }
7350            depth.increment()?;
7351            let envelope_size = 8;
7352            let bytes_len = max_ordinal as usize * envelope_size;
7353            #[allow(unused_variables)]
7354            let offset = encoder.out_of_line_offset(bytes_len);
7355            let mut _prev_end_offset: usize = 0;
7356            if 2 > max_ordinal {
7357                return Ok(());
7358            }
7359
7360            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7361            // are envelope_size bytes.
7362            let cur_offset: usize = (2 - 1) * envelope_size;
7363
7364            // Zero reserved fields.
7365            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7366
7367            // Safety:
7368            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7369            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7370            //   envelope_size bytes, there is always sufficient room.
7371            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7372                self.manufacturer.as_ref().map(
7373                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7374                ),
7375                encoder,
7376                offset + cur_offset,
7377                depth,
7378            )?;
7379
7380            _prev_end_offset = cur_offset + envelope_size;
7381            if 3 > max_ordinal {
7382                return Ok(());
7383            }
7384
7385            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7386            // are envelope_size bytes.
7387            let cur_offset: usize = (3 - 1) * envelope_size;
7388
7389            // Zero reserved fields.
7390            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7391
7392            // Safety:
7393            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7394            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7395            //   envelope_size bytes, there is always sufficient room.
7396            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7397                self.product.as_ref().map(
7398                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7399                ),
7400                encoder,
7401                offset + cur_offset,
7402                depth,
7403            )?;
7404
7405            _prev_end_offset = cur_offset + envelope_size;
7406            if 4 > max_ordinal {
7407                return Ok(());
7408            }
7409
7410            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7411            // are envelope_size bytes.
7412            let cur_offset: usize = (4 - 1) * envelope_size;
7413
7414            // Zero reserved fields.
7415            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7416
7417            // Safety:
7418            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7419            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7420            //   envelope_size bytes, there is always sufficient room.
7421            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7422                self.unique_id.as_ref().map(
7423                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7424                ),
7425                encoder,
7426                offset + cur_offset,
7427                depth,
7428            )?;
7429
7430            _prev_end_offset = cur_offset + envelope_size;
7431            if 5 > max_ordinal {
7432                return Ok(());
7433            }
7434
7435            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7436            // are envelope_size bytes.
7437            let cur_offset: usize = (5 - 1) * envelope_size;
7438
7439            // Zero reserved fields.
7440            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7441
7442            // Safety:
7443            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7444            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7445            //   envelope_size bytes, there is always sufficient room.
7446            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7447                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7448                encoder,
7449                offset + cur_offset,
7450                depth,
7451            )?;
7452
7453            _prev_end_offset = cur_offset + envelope_size;
7454
7455            Ok(())
7456        }
7457    }
7458
7459    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeProperties {
7460        #[inline(always)]
7461        fn new_empty() -> Self {
7462            Self::default()
7463        }
7464
7465        unsafe fn decode(
7466            &mut self,
7467            decoder: &mut fidl::encoding::Decoder<'_, D>,
7468            offset: usize,
7469            mut depth: fidl::encoding::Depth,
7470        ) -> fidl::Result<()> {
7471            decoder.debug_check_bounds::<Self>(offset);
7472            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7473                None => return Err(fidl::Error::NotNullable),
7474                Some(len) => len,
7475            };
7476            // Calling decoder.out_of_line_offset(0) is not allowed.
7477            if len == 0 {
7478                return Ok(());
7479            };
7480            depth.increment()?;
7481            let envelope_size = 8;
7482            let bytes_len = len * envelope_size;
7483            let offset = decoder.out_of_line_offset(bytes_len)?;
7484            // Decode the envelope for each type.
7485            let mut _next_ordinal_to_read = 0;
7486            let mut next_offset = offset;
7487            let end_offset = offset + bytes_len;
7488            _next_ordinal_to_read += 1;
7489            if next_offset >= end_offset {
7490                return Ok(());
7491            }
7492
7493            // Decode unknown envelopes for gaps in ordinals.
7494            while _next_ordinal_to_read < 2 {
7495                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7496                _next_ordinal_to_read += 1;
7497                next_offset += envelope_size;
7498            }
7499
7500            let next_out_of_line = decoder.next_out_of_line();
7501            let handles_before = decoder.remaining_handles();
7502            if let Some((inlined, num_bytes, num_handles)) =
7503                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7504            {
7505                let member_inline_size =
7506                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7507                        decoder.context,
7508                    );
7509                if inlined != (member_inline_size <= 4) {
7510                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7511                }
7512                let inner_offset;
7513                let mut inner_depth = depth.clone();
7514                if inlined {
7515                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7516                    inner_offset = next_offset;
7517                } else {
7518                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7519                    inner_depth.increment()?;
7520                }
7521                let val_ref = self
7522                    .manufacturer
7523                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7524                fidl::decode!(
7525                    fidl::encoding::BoundedString<256>,
7526                    D,
7527                    val_ref,
7528                    decoder,
7529                    inner_offset,
7530                    inner_depth
7531                )?;
7532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7533                {
7534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7535                }
7536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7538                }
7539            }
7540
7541            next_offset += envelope_size;
7542            _next_ordinal_to_read += 1;
7543            if next_offset >= end_offset {
7544                return Ok(());
7545            }
7546
7547            // Decode unknown envelopes for gaps in ordinals.
7548            while _next_ordinal_to_read < 3 {
7549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7550                _next_ordinal_to_read += 1;
7551                next_offset += envelope_size;
7552            }
7553
7554            let next_out_of_line = decoder.next_out_of_line();
7555            let handles_before = decoder.remaining_handles();
7556            if let Some((inlined, num_bytes, num_handles)) =
7557                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7558            {
7559                let member_inline_size =
7560                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7561                        decoder.context,
7562                    );
7563                if inlined != (member_inline_size <= 4) {
7564                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7565                }
7566                let inner_offset;
7567                let mut inner_depth = depth.clone();
7568                if inlined {
7569                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7570                    inner_offset = next_offset;
7571                } else {
7572                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7573                    inner_depth.increment()?;
7574                }
7575                let val_ref = self
7576                    .product
7577                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7578                fidl::decode!(
7579                    fidl::encoding::BoundedString<256>,
7580                    D,
7581                    val_ref,
7582                    decoder,
7583                    inner_offset,
7584                    inner_depth
7585                )?;
7586                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7587                {
7588                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7589                }
7590                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7591                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7592                }
7593            }
7594
7595            next_offset += envelope_size;
7596            _next_ordinal_to_read += 1;
7597            if next_offset >= end_offset {
7598                return Ok(());
7599            }
7600
7601            // Decode unknown envelopes for gaps in ordinals.
7602            while _next_ordinal_to_read < 4 {
7603                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7604                _next_ordinal_to_read += 1;
7605                next_offset += envelope_size;
7606            }
7607
7608            let next_out_of_line = decoder.next_out_of_line();
7609            let handles_before = decoder.remaining_handles();
7610            if let Some((inlined, num_bytes, num_handles)) =
7611                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7612            {
7613                let member_inline_size =
7614                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
7615                        decoder.context,
7616                    );
7617                if inlined != (member_inline_size <= 4) {
7618                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7619                }
7620                let inner_offset;
7621                let mut inner_depth = depth.clone();
7622                if inlined {
7623                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7624                    inner_offset = next_offset;
7625                } else {
7626                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7627                    inner_depth.increment()?;
7628                }
7629                let val_ref = self
7630                    .unique_id
7631                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
7632                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
7633                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7634                {
7635                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7636                }
7637                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7638                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7639                }
7640            }
7641
7642            next_offset += envelope_size;
7643            _next_ordinal_to_read += 1;
7644            if next_offset >= end_offset {
7645                return Ok(());
7646            }
7647
7648            // Decode unknown envelopes for gaps in ordinals.
7649            while _next_ordinal_to_read < 5 {
7650                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7651                _next_ordinal_to_read += 1;
7652                next_offset += envelope_size;
7653            }
7654
7655            let next_out_of_line = decoder.next_out_of_line();
7656            let handles_before = decoder.remaining_handles();
7657            if let Some((inlined, num_bytes, num_handles)) =
7658                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7659            {
7660                let member_inline_size =
7661                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7662                if inlined != (member_inline_size <= 4) {
7663                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7664                }
7665                let inner_offset;
7666                let mut inner_depth = depth.clone();
7667                if inlined {
7668                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7669                    inner_offset = next_offset;
7670                } else {
7671                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7672                    inner_depth.increment()?;
7673                }
7674                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
7675                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7676                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7677                {
7678                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7679                }
7680                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7681                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7682                }
7683            }
7684
7685            next_offset += envelope_size;
7686
7687            // Decode the remaining unknown envelopes.
7688            while next_offset < end_offset {
7689                _next_ordinal_to_read += 1;
7690                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7691                next_offset += envelope_size;
7692            }
7693
7694            Ok(())
7695        }
7696    }
7697
7698    impl DaiProperties {
7699        #[inline(always)]
7700        fn max_ordinal_present(&self) -> u64 {
7701            if let Some(_) = self.clock_domain {
7702                return 5;
7703            }
7704            if let Some(_) = self.unique_id {
7705                return 4;
7706            }
7707            if let Some(_) = self.product_name {
7708                return 3;
7709            }
7710            if let Some(_) = self.manufacturer {
7711                return 2;
7712            }
7713            if let Some(_) = self.is_input {
7714                return 1;
7715            }
7716            0
7717        }
7718    }
7719
7720    impl fidl::encoding::ValueTypeMarker for DaiProperties {
7721        type Borrowed<'a> = &'a Self;
7722        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7723            value
7724        }
7725    }
7726
7727    unsafe impl fidl::encoding::TypeMarker for DaiProperties {
7728        type Owned = Self;
7729
7730        #[inline(always)]
7731        fn inline_align(_context: fidl::encoding::Context) -> usize {
7732            8
7733        }
7734
7735        #[inline(always)]
7736        fn inline_size(_context: fidl::encoding::Context) -> usize {
7737            16
7738        }
7739    }
7740
7741    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiProperties, D>
7742        for &DaiProperties
7743    {
7744        unsafe fn encode(
7745            self,
7746            encoder: &mut fidl::encoding::Encoder<'_, D>,
7747            offset: usize,
7748            mut depth: fidl::encoding::Depth,
7749        ) -> fidl::Result<()> {
7750            encoder.debug_check_bounds::<DaiProperties>(offset);
7751            // Vector header
7752            let max_ordinal: u64 = self.max_ordinal_present();
7753            encoder.write_num(max_ordinal, offset);
7754            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7755            // Calling encoder.out_of_line_offset(0) is not allowed.
7756            if max_ordinal == 0 {
7757                return Ok(());
7758            }
7759            depth.increment()?;
7760            let envelope_size = 8;
7761            let bytes_len = max_ordinal as usize * envelope_size;
7762            #[allow(unused_variables)]
7763            let offset = encoder.out_of_line_offset(bytes_len);
7764            let mut _prev_end_offset: usize = 0;
7765            if 1 > max_ordinal {
7766                return Ok(());
7767            }
7768
7769            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7770            // are envelope_size bytes.
7771            let cur_offset: usize = (1 - 1) * envelope_size;
7772
7773            // Zero reserved fields.
7774            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7775
7776            // Safety:
7777            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7778            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7779            //   envelope_size bytes, there is always sufficient room.
7780            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7781                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7782                encoder,
7783                offset + cur_offset,
7784                depth,
7785            )?;
7786
7787            _prev_end_offset = cur_offset + envelope_size;
7788            if 2 > max_ordinal {
7789                return Ok(());
7790            }
7791
7792            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7793            // are envelope_size bytes.
7794            let cur_offset: usize = (2 - 1) * envelope_size;
7795
7796            // Zero reserved fields.
7797            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7798
7799            // Safety:
7800            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7801            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7802            //   envelope_size bytes, there is always sufficient room.
7803            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7804                self.manufacturer.as_ref().map(
7805                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7806                ),
7807                encoder,
7808                offset + cur_offset,
7809                depth,
7810            )?;
7811
7812            _prev_end_offset = cur_offset + envelope_size;
7813            if 3 > max_ordinal {
7814                return Ok(());
7815            }
7816
7817            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7818            // are envelope_size bytes.
7819            let cur_offset: usize = (3 - 1) * envelope_size;
7820
7821            // Zero reserved fields.
7822            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7823
7824            // Safety:
7825            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7826            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7827            //   envelope_size bytes, there is always sufficient room.
7828            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
7829                self.product_name.as_ref().map(
7830                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
7831                ),
7832                encoder,
7833                offset + cur_offset,
7834                depth,
7835            )?;
7836
7837            _prev_end_offset = cur_offset + envelope_size;
7838            if 4 > max_ordinal {
7839                return Ok(());
7840            }
7841
7842            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7843            // are envelope_size bytes.
7844            let cur_offset: usize = (4 - 1) * envelope_size;
7845
7846            // Zero reserved fields.
7847            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7848
7849            // Safety:
7850            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7851            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7852            //   envelope_size bytes, there is always sufficient room.
7853            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
7854                self.unique_id.as_ref().map(
7855                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
7856                ),
7857                encoder,
7858                offset + cur_offset,
7859                depth,
7860            )?;
7861
7862            _prev_end_offset = cur_offset + envelope_size;
7863            if 5 > max_ordinal {
7864                return Ok(());
7865            }
7866
7867            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7868            // are envelope_size bytes.
7869            let cur_offset: usize = (5 - 1) * envelope_size;
7870
7871            // Zero reserved fields.
7872            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7873
7874            // Safety:
7875            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7876            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7877            //   envelope_size bytes, there is always sufficient room.
7878            fidl::encoding::encode_in_envelope_optional::<u32, D>(
7879                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
7880                encoder,
7881                offset + cur_offset,
7882                depth,
7883            )?;
7884
7885            _prev_end_offset = cur_offset + envelope_size;
7886
7887            Ok(())
7888        }
7889    }
7890
7891    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiProperties {
7892        #[inline(always)]
7893        fn new_empty() -> Self {
7894            Self::default()
7895        }
7896
7897        unsafe fn decode(
7898            &mut self,
7899            decoder: &mut fidl::encoding::Decoder<'_, D>,
7900            offset: usize,
7901            mut depth: fidl::encoding::Depth,
7902        ) -> fidl::Result<()> {
7903            decoder.debug_check_bounds::<Self>(offset);
7904            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7905                None => return Err(fidl::Error::NotNullable),
7906                Some(len) => len,
7907            };
7908            // Calling decoder.out_of_line_offset(0) is not allowed.
7909            if len == 0 {
7910                return Ok(());
7911            };
7912            depth.increment()?;
7913            let envelope_size = 8;
7914            let bytes_len = len * envelope_size;
7915            let offset = decoder.out_of_line_offset(bytes_len)?;
7916            // Decode the envelope for each type.
7917            let mut _next_ordinal_to_read = 0;
7918            let mut next_offset = offset;
7919            let end_offset = offset + bytes_len;
7920            _next_ordinal_to_read += 1;
7921            if next_offset >= end_offset {
7922                return Ok(());
7923            }
7924
7925            // Decode unknown envelopes for gaps in ordinals.
7926            while _next_ordinal_to_read < 1 {
7927                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7928                _next_ordinal_to_read += 1;
7929                next_offset += envelope_size;
7930            }
7931
7932            let next_out_of_line = decoder.next_out_of_line();
7933            let handles_before = decoder.remaining_handles();
7934            if let Some((inlined, num_bytes, num_handles)) =
7935                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7936            {
7937                let member_inline_size =
7938                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7939                if inlined != (member_inline_size <= 4) {
7940                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7941                }
7942                let inner_offset;
7943                let mut inner_depth = depth.clone();
7944                if inlined {
7945                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7946                    inner_offset = next_offset;
7947                } else {
7948                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7949                    inner_depth.increment()?;
7950                }
7951                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7952                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7953                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7954                {
7955                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7956                }
7957                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7958                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7959                }
7960            }
7961
7962            next_offset += envelope_size;
7963            _next_ordinal_to_read += 1;
7964            if next_offset >= end_offset {
7965                return Ok(());
7966            }
7967
7968            // Decode unknown envelopes for gaps in ordinals.
7969            while _next_ordinal_to_read < 2 {
7970                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7971                _next_ordinal_to_read += 1;
7972                next_offset += envelope_size;
7973            }
7974
7975            let next_out_of_line = decoder.next_out_of_line();
7976            let handles_before = decoder.remaining_handles();
7977            if let Some((inlined, num_bytes, num_handles)) =
7978                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7979            {
7980                let member_inline_size =
7981                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
7982                        decoder.context,
7983                    );
7984                if inlined != (member_inline_size <= 4) {
7985                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7986                }
7987                let inner_offset;
7988                let mut inner_depth = depth.clone();
7989                if inlined {
7990                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7991                    inner_offset = next_offset;
7992                } else {
7993                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7994                    inner_depth.increment()?;
7995                }
7996                let val_ref = self
7997                    .manufacturer
7998                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
7999                fidl::decode!(
8000                    fidl::encoding::BoundedString<256>,
8001                    D,
8002                    val_ref,
8003                    decoder,
8004                    inner_offset,
8005                    inner_depth
8006                )?;
8007                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8008                {
8009                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8010                }
8011                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8012                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8013                }
8014            }
8015
8016            next_offset += envelope_size;
8017            _next_ordinal_to_read += 1;
8018            if next_offset >= end_offset {
8019                return Ok(());
8020            }
8021
8022            // Decode unknown envelopes for gaps in ordinals.
8023            while _next_ordinal_to_read < 3 {
8024                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8025                _next_ordinal_to_read += 1;
8026                next_offset += envelope_size;
8027            }
8028
8029            let next_out_of_line = decoder.next_out_of_line();
8030            let handles_before = decoder.remaining_handles();
8031            if let Some((inlined, num_bytes, num_handles)) =
8032                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8033            {
8034                let member_inline_size =
8035                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8036                        decoder.context,
8037                    );
8038                if inlined != (member_inline_size <= 4) {
8039                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8040                }
8041                let inner_offset;
8042                let mut inner_depth = depth.clone();
8043                if inlined {
8044                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8045                    inner_offset = next_offset;
8046                } else {
8047                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8048                    inner_depth.increment()?;
8049                }
8050                let val_ref = self
8051                    .product_name
8052                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
8053                fidl::decode!(
8054                    fidl::encoding::BoundedString<256>,
8055                    D,
8056                    val_ref,
8057                    decoder,
8058                    inner_offset,
8059                    inner_depth
8060                )?;
8061                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8062                {
8063                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8064                }
8065                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8066                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8067                }
8068            }
8069
8070            next_offset += envelope_size;
8071            _next_ordinal_to_read += 1;
8072            if next_offset >= end_offset {
8073                return Ok(());
8074            }
8075
8076            // Decode unknown envelopes for gaps in ordinals.
8077            while _next_ordinal_to_read < 4 {
8078                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8079                _next_ordinal_to_read += 1;
8080                next_offset += envelope_size;
8081            }
8082
8083            let next_out_of_line = decoder.next_out_of_line();
8084            let handles_before = decoder.remaining_handles();
8085            if let Some((inlined, num_bytes, num_handles)) =
8086                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8087            {
8088                let member_inline_size =
8089                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
8090                        decoder.context,
8091                    );
8092                if inlined != (member_inline_size <= 4) {
8093                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8094                }
8095                let inner_offset;
8096                let mut inner_depth = depth.clone();
8097                if inlined {
8098                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8099                    inner_offset = next_offset;
8100                } else {
8101                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8102                    inner_depth.increment()?;
8103                }
8104                let val_ref = self
8105                    .unique_id
8106                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
8107                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
8108                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8109                {
8110                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8111                }
8112                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8113                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8114                }
8115            }
8116
8117            next_offset += envelope_size;
8118            _next_ordinal_to_read += 1;
8119            if next_offset >= end_offset {
8120                return Ok(());
8121            }
8122
8123            // Decode unknown envelopes for gaps in ordinals.
8124            while _next_ordinal_to_read < 5 {
8125                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8126                _next_ordinal_to_read += 1;
8127                next_offset += envelope_size;
8128            }
8129
8130            let next_out_of_line = decoder.next_out_of_line();
8131            let handles_before = decoder.remaining_handles();
8132            if let Some((inlined, num_bytes, num_handles)) =
8133                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8134            {
8135                let member_inline_size =
8136                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8137                if inlined != (member_inline_size <= 4) {
8138                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8139                }
8140                let inner_offset;
8141                let mut inner_depth = depth.clone();
8142                if inlined {
8143                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8144                    inner_offset = next_offset;
8145                } else {
8146                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8147                    inner_depth.increment()?;
8148                }
8149                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
8150                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8151                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8152                {
8153                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8154                }
8155                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8156                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8157                }
8158            }
8159
8160            next_offset += envelope_size;
8161
8162            // Decode the remaining unknown envelopes.
8163            while next_offset < end_offset {
8164                _next_ordinal_to_read += 1;
8165                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8166                next_offset += envelope_size;
8167            }
8168
8169            Ok(())
8170        }
8171    }
8172
8173    impl DelayInfo {
8174        #[inline(always)]
8175        fn max_ordinal_present(&self) -> u64 {
8176            if let Some(_) = self.external_delay {
8177                return 2;
8178            }
8179            if let Some(_) = self.internal_delay {
8180                return 1;
8181            }
8182            0
8183        }
8184    }
8185
8186    impl fidl::encoding::ValueTypeMarker for DelayInfo {
8187        type Borrowed<'a> = &'a Self;
8188        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8189            value
8190        }
8191    }
8192
8193    unsafe impl fidl::encoding::TypeMarker for DelayInfo {
8194        type Owned = Self;
8195
8196        #[inline(always)]
8197        fn inline_align(_context: fidl::encoding::Context) -> usize {
8198            8
8199        }
8200
8201        #[inline(always)]
8202        fn inline_size(_context: fidl::encoding::Context) -> usize {
8203            16
8204        }
8205    }
8206
8207    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DelayInfo, D>
8208        for &DelayInfo
8209    {
8210        unsafe fn encode(
8211            self,
8212            encoder: &mut fidl::encoding::Encoder<'_, D>,
8213            offset: usize,
8214            mut depth: fidl::encoding::Depth,
8215        ) -> fidl::Result<()> {
8216            encoder.debug_check_bounds::<DelayInfo>(offset);
8217            // Vector header
8218            let max_ordinal: u64 = self.max_ordinal_present();
8219            encoder.write_num(max_ordinal, offset);
8220            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8221            // Calling encoder.out_of_line_offset(0) is not allowed.
8222            if max_ordinal == 0 {
8223                return Ok(());
8224            }
8225            depth.increment()?;
8226            let envelope_size = 8;
8227            let bytes_len = max_ordinal as usize * envelope_size;
8228            #[allow(unused_variables)]
8229            let offset = encoder.out_of_line_offset(bytes_len);
8230            let mut _prev_end_offset: usize = 0;
8231            if 1 > max_ordinal {
8232                return Ok(());
8233            }
8234
8235            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8236            // are envelope_size bytes.
8237            let cur_offset: usize = (1 - 1) * envelope_size;
8238
8239            // Zero reserved fields.
8240            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8241
8242            // Safety:
8243            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8244            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8245            //   envelope_size bytes, there is always sufficient room.
8246            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8247                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8248                encoder,
8249                offset + cur_offset,
8250                depth,
8251            )?;
8252
8253            _prev_end_offset = cur_offset + envelope_size;
8254            if 2 > max_ordinal {
8255                return Ok(());
8256            }
8257
8258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8259            // are envelope_size bytes.
8260            let cur_offset: usize = (2 - 1) * envelope_size;
8261
8262            // Zero reserved fields.
8263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8264
8265            // Safety:
8266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8268            //   envelope_size bytes, there is always sufficient room.
8269            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8270                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8271                encoder,
8272                offset + cur_offset,
8273                depth,
8274            )?;
8275
8276            _prev_end_offset = cur_offset + envelope_size;
8277
8278            Ok(())
8279        }
8280    }
8281
8282    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DelayInfo {
8283        #[inline(always)]
8284        fn new_empty() -> Self {
8285            Self::default()
8286        }
8287
8288        unsafe fn decode(
8289            &mut self,
8290            decoder: &mut fidl::encoding::Decoder<'_, D>,
8291            offset: usize,
8292            mut depth: fidl::encoding::Depth,
8293        ) -> fidl::Result<()> {
8294            decoder.debug_check_bounds::<Self>(offset);
8295            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8296                None => return Err(fidl::Error::NotNullable),
8297                Some(len) => len,
8298            };
8299            // Calling decoder.out_of_line_offset(0) is not allowed.
8300            if len == 0 {
8301                return Ok(());
8302            };
8303            depth.increment()?;
8304            let envelope_size = 8;
8305            let bytes_len = len * envelope_size;
8306            let offset = decoder.out_of_line_offset(bytes_len)?;
8307            // Decode the envelope for each type.
8308            let mut _next_ordinal_to_read = 0;
8309            let mut next_offset = offset;
8310            let end_offset = offset + bytes_len;
8311            _next_ordinal_to_read += 1;
8312            if next_offset >= end_offset {
8313                return Ok(());
8314            }
8315
8316            // Decode unknown envelopes for gaps in ordinals.
8317            while _next_ordinal_to_read < 1 {
8318                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8319                _next_ordinal_to_read += 1;
8320                next_offset += envelope_size;
8321            }
8322
8323            let next_out_of_line = decoder.next_out_of_line();
8324            let handles_before = decoder.remaining_handles();
8325            if let Some((inlined, num_bytes, num_handles)) =
8326                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8327            {
8328                let member_inline_size =
8329                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8330                if inlined != (member_inline_size <= 4) {
8331                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8332                }
8333                let inner_offset;
8334                let mut inner_depth = depth.clone();
8335                if inlined {
8336                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8337                    inner_offset = next_offset;
8338                } else {
8339                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8340                    inner_depth.increment()?;
8341                }
8342                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8343                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8344                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8345                {
8346                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8347                }
8348                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8349                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8350                }
8351            }
8352
8353            next_offset += envelope_size;
8354            _next_ordinal_to_read += 1;
8355            if next_offset >= end_offset {
8356                return Ok(());
8357            }
8358
8359            // Decode unknown envelopes for gaps in ordinals.
8360            while _next_ordinal_to_read < 2 {
8361                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8362                _next_ordinal_to_read += 1;
8363                next_offset += envelope_size;
8364            }
8365
8366            let next_out_of_line = decoder.next_out_of_line();
8367            let handles_before = decoder.remaining_handles();
8368            if let Some((inlined, num_bytes, num_handles)) =
8369                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8370            {
8371                let member_inline_size =
8372                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8373                if inlined != (member_inline_size <= 4) {
8374                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8375                }
8376                let inner_offset;
8377                let mut inner_depth = depth.clone();
8378                if inlined {
8379                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8380                    inner_offset = next_offset;
8381                } else {
8382                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8383                    inner_depth.increment()?;
8384                }
8385                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8386                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8387                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8388                {
8389                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8390                }
8391                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8392                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8393                }
8394            }
8395
8396            next_offset += envelope_size;
8397
8398            // Decode the remaining unknown envelopes.
8399            while next_offset < end_offset {
8400                _next_ordinal_to_read += 1;
8401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8402                next_offset += envelope_size;
8403            }
8404
8405            Ok(())
8406        }
8407    }
8408
8409    impl Encoding {
8410        #[inline(always)]
8411        fn max_ordinal_present(&self) -> u64 {
8412            if let Some(_) = self.encoding_type {
8413                return 4;
8414            }
8415            if let Some(_) = self.average_encoding_bitrate {
8416                return 3;
8417            }
8418            if let Some(_) = self.decoded_frame_rate {
8419                return 2;
8420            }
8421            if let Some(_) = self.decoded_channel_count {
8422                return 1;
8423            }
8424            0
8425        }
8426    }
8427
8428    impl fidl::encoding::ValueTypeMarker for Encoding {
8429        type Borrowed<'a> = &'a Self;
8430        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8431            value
8432        }
8433    }
8434
8435    unsafe impl fidl::encoding::TypeMarker for Encoding {
8436        type Owned = Self;
8437
8438        #[inline(always)]
8439        fn inline_align(_context: fidl::encoding::Context) -> usize {
8440            8
8441        }
8442
8443        #[inline(always)]
8444        fn inline_size(_context: fidl::encoding::Context) -> usize {
8445            16
8446        }
8447    }
8448
8449    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Encoding, D> for &Encoding {
8450        unsafe fn encode(
8451            self,
8452            encoder: &mut fidl::encoding::Encoder<'_, D>,
8453            offset: usize,
8454            mut depth: fidl::encoding::Depth,
8455        ) -> fidl::Result<()> {
8456            encoder.debug_check_bounds::<Encoding>(offset);
8457            // Vector header
8458            let max_ordinal: u64 = self.max_ordinal_present();
8459            encoder.write_num(max_ordinal, offset);
8460            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8461            // Calling encoder.out_of_line_offset(0) is not allowed.
8462            if max_ordinal == 0 {
8463                return Ok(());
8464            }
8465            depth.increment()?;
8466            let envelope_size = 8;
8467            let bytes_len = max_ordinal as usize * envelope_size;
8468            #[allow(unused_variables)]
8469            let offset = encoder.out_of_line_offset(bytes_len);
8470            let mut _prev_end_offset: usize = 0;
8471            if 1 > max_ordinal {
8472                return Ok(());
8473            }
8474
8475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8476            // are envelope_size bytes.
8477            let cur_offset: usize = (1 - 1) * envelope_size;
8478
8479            // Zero reserved fields.
8480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8481
8482            // Safety:
8483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8485            //   envelope_size bytes, there is always sufficient room.
8486            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8487                self.decoded_channel_count
8488                    .as_ref()
8489                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8490                encoder,
8491                offset + cur_offset,
8492                depth,
8493            )?;
8494
8495            _prev_end_offset = cur_offset + envelope_size;
8496            if 2 > max_ordinal {
8497                return Ok(());
8498            }
8499
8500            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8501            // are envelope_size bytes.
8502            let cur_offset: usize = (2 - 1) * envelope_size;
8503
8504            // Zero reserved fields.
8505            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8506
8507            // Safety:
8508            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8509            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8510            //   envelope_size bytes, there is always sufficient room.
8511            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8512                self.decoded_frame_rate
8513                    .as_ref()
8514                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8515                encoder,
8516                offset + cur_offset,
8517                depth,
8518            )?;
8519
8520            _prev_end_offset = cur_offset + envelope_size;
8521            if 3 > max_ordinal {
8522                return Ok(());
8523            }
8524
8525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8526            // are envelope_size bytes.
8527            let cur_offset: usize = (3 - 1) * envelope_size;
8528
8529            // Zero reserved fields.
8530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8531
8532            // Safety:
8533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8535            //   envelope_size bytes, there is always sufficient room.
8536            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8537                self.average_encoding_bitrate
8538                    .as_ref()
8539                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8540                encoder,
8541                offset + cur_offset,
8542                depth,
8543            )?;
8544
8545            _prev_end_offset = cur_offset + envelope_size;
8546            if 4 > max_ordinal {
8547                return Ok(());
8548            }
8549
8550            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8551            // are envelope_size bytes.
8552            let cur_offset: usize = (4 - 1) * envelope_size;
8553
8554            // Zero reserved fields.
8555            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8556
8557            // Safety:
8558            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8559            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8560            //   envelope_size bytes, there is always sufficient room.
8561            fidl::encoding::encode_in_envelope_optional::<EncodingType, D>(
8562                self.encoding_type
8563                    .as_ref()
8564                    .map(<EncodingType as fidl::encoding::ValueTypeMarker>::borrow),
8565                encoder,
8566                offset + cur_offset,
8567                depth,
8568            )?;
8569
8570            _prev_end_offset = cur_offset + envelope_size;
8571
8572            Ok(())
8573        }
8574    }
8575
8576    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Encoding {
8577        #[inline(always)]
8578        fn new_empty() -> Self {
8579            Self::default()
8580        }
8581
8582        unsafe fn decode(
8583            &mut self,
8584            decoder: &mut fidl::encoding::Decoder<'_, D>,
8585            offset: usize,
8586            mut depth: fidl::encoding::Depth,
8587        ) -> fidl::Result<()> {
8588            decoder.debug_check_bounds::<Self>(offset);
8589            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8590                None => return Err(fidl::Error::NotNullable),
8591                Some(len) => len,
8592            };
8593            // Calling decoder.out_of_line_offset(0) is not allowed.
8594            if len == 0 {
8595                return Ok(());
8596            };
8597            depth.increment()?;
8598            let envelope_size = 8;
8599            let bytes_len = len * envelope_size;
8600            let offset = decoder.out_of_line_offset(bytes_len)?;
8601            // Decode the envelope for each type.
8602            let mut _next_ordinal_to_read = 0;
8603            let mut next_offset = offset;
8604            let end_offset = offset + bytes_len;
8605            _next_ordinal_to_read += 1;
8606            if next_offset >= end_offset {
8607                return Ok(());
8608            }
8609
8610            // Decode unknown envelopes for gaps in ordinals.
8611            while _next_ordinal_to_read < 1 {
8612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8613                _next_ordinal_to_read += 1;
8614                next_offset += envelope_size;
8615            }
8616
8617            let next_out_of_line = decoder.next_out_of_line();
8618            let handles_before = decoder.remaining_handles();
8619            if let Some((inlined, num_bytes, num_handles)) =
8620                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8621            {
8622                let member_inline_size =
8623                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8624                if inlined != (member_inline_size <= 4) {
8625                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8626                }
8627                let inner_offset;
8628                let mut inner_depth = depth.clone();
8629                if inlined {
8630                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8631                    inner_offset = next_offset;
8632                } else {
8633                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8634                    inner_depth.increment()?;
8635                }
8636                let val_ref =
8637                    self.decoded_channel_count.get_or_insert_with(|| fidl::new_empty!(u32, D));
8638                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8639                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8640                {
8641                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8642                }
8643                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8644                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8645                }
8646            }
8647
8648            next_offset += envelope_size;
8649            _next_ordinal_to_read += 1;
8650            if next_offset >= end_offset {
8651                return Ok(());
8652            }
8653
8654            // Decode unknown envelopes for gaps in ordinals.
8655            while _next_ordinal_to_read < 2 {
8656                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8657                _next_ordinal_to_read += 1;
8658                next_offset += envelope_size;
8659            }
8660
8661            let next_out_of_line = decoder.next_out_of_line();
8662            let handles_before = decoder.remaining_handles();
8663            if let Some((inlined, num_bytes, num_handles)) =
8664                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8665            {
8666                let member_inline_size =
8667                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8668                if inlined != (member_inline_size <= 4) {
8669                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8670                }
8671                let inner_offset;
8672                let mut inner_depth = depth.clone();
8673                if inlined {
8674                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8675                    inner_offset = next_offset;
8676                } else {
8677                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8678                    inner_depth.increment()?;
8679                }
8680                let val_ref =
8681                    self.decoded_frame_rate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8682                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8683                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8684                {
8685                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8686                }
8687                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8688                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8689                }
8690            }
8691
8692            next_offset += envelope_size;
8693            _next_ordinal_to_read += 1;
8694            if next_offset >= end_offset {
8695                return Ok(());
8696            }
8697
8698            // Decode unknown envelopes for gaps in ordinals.
8699            while _next_ordinal_to_read < 3 {
8700                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8701                _next_ordinal_to_read += 1;
8702                next_offset += envelope_size;
8703            }
8704
8705            let next_out_of_line = decoder.next_out_of_line();
8706            let handles_before = decoder.remaining_handles();
8707            if let Some((inlined, num_bytes, num_handles)) =
8708                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8709            {
8710                let member_inline_size =
8711                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8712                if inlined != (member_inline_size <= 4) {
8713                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8714                }
8715                let inner_offset;
8716                let mut inner_depth = depth.clone();
8717                if inlined {
8718                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8719                    inner_offset = next_offset;
8720                } else {
8721                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8722                    inner_depth.increment()?;
8723                }
8724                let val_ref =
8725                    self.average_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
8726                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8727                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8728                {
8729                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8730                }
8731                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8732                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8733                }
8734            }
8735
8736            next_offset += envelope_size;
8737            _next_ordinal_to_read += 1;
8738            if next_offset >= end_offset {
8739                return Ok(());
8740            }
8741
8742            // Decode unknown envelopes for gaps in ordinals.
8743            while _next_ordinal_to_read < 4 {
8744                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8745                _next_ordinal_to_read += 1;
8746                next_offset += envelope_size;
8747            }
8748
8749            let next_out_of_line = decoder.next_out_of_line();
8750            let handles_before = decoder.remaining_handles();
8751            if let Some((inlined, num_bytes, num_handles)) =
8752                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8753            {
8754                let member_inline_size =
8755                    <EncodingType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8756                if inlined != (member_inline_size <= 4) {
8757                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8758                }
8759                let inner_offset;
8760                let mut inner_depth = depth.clone();
8761                if inlined {
8762                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8763                    inner_offset = next_offset;
8764                } else {
8765                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8766                    inner_depth.increment()?;
8767                }
8768                let val_ref =
8769                    self.encoding_type.get_or_insert_with(|| fidl::new_empty!(EncodingType, D));
8770                fidl::decode!(EncodingType, D, val_ref, decoder, inner_offset, inner_depth)?;
8771                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8772                {
8773                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8774                }
8775                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8776                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8777                }
8778            }
8779
8780            next_offset += envelope_size;
8781
8782            // Decode the remaining unknown envelopes.
8783            while next_offset < end_offset {
8784                _next_ordinal_to_read += 1;
8785                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8786                next_offset += envelope_size;
8787            }
8788
8789            Ok(())
8790        }
8791    }
8792
8793    impl Format {
8794        #[inline(always)]
8795        fn max_ordinal_present(&self) -> u64 {
8796            if let Some(_) = self.pcm_format {
8797                return 1;
8798            }
8799            0
8800        }
8801    }
8802
8803    impl fidl::encoding::ValueTypeMarker for Format {
8804        type Borrowed<'a> = &'a Self;
8805        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8806            value
8807        }
8808    }
8809
8810    unsafe impl fidl::encoding::TypeMarker for Format {
8811        type Owned = Self;
8812
8813        #[inline(always)]
8814        fn inline_align(_context: fidl::encoding::Context) -> usize {
8815            8
8816        }
8817
8818        #[inline(always)]
8819        fn inline_size(_context: fidl::encoding::Context) -> usize {
8820            16
8821        }
8822    }
8823
8824    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format, D> for &Format {
8825        unsafe fn encode(
8826            self,
8827            encoder: &mut fidl::encoding::Encoder<'_, D>,
8828            offset: usize,
8829            mut depth: fidl::encoding::Depth,
8830        ) -> fidl::Result<()> {
8831            encoder.debug_check_bounds::<Format>(offset);
8832            // Vector header
8833            let max_ordinal: u64 = self.max_ordinal_present();
8834            encoder.write_num(max_ordinal, offset);
8835            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8836            // Calling encoder.out_of_line_offset(0) is not allowed.
8837            if max_ordinal == 0 {
8838                return Ok(());
8839            }
8840            depth.increment()?;
8841            let envelope_size = 8;
8842            let bytes_len = max_ordinal as usize * envelope_size;
8843            #[allow(unused_variables)]
8844            let offset = encoder.out_of_line_offset(bytes_len);
8845            let mut _prev_end_offset: usize = 0;
8846            if 1 > max_ordinal {
8847                return Ok(());
8848            }
8849
8850            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8851            // are envelope_size bytes.
8852            let cur_offset: usize = (1 - 1) * envelope_size;
8853
8854            // Zero reserved fields.
8855            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8856
8857            // Safety:
8858            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8859            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8860            //   envelope_size bytes, there is always sufficient room.
8861            fidl::encoding::encode_in_envelope_optional::<PcmFormat, D>(
8862                self.pcm_format
8863                    .as_ref()
8864                    .map(<PcmFormat as fidl::encoding::ValueTypeMarker>::borrow),
8865                encoder,
8866                offset + cur_offset,
8867                depth,
8868            )?;
8869
8870            _prev_end_offset = cur_offset + envelope_size;
8871
8872            Ok(())
8873        }
8874    }
8875
8876    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
8877        #[inline(always)]
8878        fn new_empty() -> Self {
8879            Self::default()
8880        }
8881
8882        unsafe fn decode(
8883            &mut self,
8884            decoder: &mut fidl::encoding::Decoder<'_, D>,
8885            offset: usize,
8886            mut depth: fidl::encoding::Depth,
8887        ) -> fidl::Result<()> {
8888            decoder.debug_check_bounds::<Self>(offset);
8889            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8890                None => return Err(fidl::Error::NotNullable),
8891                Some(len) => len,
8892            };
8893            // Calling decoder.out_of_line_offset(0) is not allowed.
8894            if len == 0 {
8895                return Ok(());
8896            };
8897            depth.increment()?;
8898            let envelope_size = 8;
8899            let bytes_len = len * envelope_size;
8900            let offset = decoder.out_of_line_offset(bytes_len)?;
8901            // Decode the envelope for each type.
8902            let mut _next_ordinal_to_read = 0;
8903            let mut next_offset = offset;
8904            let end_offset = offset + bytes_len;
8905            _next_ordinal_to_read += 1;
8906            if next_offset >= end_offset {
8907                return Ok(());
8908            }
8909
8910            // Decode unknown envelopes for gaps in ordinals.
8911            while _next_ordinal_to_read < 1 {
8912                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8913                _next_ordinal_to_read += 1;
8914                next_offset += envelope_size;
8915            }
8916
8917            let next_out_of_line = decoder.next_out_of_line();
8918            let handles_before = decoder.remaining_handles();
8919            if let Some((inlined, num_bytes, num_handles)) =
8920                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8921            {
8922                let member_inline_size =
8923                    <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8924                if inlined != (member_inline_size <= 4) {
8925                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8926                }
8927                let inner_offset;
8928                let mut inner_depth = depth.clone();
8929                if inlined {
8930                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8931                    inner_offset = next_offset;
8932                } else {
8933                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8934                    inner_depth.increment()?;
8935                }
8936                let val_ref = self.pcm_format.get_or_insert_with(|| fidl::new_empty!(PcmFormat, D));
8937                fidl::decode!(PcmFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
8938                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8939                {
8940                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8941                }
8942                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8943                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8944                }
8945            }
8946
8947            next_offset += envelope_size;
8948
8949            // Decode the remaining unknown envelopes.
8950            while next_offset < end_offset {
8951                _next_ordinal_to_read += 1;
8952                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8953                next_offset += envelope_size;
8954            }
8955
8956            Ok(())
8957        }
8958    }
8959
8960    impl GainState {
8961        #[inline(always)]
8962        fn max_ordinal_present(&self) -> u64 {
8963            if let Some(_) = self.gain_db {
8964                return 3;
8965            }
8966            if let Some(_) = self.agc_enabled {
8967                return 2;
8968            }
8969            if let Some(_) = self.muted {
8970                return 1;
8971            }
8972            0
8973        }
8974    }
8975
8976    impl fidl::encoding::ValueTypeMarker for GainState {
8977        type Borrowed<'a> = &'a Self;
8978        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8979            value
8980        }
8981    }
8982
8983    unsafe impl fidl::encoding::TypeMarker for GainState {
8984        type Owned = Self;
8985
8986        #[inline(always)]
8987        fn inline_align(_context: fidl::encoding::Context) -> usize {
8988            8
8989        }
8990
8991        #[inline(always)]
8992        fn inline_size(_context: fidl::encoding::Context) -> usize {
8993            16
8994        }
8995    }
8996
8997    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainState, D>
8998        for &GainState
8999    {
9000        unsafe fn encode(
9001            self,
9002            encoder: &mut fidl::encoding::Encoder<'_, D>,
9003            offset: usize,
9004            mut depth: fidl::encoding::Depth,
9005        ) -> fidl::Result<()> {
9006            encoder.debug_check_bounds::<GainState>(offset);
9007            // Vector header
9008            let max_ordinal: u64 = self.max_ordinal_present();
9009            encoder.write_num(max_ordinal, offset);
9010            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9011            // Calling encoder.out_of_line_offset(0) is not allowed.
9012            if max_ordinal == 0 {
9013                return Ok(());
9014            }
9015            depth.increment()?;
9016            let envelope_size = 8;
9017            let bytes_len = max_ordinal as usize * envelope_size;
9018            #[allow(unused_variables)]
9019            let offset = encoder.out_of_line_offset(bytes_len);
9020            let mut _prev_end_offset: usize = 0;
9021            if 1 > max_ordinal {
9022                return Ok(());
9023            }
9024
9025            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9026            // are envelope_size bytes.
9027            let cur_offset: usize = (1 - 1) * envelope_size;
9028
9029            // Zero reserved fields.
9030            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9031
9032            // Safety:
9033            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9034            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9035            //   envelope_size bytes, there is always sufficient room.
9036            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9037                self.muted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9038                encoder,
9039                offset + cur_offset,
9040                depth,
9041            )?;
9042
9043            _prev_end_offset = cur_offset + envelope_size;
9044            if 2 > max_ordinal {
9045                return Ok(());
9046            }
9047
9048            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9049            // are envelope_size bytes.
9050            let cur_offset: usize = (2 - 1) * envelope_size;
9051
9052            // Zero reserved fields.
9053            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9054
9055            // Safety:
9056            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9057            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9058            //   envelope_size bytes, there is always sufficient room.
9059            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9060                self.agc_enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9061                encoder,
9062                offset + cur_offset,
9063                depth,
9064            )?;
9065
9066            _prev_end_offset = cur_offset + envelope_size;
9067            if 3 > max_ordinal {
9068                return Ok(());
9069            }
9070
9071            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9072            // are envelope_size bytes.
9073            let cur_offset: usize = (3 - 1) * envelope_size;
9074
9075            // Zero reserved fields.
9076            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9077
9078            // Safety:
9079            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9080            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9081            //   envelope_size bytes, there is always sufficient room.
9082            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9083                self.gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9084                encoder,
9085                offset + cur_offset,
9086                depth,
9087            )?;
9088
9089            _prev_end_offset = cur_offset + envelope_size;
9090
9091            Ok(())
9092        }
9093    }
9094
9095    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainState {
9096        #[inline(always)]
9097        fn new_empty() -> Self {
9098            Self::default()
9099        }
9100
9101        unsafe fn decode(
9102            &mut self,
9103            decoder: &mut fidl::encoding::Decoder<'_, D>,
9104            offset: usize,
9105            mut depth: fidl::encoding::Depth,
9106        ) -> fidl::Result<()> {
9107            decoder.debug_check_bounds::<Self>(offset);
9108            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9109                None => return Err(fidl::Error::NotNullable),
9110                Some(len) => len,
9111            };
9112            // Calling decoder.out_of_line_offset(0) is not allowed.
9113            if len == 0 {
9114                return Ok(());
9115            };
9116            depth.increment()?;
9117            let envelope_size = 8;
9118            let bytes_len = len * envelope_size;
9119            let offset = decoder.out_of_line_offset(bytes_len)?;
9120            // Decode the envelope for each type.
9121            let mut _next_ordinal_to_read = 0;
9122            let mut next_offset = offset;
9123            let end_offset = offset + bytes_len;
9124            _next_ordinal_to_read += 1;
9125            if next_offset >= end_offset {
9126                return Ok(());
9127            }
9128
9129            // Decode unknown envelopes for gaps in ordinals.
9130            while _next_ordinal_to_read < 1 {
9131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9132                _next_ordinal_to_read += 1;
9133                next_offset += envelope_size;
9134            }
9135
9136            let next_out_of_line = decoder.next_out_of_line();
9137            let handles_before = decoder.remaining_handles();
9138            if let Some((inlined, num_bytes, num_handles)) =
9139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9140            {
9141                let member_inline_size =
9142                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9143                if inlined != (member_inline_size <= 4) {
9144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9145                }
9146                let inner_offset;
9147                let mut inner_depth = depth.clone();
9148                if inlined {
9149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9150                    inner_offset = next_offset;
9151                } else {
9152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9153                    inner_depth.increment()?;
9154                }
9155                let val_ref = self.muted.get_or_insert_with(|| fidl::new_empty!(bool, D));
9156                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9158                {
9159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9160                }
9161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9163                }
9164            }
9165
9166            next_offset += envelope_size;
9167            _next_ordinal_to_read += 1;
9168            if next_offset >= end_offset {
9169                return Ok(());
9170            }
9171
9172            // Decode unknown envelopes for gaps in ordinals.
9173            while _next_ordinal_to_read < 2 {
9174                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9175                _next_ordinal_to_read += 1;
9176                next_offset += envelope_size;
9177            }
9178
9179            let next_out_of_line = decoder.next_out_of_line();
9180            let handles_before = decoder.remaining_handles();
9181            if let Some((inlined, num_bytes, num_handles)) =
9182                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9183            {
9184                let member_inline_size =
9185                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9186                if inlined != (member_inline_size <= 4) {
9187                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9188                }
9189                let inner_offset;
9190                let mut inner_depth = depth.clone();
9191                if inlined {
9192                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9193                    inner_offset = next_offset;
9194                } else {
9195                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9196                    inner_depth.increment()?;
9197                }
9198                let val_ref = self.agc_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
9199                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9200                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9201                {
9202                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9203                }
9204                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9205                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9206                }
9207            }
9208
9209            next_offset += envelope_size;
9210            _next_ordinal_to_read += 1;
9211            if next_offset >= end_offset {
9212                return Ok(());
9213            }
9214
9215            // Decode unknown envelopes for gaps in ordinals.
9216            while _next_ordinal_to_read < 3 {
9217                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9218                _next_ordinal_to_read += 1;
9219                next_offset += envelope_size;
9220            }
9221
9222            let next_out_of_line = decoder.next_out_of_line();
9223            let handles_before = decoder.remaining_handles();
9224            if let Some((inlined, num_bytes, num_handles)) =
9225                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9226            {
9227                let member_inline_size =
9228                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9229                if inlined != (member_inline_size <= 4) {
9230                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9231                }
9232                let inner_offset;
9233                let mut inner_depth = depth.clone();
9234                if inlined {
9235                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9236                    inner_offset = next_offset;
9237                } else {
9238                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9239                    inner_depth.increment()?;
9240                }
9241                let val_ref = self.gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9242                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9243                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9244                {
9245                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9246                }
9247                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9248                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9249                }
9250            }
9251
9252            next_offset += envelope_size;
9253
9254            // Decode the remaining unknown envelopes.
9255            while next_offset < end_offset {
9256                _next_ordinal_to_read += 1;
9257                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9258                next_offset += envelope_size;
9259            }
9260
9261            Ok(())
9262        }
9263    }
9264
9265    impl HealthState {
9266        #[inline(always)]
9267        fn max_ordinal_present(&self) -> u64 {
9268            if let Some(_) = self.healthy {
9269                return 1;
9270            }
9271            0
9272        }
9273    }
9274
9275    impl fidl::encoding::ValueTypeMarker for HealthState {
9276        type Borrowed<'a> = &'a Self;
9277        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9278            value
9279        }
9280    }
9281
9282    unsafe impl fidl::encoding::TypeMarker for HealthState {
9283        type Owned = Self;
9284
9285        #[inline(always)]
9286        fn inline_align(_context: fidl::encoding::Context) -> usize {
9287            8
9288        }
9289
9290        #[inline(always)]
9291        fn inline_size(_context: fidl::encoding::Context) -> usize {
9292            16
9293        }
9294    }
9295
9296    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthState, D>
9297        for &HealthState
9298    {
9299        unsafe fn encode(
9300            self,
9301            encoder: &mut fidl::encoding::Encoder<'_, D>,
9302            offset: usize,
9303            mut depth: fidl::encoding::Depth,
9304        ) -> fidl::Result<()> {
9305            encoder.debug_check_bounds::<HealthState>(offset);
9306            // Vector header
9307            let max_ordinal: u64 = self.max_ordinal_present();
9308            encoder.write_num(max_ordinal, offset);
9309            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9310            // Calling encoder.out_of_line_offset(0) is not allowed.
9311            if max_ordinal == 0 {
9312                return Ok(());
9313            }
9314            depth.increment()?;
9315            let envelope_size = 8;
9316            let bytes_len = max_ordinal as usize * envelope_size;
9317            #[allow(unused_variables)]
9318            let offset = encoder.out_of_line_offset(bytes_len);
9319            let mut _prev_end_offset: usize = 0;
9320            if 1 > max_ordinal {
9321                return Ok(());
9322            }
9323
9324            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9325            // are envelope_size bytes.
9326            let cur_offset: usize = (1 - 1) * envelope_size;
9327
9328            // Zero reserved fields.
9329            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9330
9331            // Safety:
9332            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9333            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9334            //   envelope_size bytes, there is always sufficient room.
9335            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9336                self.healthy.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9337                encoder,
9338                offset + cur_offset,
9339                depth,
9340            )?;
9341
9342            _prev_end_offset = cur_offset + envelope_size;
9343
9344            Ok(())
9345        }
9346    }
9347
9348    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthState {
9349        #[inline(always)]
9350        fn new_empty() -> Self {
9351            Self::default()
9352        }
9353
9354        unsafe fn decode(
9355            &mut self,
9356            decoder: &mut fidl::encoding::Decoder<'_, D>,
9357            offset: usize,
9358            mut depth: fidl::encoding::Depth,
9359        ) -> fidl::Result<()> {
9360            decoder.debug_check_bounds::<Self>(offset);
9361            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9362                None => return Err(fidl::Error::NotNullable),
9363                Some(len) => len,
9364            };
9365            // Calling decoder.out_of_line_offset(0) is not allowed.
9366            if len == 0 {
9367                return Ok(());
9368            };
9369            depth.increment()?;
9370            let envelope_size = 8;
9371            let bytes_len = len * envelope_size;
9372            let offset = decoder.out_of_line_offset(bytes_len)?;
9373            // Decode the envelope for each type.
9374            let mut _next_ordinal_to_read = 0;
9375            let mut next_offset = offset;
9376            let end_offset = offset + bytes_len;
9377            _next_ordinal_to_read += 1;
9378            if next_offset >= end_offset {
9379                return Ok(());
9380            }
9381
9382            // Decode unknown envelopes for gaps in ordinals.
9383            while _next_ordinal_to_read < 1 {
9384                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9385                _next_ordinal_to_read += 1;
9386                next_offset += envelope_size;
9387            }
9388
9389            let next_out_of_line = decoder.next_out_of_line();
9390            let handles_before = decoder.remaining_handles();
9391            if let Some((inlined, num_bytes, num_handles)) =
9392                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9393            {
9394                let member_inline_size =
9395                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9396                if inlined != (member_inline_size <= 4) {
9397                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9398                }
9399                let inner_offset;
9400                let mut inner_depth = depth.clone();
9401                if inlined {
9402                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9403                    inner_offset = next_offset;
9404                } else {
9405                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9406                    inner_depth.increment()?;
9407                }
9408                let val_ref = self.healthy.get_or_insert_with(|| fidl::new_empty!(bool, D));
9409                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9410                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9411                {
9412                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9413                }
9414                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9415                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9416                }
9417            }
9418
9419            next_offset += envelope_size;
9420
9421            // Decode the remaining unknown envelopes.
9422            while next_offset < end_offset {
9423                _next_ordinal_to_read += 1;
9424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9425                next_offset += envelope_size;
9426            }
9427
9428            Ok(())
9429        }
9430    }
9431
9432    impl PacketStreamProperties {
9433        #[inline(always)]
9434        fn max_ordinal_present(&self) -> u64 {
9435            if let Some(_) = self.supported_buffer_types {
9436                return 2;
9437            }
9438            if let Some(_) = self.needs_cache_flush_or_invalidate {
9439                return 1;
9440            }
9441            0
9442        }
9443    }
9444
9445    impl fidl::encoding::ValueTypeMarker for PacketStreamProperties {
9446        type Borrowed<'a> = &'a Self;
9447        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9448            value
9449        }
9450    }
9451
9452    unsafe impl fidl::encoding::TypeMarker for PacketStreamProperties {
9453        type Owned = Self;
9454
9455        #[inline(always)]
9456        fn inline_align(_context: fidl::encoding::Context) -> usize {
9457            8
9458        }
9459
9460        #[inline(always)]
9461        fn inline_size(_context: fidl::encoding::Context) -> usize {
9462            16
9463        }
9464    }
9465
9466    unsafe impl<D: fidl::encoding::ResourceDialect>
9467        fidl::encoding::Encode<PacketStreamProperties, D> for &PacketStreamProperties
9468    {
9469        unsafe fn encode(
9470            self,
9471            encoder: &mut fidl::encoding::Encoder<'_, D>,
9472            offset: usize,
9473            mut depth: fidl::encoding::Depth,
9474        ) -> fidl::Result<()> {
9475            encoder.debug_check_bounds::<PacketStreamProperties>(offset);
9476            // Vector header
9477            let max_ordinal: u64 = self.max_ordinal_present();
9478            encoder.write_num(max_ordinal, offset);
9479            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9480            // Calling encoder.out_of_line_offset(0) is not allowed.
9481            if max_ordinal == 0 {
9482                return Ok(());
9483            }
9484            depth.increment()?;
9485            let envelope_size = 8;
9486            let bytes_len = max_ordinal as usize * envelope_size;
9487            #[allow(unused_variables)]
9488            let offset = encoder.out_of_line_offset(bytes_len);
9489            let mut _prev_end_offset: usize = 0;
9490            if 1 > max_ordinal {
9491                return Ok(());
9492            }
9493
9494            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9495            // are envelope_size bytes.
9496            let cur_offset: usize = (1 - 1) * envelope_size;
9497
9498            // Zero reserved fields.
9499            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9500
9501            // Safety:
9502            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9503            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9504            //   envelope_size bytes, there is always sufficient room.
9505            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9506                self.needs_cache_flush_or_invalidate
9507                    .as_ref()
9508                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9509                encoder,
9510                offset + cur_offset,
9511                depth,
9512            )?;
9513
9514            _prev_end_offset = cur_offset + envelope_size;
9515            if 2 > max_ordinal {
9516                return Ok(());
9517            }
9518
9519            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9520            // are envelope_size bytes.
9521            let cur_offset: usize = (2 - 1) * envelope_size;
9522
9523            // Zero reserved fields.
9524            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9525
9526            // Safety:
9527            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9528            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9529            //   envelope_size bytes, there is always sufficient room.
9530            fidl::encoding::encode_in_envelope_optional::<BufferType, D>(
9531                self.supported_buffer_types
9532                    .as_ref()
9533                    .map(<BufferType as fidl::encoding::ValueTypeMarker>::borrow),
9534                encoder,
9535                offset + cur_offset,
9536                depth,
9537            )?;
9538
9539            _prev_end_offset = cur_offset + envelope_size;
9540
9541            Ok(())
9542        }
9543    }
9544
9545    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9546        for PacketStreamProperties
9547    {
9548        #[inline(always)]
9549        fn new_empty() -> Self {
9550            Self::default()
9551        }
9552
9553        unsafe fn decode(
9554            &mut self,
9555            decoder: &mut fidl::encoding::Decoder<'_, D>,
9556            offset: usize,
9557            mut depth: fidl::encoding::Depth,
9558        ) -> fidl::Result<()> {
9559            decoder.debug_check_bounds::<Self>(offset);
9560            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9561                None => return Err(fidl::Error::NotNullable),
9562                Some(len) => len,
9563            };
9564            // Calling decoder.out_of_line_offset(0) is not allowed.
9565            if len == 0 {
9566                return Ok(());
9567            };
9568            depth.increment()?;
9569            let envelope_size = 8;
9570            let bytes_len = len * envelope_size;
9571            let offset = decoder.out_of_line_offset(bytes_len)?;
9572            // Decode the envelope for each type.
9573            let mut _next_ordinal_to_read = 0;
9574            let mut next_offset = offset;
9575            let end_offset = offset + bytes_len;
9576            _next_ordinal_to_read += 1;
9577            if next_offset >= end_offset {
9578                return Ok(());
9579            }
9580
9581            // Decode unknown envelopes for gaps in ordinals.
9582            while _next_ordinal_to_read < 1 {
9583                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9584                _next_ordinal_to_read += 1;
9585                next_offset += envelope_size;
9586            }
9587
9588            let next_out_of_line = decoder.next_out_of_line();
9589            let handles_before = decoder.remaining_handles();
9590            if let Some((inlined, num_bytes, num_handles)) =
9591                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9592            {
9593                let member_inline_size =
9594                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9595                if inlined != (member_inline_size <= 4) {
9596                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9597                }
9598                let inner_offset;
9599                let mut inner_depth = depth.clone();
9600                if inlined {
9601                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9602                    inner_offset = next_offset;
9603                } else {
9604                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9605                    inner_depth.increment()?;
9606                }
9607                let val_ref = self
9608                    .needs_cache_flush_or_invalidate
9609                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
9610                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9611                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9612                {
9613                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9614                }
9615                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9616                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9617                }
9618            }
9619
9620            next_offset += envelope_size;
9621            _next_ordinal_to_read += 1;
9622            if next_offset >= end_offset {
9623                return Ok(());
9624            }
9625
9626            // Decode unknown envelopes for gaps in ordinals.
9627            while _next_ordinal_to_read < 2 {
9628                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9629                _next_ordinal_to_read += 1;
9630                next_offset += envelope_size;
9631            }
9632
9633            let next_out_of_line = decoder.next_out_of_line();
9634            let handles_before = decoder.remaining_handles();
9635            if let Some((inlined, num_bytes, num_handles)) =
9636                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9637            {
9638                let member_inline_size =
9639                    <BufferType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9640                if inlined != (member_inline_size <= 4) {
9641                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9642                }
9643                let inner_offset;
9644                let mut inner_depth = depth.clone();
9645                if inlined {
9646                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9647                    inner_offset = next_offset;
9648                } else {
9649                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9650                    inner_depth.increment()?;
9651                }
9652                let val_ref = self
9653                    .supported_buffer_types
9654                    .get_or_insert_with(|| fidl::new_empty!(BufferType, D));
9655                fidl::decode!(BufferType, D, val_ref, decoder, inner_offset, inner_depth)?;
9656                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9657                {
9658                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9659                }
9660                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9661                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9662                }
9663            }
9664
9665            next_offset += envelope_size;
9666
9667            // Decode the remaining unknown envelopes.
9668            while next_offset < end_offset {
9669                _next_ordinal_to_read += 1;
9670                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9671                next_offset += envelope_size;
9672            }
9673
9674            Ok(())
9675        }
9676    }
9677
9678    impl PacketStreamSinkPutPacketResponse {
9679        #[inline(always)]
9680        fn max_ordinal_present(&self) -> u64 {
9681            0
9682        }
9683    }
9684
9685    impl fidl::encoding::ValueTypeMarker for PacketStreamSinkPutPacketResponse {
9686        type Borrowed<'a> = &'a Self;
9687        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9688            value
9689        }
9690    }
9691
9692    unsafe impl fidl::encoding::TypeMarker for PacketStreamSinkPutPacketResponse {
9693        type Owned = Self;
9694
9695        #[inline(always)]
9696        fn inline_align(_context: fidl::encoding::Context) -> usize {
9697            8
9698        }
9699
9700        #[inline(always)]
9701        fn inline_size(_context: fidl::encoding::Context) -> usize {
9702            16
9703        }
9704    }
9705
9706    unsafe impl<D: fidl::encoding::ResourceDialect>
9707        fidl::encoding::Encode<PacketStreamSinkPutPacketResponse, D>
9708        for &PacketStreamSinkPutPacketResponse
9709    {
9710        unsafe fn encode(
9711            self,
9712            encoder: &mut fidl::encoding::Encoder<'_, D>,
9713            offset: usize,
9714            mut depth: fidl::encoding::Depth,
9715        ) -> fidl::Result<()> {
9716            encoder.debug_check_bounds::<PacketStreamSinkPutPacketResponse>(offset);
9717            // Vector header
9718            let max_ordinal: u64 = self.max_ordinal_present();
9719            encoder.write_num(max_ordinal, offset);
9720            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9721            // Calling encoder.out_of_line_offset(0) is not allowed.
9722            if max_ordinal == 0 {
9723                return Ok(());
9724            }
9725            depth.increment()?;
9726            let envelope_size = 8;
9727            let bytes_len = max_ordinal as usize * envelope_size;
9728            #[allow(unused_variables)]
9729            let offset = encoder.out_of_line_offset(bytes_len);
9730            let mut _prev_end_offset: usize = 0;
9731
9732            Ok(())
9733        }
9734    }
9735
9736    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9737        for PacketStreamSinkPutPacketResponse
9738    {
9739        #[inline(always)]
9740        fn new_empty() -> Self {
9741            Self::default()
9742        }
9743
9744        unsafe fn decode(
9745            &mut self,
9746            decoder: &mut fidl::encoding::Decoder<'_, D>,
9747            offset: usize,
9748            mut depth: fidl::encoding::Depth,
9749        ) -> fidl::Result<()> {
9750            decoder.debug_check_bounds::<Self>(offset);
9751            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9752                None => return Err(fidl::Error::NotNullable),
9753                Some(len) => len,
9754            };
9755            // Calling decoder.out_of_line_offset(0) is not allowed.
9756            if len == 0 {
9757                return Ok(());
9758            };
9759            depth.increment()?;
9760            let envelope_size = 8;
9761            let bytes_len = len * envelope_size;
9762            let offset = decoder.out_of_line_offset(bytes_len)?;
9763            // Decode the envelope for each type.
9764            let mut _next_ordinal_to_read = 0;
9765            let mut next_offset = offset;
9766            let end_offset = offset + bytes_len;
9767
9768            // Decode the remaining unknown envelopes.
9769            while next_offset < end_offset {
9770                _next_ordinal_to_read += 1;
9771                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9772                next_offset += envelope_size;
9773            }
9774
9775            Ok(())
9776        }
9777    }
9778
9779    impl PcmSupportedFormats {
9780        #[inline(always)]
9781        fn max_ordinal_present(&self) -> u64 {
9782            if let Some(_) = self.frame_rates {
9783                return 5;
9784            }
9785            if let Some(_) = self.valid_bits_per_sample {
9786                return 4;
9787            }
9788            if let Some(_) = self.bytes_per_sample {
9789                return 3;
9790            }
9791            if let Some(_) = self.sample_formats {
9792                return 2;
9793            }
9794            if let Some(_) = self.channel_sets {
9795                return 1;
9796            }
9797            0
9798        }
9799    }
9800
9801    impl fidl::encoding::ValueTypeMarker for PcmSupportedFormats {
9802        type Borrowed<'a> = &'a Self;
9803        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9804            value
9805        }
9806    }
9807
9808    unsafe impl fidl::encoding::TypeMarker for PcmSupportedFormats {
9809        type Owned = Self;
9810
9811        #[inline(always)]
9812        fn inline_align(_context: fidl::encoding::Context) -> usize {
9813            8
9814        }
9815
9816        #[inline(always)]
9817        fn inline_size(_context: fidl::encoding::Context) -> usize {
9818            16
9819        }
9820    }
9821
9822    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmSupportedFormats, D>
9823        for &PcmSupportedFormats
9824    {
9825        unsafe fn encode(
9826            self,
9827            encoder: &mut fidl::encoding::Encoder<'_, D>,
9828            offset: usize,
9829            mut depth: fidl::encoding::Depth,
9830        ) -> fidl::Result<()> {
9831            encoder.debug_check_bounds::<PcmSupportedFormats>(offset);
9832            // Vector header
9833            let max_ordinal: u64 = self.max_ordinal_present();
9834            encoder.write_num(max_ordinal, offset);
9835            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9836            // Calling encoder.out_of_line_offset(0) is not allowed.
9837            if max_ordinal == 0 {
9838                return Ok(());
9839            }
9840            depth.increment()?;
9841            let envelope_size = 8;
9842            let bytes_len = max_ordinal as usize * envelope_size;
9843            #[allow(unused_variables)]
9844            let offset = encoder.out_of_line_offset(bytes_len);
9845            let mut _prev_end_offset: usize = 0;
9846            if 1 > max_ordinal {
9847                return Ok(());
9848            }
9849
9850            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9851            // are envelope_size bytes.
9852            let cur_offset: usize = (1 - 1) * envelope_size;
9853
9854            // Zero reserved fields.
9855            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9856
9857            // Safety:
9858            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9859            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9860            //   envelope_size bytes, there is always sufficient room.
9861            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
9862            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
9863            encoder, offset + cur_offset, depth
9864        )?;
9865
9866            _prev_end_offset = cur_offset + envelope_size;
9867            if 2 > max_ordinal {
9868                return Ok(());
9869            }
9870
9871            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9872            // are envelope_size bytes.
9873            let cur_offset: usize = (2 - 1) * envelope_size;
9874
9875            // Zero reserved fields.
9876            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9877
9878            // Safety:
9879            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9880            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9881            //   envelope_size bytes, there is always sufficient room.
9882            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleFormat, 3>, D>(
9883            self.sample_formats.as_ref().map(<fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::ValueTypeMarker>::borrow),
9884            encoder, offset + cur_offset, depth
9885        )?;
9886
9887            _prev_end_offset = cur_offset + envelope_size;
9888            if 3 > max_ordinal {
9889                return Ok(());
9890            }
9891
9892            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9893            // are envelope_size bytes.
9894            let cur_offset: usize = (3 - 1) * envelope_size;
9895
9896            // Zero reserved fields.
9897            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9898
9899            // Safety:
9900            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9901            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9902            //   envelope_size bytes, there is always sufficient room.
9903            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9904                self.bytes_per_sample.as_ref().map(
9905                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9906                ),
9907                encoder,
9908                offset + cur_offset,
9909                depth,
9910            )?;
9911
9912            _prev_end_offset = cur_offset + envelope_size;
9913            if 4 > max_ordinal {
9914                return Ok(());
9915            }
9916
9917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9918            // are envelope_size bytes.
9919            let cur_offset: usize = (4 - 1) * envelope_size;
9920
9921            // Zero reserved fields.
9922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9923
9924            // Safety:
9925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9927            //   envelope_size bytes, there is always sufficient room.
9928            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
9929                self.valid_bits_per_sample.as_ref().map(
9930                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
9931                ),
9932                encoder,
9933                offset + cur_offset,
9934                depth,
9935            )?;
9936
9937            _prev_end_offset = cur_offset + envelope_size;
9938            if 5 > max_ordinal {
9939                return Ok(());
9940            }
9941
9942            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9943            // are envelope_size bytes.
9944            let cur_offset: usize = (5 - 1) * envelope_size;
9945
9946            // Zero reserved fields.
9947            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9948
9949            // Safety:
9950            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9951            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9952            //   envelope_size bytes, there is always sufficient room.
9953            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
9954                self.frame_rates.as_ref().map(
9955                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
9956                ),
9957                encoder,
9958                offset + cur_offset,
9959                depth,
9960            )?;
9961
9962            _prev_end_offset = cur_offset + envelope_size;
9963
9964            Ok(())
9965        }
9966    }
9967
9968    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmSupportedFormats {
9969        #[inline(always)]
9970        fn new_empty() -> Self {
9971            Self::default()
9972        }
9973
9974        unsafe fn decode(
9975            &mut self,
9976            decoder: &mut fidl::encoding::Decoder<'_, D>,
9977            offset: usize,
9978            mut depth: fidl::encoding::Depth,
9979        ) -> fidl::Result<()> {
9980            decoder.debug_check_bounds::<Self>(offset);
9981            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9982                None => return Err(fidl::Error::NotNullable),
9983                Some(len) => len,
9984            };
9985            // Calling decoder.out_of_line_offset(0) is not allowed.
9986            if len == 0 {
9987                return Ok(());
9988            };
9989            depth.increment()?;
9990            let envelope_size = 8;
9991            let bytes_len = len * envelope_size;
9992            let offset = decoder.out_of_line_offset(bytes_len)?;
9993            // Decode the envelope for each type.
9994            let mut _next_ordinal_to_read = 0;
9995            let mut next_offset = offset;
9996            let end_offset = offset + bytes_len;
9997            _next_ordinal_to_read += 1;
9998            if next_offset >= end_offset {
9999                return Ok(());
10000            }
10001
10002            // Decode unknown envelopes for gaps in ordinals.
10003            while _next_ordinal_to_read < 1 {
10004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10005                _next_ordinal_to_read += 1;
10006                next_offset += envelope_size;
10007            }
10008
10009            let next_out_of_line = decoder.next_out_of_line();
10010            let handles_before = decoder.remaining_handles();
10011            if let Some((inlined, num_bytes, num_handles)) =
10012                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10013            {
10014                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10015                if inlined != (member_inline_size <= 4) {
10016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10017                }
10018                let inner_offset;
10019                let mut inner_depth = depth.clone();
10020                if inlined {
10021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10022                    inner_offset = next_offset;
10023                } else {
10024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10025                    inner_depth.increment()?;
10026                }
10027                let val_ref = self.channel_sets.get_or_insert_with(
10028                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
10029                );
10030                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10031                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10032                {
10033                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10034                }
10035                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10036                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10037                }
10038            }
10039
10040            next_offset += envelope_size;
10041            _next_ordinal_to_read += 1;
10042            if next_offset >= end_offset {
10043                return Ok(());
10044            }
10045
10046            // Decode unknown envelopes for gaps in ordinals.
10047            while _next_ordinal_to_read < 2 {
10048                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10049                _next_ordinal_to_read += 1;
10050                next_offset += envelope_size;
10051            }
10052
10053            let next_out_of_line = decoder.next_out_of_line();
10054            let handles_before = decoder.remaining_handles();
10055            if let Some((inlined, num_bytes, num_handles)) =
10056                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10057            {
10058                let member_inline_size = <fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10059                if inlined != (member_inline_size <= 4) {
10060                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10061                }
10062                let inner_offset;
10063                let mut inner_depth = depth.clone();
10064                if inlined {
10065                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10066                    inner_offset = next_offset;
10067                } else {
10068                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10069                    inner_depth.increment()?;
10070                }
10071                let val_ref = self.sample_formats.get_or_insert_with(
10072                    || fidl::new_empty!(fidl::encoding::Vector<SampleFormat, 3>, D),
10073                );
10074                fidl::decode!(fidl::encoding::Vector<SampleFormat, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
10075                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10076                {
10077                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10078                }
10079                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10080                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10081                }
10082            }
10083
10084            next_offset += envelope_size;
10085            _next_ordinal_to_read += 1;
10086            if next_offset >= end_offset {
10087                return Ok(());
10088            }
10089
10090            // Decode unknown envelopes for gaps in ordinals.
10091            while _next_ordinal_to_read < 3 {
10092                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10093                _next_ordinal_to_read += 1;
10094                next_offset += envelope_size;
10095            }
10096
10097            let next_out_of_line = decoder.next_out_of_line();
10098            let handles_before = decoder.remaining_handles();
10099            if let Some((inlined, num_bytes, num_handles)) =
10100                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10101            {
10102                let member_inline_size =
10103                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10104                        decoder.context,
10105                    );
10106                if inlined != (member_inline_size <= 4) {
10107                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10108                }
10109                let inner_offset;
10110                let mut inner_depth = depth.clone();
10111                if inlined {
10112                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10113                    inner_offset = next_offset;
10114                } else {
10115                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10116                    inner_depth.increment()?;
10117                }
10118                let val_ref = self
10119                    .bytes_per_sample
10120                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10121                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10122                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10123                {
10124                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10125                }
10126                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10127                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10128                }
10129            }
10130
10131            next_offset += envelope_size;
10132            _next_ordinal_to_read += 1;
10133            if next_offset >= end_offset {
10134                return Ok(());
10135            }
10136
10137            // Decode unknown envelopes for gaps in ordinals.
10138            while _next_ordinal_to_read < 4 {
10139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10140                _next_ordinal_to_read += 1;
10141                next_offset += envelope_size;
10142            }
10143
10144            let next_out_of_line = decoder.next_out_of_line();
10145            let handles_before = decoder.remaining_handles();
10146            if let Some((inlined, num_bytes, num_handles)) =
10147                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10148            {
10149                let member_inline_size =
10150                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
10151                        decoder.context,
10152                    );
10153                if inlined != (member_inline_size <= 4) {
10154                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10155                }
10156                let inner_offset;
10157                let mut inner_depth = depth.clone();
10158                if inlined {
10159                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10160                    inner_offset = next_offset;
10161                } else {
10162                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10163                    inner_depth.increment()?;
10164                }
10165                let val_ref = self
10166                    .valid_bits_per_sample
10167                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
10168                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
10169                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10170                {
10171                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10172                }
10173                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10174                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10175                }
10176            }
10177
10178            next_offset += envelope_size;
10179            _next_ordinal_to_read += 1;
10180            if next_offset >= end_offset {
10181                return Ok(());
10182            }
10183
10184            // Decode unknown envelopes for gaps in ordinals.
10185            while _next_ordinal_to_read < 5 {
10186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10187                _next_ordinal_to_read += 1;
10188                next_offset += envelope_size;
10189            }
10190
10191            let next_out_of_line = decoder.next_out_of_line();
10192            let handles_before = decoder.remaining_handles();
10193            if let Some((inlined, num_bytes, num_handles)) =
10194                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10195            {
10196                let member_inline_size =
10197                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
10198                        decoder.context,
10199                    );
10200                if inlined != (member_inline_size <= 4) {
10201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10202                }
10203                let inner_offset;
10204                let mut inner_depth = depth.clone();
10205                if inlined {
10206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10207                    inner_offset = next_offset;
10208                } else {
10209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10210                    inner_depth.increment()?;
10211                }
10212                let val_ref = self
10213                    .frame_rates
10214                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
10215                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
10216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10217                {
10218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10219                }
10220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10222                }
10223            }
10224
10225            next_offset += envelope_size;
10226
10227            // Decode the remaining unknown envelopes.
10228            while next_offset < end_offset {
10229                _next_ordinal_to_read += 1;
10230                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10231                next_offset += envelope_size;
10232            }
10233
10234            Ok(())
10235        }
10236    }
10237
10238    impl PlugState {
10239        #[inline(always)]
10240        fn max_ordinal_present(&self) -> u64 {
10241            if let Some(_) = self.plug_state_time {
10242                return 2;
10243            }
10244            if let Some(_) = self.plugged {
10245                return 1;
10246            }
10247            0
10248        }
10249    }
10250
10251    impl fidl::encoding::ValueTypeMarker for PlugState {
10252        type Borrowed<'a> = &'a Self;
10253        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10254            value
10255        }
10256    }
10257
10258    unsafe impl fidl::encoding::TypeMarker for PlugState {
10259        type Owned = Self;
10260
10261        #[inline(always)]
10262        fn inline_align(_context: fidl::encoding::Context) -> usize {
10263            8
10264        }
10265
10266        #[inline(always)]
10267        fn inline_size(_context: fidl::encoding::Context) -> usize {
10268            16
10269        }
10270    }
10271
10272    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugState, D>
10273        for &PlugState
10274    {
10275        unsafe fn encode(
10276            self,
10277            encoder: &mut fidl::encoding::Encoder<'_, D>,
10278            offset: usize,
10279            mut depth: fidl::encoding::Depth,
10280        ) -> fidl::Result<()> {
10281            encoder.debug_check_bounds::<PlugState>(offset);
10282            // Vector header
10283            let max_ordinal: u64 = self.max_ordinal_present();
10284            encoder.write_num(max_ordinal, offset);
10285            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10286            // Calling encoder.out_of_line_offset(0) is not allowed.
10287            if max_ordinal == 0 {
10288                return Ok(());
10289            }
10290            depth.increment()?;
10291            let envelope_size = 8;
10292            let bytes_len = max_ordinal as usize * envelope_size;
10293            #[allow(unused_variables)]
10294            let offset = encoder.out_of_line_offset(bytes_len);
10295            let mut _prev_end_offset: usize = 0;
10296            if 1 > max_ordinal {
10297                return Ok(());
10298            }
10299
10300            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10301            // are envelope_size bytes.
10302            let cur_offset: usize = (1 - 1) * envelope_size;
10303
10304            // Zero reserved fields.
10305            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10306
10307            // Safety:
10308            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10309            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10310            //   envelope_size bytes, there is always sufficient room.
10311            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10312                self.plugged.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10313                encoder,
10314                offset + cur_offset,
10315                depth,
10316            )?;
10317
10318            _prev_end_offset = cur_offset + envelope_size;
10319            if 2 > max_ordinal {
10320                return Ok(());
10321            }
10322
10323            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10324            // are envelope_size bytes.
10325            let cur_offset: usize = (2 - 1) * envelope_size;
10326
10327            // Zero reserved fields.
10328            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10329
10330            // Safety:
10331            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10332            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10333            //   envelope_size bytes, there is always sufficient room.
10334            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10335                self.plug_state_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10336                encoder,
10337                offset + cur_offset,
10338                depth,
10339            )?;
10340
10341            _prev_end_offset = cur_offset + envelope_size;
10342
10343            Ok(())
10344        }
10345    }
10346
10347    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugState {
10348        #[inline(always)]
10349        fn new_empty() -> Self {
10350            Self::default()
10351        }
10352
10353        unsafe fn decode(
10354            &mut self,
10355            decoder: &mut fidl::encoding::Decoder<'_, D>,
10356            offset: usize,
10357            mut depth: fidl::encoding::Depth,
10358        ) -> fidl::Result<()> {
10359            decoder.debug_check_bounds::<Self>(offset);
10360            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10361                None => return Err(fidl::Error::NotNullable),
10362                Some(len) => len,
10363            };
10364            // Calling decoder.out_of_line_offset(0) is not allowed.
10365            if len == 0 {
10366                return Ok(());
10367            };
10368            depth.increment()?;
10369            let envelope_size = 8;
10370            let bytes_len = len * envelope_size;
10371            let offset = decoder.out_of_line_offset(bytes_len)?;
10372            // Decode the envelope for each type.
10373            let mut _next_ordinal_to_read = 0;
10374            let mut next_offset = offset;
10375            let end_offset = offset + bytes_len;
10376            _next_ordinal_to_read += 1;
10377            if next_offset >= end_offset {
10378                return Ok(());
10379            }
10380
10381            // Decode unknown envelopes for gaps in ordinals.
10382            while _next_ordinal_to_read < 1 {
10383                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10384                _next_ordinal_to_read += 1;
10385                next_offset += envelope_size;
10386            }
10387
10388            let next_out_of_line = decoder.next_out_of_line();
10389            let handles_before = decoder.remaining_handles();
10390            if let Some((inlined, num_bytes, num_handles)) =
10391                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10392            {
10393                let member_inline_size =
10394                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10395                if inlined != (member_inline_size <= 4) {
10396                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10397                }
10398                let inner_offset;
10399                let mut inner_depth = depth.clone();
10400                if inlined {
10401                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10402                    inner_offset = next_offset;
10403                } else {
10404                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10405                    inner_depth.increment()?;
10406                }
10407                let val_ref = self.plugged.get_or_insert_with(|| fidl::new_empty!(bool, D));
10408                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10410                {
10411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10412                }
10413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10415                }
10416            }
10417
10418            next_offset += envelope_size;
10419            _next_ordinal_to_read += 1;
10420            if next_offset >= end_offset {
10421                return Ok(());
10422            }
10423
10424            // Decode unknown envelopes for gaps in ordinals.
10425            while _next_ordinal_to_read < 2 {
10426                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10427                _next_ordinal_to_read += 1;
10428                next_offset += envelope_size;
10429            }
10430
10431            let next_out_of_line = decoder.next_out_of_line();
10432            let handles_before = decoder.remaining_handles();
10433            if let Some((inlined, num_bytes, num_handles)) =
10434                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10435            {
10436                let member_inline_size =
10437                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10438                if inlined != (member_inline_size <= 4) {
10439                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10440                }
10441                let inner_offset;
10442                let mut inner_depth = depth.clone();
10443                if inlined {
10444                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10445                    inner_offset = next_offset;
10446                } else {
10447                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10448                    inner_depth.increment()?;
10449                }
10450                let val_ref = self.plug_state_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
10451                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10452                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10453                {
10454                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10455                }
10456                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10457                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10458                }
10459            }
10460
10461            next_offset += envelope_size;
10462
10463            // Decode the remaining unknown envelopes.
10464            while next_offset < end_offset {
10465                _next_ordinal_to_read += 1;
10466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10467                next_offset += envelope_size;
10468            }
10469
10470            Ok(())
10471        }
10472    }
10473
10474    impl RingBufferProperties {
10475        #[inline(always)]
10476        fn max_ordinal_present(&self) -> u64 {
10477            if let Some(_) = self.driver_transfer_bytes {
10478                return 5;
10479            }
10480            if let Some(_) = self.turn_on_delay {
10481                return 4;
10482            }
10483            if let Some(_) = self.needs_cache_flush_or_invalidate {
10484                return 3;
10485            }
10486            0
10487        }
10488    }
10489
10490    impl fidl::encoding::ValueTypeMarker for RingBufferProperties {
10491        type Borrowed<'a> = &'a Self;
10492        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10493            value
10494        }
10495    }
10496
10497    unsafe impl fidl::encoding::TypeMarker for RingBufferProperties {
10498        type Owned = Self;
10499
10500        #[inline(always)]
10501        fn inline_align(_context: fidl::encoding::Context) -> usize {
10502            8
10503        }
10504
10505        #[inline(always)]
10506        fn inline_size(_context: fidl::encoding::Context) -> usize {
10507            16
10508        }
10509    }
10510
10511    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferProperties, D>
10512        for &RingBufferProperties
10513    {
10514        unsafe fn encode(
10515            self,
10516            encoder: &mut fidl::encoding::Encoder<'_, D>,
10517            offset: usize,
10518            mut depth: fidl::encoding::Depth,
10519        ) -> fidl::Result<()> {
10520            encoder.debug_check_bounds::<RingBufferProperties>(offset);
10521            // Vector header
10522            let max_ordinal: u64 = self.max_ordinal_present();
10523            encoder.write_num(max_ordinal, offset);
10524            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10525            // Calling encoder.out_of_line_offset(0) is not allowed.
10526            if max_ordinal == 0 {
10527                return Ok(());
10528            }
10529            depth.increment()?;
10530            let envelope_size = 8;
10531            let bytes_len = max_ordinal as usize * envelope_size;
10532            #[allow(unused_variables)]
10533            let offset = encoder.out_of_line_offset(bytes_len);
10534            let mut _prev_end_offset: usize = 0;
10535            if 3 > max_ordinal {
10536                return Ok(());
10537            }
10538
10539            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10540            // are envelope_size bytes.
10541            let cur_offset: usize = (3 - 1) * envelope_size;
10542
10543            // Zero reserved fields.
10544            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10545
10546            // Safety:
10547            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10548            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10549            //   envelope_size bytes, there is always sufficient room.
10550            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10551                self.needs_cache_flush_or_invalidate
10552                    .as_ref()
10553                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10554                encoder,
10555                offset + cur_offset,
10556                depth,
10557            )?;
10558
10559            _prev_end_offset = cur_offset + envelope_size;
10560            if 4 > max_ordinal {
10561                return Ok(());
10562            }
10563
10564            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10565            // are envelope_size bytes.
10566            let cur_offset: usize = (4 - 1) * envelope_size;
10567
10568            // Zero reserved fields.
10569            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10570
10571            // Safety:
10572            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10573            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10574            //   envelope_size bytes, there is always sufficient room.
10575            fidl::encoding::encode_in_envelope_optional::<i64, D>(
10576                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
10577                encoder,
10578                offset + cur_offset,
10579                depth,
10580            )?;
10581
10582            _prev_end_offset = cur_offset + envelope_size;
10583            if 5 > max_ordinal {
10584                return Ok(());
10585            }
10586
10587            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10588            // are envelope_size bytes.
10589            let cur_offset: usize = (5 - 1) * envelope_size;
10590
10591            // Zero reserved fields.
10592            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10593
10594            // Safety:
10595            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10596            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10597            //   envelope_size bytes, there is always sufficient room.
10598            fidl::encoding::encode_in_envelope_optional::<u32, D>(
10599                self.driver_transfer_bytes
10600                    .as_ref()
10601                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
10602                encoder,
10603                offset + cur_offset,
10604                depth,
10605            )?;
10606
10607            _prev_end_offset = cur_offset + envelope_size;
10608
10609            Ok(())
10610        }
10611    }
10612
10613    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferProperties {
10614        #[inline(always)]
10615        fn new_empty() -> Self {
10616            Self::default()
10617        }
10618
10619        unsafe fn decode(
10620            &mut self,
10621            decoder: &mut fidl::encoding::Decoder<'_, D>,
10622            offset: usize,
10623            mut depth: fidl::encoding::Depth,
10624        ) -> fidl::Result<()> {
10625            decoder.debug_check_bounds::<Self>(offset);
10626            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
10627                None => return Err(fidl::Error::NotNullable),
10628                Some(len) => len,
10629            };
10630            // Calling decoder.out_of_line_offset(0) is not allowed.
10631            if len == 0 {
10632                return Ok(());
10633            };
10634            depth.increment()?;
10635            let envelope_size = 8;
10636            let bytes_len = len * envelope_size;
10637            let offset = decoder.out_of_line_offset(bytes_len)?;
10638            // Decode the envelope for each type.
10639            let mut _next_ordinal_to_read = 0;
10640            let mut next_offset = offset;
10641            let end_offset = offset + bytes_len;
10642            _next_ordinal_to_read += 1;
10643            if next_offset >= end_offset {
10644                return Ok(());
10645            }
10646
10647            // Decode unknown envelopes for gaps in ordinals.
10648            while _next_ordinal_to_read < 3 {
10649                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10650                _next_ordinal_to_read += 1;
10651                next_offset += envelope_size;
10652            }
10653
10654            let next_out_of_line = decoder.next_out_of_line();
10655            let handles_before = decoder.remaining_handles();
10656            if let Some((inlined, num_bytes, num_handles)) =
10657                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10658            {
10659                let member_inline_size =
10660                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10661                if inlined != (member_inline_size <= 4) {
10662                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10663                }
10664                let inner_offset;
10665                let mut inner_depth = depth.clone();
10666                if inlined {
10667                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10668                    inner_offset = next_offset;
10669                } else {
10670                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10671                    inner_depth.increment()?;
10672                }
10673                let val_ref = self
10674                    .needs_cache_flush_or_invalidate
10675                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
10676                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
10677                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10678                {
10679                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10680                }
10681                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10682                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10683                }
10684            }
10685
10686            next_offset += envelope_size;
10687            _next_ordinal_to_read += 1;
10688            if next_offset >= end_offset {
10689                return Ok(());
10690            }
10691
10692            // Decode unknown envelopes for gaps in ordinals.
10693            while _next_ordinal_to_read < 4 {
10694                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10695                _next_ordinal_to_read += 1;
10696                next_offset += envelope_size;
10697            }
10698
10699            let next_out_of_line = decoder.next_out_of_line();
10700            let handles_before = decoder.remaining_handles();
10701            if let Some((inlined, num_bytes, num_handles)) =
10702                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10703            {
10704                let member_inline_size =
10705                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10706                if inlined != (member_inline_size <= 4) {
10707                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10708                }
10709                let inner_offset;
10710                let mut inner_depth = depth.clone();
10711                if inlined {
10712                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10713                    inner_offset = next_offset;
10714                } else {
10715                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10716                    inner_depth.increment()?;
10717                }
10718                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
10719                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
10720                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10721                {
10722                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10723                }
10724                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10725                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10726                }
10727            }
10728
10729            next_offset += envelope_size;
10730            _next_ordinal_to_read += 1;
10731            if next_offset >= end_offset {
10732                return Ok(());
10733            }
10734
10735            // Decode unknown envelopes for gaps in ordinals.
10736            while _next_ordinal_to_read < 5 {
10737                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10738                _next_ordinal_to_read += 1;
10739                next_offset += envelope_size;
10740            }
10741
10742            let next_out_of_line = decoder.next_out_of_line();
10743            let handles_before = decoder.remaining_handles();
10744            if let Some((inlined, num_bytes, num_handles)) =
10745                fidl::encoding::decode_envelope_header(decoder, next_offset)?
10746            {
10747                let member_inline_size =
10748                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
10749                if inlined != (member_inline_size <= 4) {
10750                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
10751                }
10752                let inner_offset;
10753                let mut inner_depth = depth.clone();
10754                if inlined {
10755                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
10756                    inner_offset = next_offset;
10757                } else {
10758                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10759                    inner_depth.increment()?;
10760                }
10761                let val_ref =
10762                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
10763                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
10764                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
10765                {
10766                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
10767                }
10768                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10769                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10770                }
10771            }
10772
10773            next_offset += envelope_size;
10774
10775            // Decode the remaining unknown envelopes.
10776            while next_offset < end_offset {
10777                _next_ordinal_to_read += 1;
10778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
10779                next_offset += envelope_size;
10780            }
10781
10782            Ok(())
10783        }
10784    }
10785
10786    impl StreamProperties {
10787        #[inline(always)]
10788        fn max_ordinal_present(&self) -> u64 {
10789            if let Some(_) = self.clock_domain {
10790                return 11;
10791            }
10792            if let Some(_) = self.product {
10793                return 10;
10794            }
10795            if let Some(_) = self.manufacturer {
10796                return 9;
10797            }
10798            if let Some(_) = self.plug_detect_capabilities {
10799                return 8;
10800            }
10801            if let Some(_) = self.gain_step_db {
10802                return 7;
10803            }
10804            if let Some(_) = self.max_gain_db {
10805                return 6;
10806            }
10807            if let Some(_) = self.min_gain_db {
10808                return 5;
10809            }
10810            if let Some(_) = self.can_agc {
10811                return 4;
10812            }
10813            if let Some(_) = self.can_mute {
10814                return 3;
10815            }
10816            if let Some(_) = self.is_input {
10817                return 2;
10818            }
10819            if let Some(_) = self.unique_id {
10820                return 1;
10821            }
10822            0
10823        }
10824    }
10825
10826    impl fidl::encoding::ValueTypeMarker for StreamProperties {
10827        type Borrowed<'a> = &'a Self;
10828        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10829            value
10830        }
10831    }
10832
10833    unsafe impl fidl::encoding::TypeMarker for StreamProperties {
10834        type Owned = Self;
10835
10836        #[inline(always)]
10837        fn inline_align(_context: fidl::encoding::Context) -> usize {
10838            8
10839        }
10840
10841        #[inline(always)]
10842        fn inline_size(_context: fidl::encoding::Context) -> usize {
10843            16
10844        }
10845    }
10846
10847    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamProperties, D>
10848        for &StreamProperties
10849    {
10850        unsafe fn encode(
10851            self,
10852            encoder: &mut fidl::encoding::Encoder<'_, D>,
10853            offset: usize,
10854            mut depth: fidl::encoding::Depth,
10855        ) -> fidl::Result<()> {
10856            encoder.debug_check_bounds::<StreamProperties>(offset);
10857            // Vector header
10858            let max_ordinal: u64 = self.max_ordinal_present();
10859            encoder.write_num(max_ordinal, offset);
10860            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
10861            // Calling encoder.out_of_line_offset(0) is not allowed.
10862            if max_ordinal == 0 {
10863                return Ok(());
10864            }
10865            depth.increment()?;
10866            let envelope_size = 8;
10867            let bytes_len = max_ordinal as usize * envelope_size;
10868            #[allow(unused_variables)]
10869            let offset = encoder.out_of_line_offset(bytes_len);
10870            let mut _prev_end_offset: usize = 0;
10871            if 1 > max_ordinal {
10872                return Ok(());
10873            }
10874
10875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10876            // are envelope_size bytes.
10877            let cur_offset: usize = (1 - 1) * envelope_size;
10878
10879            // Zero reserved fields.
10880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10881
10882            // Safety:
10883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10885            //   envelope_size bytes, there is always sufficient room.
10886            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
10887                self.unique_id.as_ref().map(
10888                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
10889                ),
10890                encoder,
10891                offset + cur_offset,
10892                depth,
10893            )?;
10894
10895            _prev_end_offset = cur_offset + envelope_size;
10896            if 2 > max_ordinal {
10897                return Ok(());
10898            }
10899
10900            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10901            // are envelope_size bytes.
10902            let cur_offset: usize = (2 - 1) * envelope_size;
10903
10904            // Zero reserved fields.
10905            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10906
10907            // Safety:
10908            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10909            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10910            //   envelope_size bytes, there is always sufficient room.
10911            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10912                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10913                encoder,
10914                offset + cur_offset,
10915                depth,
10916            )?;
10917
10918            _prev_end_offset = cur_offset + envelope_size;
10919            if 3 > max_ordinal {
10920                return Ok(());
10921            }
10922
10923            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10924            // are envelope_size bytes.
10925            let cur_offset: usize = (3 - 1) * envelope_size;
10926
10927            // Zero reserved fields.
10928            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10929
10930            // Safety:
10931            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10932            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10933            //   envelope_size bytes, there is always sufficient room.
10934            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10935                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10936                encoder,
10937                offset + cur_offset,
10938                depth,
10939            )?;
10940
10941            _prev_end_offset = cur_offset + envelope_size;
10942            if 4 > max_ordinal {
10943                return Ok(());
10944            }
10945
10946            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10947            // are envelope_size bytes.
10948            let cur_offset: usize = (4 - 1) * envelope_size;
10949
10950            // Zero reserved fields.
10951            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10952
10953            // Safety:
10954            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10955            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10956            //   envelope_size bytes, there is always sufficient room.
10957            fidl::encoding::encode_in_envelope_optional::<bool, D>(
10958                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
10959                encoder,
10960                offset + cur_offset,
10961                depth,
10962            )?;
10963
10964            _prev_end_offset = cur_offset + envelope_size;
10965            if 5 > max_ordinal {
10966                return Ok(());
10967            }
10968
10969            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10970            // are envelope_size bytes.
10971            let cur_offset: usize = (5 - 1) * envelope_size;
10972
10973            // Zero reserved fields.
10974            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10975
10976            // Safety:
10977            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
10978            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
10979            //   envelope_size bytes, there is always sufficient room.
10980            fidl::encoding::encode_in_envelope_optional::<f32, D>(
10981                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
10982                encoder,
10983                offset + cur_offset,
10984                depth,
10985            )?;
10986
10987            _prev_end_offset = cur_offset + envelope_size;
10988            if 6 > max_ordinal {
10989                return Ok(());
10990            }
10991
10992            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
10993            // are envelope_size bytes.
10994            let cur_offset: usize = (6 - 1) * envelope_size;
10995
10996            // Zero reserved fields.
10997            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
10998
10999            // Safety:
11000            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11001            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11002            //   envelope_size bytes, there is always sufficient room.
11003            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11004                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11005                encoder,
11006                offset + cur_offset,
11007                depth,
11008            )?;
11009
11010            _prev_end_offset = cur_offset + envelope_size;
11011            if 7 > max_ordinal {
11012                return Ok(());
11013            }
11014
11015            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11016            // are envelope_size bytes.
11017            let cur_offset: usize = (7 - 1) * envelope_size;
11018
11019            // Zero reserved fields.
11020            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11021
11022            // Safety:
11023            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11024            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11025            //   envelope_size bytes, there is always sufficient room.
11026            fidl::encoding::encode_in_envelope_optional::<f32, D>(
11027                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
11028                encoder,
11029                offset + cur_offset,
11030                depth,
11031            )?;
11032
11033            _prev_end_offset = cur_offset + envelope_size;
11034            if 8 > max_ordinal {
11035                return Ok(());
11036            }
11037
11038            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11039            // are envelope_size bytes.
11040            let cur_offset: usize = (8 - 1) * envelope_size;
11041
11042            // Zero reserved fields.
11043            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11044
11045            // Safety:
11046            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11047            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11048            //   envelope_size bytes, there is always sufficient room.
11049            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
11050                self.plug_detect_capabilities
11051                    .as_ref()
11052                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
11053                encoder,
11054                offset + cur_offset,
11055                depth,
11056            )?;
11057
11058            _prev_end_offset = cur_offset + envelope_size;
11059            if 9 > max_ordinal {
11060                return Ok(());
11061            }
11062
11063            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11064            // are envelope_size bytes.
11065            let cur_offset: usize = (9 - 1) * envelope_size;
11066
11067            // Zero reserved fields.
11068            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11069
11070            // Safety:
11071            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11072            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11073            //   envelope_size bytes, there is always sufficient room.
11074            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11075                self.manufacturer.as_ref().map(
11076                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11077                ),
11078                encoder,
11079                offset + cur_offset,
11080                depth,
11081            )?;
11082
11083            _prev_end_offset = cur_offset + envelope_size;
11084            if 10 > max_ordinal {
11085                return Ok(());
11086            }
11087
11088            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11089            // are envelope_size bytes.
11090            let cur_offset: usize = (10 - 1) * envelope_size;
11091
11092            // Zero reserved fields.
11093            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11094
11095            // Safety:
11096            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11097            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11098            //   envelope_size bytes, there is always sufficient room.
11099            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
11100                self.product.as_ref().map(
11101                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
11102                ),
11103                encoder,
11104                offset + cur_offset,
11105                depth,
11106            )?;
11107
11108            _prev_end_offset = cur_offset + envelope_size;
11109            if 11 > max_ordinal {
11110                return Ok(());
11111            }
11112
11113            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11114            // are envelope_size bytes.
11115            let cur_offset: usize = (11 - 1) * envelope_size;
11116
11117            // Zero reserved fields.
11118            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11119
11120            // Safety:
11121            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11122            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11123            //   envelope_size bytes, there is always sufficient room.
11124            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11125                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11126                encoder,
11127                offset + cur_offset,
11128                depth,
11129            )?;
11130
11131            _prev_end_offset = cur_offset + envelope_size;
11132
11133            Ok(())
11134        }
11135    }
11136
11137    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamProperties {
11138        #[inline(always)]
11139        fn new_empty() -> Self {
11140            Self::default()
11141        }
11142
11143        unsafe fn decode(
11144            &mut self,
11145            decoder: &mut fidl::encoding::Decoder<'_, D>,
11146            offset: usize,
11147            mut depth: fidl::encoding::Depth,
11148        ) -> fidl::Result<()> {
11149            decoder.debug_check_bounds::<Self>(offset);
11150            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11151                None => return Err(fidl::Error::NotNullable),
11152                Some(len) => len,
11153            };
11154            // Calling decoder.out_of_line_offset(0) is not allowed.
11155            if len == 0 {
11156                return Ok(());
11157            };
11158            depth.increment()?;
11159            let envelope_size = 8;
11160            let bytes_len = len * envelope_size;
11161            let offset = decoder.out_of_line_offset(bytes_len)?;
11162            // Decode the envelope for each type.
11163            let mut _next_ordinal_to_read = 0;
11164            let mut next_offset = offset;
11165            let end_offset = offset + bytes_len;
11166            _next_ordinal_to_read += 1;
11167            if next_offset >= end_offset {
11168                return Ok(());
11169            }
11170
11171            // Decode unknown envelopes for gaps in ordinals.
11172            while _next_ordinal_to_read < 1 {
11173                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11174                _next_ordinal_to_read += 1;
11175                next_offset += envelope_size;
11176            }
11177
11178            let next_out_of_line = decoder.next_out_of_line();
11179            let handles_before = decoder.remaining_handles();
11180            if let Some((inlined, num_bytes, num_handles)) =
11181                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11182            {
11183                let member_inline_size =
11184                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
11185                        decoder.context,
11186                    );
11187                if inlined != (member_inline_size <= 4) {
11188                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11189                }
11190                let inner_offset;
11191                let mut inner_depth = depth.clone();
11192                if inlined {
11193                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11194                    inner_offset = next_offset;
11195                } else {
11196                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11197                    inner_depth.increment()?;
11198                }
11199                let val_ref = self
11200                    .unique_id
11201                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
11202                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
11203                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11204                {
11205                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11206                }
11207                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11208                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11209                }
11210            }
11211
11212            next_offset += envelope_size;
11213            _next_ordinal_to_read += 1;
11214            if next_offset >= end_offset {
11215                return Ok(());
11216            }
11217
11218            // Decode unknown envelopes for gaps in ordinals.
11219            while _next_ordinal_to_read < 2 {
11220                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11221                _next_ordinal_to_read += 1;
11222                next_offset += envelope_size;
11223            }
11224
11225            let next_out_of_line = decoder.next_out_of_line();
11226            let handles_before = decoder.remaining_handles();
11227            if let Some((inlined, num_bytes, num_handles)) =
11228                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11229            {
11230                let member_inline_size =
11231                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11232                if inlined != (member_inline_size <= 4) {
11233                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11234                }
11235                let inner_offset;
11236                let mut inner_depth = depth.clone();
11237                if inlined {
11238                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11239                    inner_offset = next_offset;
11240                } else {
11241                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11242                    inner_depth.increment()?;
11243                }
11244                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
11245                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11246                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11247                {
11248                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11249                }
11250                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11251                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11252                }
11253            }
11254
11255            next_offset += envelope_size;
11256            _next_ordinal_to_read += 1;
11257            if next_offset >= end_offset {
11258                return Ok(());
11259            }
11260
11261            // Decode unknown envelopes for gaps in ordinals.
11262            while _next_ordinal_to_read < 3 {
11263                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11264                _next_ordinal_to_read += 1;
11265                next_offset += envelope_size;
11266            }
11267
11268            let next_out_of_line = decoder.next_out_of_line();
11269            let handles_before = decoder.remaining_handles();
11270            if let Some((inlined, num_bytes, num_handles)) =
11271                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11272            {
11273                let member_inline_size =
11274                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11275                if inlined != (member_inline_size <= 4) {
11276                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11277                }
11278                let inner_offset;
11279                let mut inner_depth = depth.clone();
11280                if inlined {
11281                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11282                    inner_offset = next_offset;
11283                } else {
11284                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11285                    inner_depth.increment()?;
11286                }
11287                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
11288                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11290                {
11291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11292                }
11293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11295                }
11296            }
11297
11298            next_offset += envelope_size;
11299            _next_ordinal_to_read += 1;
11300            if next_offset >= end_offset {
11301                return Ok(());
11302            }
11303
11304            // Decode unknown envelopes for gaps in ordinals.
11305            while _next_ordinal_to_read < 4 {
11306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11307                _next_ordinal_to_read += 1;
11308                next_offset += envelope_size;
11309            }
11310
11311            let next_out_of_line = decoder.next_out_of_line();
11312            let handles_before = decoder.remaining_handles();
11313            if let Some((inlined, num_bytes, num_handles)) =
11314                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11315            {
11316                let member_inline_size =
11317                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11318                if inlined != (member_inline_size <= 4) {
11319                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11320                }
11321                let inner_offset;
11322                let mut inner_depth = depth.clone();
11323                if inlined {
11324                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11325                    inner_offset = next_offset;
11326                } else {
11327                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11328                    inner_depth.increment()?;
11329                }
11330                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
11331                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
11332                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11333                {
11334                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11335                }
11336                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11337                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11338                }
11339            }
11340
11341            next_offset += envelope_size;
11342            _next_ordinal_to_read += 1;
11343            if next_offset >= end_offset {
11344                return Ok(());
11345            }
11346
11347            // Decode unknown envelopes for gaps in ordinals.
11348            while _next_ordinal_to_read < 5 {
11349                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11350                _next_ordinal_to_read += 1;
11351                next_offset += envelope_size;
11352            }
11353
11354            let next_out_of_line = decoder.next_out_of_line();
11355            let handles_before = decoder.remaining_handles();
11356            if let Some((inlined, num_bytes, num_handles)) =
11357                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11358            {
11359                let member_inline_size =
11360                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11361                if inlined != (member_inline_size <= 4) {
11362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11363                }
11364                let inner_offset;
11365                let mut inner_depth = depth.clone();
11366                if inlined {
11367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11368                    inner_offset = next_offset;
11369                } else {
11370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11371                    inner_depth.increment()?;
11372                }
11373                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11374                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11375                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11376                {
11377                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11378                }
11379                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11380                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11381                }
11382            }
11383
11384            next_offset += envelope_size;
11385            _next_ordinal_to_read += 1;
11386            if next_offset >= end_offset {
11387                return Ok(());
11388            }
11389
11390            // Decode unknown envelopes for gaps in ordinals.
11391            while _next_ordinal_to_read < 6 {
11392                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11393                _next_ordinal_to_read += 1;
11394                next_offset += envelope_size;
11395            }
11396
11397            let next_out_of_line = decoder.next_out_of_line();
11398            let handles_before = decoder.remaining_handles();
11399            if let Some((inlined, num_bytes, num_handles)) =
11400                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11401            {
11402                let member_inline_size =
11403                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11404                if inlined != (member_inline_size <= 4) {
11405                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11406                }
11407                let inner_offset;
11408                let mut inner_depth = depth.clone();
11409                if inlined {
11410                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11411                    inner_offset = next_offset;
11412                } else {
11413                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11414                    inner_depth.increment()?;
11415                }
11416                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11417                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11418                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11419                {
11420                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11421                }
11422                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11423                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11424                }
11425            }
11426
11427            next_offset += envelope_size;
11428            _next_ordinal_to_read += 1;
11429            if next_offset >= end_offset {
11430                return Ok(());
11431            }
11432
11433            // Decode unknown envelopes for gaps in ordinals.
11434            while _next_ordinal_to_read < 7 {
11435                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11436                _next_ordinal_to_read += 1;
11437                next_offset += envelope_size;
11438            }
11439
11440            let next_out_of_line = decoder.next_out_of_line();
11441            let handles_before = decoder.remaining_handles();
11442            if let Some((inlined, num_bytes, num_handles)) =
11443                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11444            {
11445                let member_inline_size =
11446                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11447                if inlined != (member_inline_size <= 4) {
11448                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11449                }
11450                let inner_offset;
11451                let mut inner_depth = depth.clone();
11452                if inlined {
11453                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11454                    inner_offset = next_offset;
11455                } else {
11456                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11457                    inner_depth.increment()?;
11458                }
11459                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
11460                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
11461                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11462                {
11463                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11464                }
11465                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11466                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11467                }
11468            }
11469
11470            next_offset += envelope_size;
11471            _next_ordinal_to_read += 1;
11472            if next_offset >= end_offset {
11473                return Ok(());
11474            }
11475
11476            // Decode unknown envelopes for gaps in ordinals.
11477            while _next_ordinal_to_read < 8 {
11478                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11479                _next_ordinal_to_read += 1;
11480                next_offset += envelope_size;
11481            }
11482
11483            let next_out_of_line = decoder.next_out_of_line();
11484            let handles_before = decoder.remaining_handles();
11485            if let Some((inlined, num_bytes, num_handles)) =
11486                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11487            {
11488                let member_inline_size =
11489                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
11490                        decoder.context,
11491                    );
11492                if inlined != (member_inline_size <= 4) {
11493                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11494                }
11495                let inner_offset;
11496                let mut inner_depth = depth.clone();
11497                if inlined {
11498                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11499                    inner_offset = next_offset;
11500                } else {
11501                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11502                    inner_depth.increment()?;
11503                }
11504                let val_ref = self
11505                    .plug_detect_capabilities
11506                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
11507                fidl::decode!(
11508                    PlugDetectCapabilities,
11509                    D,
11510                    val_ref,
11511                    decoder,
11512                    inner_offset,
11513                    inner_depth
11514                )?;
11515                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11516                {
11517                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11518                }
11519                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11520                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11521                }
11522            }
11523
11524            next_offset += envelope_size;
11525            _next_ordinal_to_read += 1;
11526            if next_offset >= end_offset {
11527                return Ok(());
11528            }
11529
11530            // Decode unknown envelopes for gaps in ordinals.
11531            while _next_ordinal_to_read < 9 {
11532                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11533                _next_ordinal_to_read += 1;
11534                next_offset += envelope_size;
11535            }
11536
11537            let next_out_of_line = decoder.next_out_of_line();
11538            let handles_before = decoder.remaining_handles();
11539            if let Some((inlined, num_bytes, num_handles)) =
11540                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11541            {
11542                let member_inline_size =
11543                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11544                        decoder.context,
11545                    );
11546                if inlined != (member_inline_size <= 4) {
11547                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11548                }
11549                let inner_offset;
11550                let mut inner_depth = depth.clone();
11551                if inlined {
11552                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11553                    inner_offset = next_offset;
11554                } else {
11555                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11556                    inner_depth.increment()?;
11557                }
11558                let val_ref = self
11559                    .manufacturer
11560                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11561                fidl::decode!(
11562                    fidl::encoding::BoundedString<256>,
11563                    D,
11564                    val_ref,
11565                    decoder,
11566                    inner_offset,
11567                    inner_depth
11568                )?;
11569                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11570                {
11571                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11572                }
11573                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11574                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11575                }
11576            }
11577
11578            next_offset += envelope_size;
11579            _next_ordinal_to_read += 1;
11580            if next_offset >= end_offset {
11581                return Ok(());
11582            }
11583
11584            // Decode unknown envelopes for gaps in ordinals.
11585            while _next_ordinal_to_read < 10 {
11586                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11587                _next_ordinal_to_read += 1;
11588                next_offset += envelope_size;
11589            }
11590
11591            let next_out_of_line = decoder.next_out_of_line();
11592            let handles_before = decoder.remaining_handles();
11593            if let Some((inlined, num_bytes, num_handles)) =
11594                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11595            {
11596                let member_inline_size =
11597                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
11598                        decoder.context,
11599                    );
11600                if inlined != (member_inline_size <= 4) {
11601                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11602                }
11603                let inner_offset;
11604                let mut inner_depth = depth.clone();
11605                if inlined {
11606                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11607                    inner_offset = next_offset;
11608                } else {
11609                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11610                    inner_depth.increment()?;
11611                }
11612                let val_ref = self
11613                    .product
11614                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
11615                fidl::decode!(
11616                    fidl::encoding::BoundedString<256>,
11617                    D,
11618                    val_ref,
11619                    decoder,
11620                    inner_offset,
11621                    inner_depth
11622                )?;
11623                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11624                {
11625                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11626                }
11627                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11628                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11629                }
11630            }
11631
11632            next_offset += envelope_size;
11633            _next_ordinal_to_read += 1;
11634            if next_offset >= end_offset {
11635                return Ok(());
11636            }
11637
11638            // Decode unknown envelopes for gaps in ordinals.
11639            while _next_ordinal_to_read < 11 {
11640                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11641                _next_ordinal_to_read += 1;
11642                next_offset += envelope_size;
11643            }
11644
11645            let next_out_of_line = decoder.next_out_of_line();
11646            let handles_before = decoder.remaining_handles();
11647            if let Some((inlined, num_bytes, num_handles)) =
11648                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11649            {
11650                let member_inline_size =
11651                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11652                if inlined != (member_inline_size <= 4) {
11653                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11654                }
11655                let inner_offset;
11656                let mut inner_depth = depth.clone();
11657                if inlined {
11658                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11659                    inner_offset = next_offset;
11660                } else {
11661                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11662                    inner_depth.increment()?;
11663                }
11664                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
11665                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
11666                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11667                {
11668                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11669                }
11670                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11671                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11672                }
11673            }
11674
11675            next_offset += envelope_size;
11676
11677            // Decode the remaining unknown envelopes.
11678            while next_offset < end_offset {
11679                _next_ordinal_to_read += 1;
11680                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11681                next_offset += envelope_size;
11682            }
11683
11684            Ok(())
11685        }
11686    }
11687
11688    impl SupportedEncodings {
11689        #[inline(always)]
11690        fn max_ordinal_present(&self) -> u64 {
11691            if let Some(_) = self.encoding_types {
11692                return 5;
11693            }
11694            if let Some(_) = self.max_encoding_bitrate {
11695                return 4;
11696            }
11697            if let Some(_) = self.min_encoding_bitrate {
11698                return 3;
11699            }
11700            if let Some(_) = self.decoded_frame_rates {
11701                return 2;
11702            }
11703            if let Some(_) = self.decoded_channel_sets {
11704                return 1;
11705            }
11706            0
11707        }
11708    }
11709
11710    impl fidl::encoding::ValueTypeMarker for SupportedEncodings {
11711        type Borrowed<'a> = &'a Self;
11712        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
11713            value
11714        }
11715    }
11716
11717    unsafe impl fidl::encoding::TypeMarker for SupportedEncodings {
11718        type Owned = Self;
11719
11720        #[inline(always)]
11721        fn inline_align(_context: fidl::encoding::Context) -> usize {
11722            8
11723        }
11724
11725        #[inline(always)]
11726        fn inline_size(_context: fidl::encoding::Context) -> usize {
11727            16
11728        }
11729    }
11730
11731    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedEncodings, D>
11732        for &SupportedEncodings
11733    {
11734        unsafe fn encode(
11735            self,
11736            encoder: &mut fidl::encoding::Encoder<'_, D>,
11737            offset: usize,
11738            mut depth: fidl::encoding::Depth,
11739        ) -> fidl::Result<()> {
11740            encoder.debug_check_bounds::<SupportedEncodings>(offset);
11741            // Vector header
11742            let max_ordinal: u64 = self.max_ordinal_present();
11743            encoder.write_num(max_ordinal, offset);
11744            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
11745            // Calling encoder.out_of_line_offset(0) is not allowed.
11746            if max_ordinal == 0 {
11747                return Ok(());
11748            }
11749            depth.increment()?;
11750            let envelope_size = 8;
11751            let bytes_len = max_ordinal as usize * envelope_size;
11752            #[allow(unused_variables)]
11753            let offset = encoder.out_of_line_offset(bytes_len);
11754            let mut _prev_end_offset: usize = 0;
11755            if 1 > max_ordinal {
11756                return Ok(());
11757            }
11758
11759            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11760            // are envelope_size bytes.
11761            let cur_offset: usize = (1 - 1) * envelope_size;
11762
11763            // Zero reserved fields.
11764            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11765
11766            // Safety:
11767            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11768            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11769            //   envelope_size bytes, there is always sufficient room.
11770            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
11771            self.decoded_channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11772            encoder, offset + cur_offset, depth
11773        )?;
11774
11775            _prev_end_offset = cur_offset + envelope_size;
11776            if 2 > max_ordinal {
11777                return Ok(());
11778            }
11779
11780            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11781            // are envelope_size bytes.
11782            let cur_offset: usize = (2 - 1) * envelope_size;
11783
11784            // Zero reserved fields.
11785            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11786
11787            // Safety:
11788            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11789            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11790            //   envelope_size bytes, there is always sufficient room.
11791            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
11792                self.decoded_frame_rates.as_ref().map(
11793                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
11794                ),
11795                encoder,
11796                offset + cur_offset,
11797                depth,
11798            )?;
11799
11800            _prev_end_offset = cur_offset + envelope_size;
11801            if 3 > max_ordinal {
11802                return Ok(());
11803            }
11804
11805            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11806            // are envelope_size bytes.
11807            let cur_offset: usize = (3 - 1) * envelope_size;
11808
11809            // Zero reserved fields.
11810            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11811
11812            // Safety:
11813            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11814            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11815            //   envelope_size bytes, there is always sufficient room.
11816            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11817                self.min_encoding_bitrate
11818                    .as_ref()
11819                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11820                encoder,
11821                offset + cur_offset,
11822                depth,
11823            )?;
11824
11825            _prev_end_offset = cur_offset + envelope_size;
11826            if 4 > max_ordinal {
11827                return Ok(());
11828            }
11829
11830            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11831            // are envelope_size bytes.
11832            let cur_offset: usize = (4 - 1) * envelope_size;
11833
11834            // Zero reserved fields.
11835            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11836
11837            // Safety:
11838            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11839            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11840            //   envelope_size bytes, there is always sufficient room.
11841            fidl::encoding::encode_in_envelope_optional::<u32, D>(
11842                self.max_encoding_bitrate
11843                    .as_ref()
11844                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
11845                encoder,
11846                offset + cur_offset,
11847                depth,
11848            )?;
11849
11850            _prev_end_offset = cur_offset + envelope_size;
11851            if 5 > max_ordinal {
11852                return Ok(());
11853            }
11854
11855            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
11856            // are envelope_size bytes.
11857            let cur_offset: usize = (5 - 1) * envelope_size;
11858
11859            // Zero reserved fields.
11860            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
11861
11862            // Safety:
11863            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
11864            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
11865            //   envelope_size bytes, there is always sufficient room.
11866            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<EncodingType, 64>, D>(
11867            self.encoding_types.as_ref().map(<fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::ValueTypeMarker>::borrow),
11868            encoder, offset + cur_offset, depth
11869        )?;
11870
11871            _prev_end_offset = cur_offset + envelope_size;
11872
11873            Ok(())
11874        }
11875    }
11876
11877    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedEncodings {
11878        #[inline(always)]
11879        fn new_empty() -> Self {
11880            Self::default()
11881        }
11882
11883        unsafe fn decode(
11884            &mut self,
11885            decoder: &mut fidl::encoding::Decoder<'_, D>,
11886            offset: usize,
11887            mut depth: fidl::encoding::Depth,
11888        ) -> fidl::Result<()> {
11889            decoder.debug_check_bounds::<Self>(offset);
11890            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
11891                None => return Err(fidl::Error::NotNullable),
11892                Some(len) => len,
11893            };
11894            // Calling decoder.out_of_line_offset(0) is not allowed.
11895            if len == 0 {
11896                return Ok(());
11897            };
11898            depth.increment()?;
11899            let envelope_size = 8;
11900            let bytes_len = len * envelope_size;
11901            let offset = decoder.out_of_line_offset(bytes_len)?;
11902            // Decode the envelope for each type.
11903            let mut _next_ordinal_to_read = 0;
11904            let mut next_offset = offset;
11905            let end_offset = offset + bytes_len;
11906            _next_ordinal_to_read += 1;
11907            if next_offset >= end_offset {
11908                return Ok(());
11909            }
11910
11911            // Decode unknown envelopes for gaps in ordinals.
11912            while _next_ordinal_to_read < 1 {
11913                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11914                _next_ordinal_to_read += 1;
11915                next_offset += envelope_size;
11916            }
11917
11918            let next_out_of_line = decoder.next_out_of_line();
11919            let handles_before = decoder.remaining_handles();
11920            if let Some((inlined, num_bytes, num_handles)) =
11921                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11922            {
11923                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
11924                if inlined != (member_inline_size <= 4) {
11925                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11926                }
11927                let inner_offset;
11928                let mut inner_depth = depth.clone();
11929                if inlined {
11930                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11931                    inner_offset = next_offset;
11932                } else {
11933                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11934                    inner_depth.increment()?;
11935                }
11936                let val_ref = self.decoded_channel_sets.get_or_insert_with(
11937                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
11938                );
11939                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11940                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11941                {
11942                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11943                }
11944                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11945                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11946                }
11947            }
11948
11949            next_offset += envelope_size;
11950            _next_ordinal_to_read += 1;
11951            if next_offset >= end_offset {
11952                return Ok(());
11953            }
11954
11955            // Decode unknown envelopes for gaps in ordinals.
11956            while _next_ordinal_to_read < 2 {
11957                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
11958                _next_ordinal_to_read += 1;
11959                next_offset += envelope_size;
11960            }
11961
11962            let next_out_of_line = decoder.next_out_of_line();
11963            let handles_before = decoder.remaining_handles();
11964            if let Some((inlined, num_bytes, num_handles)) =
11965                fidl::encoding::decode_envelope_header(decoder, next_offset)?
11966            {
11967                let member_inline_size =
11968                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
11969                        decoder.context,
11970                    );
11971                if inlined != (member_inline_size <= 4) {
11972                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
11973                }
11974                let inner_offset;
11975                let mut inner_depth = depth.clone();
11976                if inlined {
11977                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
11978                    inner_offset = next_offset;
11979                } else {
11980                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
11981                    inner_depth.increment()?;
11982                }
11983                let val_ref = self
11984                    .decoded_frame_rates
11985                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
11986                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
11987                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
11988                {
11989                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
11990                }
11991                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
11992                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
11993                }
11994            }
11995
11996            next_offset += envelope_size;
11997            _next_ordinal_to_read += 1;
11998            if next_offset >= end_offset {
11999                return Ok(());
12000            }
12001
12002            // Decode unknown envelopes for gaps in ordinals.
12003            while _next_ordinal_to_read < 3 {
12004                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12005                _next_ordinal_to_read += 1;
12006                next_offset += envelope_size;
12007            }
12008
12009            let next_out_of_line = decoder.next_out_of_line();
12010            let handles_before = decoder.remaining_handles();
12011            if let Some((inlined, num_bytes, num_handles)) =
12012                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12013            {
12014                let member_inline_size =
12015                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12016                if inlined != (member_inline_size <= 4) {
12017                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12018                }
12019                let inner_offset;
12020                let mut inner_depth = depth.clone();
12021                if inlined {
12022                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12023                    inner_offset = next_offset;
12024                } else {
12025                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12026                    inner_depth.increment()?;
12027                }
12028                let val_ref =
12029                    self.min_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12030                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12031                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12032                {
12033                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12034                }
12035                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12036                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12037                }
12038            }
12039
12040            next_offset += envelope_size;
12041            _next_ordinal_to_read += 1;
12042            if next_offset >= end_offset {
12043                return Ok(());
12044            }
12045
12046            // Decode unknown envelopes for gaps in ordinals.
12047            while _next_ordinal_to_read < 4 {
12048                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12049                _next_ordinal_to_read += 1;
12050                next_offset += envelope_size;
12051            }
12052
12053            let next_out_of_line = decoder.next_out_of_line();
12054            let handles_before = decoder.remaining_handles();
12055            if let Some((inlined, num_bytes, num_handles)) =
12056                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12057            {
12058                let member_inline_size =
12059                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12060                if inlined != (member_inline_size <= 4) {
12061                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12062                }
12063                let inner_offset;
12064                let mut inner_depth = depth.clone();
12065                if inlined {
12066                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12067                    inner_offset = next_offset;
12068                } else {
12069                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12070                    inner_depth.increment()?;
12071                }
12072                let val_ref =
12073                    self.max_encoding_bitrate.get_or_insert_with(|| fidl::new_empty!(u32, D));
12074                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
12075                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12076                {
12077                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12078                }
12079                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12080                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12081                }
12082            }
12083
12084            next_offset += envelope_size;
12085            _next_ordinal_to_read += 1;
12086            if next_offset >= end_offset {
12087                return Ok(());
12088            }
12089
12090            // Decode unknown envelopes for gaps in ordinals.
12091            while _next_ordinal_to_read < 5 {
12092                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12093                _next_ordinal_to_read += 1;
12094                next_offset += envelope_size;
12095            }
12096
12097            let next_out_of_line = decoder.next_out_of_line();
12098            let handles_before = decoder.remaining_handles();
12099            if let Some((inlined, num_bytes, num_handles)) =
12100                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12101            {
12102                let member_inline_size = <fidl::encoding::Vector<EncodingType, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
12103                if inlined != (member_inline_size <= 4) {
12104                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12105                }
12106                let inner_offset;
12107                let mut inner_depth = depth.clone();
12108                if inlined {
12109                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12110                    inner_offset = next_offset;
12111                } else {
12112                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12113                    inner_depth.increment()?;
12114                }
12115                let val_ref = self.encoding_types.get_or_insert_with(
12116                    || fidl::new_empty!(fidl::encoding::Vector<EncodingType, 64>, D),
12117                );
12118                fidl::decode!(fidl::encoding::Vector<EncodingType, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
12119                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12120                {
12121                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12122                }
12123                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12124                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12125                }
12126            }
12127
12128            next_offset += envelope_size;
12129
12130            // Decode the remaining unknown envelopes.
12131            while next_offset < end_offset {
12132                _next_ordinal_to_read += 1;
12133                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12134                next_offset += envelope_size;
12135            }
12136
12137            Ok(())
12138        }
12139    }
12140
12141    impl SupportedFormats {
12142        #[inline(always)]
12143        fn max_ordinal_present(&self) -> u64 {
12144            if let Some(_) = self.pcm_supported_formats {
12145                return 1;
12146            }
12147            0
12148        }
12149    }
12150
12151    impl fidl::encoding::ValueTypeMarker for SupportedFormats {
12152        type Borrowed<'a> = &'a Self;
12153        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12154            value
12155        }
12156    }
12157
12158    unsafe impl fidl::encoding::TypeMarker for SupportedFormats {
12159        type Owned = Self;
12160
12161        #[inline(always)]
12162        fn inline_align(_context: fidl::encoding::Context) -> usize {
12163            8
12164        }
12165
12166        #[inline(always)]
12167        fn inline_size(_context: fidl::encoding::Context) -> usize {
12168            16
12169        }
12170    }
12171
12172    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats, D>
12173        for &SupportedFormats
12174    {
12175        unsafe fn encode(
12176            self,
12177            encoder: &mut fidl::encoding::Encoder<'_, D>,
12178            offset: usize,
12179            mut depth: fidl::encoding::Depth,
12180        ) -> fidl::Result<()> {
12181            encoder.debug_check_bounds::<SupportedFormats>(offset);
12182            // Vector header
12183            let max_ordinal: u64 = self.max_ordinal_present();
12184            encoder.write_num(max_ordinal, offset);
12185            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
12186            // Calling encoder.out_of_line_offset(0) is not allowed.
12187            if max_ordinal == 0 {
12188                return Ok(());
12189            }
12190            depth.increment()?;
12191            let envelope_size = 8;
12192            let bytes_len = max_ordinal as usize * envelope_size;
12193            #[allow(unused_variables)]
12194            let offset = encoder.out_of_line_offset(bytes_len);
12195            let mut _prev_end_offset: usize = 0;
12196            if 1 > max_ordinal {
12197                return Ok(());
12198            }
12199
12200            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
12201            // are envelope_size bytes.
12202            let cur_offset: usize = (1 - 1) * envelope_size;
12203
12204            // Zero reserved fields.
12205            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
12206
12207            // Safety:
12208            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
12209            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
12210            //   envelope_size bytes, there is always sufficient room.
12211            fidl::encoding::encode_in_envelope_optional::<PcmSupportedFormats, D>(
12212                self.pcm_supported_formats
12213                    .as_ref()
12214                    .map(<PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow),
12215                encoder,
12216                offset + cur_offset,
12217                depth,
12218            )?;
12219
12220            _prev_end_offset = cur_offset + envelope_size;
12221
12222            Ok(())
12223        }
12224    }
12225
12226    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats {
12227        #[inline(always)]
12228        fn new_empty() -> Self {
12229            Self::default()
12230        }
12231
12232        unsafe fn decode(
12233            &mut self,
12234            decoder: &mut fidl::encoding::Decoder<'_, D>,
12235            offset: usize,
12236            mut depth: fidl::encoding::Depth,
12237        ) -> fidl::Result<()> {
12238            decoder.debug_check_bounds::<Self>(offset);
12239            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
12240                None => return Err(fidl::Error::NotNullable),
12241                Some(len) => len,
12242            };
12243            // Calling decoder.out_of_line_offset(0) is not allowed.
12244            if len == 0 {
12245                return Ok(());
12246            };
12247            depth.increment()?;
12248            let envelope_size = 8;
12249            let bytes_len = len * envelope_size;
12250            let offset = decoder.out_of_line_offset(bytes_len)?;
12251            // Decode the envelope for each type.
12252            let mut _next_ordinal_to_read = 0;
12253            let mut next_offset = offset;
12254            let end_offset = offset + bytes_len;
12255            _next_ordinal_to_read += 1;
12256            if next_offset >= end_offset {
12257                return Ok(());
12258            }
12259
12260            // Decode unknown envelopes for gaps in ordinals.
12261            while _next_ordinal_to_read < 1 {
12262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12263                _next_ordinal_to_read += 1;
12264                next_offset += envelope_size;
12265            }
12266
12267            let next_out_of_line = decoder.next_out_of_line();
12268            let handles_before = decoder.remaining_handles();
12269            if let Some((inlined, num_bytes, num_handles)) =
12270                fidl::encoding::decode_envelope_header(decoder, next_offset)?
12271            {
12272                let member_inline_size =
12273                    <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12274                        decoder.context,
12275                    );
12276                if inlined != (member_inline_size <= 4) {
12277                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
12278                }
12279                let inner_offset;
12280                let mut inner_depth = depth.clone();
12281                if inlined {
12282                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
12283                    inner_offset = next_offset;
12284                } else {
12285                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12286                    inner_depth.increment()?;
12287                }
12288                let val_ref = self
12289                    .pcm_supported_formats
12290                    .get_or_insert_with(|| fidl::new_empty!(PcmSupportedFormats, D));
12291                fidl::decode!(PcmSupportedFormats, D, val_ref, decoder, inner_offset, inner_depth)?;
12292                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
12293                {
12294                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
12295                }
12296                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12297                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12298                }
12299            }
12300
12301            next_offset += envelope_size;
12302
12303            // Decode the remaining unknown envelopes.
12304            while next_offset < end_offset {
12305                _next_ordinal_to_read += 1;
12306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
12307                next_offset += envelope_size;
12308            }
12309
12310            Ok(())
12311        }
12312    }
12313
12314    impl fidl::encoding::ValueTypeMarker for DaiFrameFormat {
12315        type Borrowed<'a> = &'a Self;
12316        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12317            value
12318        }
12319    }
12320
12321    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormat {
12322        type Owned = Self;
12323
12324        #[inline(always)]
12325        fn inline_align(_context: fidl::encoding::Context) -> usize {
12326            8
12327        }
12328
12329        #[inline(always)]
12330        fn inline_size(_context: fidl::encoding::Context) -> usize {
12331            16
12332        }
12333    }
12334
12335    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormat, D>
12336        for &DaiFrameFormat
12337    {
12338        #[inline]
12339        unsafe fn encode(
12340            self,
12341            encoder: &mut fidl::encoding::Encoder<'_, D>,
12342            offset: usize,
12343            _depth: fidl::encoding::Depth,
12344        ) -> fidl::Result<()> {
12345            encoder.debug_check_bounds::<DaiFrameFormat>(offset);
12346            encoder.write_num::<u64>(self.ordinal(), offset);
12347            match self {
12348                DaiFrameFormat::FrameFormatStandard(ref val) => {
12349                    fidl::encoding::encode_in_envelope::<DaiFrameFormatStandard, D>(
12350                        <DaiFrameFormatStandard as fidl::encoding::ValueTypeMarker>::borrow(val),
12351                        encoder,
12352                        offset + 8,
12353                        _depth,
12354                    )
12355                }
12356                DaiFrameFormat::FrameFormatCustom(ref val) => {
12357                    fidl::encoding::encode_in_envelope::<DaiFrameFormatCustom, D>(
12358                        <DaiFrameFormatCustom as fidl::encoding::ValueTypeMarker>::borrow(val),
12359                        encoder,
12360                        offset + 8,
12361                        _depth,
12362                    )
12363                }
12364            }
12365        }
12366    }
12367
12368    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormat {
12369        #[inline(always)]
12370        fn new_empty() -> Self {
12371            Self::FrameFormatStandard(fidl::new_empty!(DaiFrameFormatStandard, D))
12372        }
12373
12374        #[inline]
12375        unsafe fn decode(
12376            &mut self,
12377            decoder: &mut fidl::encoding::Decoder<'_, D>,
12378            offset: usize,
12379            mut depth: fidl::encoding::Depth,
12380        ) -> fidl::Result<()> {
12381            decoder.debug_check_bounds::<Self>(offset);
12382            #[allow(unused_variables)]
12383            let next_out_of_line = decoder.next_out_of_line();
12384            let handles_before = decoder.remaining_handles();
12385            let (ordinal, inlined, num_bytes, num_handles) =
12386                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12387
12388            let member_inline_size = match ordinal {
12389                1 => <DaiFrameFormatStandard as fidl::encoding::TypeMarker>::inline_size(
12390                    decoder.context,
12391                ),
12392                2 => <DaiFrameFormatCustom as fidl::encoding::TypeMarker>::inline_size(
12393                    decoder.context,
12394                ),
12395                _ => return Err(fidl::Error::UnknownUnionTag),
12396            };
12397
12398            if inlined != (member_inline_size <= 4) {
12399                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12400            }
12401            let _inner_offset;
12402            if inlined {
12403                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12404                _inner_offset = offset + 8;
12405            } else {
12406                depth.increment()?;
12407                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12408            }
12409            match ordinal {
12410                1 => {
12411                    #[allow(irrefutable_let_patterns)]
12412                    if let DaiFrameFormat::FrameFormatStandard(_) = self {
12413                        // Do nothing, read the value into the object
12414                    } else {
12415                        // Initialize `self` to the right variant
12416                        *self = DaiFrameFormat::FrameFormatStandard(fidl::new_empty!(
12417                            DaiFrameFormatStandard,
12418                            D
12419                        ));
12420                    }
12421                    #[allow(irrefutable_let_patterns)]
12422                    if let DaiFrameFormat::FrameFormatStandard(ref mut val) = self {
12423                        fidl::decode!(
12424                            DaiFrameFormatStandard,
12425                            D,
12426                            val,
12427                            decoder,
12428                            _inner_offset,
12429                            depth
12430                        )?;
12431                    } else {
12432                        unreachable!()
12433                    }
12434                }
12435                2 => {
12436                    #[allow(irrefutable_let_patterns)]
12437                    if let DaiFrameFormat::FrameFormatCustom(_) = self {
12438                        // Do nothing, read the value into the object
12439                    } else {
12440                        // Initialize `self` to the right variant
12441                        *self = DaiFrameFormat::FrameFormatCustom(fidl::new_empty!(
12442                            DaiFrameFormatCustom,
12443                            D
12444                        ));
12445                    }
12446                    #[allow(irrefutable_let_patterns)]
12447                    if let DaiFrameFormat::FrameFormatCustom(ref mut val) = self {
12448                        fidl::decode!(DaiFrameFormatCustom, D, val, decoder, _inner_offset, depth)?;
12449                    } else {
12450                        unreachable!()
12451                    }
12452                }
12453                ordinal => panic!("unexpected ordinal {:?}", ordinal),
12454            }
12455            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12456                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12457            }
12458            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12459                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12460            }
12461            Ok(())
12462        }
12463    }
12464
12465    impl fidl::encoding::ValueTypeMarker for Format2 {
12466        type Borrowed<'a> = &'a Self;
12467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12468            value
12469        }
12470    }
12471
12472    unsafe impl fidl::encoding::TypeMarker for Format2 {
12473        type Owned = Self;
12474
12475        #[inline(always)]
12476        fn inline_align(_context: fidl::encoding::Context) -> usize {
12477            8
12478        }
12479
12480        #[inline(always)]
12481        fn inline_size(_context: fidl::encoding::Context) -> usize {
12482            16
12483        }
12484    }
12485
12486    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format2, D> for &Format2 {
12487        #[inline]
12488        unsafe fn encode(
12489            self,
12490            encoder: &mut fidl::encoding::Encoder<'_, D>,
12491            offset: usize,
12492            _depth: fidl::encoding::Depth,
12493        ) -> fidl::Result<()> {
12494            encoder.debug_check_bounds::<Format2>(offset);
12495            encoder.write_num::<u64>(self.ordinal(), offset);
12496            match self {
12497                Format2::PcmFormat(ref val) => fidl::encoding::encode_in_envelope::<PcmFormat, D>(
12498                    <PcmFormat as fidl::encoding::ValueTypeMarker>::borrow(val),
12499                    encoder,
12500                    offset + 8,
12501                    _depth,
12502                ),
12503                Format2::Encoding(ref val) => fidl::encoding::encode_in_envelope::<Encoding, D>(
12504                    <Encoding as fidl::encoding::ValueTypeMarker>::borrow(val),
12505                    encoder,
12506                    offset + 8,
12507                    _depth,
12508                ),
12509                Format2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12510            }
12511        }
12512    }
12513
12514    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format2 {
12515        #[inline(always)]
12516        fn new_empty() -> Self {
12517            Self::__SourceBreaking { unknown_ordinal: 0 }
12518        }
12519
12520        #[inline]
12521        unsafe fn decode(
12522            &mut self,
12523            decoder: &mut fidl::encoding::Decoder<'_, D>,
12524            offset: usize,
12525            mut depth: fidl::encoding::Depth,
12526        ) -> fidl::Result<()> {
12527            decoder.debug_check_bounds::<Self>(offset);
12528            #[allow(unused_variables)]
12529            let next_out_of_line = decoder.next_out_of_line();
12530            let handles_before = decoder.remaining_handles();
12531            let (ordinal, inlined, num_bytes, num_handles) =
12532                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12533
12534            let member_inline_size = match ordinal {
12535                1 => <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12536                2 => <Encoding as fidl::encoding::TypeMarker>::inline_size(decoder.context),
12537                0 => return Err(fidl::Error::UnknownUnionTag),
12538                _ => num_bytes as usize,
12539            };
12540
12541            if inlined != (member_inline_size <= 4) {
12542                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12543            }
12544            let _inner_offset;
12545            if inlined {
12546                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12547                _inner_offset = offset + 8;
12548            } else {
12549                depth.increment()?;
12550                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12551            }
12552            match ordinal {
12553                1 => {
12554                    #[allow(irrefutable_let_patterns)]
12555                    if let Format2::PcmFormat(_) = self {
12556                        // Do nothing, read the value into the object
12557                    } else {
12558                        // Initialize `self` to the right variant
12559                        *self = Format2::PcmFormat(fidl::new_empty!(PcmFormat, D));
12560                    }
12561                    #[allow(irrefutable_let_patterns)]
12562                    if let Format2::PcmFormat(ref mut val) = self {
12563                        fidl::decode!(PcmFormat, D, val, decoder, _inner_offset, depth)?;
12564                    } else {
12565                        unreachable!()
12566                    }
12567                }
12568                2 => {
12569                    #[allow(irrefutable_let_patterns)]
12570                    if let Format2::Encoding(_) = self {
12571                        // Do nothing, read the value into the object
12572                    } else {
12573                        // Initialize `self` to the right variant
12574                        *self = Format2::Encoding(fidl::new_empty!(Encoding, D));
12575                    }
12576                    #[allow(irrefutable_let_patterns)]
12577                    if let Format2::Encoding(ref mut val) = self {
12578                        fidl::decode!(Encoding, D, val, decoder, _inner_offset, depth)?;
12579                    } else {
12580                        unreachable!()
12581                    }
12582                }
12583                #[allow(deprecated)]
12584                ordinal => {
12585                    for _ in 0..num_handles {
12586                        decoder.drop_next_handle()?;
12587                    }
12588                    *self = Format2::__SourceBreaking { unknown_ordinal: ordinal };
12589                }
12590            }
12591            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12592                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12593            }
12594            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12595                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12596            }
12597            Ok(())
12598        }
12599    }
12600
12601    impl fidl::encoding::ValueTypeMarker for SupportedFormats2 {
12602        type Borrowed<'a> = &'a Self;
12603        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
12604            value
12605        }
12606    }
12607
12608    unsafe impl fidl::encoding::TypeMarker for SupportedFormats2 {
12609        type Owned = Self;
12610
12611        #[inline(always)]
12612        fn inline_align(_context: fidl::encoding::Context) -> usize {
12613            8
12614        }
12615
12616        #[inline(always)]
12617        fn inline_size(_context: fidl::encoding::Context) -> usize {
12618            16
12619        }
12620    }
12621
12622    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats2, D>
12623        for &SupportedFormats2
12624    {
12625        #[inline]
12626        unsafe fn encode(
12627            self,
12628            encoder: &mut fidl::encoding::Encoder<'_, D>,
12629            offset: usize,
12630            _depth: fidl::encoding::Depth,
12631        ) -> fidl::Result<()> {
12632            encoder.debug_check_bounds::<SupportedFormats2>(offset);
12633            encoder.write_num::<u64>(self.ordinal(), offset);
12634            match self {
12635                SupportedFormats2::PcmSupportedFormats(ref val) => {
12636                    fidl::encoding::encode_in_envelope::<PcmSupportedFormats, D>(
12637                        <PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow(val),
12638                        encoder,
12639                        offset + 8,
12640                        _depth,
12641                    )
12642                }
12643                SupportedFormats2::SupportedEncodings(ref val) => {
12644                    fidl::encoding::encode_in_envelope::<SupportedEncodings, D>(
12645                        <SupportedEncodings as fidl::encoding::ValueTypeMarker>::borrow(val),
12646                        encoder,
12647                        offset + 8,
12648                        _depth,
12649                    )
12650                }
12651                SupportedFormats2::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
12652            }
12653        }
12654    }
12655
12656    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats2 {
12657        #[inline(always)]
12658        fn new_empty() -> Self {
12659            Self::__SourceBreaking { unknown_ordinal: 0 }
12660        }
12661
12662        #[inline]
12663        unsafe fn decode(
12664            &mut self,
12665            decoder: &mut fidl::encoding::Decoder<'_, D>,
12666            offset: usize,
12667            mut depth: fidl::encoding::Depth,
12668        ) -> fidl::Result<()> {
12669            decoder.debug_check_bounds::<Self>(offset);
12670            #[allow(unused_variables)]
12671            let next_out_of_line = decoder.next_out_of_line();
12672            let handles_before = decoder.remaining_handles();
12673            let (ordinal, inlined, num_bytes, num_handles) =
12674                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
12675
12676            let member_inline_size = match ordinal {
12677                1 => <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
12678                    decoder.context,
12679                ),
12680                2 => {
12681                    <SupportedEncodings as fidl::encoding::TypeMarker>::inline_size(decoder.context)
12682                }
12683                0 => return Err(fidl::Error::UnknownUnionTag),
12684                _ => num_bytes as usize,
12685            };
12686
12687            if inlined != (member_inline_size <= 4) {
12688                return Err(fidl::Error::InvalidInlineBitInEnvelope);
12689            }
12690            let _inner_offset;
12691            if inlined {
12692                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
12693                _inner_offset = offset + 8;
12694            } else {
12695                depth.increment()?;
12696                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
12697            }
12698            match ordinal {
12699                1 => {
12700                    #[allow(irrefutable_let_patterns)]
12701                    if let SupportedFormats2::PcmSupportedFormats(_) = self {
12702                        // Do nothing, read the value into the object
12703                    } else {
12704                        // Initialize `self` to the right variant
12705                        *self = SupportedFormats2::PcmSupportedFormats(fidl::new_empty!(
12706                            PcmSupportedFormats,
12707                            D
12708                        ));
12709                    }
12710                    #[allow(irrefutable_let_patterns)]
12711                    if let SupportedFormats2::PcmSupportedFormats(ref mut val) = self {
12712                        fidl::decode!(PcmSupportedFormats, D, val, decoder, _inner_offset, depth)?;
12713                    } else {
12714                        unreachable!()
12715                    }
12716                }
12717                2 => {
12718                    #[allow(irrefutable_let_patterns)]
12719                    if let SupportedFormats2::SupportedEncodings(_) = self {
12720                        // Do nothing, read the value into the object
12721                    } else {
12722                        // Initialize `self` to the right variant
12723                        *self = SupportedFormats2::SupportedEncodings(fidl::new_empty!(
12724                            SupportedEncodings,
12725                            D
12726                        ));
12727                    }
12728                    #[allow(irrefutable_let_patterns)]
12729                    if let SupportedFormats2::SupportedEncodings(ref mut val) = self {
12730                        fidl::decode!(SupportedEncodings, D, val, decoder, _inner_offset, depth)?;
12731                    } else {
12732                        unreachable!()
12733                    }
12734                }
12735                #[allow(deprecated)]
12736                ordinal => {
12737                    for _ in 0..num_handles {
12738                        decoder.drop_next_handle()?;
12739                    }
12740                    *self = SupportedFormats2::__SourceBreaking { unknown_ordinal: ordinal };
12741                }
12742            }
12743            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
12744                return Err(fidl::Error::InvalidNumBytesInEnvelope);
12745            }
12746            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
12747                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
12748            }
12749            Ok(())
12750        }
12751    }
12752}