fidl_fuchsia_hardware_audio__common/
fidl_fuchsia_hardware_audio__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type ClockDomain = u32;
12
13pub type ElementId = u64;
14
15pub type TopologyId = u64;
16
17pub const CLOCK_DOMAIN_EXTERNAL: u32 = 4294967295;
18
19pub const CLOCK_DOMAIN_MONOTONIC: u32 = 0;
20
21pub const MAX_COUNT_CHANNELS_IN_RING_BUFFER: u32 = 64;
22
23pub const MAX_COUNT_CHANNEL_SETS: u32 = 64;
24
25pub const MAX_COUNT_DAI_FORMATS: u32 = MAX_COUNT_FORMATS as u32;
26
27pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SAMPLE: u32 = 8;
28
29pub const MAX_COUNT_DAI_SUPPORTED_BITS_PER_SLOT: u32 = 8;
30
31pub const MAX_COUNT_DAI_SUPPORTED_FRAME_FORMATS: u32 = 64;
32
33pub const MAX_COUNT_DAI_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
34
35pub const MAX_COUNT_DAI_SUPPORTED_RATES: u32 = 64;
36
37pub const MAX_COUNT_DAI_SUPPORTED_SAMPLE_FORMATS: u32 = 4;
38
39pub const MAX_COUNT_FORMATS: u32 = 64;
40
41pub const MAX_COUNT_SUPPORTED_BYTES_PER_SAMPLE: u32 = 8;
42
43pub const MAX_COUNT_SUPPORTED_NUMBER_OF_CHANNELS: u32 = 64;
44
45pub const MAX_COUNT_SUPPORTED_RATES: u32 = 64;
46
47pub const MAX_COUNT_SUPPORTED_SAMPLE_FORMATS: u32 = 3;
48
49pub const MAX_COUNT_SUPPORTED_VALID_BITS_PER_SAMPLE: u32 = 8;
50
51pub const MAX_DAI_UI_STRING_SIZE: u32 = 256;
52
53pub const MAX_UI_STRING_SIZE: u32 = 256;
54
55pub const UNIQUE_ID_SIZE: u32 = 16;
56
57/// Standard Frame format.
58#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
59#[repr(u8)]
60pub enum DaiFrameFormatStandard {
61    /// No frame format as in samples without a frame sync like PDM.
62    None = 1,
63    /// Format as specified in the I2S specification (left justified, 2 channels, 32 bits per
64    /// sample, frame sync stays low for the left channel and high for the right channel, data
65    /// starts one clock cycle after frame sync changes clocked out at the falling edge of sclk).
66    I2S = 2,
67    /// Left justified, 2 channels. Data starts at frame sync changes from low to high clocked out
68    /// at the falling edge of sclk. The frame sync must stay high for `bits_per_sample` bits for
69    /// the first channel and low for `bits_per_sample` bits for the second channel.
70    StereoLeft = 3,
71    /// Right justified, 2 channels. The frame sync must stay high for `bits_per_sample` bits for
72    /// the first channel and low for `bits_per_sample` bits for the second channel.
73    StereoRight = 4,
74    /// Left justified, variable number of channels, data starts at frame sync changes from low to
75    /// high clocked out at the rising edge of sclk. The frame sync must stay high for exactly 1
76    /// clock cycle.
77    Tdm1 = 5,
78    /// Left justified, variable number of channels, data starts one clock cycle after the frame
79    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
80    /// stay high for exactly 1 clock cycle.
81    Tdm2 = 6,
82    /// Left justified, variable number of channels, data starts two clock cycles after the frame
83    /// sync changes from low to high clocked out at the rising edge of sclk. The frame sync must
84    /// stay high for exactly 1 clock cycle.
85    Tdm3 = 7,
86}
87
88impl DaiFrameFormatStandard {
89    #[inline]
90    pub fn from_primitive(prim: u8) -> Option<Self> {
91        match prim {
92            1 => Some(Self::None),
93            2 => Some(Self::I2S),
94            3 => Some(Self::StereoLeft),
95            4 => Some(Self::StereoRight),
96            5 => Some(Self::Tdm1),
97            6 => Some(Self::Tdm2),
98            7 => Some(Self::Tdm3),
99            _ => None,
100        }
101    }
102
103    #[inline]
104    pub const fn into_primitive(self) -> u8 {
105        self as u8
106    }
107}
108
109#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
110#[repr(u8)]
111pub enum DaiSampleFormat {
112    /// Pulse Density Modulation samples.
113    Pdm = 1,
114    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
115    PcmSigned = 2,
116    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
117    PcmUnsigned = 3,
118    /// Floating point samples, encoded per the IEEE-754 standard.
119    PcmFloat = 4,
120}
121
122impl DaiSampleFormat {
123    #[inline]
124    pub fn from_primitive(prim: u8) -> Option<Self> {
125        match prim {
126            1 => Some(Self::Pdm),
127            2 => Some(Self::PcmSigned),
128            3 => Some(Self::PcmUnsigned),
129            4 => Some(Self::PcmFloat),
130            _ => None,
131        }
132    }
133
134    #[inline]
135    pub const fn into_primitive(self) -> u8 {
136        self as u8
137    }
138}
139
140#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
141pub enum DeviceType {
142    /// Device supports the fuchsia.hardware.audio/StreamConfig protocol.
143    StreamConfig,
144    /// Device supports the fuchsia.hardware.audio/Dai protocol.
145    Dai,
146    /// Device supports the fuchsia.hardware.audio/Codec protocol.
147    Codec,
148    /// Device supports the fuchsia.hardware.audio/Composite protocol.
149    Composite,
150    #[doc(hidden)]
151    __SourceBreaking { unknown_ordinal: u32 },
152}
153
154/// Pattern that matches an unknown `DeviceType` member.
155#[macro_export]
156macro_rules! DeviceTypeUnknown {
157    () => {
158        _
159    };
160}
161
162impl DeviceType {
163    #[inline]
164    pub fn from_primitive(prim: u32) -> Option<Self> {
165        match prim {
166            1 => Some(Self::StreamConfig),
167            2 => Some(Self::Dai),
168            3 => Some(Self::Codec),
169            4 => Some(Self::Composite),
170            _ => None,
171        }
172    }
173
174    #[inline]
175    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
176        match prim {
177            1 => Self::StreamConfig,
178            2 => Self::Dai,
179            3 => Self::Codec,
180            4 => Self::Composite,
181            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
182        }
183    }
184
185    #[inline]
186    pub fn unknown() -> Self {
187        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
188    }
189
190    #[inline]
191    pub const fn into_primitive(self) -> u32 {
192        match self {
193            Self::StreamConfig => 1,
194            Self::Dai => 2,
195            Self::Codec => 3,
196            Self::Composite => 4,
197            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
198        }
199    }
200
201    #[inline]
202    pub fn is_unknown(&self) -> bool {
203        match self {
204            Self::__SourceBreaking { unknown_ordinal: _ } => true,
205            _ => false,
206        }
207    }
208}
209
210#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
211pub enum DriverError {
212    /// The driver encountered an otherwise unspecified error while performing the operation.
213    InternalError,
214    /// The operation is not implemented, supported, or enabled.
215    NotSupported,
216    /// An argument is invalid.
217    InvalidArgs,
218    /// The subject of the operation is the wrong type to perform the operation.
219    WrongType,
220    /// The operation cannot be performed currently but potentially could succeed if
221    /// the caller waits for a prerequisite to be satisfied.
222    ShouldWait,
223    /// A fatal error has occurred in the driver. The connection is no longer
224    /// usable and the client should close it.
225    FatalError,
226    #[doc(hidden)]
227    __SourceBreaking { unknown_ordinal: u32 },
228}
229
230/// Pattern that matches an unknown `DriverError` member.
231#[macro_export]
232macro_rules! DriverErrorUnknown {
233    () => {
234        _
235    };
236}
237
238impl DriverError {
239    #[inline]
240    pub fn from_primitive(prim: u32) -> Option<Self> {
241        match prim {
242            1 => Some(Self::InternalError),
243            2 => Some(Self::NotSupported),
244            3 => Some(Self::InvalidArgs),
245            4 => Some(Self::WrongType),
246            5 => Some(Self::ShouldWait),
247            6 => Some(Self::FatalError),
248            _ => None,
249        }
250    }
251
252    #[inline]
253    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
254        match prim {
255            1 => Self::InternalError,
256            2 => Self::NotSupported,
257            3 => Self::InvalidArgs,
258            4 => Self::WrongType,
259            5 => Self::ShouldWait,
260            6 => Self::FatalError,
261            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
262        }
263    }
264
265    #[inline]
266    pub fn unknown() -> Self {
267        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
268    }
269
270    #[inline]
271    pub const fn into_primitive(self) -> u32 {
272        match self {
273            Self::InternalError => 1,
274            Self::NotSupported => 2,
275            Self::InvalidArgs => 3,
276            Self::WrongType => 4,
277            Self::ShouldWait => 5,
278            Self::FatalError => 6,
279            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
280        }
281    }
282
283    #[inline]
284    pub fn is_unknown(&self) -> bool {
285        match self {
286            Self::__SourceBreaking { unknown_ordinal: _ } => true,
287            _ => false,
288        }
289    }
290}
291
292#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
293#[repr(u32)]
294pub enum GetVmoError {
295    /// The ring buffer setup failed due to an invalid argument, e.g. min_frames is too big.
296    InvalidArgs = 1,
297    /// The ring buffer setup failed due to an internal error.
298    InternalError = 2,
299}
300
301impl GetVmoError {
302    #[inline]
303    pub fn from_primitive(prim: u32) -> Option<Self> {
304        match prim {
305            1 => Some(Self::InvalidArgs),
306            2 => Some(Self::InternalError),
307            _ => None,
308        }
309    }
310
311    #[inline]
312    pub const fn into_primitive(self) -> u32 {
313        self as u32
314    }
315}
316
317#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
318#[repr(u32)]
319pub enum PlugDetectCapabilities {
320    /// Driver is hardwired (will always be plugged in).
321    Hardwired = 0,
322    /// Driver is able to asynchronously notify of plug state changes.
323    CanAsyncNotify = 1,
324}
325
326impl PlugDetectCapabilities {
327    #[inline]
328    pub fn from_primitive(prim: u32) -> Option<Self> {
329        match prim {
330            0 => Some(Self::Hardwired),
331            1 => Some(Self::CanAsyncNotify),
332            _ => None,
333        }
334    }
335
336    #[inline]
337    pub const fn into_primitive(self) -> u32 {
338        self as u32
339    }
340}
341
342#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
343#[repr(u8)]
344pub enum SampleFormat {
345    /// Signed integer Linear Pulse Code Modulation samples, at the host endianness.
346    PcmSigned = 1,
347    /// Unsigned integer Linear Pulse Code Modulation samples, at the host endianness.
348    PcmUnsigned = 2,
349    /// Floating point samples, encoded per the IEEE-754 standard.
350    PcmFloat = 3,
351}
352
353impl SampleFormat {
354    #[inline]
355    pub fn from_primitive(prim: u8) -> Option<Self> {
356        match prim {
357            1 => Some(Self::PcmSigned),
358            2 => Some(Self::PcmUnsigned),
359            3 => Some(Self::PcmFloat),
360            _ => None,
361        }
362    }
363
364    #[inline]
365    pub const fn into_primitive(self) -> u8 {
366        self as u8
367    }
368}
369
370#[derive(Clone, Debug, PartialEq)]
371pub struct CodecGetPropertiesResponse {
372    pub properties: CodecProperties,
373}
374
375impl fidl::Persistable for CodecGetPropertiesResponse {}
376
377#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
378pub struct CodecSetDaiFormatRequest {
379    pub format: DaiFormat,
380}
381
382impl fidl::Persistable for CodecSetDaiFormatRequest {}
383
384#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
385#[repr(C)]
386pub struct CodecStartResponse {
387    pub start_time: i64,
388}
389
390impl fidl::Persistable for CodecStartResponse {}
391
392#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
393#[repr(C)]
394pub struct CodecStopResponse {
395    pub stop_time: i64,
396}
397
398impl fidl::Persistable for CodecStopResponse {}
399
400#[derive(Clone, Debug, PartialEq)]
401pub struct CodecWatchPlugStateResponse {
402    pub plug_state: PlugState,
403}
404
405impl fidl::Persistable for CodecWatchPlugStateResponse {}
406
407#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
408pub struct CodecGetDaiFormatsResponse {
409    pub formats: Vec<DaiSupportedFormats>,
410}
411
412impl fidl::Persistable for CodecGetDaiFormatsResponse {}
413
414#[derive(Clone, Debug, PartialEq)]
415pub struct CodecSetDaiFormatResponse {
416    pub state: CodecFormatInfo,
417}
418
419impl fidl::Persistable for CodecSetDaiFormatResponse {}
420
421#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
422#[repr(C)]
423pub struct CompositeGetDaiFormatsRequest {
424    pub processing_element_id: u64,
425}
426
427impl fidl::Persistable for CompositeGetDaiFormatsRequest {}
428
429#[derive(Clone, Debug, PartialEq)]
430pub struct CompositeGetPropertiesResponse {
431    pub properties: CompositeProperties,
432}
433
434impl fidl::Persistable for CompositeGetPropertiesResponse {}
435
436#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
437#[repr(C)]
438pub struct CompositeGetRingBufferFormatsRequest {
439    pub processing_element_id: u64,
440}
441
442impl fidl::Persistable for CompositeGetRingBufferFormatsRequest {}
443
444#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
445pub struct CompositeSetDaiFormatRequest {
446    pub processing_element_id: u64,
447    pub format: DaiFormat,
448}
449
450impl fidl::Persistable for CompositeSetDaiFormatRequest {}
451
452#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
453pub struct CompositeGetDaiFormatsResponse {
454    pub dai_formats: Vec<DaiSupportedFormats>,
455}
456
457impl fidl::Persistable for CompositeGetDaiFormatsResponse {}
458
459#[derive(Clone, Debug, PartialEq)]
460pub struct CompositeGetRingBufferFormatsResponse {
461    pub ring_buffer_formats: Vec<SupportedFormats>,
462}
463
464impl fidl::Persistable for CompositeGetRingBufferFormatsResponse {}
465
466/// DAI format. Frames are made up of `number_of_channels` samples which have `bits_per_sample` bits
467/// of data within `bits_per_slot` arranged in `frame_format`. For more detailed information see
468/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
469#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
470pub struct DaiFormat {
471    /// Number of channels.
472    /// Must be 2, if `frame_format` is DaiFrameFormatStandard::I2S, STEREO_LEFT or STEREO_RIGHT.
473    pub number_of_channels: u32,
474    /// Sets which channels are active via a bitmask.
475    /// The least significant bit corresponds to channel index 0.
476    /// Must not set bits beyond the least-significant `number_of_channels` bits.
477    pub channels_to_use_bitmask: u64,
478    /// The sample format of all samples.
479    pub sample_format: DaiSampleFormat,
480    /// The frame format of all samples.
481    pub frame_format: DaiFrameFormat,
482    /// The frame rate for all samples.
483    pub frame_rate: u32,
484    /// The bits per slot for all channels.
485    pub bits_per_slot: u8,
486    /// The bits per sample for each channel.
487    /// Must be smaller than `bits_per_slot` for all samples to fit.
488    pub bits_per_sample: u8,
489}
490
491impl fidl::Persistable for DaiFormat {}
492
493/// Custom Frame format.
494#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
495pub struct DaiFrameFormatCustom {
496    /// Justification of the samples within a slot.
497    pub left_justified: bool,
498    /// Clocking of data samples and frame sync output on either raising or falling sclk.
499    /// If true then the sclk raises on the raising edge of the data and frame sync, i.e.
500    /// the data will be sampled on the falling edge of sclk (the middle of the sclk cycle).
501    /// Hence, if false then data will be sampled on the raising edge of sclk.
502    pub sclk_on_raising: bool,
503    /// Number of sclks between the beginning of a frame sync change and audio samples.
504    /// For example, for I2S set to 1 and for stereo left justified set to 0.
505    pub frame_sync_sclks_offset: i8,
506    /// Number of sclks the frame sync is high within a frame.
507    /// For example, for I2S with 32 bits slots set to 32, for TDM usually set to 1.
508    pub frame_sync_size: u8,
509}
510
511impl fidl::Persistable for DaiFrameFormatCustom {}
512
513#[derive(Clone, Debug, PartialEq)]
514pub struct DaiGetPropertiesResponse {
515    pub properties: DaiProperties,
516}
517
518impl fidl::Persistable for DaiGetPropertiesResponse {}
519
520/// Formats supported by the DAI. Frames are made up of `number_of_channels` samples which have
521/// `bits_per_sample` bits of data within `bits_per_slot` bits arranged in `frame_formats`.
522/// All values listed in each vector are supported. When not all combinations supported by the driver
523/// can be described with one `DaiSupportedFormats`, `GetDaiSupportedFormats` returns more than one
524/// `DaiSupportedFormats` in the returned vector.
525/// For more detailed information see
526/// [Digital Audio Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_dai).
527#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
528pub struct DaiSupportedFormats {
529    /// Possible number of channels supported.
530    pub number_of_channels: Vec<u32>,
531    /// Sample formats supported.
532    pub sample_formats: Vec<DaiSampleFormat>,
533    /// Frame formats supported.
534    pub frame_formats: Vec<DaiFrameFormat>,
535    /// Rates supported. Values must be listed in ascending order.
536    pub frame_rates: Vec<u32>,
537    /// The bits per slot supported. Values must be listed in ascending order.
538    pub bits_per_slot: Vec<u8>,
539    /// Bits per sample supported. Values must be listed in ascending order.
540    pub bits_per_sample: Vec<u8>,
541}
542
543impl fidl::Persistable for DaiSupportedFormats {}
544
545#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
546pub struct DaiGetDaiFormatsResponse {
547    pub dai_formats: Vec<DaiSupportedFormats>,
548}
549
550impl fidl::Persistable for DaiGetDaiFormatsResponse {}
551
552#[derive(Clone, Debug, PartialEq)]
553pub struct DaiGetRingBufferFormatsResponse {
554    pub ring_buffer_formats: Vec<SupportedFormats>,
555}
556
557impl fidl::Persistable for DaiGetRingBufferFormatsResponse {}
558
559#[derive(Clone, Debug, PartialEq)]
560pub struct HealthGetHealthStateResponse {
561    pub state: HealthState,
562}
563
564impl fidl::Persistable for HealthGetHealthStateResponse {}
565
566/// Format supporting non-compressed PCM audio. Frames are made up of `number_of_channels` samples
567/// which have `valid_bits_per_sample` bits of most-significant (left-justified) data within
568/// `bytes_per_sample`. bytes. For more detailed information see
569/// [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
570#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
571pub struct PcmFormat {
572    /// Number of channels.
573    pub number_of_channels: u8,
574    /// The format of all samples.
575    pub sample_format: SampleFormat,
576    /// Bytes allocated to hold a sample, equal or bigger than the valid sample size in
577    /// `valid_bits_per_sample`.
578    pub bytes_per_sample: u8,
579    /// Number of valid bits in a sample, must be equal or smaller than bits in `bytes_per_sample`.
580    /// If smaller, bits are left justified, and any additional bits must be ignored by the
581    /// receiver.
582    pub valid_bits_per_sample: u8,
583    /// The frame rate for all samples.
584    pub frame_rate: u32,
585}
586
587impl fidl::Persistable for PcmFormat {}
588
589#[derive(Clone, Debug, PartialEq)]
590pub struct RingBufferGetPropertiesResponse {
591    pub properties: RingBufferProperties,
592}
593
594impl fidl::Persistable for RingBufferGetPropertiesResponse {}
595
596#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
597#[repr(C)]
598pub struct RingBufferGetVmoRequest {
599    pub min_frames: u32,
600    pub clock_recovery_notifications_per_ring: u32,
601}
602
603impl fidl::Persistable for RingBufferGetVmoRequest {}
604
605#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
606#[repr(C)]
607pub struct RingBufferPositionInfo {
608    /// The driver's best estimate of the time (in the CLOCK_MONOTONIC timeline) at which the
609    /// playback/capture pointer reached the position indicated by `position`.
610    ///
611    /// `turn_on_delay` impact should not be incorporated into 'timestamp'.
612    /// No delays indicated in `DelayInfo` should be incorporated.
613    pub timestamp: i64,
614    /// The playback/capture pointer position (in bytes) in the ring buffer at time
615    /// `timestamp` as estimated by the driver.
616    pub position: u32,
617}
618
619impl fidl::Persistable for RingBufferPositionInfo {}
620
621#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
622#[repr(C)]
623pub struct RingBufferSetActiveChannelsRequest {
624    pub active_channels_bitmask: u64,
625}
626
627impl fidl::Persistable for RingBufferSetActiveChannelsRequest {}
628
629#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
630#[repr(C)]
631pub struct RingBufferStartResponse {
632    pub start_time: i64,
633}
634
635impl fidl::Persistable for RingBufferStartResponse {}
636
637#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
638#[repr(C)]
639pub struct RingBufferWatchClockRecoveryPositionInfoResponse {
640    pub position_info: RingBufferPositionInfo,
641}
642
643impl fidl::Persistable for RingBufferWatchClockRecoveryPositionInfoResponse {}
644
645#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
646#[repr(C)]
647pub struct RingBufferSetActiveChannelsResponse {
648    pub set_time: i64,
649}
650
651impl fidl::Persistable for RingBufferSetActiveChannelsResponse {}
652
653#[derive(Clone, Debug, PartialEq)]
654pub struct RingBufferWatchDelayInfoResponse {
655    pub delay_info: DelayInfo,
656}
657
658impl fidl::Persistable for RingBufferWatchDelayInfoResponse {}
659
660#[derive(Clone, Debug, PartialEq)]
661pub struct StreamConfigGetPropertiesResponse {
662    pub properties: StreamProperties,
663}
664
665impl fidl::Persistable for StreamConfigGetPropertiesResponse {}
666
667#[derive(Clone, Debug, PartialEq)]
668pub struct StreamConfigGetSupportedFormatsResponse {
669    pub supported_formats: Vec<SupportedFormats>,
670}
671
672impl fidl::Persistable for StreamConfigGetSupportedFormatsResponse {}
673
674#[derive(Clone, Debug, PartialEq)]
675pub struct StreamConfigSetGainRequest {
676    pub target_state: GainState,
677}
678
679impl fidl::Persistable for StreamConfigSetGainRequest {}
680
681#[derive(Clone, Debug, PartialEq)]
682pub struct StreamConfigWatchGainStateResponse {
683    pub gain_state: GainState,
684}
685
686impl fidl::Persistable for StreamConfigWatchGainStateResponse {}
687
688#[derive(Clone, Debug, PartialEq)]
689pub struct StreamConfigWatchPlugStateResponse {
690    pub plug_state: PlugState,
691}
692
693impl fidl::Persistable for StreamConfigWatchPlugStateResponse {}
694
695/// The specification of a single channel, within the overall channel configuration.
696#[derive(Clone, Debug, Default, PartialEq)]
697pub struct ChannelAttributes {
698    /// Minimum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
699    /// If `min_frequency` is not included, then this channel is assumed to cover the entire
700    /// low-frequency range of this device.
701    ///
702    /// Optional.
703    pub min_frequency: Option<u32>,
704    /// Maximum frequency guaranteed to be emitted by (or captured in) this channel, in Hz.
705    /// If `max_frequency` is not included, then this channel is assumed to cover the entire
706    /// high-frequency range of this device.
707    ///
708    /// Optional.
709    pub max_frequency: Option<u32>,
710    #[doc(hidden)]
711    pub __source_breaking: fidl::marker::SourceBreaking,
712}
713
714impl fidl::Persistable for ChannelAttributes {}
715
716/// The specification of a channel configuration.
717#[derive(Clone, Debug, Default, PartialEq)]
718pub struct ChannelSet {
719    /// Describes attributes for this channel set.
720    /// The size of this vector defines the number of channels supported by this `ChannelSet`.
721    /// Each element of the `attributes` vector defines attributes of a single channel.
722    ///
723    /// Required.
724    pub attributes: Option<Vec<ChannelAttributes>>,
725    #[doc(hidden)]
726    pub __source_breaking: fidl::marker::SourceBreaking,
727}
728
729impl fidl::Persistable for ChannelSet {}
730
731/// Codec format information.
732#[derive(Clone, Debug, Default, PartialEq)]
733pub struct CodecFormatInfo {
734    /// The driver's best estimate of the external delay (in nanoseconds) present in the pipeline
735    /// for the chosen format. When precisely synchronizing presentation across multiple entities
736    /// (e.g. devices), the external delay should be taken into account.
737    /// If not included `external_delay` is unknown.
738    ///
739    /// Optional.
740    pub external_delay: Option<i64>,
741    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
742    /// actually start playback/capture after a `Start` command is issued.
743    /// It may take some time for the hardware to get into fully operational mode, for example due
744    /// a power state change. This delay must be taken into account if not getting the initial audio
745    /// samples played or captured is not acceptable.
746    /// If not included `turn_on_delay` is unknown.
747    ///
748    /// Optional.
749    pub turn_on_delay: Option<i64>,
750    /// The driver's best estimate of the amount of time (in nanoseconds) it takes the hardware to
751    /// actually stop playback/capture after a `Stop` command is issued.
752    /// It may take some time for the hardware to get into fully stopped mode, for example due
753    /// a power state change. This delay must be taken into account if playback/capture of samples
754    /// after a 'Stop' command is not acceptable.
755    /// If not included, the turn off delay is unknown.
756    ///
757    /// Optional.
758    pub turn_off_delay: Option<i64>,
759    #[doc(hidden)]
760    pub __source_breaking: fidl::marker::SourceBreaking,
761}
762
763impl fidl::Persistable for CodecFormatInfo {}
764
765#[derive(Clone, Debug, Default, PartialEq)]
766pub struct CodecProperties {
767    /// Driver type is input (true) or output (false)
768    /// If not included, then the driver may be used for both input and output.
769    ///
770    /// Optional.
771    pub is_input: Option<bool>,
772    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
773    /// If included, this string must be non-empty.
774    ///
775    /// Optional.
776    pub manufacturer: Option<String>,
777    /// UI string for the product name. If not included, the product name is unspecified.
778    /// If included, this string must be non-empty.
779    ///
780    /// Optional.
781    pub product: Option<String>,
782    /// Unique identifier for the codec.
783    /// If not included, there is no unique id for the Codec.
784    ///
785    /// Optional.
786    pub unique_id: Option<[u8; 16]>,
787    /// Plug Detect Capabilities.
788    ///
789    /// Required.
790    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
791    #[doc(hidden)]
792    pub __source_breaking: fidl::marker::SourceBreaking,
793}
794
795impl fidl::Persistable for CodecProperties {}
796
797#[derive(Clone, Debug, Default, PartialEq)]
798pub struct CompositeProperties {
799    /// UI string for the manufacturer name. If not set, the manufacturer is unknown.
800    /// If included, this string must be non-empty.
801    ///
802    /// Optional.
803    pub manufacturer: Option<String>,
804    /// UI string for the product name. If not set, the product name is unknown.
805    /// If included, this string must be non-empty.
806    ///
807    /// Optional.
808    pub product: Option<String>,
809    /// A unique identifier. If not included, there is no unique id for the Device.
810    /// `unique_id` arrays starting with 0x42, 0x54, ... (or `BT` in ASCII) are
811    /// reserved for drivers implementing Bluetooth technologies.
812    /// `unique_id` arrays starting with 0x55, 0x53, 0x42, ... (or `USB` in ASCII) are
813    /// reserved for drivers implementing USB technologies.
814    /// Note that even though the above values map to readable ASCII characters, array
815    /// values can span the entire uint8 range (0-255).
816    ///
817    /// Optional.
818    pub unique_id: Option<[u8; 16]>,
819    /// An identifier for the clock domain in which this hardware operates. If
820    /// two hardware devices have the same clock domain, their clock rates are
821    /// identical and perfectly synchronized. Although these two clocks have the
822    /// same rate, the clock positions may be offset from each other by an
823    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
824    /// system wide entity, such as a platform bus or global clock tree.
825    ///
826    /// There are two special values:
827    ///
828    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
829    ///    rate as the system montonic clock.
830    ///
831    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
832    ///    rate and is not synchronized with any known clock, not even with
833    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
834    ///
835    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
836    /// notification updates to recover the hardware's clock.
837    ///
838    /// Required.
839    pub clock_domain: Option<u32>,
840    #[doc(hidden)]
841    pub __source_breaking: fidl::marker::SourceBreaking,
842}
843
844impl fidl::Persistable for CompositeProperties {}
845
846#[derive(Clone, Debug, Default, PartialEq)]
847pub struct DaiProperties {
848    /// Driver type is input (true) or output (false)
849    ///
850    /// Required.
851    pub is_input: Option<bool>,
852    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
853    /// If included, this string must be non-empty.
854    ///
855    /// Optional.
856    pub manufacturer: Option<String>,
857    /// UI string for the product name. If not included, the product name is unspecified.
858    /// If included, this string must be non-empty.
859    ///
860    /// Optional.
861    pub product_name: Option<String>,
862    /// A unique identifier for the driver.
863    /// If not included, there is no unique id for the driver.
864    ///
865    /// Optional.
866    pub unique_id: Option<[u8; 16]>,
867    /// An identifier for the clock domain in which this hardware operates. If
868    /// two hardware devices have the same clock domain, their clock rates are
869    /// identical and perfectly synchronized. Although these two clocks have the
870    /// same rate, the clock positions may be offset from each other by an
871    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
872    /// system wide entity, such as a platform bus or global clock tree.
873    ///
874    /// There are two special values:
875    ///
876    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
877    ///    rate as the system montonic clock.
878    ///
879    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
880    ///    rate and is not synchronized with any known clock, not even with
881    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
882    ///
883    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
884    /// notification updates to recover the hardware's clock.
885    ///
886    /// Required.
887    pub clock_domain: Option<u32>,
888    #[doc(hidden)]
889    pub __source_breaking: fidl::marker::SourceBreaking,
890}
891
892impl fidl::Persistable for DaiProperties {}
893
894/// Delay information as returned by the driver.
895#[derive(Clone, Debug, Default, PartialEq)]
896pub struct DelayInfo {
897    /// The driver's best estimate (for the chosen format) of the delay internal to the hardware it
898    /// abstracts.
899    ///
900    /// "Internal" refers to the hardware between the DAI interconnect and the ring buffer (such as
901    /// an SoC audio subsystem), whereas "external" refers to hardware on the far side of any DAI
902    /// interconnect (such as hardware codecs).
903    ///
904    /// For a given frame during playback, this is any delay after the driver copies it out of the
905    /// ring buffer, before it exits any interconnect.
906    /// For a given frame during recording, this is any delay after it enters the interconnect,
907    /// before the driver moves it into the ring buffer.
908    ///
909    /// `internal_delay` must be taken into account by the client when determining the requirements
910    /// for minimum lead time (during playback) and minimum capture delay (during capture).
911    ///
912    /// This delay must not include the inherent delay added by the temporary buffering needed
913    /// to copy data in and out of the ring buffer, which is contained in `RingBufferProperties`
914    /// field `driver_transfer_bytes`.
915    ///
916    /// Required.
917    pub internal_delay: Option<i64>,
918    /// The driver's best estimate (for the chosen format) of the delay external to the hardware it
919    /// abstracts.
920    ///
921    /// "External" refers to hardware on the far side of any DAI interconnect (such as hardware
922    /// codecs), whereas "internal" refers to hardware between the DAI interconnect and the ring
923    /// buffer (such as an SoC audio subsystem).
924    ///
925    /// `external_delay` must be taken into account by the client when determining the requirements
926    /// for minimum lead time (during playback) and minimum capture delay (during capture).
927    ///
928    /// If not included, `external_delay` is unknown. If unknown, a client may treat it however it
929    /// chooses (consider it zero or some large number, autodetect it, etc).
930    ///
931    /// Like `internal_delay`, this delay must not include the inherent delay added by the temporary
932    /// buffering needed to copy data in and out of the ring buffer, which is contained in
933    /// `RingBufferProperties` field `driver_transfer_bytes`.
934    ///
935    /// Optional.
936    pub external_delay: Option<i64>,
937    #[doc(hidden)]
938    pub __source_breaking: fidl::marker::SourceBreaking,
939}
940
941impl fidl::Persistable for DelayInfo {}
942
943#[derive(Clone, Debug, Default, PartialEq)]
944pub struct Format {
945    /// Format supporting non-compressed PCM samples.
946    ///
947    /// Required.
948    pub pcm_format: Option<PcmFormat>,
949    #[doc(hidden)]
950    pub __source_breaking: fidl::marker::SourceBreaking,
951}
952
953impl fidl::Persistable for Format {}
954
955/// Gain state requested by the client or returned by the driver.
956#[derive(Clone, Debug, Default, PartialEq)]
957pub struct GainState {
958    /// Current mute state. If not included, the state is unmuted.
959    ///
960    /// Optional.
961    pub muted: Option<bool>,
962    /// Current Automatic Gain Control (AGC) state. If not included, AGC is disabled.
963    ///
964    /// Optional.
965    pub agc_enabled: Option<bool>,
966    /// Current gain in decibels.
967    ///
968    /// Required.
969    pub gain_db: Option<f32>,
970    #[doc(hidden)]
971    pub __source_breaking: fidl::marker::SourceBreaking,
972}
973
974impl fidl::Persistable for GainState {}
975
976#[derive(Clone, Debug, Default, PartialEq)]
977pub struct HealthState {
978    /// Driver is currently healthy.
979    /// No health information is provided if this field is not included.
980    /// This allows drivers to signal their health state in scenarios where they have not enough
981    /// capabilities or resources to recover on their own, for instance not able to power down the
982    /// hardware via a GPIO or control over the power subsystem.
983    ///
984    /// Optional.
985    pub healthy: Option<bool>,
986    #[doc(hidden)]
987    pub __source_breaking: fidl::marker::SourceBreaking,
988}
989
990impl fidl::Persistable for HealthState {}
991
992/// Format supporting non-compressed PCM audio. Each frame consists of one or more
993/// (number_of_channels) samples, stored contiguously. Within the `bytes_per_sample` allocated for
994/// each sample, `valid_bits_per_sample` bits of data are stored in the most-significant
995/// (left-justified) portion.
996/// All values listed in each vector are supported. When not all combinations supported by
997/// the driver can be described with one `SupportedFormats` or `PcmSupportedFormats`,
998/// `GetSupportedFormats` returns more than one `SupportedFormats` in the returned vector.
999/// For more detailed information see [Audio Driver Streaming Interface](https://fuchsia.dev/fuchsia-src/concepts/drivers/driver_architectures/audio_drivers/audio_streaming).
1000#[derive(Clone, Debug, Default, PartialEq)]
1001pub struct PcmSupportedFormats {
1002    /// Vector of possible `ChannelSets` supported.
1003    /// A `ChannelSet` specifies a channel configuration (including a channel-count), plus a number
1004    /// of optional attributes.
1005    /// Only one `ChannelSet` is allowed for each unique channel-count. As a result, no two entries
1006    /// in `channel_sets` can contain `attributes` vectors with the same length.
1007    ///
1008    /// Required.
1009    pub channel_sets: Option<Vec<ChannelSet>>,
1010    /// Vector of possible `SampleFormat`s supported.
1011    ///
1012    /// Required.
1013    pub sample_formats: Option<Vec<SampleFormat>>,
1014    /// Vector of possible bytes allocated for each sample. Values must be listed in ascending
1015    /// order. All values listed in `valid_bits_per_sample` must fit into at least the largest
1016    /// `bytes_per_sample` value.
1017    ///
1018    /// Required.
1019    pub bytes_per_sample: Option<Vec<u8>>,
1020    /// Vector of possible number of bits containing valid data, within the sample container defined
1021    /// by `bytes_per_sample`. Values must be listed in ascending order. All values listed must fit
1022    /// into the largest `bytes_per_sample` value. The valid data bits must be most-significant
1023    /// (left-justified) within the sample container, and any additional bits will be ignored.
1024    ///
1025    /// Required.
1026    pub valid_bits_per_sample: Option<Vec<u8>>,
1027    /// Vector of possible frame rates supported. Values must be listed in ascending order.
1028    ///
1029    /// Required.
1030    pub frame_rates: Option<Vec<u32>>,
1031    #[doc(hidden)]
1032    pub __source_breaking: fidl::marker::SourceBreaking,
1033}
1034
1035impl fidl::Persistable for PcmSupportedFormats {}
1036
1037/// Plug state as returned by the driver.
1038/// If the driver reports a `plug_detect_capabilities` equal to HARDWIRED, then the driver should
1039/// respond to `WatchPlugState` only the first time it is called, with `plugged` set to true and
1040/// `plug_state_time` set to time '0'.
1041#[derive(Clone, Debug, Default, PartialEq)]
1042pub struct PlugState {
1043    /// Driver is currently plugged in. Required
1044    pub plugged: Option<bool>,
1045    /// Timestamps the information provided in the rest of the fields of this struct. Required.
1046    pub plug_state_time: Option<i64>,
1047    #[doc(hidden)]
1048    pub __source_breaking: fidl::marker::SourceBreaking,
1049}
1050
1051impl fidl::Persistable for PlugState {}
1052
1053/// Properties of the ring buffer. These values don't change once the ring buffer is created.
1054#[derive(Clone, Debug, Default, PartialEq)]
1055pub struct RingBufferProperties {
1056    /// When set to true, indicates that the ring buffer runs in a different cache coherency domain,
1057    /// and thus clients must ensure that their data writes are flushed all the way to main memory
1058    /// (during playback), or that their view of the ring buffer must be invalidated before any
1059    /// reads (during capture). This is because there may be hardware external to the CPUs that
1060    /// reads/writes main memory, bypassing the CPUs.
1061    ///
1062    /// When set to false, indicates that the ring buffer runs in the same cache coherency domain as
1063    /// the CPUs, hence the driver is not required to flush/invalidate the ring buffer.
1064    /// Note that in this case, the driver and client still must synchronize their data access, for
1065    /// instance by inserting the appropriate acquire fences before reading and releasing fences
1066    /// after writing, or (more commonly) by obeying the Producer/Consumer pattern described in
1067    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1068    ///
1069    /// Required.
1070    pub needs_cache_flush_or_invalidate: Option<bool>,
1071    /// The driver's best estimate of the time needed for the hardware to emit (during playback) or
1072    /// accept (during capture) frames, after a channel is activated by `SetActiveChannels`.
1073    ///
1074    /// The driver estimates that after `SetActiveChannels(channel)->(set_time)` enables a channel,
1075    /// its data will resume flowing at approximately `set_time` + `turn_on_delay`.
1076    /// Hardware can take time to become fully operational (e.g. due to a power state change, or
1077    /// communication delays between a Bluetooth driver's multiple hardware entities). The client
1078    /// must take this delay into account, if it is unacceptable to drop the actual audio frames
1079    /// and instead play/capture silence during this interval.
1080    /// If not included, `turn_on_delay` is unknown.
1081    ///
1082    /// Optional.
1083    pub turn_on_delay: Option<i64>,
1084    /// Size (in bytes) of the temporary buffers or FIFOs used by the driver when consuming or
1085    /// generating the ring buffer contents.
1086    ///
1087    /// The `driver_transfer_bytes` field is covered extensively in
1088    /// [Ring Buffer Behavior](https://fuchsia.dev/fuchsia-src/development/audio/ring_buffer.md).
1089    ///
1090    /// `driver_transfer_bytes` must not include the impact of delays caused by hardware or software
1091    /// processing abstracted by the driver. Those delays are communicated by `internal_delay` and
1092    /// `external_delay` fields in `DelayInfo`; they are orthogonal to this value.
1093    ///
1094    /// Required.
1095    pub driver_transfer_bytes: Option<u32>,
1096    #[doc(hidden)]
1097    pub __source_breaking: fidl::marker::SourceBreaking,
1098}
1099
1100impl fidl::Persistable for RingBufferProperties {}
1101
1102#[derive(Clone, Debug, Default, PartialEq)]
1103pub struct StreamProperties {
1104    /// A unique identifier. If not included, there is no unique id for the StreamConfig.
1105    /// `unique_id` arrays starting with 0x42, 0x54, ... (or `BT` in ASCII) are
1106    /// reserved for drivers implementing Bluetooth technologies.
1107    /// `unique_id` arrays starting with 0x55, 0x53, 0x42, ... (or `USB` in ASCII) are
1108    /// reserved for drivers implementing USB technologies.
1109    /// Note that even though the above values map to readable ASCII characters, array
1110    /// values can span the entire uint8 range (0-255).
1111    ///
1112    /// Optional.
1113    pub unique_id: Option<[u8; 16]>,
1114    /// Driver type is input (true) or output (false)
1115    ///
1116    /// Required.
1117    pub is_input: Option<bool>,
1118    /// Gain mute capability. If not included, the StreamConfig can't mute.
1119    ///
1120    /// Optional.
1121    pub can_mute: Option<bool>,
1122    /// Automatic Gain Control (AGC) capability. If not included, the StreamConfig can't AGC.
1123    ///
1124    /// Optional.
1125    pub can_agc: Option<bool>,
1126    /// Minimum gain in decibels.
1127    ///
1128    /// Required.
1129    pub min_gain_db: Option<f32>,
1130    /// Maximum gain in decibels.
1131    ///
1132    /// Required.
1133    pub max_gain_db: Option<f32>,
1134    /// Gain step in decibels, this value must not be negative, but may be zero to convey an
1135    /// effectively continuous range of values. Must not exceed `max_gain_db` - `min_gain_db`.
1136    ///
1137    /// Required.
1138    pub gain_step_db: Option<f32>,
1139    /// Plug Detect Capabilities.
1140    ///
1141    /// Required.
1142    pub plug_detect_capabilities: Option<PlugDetectCapabilities>,
1143    /// UI string for the manufacturer name. If not included, the manufacturer is unspecified.
1144    /// If included, this string must be non-empty.
1145    ///
1146    /// Optional.
1147    pub manufacturer: Option<String>,
1148    /// UI string for the product name. If not included, the product name is unspecified.
1149    /// If included, this string must be non-empty.
1150    ///
1151    /// Optional.
1152    pub product: Option<String>,
1153    /// An identifier for the clock domain in which this hardware operates. If
1154    /// two hardware devices have the same clock domain, their clock rates are
1155    /// identical and perfectly synchronized. Although these two clocks have the
1156    /// same rate, the clock positions may be offset from each other by an
1157    /// arbitrary (but fixed) amount. The clock_domain typically comes from a
1158    /// system wide entity, such as a platform bus or global clock tree.
1159    ///
1160    /// There are two special values:
1161    ///
1162    /// *  `CLOCK_DOMAIN_MONOTONIC` means the hardware is operating at the same
1163    ///    rate as the system montonic clock.
1164    ///
1165    /// *  `CLOCK_DOMAIN_EXTERNAL` means the hardware is operating at an unknown
1166    ///    rate and is not synchronized with any known clock, not even with
1167    ///    other clocks in domain `CLOCK_DOMAIN_EXTERNAL`.
1168    ///
1169    /// If the domain is not `CLOCK_DOMAIN_MONOTONIC`, client must use position
1170    /// notification updates to recover the hardware's clock.
1171    ///
1172    /// Required.
1173    pub clock_domain: Option<u32>,
1174    #[doc(hidden)]
1175    pub __source_breaking: fidl::marker::SourceBreaking,
1176}
1177
1178impl fidl::Persistable for StreamProperties {}
1179
1180/// All the possible formats supported by this device.
1181#[derive(Clone, Debug, Default, PartialEq)]
1182pub struct SupportedFormats {
1183    /// Supported formats for non-compressed PCM samples, with attributes.
1184    ///
1185    /// Required.
1186    pub pcm_supported_formats: Option<PcmSupportedFormats>,
1187    #[doc(hidden)]
1188    pub __source_breaking: fidl::marker::SourceBreaking,
1189}
1190
1191impl fidl::Persistable for SupportedFormats {}
1192
1193/// Either a standard or custom frame format.
1194#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
1195pub enum DaiFrameFormat {
1196    /// The format type of all samples in the DAI, listed in `DaiFrameFormatStandard`.
1197    FrameFormatStandard(DaiFrameFormatStandard),
1198    /// The format type of all samples in the DAI, specified in `DaiFrameFormatCustom`.
1199    FrameFormatCustom(DaiFrameFormatCustom),
1200}
1201
1202impl DaiFrameFormat {
1203    #[inline]
1204    pub fn ordinal(&self) -> u64 {
1205        match *self {
1206            Self::FrameFormatStandard(_) => 1,
1207            Self::FrameFormatCustom(_) => 2,
1208        }
1209    }
1210}
1211
1212impl fidl::Persistable for DaiFrameFormat {}
1213
1214pub mod codec_ordinals {
1215    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1216    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1217    pub const RESET: u64 = 0x50757ae579a7bd6b;
1218    pub const GET_PROPERTIES: u64 = 0x7a0d138a6a1d9d90;
1219    pub const STOP: u64 = 0x5c2e380df1332dbd;
1220    pub const START: u64 = 0x329cdacb286ab00;
1221    pub const GET_DAI_FORMATS: u64 = 0xf8bbc46b4ba6a52;
1222    pub const SET_DAI_FORMAT: u64 = 0x2f829df9e5a7a1ea;
1223    pub const WATCH_PLUG_STATE: u64 = 0x182b87f935ca7326;
1224}
1225
1226pub mod codec_connector_ordinals {
1227    pub const CONNECT: u64 = 0x1413f551544026c9;
1228}
1229
1230pub mod composite_ordinals {
1231    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1232    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1233    pub const RESET: u64 = 0xac355fb98341996;
1234    pub const GET_PROPERTIES: u64 = 0x31846fa0a459942b;
1235    pub const GET_RING_BUFFER_FORMATS: u64 = 0x1d89b701b6816ac4;
1236    pub const CREATE_RING_BUFFER: u64 = 0x28c5685f85262033;
1237    pub const GET_DAI_FORMATS: u64 = 0x3cbeaed59c8f69b;
1238    pub const SET_DAI_FORMAT: u64 = 0x155acf5cc0dc8a84;
1239}
1240
1241pub mod composite_connector_ordinals {
1242    pub const CONNECT: u64 = 0x7ee557529079e466;
1243}
1244
1245pub mod dai_ordinals {
1246    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1247    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1248    pub const RESET: u64 = 0x69e5fa9fa2f78c14;
1249    pub const GET_PROPERTIES: u64 = 0x2c25a1a66149510b;
1250    pub const GET_DAI_FORMATS: u64 = 0x1eb37b0cddf79d69;
1251    pub const GET_RING_BUFFER_FORMATS: u64 = 0x760371081d8c92e4;
1252    pub const CREATE_RING_BUFFER: u64 = 0x5af9760589a75257;
1253}
1254
1255pub mod dai_connector_ordinals {
1256    pub const CONNECT: u64 = 0x4e4db05c2eca1450;
1257}
1258
1259pub mod health_ordinals {
1260    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1261}
1262
1263pub mod ring_buffer_ordinals {
1264    pub const GET_PROPERTIES: u64 = 0x12947f061a8fe1;
1265    pub const WATCH_CLOCK_RECOVERY_POSITION_INFO: u64 = 0x694d5b898a4167e5;
1266    pub const GET_VMO: u64 = 0x44c8f4f5680e853a;
1267    pub const START: u64 = 0x5dd780a769a8892d;
1268    pub const STOP: u64 = 0x49a73d9cf1d4e110;
1269    pub const SET_ACTIVE_CHANNELS: u64 = 0x605464c1d384f309;
1270    pub const WATCH_DELAY_INFO: u64 = 0x6c1248db213fcf9f;
1271}
1272
1273pub mod stream_config_ordinals {
1274    pub const GET_HEALTH_STATE: u64 = 0x4e146d6bca733a84;
1275    pub const SIGNAL_PROCESSING_CONNECT: u64 = 0xa81907ce6066295;
1276    pub const GET_PROPERTIES: u64 = 0x7d89c02f3e2d3c01;
1277    pub const GET_SUPPORTED_FORMATS: u64 = 0x448efa7850cafe7e;
1278    pub const CREATE_RING_BUFFER: u64 = 0x2afb19dd13faa1ba;
1279    pub const WATCH_GAIN_STATE: u64 = 0x4772506136ab65c1;
1280    pub const SET_GAIN: u64 = 0x3943b41498c6a384;
1281    pub const WATCH_PLUG_STATE: u64 = 0x497345a6f048b2a6;
1282}
1283
1284pub mod stream_config_connector_ordinals {
1285    pub const CONNECT: u64 = 0x22051ff3021eafec;
1286}
1287
1288mod internal {
1289    use super::*;
1290    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatStandard {
1291        type Owned = Self;
1292
1293        #[inline(always)]
1294        fn inline_align(_context: fidl::encoding::Context) -> usize {
1295            std::mem::align_of::<u8>()
1296        }
1297
1298        #[inline(always)]
1299        fn inline_size(_context: fidl::encoding::Context) -> usize {
1300            std::mem::size_of::<u8>()
1301        }
1302
1303        #[inline(always)]
1304        fn encode_is_copy() -> bool {
1305            true
1306        }
1307
1308        #[inline(always)]
1309        fn decode_is_copy() -> bool {
1310            false
1311        }
1312    }
1313
1314    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatStandard {
1315        type Borrowed<'a> = Self;
1316        #[inline(always)]
1317        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1318            *value
1319        }
1320    }
1321
1322    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1323        for DaiFrameFormatStandard
1324    {
1325        #[inline]
1326        unsafe fn encode(
1327            self,
1328            encoder: &mut fidl::encoding::Encoder<'_, D>,
1329            offset: usize,
1330            _depth: fidl::encoding::Depth,
1331        ) -> fidl::Result<()> {
1332            encoder.debug_check_bounds::<Self>(offset);
1333            encoder.write_num(self.into_primitive(), offset);
1334            Ok(())
1335        }
1336    }
1337
1338    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1339        for DaiFrameFormatStandard
1340    {
1341        #[inline(always)]
1342        fn new_empty() -> Self {
1343            Self::None
1344        }
1345
1346        #[inline]
1347        unsafe fn decode(
1348            &mut self,
1349            decoder: &mut fidl::encoding::Decoder<'_, D>,
1350            offset: usize,
1351            _depth: fidl::encoding::Depth,
1352        ) -> fidl::Result<()> {
1353            decoder.debug_check_bounds::<Self>(offset);
1354            let prim = decoder.read_num::<u8>(offset);
1355
1356            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1357            Ok(())
1358        }
1359    }
1360    unsafe impl fidl::encoding::TypeMarker for DaiSampleFormat {
1361        type Owned = Self;
1362
1363        #[inline(always)]
1364        fn inline_align(_context: fidl::encoding::Context) -> usize {
1365            std::mem::align_of::<u8>()
1366        }
1367
1368        #[inline(always)]
1369        fn inline_size(_context: fidl::encoding::Context) -> usize {
1370            std::mem::size_of::<u8>()
1371        }
1372
1373        #[inline(always)]
1374        fn encode_is_copy() -> bool {
1375            true
1376        }
1377
1378        #[inline(always)]
1379        fn decode_is_copy() -> bool {
1380            false
1381        }
1382    }
1383
1384    impl fidl::encoding::ValueTypeMarker for DaiSampleFormat {
1385        type Borrowed<'a> = Self;
1386        #[inline(always)]
1387        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1388            *value
1389        }
1390    }
1391
1392    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1393        for DaiSampleFormat
1394    {
1395        #[inline]
1396        unsafe fn encode(
1397            self,
1398            encoder: &mut fidl::encoding::Encoder<'_, D>,
1399            offset: usize,
1400            _depth: fidl::encoding::Depth,
1401        ) -> fidl::Result<()> {
1402            encoder.debug_check_bounds::<Self>(offset);
1403            encoder.write_num(self.into_primitive(), offset);
1404            Ok(())
1405        }
1406    }
1407
1408    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSampleFormat {
1409        #[inline(always)]
1410        fn new_empty() -> Self {
1411            Self::Pdm
1412        }
1413
1414        #[inline]
1415        unsafe fn decode(
1416            &mut self,
1417            decoder: &mut fidl::encoding::Decoder<'_, D>,
1418            offset: usize,
1419            _depth: fidl::encoding::Depth,
1420        ) -> fidl::Result<()> {
1421            decoder.debug_check_bounds::<Self>(offset);
1422            let prim = decoder.read_num::<u8>(offset);
1423
1424            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1425            Ok(())
1426        }
1427    }
1428    unsafe impl fidl::encoding::TypeMarker for DeviceType {
1429        type Owned = Self;
1430
1431        #[inline(always)]
1432        fn inline_align(_context: fidl::encoding::Context) -> usize {
1433            std::mem::align_of::<u32>()
1434        }
1435
1436        #[inline(always)]
1437        fn inline_size(_context: fidl::encoding::Context) -> usize {
1438            std::mem::size_of::<u32>()
1439        }
1440
1441        #[inline(always)]
1442        fn encode_is_copy() -> bool {
1443            false
1444        }
1445
1446        #[inline(always)]
1447        fn decode_is_copy() -> bool {
1448            false
1449        }
1450    }
1451
1452    impl fidl::encoding::ValueTypeMarker for DeviceType {
1453        type Borrowed<'a> = Self;
1454        #[inline(always)]
1455        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1456            *value
1457        }
1458    }
1459
1460    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
1461        #[inline]
1462        unsafe fn encode(
1463            self,
1464            encoder: &mut fidl::encoding::Encoder<'_, D>,
1465            offset: usize,
1466            _depth: fidl::encoding::Depth,
1467        ) -> fidl::Result<()> {
1468            encoder.debug_check_bounds::<Self>(offset);
1469            encoder.write_num(self.into_primitive(), offset);
1470            Ok(())
1471        }
1472    }
1473
1474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
1475        #[inline(always)]
1476        fn new_empty() -> Self {
1477            Self::unknown()
1478        }
1479
1480        #[inline]
1481        unsafe fn decode(
1482            &mut self,
1483            decoder: &mut fidl::encoding::Decoder<'_, D>,
1484            offset: usize,
1485            _depth: fidl::encoding::Depth,
1486        ) -> fidl::Result<()> {
1487            decoder.debug_check_bounds::<Self>(offset);
1488            let prim = decoder.read_num::<u32>(offset);
1489
1490            *self = Self::from_primitive_allow_unknown(prim);
1491            Ok(())
1492        }
1493    }
1494    unsafe impl fidl::encoding::TypeMarker for DriverError {
1495        type Owned = Self;
1496
1497        #[inline(always)]
1498        fn inline_align(_context: fidl::encoding::Context) -> usize {
1499            std::mem::align_of::<u32>()
1500        }
1501
1502        #[inline(always)]
1503        fn inline_size(_context: fidl::encoding::Context) -> usize {
1504            std::mem::size_of::<u32>()
1505        }
1506
1507        #[inline(always)]
1508        fn encode_is_copy() -> bool {
1509            false
1510        }
1511
1512        #[inline(always)]
1513        fn decode_is_copy() -> bool {
1514            false
1515        }
1516    }
1517
1518    impl fidl::encoding::ValueTypeMarker for DriverError {
1519        type Borrowed<'a> = Self;
1520        #[inline(always)]
1521        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1522            *value
1523        }
1524    }
1525
1526    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DriverError {
1527        #[inline]
1528        unsafe fn encode(
1529            self,
1530            encoder: &mut fidl::encoding::Encoder<'_, D>,
1531            offset: usize,
1532            _depth: fidl::encoding::Depth,
1533        ) -> fidl::Result<()> {
1534            encoder.debug_check_bounds::<Self>(offset);
1535            encoder.write_num(self.into_primitive(), offset);
1536            Ok(())
1537        }
1538    }
1539
1540    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverError {
1541        #[inline(always)]
1542        fn new_empty() -> Self {
1543            Self::unknown()
1544        }
1545
1546        #[inline]
1547        unsafe fn decode(
1548            &mut self,
1549            decoder: &mut fidl::encoding::Decoder<'_, D>,
1550            offset: usize,
1551            _depth: fidl::encoding::Depth,
1552        ) -> fidl::Result<()> {
1553            decoder.debug_check_bounds::<Self>(offset);
1554            let prim = decoder.read_num::<u32>(offset);
1555
1556            *self = Self::from_primitive_allow_unknown(prim);
1557            Ok(())
1558        }
1559    }
1560    unsafe impl fidl::encoding::TypeMarker for GetVmoError {
1561        type Owned = Self;
1562
1563        #[inline(always)]
1564        fn inline_align(_context: fidl::encoding::Context) -> usize {
1565            std::mem::align_of::<u32>()
1566        }
1567
1568        #[inline(always)]
1569        fn inline_size(_context: fidl::encoding::Context) -> usize {
1570            std::mem::size_of::<u32>()
1571        }
1572
1573        #[inline(always)]
1574        fn encode_is_copy() -> bool {
1575            true
1576        }
1577
1578        #[inline(always)]
1579        fn decode_is_copy() -> bool {
1580            false
1581        }
1582    }
1583
1584    impl fidl::encoding::ValueTypeMarker for GetVmoError {
1585        type Borrowed<'a> = Self;
1586        #[inline(always)]
1587        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1588            *value
1589        }
1590    }
1591
1592    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GetVmoError {
1593        #[inline]
1594        unsafe fn encode(
1595            self,
1596            encoder: &mut fidl::encoding::Encoder<'_, D>,
1597            offset: usize,
1598            _depth: fidl::encoding::Depth,
1599        ) -> fidl::Result<()> {
1600            encoder.debug_check_bounds::<Self>(offset);
1601            encoder.write_num(self.into_primitive(), offset);
1602            Ok(())
1603        }
1604    }
1605
1606    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GetVmoError {
1607        #[inline(always)]
1608        fn new_empty() -> Self {
1609            Self::InvalidArgs
1610        }
1611
1612        #[inline]
1613        unsafe fn decode(
1614            &mut self,
1615            decoder: &mut fidl::encoding::Decoder<'_, D>,
1616            offset: usize,
1617            _depth: fidl::encoding::Depth,
1618        ) -> fidl::Result<()> {
1619            decoder.debug_check_bounds::<Self>(offset);
1620            let prim = decoder.read_num::<u32>(offset);
1621
1622            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1623            Ok(())
1624        }
1625    }
1626    unsafe impl fidl::encoding::TypeMarker for PlugDetectCapabilities {
1627        type Owned = Self;
1628
1629        #[inline(always)]
1630        fn inline_align(_context: fidl::encoding::Context) -> usize {
1631            std::mem::align_of::<u32>()
1632        }
1633
1634        #[inline(always)]
1635        fn inline_size(_context: fidl::encoding::Context) -> usize {
1636            std::mem::size_of::<u32>()
1637        }
1638
1639        #[inline(always)]
1640        fn encode_is_copy() -> bool {
1641            true
1642        }
1643
1644        #[inline(always)]
1645        fn decode_is_copy() -> bool {
1646            false
1647        }
1648    }
1649
1650    impl fidl::encoding::ValueTypeMarker for PlugDetectCapabilities {
1651        type Borrowed<'a> = Self;
1652        #[inline(always)]
1653        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1654            *value
1655        }
1656    }
1657
1658    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1659        for PlugDetectCapabilities
1660    {
1661        #[inline]
1662        unsafe fn encode(
1663            self,
1664            encoder: &mut fidl::encoding::Encoder<'_, D>,
1665            offset: usize,
1666            _depth: fidl::encoding::Depth,
1667        ) -> fidl::Result<()> {
1668            encoder.debug_check_bounds::<Self>(offset);
1669            encoder.write_num(self.into_primitive(), offset);
1670            Ok(())
1671        }
1672    }
1673
1674    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1675        for PlugDetectCapabilities
1676    {
1677        #[inline(always)]
1678        fn new_empty() -> Self {
1679            Self::Hardwired
1680        }
1681
1682        #[inline]
1683        unsafe fn decode(
1684            &mut self,
1685            decoder: &mut fidl::encoding::Decoder<'_, D>,
1686            offset: usize,
1687            _depth: fidl::encoding::Depth,
1688        ) -> fidl::Result<()> {
1689            decoder.debug_check_bounds::<Self>(offset);
1690            let prim = decoder.read_num::<u32>(offset);
1691
1692            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1693            Ok(())
1694        }
1695    }
1696    unsafe impl fidl::encoding::TypeMarker for SampleFormat {
1697        type Owned = Self;
1698
1699        #[inline(always)]
1700        fn inline_align(_context: fidl::encoding::Context) -> usize {
1701            std::mem::align_of::<u8>()
1702        }
1703
1704        #[inline(always)]
1705        fn inline_size(_context: fidl::encoding::Context) -> usize {
1706            std::mem::size_of::<u8>()
1707        }
1708
1709        #[inline(always)]
1710        fn encode_is_copy() -> bool {
1711            true
1712        }
1713
1714        #[inline(always)]
1715        fn decode_is_copy() -> bool {
1716            false
1717        }
1718    }
1719
1720    impl fidl::encoding::ValueTypeMarker for SampleFormat {
1721        type Borrowed<'a> = Self;
1722        #[inline(always)]
1723        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1724            *value
1725        }
1726    }
1727
1728    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SampleFormat {
1729        #[inline]
1730        unsafe fn encode(
1731            self,
1732            encoder: &mut fidl::encoding::Encoder<'_, D>,
1733            offset: usize,
1734            _depth: fidl::encoding::Depth,
1735        ) -> fidl::Result<()> {
1736            encoder.debug_check_bounds::<Self>(offset);
1737            encoder.write_num(self.into_primitive(), offset);
1738            Ok(())
1739        }
1740    }
1741
1742    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SampleFormat {
1743        #[inline(always)]
1744        fn new_empty() -> Self {
1745            Self::PcmSigned
1746        }
1747
1748        #[inline]
1749        unsafe fn decode(
1750            &mut self,
1751            decoder: &mut fidl::encoding::Decoder<'_, D>,
1752            offset: usize,
1753            _depth: fidl::encoding::Depth,
1754        ) -> fidl::Result<()> {
1755            decoder.debug_check_bounds::<Self>(offset);
1756            let prim = decoder.read_num::<u8>(offset);
1757
1758            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1759            Ok(())
1760        }
1761    }
1762
1763    impl fidl::encoding::ValueTypeMarker for CodecGetPropertiesResponse {
1764        type Borrowed<'a> = &'a Self;
1765        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1766            value
1767        }
1768    }
1769
1770    unsafe impl fidl::encoding::TypeMarker for CodecGetPropertiesResponse {
1771        type Owned = Self;
1772
1773        #[inline(always)]
1774        fn inline_align(_context: fidl::encoding::Context) -> usize {
1775            8
1776        }
1777
1778        #[inline(always)]
1779        fn inline_size(_context: fidl::encoding::Context) -> usize {
1780            16
1781        }
1782    }
1783
1784    unsafe impl<D: fidl::encoding::ResourceDialect>
1785        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for &CodecGetPropertiesResponse
1786    {
1787        #[inline]
1788        unsafe fn encode(
1789            self,
1790            encoder: &mut fidl::encoding::Encoder<'_, D>,
1791            offset: usize,
1792            _depth: fidl::encoding::Depth,
1793        ) -> fidl::Result<()> {
1794            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
1795            // Delegate to tuple encoding.
1796            fidl::encoding::Encode::<CodecGetPropertiesResponse, D>::encode(
1797                (<CodecProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
1798                encoder,
1799                offset,
1800                _depth,
1801            )
1802        }
1803    }
1804    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecProperties, D>>
1805        fidl::encoding::Encode<CodecGetPropertiesResponse, D> for (T0,)
1806    {
1807        #[inline]
1808        unsafe fn encode(
1809            self,
1810            encoder: &mut fidl::encoding::Encoder<'_, D>,
1811            offset: usize,
1812            depth: fidl::encoding::Depth,
1813        ) -> fidl::Result<()> {
1814            encoder.debug_check_bounds::<CodecGetPropertiesResponse>(offset);
1815            // Zero out padding regions. There's no need to apply masks
1816            // because the unmasked parts will be overwritten by fields.
1817            // Write the fields.
1818            self.0.encode(encoder, offset + 0, depth)?;
1819            Ok(())
1820        }
1821    }
1822
1823    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1824        for CodecGetPropertiesResponse
1825    {
1826        #[inline(always)]
1827        fn new_empty() -> Self {
1828            Self { properties: fidl::new_empty!(CodecProperties, D) }
1829        }
1830
1831        #[inline]
1832        unsafe fn decode(
1833            &mut self,
1834            decoder: &mut fidl::encoding::Decoder<'_, D>,
1835            offset: usize,
1836            _depth: fidl::encoding::Depth,
1837        ) -> fidl::Result<()> {
1838            decoder.debug_check_bounds::<Self>(offset);
1839            // Verify that padding bytes are zero.
1840            fidl::decode!(CodecProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
1841            Ok(())
1842        }
1843    }
1844
1845    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatRequest {
1846        type Borrowed<'a> = &'a Self;
1847        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1848            value
1849        }
1850    }
1851
1852    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatRequest {
1853        type Owned = Self;
1854
1855        #[inline(always)]
1856        fn inline_align(_context: fidl::encoding::Context) -> usize {
1857            8
1858        }
1859
1860        #[inline(always)]
1861        fn inline_size(_context: fidl::encoding::Context) -> usize {
1862            48
1863        }
1864    }
1865
1866    unsafe impl<D: fidl::encoding::ResourceDialect>
1867        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for &CodecSetDaiFormatRequest
1868    {
1869        #[inline]
1870        unsafe fn encode(
1871            self,
1872            encoder: &mut fidl::encoding::Encoder<'_, D>,
1873            offset: usize,
1874            _depth: fidl::encoding::Depth,
1875        ) -> fidl::Result<()> {
1876            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
1877            // Delegate to tuple encoding.
1878            fidl::encoding::Encode::<CodecSetDaiFormatRequest, D>::encode(
1879                (<DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),),
1880                encoder,
1881                offset,
1882                _depth,
1883            )
1884        }
1885    }
1886    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiFormat, D>>
1887        fidl::encoding::Encode<CodecSetDaiFormatRequest, D> for (T0,)
1888    {
1889        #[inline]
1890        unsafe fn encode(
1891            self,
1892            encoder: &mut fidl::encoding::Encoder<'_, D>,
1893            offset: usize,
1894            depth: fidl::encoding::Depth,
1895        ) -> fidl::Result<()> {
1896            encoder.debug_check_bounds::<CodecSetDaiFormatRequest>(offset);
1897            // Zero out padding regions. There's no need to apply masks
1898            // because the unmasked parts will be overwritten by fields.
1899            // Write the fields.
1900            self.0.encode(encoder, offset + 0, depth)?;
1901            Ok(())
1902        }
1903    }
1904
1905    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1906        for CodecSetDaiFormatRequest
1907    {
1908        #[inline(always)]
1909        fn new_empty() -> Self {
1910            Self { format: fidl::new_empty!(DaiFormat, D) }
1911        }
1912
1913        #[inline]
1914        unsafe fn decode(
1915            &mut self,
1916            decoder: &mut fidl::encoding::Decoder<'_, D>,
1917            offset: usize,
1918            _depth: fidl::encoding::Depth,
1919        ) -> fidl::Result<()> {
1920            decoder.debug_check_bounds::<Self>(offset);
1921            // Verify that padding bytes are zero.
1922            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 0, _depth)?;
1923            Ok(())
1924        }
1925    }
1926
1927    impl fidl::encoding::ValueTypeMarker for CodecStartResponse {
1928        type Borrowed<'a> = &'a Self;
1929        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1930            value
1931        }
1932    }
1933
1934    unsafe impl fidl::encoding::TypeMarker for CodecStartResponse {
1935        type Owned = Self;
1936
1937        #[inline(always)]
1938        fn inline_align(_context: fidl::encoding::Context) -> usize {
1939            8
1940        }
1941
1942        #[inline(always)]
1943        fn inline_size(_context: fidl::encoding::Context) -> usize {
1944            8
1945        }
1946        #[inline(always)]
1947        fn encode_is_copy() -> bool {
1948            true
1949        }
1950
1951        #[inline(always)]
1952        fn decode_is_copy() -> bool {
1953            true
1954        }
1955    }
1956
1957    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStartResponse, D>
1958        for &CodecStartResponse
1959    {
1960        #[inline]
1961        unsafe fn encode(
1962            self,
1963            encoder: &mut fidl::encoding::Encoder<'_, D>,
1964            offset: usize,
1965            _depth: fidl::encoding::Depth,
1966        ) -> fidl::Result<()> {
1967            encoder.debug_check_bounds::<CodecStartResponse>(offset);
1968            unsafe {
1969                // Copy the object into the buffer.
1970                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1971                (buf_ptr as *mut CodecStartResponse)
1972                    .write_unaligned((self as *const CodecStartResponse).read());
1973                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1974                // done second because the memcpy will write garbage to these bytes.
1975            }
1976            Ok(())
1977        }
1978    }
1979    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1980        fidl::encoding::Encode<CodecStartResponse, D> for (T0,)
1981    {
1982        #[inline]
1983        unsafe fn encode(
1984            self,
1985            encoder: &mut fidl::encoding::Encoder<'_, D>,
1986            offset: usize,
1987            depth: fidl::encoding::Depth,
1988        ) -> fidl::Result<()> {
1989            encoder.debug_check_bounds::<CodecStartResponse>(offset);
1990            // Zero out padding regions. There's no need to apply masks
1991            // because the unmasked parts will be overwritten by fields.
1992            // Write the fields.
1993            self.0.encode(encoder, offset + 0, depth)?;
1994            Ok(())
1995        }
1996    }
1997
1998    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStartResponse {
1999        #[inline(always)]
2000        fn new_empty() -> Self {
2001            Self { start_time: fidl::new_empty!(i64, D) }
2002        }
2003
2004        #[inline]
2005        unsafe fn decode(
2006            &mut self,
2007            decoder: &mut fidl::encoding::Decoder<'_, D>,
2008            offset: usize,
2009            _depth: fidl::encoding::Depth,
2010        ) -> fidl::Result<()> {
2011            decoder.debug_check_bounds::<Self>(offset);
2012            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2013            // Verify that padding bytes are zero.
2014            // Copy from the buffer into the object.
2015            unsafe {
2016                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2017            }
2018            Ok(())
2019        }
2020    }
2021
2022    impl fidl::encoding::ValueTypeMarker for CodecStopResponse {
2023        type Borrowed<'a> = &'a Self;
2024        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2025            value
2026        }
2027    }
2028
2029    unsafe impl fidl::encoding::TypeMarker for CodecStopResponse {
2030        type Owned = Self;
2031
2032        #[inline(always)]
2033        fn inline_align(_context: fidl::encoding::Context) -> usize {
2034            8
2035        }
2036
2037        #[inline(always)]
2038        fn inline_size(_context: fidl::encoding::Context) -> usize {
2039            8
2040        }
2041        #[inline(always)]
2042        fn encode_is_copy() -> bool {
2043            true
2044        }
2045
2046        #[inline(always)]
2047        fn decode_is_copy() -> bool {
2048            true
2049        }
2050    }
2051
2052    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecStopResponse, D>
2053        for &CodecStopResponse
2054    {
2055        #[inline]
2056        unsafe fn encode(
2057            self,
2058            encoder: &mut fidl::encoding::Encoder<'_, D>,
2059            offset: usize,
2060            _depth: fidl::encoding::Depth,
2061        ) -> fidl::Result<()> {
2062            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2063            unsafe {
2064                // Copy the object into the buffer.
2065                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2066                (buf_ptr as *mut CodecStopResponse)
2067                    .write_unaligned((self as *const CodecStopResponse).read());
2068                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2069                // done second because the memcpy will write garbage to these bytes.
2070            }
2071            Ok(())
2072        }
2073    }
2074    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
2075        fidl::encoding::Encode<CodecStopResponse, D> for (T0,)
2076    {
2077        #[inline]
2078        unsafe fn encode(
2079            self,
2080            encoder: &mut fidl::encoding::Encoder<'_, D>,
2081            offset: usize,
2082            depth: fidl::encoding::Depth,
2083        ) -> fidl::Result<()> {
2084            encoder.debug_check_bounds::<CodecStopResponse>(offset);
2085            // Zero out padding regions. There's no need to apply masks
2086            // because the unmasked parts will be overwritten by fields.
2087            // Write the fields.
2088            self.0.encode(encoder, offset + 0, depth)?;
2089            Ok(())
2090        }
2091    }
2092
2093    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecStopResponse {
2094        #[inline(always)]
2095        fn new_empty() -> Self {
2096            Self { stop_time: fidl::new_empty!(i64, D) }
2097        }
2098
2099        #[inline]
2100        unsafe fn decode(
2101            &mut self,
2102            decoder: &mut fidl::encoding::Decoder<'_, D>,
2103            offset: usize,
2104            _depth: fidl::encoding::Depth,
2105        ) -> fidl::Result<()> {
2106            decoder.debug_check_bounds::<Self>(offset);
2107            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2108            // Verify that padding bytes are zero.
2109            // Copy from the buffer into the object.
2110            unsafe {
2111                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2112            }
2113            Ok(())
2114        }
2115    }
2116
2117    impl fidl::encoding::ValueTypeMarker for CodecWatchPlugStateResponse {
2118        type Borrowed<'a> = &'a Self;
2119        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2120            value
2121        }
2122    }
2123
2124    unsafe impl fidl::encoding::TypeMarker for CodecWatchPlugStateResponse {
2125        type Owned = Self;
2126
2127        #[inline(always)]
2128        fn inline_align(_context: fidl::encoding::Context) -> usize {
2129            8
2130        }
2131
2132        #[inline(always)]
2133        fn inline_size(_context: fidl::encoding::Context) -> usize {
2134            16
2135        }
2136    }
2137
2138    unsafe impl<D: fidl::encoding::ResourceDialect>
2139        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for &CodecWatchPlugStateResponse
2140    {
2141        #[inline]
2142        unsafe fn encode(
2143            self,
2144            encoder: &mut fidl::encoding::Encoder<'_, D>,
2145            offset: usize,
2146            _depth: fidl::encoding::Depth,
2147        ) -> fidl::Result<()> {
2148            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2149            // Delegate to tuple encoding.
2150            fidl::encoding::Encode::<CodecWatchPlugStateResponse, D>::encode(
2151                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
2152                encoder,
2153                offset,
2154                _depth,
2155            )
2156        }
2157    }
2158    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
2159        fidl::encoding::Encode<CodecWatchPlugStateResponse, D> for (T0,)
2160    {
2161        #[inline]
2162        unsafe fn encode(
2163            self,
2164            encoder: &mut fidl::encoding::Encoder<'_, D>,
2165            offset: usize,
2166            depth: fidl::encoding::Depth,
2167        ) -> fidl::Result<()> {
2168            encoder.debug_check_bounds::<CodecWatchPlugStateResponse>(offset);
2169            // Zero out padding regions. There's no need to apply masks
2170            // because the unmasked parts will be overwritten by fields.
2171            // Write the fields.
2172            self.0.encode(encoder, offset + 0, depth)?;
2173            Ok(())
2174        }
2175    }
2176
2177    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2178        for CodecWatchPlugStateResponse
2179    {
2180        #[inline(always)]
2181        fn new_empty() -> Self {
2182            Self { plug_state: fidl::new_empty!(PlugState, D) }
2183        }
2184
2185        #[inline]
2186        unsafe fn decode(
2187            &mut self,
2188            decoder: &mut fidl::encoding::Decoder<'_, D>,
2189            offset: usize,
2190            _depth: fidl::encoding::Depth,
2191        ) -> fidl::Result<()> {
2192            decoder.debug_check_bounds::<Self>(offset);
2193            // Verify that padding bytes are zero.
2194            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
2195            Ok(())
2196        }
2197    }
2198
2199    impl fidl::encoding::ValueTypeMarker for CodecGetDaiFormatsResponse {
2200        type Borrowed<'a> = &'a Self;
2201        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2202            value
2203        }
2204    }
2205
2206    unsafe impl fidl::encoding::TypeMarker for CodecGetDaiFormatsResponse {
2207        type Owned = Self;
2208
2209        #[inline(always)]
2210        fn inline_align(_context: fidl::encoding::Context) -> usize {
2211            8
2212        }
2213
2214        #[inline(always)]
2215        fn inline_size(_context: fidl::encoding::Context) -> usize {
2216            16
2217        }
2218    }
2219
2220    unsafe impl<D: fidl::encoding::ResourceDialect>
2221        fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for &CodecGetDaiFormatsResponse
2222    {
2223        #[inline]
2224        unsafe fn encode(
2225            self,
2226            encoder: &mut fidl::encoding::Encoder<'_, D>,
2227            offset: usize,
2228            _depth: fidl::encoding::Depth,
2229        ) -> fidl::Result<()> {
2230            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2231            // Delegate to tuple encoding.
2232            fidl::encoding::Encode::<CodecGetDaiFormatsResponse, D>::encode(
2233                (
2234                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.formats),
2235                ),
2236                encoder, offset, _depth
2237            )
2238        }
2239    }
2240    unsafe impl<
2241        D: fidl::encoding::ResourceDialect,
2242        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2243    > fidl::encoding::Encode<CodecGetDaiFormatsResponse, D> for (T0,)
2244    {
2245        #[inline]
2246        unsafe fn encode(
2247            self,
2248            encoder: &mut fidl::encoding::Encoder<'_, D>,
2249            offset: usize,
2250            depth: fidl::encoding::Depth,
2251        ) -> fidl::Result<()> {
2252            encoder.debug_check_bounds::<CodecGetDaiFormatsResponse>(offset);
2253            // Zero out padding regions. There's no need to apply masks
2254            // because the unmasked parts will be overwritten by fields.
2255            // Write the fields.
2256            self.0.encode(encoder, offset + 0, depth)?;
2257            Ok(())
2258        }
2259    }
2260
2261    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2262        for CodecGetDaiFormatsResponse
2263    {
2264        #[inline(always)]
2265        fn new_empty() -> Self {
2266            Self { formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D) }
2267        }
2268
2269        #[inline]
2270        unsafe fn decode(
2271            &mut self,
2272            decoder: &mut fidl::encoding::Decoder<'_, D>,
2273            offset: usize,
2274            _depth: fidl::encoding::Depth,
2275        ) -> fidl::Result<()> {
2276            decoder.debug_check_bounds::<Self>(offset);
2277            // Verify that padding bytes are zero.
2278            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.formats, decoder, offset + 0, _depth)?;
2279            Ok(())
2280        }
2281    }
2282
2283    impl fidl::encoding::ValueTypeMarker for CodecSetDaiFormatResponse {
2284        type Borrowed<'a> = &'a Self;
2285        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2286            value
2287        }
2288    }
2289
2290    unsafe impl fidl::encoding::TypeMarker for CodecSetDaiFormatResponse {
2291        type Owned = Self;
2292
2293        #[inline(always)]
2294        fn inline_align(_context: fidl::encoding::Context) -> usize {
2295            8
2296        }
2297
2298        #[inline(always)]
2299        fn inline_size(_context: fidl::encoding::Context) -> usize {
2300            16
2301        }
2302    }
2303
2304    unsafe impl<D: fidl::encoding::ResourceDialect>
2305        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for &CodecSetDaiFormatResponse
2306    {
2307        #[inline]
2308        unsafe fn encode(
2309            self,
2310            encoder: &mut fidl::encoding::Encoder<'_, D>,
2311            offset: usize,
2312            _depth: fidl::encoding::Depth,
2313        ) -> fidl::Result<()> {
2314            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2315            // Delegate to tuple encoding.
2316            fidl::encoding::Encode::<CodecSetDaiFormatResponse, D>::encode(
2317                (<CodecFormatInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
2318                encoder,
2319                offset,
2320                _depth,
2321            )
2322        }
2323    }
2324    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CodecFormatInfo, D>>
2325        fidl::encoding::Encode<CodecSetDaiFormatResponse, D> for (T0,)
2326    {
2327        #[inline]
2328        unsafe fn encode(
2329            self,
2330            encoder: &mut fidl::encoding::Encoder<'_, D>,
2331            offset: usize,
2332            depth: fidl::encoding::Depth,
2333        ) -> fidl::Result<()> {
2334            encoder.debug_check_bounds::<CodecSetDaiFormatResponse>(offset);
2335            // Zero out padding regions. There's no need to apply masks
2336            // because the unmasked parts will be overwritten by fields.
2337            // Write the fields.
2338            self.0.encode(encoder, offset + 0, depth)?;
2339            Ok(())
2340        }
2341    }
2342
2343    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2344        for CodecSetDaiFormatResponse
2345    {
2346        #[inline(always)]
2347        fn new_empty() -> Self {
2348            Self { state: fidl::new_empty!(CodecFormatInfo, D) }
2349        }
2350
2351        #[inline]
2352        unsafe fn decode(
2353            &mut self,
2354            decoder: &mut fidl::encoding::Decoder<'_, D>,
2355            offset: usize,
2356            _depth: fidl::encoding::Depth,
2357        ) -> fidl::Result<()> {
2358            decoder.debug_check_bounds::<Self>(offset);
2359            // Verify that padding bytes are zero.
2360            fidl::decode!(CodecFormatInfo, D, &mut self.state, decoder, offset + 0, _depth)?;
2361            Ok(())
2362        }
2363    }
2364
2365    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsRequest {
2366        type Borrowed<'a> = &'a Self;
2367        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2368            value
2369        }
2370    }
2371
2372    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsRequest {
2373        type Owned = Self;
2374
2375        #[inline(always)]
2376        fn inline_align(_context: fidl::encoding::Context) -> usize {
2377            8
2378        }
2379
2380        #[inline(always)]
2381        fn inline_size(_context: fidl::encoding::Context) -> usize {
2382            8
2383        }
2384        #[inline(always)]
2385        fn encode_is_copy() -> bool {
2386            true
2387        }
2388
2389        #[inline(always)]
2390        fn decode_is_copy() -> bool {
2391            true
2392        }
2393    }
2394
2395    unsafe impl<D: fidl::encoding::ResourceDialect>
2396        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D>
2397        for &CompositeGetDaiFormatsRequest
2398    {
2399        #[inline]
2400        unsafe fn encode(
2401            self,
2402            encoder: &mut fidl::encoding::Encoder<'_, D>,
2403            offset: usize,
2404            _depth: fidl::encoding::Depth,
2405        ) -> fidl::Result<()> {
2406            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
2407            unsafe {
2408                // Copy the object into the buffer.
2409                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2410                (buf_ptr as *mut CompositeGetDaiFormatsRequest)
2411                    .write_unaligned((self as *const CompositeGetDaiFormatsRequest).read());
2412                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2413                // done second because the memcpy will write garbage to these bytes.
2414            }
2415            Ok(())
2416        }
2417    }
2418    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2419        fidl::encoding::Encode<CompositeGetDaiFormatsRequest, D> for (T0,)
2420    {
2421        #[inline]
2422        unsafe fn encode(
2423            self,
2424            encoder: &mut fidl::encoding::Encoder<'_, D>,
2425            offset: usize,
2426            depth: fidl::encoding::Depth,
2427        ) -> fidl::Result<()> {
2428            encoder.debug_check_bounds::<CompositeGetDaiFormatsRequest>(offset);
2429            // Zero out padding regions. There's no need to apply masks
2430            // because the unmasked parts will be overwritten by fields.
2431            // Write the fields.
2432            self.0.encode(encoder, offset + 0, depth)?;
2433            Ok(())
2434        }
2435    }
2436
2437    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2438        for CompositeGetDaiFormatsRequest
2439    {
2440        #[inline(always)]
2441        fn new_empty() -> Self {
2442            Self { processing_element_id: fidl::new_empty!(u64, D) }
2443        }
2444
2445        #[inline]
2446        unsafe fn decode(
2447            &mut self,
2448            decoder: &mut fidl::encoding::Decoder<'_, D>,
2449            offset: usize,
2450            _depth: fidl::encoding::Depth,
2451        ) -> fidl::Result<()> {
2452            decoder.debug_check_bounds::<Self>(offset);
2453            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2454            // Verify that padding bytes are zero.
2455            // Copy from the buffer into the object.
2456            unsafe {
2457                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2458            }
2459            Ok(())
2460        }
2461    }
2462
2463    impl fidl::encoding::ValueTypeMarker for CompositeGetPropertiesResponse {
2464        type Borrowed<'a> = &'a Self;
2465        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2466            value
2467        }
2468    }
2469
2470    unsafe impl fidl::encoding::TypeMarker for CompositeGetPropertiesResponse {
2471        type Owned = Self;
2472
2473        #[inline(always)]
2474        fn inline_align(_context: fidl::encoding::Context) -> usize {
2475            8
2476        }
2477
2478        #[inline(always)]
2479        fn inline_size(_context: fidl::encoding::Context) -> usize {
2480            16
2481        }
2482    }
2483
2484    unsafe impl<D: fidl::encoding::ResourceDialect>
2485        fidl::encoding::Encode<CompositeGetPropertiesResponse, D>
2486        for &CompositeGetPropertiesResponse
2487    {
2488        #[inline]
2489        unsafe fn encode(
2490            self,
2491            encoder: &mut fidl::encoding::Encoder<'_, D>,
2492            offset: usize,
2493            _depth: fidl::encoding::Depth,
2494        ) -> fidl::Result<()> {
2495            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
2496            // Delegate to tuple encoding.
2497            fidl::encoding::Encode::<CompositeGetPropertiesResponse, D>::encode(
2498                (<CompositeProperties as fidl::encoding::ValueTypeMarker>::borrow(
2499                    &self.properties,
2500                ),),
2501                encoder,
2502                offset,
2503                _depth,
2504            )
2505        }
2506    }
2507    unsafe impl<
2508        D: fidl::encoding::ResourceDialect,
2509        T0: fidl::encoding::Encode<CompositeProperties, D>,
2510    > fidl::encoding::Encode<CompositeGetPropertiesResponse, D> for (T0,)
2511    {
2512        #[inline]
2513        unsafe fn encode(
2514            self,
2515            encoder: &mut fidl::encoding::Encoder<'_, D>,
2516            offset: usize,
2517            depth: fidl::encoding::Depth,
2518        ) -> fidl::Result<()> {
2519            encoder.debug_check_bounds::<CompositeGetPropertiesResponse>(offset);
2520            // Zero out padding regions. There's no need to apply masks
2521            // because the unmasked parts will be overwritten by fields.
2522            // Write the fields.
2523            self.0.encode(encoder, offset + 0, depth)?;
2524            Ok(())
2525        }
2526    }
2527
2528    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2529        for CompositeGetPropertiesResponse
2530    {
2531        #[inline(always)]
2532        fn new_empty() -> Self {
2533            Self { properties: fidl::new_empty!(CompositeProperties, D) }
2534        }
2535
2536        #[inline]
2537        unsafe fn decode(
2538            &mut self,
2539            decoder: &mut fidl::encoding::Decoder<'_, D>,
2540            offset: usize,
2541            _depth: fidl::encoding::Depth,
2542        ) -> fidl::Result<()> {
2543            decoder.debug_check_bounds::<Self>(offset);
2544            // Verify that padding bytes are zero.
2545            fidl::decode!(
2546                CompositeProperties,
2547                D,
2548                &mut self.properties,
2549                decoder,
2550                offset + 0,
2551                _depth
2552            )?;
2553            Ok(())
2554        }
2555    }
2556
2557    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsRequest {
2558        type Borrowed<'a> = &'a Self;
2559        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2560            value
2561        }
2562    }
2563
2564    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsRequest {
2565        type Owned = Self;
2566
2567        #[inline(always)]
2568        fn inline_align(_context: fidl::encoding::Context) -> usize {
2569            8
2570        }
2571
2572        #[inline(always)]
2573        fn inline_size(_context: fidl::encoding::Context) -> usize {
2574            8
2575        }
2576        #[inline(always)]
2577        fn encode_is_copy() -> bool {
2578            true
2579        }
2580
2581        #[inline(always)]
2582        fn decode_is_copy() -> bool {
2583            true
2584        }
2585    }
2586
2587    unsafe impl<D: fidl::encoding::ResourceDialect>
2588        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D>
2589        for &CompositeGetRingBufferFormatsRequest
2590    {
2591        #[inline]
2592        unsafe fn encode(
2593            self,
2594            encoder: &mut fidl::encoding::Encoder<'_, D>,
2595            offset: usize,
2596            _depth: fidl::encoding::Depth,
2597        ) -> fidl::Result<()> {
2598            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
2599            unsafe {
2600                // Copy the object into the buffer.
2601                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2602                (buf_ptr as *mut CompositeGetRingBufferFormatsRequest)
2603                    .write_unaligned((self as *const CompositeGetRingBufferFormatsRequest).read());
2604                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2605                // done second because the memcpy will write garbage to these bytes.
2606            }
2607            Ok(())
2608        }
2609    }
2610    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
2611        fidl::encoding::Encode<CompositeGetRingBufferFormatsRequest, D> for (T0,)
2612    {
2613        #[inline]
2614        unsafe fn encode(
2615            self,
2616            encoder: &mut fidl::encoding::Encoder<'_, D>,
2617            offset: usize,
2618            depth: fidl::encoding::Depth,
2619        ) -> fidl::Result<()> {
2620            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsRequest>(offset);
2621            // Zero out padding regions. There's no need to apply masks
2622            // because the unmasked parts will be overwritten by fields.
2623            // Write the fields.
2624            self.0.encode(encoder, offset + 0, depth)?;
2625            Ok(())
2626        }
2627    }
2628
2629    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2630        for CompositeGetRingBufferFormatsRequest
2631    {
2632        #[inline(always)]
2633        fn new_empty() -> Self {
2634            Self { processing_element_id: fidl::new_empty!(u64, D) }
2635        }
2636
2637        #[inline]
2638        unsafe fn decode(
2639            &mut self,
2640            decoder: &mut fidl::encoding::Decoder<'_, D>,
2641            offset: usize,
2642            _depth: fidl::encoding::Depth,
2643        ) -> fidl::Result<()> {
2644            decoder.debug_check_bounds::<Self>(offset);
2645            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2646            // Verify that padding bytes are zero.
2647            // Copy from the buffer into the object.
2648            unsafe {
2649                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2650            }
2651            Ok(())
2652        }
2653    }
2654
2655    impl fidl::encoding::ValueTypeMarker for CompositeSetDaiFormatRequest {
2656        type Borrowed<'a> = &'a Self;
2657        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2658            value
2659        }
2660    }
2661
2662    unsafe impl fidl::encoding::TypeMarker for CompositeSetDaiFormatRequest {
2663        type Owned = Self;
2664
2665        #[inline(always)]
2666        fn inline_align(_context: fidl::encoding::Context) -> usize {
2667            8
2668        }
2669
2670        #[inline(always)]
2671        fn inline_size(_context: fidl::encoding::Context) -> usize {
2672            56
2673        }
2674    }
2675
2676    unsafe impl<D: fidl::encoding::ResourceDialect>
2677        fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for &CompositeSetDaiFormatRequest
2678    {
2679        #[inline]
2680        unsafe fn encode(
2681            self,
2682            encoder: &mut fidl::encoding::Encoder<'_, D>,
2683            offset: usize,
2684            _depth: fidl::encoding::Depth,
2685        ) -> fidl::Result<()> {
2686            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
2687            // Delegate to tuple encoding.
2688            fidl::encoding::Encode::<CompositeSetDaiFormatRequest, D>::encode(
2689                (
2690                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.processing_element_id),
2691                    <DaiFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.format),
2692                ),
2693                encoder,
2694                offset,
2695                _depth,
2696            )
2697        }
2698    }
2699    unsafe impl<
2700        D: fidl::encoding::ResourceDialect,
2701        T0: fidl::encoding::Encode<u64, D>,
2702        T1: fidl::encoding::Encode<DaiFormat, D>,
2703    > fidl::encoding::Encode<CompositeSetDaiFormatRequest, D> for (T0, T1)
2704    {
2705        #[inline]
2706        unsafe fn encode(
2707            self,
2708            encoder: &mut fidl::encoding::Encoder<'_, D>,
2709            offset: usize,
2710            depth: fidl::encoding::Depth,
2711        ) -> fidl::Result<()> {
2712            encoder.debug_check_bounds::<CompositeSetDaiFormatRequest>(offset);
2713            // Zero out padding regions. There's no need to apply masks
2714            // because the unmasked parts will be overwritten by fields.
2715            // Write the fields.
2716            self.0.encode(encoder, offset + 0, depth)?;
2717            self.1.encode(encoder, offset + 8, depth)?;
2718            Ok(())
2719        }
2720    }
2721
2722    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2723        for CompositeSetDaiFormatRequest
2724    {
2725        #[inline(always)]
2726        fn new_empty() -> Self {
2727            Self {
2728                processing_element_id: fidl::new_empty!(u64, D),
2729                format: fidl::new_empty!(DaiFormat, D),
2730            }
2731        }
2732
2733        #[inline]
2734        unsafe fn decode(
2735            &mut self,
2736            decoder: &mut fidl::encoding::Decoder<'_, D>,
2737            offset: usize,
2738            _depth: fidl::encoding::Depth,
2739        ) -> fidl::Result<()> {
2740            decoder.debug_check_bounds::<Self>(offset);
2741            // Verify that padding bytes are zero.
2742            fidl::decode!(u64, D, &mut self.processing_element_id, decoder, offset + 0, _depth)?;
2743            fidl::decode!(DaiFormat, D, &mut self.format, decoder, offset + 8, _depth)?;
2744            Ok(())
2745        }
2746    }
2747
2748    impl fidl::encoding::ValueTypeMarker for CompositeGetDaiFormatsResponse {
2749        type Borrowed<'a> = &'a Self;
2750        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2751            value
2752        }
2753    }
2754
2755    unsafe impl fidl::encoding::TypeMarker for CompositeGetDaiFormatsResponse {
2756        type Owned = Self;
2757
2758        #[inline(always)]
2759        fn inline_align(_context: fidl::encoding::Context) -> usize {
2760            8
2761        }
2762
2763        #[inline(always)]
2764        fn inline_size(_context: fidl::encoding::Context) -> usize {
2765            16
2766        }
2767    }
2768
2769    unsafe impl<D: fidl::encoding::ResourceDialect>
2770        fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D>
2771        for &CompositeGetDaiFormatsResponse
2772    {
2773        #[inline]
2774        unsafe fn encode(
2775            self,
2776            encoder: &mut fidl::encoding::Encoder<'_, D>,
2777            offset: usize,
2778            _depth: fidl::encoding::Depth,
2779        ) -> fidl::Result<()> {
2780            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
2781            // Delegate to tuple encoding.
2782            fidl::encoding::Encode::<CompositeGetDaiFormatsResponse, D>::encode(
2783                (
2784                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
2785                ),
2786                encoder, offset, _depth
2787            )
2788        }
2789    }
2790    unsafe impl<
2791        D: fidl::encoding::ResourceDialect,
2792        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
2793    > fidl::encoding::Encode<CompositeGetDaiFormatsResponse, D> for (T0,)
2794    {
2795        #[inline]
2796        unsafe fn encode(
2797            self,
2798            encoder: &mut fidl::encoding::Encoder<'_, D>,
2799            offset: usize,
2800            depth: fidl::encoding::Depth,
2801        ) -> fidl::Result<()> {
2802            encoder.debug_check_bounds::<CompositeGetDaiFormatsResponse>(offset);
2803            // Zero out padding regions. There's no need to apply masks
2804            // because the unmasked parts will be overwritten by fields.
2805            // Write the fields.
2806            self.0.encode(encoder, offset + 0, depth)?;
2807            Ok(())
2808        }
2809    }
2810
2811    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2812        for CompositeGetDaiFormatsResponse
2813    {
2814        #[inline(always)]
2815        fn new_empty() -> Self {
2816            Self {
2817                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
2818            }
2819        }
2820
2821        #[inline]
2822        unsafe fn decode(
2823            &mut self,
2824            decoder: &mut fidl::encoding::Decoder<'_, D>,
2825            offset: usize,
2826            _depth: fidl::encoding::Depth,
2827        ) -> fidl::Result<()> {
2828            decoder.debug_check_bounds::<Self>(offset);
2829            // Verify that padding bytes are zero.
2830            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
2831            Ok(())
2832        }
2833    }
2834
2835    impl fidl::encoding::ValueTypeMarker for CompositeGetRingBufferFormatsResponse {
2836        type Borrowed<'a> = &'a Self;
2837        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2838            value
2839        }
2840    }
2841
2842    unsafe impl fidl::encoding::TypeMarker for CompositeGetRingBufferFormatsResponse {
2843        type Owned = Self;
2844
2845        #[inline(always)]
2846        fn inline_align(_context: fidl::encoding::Context) -> usize {
2847            8
2848        }
2849
2850        #[inline(always)]
2851        fn inline_size(_context: fidl::encoding::Context) -> usize {
2852            16
2853        }
2854    }
2855
2856    unsafe impl<D: fidl::encoding::ResourceDialect>
2857        fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D>
2858        for &CompositeGetRingBufferFormatsResponse
2859    {
2860        #[inline]
2861        unsafe fn encode(
2862            self,
2863            encoder: &mut fidl::encoding::Encoder<'_, D>,
2864            offset: usize,
2865            _depth: fidl::encoding::Depth,
2866        ) -> fidl::Result<()> {
2867            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
2868            // Delegate to tuple encoding.
2869            fidl::encoding::Encode::<CompositeGetRingBufferFormatsResponse, D>::encode(
2870                (
2871                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
2872                ),
2873                encoder, offset, _depth
2874            )
2875        }
2876    }
2877    unsafe impl<
2878        D: fidl::encoding::ResourceDialect,
2879        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
2880    > fidl::encoding::Encode<CompositeGetRingBufferFormatsResponse, D> for (T0,)
2881    {
2882        #[inline]
2883        unsafe fn encode(
2884            self,
2885            encoder: &mut fidl::encoding::Encoder<'_, D>,
2886            offset: usize,
2887            depth: fidl::encoding::Depth,
2888        ) -> fidl::Result<()> {
2889            encoder.debug_check_bounds::<CompositeGetRingBufferFormatsResponse>(offset);
2890            // Zero out padding regions. There's no need to apply masks
2891            // because the unmasked parts will be overwritten by fields.
2892            // Write the fields.
2893            self.0.encode(encoder, offset + 0, depth)?;
2894            Ok(())
2895        }
2896    }
2897
2898    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2899        for CompositeGetRingBufferFormatsResponse
2900    {
2901        #[inline(always)]
2902        fn new_empty() -> Self {
2903            Self {
2904                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
2905            }
2906        }
2907
2908        #[inline]
2909        unsafe fn decode(
2910            &mut self,
2911            decoder: &mut fidl::encoding::Decoder<'_, D>,
2912            offset: usize,
2913            _depth: fidl::encoding::Depth,
2914        ) -> fidl::Result<()> {
2915            decoder.debug_check_bounds::<Self>(offset);
2916            // Verify that padding bytes are zero.
2917            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
2918            Ok(())
2919        }
2920    }
2921
2922    impl fidl::encoding::ValueTypeMarker for DaiFormat {
2923        type Borrowed<'a> = &'a Self;
2924        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2925            value
2926        }
2927    }
2928
2929    unsafe impl fidl::encoding::TypeMarker for DaiFormat {
2930        type Owned = Self;
2931
2932        #[inline(always)]
2933        fn inline_align(_context: fidl::encoding::Context) -> usize {
2934            8
2935        }
2936
2937        #[inline(always)]
2938        fn inline_size(_context: fidl::encoding::Context) -> usize {
2939            48
2940        }
2941    }
2942
2943    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFormat, D>
2944        for &DaiFormat
2945    {
2946        #[inline]
2947        unsafe fn encode(
2948            self,
2949            encoder: &mut fidl::encoding::Encoder<'_, D>,
2950            offset: usize,
2951            _depth: fidl::encoding::Depth,
2952        ) -> fidl::Result<()> {
2953            encoder.debug_check_bounds::<DaiFormat>(offset);
2954            // Delegate to tuple encoding.
2955            fidl::encoding::Encode::<DaiFormat, D>::encode(
2956                (
2957                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
2958                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.channels_to_use_bitmask),
2959                    <DaiSampleFormat as fidl::encoding::ValueTypeMarker>::borrow(
2960                        &self.sample_format,
2961                    ),
2962                    <DaiFrameFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_format),
2963                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
2964                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
2965                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
2966                ),
2967                encoder,
2968                offset,
2969                _depth,
2970            )
2971        }
2972    }
2973    unsafe impl<
2974        D: fidl::encoding::ResourceDialect,
2975        T0: fidl::encoding::Encode<u32, D>,
2976        T1: fidl::encoding::Encode<u64, D>,
2977        T2: fidl::encoding::Encode<DaiSampleFormat, D>,
2978        T3: fidl::encoding::Encode<DaiFrameFormat, D>,
2979        T4: fidl::encoding::Encode<u32, D>,
2980        T5: fidl::encoding::Encode<u8, D>,
2981        T6: fidl::encoding::Encode<u8, D>,
2982    > fidl::encoding::Encode<DaiFormat, D> for (T0, T1, T2, T3, T4, T5, T6)
2983    {
2984        #[inline]
2985        unsafe fn encode(
2986            self,
2987            encoder: &mut fidl::encoding::Encoder<'_, D>,
2988            offset: usize,
2989            depth: fidl::encoding::Depth,
2990        ) -> fidl::Result<()> {
2991            encoder.debug_check_bounds::<DaiFormat>(offset);
2992            // Zero out padding regions. There's no need to apply masks
2993            // because the unmasked parts will be overwritten by fields.
2994            unsafe {
2995                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2996                (ptr as *mut u64).write_unaligned(0);
2997            }
2998            unsafe {
2999                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3000                (ptr as *mut u64).write_unaligned(0);
3001            }
3002            unsafe {
3003                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(40);
3004                (ptr as *mut u64).write_unaligned(0);
3005            }
3006            // Write the fields.
3007            self.0.encode(encoder, offset + 0, depth)?;
3008            self.1.encode(encoder, offset + 8, depth)?;
3009            self.2.encode(encoder, offset + 16, depth)?;
3010            self.3.encode(encoder, offset + 24, depth)?;
3011            self.4.encode(encoder, offset + 40, depth)?;
3012            self.5.encode(encoder, offset + 44, depth)?;
3013            self.6.encode(encoder, offset + 45, depth)?;
3014            Ok(())
3015        }
3016    }
3017
3018    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFormat {
3019        #[inline(always)]
3020        fn new_empty() -> Self {
3021            Self {
3022                number_of_channels: fidl::new_empty!(u32, D),
3023                channels_to_use_bitmask: fidl::new_empty!(u64, D),
3024                sample_format: fidl::new_empty!(DaiSampleFormat, D),
3025                frame_format: fidl::new_empty!(DaiFrameFormat, D),
3026                frame_rate: fidl::new_empty!(u32, D),
3027                bits_per_slot: fidl::new_empty!(u8, D),
3028                bits_per_sample: fidl::new_empty!(u8, D),
3029            }
3030        }
3031
3032        #[inline]
3033        unsafe fn decode(
3034            &mut self,
3035            decoder: &mut fidl::encoding::Decoder<'_, D>,
3036            offset: usize,
3037            _depth: fidl::encoding::Depth,
3038        ) -> fidl::Result<()> {
3039            decoder.debug_check_bounds::<Self>(offset);
3040            // Verify that padding bytes are zero.
3041            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3042            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3043            let mask = 0xffffffff00000000u64;
3044            let maskedval = padval & mask;
3045            if maskedval != 0 {
3046                return Err(fidl::Error::NonZeroPadding {
3047                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3048                });
3049            }
3050            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3051            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3052            let mask = 0xffffffffffffff00u64;
3053            let maskedval = padval & mask;
3054            if maskedval != 0 {
3055                return Err(fidl::Error::NonZeroPadding {
3056                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3057                });
3058            }
3059            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(40) };
3060            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3061            let mask = 0xffff000000000000u64;
3062            let maskedval = padval & mask;
3063            if maskedval != 0 {
3064                return Err(fidl::Error::NonZeroPadding {
3065                    padding_start: offset + 40 + ((mask as u64).trailing_zeros() / 8) as usize,
3066                });
3067            }
3068            fidl::decode!(u32, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3069            fidl::decode!(u64, D, &mut self.channels_to_use_bitmask, decoder, offset + 8, _depth)?;
3070            fidl::decode!(
3071                DaiSampleFormat,
3072                D,
3073                &mut self.sample_format,
3074                decoder,
3075                offset + 16,
3076                _depth
3077            )?;
3078            fidl::decode!(DaiFrameFormat, D, &mut self.frame_format, decoder, offset + 24, _depth)?;
3079            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 40, _depth)?;
3080            fidl::decode!(u8, D, &mut self.bits_per_slot, decoder, offset + 44, _depth)?;
3081            fidl::decode!(u8, D, &mut self.bits_per_sample, decoder, offset + 45, _depth)?;
3082            Ok(())
3083        }
3084    }
3085
3086    impl fidl::encoding::ValueTypeMarker for DaiFrameFormatCustom {
3087        type Borrowed<'a> = &'a Self;
3088        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3089            value
3090        }
3091    }
3092
3093    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormatCustom {
3094        type Owned = Self;
3095
3096        #[inline(always)]
3097        fn inline_align(_context: fidl::encoding::Context) -> usize {
3098            1
3099        }
3100
3101        #[inline(always)]
3102        fn inline_size(_context: fidl::encoding::Context) -> usize {
3103            4
3104        }
3105    }
3106
3107    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormatCustom, D>
3108        for &DaiFrameFormatCustom
3109    {
3110        #[inline]
3111        unsafe fn encode(
3112            self,
3113            encoder: &mut fidl::encoding::Encoder<'_, D>,
3114            offset: usize,
3115            _depth: fidl::encoding::Depth,
3116        ) -> fidl::Result<()> {
3117            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3118            // Delegate to tuple encoding.
3119            fidl::encoding::Encode::<DaiFrameFormatCustom, D>::encode(
3120                (
3121                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.left_justified),
3122                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.sclk_on_raising),
3123                    <i8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_sclks_offset),
3124                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_sync_size),
3125                ),
3126                encoder,
3127                offset,
3128                _depth,
3129            )
3130        }
3131    }
3132    unsafe impl<
3133        D: fidl::encoding::ResourceDialect,
3134        T0: fidl::encoding::Encode<bool, D>,
3135        T1: fidl::encoding::Encode<bool, D>,
3136        T2: fidl::encoding::Encode<i8, D>,
3137        T3: fidl::encoding::Encode<u8, D>,
3138    > fidl::encoding::Encode<DaiFrameFormatCustom, D> for (T0, T1, T2, T3)
3139    {
3140        #[inline]
3141        unsafe fn encode(
3142            self,
3143            encoder: &mut fidl::encoding::Encoder<'_, D>,
3144            offset: usize,
3145            depth: fidl::encoding::Depth,
3146        ) -> fidl::Result<()> {
3147            encoder.debug_check_bounds::<DaiFrameFormatCustom>(offset);
3148            // Zero out padding regions. There's no need to apply masks
3149            // because the unmasked parts will be overwritten by fields.
3150            // Write the fields.
3151            self.0.encode(encoder, offset + 0, depth)?;
3152            self.1.encode(encoder, offset + 1, depth)?;
3153            self.2.encode(encoder, offset + 2, depth)?;
3154            self.3.encode(encoder, offset + 3, depth)?;
3155            Ok(())
3156        }
3157    }
3158
3159    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormatCustom {
3160        #[inline(always)]
3161        fn new_empty() -> Self {
3162            Self {
3163                left_justified: fidl::new_empty!(bool, D),
3164                sclk_on_raising: fidl::new_empty!(bool, D),
3165                frame_sync_sclks_offset: fidl::new_empty!(i8, D),
3166                frame_sync_size: fidl::new_empty!(u8, D),
3167            }
3168        }
3169
3170        #[inline]
3171        unsafe fn decode(
3172            &mut self,
3173            decoder: &mut fidl::encoding::Decoder<'_, D>,
3174            offset: usize,
3175            _depth: fidl::encoding::Depth,
3176        ) -> fidl::Result<()> {
3177            decoder.debug_check_bounds::<Self>(offset);
3178            // Verify that padding bytes are zero.
3179            fidl::decode!(bool, D, &mut self.left_justified, decoder, offset + 0, _depth)?;
3180            fidl::decode!(bool, D, &mut self.sclk_on_raising, decoder, offset + 1, _depth)?;
3181            fidl::decode!(i8, D, &mut self.frame_sync_sclks_offset, decoder, offset + 2, _depth)?;
3182            fidl::decode!(u8, D, &mut self.frame_sync_size, decoder, offset + 3, _depth)?;
3183            Ok(())
3184        }
3185    }
3186
3187    impl fidl::encoding::ValueTypeMarker for DaiGetPropertiesResponse {
3188        type Borrowed<'a> = &'a Self;
3189        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3190            value
3191        }
3192    }
3193
3194    unsafe impl fidl::encoding::TypeMarker for DaiGetPropertiesResponse {
3195        type Owned = Self;
3196
3197        #[inline(always)]
3198        fn inline_align(_context: fidl::encoding::Context) -> usize {
3199            8
3200        }
3201
3202        #[inline(always)]
3203        fn inline_size(_context: fidl::encoding::Context) -> usize {
3204            16
3205        }
3206    }
3207
3208    unsafe impl<D: fidl::encoding::ResourceDialect>
3209        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for &DaiGetPropertiesResponse
3210    {
3211        #[inline]
3212        unsafe fn encode(
3213            self,
3214            encoder: &mut fidl::encoding::Encoder<'_, D>,
3215            offset: usize,
3216            _depth: fidl::encoding::Depth,
3217        ) -> fidl::Result<()> {
3218            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
3219            // Delegate to tuple encoding.
3220            fidl::encoding::Encode::<DaiGetPropertiesResponse, D>::encode(
3221                (<DaiProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
3222                encoder,
3223                offset,
3224                _depth,
3225            )
3226        }
3227    }
3228    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DaiProperties, D>>
3229        fidl::encoding::Encode<DaiGetPropertiesResponse, D> for (T0,)
3230    {
3231        #[inline]
3232        unsafe fn encode(
3233            self,
3234            encoder: &mut fidl::encoding::Encoder<'_, D>,
3235            offset: usize,
3236            depth: fidl::encoding::Depth,
3237        ) -> fidl::Result<()> {
3238            encoder.debug_check_bounds::<DaiGetPropertiesResponse>(offset);
3239            // Zero out padding regions. There's no need to apply masks
3240            // because the unmasked parts will be overwritten by fields.
3241            // Write the fields.
3242            self.0.encode(encoder, offset + 0, depth)?;
3243            Ok(())
3244        }
3245    }
3246
3247    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3248        for DaiGetPropertiesResponse
3249    {
3250        #[inline(always)]
3251        fn new_empty() -> Self {
3252            Self { properties: fidl::new_empty!(DaiProperties, D) }
3253        }
3254
3255        #[inline]
3256        unsafe fn decode(
3257            &mut self,
3258            decoder: &mut fidl::encoding::Decoder<'_, D>,
3259            offset: usize,
3260            _depth: fidl::encoding::Depth,
3261        ) -> fidl::Result<()> {
3262            decoder.debug_check_bounds::<Self>(offset);
3263            // Verify that padding bytes are zero.
3264            fidl::decode!(DaiProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
3265            Ok(())
3266        }
3267    }
3268
3269    impl fidl::encoding::ValueTypeMarker for DaiSupportedFormats {
3270        type Borrowed<'a> = &'a Self;
3271        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3272            value
3273        }
3274    }
3275
3276    unsafe impl fidl::encoding::TypeMarker for DaiSupportedFormats {
3277        type Owned = Self;
3278
3279        #[inline(always)]
3280        fn inline_align(_context: fidl::encoding::Context) -> usize {
3281            8
3282        }
3283
3284        #[inline(always)]
3285        fn inline_size(_context: fidl::encoding::Context) -> usize {
3286            96
3287        }
3288    }
3289
3290    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiSupportedFormats, D>
3291        for &DaiSupportedFormats
3292    {
3293        #[inline]
3294        unsafe fn encode(
3295            self,
3296            encoder: &mut fidl::encoding::Encoder<'_, D>,
3297            offset: usize,
3298            _depth: fidl::encoding::Depth,
3299        ) -> fidl::Result<()> {
3300            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
3301            // Delegate to tuple encoding.
3302            fidl::encoding::Encode::<DaiSupportedFormats, D>::encode(
3303                (
3304                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3305                    <fidl::encoding::Vector<DaiSampleFormat, 4> as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_formats),
3306                    <fidl::encoding::Vector<DaiFrameFormat, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_formats),
3307                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rates),
3308                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_slot),
3309                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow(&self.bits_per_sample),
3310                ),
3311                encoder, offset, _depth
3312            )
3313        }
3314    }
3315    unsafe impl<
3316        D: fidl::encoding::ResourceDialect,
3317        T0: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
3318        T1: fidl::encoding::Encode<fidl::encoding::Vector<DaiSampleFormat, 4>, D>,
3319        T2: fidl::encoding::Encode<fidl::encoding::Vector<DaiFrameFormat, 64>, D>,
3320        T3: fidl::encoding::Encode<fidl::encoding::Vector<u32, 64>, D>,
3321        T4: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
3322        T5: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8>, D>,
3323    > fidl::encoding::Encode<DaiSupportedFormats, D> for (T0, T1, T2, T3, T4, T5)
3324    {
3325        #[inline]
3326        unsafe fn encode(
3327            self,
3328            encoder: &mut fidl::encoding::Encoder<'_, D>,
3329            offset: usize,
3330            depth: fidl::encoding::Depth,
3331        ) -> fidl::Result<()> {
3332            encoder.debug_check_bounds::<DaiSupportedFormats>(offset);
3333            // Zero out padding regions. There's no need to apply masks
3334            // because the unmasked parts will be overwritten by fields.
3335            // Write the fields.
3336            self.0.encode(encoder, offset + 0, depth)?;
3337            self.1.encode(encoder, offset + 16, depth)?;
3338            self.2.encode(encoder, offset + 32, depth)?;
3339            self.3.encode(encoder, offset + 48, depth)?;
3340            self.4.encode(encoder, offset + 64, depth)?;
3341            self.5.encode(encoder, offset + 80, depth)?;
3342            Ok(())
3343        }
3344    }
3345
3346    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiSupportedFormats {
3347        #[inline(always)]
3348        fn new_empty() -> Self {
3349            Self {
3350                number_of_channels: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
3351                sample_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSampleFormat, 4>, D),
3352                frame_formats: fidl::new_empty!(fidl::encoding::Vector<DaiFrameFormat, 64>, D),
3353                frame_rates: fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D),
3354                bits_per_slot: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
3355                bits_per_sample: fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D),
3356            }
3357        }
3358
3359        #[inline]
3360        unsafe fn decode(
3361            &mut self,
3362            decoder: &mut fidl::encoding::Decoder<'_, D>,
3363            offset: usize,
3364            _depth: fidl::encoding::Depth,
3365        ) -> fidl::Result<()> {
3366            decoder.debug_check_bounds::<Self>(offset);
3367            // Verify that padding bytes are zero.
3368            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3369            fidl::decode!(fidl::encoding::Vector<DaiSampleFormat, 4>, D, &mut self.sample_formats, decoder, offset + 16, _depth)?;
3370            fidl::decode!(fidl::encoding::Vector<DaiFrameFormat, 64>, D, &mut self.frame_formats, decoder, offset + 32, _depth)?;
3371            fidl::decode!(fidl::encoding::Vector<u32, 64>, D, &mut self.frame_rates, decoder, offset + 48, _depth)?;
3372            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_slot, decoder, offset + 64, _depth)?;
3373            fidl::decode!(fidl::encoding::Vector<u8, 8>, D, &mut self.bits_per_sample, decoder, offset + 80, _depth)?;
3374            Ok(())
3375        }
3376    }
3377
3378    impl fidl::encoding::ValueTypeMarker for DaiGetDaiFormatsResponse {
3379        type Borrowed<'a> = &'a Self;
3380        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3381            value
3382        }
3383    }
3384
3385    unsafe impl fidl::encoding::TypeMarker for DaiGetDaiFormatsResponse {
3386        type Owned = Self;
3387
3388        #[inline(always)]
3389        fn inline_align(_context: fidl::encoding::Context) -> usize {
3390            8
3391        }
3392
3393        #[inline(always)]
3394        fn inline_size(_context: fidl::encoding::Context) -> usize {
3395            16
3396        }
3397    }
3398
3399    unsafe impl<D: fidl::encoding::ResourceDialect>
3400        fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for &DaiGetDaiFormatsResponse
3401    {
3402        #[inline]
3403        unsafe fn encode(
3404            self,
3405            encoder: &mut fidl::encoding::Encoder<'_, D>,
3406            offset: usize,
3407            _depth: fidl::encoding::Depth,
3408        ) -> fidl::Result<()> {
3409            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
3410            // Delegate to tuple encoding.
3411            fidl::encoding::Encode::<DaiGetDaiFormatsResponse, D>::encode(
3412                (
3413                    <fidl::encoding::Vector<DaiSupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.dai_formats),
3414                ),
3415                encoder, offset, _depth
3416            )
3417        }
3418    }
3419    unsafe impl<
3420        D: fidl::encoding::ResourceDialect,
3421        T0: fidl::encoding::Encode<fidl::encoding::Vector<DaiSupportedFormats, 64>, D>,
3422    > fidl::encoding::Encode<DaiGetDaiFormatsResponse, D> for (T0,)
3423    {
3424        #[inline]
3425        unsafe fn encode(
3426            self,
3427            encoder: &mut fidl::encoding::Encoder<'_, D>,
3428            offset: usize,
3429            depth: fidl::encoding::Depth,
3430        ) -> fidl::Result<()> {
3431            encoder.debug_check_bounds::<DaiGetDaiFormatsResponse>(offset);
3432            // Zero out padding regions. There's no need to apply masks
3433            // because the unmasked parts will be overwritten by fields.
3434            // Write the fields.
3435            self.0.encode(encoder, offset + 0, depth)?;
3436            Ok(())
3437        }
3438    }
3439
3440    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3441        for DaiGetDaiFormatsResponse
3442    {
3443        #[inline(always)]
3444        fn new_empty() -> Self {
3445            Self {
3446                dai_formats: fidl::new_empty!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D),
3447            }
3448        }
3449
3450        #[inline]
3451        unsafe fn decode(
3452            &mut self,
3453            decoder: &mut fidl::encoding::Decoder<'_, D>,
3454            offset: usize,
3455            _depth: fidl::encoding::Depth,
3456        ) -> fidl::Result<()> {
3457            decoder.debug_check_bounds::<Self>(offset);
3458            // Verify that padding bytes are zero.
3459            fidl::decode!(fidl::encoding::Vector<DaiSupportedFormats, 64>, D, &mut self.dai_formats, decoder, offset + 0, _depth)?;
3460            Ok(())
3461        }
3462    }
3463
3464    impl fidl::encoding::ValueTypeMarker for DaiGetRingBufferFormatsResponse {
3465        type Borrowed<'a> = &'a Self;
3466        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3467            value
3468        }
3469    }
3470
3471    unsafe impl fidl::encoding::TypeMarker for DaiGetRingBufferFormatsResponse {
3472        type Owned = Self;
3473
3474        #[inline(always)]
3475        fn inline_align(_context: fidl::encoding::Context) -> usize {
3476            8
3477        }
3478
3479        #[inline(always)]
3480        fn inline_size(_context: fidl::encoding::Context) -> usize {
3481            16
3482        }
3483    }
3484
3485    unsafe impl<D: fidl::encoding::ResourceDialect>
3486        fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D>
3487        for &DaiGetRingBufferFormatsResponse
3488    {
3489        #[inline]
3490        unsafe fn encode(
3491            self,
3492            encoder: &mut fidl::encoding::Encoder<'_, D>,
3493            offset: usize,
3494            _depth: fidl::encoding::Depth,
3495        ) -> fidl::Result<()> {
3496            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
3497            // Delegate to tuple encoding.
3498            fidl::encoding::Encode::<DaiGetRingBufferFormatsResponse, D>::encode(
3499                (
3500                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.ring_buffer_formats),
3501                ),
3502                encoder, offset, _depth
3503            )
3504        }
3505    }
3506    unsafe impl<
3507        D: fidl::encoding::ResourceDialect,
3508        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
3509    > fidl::encoding::Encode<DaiGetRingBufferFormatsResponse, D> for (T0,)
3510    {
3511        #[inline]
3512        unsafe fn encode(
3513            self,
3514            encoder: &mut fidl::encoding::Encoder<'_, D>,
3515            offset: usize,
3516            depth: fidl::encoding::Depth,
3517        ) -> fidl::Result<()> {
3518            encoder.debug_check_bounds::<DaiGetRingBufferFormatsResponse>(offset);
3519            // Zero out padding regions. There's no need to apply masks
3520            // because the unmasked parts will be overwritten by fields.
3521            // Write the fields.
3522            self.0.encode(encoder, offset + 0, depth)?;
3523            Ok(())
3524        }
3525    }
3526
3527    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3528        for DaiGetRingBufferFormatsResponse
3529    {
3530        #[inline(always)]
3531        fn new_empty() -> Self {
3532            Self {
3533                ring_buffer_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
3534            }
3535        }
3536
3537        #[inline]
3538        unsafe fn decode(
3539            &mut self,
3540            decoder: &mut fidl::encoding::Decoder<'_, D>,
3541            offset: usize,
3542            _depth: fidl::encoding::Depth,
3543        ) -> fidl::Result<()> {
3544            decoder.debug_check_bounds::<Self>(offset);
3545            // Verify that padding bytes are zero.
3546            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.ring_buffer_formats, decoder, offset + 0, _depth)?;
3547            Ok(())
3548        }
3549    }
3550
3551    impl fidl::encoding::ValueTypeMarker for HealthGetHealthStateResponse {
3552        type Borrowed<'a> = &'a Self;
3553        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3554            value
3555        }
3556    }
3557
3558    unsafe impl fidl::encoding::TypeMarker for HealthGetHealthStateResponse {
3559        type Owned = Self;
3560
3561        #[inline(always)]
3562        fn inline_align(_context: fidl::encoding::Context) -> usize {
3563            8
3564        }
3565
3566        #[inline(always)]
3567        fn inline_size(_context: fidl::encoding::Context) -> usize {
3568            16
3569        }
3570    }
3571
3572    unsafe impl<D: fidl::encoding::ResourceDialect>
3573        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for &HealthGetHealthStateResponse
3574    {
3575        #[inline]
3576        unsafe fn encode(
3577            self,
3578            encoder: &mut fidl::encoding::Encoder<'_, D>,
3579            offset: usize,
3580            _depth: fidl::encoding::Depth,
3581        ) -> fidl::Result<()> {
3582            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
3583            // Delegate to tuple encoding.
3584            fidl::encoding::Encode::<HealthGetHealthStateResponse, D>::encode(
3585                (<HealthState as fidl::encoding::ValueTypeMarker>::borrow(&self.state),),
3586                encoder,
3587                offset,
3588                _depth,
3589            )
3590        }
3591    }
3592    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HealthState, D>>
3593        fidl::encoding::Encode<HealthGetHealthStateResponse, D> for (T0,)
3594    {
3595        #[inline]
3596        unsafe fn encode(
3597            self,
3598            encoder: &mut fidl::encoding::Encoder<'_, D>,
3599            offset: usize,
3600            depth: fidl::encoding::Depth,
3601        ) -> fidl::Result<()> {
3602            encoder.debug_check_bounds::<HealthGetHealthStateResponse>(offset);
3603            // Zero out padding regions. There's no need to apply masks
3604            // because the unmasked parts will be overwritten by fields.
3605            // Write the fields.
3606            self.0.encode(encoder, offset + 0, depth)?;
3607            Ok(())
3608        }
3609    }
3610
3611    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3612        for HealthGetHealthStateResponse
3613    {
3614        #[inline(always)]
3615        fn new_empty() -> Self {
3616            Self { state: fidl::new_empty!(HealthState, D) }
3617        }
3618
3619        #[inline]
3620        unsafe fn decode(
3621            &mut self,
3622            decoder: &mut fidl::encoding::Decoder<'_, D>,
3623            offset: usize,
3624            _depth: fidl::encoding::Depth,
3625        ) -> fidl::Result<()> {
3626            decoder.debug_check_bounds::<Self>(offset);
3627            // Verify that padding bytes are zero.
3628            fidl::decode!(HealthState, D, &mut self.state, decoder, offset + 0, _depth)?;
3629            Ok(())
3630        }
3631    }
3632
3633    impl fidl::encoding::ValueTypeMarker for PcmFormat {
3634        type Borrowed<'a> = &'a Self;
3635        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3636            value
3637        }
3638    }
3639
3640    unsafe impl fidl::encoding::TypeMarker for PcmFormat {
3641        type Owned = Self;
3642
3643        #[inline(always)]
3644        fn inline_align(_context: fidl::encoding::Context) -> usize {
3645            4
3646        }
3647
3648        #[inline(always)]
3649        fn inline_size(_context: fidl::encoding::Context) -> usize {
3650            8
3651        }
3652    }
3653
3654    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmFormat, D>
3655        for &PcmFormat
3656    {
3657        #[inline]
3658        unsafe fn encode(
3659            self,
3660            encoder: &mut fidl::encoding::Encoder<'_, D>,
3661            offset: usize,
3662            _depth: fidl::encoding::Depth,
3663        ) -> fidl::Result<()> {
3664            encoder.debug_check_bounds::<PcmFormat>(offset);
3665            // Delegate to tuple encoding.
3666            fidl::encoding::Encode::<PcmFormat, D>::encode(
3667                (
3668                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.number_of_channels),
3669                    <SampleFormat as fidl::encoding::ValueTypeMarker>::borrow(&self.sample_format),
3670                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.bytes_per_sample),
3671                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.valid_bits_per_sample),
3672                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.frame_rate),
3673                ),
3674                encoder,
3675                offset,
3676                _depth,
3677            )
3678        }
3679    }
3680    unsafe impl<
3681        D: fidl::encoding::ResourceDialect,
3682        T0: fidl::encoding::Encode<u8, D>,
3683        T1: fidl::encoding::Encode<SampleFormat, D>,
3684        T2: fidl::encoding::Encode<u8, D>,
3685        T3: fidl::encoding::Encode<u8, D>,
3686        T4: fidl::encoding::Encode<u32, D>,
3687    > fidl::encoding::Encode<PcmFormat, D> for (T0, T1, T2, T3, T4)
3688    {
3689        #[inline]
3690        unsafe fn encode(
3691            self,
3692            encoder: &mut fidl::encoding::Encoder<'_, D>,
3693            offset: usize,
3694            depth: fidl::encoding::Depth,
3695        ) -> fidl::Result<()> {
3696            encoder.debug_check_bounds::<PcmFormat>(offset);
3697            // Zero out padding regions. There's no need to apply masks
3698            // because the unmasked parts will be overwritten by fields.
3699            // Write the fields.
3700            self.0.encode(encoder, offset + 0, depth)?;
3701            self.1.encode(encoder, offset + 1, depth)?;
3702            self.2.encode(encoder, offset + 2, depth)?;
3703            self.3.encode(encoder, offset + 3, depth)?;
3704            self.4.encode(encoder, offset + 4, depth)?;
3705            Ok(())
3706        }
3707    }
3708
3709    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmFormat {
3710        #[inline(always)]
3711        fn new_empty() -> Self {
3712            Self {
3713                number_of_channels: fidl::new_empty!(u8, D),
3714                sample_format: fidl::new_empty!(SampleFormat, D),
3715                bytes_per_sample: fidl::new_empty!(u8, D),
3716                valid_bits_per_sample: fidl::new_empty!(u8, D),
3717                frame_rate: fidl::new_empty!(u32, D),
3718            }
3719        }
3720
3721        #[inline]
3722        unsafe fn decode(
3723            &mut self,
3724            decoder: &mut fidl::encoding::Decoder<'_, D>,
3725            offset: usize,
3726            _depth: fidl::encoding::Depth,
3727        ) -> fidl::Result<()> {
3728            decoder.debug_check_bounds::<Self>(offset);
3729            // Verify that padding bytes are zero.
3730            fidl::decode!(u8, D, &mut self.number_of_channels, decoder, offset + 0, _depth)?;
3731            fidl::decode!(SampleFormat, D, &mut self.sample_format, decoder, offset + 1, _depth)?;
3732            fidl::decode!(u8, D, &mut self.bytes_per_sample, decoder, offset + 2, _depth)?;
3733            fidl::decode!(u8, D, &mut self.valid_bits_per_sample, decoder, offset + 3, _depth)?;
3734            fidl::decode!(u32, D, &mut self.frame_rate, decoder, offset + 4, _depth)?;
3735            Ok(())
3736        }
3737    }
3738
3739    impl fidl::encoding::ValueTypeMarker for RingBufferGetPropertiesResponse {
3740        type Borrowed<'a> = &'a Self;
3741        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3742            value
3743        }
3744    }
3745
3746    unsafe impl fidl::encoding::TypeMarker for RingBufferGetPropertiesResponse {
3747        type Owned = Self;
3748
3749        #[inline(always)]
3750        fn inline_align(_context: fidl::encoding::Context) -> usize {
3751            8
3752        }
3753
3754        #[inline(always)]
3755        fn inline_size(_context: fidl::encoding::Context) -> usize {
3756            16
3757        }
3758    }
3759
3760    unsafe impl<D: fidl::encoding::ResourceDialect>
3761        fidl::encoding::Encode<RingBufferGetPropertiesResponse, D>
3762        for &RingBufferGetPropertiesResponse
3763    {
3764        #[inline]
3765        unsafe fn encode(
3766            self,
3767            encoder: &mut fidl::encoding::Encoder<'_, D>,
3768            offset: usize,
3769            _depth: fidl::encoding::Depth,
3770        ) -> fidl::Result<()> {
3771            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
3772            // Delegate to tuple encoding.
3773            fidl::encoding::Encode::<RingBufferGetPropertiesResponse, D>::encode(
3774                (<RingBufferProperties as fidl::encoding::ValueTypeMarker>::borrow(
3775                    &self.properties,
3776                ),),
3777                encoder,
3778                offset,
3779                _depth,
3780            )
3781        }
3782    }
3783    unsafe impl<
3784        D: fidl::encoding::ResourceDialect,
3785        T0: fidl::encoding::Encode<RingBufferProperties, D>,
3786    > fidl::encoding::Encode<RingBufferGetPropertiesResponse, D> for (T0,)
3787    {
3788        #[inline]
3789        unsafe fn encode(
3790            self,
3791            encoder: &mut fidl::encoding::Encoder<'_, D>,
3792            offset: usize,
3793            depth: fidl::encoding::Depth,
3794        ) -> fidl::Result<()> {
3795            encoder.debug_check_bounds::<RingBufferGetPropertiesResponse>(offset);
3796            // Zero out padding regions. There's no need to apply masks
3797            // because the unmasked parts will be overwritten by fields.
3798            // Write the fields.
3799            self.0.encode(encoder, offset + 0, depth)?;
3800            Ok(())
3801        }
3802    }
3803
3804    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3805        for RingBufferGetPropertiesResponse
3806    {
3807        #[inline(always)]
3808        fn new_empty() -> Self {
3809            Self { properties: fidl::new_empty!(RingBufferProperties, D) }
3810        }
3811
3812        #[inline]
3813        unsafe fn decode(
3814            &mut self,
3815            decoder: &mut fidl::encoding::Decoder<'_, D>,
3816            offset: usize,
3817            _depth: fidl::encoding::Depth,
3818        ) -> fidl::Result<()> {
3819            decoder.debug_check_bounds::<Self>(offset);
3820            // Verify that padding bytes are zero.
3821            fidl::decode!(
3822                RingBufferProperties,
3823                D,
3824                &mut self.properties,
3825                decoder,
3826                offset + 0,
3827                _depth
3828            )?;
3829            Ok(())
3830        }
3831    }
3832
3833    impl fidl::encoding::ValueTypeMarker for RingBufferGetVmoRequest {
3834        type Borrowed<'a> = &'a Self;
3835        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3836            value
3837        }
3838    }
3839
3840    unsafe impl fidl::encoding::TypeMarker for RingBufferGetVmoRequest {
3841        type Owned = Self;
3842
3843        #[inline(always)]
3844        fn inline_align(_context: fidl::encoding::Context) -> usize {
3845            4
3846        }
3847
3848        #[inline(always)]
3849        fn inline_size(_context: fidl::encoding::Context) -> usize {
3850            8
3851        }
3852        #[inline(always)]
3853        fn encode_is_copy() -> bool {
3854            true
3855        }
3856
3857        #[inline(always)]
3858        fn decode_is_copy() -> bool {
3859            true
3860        }
3861    }
3862
3863    unsafe impl<D: fidl::encoding::ResourceDialect>
3864        fidl::encoding::Encode<RingBufferGetVmoRequest, D> for &RingBufferGetVmoRequest
3865    {
3866        #[inline]
3867        unsafe fn encode(
3868            self,
3869            encoder: &mut fidl::encoding::Encoder<'_, D>,
3870            offset: usize,
3871            _depth: fidl::encoding::Depth,
3872        ) -> fidl::Result<()> {
3873            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
3874            unsafe {
3875                // Copy the object into the buffer.
3876                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3877                (buf_ptr as *mut RingBufferGetVmoRequest)
3878                    .write_unaligned((self as *const RingBufferGetVmoRequest).read());
3879                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3880                // done second because the memcpy will write garbage to these bytes.
3881            }
3882            Ok(())
3883        }
3884    }
3885    unsafe impl<
3886        D: fidl::encoding::ResourceDialect,
3887        T0: fidl::encoding::Encode<u32, D>,
3888        T1: fidl::encoding::Encode<u32, D>,
3889    > fidl::encoding::Encode<RingBufferGetVmoRequest, D> for (T0, T1)
3890    {
3891        #[inline]
3892        unsafe fn encode(
3893            self,
3894            encoder: &mut fidl::encoding::Encoder<'_, D>,
3895            offset: usize,
3896            depth: fidl::encoding::Depth,
3897        ) -> fidl::Result<()> {
3898            encoder.debug_check_bounds::<RingBufferGetVmoRequest>(offset);
3899            // Zero out padding regions. There's no need to apply masks
3900            // because the unmasked parts will be overwritten by fields.
3901            // Write the fields.
3902            self.0.encode(encoder, offset + 0, depth)?;
3903            self.1.encode(encoder, offset + 4, depth)?;
3904            Ok(())
3905        }
3906    }
3907
3908    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3909        for RingBufferGetVmoRequest
3910    {
3911        #[inline(always)]
3912        fn new_empty() -> Self {
3913            Self {
3914                min_frames: fidl::new_empty!(u32, D),
3915                clock_recovery_notifications_per_ring: fidl::new_empty!(u32, D),
3916            }
3917        }
3918
3919        #[inline]
3920        unsafe fn decode(
3921            &mut self,
3922            decoder: &mut fidl::encoding::Decoder<'_, D>,
3923            offset: usize,
3924            _depth: fidl::encoding::Depth,
3925        ) -> fidl::Result<()> {
3926            decoder.debug_check_bounds::<Self>(offset);
3927            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3928            // Verify that padding bytes are zero.
3929            // Copy from the buffer into the object.
3930            unsafe {
3931                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3932            }
3933            Ok(())
3934        }
3935    }
3936
3937    impl fidl::encoding::ValueTypeMarker for RingBufferPositionInfo {
3938        type Borrowed<'a> = &'a Self;
3939        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3940            value
3941        }
3942    }
3943
3944    unsafe impl fidl::encoding::TypeMarker for RingBufferPositionInfo {
3945        type Owned = Self;
3946
3947        #[inline(always)]
3948        fn inline_align(_context: fidl::encoding::Context) -> usize {
3949            8
3950        }
3951
3952        #[inline(always)]
3953        fn inline_size(_context: fidl::encoding::Context) -> usize {
3954            16
3955        }
3956    }
3957
3958    unsafe impl<D: fidl::encoding::ResourceDialect>
3959        fidl::encoding::Encode<RingBufferPositionInfo, D> for &RingBufferPositionInfo
3960    {
3961        #[inline]
3962        unsafe fn encode(
3963            self,
3964            encoder: &mut fidl::encoding::Encoder<'_, D>,
3965            offset: usize,
3966            _depth: fidl::encoding::Depth,
3967        ) -> fidl::Result<()> {
3968            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
3969            unsafe {
3970                // Copy the object into the buffer.
3971                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3972                (buf_ptr as *mut RingBufferPositionInfo)
3973                    .write_unaligned((self as *const RingBufferPositionInfo).read());
3974                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3975                // done second because the memcpy will write garbage to these bytes.
3976                let padding_ptr = buf_ptr.offset(8) as *mut u64;
3977                let padding_mask = 0xffffffff00000000u64;
3978                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
3979            }
3980            Ok(())
3981        }
3982    }
3983    unsafe impl<
3984        D: fidl::encoding::ResourceDialect,
3985        T0: fidl::encoding::Encode<i64, D>,
3986        T1: fidl::encoding::Encode<u32, D>,
3987    > fidl::encoding::Encode<RingBufferPositionInfo, D> for (T0, T1)
3988    {
3989        #[inline]
3990        unsafe fn encode(
3991            self,
3992            encoder: &mut fidl::encoding::Encoder<'_, D>,
3993            offset: usize,
3994            depth: fidl::encoding::Depth,
3995        ) -> fidl::Result<()> {
3996            encoder.debug_check_bounds::<RingBufferPositionInfo>(offset);
3997            // Zero out padding regions. There's no need to apply masks
3998            // because the unmasked parts will be overwritten by fields.
3999            unsafe {
4000                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
4001                (ptr as *mut u64).write_unaligned(0);
4002            }
4003            // Write the fields.
4004            self.0.encode(encoder, offset + 0, depth)?;
4005            self.1.encode(encoder, offset + 8, depth)?;
4006            Ok(())
4007        }
4008    }
4009
4010    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4011        for RingBufferPositionInfo
4012    {
4013        #[inline(always)]
4014        fn new_empty() -> Self {
4015            Self { timestamp: fidl::new_empty!(i64, D), position: fidl::new_empty!(u32, D) }
4016        }
4017
4018        #[inline]
4019        unsafe fn decode(
4020            &mut self,
4021            decoder: &mut fidl::encoding::Decoder<'_, D>,
4022            offset: usize,
4023            _depth: fidl::encoding::Depth,
4024        ) -> fidl::Result<()> {
4025            decoder.debug_check_bounds::<Self>(offset);
4026            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4027            // Verify that padding bytes are zero.
4028            let ptr = unsafe { buf_ptr.offset(8) };
4029            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4030            let mask = 0xffffffff00000000u64;
4031            let maskedval = padval & mask;
4032            if maskedval != 0 {
4033                return Err(fidl::Error::NonZeroPadding {
4034                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4035                });
4036            }
4037            // Copy from the buffer into the object.
4038            unsafe {
4039                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4040            }
4041            Ok(())
4042        }
4043    }
4044
4045    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsRequest {
4046        type Borrowed<'a> = &'a Self;
4047        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4048            value
4049        }
4050    }
4051
4052    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsRequest {
4053        type Owned = Self;
4054
4055        #[inline(always)]
4056        fn inline_align(_context: fidl::encoding::Context) -> usize {
4057            8
4058        }
4059
4060        #[inline(always)]
4061        fn inline_size(_context: fidl::encoding::Context) -> usize {
4062            8
4063        }
4064        #[inline(always)]
4065        fn encode_is_copy() -> bool {
4066            true
4067        }
4068
4069        #[inline(always)]
4070        fn decode_is_copy() -> bool {
4071            true
4072        }
4073    }
4074
4075    unsafe impl<D: fidl::encoding::ResourceDialect>
4076        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D>
4077        for &RingBufferSetActiveChannelsRequest
4078    {
4079        #[inline]
4080        unsafe fn encode(
4081            self,
4082            encoder: &mut fidl::encoding::Encoder<'_, D>,
4083            offset: usize,
4084            _depth: fidl::encoding::Depth,
4085        ) -> fidl::Result<()> {
4086            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
4087            unsafe {
4088                // Copy the object into the buffer.
4089                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4090                (buf_ptr as *mut RingBufferSetActiveChannelsRequest)
4091                    .write_unaligned((self as *const RingBufferSetActiveChannelsRequest).read());
4092                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4093                // done second because the memcpy will write garbage to these bytes.
4094            }
4095            Ok(())
4096        }
4097    }
4098    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
4099        fidl::encoding::Encode<RingBufferSetActiveChannelsRequest, D> for (T0,)
4100    {
4101        #[inline]
4102        unsafe fn encode(
4103            self,
4104            encoder: &mut fidl::encoding::Encoder<'_, D>,
4105            offset: usize,
4106            depth: fidl::encoding::Depth,
4107        ) -> fidl::Result<()> {
4108            encoder.debug_check_bounds::<RingBufferSetActiveChannelsRequest>(offset);
4109            // Zero out padding regions. There's no need to apply masks
4110            // because the unmasked parts will be overwritten by fields.
4111            // Write the fields.
4112            self.0.encode(encoder, offset + 0, depth)?;
4113            Ok(())
4114        }
4115    }
4116
4117    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4118        for RingBufferSetActiveChannelsRequest
4119    {
4120        #[inline(always)]
4121        fn new_empty() -> Self {
4122            Self { active_channels_bitmask: fidl::new_empty!(u64, D) }
4123        }
4124
4125        #[inline]
4126        unsafe fn decode(
4127            &mut self,
4128            decoder: &mut fidl::encoding::Decoder<'_, D>,
4129            offset: usize,
4130            _depth: fidl::encoding::Depth,
4131        ) -> fidl::Result<()> {
4132            decoder.debug_check_bounds::<Self>(offset);
4133            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4134            // Verify that padding bytes are zero.
4135            // Copy from the buffer into the object.
4136            unsafe {
4137                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4138            }
4139            Ok(())
4140        }
4141    }
4142
4143    impl fidl::encoding::ValueTypeMarker for RingBufferStartResponse {
4144        type Borrowed<'a> = &'a Self;
4145        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4146            value
4147        }
4148    }
4149
4150    unsafe impl fidl::encoding::TypeMarker for RingBufferStartResponse {
4151        type Owned = Self;
4152
4153        #[inline(always)]
4154        fn inline_align(_context: fidl::encoding::Context) -> usize {
4155            8
4156        }
4157
4158        #[inline(always)]
4159        fn inline_size(_context: fidl::encoding::Context) -> usize {
4160            8
4161        }
4162        #[inline(always)]
4163        fn encode_is_copy() -> bool {
4164            true
4165        }
4166
4167        #[inline(always)]
4168        fn decode_is_copy() -> bool {
4169            true
4170        }
4171    }
4172
4173    unsafe impl<D: fidl::encoding::ResourceDialect>
4174        fidl::encoding::Encode<RingBufferStartResponse, D> for &RingBufferStartResponse
4175    {
4176        #[inline]
4177        unsafe fn encode(
4178            self,
4179            encoder: &mut fidl::encoding::Encoder<'_, D>,
4180            offset: usize,
4181            _depth: fidl::encoding::Depth,
4182        ) -> fidl::Result<()> {
4183            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
4184            unsafe {
4185                // Copy the object into the buffer.
4186                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4187                (buf_ptr as *mut RingBufferStartResponse)
4188                    .write_unaligned((self as *const RingBufferStartResponse).read());
4189                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4190                // done second because the memcpy will write garbage to these bytes.
4191            }
4192            Ok(())
4193        }
4194    }
4195    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
4196        fidl::encoding::Encode<RingBufferStartResponse, D> for (T0,)
4197    {
4198        #[inline]
4199        unsafe fn encode(
4200            self,
4201            encoder: &mut fidl::encoding::Encoder<'_, D>,
4202            offset: usize,
4203            depth: fidl::encoding::Depth,
4204        ) -> fidl::Result<()> {
4205            encoder.debug_check_bounds::<RingBufferStartResponse>(offset);
4206            // Zero out padding regions. There's no need to apply masks
4207            // because the unmasked parts will be overwritten by fields.
4208            // Write the fields.
4209            self.0.encode(encoder, offset + 0, depth)?;
4210            Ok(())
4211        }
4212    }
4213
4214    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4215        for RingBufferStartResponse
4216    {
4217        #[inline(always)]
4218        fn new_empty() -> Self {
4219            Self { start_time: fidl::new_empty!(i64, D) }
4220        }
4221
4222        #[inline]
4223        unsafe fn decode(
4224            &mut self,
4225            decoder: &mut fidl::encoding::Decoder<'_, D>,
4226            offset: usize,
4227            _depth: fidl::encoding::Depth,
4228        ) -> fidl::Result<()> {
4229            decoder.debug_check_bounds::<Self>(offset);
4230            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4231            // Verify that padding bytes are zero.
4232            // Copy from the buffer into the object.
4233            unsafe {
4234                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4235            }
4236            Ok(())
4237        }
4238    }
4239
4240    impl fidl::encoding::ValueTypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
4241        type Borrowed<'a> = &'a Self;
4242        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4243            value
4244        }
4245    }
4246
4247    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchClockRecoveryPositionInfoResponse {
4248        type Owned = Self;
4249
4250        #[inline(always)]
4251        fn inline_align(_context: fidl::encoding::Context) -> usize {
4252            8
4253        }
4254
4255        #[inline(always)]
4256        fn inline_size(_context: fidl::encoding::Context) -> usize {
4257            16
4258        }
4259    }
4260
4261    unsafe impl<D: fidl::encoding::ResourceDialect>
4262        fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D>
4263        for &RingBufferWatchClockRecoveryPositionInfoResponse
4264    {
4265        #[inline]
4266        unsafe fn encode(
4267            self,
4268            encoder: &mut fidl::encoding::Encoder<'_, D>,
4269            offset: usize,
4270            _depth: fidl::encoding::Depth,
4271        ) -> fidl::Result<()> {
4272            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
4273            unsafe {
4274                // Copy the object into the buffer.
4275                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4276                (buf_ptr as *mut RingBufferWatchClockRecoveryPositionInfoResponse).write_unaligned(
4277                    (self as *const RingBufferWatchClockRecoveryPositionInfoResponse).read(),
4278                );
4279                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4280                // done second because the memcpy will write garbage to these bytes.
4281                let padding_ptr = buf_ptr.offset(8) as *mut u64;
4282                let padding_mask = 0xffffffff00000000u64;
4283                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
4284            }
4285            Ok(())
4286        }
4287    }
4288    unsafe impl<
4289        D: fidl::encoding::ResourceDialect,
4290        T0: fidl::encoding::Encode<RingBufferPositionInfo, D>,
4291    > fidl::encoding::Encode<RingBufferWatchClockRecoveryPositionInfoResponse, D> for (T0,)
4292    {
4293        #[inline]
4294        unsafe fn encode(
4295            self,
4296            encoder: &mut fidl::encoding::Encoder<'_, D>,
4297            offset: usize,
4298            depth: fidl::encoding::Depth,
4299        ) -> fidl::Result<()> {
4300            encoder.debug_check_bounds::<RingBufferWatchClockRecoveryPositionInfoResponse>(offset);
4301            // Zero out padding regions. There's no need to apply masks
4302            // because the unmasked parts will be overwritten by fields.
4303            // Write the fields.
4304            self.0.encode(encoder, offset + 0, depth)?;
4305            Ok(())
4306        }
4307    }
4308
4309    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4310        for RingBufferWatchClockRecoveryPositionInfoResponse
4311    {
4312        #[inline(always)]
4313        fn new_empty() -> Self {
4314            Self { position_info: fidl::new_empty!(RingBufferPositionInfo, D) }
4315        }
4316
4317        #[inline]
4318        unsafe fn decode(
4319            &mut self,
4320            decoder: &mut fidl::encoding::Decoder<'_, D>,
4321            offset: usize,
4322            _depth: fidl::encoding::Depth,
4323        ) -> fidl::Result<()> {
4324            decoder.debug_check_bounds::<Self>(offset);
4325            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4326            // Verify that padding bytes are zero.
4327            let ptr = unsafe { buf_ptr.offset(8) };
4328            let padval = unsafe { (ptr as *const u64).read_unaligned() };
4329            let mask = 0xffffffff00000000u64;
4330            let maskedval = padval & mask;
4331            if maskedval != 0 {
4332                return Err(fidl::Error::NonZeroPadding {
4333                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
4334                });
4335            }
4336            // Copy from the buffer into the object.
4337            unsafe {
4338                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
4339            }
4340            Ok(())
4341        }
4342    }
4343
4344    impl fidl::encoding::ValueTypeMarker for RingBufferSetActiveChannelsResponse {
4345        type Borrowed<'a> = &'a Self;
4346        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4347            value
4348        }
4349    }
4350
4351    unsafe impl fidl::encoding::TypeMarker for RingBufferSetActiveChannelsResponse {
4352        type Owned = Self;
4353
4354        #[inline(always)]
4355        fn inline_align(_context: fidl::encoding::Context) -> usize {
4356            8
4357        }
4358
4359        #[inline(always)]
4360        fn inline_size(_context: fidl::encoding::Context) -> usize {
4361            8
4362        }
4363        #[inline(always)]
4364        fn encode_is_copy() -> bool {
4365            true
4366        }
4367
4368        #[inline(always)]
4369        fn decode_is_copy() -> bool {
4370            true
4371        }
4372    }
4373
4374    unsafe impl<D: fidl::encoding::ResourceDialect>
4375        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D>
4376        for &RingBufferSetActiveChannelsResponse
4377    {
4378        #[inline]
4379        unsafe fn encode(
4380            self,
4381            encoder: &mut fidl::encoding::Encoder<'_, D>,
4382            offset: usize,
4383            _depth: fidl::encoding::Depth,
4384        ) -> fidl::Result<()> {
4385            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
4386            unsafe {
4387                // Copy the object into the buffer.
4388                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
4389                (buf_ptr as *mut RingBufferSetActiveChannelsResponse)
4390                    .write_unaligned((self as *const RingBufferSetActiveChannelsResponse).read());
4391                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
4392                // done second because the memcpy will write garbage to these bytes.
4393            }
4394            Ok(())
4395        }
4396    }
4397    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
4398        fidl::encoding::Encode<RingBufferSetActiveChannelsResponse, D> for (T0,)
4399    {
4400        #[inline]
4401        unsafe fn encode(
4402            self,
4403            encoder: &mut fidl::encoding::Encoder<'_, D>,
4404            offset: usize,
4405            depth: fidl::encoding::Depth,
4406        ) -> fidl::Result<()> {
4407            encoder.debug_check_bounds::<RingBufferSetActiveChannelsResponse>(offset);
4408            // Zero out padding regions. There's no need to apply masks
4409            // because the unmasked parts will be overwritten by fields.
4410            // Write the fields.
4411            self.0.encode(encoder, offset + 0, depth)?;
4412            Ok(())
4413        }
4414    }
4415
4416    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4417        for RingBufferSetActiveChannelsResponse
4418    {
4419        #[inline(always)]
4420        fn new_empty() -> Self {
4421            Self { set_time: fidl::new_empty!(i64, D) }
4422        }
4423
4424        #[inline]
4425        unsafe fn decode(
4426            &mut self,
4427            decoder: &mut fidl::encoding::Decoder<'_, D>,
4428            offset: usize,
4429            _depth: fidl::encoding::Depth,
4430        ) -> fidl::Result<()> {
4431            decoder.debug_check_bounds::<Self>(offset);
4432            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4433            // Verify that padding bytes are zero.
4434            // Copy from the buffer into the object.
4435            unsafe {
4436                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
4437            }
4438            Ok(())
4439        }
4440    }
4441
4442    impl fidl::encoding::ValueTypeMarker for RingBufferWatchDelayInfoResponse {
4443        type Borrowed<'a> = &'a Self;
4444        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4445            value
4446        }
4447    }
4448
4449    unsafe impl fidl::encoding::TypeMarker for RingBufferWatchDelayInfoResponse {
4450        type Owned = Self;
4451
4452        #[inline(always)]
4453        fn inline_align(_context: fidl::encoding::Context) -> usize {
4454            8
4455        }
4456
4457        #[inline(always)]
4458        fn inline_size(_context: fidl::encoding::Context) -> usize {
4459            16
4460        }
4461    }
4462
4463    unsafe impl<D: fidl::encoding::ResourceDialect>
4464        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D>
4465        for &RingBufferWatchDelayInfoResponse
4466    {
4467        #[inline]
4468        unsafe fn encode(
4469            self,
4470            encoder: &mut fidl::encoding::Encoder<'_, D>,
4471            offset: usize,
4472            _depth: fidl::encoding::Depth,
4473        ) -> fidl::Result<()> {
4474            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
4475            // Delegate to tuple encoding.
4476            fidl::encoding::Encode::<RingBufferWatchDelayInfoResponse, D>::encode(
4477                (<DelayInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.delay_info),),
4478                encoder,
4479                offset,
4480                _depth,
4481            )
4482        }
4483    }
4484    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<DelayInfo, D>>
4485        fidl::encoding::Encode<RingBufferWatchDelayInfoResponse, D> for (T0,)
4486    {
4487        #[inline]
4488        unsafe fn encode(
4489            self,
4490            encoder: &mut fidl::encoding::Encoder<'_, D>,
4491            offset: usize,
4492            depth: fidl::encoding::Depth,
4493        ) -> fidl::Result<()> {
4494            encoder.debug_check_bounds::<RingBufferWatchDelayInfoResponse>(offset);
4495            // Zero out padding regions. There's no need to apply masks
4496            // because the unmasked parts will be overwritten by fields.
4497            // Write the fields.
4498            self.0.encode(encoder, offset + 0, depth)?;
4499            Ok(())
4500        }
4501    }
4502
4503    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4504        for RingBufferWatchDelayInfoResponse
4505    {
4506        #[inline(always)]
4507        fn new_empty() -> Self {
4508            Self { delay_info: fidl::new_empty!(DelayInfo, D) }
4509        }
4510
4511        #[inline]
4512        unsafe fn decode(
4513            &mut self,
4514            decoder: &mut fidl::encoding::Decoder<'_, D>,
4515            offset: usize,
4516            _depth: fidl::encoding::Depth,
4517        ) -> fidl::Result<()> {
4518            decoder.debug_check_bounds::<Self>(offset);
4519            // Verify that padding bytes are zero.
4520            fidl::decode!(DelayInfo, D, &mut self.delay_info, decoder, offset + 0, _depth)?;
4521            Ok(())
4522        }
4523    }
4524
4525    impl fidl::encoding::ValueTypeMarker for StreamConfigGetPropertiesResponse {
4526        type Borrowed<'a> = &'a Self;
4527        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4528            value
4529        }
4530    }
4531
4532    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetPropertiesResponse {
4533        type Owned = Self;
4534
4535        #[inline(always)]
4536        fn inline_align(_context: fidl::encoding::Context) -> usize {
4537            8
4538        }
4539
4540        #[inline(always)]
4541        fn inline_size(_context: fidl::encoding::Context) -> usize {
4542            16
4543        }
4544    }
4545
4546    unsafe impl<D: fidl::encoding::ResourceDialect>
4547        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D>
4548        for &StreamConfigGetPropertiesResponse
4549    {
4550        #[inline]
4551        unsafe fn encode(
4552            self,
4553            encoder: &mut fidl::encoding::Encoder<'_, D>,
4554            offset: usize,
4555            _depth: fidl::encoding::Depth,
4556        ) -> fidl::Result<()> {
4557            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
4558            // Delegate to tuple encoding.
4559            fidl::encoding::Encode::<StreamConfigGetPropertiesResponse, D>::encode(
4560                (<StreamProperties as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),),
4561                encoder,
4562                offset,
4563                _depth,
4564            )
4565        }
4566    }
4567    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<StreamProperties, D>>
4568        fidl::encoding::Encode<StreamConfigGetPropertiesResponse, D> for (T0,)
4569    {
4570        #[inline]
4571        unsafe fn encode(
4572            self,
4573            encoder: &mut fidl::encoding::Encoder<'_, D>,
4574            offset: usize,
4575            depth: fidl::encoding::Depth,
4576        ) -> fidl::Result<()> {
4577            encoder.debug_check_bounds::<StreamConfigGetPropertiesResponse>(offset);
4578            // Zero out padding regions. There's no need to apply masks
4579            // because the unmasked parts will be overwritten by fields.
4580            // Write the fields.
4581            self.0.encode(encoder, offset + 0, depth)?;
4582            Ok(())
4583        }
4584    }
4585
4586    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4587        for StreamConfigGetPropertiesResponse
4588    {
4589        #[inline(always)]
4590        fn new_empty() -> Self {
4591            Self { properties: fidl::new_empty!(StreamProperties, D) }
4592        }
4593
4594        #[inline]
4595        unsafe fn decode(
4596            &mut self,
4597            decoder: &mut fidl::encoding::Decoder<'_, D>,
4598            offset: usize,
4599            _depth: fidl::encoding::Depth,
4600        ) -> fidl::Result<()> {
4601            decoder.debug_check_bounds::<Self>(offset);
4602            // Verify that padding bytes are zero.
4603            fidl::decode!(StreamProperties, D, &mut self.properties, decoder, offset + 0, _depth)?;
4604            Ok(())
4605        }
4606    }
4607
4608    impl fidl::encoding::ValueTypeMarker for StreamConfigGetSupportedFormatsResponse {
4609        type Borrowed<'a> = &'a Self;
4610        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4611            value
4612        }
4613    }
4614
4615    unsafe impl fidl::encoding::TypeMarker for StreamConfigGetSupportedFormatsResponse {
4616        type Owned = Self;
4617
4618        #[inline(always)]
4619        fn inline_align(_context: fidl::encoding::Context) -> usize {
4620            8
4621        }
4622
4623        #[inline(always)]
4624        fn inline_size(_context: fidl::encoding::Context) -> usize {
4625            16
4626        }
4627    }
4628
4629    unsafe impl<D: fidl::encoding::ResourceDialect>
4630        fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D>
4631        for &StreamConfigGetSupportedFormatsResponse
4632    {
4633        #[inline]
4634        unsafe fn encode(
4635            self,
4636            encoder: &mut fidl::encoding::Encoder<'_, D>,
4637            offset: usize,
4638            _depth: fidl::encoding::Depth,
4639        ) -> fidl::Result<()> {
4640            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
4641            // Delegate to tuple encoding.
4642            fidl::encoding::Encode::<StreamConfigGetSupportedFormatsResponse, D>::encode(
4643                (
4644                    <fidl::encoding::Vector<SupportedFormats, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.supported_formats),
4645                ),
4646                encoder, offset, _depth
4647            )
4648        }
4649    }
4650    unsafe impl<
4651        D: fidl::encoding::ResourceDialect,
4652        T0: fidl::encoding::Encode<fidl::encoding::Vector<SupportedFormats, 64>, D>,
4653    > fidl::encoding::Encode<StreamConfigGetSupportedFormatsResponse, D> for (T0,)
4654    {
4655        #[inline]
4656        unsafe fn encode(
4657            self,
4658            encoder: &mut fidl::encoding::Encoder<'_, D>,
4659            offset: usize,
4660            depth: fidl::encoding::Depth,
4661        ) -> fidl::Result<()> {
4662            encoder.debug_check_bounds::<StreamConfigGetSupportedFormatsResponse>(offset);
4663            // Zero out padding regions. There's no need to apply masks
4664            // because the unmasked parts will be overwritten by fields.
4665            // Write the fields.
4666            self.0.encode(encoder, offset + 0, depth)?;
4667            Ok(())
4668        }
4669    }
4670
4671    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4672        for StreamConfigGetSupportedFormatsResponse
4673    {
4674        #[inline(always)]
4675        fn new_empty() -> Self {
4676            Self {
4677                supported_formats: fidl::new_empty!(fidl::encoding::Vector<SupportedFormats, 64>, D),
4678            }
4679        }
4680
4681        #[inline]
4682        unsafe fn decode(
4683            &mut self,
4684            decoder: &mut fidl::encoding::Decoder<'_, D>,
4685            offset: usize,
4686            _depth: fidl::encoding::Depth,
4687        ) -> fidl::Result<()> {
4688            decoder.debug_check_bounds::<Self>(offset);
4689            // Verify that padding bytes are zero.
4690            fidl::decode!(fidl::encoding::Vector<SupportedFormats, 64>, D, &mut self.supported_formats, decoder, offset + 0, _depth)?;
4691            Ok(())
4692        }
4693    }
4694
4695    impl fidl::encoding::ValueTypeMarker for StreamConfigSetGainRequest {
4696        type Borrowed<'a> = &'a Self;
4697        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4698            value
4699        }
4700    }
4701
4702    unsafe impl fidl::encoding::TypeMarker for StreamConfigSetGainRequest {
4703        type Owned = Self;
4704
4705        #[inline(always)]
4706        fn inline_align(_context: fidl::encoding::Context) -> usize {
4707            8
4708        }
4709
4710        #[inline(always)]
4711        fn inline_size(_context: fidl::encoding::Context) -> usize {
4712            16
4713        }
4714    }
4715
4716    unsafe impl<D: fidl::encoding::ResourceDialect>
4717        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for &StreamConfigSetGainRequest
4718    {
4719        #[inline]
4720        unsafe fn encode(
4721            self,
4722            encoder: &mut fidl::encoding::Encoder<'_, D>,
4723            offset: usize,
4724            _depth: fidl::encoding::Depth,
4725        ) -> fidl::Result<()> {
4726            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
4727            // Delegate to tuple encoding.
4728            fidl::encoding::Encode::<StreamConfigSetGainRequest, D>::encode(
4729                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.target_state),),
4730                encoder,
4731                offset,
4732                _depth,
4733            )
4734        }
4735    }
4736    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
4737        fidl::encoding::Encode<StreamConfigSetGainRequest, D> for (T0,)
4738    {
4739        #[inline]
4740        unsafe fn encode(
4741            self,
4742            encoder: &mut fidl::encoding::Encoder<'_, D>,
4743            offset: usize,
4744            depth: fidl::encoding::Depth,
4745        ) -> fidl::Result<()> {
4746            encoder.debug_check_bounds::<StreamConfigSetGainRequest>(offset);
4747            // Zero out padding regions. There's no need to apply masks
4748            // because the unmasked parts will be overwritten by fields.
4749            // Write the fields.
4750            self.0.encode(encoder, offset + 0, depth)?;
4751            Ok(())
4752        }
4753    }
4754
4755    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4756        for StreamConfigSetGainRequest
4757    {
4758        #[inline(always)]
4759        fn new_empty() -> Self {
4760            Self { target_state: fidl::new_empty!(GainState, D) }
4761        }
4762
4763        #[inline]
4764        unsafe fn decode(
4765            &mut self,
4766            decoder: &mut fidl::encoding::Decoder<'_, D>,
4767            offset: usize,
4768            _depth: fidl::encoding::Depth,
4769        ) -> fidl::Result<()> {
4770            decoder.debug_check_bounds::<Self>(offset);
4771            // Verify that padding bytes are zero.
4772            fidl::decode!(GainState, D, &mut self.target_state, decoder, offset + 0, _depth)?;
4773            Ok(())
4774        }
4775    }
4776
4777    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchGainStateResponse {
4778        type Borrowed<'a> = &'a Self;
4779        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4780            value
4781        }
4782    }
4783
4784    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchGainStateResponse {
4785        type Owned = Self;
4786
4787        #[inline(always)]
4788        fn inline_align(_context: fidl::encoding::Context) -> usize {
4789            8
4790        }
4791
4792        #[inline(always)]
4793        fn inline_size(_context: fidl::encoding::Context) -> usize {
4794            16
4795        }
4796    }
4797
4798    unsafe impl<D: fidl::encoding::ResourceDialect>
4799        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D>
4800        for &StreamConfigWatchGainStateResponse
4801    {
4802        #[inline]
4803        unsafe fn encode(
4804            self,
4805            encoder: &mut fidl::encoding::Encoder<'_, D>,
4806            offset: usize,
4807            _depth: fidl::encoding::Depth,
4808        ) -> fidl::Result<()> {
4809            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
4810            // Delegate to tuple encoding.
4811            fidl::encoding::Encode::<StreamConfigWatchGainStateResponse, D>::encode(
4812                (<GainState as fidl::encoding::ValueTypeMarker>::borrow(&self.gain_state),),
4813                encoder,
4814                offset,
4815                _depth,
4816            )
4817        }
4818    }
4819    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<GainState, D>>
4820        fidl::encoding::Encode<StreamConfigWatchGainStateResponse, D> for (T0,)
4821    {
4822        #[inline]
4823        unsafe fn encode(
4824            self,
4825            encoder: &mut fidl::encoding::Encoder<'_, D>,
4826            offset: usize,
4827            depth: fidl::encoding::Depth,
4828        ) -> fidl::Result<()> {
4829            encoder.debug_check_bounds::<StreamConfigWatchGainStateResponse>(offset);
4830            // Zero out padding regions. There's no need to apply masks
4831            // because the unmasked parts will be overwritten by fields.
4832            // Write the fields.
4833            self.0.encode(encoder, offset + 0, depth)?;
4834            Ok(())
4835        }
4836    }
4837
4838    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4839        for StreamConfigWatchGainStateResponse
4840    {
4841        #[inline(always)]
4842        fn new_empty() -> Self {
4843            Self { gain_state: fidl::new_empty!(GainState, D) }
4844        }
4845
4846        #[inline]
4847        unsafe fn decode(
4848            &mut self,
4849            decoder: &mut fidl::encoding::Decoder<'_, D>,
4850            offset: usize,
4851            _depth: fidl::encoding::Depth,
4852        ) -> fidl::Result<()> {
4853            decoder.debug_check_bounds::<Self>(offset);
4854            // Verify that padding bytes are zero.
4855            fidl::decode!(GainState, D, &mut self.gain_state, decoder, offset + 0, _depth)?;
4856            Ok(())
4857        }
4858    }
4859
4860    impl fidl::encoding::ValueTypeMarker for StreamConfigWatchPlugStateResponse {
4861        type Borrowed<'a> = &'a Self;
4862        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4863            value
4864        }
4865    }
4866
4867    unsafe impl fidl::encoding::TypeMarker for StreamConfigWatchPlugStateResponse {
4868        type Owned = Self;
4869
4870        #[inline(always)]
4871        fn inline_align(_context: fidl::encoding::Context) -> usize {
4872            8
4873        }
4874
4875        #[inline(always)]
4876        fn inline_size(_context: fidl::encoding::Context) -> usize {
4877            16
4878        }
4879    }
4880
4881    unsafe impl<D: fidl::encoding::ResourceDialect>
4882        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D>
4883        for &StreamConfigWatchPlugStateResponse
4884    {
4885        #[inline]
4886        unsafe fn encode(
4887            self,
4888            encoder: &mut fidl::encoding::Encoder<'_, D>,
4889            offset: usize,
4890            _depth: fidl::encoding::Depth,
4891        ) -> fidl::Result<()> {
4892            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
4893            // Delegate to tuple encoding.
4894            fidl::encoding::Encode::<StreamConfigWatchPlugStateResponse, D>::encode(
4895                (<PlugState as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_state),),
4896                encoder,
4897                offset,
4898                _depth,
4899            )
4900        }
4901    }
4902    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<PlugState, D>>
4903        fidl::encoding::Encode<StreamConfigWatchPlugStateResponse, D> for (T0,)
4904    {
4905        #[inline]
4906        unsafe fn encode(
4907            self,
4908            encoder: &mut fidl::encoding::Encoder<'_, D>,
4909            offset: usize,
4910            depth: fidl::encoding::Depth,
4911        ) -> fidl::Result<()> {
4912            encoder.debug_check_bounds::<StreamConfigWatchPlugStateResponse>(offset);
4913            // Zero out padding regions. There's no need to apply masks
4914            // because the unmasked parts will be overwritten by fields.
4915            // Write the fields.
4916            self.0.encode(encoder, offset + 0, depth)?;
4917            Ok(())
4918        }
4919    }
4920
4921    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4922        for StreamConfigWatchPlugStateResponse
4923    {
4924        #[inline(always)]
4925        fn new_empty() -> Self {
4926            Self { plug_state: fidl::new_empty!(PlugState, D) }
4927        }
4928
4929        #[inline]
4930        unsafe fn decode(
4931            &mut self,
4932            decoder: &mut fidl::encoding::Decoder<'_, D>,
4933            offset: usize,
4934            _depth: fidl::encoding::Depth,
4935        ) -> fidl::Result<()> {
4936            decoder.debug_check_bounds::<Self>(offset);
4937            // Verify that padding bytes are zero.
4938            fidl::decode!(PlugState, D, &mut self.plug_state, decoder, offset + 0, _depth)?;
4939            Ok(())
4940        }
4941    }
4942
4943    impl ChannelAttributes {
4944        #[inline(always)]
4945        fn max_ordinal_present(&self) -> u64 {
4946            if let Some(_) = self.max_frequency {
4947                return 2;
4948            }
4949            if let Some(_) = self.min_frequency {
4950                return 1;
4951            }
4952            0
4953        }
4954    }
4955
4956    impl fidl::encoding::ValueTypeMarker for ChannelAttributes {
4957        type Borrowed<'a> = &'a Self;
4958        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4959            value
4960        }
4961    }
4962
4963    unsafe impl fidl::encoding::TypeMarker for ChannelAttributes {
4964        type Owned = Self;
4965
4966        #[inline(always)]
4967        fn inline_align(_context: fidl::encoding::Context) -> usize {
4968            8
4969        }
4970
4971        #[inline(always)]
4972        fn inline_size(_context: fidl::encoding::Context) -> usize {
4973            16
4974        }
4975    }
4976
4977    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelAttributes, D>
4978        for &ChannelAttributes
4979    {
4980        unsafe fn encode(
4981            self,
4982            encoder: &mut fidl::encoding::Encoder<'_, D>,
4983            offset: usize,
4984            mut depth: fidl::encoding::Depth,
4985        ) -> fidl::Result<()> {
4986            encoder.debug_check_bounds::<ChannelAttributes>(offset);
4987            // Vector header
4988            let max_ordinal: u64 = self.max_ordinal_present();
4989            encoder.write_num(max_ordinal, offset);
4990            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4991            // Calling encoder.out_of_line_offset(0) is not allowed.
4992            if max_ordinal == 0 {
4993                return Ok(());
4994            }
4995            depth.increment()?;
4996            let envelope_size = 8;
4997            let bytes_len = max_ordinal as usize * envelope_size;
4998            #[allow(unused_variables)]
4999            let offset = encoder.out_of_line_offset(bytes_len);
5000            let mut _prev_end_offset: usize = 0;
5001            if 1 > max_ordinal {
5002                return Ok(());
5003            }
5004
5005            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5006            // are envelope_size bytes.
5007            let cur_offset: usize = (1 - 1) * envelope_size;
5008
5009            // Zero reserved fields.
5010            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5011
5012            // Safety:
5013            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5014            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5015            //   envelope_size bytes, there is always sufficient room.
5016            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5017                self.min_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5018                encoder,
5019                offset + cur_offset,
5020                depth,
5021            )?;
5022
5023            _prev_end_offset = cur_offset + envelope_size;
5024            if 2 > max_ordinal {
5025                return Ok(());
5026            }
5027
5028            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5029            // are envelope_size bytes.
5030            let cur_offset: usize = (2 - 1) * envelope_size;
5031
5032            // Zero reserved fields.
5033            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5034
5035            // Safety:
5036            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5037            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5038            //   envelope_size bytes, there is always sufficient room.
5039            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5040                self.max_frequency.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5041                encoder,
5042                offset + cur_offset,
5043                depth,
5044            )?;
5045
5046            _prev_end_offset = cur_offset + envelope_size;
5047
5048            Ok(())
5049        }
5050    }
5051
5052    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelAttributes {
5053        #[inline(always)]
5054        fn new_empty() -> Self {
5055            Self::default()
5056        }
5057
5058        unsafe fn decode(
5059            &mut self,
5060            decoder: &mut fidl::encoding::Decoder<'_, D>,
5061            offset: usize,
5062            mut depth: fidl::encoding::Depth,
5063        ) -> fidl::Result<()> {
5064            decoder.debug_check_bounds::<Self>(offset);
5065            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5066                None => return Err(fidl::Error::NotNullable),
5067                Some(len) => len,
5068            };
5069            // Calling decoder.out_of_line_offset(0) is not allowed.
5070            if len == 0 {
5071                return Ok(());
5072            };
5073            depth.increment()?;
5074            let envelope_size = 8;
5075            let bytes_len = len * envelope_size;
5076            let offset = decoder.out_of_line_offset(bytes_len)?;
5077            // Decode the envelope for each type.
5078            let mut _next_ordinal_to_read = 0;
5079            let mut next_offset = offset;
5080            let end_offset = offset + bytes_len;
5081            _next_ordinal_to_read += 1;
5082            if next_offset >= end_offset {
5083                return Ok(());
5084            }
5085
5086            // Decode unknown envelopes for gaps in ordinals.
5087            while _next_ordinal_to_read < 1 {
5088                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5089                _next_ordinal_to_read += 1;
5090                next_offset += envelope_size;
5091            }
5092
5093            let next_out_of_line = decoder.next_out_of_line();
5094            let handles_before = decoder.remaining_handles();
5095            if let Some((inlined, num_bytes, num_handles)) =
5096                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5097            {
5098                let member_inline_size =
5099                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5100                if inlined != (member_inline_size <= 4) {
5101                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5102                }
5103                let inner_offset;
5104                let mut inner_depth = depth.clone();
5105                if inlined {
5106                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5107                    inner_offset = next_offset;
5108                } else {
5109                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5110                    inner_depth.increment()?;
5111                }
5112                let val_ref = self.min_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
5113                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5114                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5115                {
5116                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5117                }
5118                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5119                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5120                }
5121            }
5122
5123            next_offset += envelope_size;
5124            _next_ordinal_to_read += 1;
5125            if next_offset >= end_offset {
5126                return Ok(());
5127            }
5128
5129            // Decode unknown envelopes for gaps in ordinals.
5130            while _next_ordinal_to_read < 2 {
5131                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5132                _next_ordinal_to_read += 1;
5133                next_offset += envelope_size;
5134            }
5135
5136            let next_out_of_line = decoder.next_out_of_line();
5137            let handles_before = decoder.remaining_handles();
5138            if let Some((inlined, num_bytes, num_handles)) =
5139                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5140            {
5141                let member_inline_size =
5142                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5143                if inlined != (member_inline_size <= 4) {
5144                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5145                }
5146                let inner_offset;
5147                let mut inner_depth = depth.clone();
5148                if inlined {
5149                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5150                    inner_offset = next_offset;
5151                } else {
5152                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5153                    inner_depth.increment()?;
5154                }
5155                let val_ref = self.max_frequency.get_or_insert_with(|| fidl::new_empty!(u32, D));
5156                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5157                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5158                {
5159                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5160                }
5161                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5162                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5163                }
5164            }
5165
5166            next_offset += envelope_size;
5167
5168            // Decode the remaining unknown envelopes.
5169            while next_offset < end_offset {
5170                _next_ordinal_to_read += 1;
5171                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5172                next_offset += envelope_size;
5173            }
5174
5175            Ok(())
5176        }
5177    }
5178
5179    impl ChannelSet {
5180        #[inline(always)]
5181        fn max_ordinal_present(&self) -> u64 {
5182            if let Some(_) = self.attributes {
5183                return 1;
5184            }
5185            0
5186        }
5187    }
5188
5189    impl fidl::encoding::ValueTypeMarker for ChannelSet {
5190        type Borrowed<'a> = &'a Self;
5191        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5192            value
5193        }
5194    }
5195
5196    unsafe impl fidl::encoding::TypeMarker for ChannelSet {
5197        type Owned = Self;
5198
5199        #[inline(always)]
5200        fn inline_align(_context: fidl::encoding::Context) -> usize {
5201            8
5202        }
5203
5204        #[inline(always)]
5205        fn inline_size(_context: fidl::encoding::Context) -> usize {
5206            16
5207        }
5208    }
5209
5210    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ChannelSet, D>
5211        for &ChannelSet
5212    {
5213        unsafe fn encode(
5214            self,
5215            encoder: &mut fidl::encoding::Encoder<'_, D>,
5216            offset: usize,
5217            mut depth: fidl::encoding::Depth,
5218        ) -> fidl::Result<()> {
5219            encoder.debug_check_bounds::<ChannelSet>(offset);
5220            // Vector header
5221            let max_ordinal: u64 = self.max_ordinal_present();
5222            encoder.write_num(max_ordinal, offset);
5223            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5224            // Calling encoder.out_of_line_offset(0) is not allowed.
5225            if max_ordinal == 0 {
5226                return Ok(());
5227            }
5228            depth.increment()?;
5229            let envelope_size = 8;
5230            let bytes_len = max_ordinal as usize * envelope_size;
5231            #[allow(unused_variables)]
5232            let offset = encoder.out_of_line_offset(bytes_len);
5233            let mut _prev_end_offset: usize = 0;
5234            if 1 > max_ordinal {
5235                return Ok(());
5236            }
5237
5238            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5239            // are envelope_size bytes.
5240            let cur_offset: usize = (1 - 1) * envelope_size;
5241
5242            // Zero reserved fields.
5243            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5244
5245            // Safety:
5246            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5247            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5248            //   envelope_size bytes, there is always sufficient room.
5249            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelAttributes, 64>, D>(
5250            self.attributes.as_ref().map(<fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::ValueTypeMarker>::borrow),
5251            encoder, offset + cur_offset, depth
5252        )?;
5253
5254            _prev_end_offset = cur_offset + envelope_size;
5255
5256            Ok(())
5257        }
5258    }
5259
5260    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ChannelSet {
5261        #[inline(always)]
5262        fn new_empty() -> Self {
5263            Self::default()
5264        }
5265
5266        unsafe fn decode(
5267            &mut self,
5268            decoder: &mut fidl::encoding::Decoder<'_, D>,
5269            offset: usize,
5270            mut depth: fidl::encoding::Depth,
5271        ) -> fidl::Result<()> {
5272            decoder.debug_check_bounds::<Self>(offset);
5273            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5274                None => return Err(fidl::Error::NotNullable),
5275                Some(len) => len,
5276            };
5277            // Calling decoder.out_of_line_offset(0) is not allowed.
5278            if len == 0 {
5279                return Ok(());
5280            };
5281            depth.increment()?;
5282            let envelope_size = 8;
5283            let bytes_len = len * envelope_size;
5284            let offset = decoder.out_of_line_offset(bytes_len)?;
5285            // Decode the envelope for each type.
5286            let mut _next_ordinal_to_read = 0;
5287            let mut next_offset = offset;
5288            let end_offset = offset + bytes_len;
5289            _next_ordinal_to_read += 1;
5290            if next_offset >= end_offset {
5291                return Ok(());
5292            }
5293
5294            // Decode unknown envelopes for gaps in ordinals.
5295            while _next_ordinal_to_read < 1 {
5296                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5297                _next_ordinal_to_read += 1;
5298                next_offset += envelope_size;
5299            }
5300
5301            let next_out_of_line = decoder.next_out_of_line();
5302            let handles_before = decoder.remaining_handles();
5303            if let Some((inlined, num_bytes, num_handles)) =
5304                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5305            {
5306                let member_inline_size = <fidl::encoding::Vector<ChannelAttributes, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5307                if inlined != (member_inline_size <= 4) {
5308                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5309                }
5310                let inner_offset;
5311                let mut inner_depth = depth.clone();
5312                if inlined {
5313                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5314                    inner_offset = next_offset;
5315                } else {
5316                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5317                    inner_depth.increment()?;
5318                }
5319                let val_ref = self.attributes.get_or_insert_with(
5320                    || fidl::new_empty!(fidl::encoding::Vector<ChannelAttributes, 64>, D),
5321                );
5322                fidl::decode!(fidl::encoding::Vector<ChannelAttributes, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
5323                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5324                {
5325                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5326                }
5327                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5328                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5329                }
5330            }
5331
5332            next_offset += envelope_size;
5333
5334            // Decode the remaining unknown envelopes.
5335            while next_offset < end_offset {
5336                _next_ordinal_to_read += 1;
5337                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5338                next_offset += envelope_size;
5339            }
5340
5341            Ok(())
5342        }
5343    }
5344
5345    impl CodecFormatInfo {
5346        #[inline(always)]
5347        fn max_ordinal_present(&self) -> u64 {
5348            if let Some(_) = self.turn_off_delay {
5349                return 3;
5350            }
5351            if let Some(_) = self.turn_on_delay {
5352                return 2;
5353            }
5354            if let Some(_) = self.external_delay {
5355                return 1;
5356            }
5357            0
5358        }
5359    }
5360
5361    impl fidl::encoding::ValueTypeMarker for CodecFormatInfo {
5362        type Borrowed<'a> = &'a Self;
5363        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5364            value
5365        }
5366    }
5367
5368    unsafe impl fidl::encoding::TypeMarker for CodecFormatInfo {
5369        type Owned = Self;
5370
5371        #[inline(always)]
5372        fn inline_align(_context: fidl::encoding::Context) -> usize {
5373            8
5374        }
5375
5376        #[inline(always)]
5377        fn inline_size(_context: fidl::encoding::Context) -> usize {
5378            16
5379        }
5380    }
5381
5382    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecFormatInfo, D>
5383        for &CodecFormatInfo
5384    {
5385        unsafe fn encode(
5386            self,
5387            encoder: &mut fidl::encoding::Encoder<'_, D>,
5388            offset: usize,
5389            mut depth: fidl::encoding::Depth,
5390        ) -> fidl::Result<()> {
5391            encoder.debug_check_bounds::<CodecFormatInfo>(offset);
5392            // Vector header
5393            let max_ordinal: u64 = self.max_ordinal_present();
5394            encoder.write_num(max_ordinal, offset);
5395            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5396            // Calling encoder.out_of_line_offset(0) is not allowed.
5397            if max_ordinal == 0 {
5398                return Ok(());
5399            }
5400            depth.increment()?;
5401            let envelope_size = 8;
5402            let bytes_len = max_ordinal as usize * envelope_size;
5403            #[allow(unused_variables)]
5404            let offset = encoder.out_of_line_offset(bytes_len);
5405            let mut _prev_end_offset: usize = 0;
5406            if 1 > max_ordinal {
5407                return Ok(());
5408            }
5409
5410            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5411            // are envelope_size bytes.
5412            let cur_offset: usize = (1 - 1) * envelope_size;
5413
5414            // Zero reserved fields.
5415            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5416
5417            // Safety:
5418            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5419            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5420            //   envelope_size bytes, there is always sufficient room.
5421            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5422                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5423                encoder,
5424                offset + cur_offset,
5425                depth,
5426            )?;
5427
5428            _prev_end_offset = cur_offset + envelope_size;
5429            if 2 > max_ordinal {
5430                return Ok(());
5431            }
5432
5433            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5434            // are envelope_size bytes.
5435            let cur_offset: usize = (2 - 1) * envelope_size;
5436
5437            // Zero reserved fields.
5438            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5439
5440            // Safety:
5441            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5442            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5443            //   envelope_size bytes, there is always sufficient room.
5444            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5445                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5446                encoder,
5447                offset + cur_offset,
5448                depth,
5449            )?;
5450
5451            _prev_end_offset = cur_offset + envelope_size;
5452            if 3 > max_ordinal {
5453                return Ok(());
5454            }
5455
5456            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5457            // are envelope_size bytes.
5458            let cur_offset: usize = (3 - 1) * envelope_size;
5459
5460            // Zero reserved fields.
5461            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5462
5463            // Safety:
5464            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5465            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5466            //   envelope_size bytes, there is always sufficient room.
5467            fidl::encoding::encode_in_envelope_optional::<i64, D>(
5468                self.turn_off_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
5469                encoder,
5470                offset + cur_offset,
5471                depth,
5472            )?;
5473
5474            _prev_end_offset = cur_offset + envelope_size;
5475
5476            Ok(())
5477        }
5478    }
5479
5480    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecFormatInfo {
5481        #[inline(always)]
5482        fn new_empty() -> Self {
5483            Self::default()
5484        }
5485
5486        unsafe fn decode(
5487            &mut self,
5488            decoder: &mut fidl::encoding::Decoder<'_, D>,
5489            offset: usize,
5490            mut depth: fidl::encoding::Depth,
5491        ) -> fidl::Result<()> {
5492            decoder.debug_check_bounds::<Self>(offset);
5493            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5494                None => return Err(fidl::Error::NotNullable),
5495                Some(len) => len,
5496            };
5497            // Calling decoder.out_of_line_offset(0) is not allowed.
5498            if len == 0 {
5499                return Ok(());
5500            };
5501            depth.increment()?;
5502            let envelope_size = 8;
5503            let bytes_len = len * envelope_size;
5504            let offset = decoder.out_of_line_offset(bytes_len)?;
5505            // Decode the envelope for each type.
5506            let mut _next_ordinal_to_read = 0;
5507            let mut next_offset = offset;
5508            let end_offset = offset + bytes_len;
5509            _next_ordinal_to_read += 1;
5510            if next_offset >= end_offset {
5511                return Ok(());
5512            }
5513
5514            // Decode unknown envelopes for gaps in ordinals.
5515            while _next_ordinal_to_read < 1 {
5516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5517                _next_ordinal_to_read += 1;
5518                next_offset += envelope_size;
5519            }
5520
5521            let next_out_of_line = decoder.next_out_of_line();
5522            let handles_before = decoder.remaining_handles();
5523            if let Some((inlined, num_bytes, num_handles)) =
5524                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5525            {
5526                let member_inline_size =
5527                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5528                if inlined != (member_inline_size <= 4) {
5529                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5530                }
5531                let inner_offset;
5532                let mut inner_depth = depth.clone();
5533                if inlined {
5534                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5535                    inner_offset = next_offset;
5536                } else {
5537                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5538                    inner_depth.increment()?;
5539                }
5540                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
5541                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5542                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5543                {
5544                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5545                }
5546                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5547                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5548                }
5549            }
5550
5551            next_offset += envelope_size;
5552            _next_ordinal_to_read += 1;
5553            if next_offset >= end_offset {
5554                return Ok(());
5555            }
5556
5557            // Decode unknown envelopes for gaps in ordinals.
5558            while _next_ordinal_to_read < 2 {
5559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5560                _next_ordinal_to_read += 1;
5561                next_offset += envelope_size;
5562            }
5563
5564            let next_out_of_line = decoder.next_out_of_line();
5565            let handles_before = decoder.remaining_handles();
5566            if let Some((inlined, num_bytes, num_handles)) =
5567                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5568            {
5569                let member_inline_size =
5570                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5571                if inlined != (member_inline_size <= 4) {
5572                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5573                }
5574                let inner_offset;
5575                let mut inner_depth = depth.clone();
5576                if inlined {
5577                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5578                    inner_offset = next_offset;
5579                } else {
5580                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5581                    inner_depth.increment()?;
5582                }
5583                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
5584                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5585                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5586                {
5587                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5588                }
5589                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5590                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5591                }
5592            }
5593
5594            next_offset += envelope_size;
5595            _next_ordinal_to_read += 1;
5596            if next_offset >= end_offset {
5597                return Ok(());
5598            }
5599
5600            // Decode unknown envelopes for gaps in ordinals.
5601            while _next_ordinal_to_read < 3 {
5602                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5603                _next_ordinal_to_read += 1;
5604                next_offset += envelope_size;
5605            }
5606
5607            let next_out_of_line = decoder.next_out_of_line();
5608            let handles_before = decoder.remaining_handles();
5609            if let Some((inlined, num_bytes, num_handles)) =
5610                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5611            {
5612                let member_inline_size =
5613                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5614                if inlined != (member_inline_size <= 4) {
5615                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5616                }
5617                let inner_offset;
5618                let mut inner_depth = depth.clone();
5619                if inlined {
5620                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5621                    inner_offset = next_offset;
5622                } else {
5623                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5624                    inner_depth.increment()?;
5625                }
5626                let val_ref = self.turn_off_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
5627                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
5628                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5629                {
5630                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5631                }
5632                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5633                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5634                }
5635            }
5636
5637            next_offset += envelope_size;
5638
5639            // Decode the remaining unknown envelopes.
5640            while next_offset < end_offset {
5641                _next_ordinal_to_read += 1;
5642                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5643                next_offset += envelope_size;
5644            }
5645
5646            Ok(())
5647        }
5648    }
5649
5650    impl CodecProperties {
5651        #[inline(always)]
5652        fn max_ordinal_present(&self) -> u64 {
5653            if let Some(_) = self.plug_detect_capabilities {
5654                return 5;
5655            }
5656            if let Some(_) = self.unique_id {
5657                return 4;
5658            }
5659            if let Some(_) = self.product {
5660                return 3;
5661            }
5662            if let Some(_) = self.manufacturer {
5663                return 2;
5664            }
5665            if let Some(_) = self.is_input {
5666                return 1;
5667            }
5668            0
5669        }
5670    }
5671
5672    impl fidl::encoding::ValueTypeMarker for CodecProperties {
5673        type Borrowed<'a> = &'a Self;
5674        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5675            value
5676        }
5677    }
5678
5679    unsafe impl fidl::encoding::TypeMarker for CodecProperties {
5680        type Owned = Self;
5681
5682        #[inline(always)]
5683        fn inline_align(_context: fidl::encoding::Context) -> usize {
5684            8
5685        }
5686
5687        #[inline(always)]
5688        fn inline_size(_context: fidl::encoding::Context) -> usize {
5689            16
5690        }
5691    }
5692
5693    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CodecProperties, D>
5694        for &CodecProperties
5695    {
5696        unsafe fn encode(
5697            self,
5698            encoder: &mut fidl::encoding::Encoder<'_, D>,
5699            offset: usize,
5700            mut depth: fidl::encoding::Depth,
5701        ) -> fidl::Result<()> {
5702            encoder.debug_check_bounds::<CodecProperties>(offset);
5703            // Vector header
5704            let max_ordinal: u64 = self.max_ordinal_present();
5705            encoder.write_num(max_ordinal, offset);
5706            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5707            // Calling encoder.out_of_line_offset(0) is not allowed.
5708            if max_ordinal == 0 {
5709                return Ok(());
5710            }
5711            depth.increment()?;
5712            let envelope_size = 8;
5713            let bytes_len = max_ordinal as usize * envelope_size;
5714            #[allow(unused_variables)]
5715            let offset = encoder.out_of_line_offset(bytes_len);
5716            let mut _prev_end_offset: usize = 0;
5717            if 1 > max_ordinal {
5718                return Ok(());
5719            }
5720
5721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5722            // are envelope_size bytes.
5723            let cur_offset: usize = (1 - 1) * envelope_size;
5724
5725            // Zero reserved fields.
5726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5727
5728            // Safety:
5729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5731            //   envelope_size bytes, there is always sufficient room.
5732            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5733                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5734                encoder,
5735                offset + cur_offset,
5736                depth,
5737            )?;
5738
5739            _prev_end_offset = cur_offset + envelope_size;
5740            if 2 > max_ordinal {
5741                return Ok(());
5742            }
5743
5744            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5745            // are envelope_size bytes.
5746            let cur_offset: usize = (2 - 1) * envelope_size;
5747
5748            // Zero reserved fields.
5749            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5750
5751            // Safety:
5752            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5753            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5754            //   envelope_size bytes, there is always sufficient room.
5755            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
5756                self.manufacturer.as_ref().map(
5757                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
5758                ),
5759                encoder,
5760                offset + cur_offset,
5761                depth,
5762            )?;
5763
5764            _prev_end_offset = cur_offset + envelope_size;
5765            if 3 > max_ordinal {
5766                return Ok(());
5767            }
5768
5769            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5770            // are envelope_size bytes.
5771            let cur_offset: usize = (3 - 1) * envelope_size;
5772
5773            // Zero reserved fields.
5774            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5775
5776            // Safety:
5777            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5778            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5779            //   envelope_size bytes, there is always sufficient room.
5780            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
5781                self.product.as_ref().map(
5782                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
5783                ),
5784                encoder,
5785                offset + cur_offset,
5786                depth,
5787            )?;
5788
5789            _prev_end_offset = cur_offset + envelope_size;
5790            if 4 > max_ordinal {
5791                return Ok(());
5792            }
5793
5794            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5795            // are envelope_size bytes.
5796            let cur_offset: usize = (4 - 1) * envelope_size;
5797
5798            // Zero reserved fields.
5799            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5800
5801            // Safety:
5802            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5803            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5804            //   envelope_size bytes, there is always sufficient room.
5805            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
5806                self.unique_id.as_ref().map(
5807                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
5808                ),
5809                encoder,
5810                offset + cur_offset,
5811                depth,
5812            )?;
5813
5814            _prev_end_offset = cur_offset + envelope_size;
5815            if 5 > max_ordinal {
5816                return Ok(());
5817            }
5818
5819            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5820            // are envelope_size bytes.
5821            let cur_offset: usize = (5 - 1) * envelope_size;
5822
5823            // Zero reserved fields.
5824            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5825
5826            // Safety:
5827            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5828            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5829            //   envelope_size bytes, there is always sufficient room.
5830            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
5831                self.plug_detect_capabilities
5832                    .as_ref()
5833                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
5834                encoder,
5835                offset + cur_offset,
5836                depth,
5837            )?;
5838
5839            _prev_end_offset = cur_offset + envelope_size;
5840
5841            Ok(())
5842        }
5843    }
5844
5845    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CodecProperties {
5846        #[inline(always)]
5847        fn new_empty() -> Self {
5848            Self::default()
5849        }
5850
5851        unsafe fn decode(
5852            &mut self,
5853            decoder: &mut fidl::encoding::Decoder<'_, D>,
5854            offset: usize,
5855            mut depth: fidl::encoding::Depth,
5856        ) -> fidl::Result<()> {
5857            decoder.debug_check_bounds::<Self>(offset);
5858            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5859                None => return Err(fidl::Error::NotNullable),
5860                Some(len) => len,
5861            };
5862            // Calling decoder.out_of_line_offset(0) is not allowed.
5863            if len == 0 {
5864                return Ok(());
5865            };
5866            depth.increment()?;
5867            let envelope_size = 8;
5868            let bytes_len = len * envelope_size;
5869            let offset = decoder.out_of_line_offset(bytes_len)?;
5870            // Decode the envelope for each type.
5871            let mut _next_ordinal_to_read = 0;
5872            let mut next_offset = offset;
5873            let end_offset = offset + bytes_len;
5874            _next_ordinal_to_read += 1;
5875            if next_offset >= end_offset {
5876                return Ok(());
5877            }
5878
5879            // Decode unknown envelopes for gaps in ordinals.
5880            while _next_ordinal_to_read < 1 {
5881                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5882                _next_ordinal_to_read += 1;
5883                next_offset += envelope_size;
5884            }
5885
5886            let next_out_of_line = decoder.next_out_of_line();
5887            let handles_before = decoder.remaining_handles();
5888            if let Some((inlined, num_bytes, num_handles)) =
5889                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5890            {
5891                let member_inline_size =
5892                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5893                if inlined != (member_inline_size <= 4) {
5894                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5895                }
5896                let inner_offset;
5897                let mut inner_depth = depth.clone();
5898                if inlined {
5899                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5900                    inner_offset = next_offset;
5901                } else {
5902                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5903                    inner_depth.increment()?;
5904                }
5905                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
5906                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5907                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5908                {
5909                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5910                }
5911                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5912                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5913                }
5914            }
5915
5916            next_offset += envelope_size;
5917            _next_ordinal_to_read += 1;
5918            if next_offset >= end_offset {
5919                return Ok(());
5920            }
5921
5922            // Decode unknown envelopes for gaps in ordinals.
5923            while _next_ordinal_to_read < 2 {
5924                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5925                _next_ordinal_to_read += 1;
5926                next_offset += envelope_size;
5927            }
5928
5929            let next_out_of_line = decoder.next_out_of_line();
5930            let handles_before = decoder.remaining_handles();
5931            if let Some((inlined, num_bytes, num_handles)) =
5932                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5933            {
5934                let member_inline_size =
5935                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
5936                        decoder.context,
5937                    );
5938                if inlined != (member_inline_size <= 4) {
5939                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5940                }
5941                let inner_offset;
5942                let mut inner_depth = depth.clone();
5943                if inlined {
5944                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5945                    inner_offset = next_offset;
5946                } else {
5947                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5948                    inner_depth.increment()?;
5949                }
5950                let val_ref = self
5951                    .manufacturer
5952                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
5953                fidl::decode!(
5954                    fidl::encoding::BoundedString<256>,
5955                    D,
5956                    val_ref,
5957                    decoder,
5958                    inner_offset,
5959                    inner_depth
5960                )?;
5961                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5962                {
5963                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5964                }
5965                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5966                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5967                }
5968            }
5969
5970            next_offset += envelope_size;
5971            _next_ordinal_to_read += 1;
5972            if next_offset >= end_offset {
5973                return Ok(());
5974            }
5975
5976            // Decode unknown envelopes for gaps in ordinals.
5977            while _next_ordinal_to_read < 3 {
5978                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5979                _next_ordinal_to_read += 1;
5980                next_offset += envelope_size;
5981            }
5982
5983            let next_out_of_line = decoder.next_out_of_line();
5984            let handles_before = decoder.remaining_handles();
5985            if let Some((inlined, num_bytes, num_handles)) =
5986                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5987            {
5988                let member_inline_size =
5989                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
5990                        decoder.context,
5991                    );
5992                if inlined != (member_inline_size <= 4) {
5993                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5994                }
5995                let inner_offset;
5996                let mut inner_depth = depth.clone();
5997                if inlined {
5998                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5999                    inner_offset = next_offset;
6000                } else {
6001                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6002                    inner_depth.increment()?;
6003                }
6004                let val_ref = self
6005                    .product
6006                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
6007                fidl::decode!(
6008                    fidl::encoding::BoundedString<256>,
6009                    D,
6010                    val_ref,
6011                    decoder,
6012                    inner_offset,
6013                    inner_depth
6014                )?;
6015                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6016                {
6017                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6018                }
6019                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6020                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6021                }
6022            }
6023
6024            next_offset += envelope_size;
6025            _next_ordinal_to_read += 1;
6026            if next_offset >= end_offset {
6027                return Ok(());
6028            }
6029
6030            // Decode unknown envelopes for gaps in ordinals.
6031            while _next_ordinal_to_read < 4 {
6032                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6033                _next_ordinal_to_read += 1;
6034                next_offset += envelope_size;
6035            }
6036
6037            let next_out_of_line = decoder.next_out_of_line();
6038            let handles_before = decoder.remaining_handles();
6039            if let Some((inlined, num_bytes, num_handles)) =
6040                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6041            {
6042                let member_inline_size =
6043                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
6044                        decoder.context,
6045                    );
6046                if inlined != (member_inline_size <= 4) {
6047                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6048                }
6049                let inner_offset;
6050                let mut inner_depth = depth.clone();
6051                if inlined {
6052                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6053                    inner_offset = next_offset;
6054                } else {
6055                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6056                    inner_depth.increment()?;
6057                }
6058                let val_ref = self
6059                    .unique_id
6060                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
6061                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
6062                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6063                {
6064                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6065                }
6066                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6067                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6068                }
6069            }
6070
6071            next_offset += envelope_size;
6072            _next_ordinal_to_read += 1;
6073            if next_offset >= end_offset {
6074                return Ok(());
6075            }
6076
6077            // Decode unknown envelopes for gaps in ordinals.
6078            while _next_ordinal_to_read < 5 {
6079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6080                _next_ordinal_to_read += 1;
6081                next_offset += envelope_size;
6082            }
6083
6084            let next_out_of_line = decoder.next_out_of_line();
6085            let handles_before = decoder.remaining_handles();
6086            if let Some((inlined, num_bytes, num_handles)) =
6087                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6088            {
6089                let member_inline_size =
6090                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
6091                        decoder.context,
6092                    );
6093                if inlined != (member_inline_size <= 4) {
6094                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6095                }
6096                let inner_offset;
6097                let mut inner_depth = depth.clone();
6098                if inlined {
6099                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6100                    inner_offset = next_offset;
6101                } else {
6102                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6103                    inner_depth.increment()?;
6104                }
6105                let val_ref = self
6106                    .plug_detect_capabilities
6107                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
6108                fidl::decode!(
6109                    PlugDetectCapabilities,
6110                    D,
6111                    val_ref,
6112                    decoder,
6113                    inner_offset,
6114                    inner_depth
6115                )?;
6116                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6117                {
6118                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6119                }
6120                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6121                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6122                }
6123            }
6124
6125            next_offset += envelope_size;
6126
6127            // Decode the remaining unknown envelopes.
6128            while next_offset < end_offset {
6129                _next_ordinal_to_read += 1;
6130                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6131                next_offset += envelope_size;
6132            }
6133
6134            Ok(())
6135        }
6136    }
6137
6138    impl CompositeProperties {
6139        #[inline(always)]
6140        fn max_ordinal_present(&self) -> u64 {
6141            if let Some(_) = self.clock_domain {
6142                return 5;
6143            }
6144            if let Some(_) = self.unique_id {
6145                return 4;
6146            }
6147            if let Some(_) = self.product {
6148                return 3;
6149            }
6150            if let Some(_) = self.manufacturer {
6151                return 2;
6152            }
6153            0
6154        }
6155    }
6156
6157    impl fidl::encoding::ValueTypeMarker for CompositeProperties {
6158        type Borrowed<'a> = &'a Self;
6159        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6160            value
6161        }
6162    }
6163
6164    unsafe impl fidl::encoding::TypeMarker for CompositeProperties {
6165        type Owned = Self;
6166
6167        #[inline(always)]
6168        fn inline_align(_context: fidl::encoding::Context) -> usize {
6169            8
6170        }
6171
6172        #[inline(always)]
6173        fn inline_size(_context: fidl::encoding::Context) -> usize {
6174            16
6175        }
6176    }
6177
6178    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeProperties, D>
6179        for &CompositeProperties
6180    {
6181        unsafe fn encode(
6182            self,
6183            encoder: &mut fidl::encoding::Encoder<'_, D>,
6184            offset: usize,
6185            mut depth: fidl::encoding::Depth,
6186        ) -> fidl::Result<()> {
6187            encoder.debug_check_bounds::<CompositeProperties>(offset);
6188            // Vector header
6189            let max_ordinal: u64 = self.max_ordinal_present();
6190            encoder.write_num(max_ordinal, offset);
6191            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6192            // Calling encoder.out_of_line_offset(0) is not allowed.
6193            if max_ordinal == 0 {
6194                return Ok(());
6195            }
6196            depth.increment()?;
6197            let envelope_size = 8;
6198            let bytes_len = max_ordinal as usize * envelope_size;
6199            #[allow(unused_variables)]
6200            let offset = encoder.out_of_line_offset(bytes_len);
6201            let mut _prev_end_offset: usize = 0;
6202            if 2 > max_ordinal {
6203                return Ok(());
6204            }
6205
6206            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6207            // are envelope_size bytes.
6208            let cur_offset: usize = (2 - 1) * envelope_size;
6209
6210            // Zero reserved fields.
6211            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6212
6213            // Safety:
6214            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6215            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6216            //   envelope_size bytes, there is always sufficient room.
6217            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6218                self.manufacturer.as_ref().map(
6219                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6220                ),
6221                encoder,
6222                offset + cur_offset,
6223                depth,
6224            )?;
6225
6226            _prev_end_offset = cur_offset + envelope_size;
6227            if 3 > max_ordinal {
6228                return Ok(());
6229            }
6230
6231            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6232            // are envelope_size bytes.
6233            let cur_offset: usize = (3 - 1) * envelope_size;
6234
6235            // Zero reserved fields.
6236            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6237
6238            // Safety:
6239            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6240            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6241            //   envelope_size bytes, there is always sufficient room.
6242            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6243                self.product.as_ref().map(
6244                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6245                ),
6246                encoder,
6247                offset + cur_offset,
6248                depth,
6249            )?;
6250
6251            _prev_end_offset = cur_offset + envelope_size;
6252            if 4 > max_ordinal {
6253                return Ok(());
6254            }
6255
6256            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6257            // are envelope_size bytes.
6258            let cur_offset: usize = (4 - 1) * envelope_size;
6259
6260            // Zero reserved fields.
6261            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6262
6263            // Safety:
6264            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6265            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6266            //   envelope_size bytes, there is always sufficient room.
6267            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6268                self.unique_id.as_ref().map(
6269                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6270                ),
6271                encoder,
6272                offset + cur_offset,
6273                depth,
6274            )?;
6275
6276            _prev_end_offset = cur_offset + envelope_size;
6277            if 5 > max_ordinal {
6278                return Ok(());
6279            }
6280
6281            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6282            // are envelope_size bytes.
6283            let cur_offset: usize = (5 - 1) * envelope_size;
6284
6285            // Zero reserved fields.
6286            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6287
6288            // Safety:
6289            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6290            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6291            //   envelope_size bytes, there is always sufficient room.
6292            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6293                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6294                encoder,
6295                offset + cur_offset,
6296                depth,
6297            )?;
6298
6299            _prev_end_offset = cur_offset + envelope_size;
6300
6301            Ok(())
6302        }
6303    }
6304
6305    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeProperties {
6306        #[inline(always)]
6307        fn new_empty() -> Self {
6308            Self::default()
6309        }
6310
6311        unsafe fn decode(
6312            &mut self,
6313            decoder: &mut fidl::encoding::Decoder<'_, D>,
6314            offset: usize,
6315            mut depth: fidl::encoding::Depth,
6316        ) -> fidl::Result<()> {
6317            decoder.debug_check_bounds::<Self>(offset);
6318            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6319                None => return Err(fidl::Error::NotNullable),
6320                Some(len) => len,
6321            };
6322            // Calling decoder.out_of_line_offset(0) is not allowed.
6323            if len == 0 {
6324                return Ok(());
6325            };
6326            depth.increment()?;
6327            let envelope_size = 8;
6328            let bytes_len = len * envelope_size;
6329            let offset = decoder.out_of_line_offset(bytes_len)?;
6330            // Decode the envelope for each type.
6331            let mut _next_ordinal_to_read = 0;
6332            let mut next_offset = offset;
6333            let end_offset = offset + bytes_len;
6334            _next_ordinal_to_read += 1;
6335            if next_offset >= end_offset {
6336                return Ok(());
6337            }
6338
6339            // Decode unknown envelopes for gaps in ordinals.
6340            while _next_ordinal_to_read < 2 {
6341                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6342                _next_ordinal_to_read += 1;
6343                next_offset += envelope_size;
6344            }
6345
6346            let next_out_of_line = decoder.next_out_of_line();
6347            let handles_before = decoder.remaining_handles();
6348            if let Some((inlined, num_bytes, num_handles)) =
6349                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6350            {
6351                let member_inline_size =
6352                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6353                        decoder.context,
6354                    );
6355                if inlined != (member_inline_size <= 4) {
6356                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6357                }
6358                let inner_offset;
6359                let mut inner_depth = depth.clone();
6360                if inlined {
6361                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6362                    inner_offset = next_offset;
6363                } else {
6364                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6365                    inner_depth.increment()?;
6366                }
6367                let val_ref = self
6368                    .manufacturer
6369                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
6370                fidl::decode!(
6371                    fidl::encoding::BoundedString<256>,
6372                    D,
6373                    val_ref,
6374                    decoder,
6375                    inner_offset,
6376                    inner_depth
6377                )?;
6378                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6379                {
6380                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6381                }
6382                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6383                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6384                }
6385            }
6386
6387            next_offset += envelope_size;
6388            _next_ordinal_to_read += 1;
6389            if next_offset >= end_offset {
6390                return Ok(());
6391            }
6392
6393            // Decode unknown envelopes for gaps in ordinals.
6394            while _next_ordinal_to_read < 3 {
6395                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6396                _next_ordinal_to_read += 1;
6397                next_offset += envelope_size;
6398            }
6399
6400            let next_out_of_line = decoder.next_out_of_line();
6401            let handles_before = decoder.remaining_handles();
6402            if let Some((inlined, num_bytes, num_handles)) =
6403                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6404            {
6405                let member_inline_size =
6406                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6407                        decoder.context,
6408                    );
6409                if inlined != (member_inline_size <= 4) {
6410                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6411                }
6412                let inner_offset;
6413                let mut inner_depth = depth.clone();
6414                if inlined {
6415                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6416                    inner_offset = next_offset;
6417                } else {
6418                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6419                    inner_depth.increment()?;
6420                }
6421                let val_ref = self
6422                    .product
6423                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
6424                fidl::decode!(
6425                    fidl::encoding::BoundedString<256>,
6426                    D,
6427                    val_ref,
6428                    decoder,
6429                    inner_offset,
6430                    inner_depth
6431                )?;
6432                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6433                {
6434                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6435                }
6436                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6437                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6438                }
6439            }
6440
6441            next_offset += envelope_size;
6442            _next_ordinal_to_read += 1;
6443            if next_offset >= end_offset {
6444                return Ok(());
6445            }
6446
6447            // Decode unknown envelopes for gaps in ordinals.
6448            while _next_ordinal_to_read < 4 {
6449                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6450                _next_ordinal_to_read += 1;
6451                next_offset += envelope_size;
6452            }
6453
6454            let next_out_of_line = decoder.next_out_of_line();
6455            let handles_before = decoder.remaining_handles();
6456            if let Some((inlined, num_bytes, num_handles)) =
6457                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6458            {
6459                let member_inline_size =
6460                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
6461                        decoder.context,
6462                    );
6463                if inlined != (member_inline_size <= 4) {
6464                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6465                }
6466                let inner_offset;
6467                let mut inner_depth = depth.clone();
6468                if inlined {
6469                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6470                    inner_offset = next_offset;
6471                } else {
6472                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6473                    inner_depth.increment()?;
6474                }
6475                let val_ref = self
6476                    .unique_id
6477                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
6478                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
6479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6480                {
6481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6482                }
6483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6485                }
6486            }
6487
6488            next_offset += envelope_size;
6489            _next_ordinal_to_read += 1;
6490            if next_offset >= end_offset {
6491                return Ok(());
6492            }
6493
6494            // Decode unknown envelopes for gaps in ordinals.
6495            while _next_ordinal_to_read < 5 {
6496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6497                _next_ordinal_to_read += 1;
6498                next_offset += envelope_size;
6499            }
6500
6501            let next_out_of_line = decoder.next_out_of_line();
6502            let handles_before = decoder.remaining_handles();
6503            if let Some((inlined, num_bytes, num_handles)) =
6504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6505            {
6506                let member_inline_size =
6507                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6508                if inlined != (member_inline_size <= 4) {
6509                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6510                }
6511                let inner_offset;
6512                let mut inner_depth = depth.clone();
6513                if inlined {
6514                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6515                    inner_offset = next_offset;
6516                } else {
6517                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6518                    inner_depth.increment()?;
6519                }
6520                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
6521                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6522                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6523                {
6524                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6525                }
6526                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6527                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6528                }
6529            }
6530
6531            next_offset += envelope_size;
6532
6533            // Decode the remaining unknown envelopes.
6534            while next_offset < end_offset {
6535                _next_ordinal_to_read += 1;
6536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6537                next_offset += envelope_size;
6538            }
6539
6540            Ok(())
6541        }
6542    }
6543
6544    impl DaiProperties {
6545        #[inline(always)]
6546        fn max_ordinal_present(&self) -> u64 {
6547            if let Some(_) = self.clock_domain {
6548                return 5;
6549            }
6550            if let Some(_) = self.unique_id {
6551                return 4;
6552            }
6553            if let Some(_) = self.product_name {
6554                return 3;
6555            }
6556            if let Some(_) = self.manufacturer {
6557                return 2;
6558            }
6559            if let Some(_) = self.is_input {
6560                return 1;
6561            }
6562            0
6563        }
6564    }
6565
6566    impl fidl::encoding::ValueTypeMarker for DaiProperties {
6567        type Borrowed<'a> = &'a Self;
6568        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6569            value
6570        }
6571    }
6572
6573    unsafe impl fidl::encoding::TypeMarker for DaiProperties {
6574        type Owned = Self;
6575
6576        #[inline(always)]
6577        fn inline_align(_context: fidl::encoding::Context) -> usize {
6578            8
6579        }
6580
6581        #[inline(always)]
6582        fn inline_size(_context: fidl::encoding::Context) -> usize {
6583            16
6584        }
6585    }
6586
6587    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiProperties, D>
6588        for &DaiProperties
6589    {
6590        unsafe fn encode(
6591            self,
6592            encoder: &mut fidl::encoding::Encoder<'_, D>,
6593            offset: usize,
6594            mut depth: fidl::encoding::Depth,
6595        ) -> fidl::Result<()> {
6596            encoder.debug_check_bounds::<DaiProperties>(offset);
6597            // Vector header
6598            let max_ordinal: u64 = self.max_ordinal_present();
6599            encoder.write_num(max_ordinal, offset);
6600            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6601            // Calling encoder.out_of_line_offset(0) is not allowed.
6602            if max_ordinal == 0 {
6603                return Ok(());
6604            }
6605            depth.increment()?;
6606            let envelope_size = 8;
6607            let bytes_len = max_ordinal as usize * envelope_size;
6608            #[allow(unused_variables)]
6609            let offset = encoder.out_of_line_offset(bytes_len);
6610            let mut _prev_end_offset: usize = 0;
6611            if 1 > max_ordinal {
6612                return Ok(());
6613            }
6614
6615            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6616            // are envelope_size bytes.
6617            let cur_offset: usize = (1 - 1) * envelope_size;
6618
6619            // Zero reserved fields.
6620            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6621
6622            // Safety:
6623            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6624            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6625            //   envelope_size bytes, there is always sufficient room.
6626            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6627                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6628                encoder,
6629                offset + cur_offset,
6630                depth,
6631            )?;
6632
6633            _prev_end_offset = cur_offset + envelope_size;
6634            if 2 > max_ordinal {
6635                return Ok(());
6636            }
6637
6638            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6639            // are envelope_size bytes.
6640            let cur_offset: usize = (2 - 1) * envelope_size;
6641
6642            // Zero reserved fields.
6643            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6644
6645            // Safety:
6646            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6647            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6648            //   envelope_size bytes, there is always sufficient room.
6649            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6650                self.manufacturer.as_ref().map(
6651                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6652                ),
6653                encoder,
6654                offset + cur_offset,
6655                depth,
6656            )?;
6657
6658            _prev_end_offset = cur_offset + envelope_size;
6659            if 3 > max_ordinal {
6660                return Ok(());
6661            }
6662
6663            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6664            // are envelope_size bytes.
6665            let cur_offset: usize = (3 - 1) * envelope_size;
6666
6667            // Zero reserved fields.
6668            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6669
6670            // Safety:
6671            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6672            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6673            //   envelope_size bytes, there is always sufficient room.
6674            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
6675                self.product_name.as_ref().map(
6676                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
6677                ),
6678                encoder,
6679                offset + cur_offset,
6680                depth,
6681            )?;
6682
6683            _prev_end_offset = cur_offset + envelope_size;
6684            if 4 > max_ordinal {
6685                return Ok(());
6686            }
6687
6688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6689            // are envelope_size bytes.
6690            let cur_offset: usize = (4 - 1) * envelope_size;
6691
6692            // Zero reserved fields.
6693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6694
6695            // Safety:
6696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6698            //   envelope_size bytes, there is always sufficient room.
6699            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
6700                self.unique_id.as_ref().map(
6701                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
6702                ),
6703                encoder,
6704                offset + cur_offset,
6705                depth,
6706            )?;
6707
6708            _prev_end_offset = cur_offset + envelope_size;
6709            if 5 > max_ordinal {
6710                return Ok(());
6711            }
6712
6713            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6714            // are envelope_size bytes.
6715            let cur_offset: usize = (5 - 1) * envelope_size;
6716
6717            // Zero reserved fields.
6718            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6719
6720            // Safety:
6721            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6722            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6723            //   envelope_size bytes, there is always sufficient room.
6724            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6725                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6726                encoder,
6727                offset + cur_offset,
6728                depth,
6729            )?;
6730
6731            _prev_end_offset = cur_offset + envelope_size;
6732
6733            Ok(())
6734        }
6735    }
6736
6737    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiProperties {
6738        #[inline(always)]
6739        fn new_empty() -> Self {
6740            Self::default()
6741        }
6742
6743        unsafe fn decode(
6744            &mut self,
6745            decoder: &mut fidl::encoding::Decoder<'_, D>,
6746            offset: usize,
6747            mut depth: fidl::encoding::Depth,
6748        ) -> fidl::Result<()> {
6749            decoder.debug_check_bounds::<Self>(offset);
6750            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6751                None => return Err(fidl::Error::NotNullable),
6752                Some(len) => len,
6753            };
6754            // Calling decoder.out_of_line_offset(0) is not allowed.
6755            if len == 0 {
6756                return Ok(());
6757            };
6758            depth.increment()?;
6759            let envelope_size = 8;
6760            let bytes_len = len * envelope_size;
6761            let offset = decoder.out_of_line_offset(bytes_len)?;
6762            // Decode the envelope for each type.
6763            let mut _next_ordinal_to_read = 0;
6764            let mut next_offset = offset;
6765            let end_offset = offset + bytes_len;
6766            _next_ordinal_to_read += 1;
6767            if next_offset >= end_offset {
6768                return Ok(());
6769            }
6770
6771            // Decode unknown envelopes for gaps in ordinals.
6772            while _next_ordinal_to_read < 1 {
6773                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6774                _next_ordinal_to_read += 1;
6775                next_offset += envelope_size;
6776            }
6777
6778            let next_out_of_line = decoder.next_out_of_line();
6779            let handles_before = decoder.remaining_handles();
6780            if let Some((inlined, num_bytes, num_handles)) =
6781                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6782            {
6783                let member_inline_size =
6784                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6785                if inlined != (member_inline_size <= 4) {
6786                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6787                }
6788                let inner_offset;
6789                let mut inner_depth = depth.clone();
6790                if inlined {
6791                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6792                    inner_offset = next_offset;
6793                } else {
6794                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6795                    inner_depth.increment()?;
6796                }
6797                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
6798                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6799                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6800                {
6801                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6802                }
6803                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6804                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6805                }
6806            }
6807
6808            next_offset += envelope_size;
6809            _next_ordinal_to_read += 1;
6810            if next_offset >= end_offset {
6811                return Ok(());
6812            }
6813
6814            // Decode unknown envelopes for gaps in ordinals.
6815            while _next_ordinal_to_read < 2 {
6816                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6817                _next_ordinal_to_read += 1;
6818                next_offset += envelope_size;
6819            }
6820
6821            let next_out_of_line = decoder.next_out_of_line();
6822            let handles_before = decoder.remaining_handles();
6823            if let Some((inlined, num_bytes, num_handles)) =
6824                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6825            {
6826                let member_inline_size =
6827                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6828                        decoder.context,
6829                    );
6830                if inlined != (member_inline_size <= 4) {
6831                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6832                }
6833                let inner_offset;
6834                let mut inner_depth = depth.clone();
6835                if inlined {
6836                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6837                    inner_offset = next_offset;
6838                } else {
6839                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6840                    inner_depth.increment()?;
6841                }
6842                let val_ref = self
6843                    .manufacturer
6844                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
6845                fidl::decode!(
6846                    fidl::encoding::BoundedString<256>,
6847                    D,
6848                    val_ref,
6849                    decoder,
6850                    inner_offset,
6851                    inner_depth
6852                )?;
6853                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6854                {
6855                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6856                }
6857                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6858                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6859                }
6860            }
6861
6862            next_offset += envelope_size;
6863            _next_ordinal_to_read += 1;
6864            if next_offset >= end_offset {
6865                return Ok(());
6866            }
6867
6868            // Decode unknown envelopes for gaps in ordinals.
6869            while _next_ordinal_to_read < 3 {
6870                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6871                _next_ordinal_to_read += 1;
6872                next_offset += envelope_size;
6873            }
6874
6875            let next_out_of_line = decoder.next_out_of_line();
6876            let handles_before = decoder.remaining_handles();
6877            if let Some((inlined, num_bytes, num_handles)) =
6878                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6879            {
6880                let member_inline_size =
6881                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6882                        decoder.context,
6883                    );
6884                if inlined != (member_inline_size <= 4) {
6885                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6886                }
6887                let inner_offset;
6888                let mut inner_depth = depth.clone();
6889                if inlined {
6890                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6891                    inner_offset = next_offset;
6892                } else {
6893                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6894                    inner_depth.increment()?;
6895                }
6896                let val_ref = self
6897                    .product_name
6898                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
6899                fidl::decode!(
6900                    fidl::encoding::BoundedString<256>,
6901                    D,
6902                    val_ref,
6903                    decoder,
6904                    inner_offset,
6905                    inner_depth
6906                )?;
6907                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6908                {
6909                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6910                }
6911                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6912                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6913                }
6914            }
6915
6916            next_offset += envelope_size;
6917            _next_ordinal_to_read += 1;
6918            if next_offset >= end_offset {
6919                return Ok(());
6920            }
6921
6922            // Decode unknown envelopes for gaps in ordinals.
6923            while _next_ordinal_to_read < 4 {
6924                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6925                _next_ordinal_to_read += 1;
6926                next_offset += envelope_size;
6927            }
6928
6929            let next_out_of_line = decoder.next_out_of_line();
6930            let handles_before = decoder.remaining_handles();
6931            if let Some((inlined, num_bytes, num_handles)) =
6932                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6933            {
6934                let member_inline_size =
6935                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
6936                        decoder.context,
6937                    );
6938                if inlined != (member_inline_size <= 4) {
6939                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6940                }
6941                let inner_offset;
6942                let mut inner_depth = depth.clone();
6943                if inlined {
6944                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6945                    inner_offset = next_offset;
6946                } else {
6947                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6948                    inner_depth.increment()?;
6949                }
6950                let val_ref = self
6951                    .unique_id
6952                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
6953                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
6954                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6955                {
6956                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6957                }
6958                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6959                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6960                }
6961            }
6962
6963            next_offset += envelope_size;
6964            _next_ordinal_to_read += 1;
6965            if next_offset >= end_offset {
6966                return Ok(());
6967            }
6968
6969            // Decode unknown envelopes for gaps in ordinals.
6970            while _next_ordinal_to_read < 5 {
6971                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6972                _next_ordinal_to_read += 1;
6973                next_offset += envelope_size;
6974            }
6975
6976            let next_out_of_line = decoder.next_out_of_line();
6977            let handles_before = decoder.remaining_handles();
6978            if let Some((inlined, num_bytes, num_handles)) =
6979                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6980            {
6981                let member_inline_size =
6982                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6983                if inlined != (member_inline_size <= 4) {
6984                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6985                }
6986                let inner_offset;
6987                let mut inner_depth = depth.clone();
6988                if inlined {
6989                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6990                    inner_offset = next_offset;
6991                } else {
6992                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6993                    inner_depth.increment()?;
6994                }
6995                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
6996                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6997                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6998                {
6999                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7000                }
7001                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7002                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7003                }
7004            }
7005
7006            next_offset += envelope_size;
7007
7008            // Decode the remaining unknown envelopes.
7009            while next_offset < end_offset {
7010                _next_ordinal_to_read += 1;
7011                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7012                next_offset += envelope_size;
7013            }
7014
7015            Ok(())
7016        }
7017    }
7018
7019    impl DelayInfo {
7020        #[inline(always)]
7021        fn max_ordinal_present(&self) -> u64 {
7022            if let Some(_) = self.external_delay {
7023                return 2;
7024            }
7025            if let Some(_) = self.internal_delay {
7026                return 1;
7027            }
7028            0
7029        }
7030    }
7031
7032    impl fidl::encoding::ValueTypeMarker for DelayInfo {
7033        type Borrowed<'a> = &'a Self;
7034        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7035            value
7036        }
7037    }
7038
7039    unsafe impl fidl::encoding::TypeMarker for DelayInfo {
7040        type Owned = Self;
7041
7042        #[inline(always)]
7043        fn inline_align(_context: fidl::encoding::Context) -> usize {
7044            8
7045        }
7046
7047        #[inline(always)]
7048        fn inline_size(_context: fidl::encoding::Context) -> usize {
7049            16
7050        }
7051    }
7052
7053    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DelayInfo, D>
7054        for &DelayInfo
7055    {
7056        unsafe fn encode(
7057            self,
7058            encoder: &mut fidl::encoding::Encoder<'_, D>,
7059            offset: usize,
7060            mut depth: fidl::encoding::Depth,
7061        ) -> fidl::Result<()> {
7062            encoder.debug_check_bounds::<DelayInfo>(offset);
7063            // Vector header
7064            let max_ordinal: u64 = self.max_ordinal_present();
7065            encoder.write_num(max_ordinal, offset);
7066            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7067            // Calling encoder.out_of_line_offset(0) is not allowed.
7068            if max_ordinal == 0 {
7069                return Ok(());
7070            }
7071            depth.increment()?;
7072            let envelope_size = 8;
7073            let bytes_len = max_ordinal as usize * envelope_size;
7074            #[allow(unused_variables)]
7075            let offset = encoder.out_of_line_offset(bytes_len);
7076            let mut _prev_end_offset: usize = 0;
7077            if 1 > max_ordinal {
7078                return Ok(());
7079            }
7080
7081            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7082            // are envelope_size bytes.
7083            let cur_offset: usize = (1 - 1) * envelope_size;
7084
7085            // Zero reserved fields.
7086            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7087
7088            // Safety:
7089            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7090            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7091            //   envelope_size bytes, there is always sufficient room.
7092            fidl::encoding::encode_in_envelope_optional::<i64, D>(
7093                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7094                encoder,
7095                offset + cur_offset,
7096                depth,
7097            )?;
7098
7099            _prev_end_offset = cur_offset + envelope_size;
7100            if 2 > max_ordinal {
7101                return Ok(());
7102            }
7103
7104            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7105            // are envelope_size bytes.
7106            let cur_offset: usize = (2 - 1) * envelope_size;
7107
7108            // Zero reserved fields.
7109            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7110
7111            // Safety:
7112            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7113            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7114            //   envelope_size bytes, there is always sufficient room.
7115            fidl::encoding::encode_in_envelope_optional::<i64, D>(
7116                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
7117                encoder,
7118                offset + cur_offset,
7119                depth,
7120            )?;
7121
7122            _prev_end_offset = cur_offset + envelope_size;
7123
7124            Ok(())
7125        }
7126    }
7127
7128    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DelayInfo {
7129        #[inline(always)]
7130        fn new_empty() -> Self {
7131            Self::default()
7132        }
7133
7134        unsafe fn decode(
7135            &mut self,
7136            decoder: &mut fidl::encoding::Decoder<'_, D>,
7137            offset: usize,
7138            mut depth: fidl::encoding::Depth,
7139        ) -> fidl::Result<()> {
7140            decoder.debug_check_bounds::<Self>(offset);
7141            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7142                None => return Err(fidl::Error::NotNullable),
7143                Some(len) => len,
7144            };
7145            // Calling decoder.out_of_line_offset(0) is not allowed.
7146            if len == 0 {
7147                return Ok(());
7148            };
7149            depth.increment()?;
7150            let envelope_size = 8;
7151            let bytes_len = len * envelope_size;
7152            let offset = decoder.out_of_line_offset(bytes_len)?;
7153            // Decode the envelope for each type.
7154            let mut _next_ordinal_to_read = 0;
7155            let mut next_offset = offset;
7156            let end_offset = offset + bytes_len;
7157            _next_ordinal_to_read += 1;
7158            if next_offset >= end_offset {
7159                return Ok(());
7160            }
7161
7162            // Decode unknown envelopes for gaps in ordinals.
7163            while _next_ordinal_to_read < 1 {
7164                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7165                _next_ordinal_to_read += 1;
7166                next_offset += envelope_size;
7167            }
7168
7169            let next_out_of_line = decoder.next_out_of_line();
7170            let handles_before = decoder.remaining_handles();
7171            if let Some((inlined, num_bytes, num_handles)) =
7172                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7173            {
7174                let member_inline_size =
7175                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7176                if inlined != (member_inline_size <= 4) {
7177                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7178                }
7179                let inner_offset;
7180                let mut inner_depth = depth.clone();
7181                if inlined {
7182                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7183                    inner_offset = next_offset;
7184                } else {
7185                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7186                    inner_depth.increment()?;
7187                }
7188                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
7189                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7190                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7191                {
7192                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7193                }
7194                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7195                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7196                }
7197            }
7198
7199            next_offset += envelope_size;
7200            _next_ordinal_to_read += 1;
7201            if next_offset >= end_offset {
7202                return Ok(());
7203            }
7204
7205            // Decode unknown envelopes for gaps in ordinals.
7206            while _next_ordinal_to_read < 2 {
7207                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7208                _next_ordinal_to_read += 1;
7209                next_offset += envelope_size;
7210            }
7211
7212            let next_out_of_line = decoder.next_out_of_line();
7213            let handles_before = decoder.remaining_handles();
7214            if let Some((inlined, num_bytes, num_handles)) =
7215                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7216            {
7217                let member_inline_size =
7218                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7219                if inlined != (member_inline_size <= 4) {
7220                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7221                }
7222                let inner_offset;
7223                let mut inner_depth = depth.clone();
7224                if inlined {
7225                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7226                    inner_offset = next_offset;
7227                } else {
7228                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7229                    inner_depth.increment()?;
7230                }
7231                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
7232                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
7233                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7234                {
7235                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7236                }
7237                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7238                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7239                }
7240            }
7241
7242            next_offset += envelope_size;
7243
7244            // Decode the remaining unknown envelopes.
7245            while next_offset < end_offset {
7246                _next_ordinal_to_read += 1;
7247                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7248                next_offset += envelope_size;
7249            }
7250
7251            Ok(())
7252        }
7253    }
7254
7255    impl Format {
7256        #[inline(always)]
7257        fn max_ordinal_present(&self) -> u64 {
7258            if let Some(_) = self.pcm_format {
7259                return 1;
7260            }
7261            0
7262        }
7263    }
7264
7265    impl fidl::encoding::ValueTypeMarker for Format {
7266        type Borrowed<'a> = &'a Self;
7267        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7268            value
7269        }
7270    }
7271
7272    unsafe impl fidl::encoding::TypeMarker for Format {
7273        type Owned = Self;
7274
7275        #[inline(always)]
7276        fn inline_align(_context: fidl::encoding::Context) -> usize {
7277            8
7278        }
7279
7280        #[inline(always)]
7281        fn inline_size(_context: fidl::encoding::Context) -> usize {
7282            16
7283        }
7284    }
7285
7286    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Format, D> for &Format {
7287        unsafe fn encode(
7288            self,
7289            encoder: &mut fidl::encoding::Encoder<'_, D>,
7290            offset: usize,
7291            mut depth: fidl::encoding::Depth,
7292        ) -> fidl::Result<()> {
7293            encoder.debug_check_bounds::<Format>(offset);
7294            // Vector header
7295            let max_ordinal: u64 = self.max_ordinal_present();
7296            encoder.write_num(max_ordinal, offset);
7297            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7298            // Calling encoder.out_of_line_offset(0) is not allowed.
7299            if max_ordinal == 0 {
7300                return Ok(());
7301            }
7302            depth.increment()?;
7303            let envelope_size = 8;
7304            let bytes_len = max_ordinal as usize * envelope_size;
7305            #[allow(unused_variables)]
7306            let offset = encoder.out_of_line_offset(bytes_len);
7307            let mut _prev_end_offset: usize = 0;
7308            if 1 > max_ordinal {
7309                return Ok(());
7310            }
7311
7312            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7313            // are envelope_size bytes.
7314            let cur_offset: usize = (1 - 1) * envelope_size;
7315
7316            // Zero reserved fields.
7317            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7318
7319            // Safety:
7320            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7321            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7322            //   envelope_size bytes, there is always sufficient room.
7323            fidl::encoding::encode_in_envelope_optional::<PcmFormat, D>(
7324                self.pcm_format
7325                    .as_ref()
7326                    .map(<PcmFormat as fidl::encoding::ValueTypeMarker>::borrow),
7327                encoder,
7328                offset + cur_offset,
7329                depth,
7330            )?;
7331
7332            _prev_end_offset = cur_offset + envelope_size;
7333
7334            Ok(())
7335        }
7336    }
7337
7338    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Format {
7339        #[inline(always)]
7340        fn new_empty() -> Self {
7341            Self::default()
7342        }
7343
7344        unsafe fn decode(
7345            &mut self,
7346            decoder: &mut fidl::encoding::Decoder<'_, D>,
7347            offset: usize,
7348            mut depth: fidl::encoding::Depth,
7349        ) -> fidl::Result<()> {
7350            decoder.debug_check_bounds::<Self>(offset);
7351            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7352                None => return Err(fidl::Error::NotNullable),
7353                Some(len) => len,
7354            };
7355            // Calling decoder.out_of_line_offset(0) is not allowed.
7356            if len == 0 {
7357                return Ok(());
7358            };
7359            depth.increment()?;
7360            let envelope_size = 8;
7361            let bytes_len = len * envelope_size;
7362            let offset = decoder.out_of_line_offset(bytes_len)?;
7363            // Decode the envelope for each type.
7364            let mut _next_ordinal_to_read = 0;
7365            let mut next_offset = offset;
7366            let end_offset = offset + bytes_len;
7367            _next_ordinal_to_read += 1;
7368            if next_offset >= end_offset {
7369                return Ok(());
7370            }
7371
7372            // Decode unknown envelopes for gaps in ordinals.
7373            while _next_ordinal_to_read < 1 {
7374                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7375                _next_ordinal_to_read += 1;
7376                next_offset += envelope_size;
7377            }
7378
7379            let next_out_of_line = decoder.next_out_of_line();
7380            let handles_before = decoder.remaining_handles();
7381            if let Some((inlined, num_bytes, num_handles)) =
7382                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7383            {
7384                let member_inline_size =
7385                    <PcmFormat as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7386                if inlined != (member_inline_size <= 4) {
7387                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7388                }
7389                let inner_offset;
7390                let mut inner_depth = depth.clone();
7391                if inlined {
7392                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7393                    inner_offset = next_offset;
7394                } else {
7395                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7396                    inner_depth.increment()?;
7397                }
7398                let val_ref = self.pcm_format.get_or_insert_with(|| fidl::new_empty!(PcmFormat, D));
7399                fidl::decode!(PcmFormat, D, val_ref, decoder, inner_offset, inner_depth)?;
7400                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7401                {
7402                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7403                }
7404                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7405                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7406                }
7407            }
7408
7409            next_offset += envelope_size;
7410
7411            // Decode the remaining unknown envelopes.
7412            while next_offset < end_offset {
7413                _next_ordinal_to_read += 1;
7414                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7415                next_offset += envelope_size;
7416            }
7417
7418            Ok(())
7419        }
7420    }
7421
7422    impl GainState {
7423        #[inline(always)]
7424        fn max_ordinal_present(&self) -> u64 {
7425            if let Some(_) = self.gain_db {
7426                return 3;
7427            }
7428            if let Some(_) = self.agc_enabled {
7429                return 2;
7430            }
7431            if let Some(_) = self.muted {
7432                return 1;
7433            }
7434            0
7435        }
7436    }
7437
7438    impl fidl::encoding::ValueTypeMarker for GainState {
7439        type Borrowed<'a> = &'a Self;
7440        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7441            value
7442        }
7443    }
7444
7445    unsafe impl fidl::encoding::TypeMarker for GainState {
7446        type Owned = Self;
7447
7448        #[inline(always)]
7449        fn inline_align(_context: fidl::encoding::Context) -> usize {
7450            8
7451        }
7452
7453        #[inline(always)]
7454        fn inline_size(_context: fidl::encoding::Context) -> usize {
7455            16
7456        }
7457    }
7458
7459    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainState, D>
7460        for &GainState
7461    {
7462        unsafe fn encode(
7463            self,
7464            encoder: &mut fidl::encoding::Encoder<'_, D>,
7465            offset: usize,
7466            mut depth: fidl::encoding::Depth,
7467        ) -> fidl::Result<()> {
7468            encoder.debug_check_bounds::<GainState>(offset);
7469            // Vector header
7470            let max_ordinal: u64 = self.max_ordinal_present();
7471            encoder.write_num(max_ordinal, offset);
7472            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7473            // Calling encoder.out_of_line_offset(0) is not allowed.
7474            if max_ordinal == 0 {
7475                return Ok(());
7476            }
7477            depth.increment()?;
7478            let envelope_size = 8;
7479            let bytes_len = max_ordinal as usize * envelope_size;
7480            #[allow(unused_variables)]
7481            let offset = encoder.out_of_line_offset(bytes_len);
7482            let mut _prev_end_offset: usize = 0;
7483            if 1 > max_ordinal {
7484                return Ok(());
7485            }
7486
7487            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7488            // are envelope_size bytes.
7489            let cur_offset: usize = (1 - 1) * envelope_size;
7490
7491            // Zero reserved fields.
7492            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7493
7494            // Safety:
7495            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7496            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7497            //   envelope_size bytes, there is always sufficient room.
7498            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7499                self.muted.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7500                encoder,
7501                offset + cur_offset,
7502                depth,
7503            )?;
7504
7505            _prev_end_offset = cur_offset + envelope_size;
7506            if 2 > max_ordinal {
7507                return Ok(());
7508            }
7509
7510            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7511            // are envelope_size bytes.
7512            let cur_offset: usize = (2 - 1) * envelope_size;
7513
7514            // Zero reserved fields.
7515            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7516
7517            // Safety:
7518            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7519            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7520            //   envelope_size bytes, there is always sufficient room.
7521            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7522                self.agc_enabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7523                encoder,
7524                offset + cur_offset,
7525                depth,
7526            )?;
7527
7528            _prev_end_offset = cur_offset + envelope_size;
7529            if 3 > max_ordinal {
7530                return Ok(());
7531            }
7532
7533            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7534            // are envelope_size bytes.
7535            let cur_offset: usize = (3 - 1) * envelope_size;
7536
7537            // Zero reserved fields.
7538            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7539
7540            // Safety:
7541            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7542            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7543            //   envelope_size bytes, there is always sufficient room.
7544            fidl::encoding::encode_in_envelope_optional::<f32, D>(
7545                self.gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
7546                encoder,
7547                offset + cur_offset,
7548                depth,
7549            )?;
7550
7551            _prev_end_offset = cur_offset + envelope_size;
7552
7553            Ok(())
7554        }
7555    }
7556
7557    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainState {
7558        #[inline(always)]
7559        fn new_empty() -> Self {
7560            Self::default()
7561        }
7562
7563        unsafe fn decode(
7564            &mut self,
7565            decoder: &mut fidl::encoding::Decoder<'_, D>,
7566            offset: usize,
7567            mut depth: fidl::encoding::Depth,
7568        ) -> fidl::Result<()> {
7569            decoder.debug_check_bounds::<Self>(offset);
7570            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7571                None => return Err(fidl::Error::NotNullable),
7572                Some(len) => len,
7573            };
7574            // Calling decoder.out_of_line_offset(0) is not allowed.
7575            if len == 0 {
7576                return Ok(());
7577            };
7578            depth.increment()?;
7579            let envelope_size = 8;
7580            let bytes_len = len * envelope_size;
7581            let offset = decoder.out_of_line_offset(bytes_len)?;
7582            // Decode the envelope for each type.
7583            let mut _next_ordinal_to_read = 0;
7584            let mut next_offset = offset;
7585            let end_offset = offset + bytes_len;
7586            _next_ordinal_to_read += 1;
7587            if next_offset >= end_offset {
7588                return Ok(());
7589            }
7590
7591            // Decode unknown envelopes for gaps in ordinals.
7592            while _next_ordinal_to_read < 1 {
7593                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7594                _next_ordinal_to_read += 1;
7595                next_offset += envelope_size;
7596            }
7597
7598            let next_out_of_line = decoder.next_out_of_line();
7599            let handles_before = decoder.remaining_handles();
7600            if let Some((inlined, num_bytes, num_handles)) =
7601                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7602            {
7603                let member_inline_size =
7604                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7605                if inlined != (member_inline_size <= 4) {
7606                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7607                }
7608                let inner_offset;
7609                let mut inner_depth = depth.clone();
7610                if inlined {
7611                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7612                    inner_offset = next_offset;
7613                } else {
7614                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7615                    inner_depth.increment()?;
7616                }
7617                let val_ref = self.muted.get_or_insert_with(|| fidl::new_empty!(bool, D));
7618                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7619                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7620                {
7621                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7622                }
7623                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7624                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7625                }
7626            }
7627
7628            next_offset += envelope_size;
7629            _next_ordinal_to_read += 1;
7630            if next_offset >= end_offset {
7631                return Ok(());
7632            }
7633
7634            // Decode unknown envelopes for gaps in ordinals.
7635            while _next_ordinal_to_read < 2 {
7636                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7637                _next_ordinal_to_read += 1;
7638                next_offset += envelope_size;
7639            }
7640
7641            let next_out_of_line = decoder.next_out_of_line();
7642            let handles_before = decoder.remaining_handles();
7643            if let Some((inlined, num_bytes, num_handles)) =
7644                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7645            {
7646                let member_inline_size =
7647                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7648                if inlined != (member_inline_size <= 4) {
7649                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7650                }
7651                let inner_offset;
7652                let mut inner_depth = depth.clone();
7653                if inlined {
7654                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7655                    inner_offset = next_offset;
7656                } else {
7657                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7658                    inner_depth.increment()?;
7659                }
7660                let val_ref = self.agc_enabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
7661                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7662                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7663                {
7664                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7665                }
7666                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7667                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7668                }
7669            }
7670
7671            next_offset += envelope_size;
7672            _next_ordinal_to_read += 1;
7673            if next_offset >= end_offset {
7674                return Ok(());
7675            }
7676
7677            // Decode unknown envelopes for gaps in ordinals.
7678            while _next_ordinal_to_read < 3 {
7679                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7680                _next_ordinal_to_read += 1;
7681                next_offset += envelope_size;
7682            }
7683
7684            let next_out_of_line = decoder.next_out_of_line();
7685            let handles_before = decoder.remaining_handles();
7686            if let Some((inlined, num_bytes, num_handles)) =
7687                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7688            {
7689                let member_inline_size =
7690                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7691                if inlined != (member_inline_size <= 4) {
7692                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7693                }
7694                let inner_offset;
7695                let mut inner_depth = depth.clone();
7696                if inlined {
7697                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7698                    inner_offset = next_offset;
7699                } else {
7700                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7701                    inner_depth.increment()?;
7702                }
7703                let val_ref = self.gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
7704                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
7705                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7706                {
7707                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7708                }
7709                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7710                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7711                }
7712            }
7713
7714            next_offset += envelope_size;
7715
7716            // Decode the remaining unknown envelopes.
7717            while next_offset < end_offset {
7718                _next_ordinal_to_read += 1;
7719                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7720                next_offset += envelope_size;
7721            }
7722
7723            Ok(())
7724        }
7725    }
7726
7727    impl HealthState {
7728        #[inline(always)]
7729        fn max_ordinal_present(&self) -> u64 {
7730            if let Some(_) = self.healthy {
7731                return 1;
7732            }
7733            0
7734        }
7735    }
7736
7737    impl fidl::encoding::ValueTypeMarker for HealthState {
7738        type Borrowed<'a> = &'a Self;
7739        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7740            value
7741        }
7742    }
7743
7744    unsafe impl fidl::encoding::TypeMarker for HealthState {
7745        type Owned = Self;
7746
7747        #[inline(always)]
7748        fn inline_align(_context: fidl::encoding::Context) -> usize {
7749            8
7750        }
7751
7752        #[inline(always)]
7753        fn inline_size(_context: fidl::encoding::Context) -> usize {
7754            16
7755        }
7756    }
7757
7758    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthState, D>
7759        for &HealthState
7760    {
7761        unsafe fn encode(
7762            self,
7763            encoder: &mut fidl::encoding::Encoder<'_, D>,
7764            offset: usize,
7765            mut depth: fidl::encoding::Depth,
7766        ) -> fidl::Result<()> {
7767            encoder.debug_check_bounds::<HealthState>(offset);
7768            // Vector header
7769            let max_ordinal: u64 = self.max_ordinal_present();
7770            encoder.write_num(max_ordinal, offset);
7771            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7772            // Calling encoder.out_of_line_offset(0) is not allowed.
7773            if max_ordinal == 0 {
7774                return Ok(());
7775            }
7776            depth.increment()?;
7777            let envelope_size = 8;
7778            let bytes_len = max_ordinal as usize * envelope_size;
7779            #[allow(unused_variables)]
7780            let offset = encoder.out_of_line_offset(bytes_len);
7781            let mut _prev_end_offset: usize = 0;
7782            if 1 > max_ordinal {
7783                return Ok(());
7784            }
7785
7786            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7787            // are envelope_size bytes.
7788            let cur_offset: usize = (1 - 1) * envelope_size;
7789
7790            // Zero reserved fields.
7791            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7792
7793            // Safety:
7794            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7795            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7796            //   envelope_size bytes, there is always sufficient room.
7797            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7798                self.healthy.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7799                encoder,
7800                offset + cur_offset,
7801                depth,
7802            )?;
7803
7804            _prev_end_offset = cur_offset + envelope_size;
7805
7806            Ok(())
7807        }
7808    }
7809
7810    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthState {
7811        #[inline(always)]
7812        fn new_empty() -> Self {
7813            Self::default()
7814        }
7815
7816        unsafe fn decode(
7817            &mut self,
7818            decoder: &mut fidl::encoding::Decoder<'_, D>,
7819            offset: usize,
7820            mut depth: fidl::encoding::Depth,
7821        ) -> fidl::Result<()> {
7822            decoder.debug_check_bounds::<Self>(offset);
7823            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7824                None => return Err(fidl::Error::NotNullable),
7825                Some(len) => len,
7826            };
7827            // Calling decoder.out_of_line_offset(0) is not allowed.
7828            if len == 0 {
7829                return Ok(());
7830            };
7831            depth.increment()?;
7832            let envelope_size = 8;
7833            let bytes_len = len * envelope_size;
7834            let offset = decoder.out_of_line_offset(bytes_len)?;
7835            // Decode the envelope for each type.
7836            let mut _next_ordinal_to_read = 0;
7837            let mut next_offset = offset;
7838            let end_offset = offset + bytes_len;
7839            _next_ordinal_to_read += 1;
7840            if next_offset >= end_offset {
7841                return Ok(());
7842            }
7843
7844            // Decode unknown envelopes for gaps in ordinals.
7845            while _next_ordinal_to_read < 1 {
7846                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7847                _next_ordinal_to_read += 1;
7848                next_offset += envelope_size;
7849            }
7850
7851            let next_out_of_line = decoder.next_out_of_line();
7852            let handles_before = decoder.remaining_handles();
7853            if let Some((inlined, num_bytes, num_handles)) =
7854                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7855            {
7856                let member_inline_size =
7857                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7858                if inlined != (member_inline_size <= 4) {
7859                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7860                }
7861                let inner_offset;
7862                let mut inner_depth = depth.clone();
7863                if inlined {
7864                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7865                    inner_offset = next_offset;
7866                } else {
7867                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7868                    inner_depth.increment()?;
7869                }
7870                let val_ref = self.healthy.get_or_insert_with(|| fidl::new_empty!(bool, D));
7871                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7872                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7873                {
7874                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7875                }
7876                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7877                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7878                }
7879            }
7880
7881            next_offset += envelope_size;
7882
7883            // Decode the remaining unknown envelopes.
7884            while next_offset < end_offset {
7885                _next_ordinal_to_read += 1;
7886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7887                next_offset += envelope_size;
7888            }
7889
7890            Ok(())
7891        }
7892    }
7893
7894    impl PcmSupportedFormats {
7895        #[inline(always)]
7896        fn max_ordinal_present(&self) -> u64 {
7897            if let Some(_) = self.frame_rates {
7898                return 5;
7899            }
7900            if let Some(_) = self.valid_bits_per_sample {
7901                return 4;
7902            }
7903            if let Some(_) = self.bytes_per_sample {
7904                return 3;
7905            }
7906            if let Some(_) = self.sample_formats {
7907                return 2;
7908            }
7909            if let Some(_) = self.channel_sets {
7910                return 1;
7911            }
7912            0
7913        }
7914    }
7915
7916    impl fidl::encoding::ValueTypeMarker for PcmSupportedFormats {
7917        type Borrowed<'a> = &'a Self;
7918        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7919            value
7920        }
7921    }
7922
7923    unsafe impl fidl::encoding::TypeMarker for PcmSupportedFormats {
7924        type Owned = Self;
7925
7926        #[inline(always)]
7927        fn inline_align(_context: fidl::encoding::Context) -> usize {
7928            8
7929        }
7930
7931        #[inline(always)]
7932        fn inline_size(_context: fidl::encoding::Context) -> usize {
7933            16
7934        }
7935    }
7936
7937    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PcmSupportedFormats, D>
7938        for &PcmSupportedFormats
7939    {
7940        unsafe fn encode(
7941            self,
7942            encoder: &mut fidl::encoding::Encoder<'_, D>,
7943            offset: usize,
7944            mut depth: fidl::encoding::Depth,
7945        ) -> fidl::Result<()> {
7946            encoder.debug_check_bounds::<PcmSupportedFormats>(offset);
7947            // Vector header
7948            let max_ordinal: u64 = self.max_ordinal_present();
7949            encoder.write_num(max_ordinal, offset);
7950            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7951            // Calling encoder.out_of_line_offset(0) is not allowed.
7952            if max_ordinal == 0 {
7953                return Ok(());
7954            }
7955            depth.increment()?;
7956            let envelope_size = 8;
7957            let bytes_len = max_ordinal as usize * envelope_size;
7958            #[allow(unused_variables)]
7959            let offset = encoder.out_of_line_offset(bytes_len);
7960            let mut _prev_end_offset: usize = 0;
7961            if 1 > max_ordinal {
7962                return Ok(());
7963            }
7964
7965            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7966            // are envelope_size bytes.
7967            let cur_offset: usize = (1 - 1) * envelope_size;
7968
7969            // Zero reserved fields.
7970            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7971
7972            // Safety:
7973            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7974            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7975            //   envelope_size bytes, there is always sufficient room.
7976            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ChannelSet, 64>, D>(
7977            self.channel_sets.as_ref().map(<fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::ValueTypeMarker>::borrow),
7978            encoder, offset + cur_offset, depth
7979        )?;
7980
7981            _prev_end_offset = cur_offset + envelope_size;
7982            if 2 > max_ordinal {
7983                return Ok(());
7984            }
7985
7986            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7987            // are envelope_size bytes.
7988            let cur_offset: usize = (2 - 1) * envelope_size;
7989
7990            // Zero reserved fields.
7991            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7992
7993            // Safety:
7994            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7995            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7996            //   envelope_size bytes, there is always sufficient room.
7997            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SampleFormat, 3>, D>(
7998            self.sample_formats.as_ref().map(<fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::ValueTypeMarker>::borrow),
7999            encoder, offset + cur_offset, depth
8000        )?;
8001
8002            _prev_end_offset = cur_offset + envelope_size;
8003            if 3 > max_ordinal {
8004                return Ok(());
8005            }
8006
8007            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8008            // are envelope_size bytes.
8009            let cur_offset: usize = (3 - 1) * envelope_size;
8010
8011            // Zero reserved fields.
8012            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8013
8014            // Safety:
8015            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8016            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8017            //   envelope_size bytes, there is always sufficient room.
8018            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
8019                self.bytes_per_sample.as_ref().map(
8020                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
8021                ),
8022                encoder,
8023                offset + cur_offset,
8024                depth,
8025            )?;
8026
8027            _prev_end_offset = cur_offset + envelope_size;
8028            if 4 > max_ordinal {
8029                return Ok(());
8030            }
8031
8032            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8033            // are envelope_size bytes.
8034            let cur_offset: usize = (4 - 1) * envelope_size;
8035
8036            // Zero reserved fields.
8037            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8038
8039            // Safety:
8040            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8041            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8042            //   envelope_size bytes, there is always sufficient room.
8043            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 8>, D>(
8044                self.valid_bits_per_sample.as_ref().map(
8045                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::ValueTypeMarker>::borrow,
8046                ),
8047                encoder,
8048                offset + cur_offset,
8049                depth,
8050            )?;
8051
8052            _prev_end_offset = cur_offset + envelope_size;
8053            if 5 > max_ordinal {
8054                return Ok(());
8055            }
8056
8057            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8058            // are envelope_size bytes.
8059            let cur_offset: usize = (5 - 1) * envelope_size;
8060
8061            // Zero reserved fields.
8062            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8063
8064            // Safety:
8065            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8066            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8067            //   envelope_size bytes, there is always sufficient room.
8068            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u32, 64>, D>(
8069                self.frame_rates.as_ref().map(
8070                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::ValueTypeMarker>::borrow,
8071                ),
8072                encoder,
8073                offset + cur_offset,
8074                depth,
8075            )?;
8076
8077            _prev_end_offset = cur_offset + envelope_size;
8078
8079            Ok(())
8080        }
8081    }
8082
8083    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PcmSupportedFormats {
8084        #[inline(always)]
8085        fn new_empty() -> Self {
8086            Self::default()
8087        }
8088
8089        unsafe fn decode(
8090            &mut self,
8091            decoder: &mut fidl::encoding::Decoder<'_, D>,
8092            offset: usize,
8093            mut depth: fidl::encoding::Depth,
8094        ) -> fidl::Result<()> {
8095            decoder.debug_check_bounds::<Self>(offset);
8096            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8097                None => return Err(fidl::Error::NotNullable),
8098                Some(len) => len,
8099            };
8100            // Calling decoder.out_of_line_offset(0) is not allowed.
8101            if len == 0 {
8102                return Ok(());
8103            };
8104            depth.increment()?;
8105            let envelope_size = 8;
8106            let bytes_len = len * envelope_size;
8107            let offset = decoder.out_of_line_offset(bytes_len)?;
8108            // Decode the envelope for each type.
8109            let mut _next_ordinal_to_read = 0;
8110            let mut next_offset = offset;
8111            let end_offset = offset + bytes_len;
8112            _next_ordinal_to_read += 1;
8113            if next_offset >= end_offset {
8114                return Ok(());
8115            }
8116
8117            // Decode unknown envelopes for gaps in ordinals.
8118            while _next_ordinal_to_read < 1 {
8119                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8120                _next_ordinal_to_read += 1;
8121                next_offset += envelope_size;
8122            }
8123
8124            let next_out_of_line = decoder.next_out_of_line();
8125            let handles_before = decoder.remaining_handles();
8126            if let Some((inlined, num_bytes, num_handles)) =
8127                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8128            {
8129                let member_inline_size = <fidl::encoding::Vector<ChannelSet, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8130                if inlined != (member_inline_size <= 4) {
8131                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8132                }
8133                let inner_offset;
8134                let mut inner_depth = depth.clone();
8135                if inlined {
8136                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8137                    inner_offset = next_offset;
8138                } else {
8139                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8140                    inner_depth.increment()?;
8141                }
8142                let val_ref = self.channel_sets.get_or_insert_with(
8143                    || fidl::new_empty!(fidl::encoding::Vector<ChannelSet, 64>, D),
8144                );
8145                fidl::decode!(fidl::encoding::Vector<ChannelSet, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
8146                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8147                {
8148                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8149                }
8150                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8151                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8152                }
8153            }
8154
8155            next_offset += envelope_size;
8156            _next_ordinal_to_read += 1;
8157            if next_offset >= end_offset {
8158                return Ok(());
8159            }
8160
8161            // Decode unknown envelopes for gaps in ordinals.
8162            while _next_ordinal_to_read < 2 {
8163                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8164                _next_ordinal_to_read += 1;
8165                next_offset += envelope_size;
8166            }
8167
8168            let next_out_of_line = decoder.next_out_of_line();
8169            let handles_before = decoder.remaining_handles();
8170            if let Some((inlined, num_bytes, num_handles)) =
8171                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8172            {
8173                let member_inline_size = <fidl::encoding::Vector<SampleFormat, 3> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8174                if inlined != (member_inline_size <= 4) {
8175                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8176                }
8177                let inner_offset;
8178                let mut inner_depth = depth.clone();
8179                if inlined {
8180                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8181                    inner_offset = next_offset;
8182                } else {
8183                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8184                    inner_depth.increment()?;
8185                }
8186                let val_ref = self.sample_formats.get_or_insert_with(
8187                    || fidl::new_empty!(fidl::encoding::Vector<SampleFormat, 3>, D),
8188                );
8189                fidl::decode!(fidl::encoding::Vector<SampleFormat, 3>, D, val_ref, decoder, inner_offset, inner_depth)?;
8190                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8191                {
8192                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8193                }
8194                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8195                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8196                }
8197            }
8198
8199            next_offset += envelope_size;
8200            _next_ordinal_to_read += 1;
8201            if next_offset >= end_offset {
8202                return Ok(());
8203            }
8204
8205            // Decode unknown envelopes for gaps in ordinals.
8206            while _next_ordinal_to_read < 3 {
8207                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8208                _next_ordinal_to_read += 1;
8209                next_offset += envelope_size;
8210            }
8211
8212            let next_out_of_line = decoder.next_out_of_line();
8213            let handles_before = decoder.remaining_handles();
8214            if let Some((inlined, num_bytes, num_handles)) =
8215                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8216            {
8217                let member_inline_size =
8218                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
8219                        decoder.context,
8220                    );
8221                if inlined != (member_inline_size <= 4) {
8222                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8223                }
8224                let inner_offset;
8225                let mut inner_depth = depth.clone();
8226                if inlined {
8227                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8228                    inner_offset = next_offset;
8229                } else {
8230                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8231                    inner_depth.increment()?;
8232                }
8233                let val_ref = self
8234                    .bytes_per_sample
8235                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
8236                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
8237                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8238                {
8239                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8240                }
8241                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8242                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8243                }
8244            }
8245
8246            next_offset += envelope_size;
8247            _next_ordinal_to_read += 1;
8248            if next_offset >= end_offset {
8249                return Ok(());
8250            }
8251
8252            // Decode unknown envelopes for gaps in ordinals.
8253            while _next_ordinal_to_read < 4 {
8254                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8255                _next_ordinal_to_read += 1;
8256                next_offset += envelope_size;
8257            }
8258
8259            let next_out_of_line = decoder.next_out_of_line();
8260            let handles_before = decoder.remaining_handles();
8261            if let Some((inlined, num_bytes, num_handles)) =
8262                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8263            {
8264                let member_inline_size =
8265                    <fidl::encoding::Vector<u8, 8> as fidl::encoding::TypeMarker>::inline_size(
8266                        decoder.context,
8267                    );
8268                if inlined != (member_inline_size <= 4) {
8269                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8270                }
8271                let inner_offset;
8272                let mut inner_depth = depth.clone();
8273                if inlined {
8274                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8275                    inner_offset = next_offset;
8276                } else {
8277                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8278                    inner_depth.increment()?;
8279                }
8280                let val_ref = self
8281                    .valid_bits_per_sample
8282                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 8>, D));
8283                fidl::decode!(fidl::encoding::Vector<u8, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
8284                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8285                {
8286                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8287                }
8288                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8289                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8290                }
8291            }
8292
8293            next_offset += envelope_size;
8294            _next_ordinal_to_read += 1;
8295            if next_offset >= end_offset {
8296                return Ok(());
8297            }
8298
8299            // Decode unknown envelopes for gaps in ordinals.
8300            while _next_ordinal_to_read < 5 {
8301                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8302                _next_ordinal_to_read += 1;
8303                next_offset += envelope_size;
8304            }
8305
8306            let next_out_of_line = decoder.next_out_of_line();
8307            let handles_before = decoder.remaining_handles();
8308            if let Some((inlined, num_bytes, num_handles)) =
8309                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8310            {
8311                let member_inline_size =
8312                    <fidl::encoding::Vector<u32, 64> as fidl::encoding::TypeMarker>::inline_size(
8313                        decoder.context,
8314                    );
8315                if inlined != (member_inline_size <= 4) {
8316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8317                }
8318                let inner_offset;
8319                let mut inner_depth = depth.clone();
8320                if inlined {
8321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8322                    inner_offset = next_offset;
8323                } else {
8324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8325                    inner_depth.increment()?;
8326                }
8327                let val_ref = self
8328                    .frame_rates
8329                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u32, 64>, D));
8330                fidl::decode!(fidl::encoding::Vector<u32, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
8331                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8332                {
8333                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8334                }
8335                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8336                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8337                }
8338            }
8339
8340            next_offset += envelope_size;
8341
8342            // Decode the remaining unknown envelopes.
8343            while next_offset < end_offset {
8344                _next_ordinal_to_read += 1;
8345                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8346                next_offset += envelope_size;
8347            }
8348
8349            Ok(())
8350        }
8351    }
8352
8353    impl PlugState {
8354        #[inline(always)]
8355        fn max_ordinal_present(&self) -> u64 {
8356            if let Some(_) = self.plug_state_time {
8357                return 2;
8358            }
8359            if let Some(_) = self.plugged {
8360                return 1;
8361            }
8362            0
8363        }
8364    }
8365
8366    impl fidl::encoding::ValueTypeMarker for PlugState {
8367        type Borrowed<'a> = &'a Self;
8368        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8369            value
8370        }
8371    }
8372
8373    unsafe impl fidl::encoding::TypeMarker for PlugState {
8374        type Owned = Self;
8375
8376        #[inline(always)]
8377        fn inline_align(_context: fidl::encoding::Context) -> usize {
8378            8
8379        }
8380
8381        #[inline(always)]
8382        fn inline_size(_context: fidl::encoding::Context) -> usize {
8383            16
8384        }
8385    }
8386
8387    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugState, D>
8388        for &PlugState
8389    {
8390        unsafe fn encode(
8391            self,
8392            encoder: &mut fidl::encoding::Encoder<'_, D>,
8393            offset: usize,
8394            mut depth: fidl::encoding::Depth,
8395        ) -> fidl::Result<()> {
8396            encoder.debug_check_bounds::<PlugState>(offset);
8397            // Vector header
8398            let max_ordinal: u64 = self.max_ordinal_present();
8399            encoder.write_num(max_ordinal, offset);
8400            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8401            // Calling encoder.out_of_line_offset(0) is not allowed.
8402            if max_ordinal == 0 {
8403                return Ok(());
8404            }
8405            depth.increment()?;
8406            let envelope_size = 8;
8407            let bytes_len = max_ordinal as usize * envelope_size;
8408            #[allow(unused_variables)]
8409            let offset = encoder.out_of_line_offset(bytes_len);
8410            let mut _prev_end_offset: usize = 0;
8411            if 1 > max_ordinal {
8412                return Ok(());
8413            }
8414
8415            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8416            // are envelope_size bytes.
8417            let cur_offset: usize = (1 - 1) * envelope_size;
8418
8419            // Zero reserved fields.
8420            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8421
8422            // Safety:
8423            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8424            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8425            //   envelope_size bytes, there is always sufficient room.
8426            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8427                self.plugged.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8428                encoder,
8429                offset + cur_offset,
8430                depth,
8431            )?;
8432
8433            _prev_end_offset = cur_offset + envelope_size;
8434            if 2 > max_ordinal {
8435                return Ok(());
8436            }
8437
8438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8439            // are envelope_size bytes.
8440            let cur_offset: usize = (2 - 1) * envelope_size;
8441
8442            // Zero reserved fields.
8443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8444
8445            // Safety:
8446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8448            //   envelope_size bytes, there is always sufficient room.
8449            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8450                self.plug_state_time.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8451                encoder,
8452                offset + cur_offset,
8453                depth,
8454            )?;
8455
8456            _prev_end_offset = cur_offset + envelope_size;
8457
8458            Ok(())
8459        }
8460    }
8461
8462    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugState {
8463        #[inline(always)]
8464        fn new_empty() -> Self {
8465            Self::default()
8466        }
8467
8468        unsafe fn decode(
8469            &mut self,
8470            decoder: &mut fidl::encoding::Decoder<'_, D>,
8471            offset: usize,
8472            mut depth: fidl::encoding::Depth,
8473        ) -> fidl::Result<()> {
8474            decoder.debug_check_bounds::<Self>(offset);
8475            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8476                None => return Err(fidl::Error::NotNullable),
8477                Some(len) => len,
8478            };
8479            // Calling decoder.out_of_line_offset(0) is not allowed.
8480            if len == 0 {
8481                return Ok(());
8482            };
8483            depth.increment()?;
8484            let envelope_size = 8;
8485            let bytes_len = len * envelope_size;
8486            let offset = decoder.out_of_line_offset(bytes_len)?;
8487            // Decode the envelope for each type.
8488            let mut _next_ordinal_to_read = 0;
8489            let mut next_offset = offset;
8490            let end_offset = offset + bytes_len;
8491            _next_ordinal_to_read += 1;
8492            if next_offset >= end_offset {
8493                return Ok(());
8494            }
8495
8496            // Decode unknown envelopes for gaps in ordinals.
8497            while _next_ordinal_to_read < 1 {
8498                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8499                _next_ordinal_to_read += 1;
8500                next_offset += envelope_size;
8501            }
8502
8503            let next_out_of_line = decoder.next_out_of_line();
8504            let handles_before = decoder.remaining_handles();
8505            if let Some((inlined, num_bytes, num_handles)) =
8506                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8507            {
8508                let member_inline_size =
8509                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8510                if inlined != (member_inline_size <= 4) {
8511                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8512                }
8513                let inner_offset;
8514                let mut inner_depth = depth.clone();
8515                if inlined {
8516                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8517                    inner_offset = next_offset;
8518                } else {
8519                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8520                    inner_depth.increment()?;
8521                }
8522                let val_ref = self.plugged.get_or_insert_with(|| fidl::new_empty!(bool, D));
8523                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8524                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8525                {
8526                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8527                }
8528                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8529                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8530                }
8531            }
8532
8533            next_offset += envelope_size;
8534            _next_ordinal_to_read += 1;
8535            if next_offset >= end_offset {
8536                return Ok(());
8537            }
8538
8539            // Decode unknown envelopes for gaps in ordinals.
8540            while _next_ordinal_to_read < 2 {
8541                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8542                _next_ordinal_to_read += 1;
8543                next_offset += envelope_size;
8544            }
8545
8546            let next_out_of_line = decoder.next_out_of_line();
8547            let handles_before = decoder.remaining_handles();
8548            if let Some((inlined, num_bytes, num_handles)) =
8549                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8550            {
8551                let member_inline_size =
8552                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8553                if inlined != (member_inline_size <= 4) {
8554                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8555                }
8556                let inner_offset;
8557                let mut inner_depth = depth.clone();
8558                if inlined {
8559                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8560                    inner_offset = next_offset;
8561                } else {
8562                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8563                    inner_depth.increment()?;
8564                }
8565                let val_ref = self.plug_state_time.get_or_insert_with(|| fidl::new_empty!(i64, D));
8566                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8567                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8568                {
8569                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8570                }
8571                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8572                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8573                }
8574            }
8575
8576            next_offset += envelope_size;
8577
8578            // Decode the remaining unknown envelopes.
8579            while next_offset < end_offset {
8580                _next_ordinal_to_read += 1;
8581                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8582                next_offset += envelope_size;
8583            }
8584
8585            Ok(())
8586        }
8587    }
8588
8589    impl RingBufferProperties {
8590        #[inline(always)]
8591        fn max_ordinal_present(&self) -> u64 {
8592            if let Some(_) = self.driver_transfer_bytes {
8593                return 5;
8594            }
8595            if let Some(_) = self.turn_on_delay {
8596                return 4;
8597            }
8598            if let Some(_) = self.needs_cache_flush_or_invalidate {
8599                return 3;
8600            }
8601            0
8602        }
8603    }
8604
8605    impl fidl::encoding::ValueTypeMarker for RingBufferProperties {
8606        type Borrowed<'a> = &'a Self;
8607        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8608            value
8609        }
8610    }
8611
8612    unsafe impl fidl::encoding::TypeMarker for RingBufferProperties {
8613        type Owned = Self;
8614
8615        #[inline(always)]
8616        fn inline_align(_context: fidl::encoding::Context) -> usize {
8617            8
8618        }
8619
8620        #[inline(always)]
8621        fn inline_size(_context: fidl::encoding::Context) -> usize {
8622            16
8623        }
8624    }
8625
8626    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferProperties, D>
8627        for &RingBufferProperties
8628    {
8629        unsafe fn encode(
8630            self,
8631            encoder: &mut fidl::encoding::Encoder<'_, D>,
8632            offset: usize,
8633            mut depth: fidl::encoding::Depth,
8634        ) -> fidl::Result<()> {
8635            encoder.debug_check_bounds::<RingBufferProperties>(offset);
8636            // Vector header
8637            let max_ordinal: u64 = self.max_ordinal_present();
8638            encoder.write_num(max_ordinal, offset);
8639            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8640            // Calling encoder.out_of_line_offset(0) is not allowed.
8641            if max_ordinal == 0 {
8642                return Ok(());
8643            }
8644            depth.increment()?;
8645            let envelope_size = 8;
8646            let bytes_len = max_ordinal as usize * envelope_size;
8647            #[allow(unused_variables)]
8648            let offset = encoder.out_of_line_offset(bytes_len);
8649            let mut _prev_end_offset: usize = 0;
8650            if 3 > max_ordinal {
8651                return Ok(());
8652            }
8653
8654            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8655            // are envelope_size bytes.
8656            let cur_offset: usize = (3 - 1) * envelope_size;
8657
8658            // Zero reserved fields.
8659            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8660
8661            // Safety:
8662            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8663            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8664            //   envelope_size bytes, there is always sufficient room.
8665            fidl::encoding::encode_in_envelope_optional::<bool, D>(
8666                self.needs_cache_flush_or_invalidate
8667                    .as_ref()
8668                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
8669                encoder,
8670                offset + cur_offset,
8671                depth,
8672            )?;
8673
8674            _prev_end_offset = cur_offset + envelope_size;
8675            if 4 > max_ordinal {
8676                return Ok(());
8677            }
8678
8679            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8680            // are envelope_size bytes.
8681            let cur_offset: usize = (4 - 1) * envelope_size;
8682
8683            // Zero reserved fields.
8684            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8685
8686            // Safety:
8687            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8688            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8689            //   envelope_size bytes, there is always sufficient room.
8690            fidl::encoding::encode_in_envelope_optional::<i64, D>(
8691                self.turn_on_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
8692                encoder,
8693                offset + cur_offset,
8694                depth,
8695            )?;
8696
8697            _prev_end_offset = cur_offset + envelope_size;
8698            if 5 > max_ordinal {
8699                return Ok(());
8700            }
8701
8702            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8703            // are envelope_size bytes.
8704            let cur_offset: usize = (5 - 1) * envelope_size;
8705
8706            // Zero reserved fields.
8707            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8708
8709            // Safety:
8710            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8711            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8712            //   envelope_size bytes, there is always sufficient room.
8713            fidl::encoding::encode_in_envelope_optional::<u32, D>(
8714                self.driver_transfer_bytes
8715                    .as_ref()
8716                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
8717                encoder,
8718                offset + cur_offset,
8719                depth,
8720            )?;
8721
8722            _prev_end_offset = cur_offset + envelope_size;
8723
8724            Ok(())
8725        }
8726    }
8727
8728    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferProperties {
8729        #[inline(always)]
8730        fn new_empty() -> Self {
8731            Self::default()
8732        }
8733
8734        unsafe fn decode(
8735            &mut self,
8736            decoder: &mut fidl::encoding::Decoder<'_, D>,
8737            offset: usize,
8738            mut depth: fidl::encoding::Depth,
8739        ) -> fidl::Result<()> {
8740            decoder.debug_check_bounds::<Self>(offset);
8741            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8742                None => return Err(fidl::Error::NotNullable),
8743                Some(len) => len,
8744            };
8745            // Calling decoder.out_of_line_offset(0) is not allowed.
8746            if len == 0 {
8747                return Ok(());
8748            };
8749            depth.increment()?;
8750            let envelope_size = 8;
8751            let bytes_len = len * envelope_size;
8752            let offset = decoder.out_of_line_offset(bytes_len)?;
8753            // Decode the envelope for each type.
8754            let mut _next_ordinal_to_read = 0;
8755            let mut next_offset = offset;
8756            let end_offset = offset + bytes_len;
8757            _next_ordinal_to_read += 1;
8758            if next_offset >= end_offset {
8759                return Ok(());
8760            }
8761
8762            // Decode unknown envelopes for gaps in ordinals.
8763            while _next_ordinal_to_read < 3 {
8764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8765                _next_ordinal_to_read += 1;
8766                next_offset += envelope_size;
8767            }
8768
8769            let next_out_of_line = decoder.next_out_of_line();
8770            let handles_before = decoder.remaining_handles();
8771            if let Some((inlined, num_bytes, num_handles)) =
8772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8773            {
8774                let member_inline_size =
8775                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8776                if inlined != (member_inline_size <= 4) {
8777                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8778                }
8779                let inner_offset;
8780                let mut inner_depth = depth.clone();
8781                if inlined {
8782                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8783                    inner_offset = next_offset;
8784                } else {
8785                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8786                    inner_depth.increment()?;
8787                }
8788                let val_ref = self
8789                    .needs_cache_flush_or_invalidate
8790                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
8791                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
8792                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8793                {
8794                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8795                }
8796                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8797                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8798                }
8799            }
8800
8801            next_offset += envelope_size;
8802            _next_ordinal_to_read += 1;
8803            if next_offset >= end_offset {
8804                return Ok(());
8805            }
8806
8807            // Decode unknown envelopes for gaps in ordinals.
8808            while _next_ordinal_to_read < 4 {
8809                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8810                _next_ordinal_to_read += 1;
8811                next_offset += envelope_size;
8812            }
8813
8814            let next_out_of_line = decoder.next_out_of_line();
8815            let handles_before = decoder.remaining_handles();
8816            if let Some((inlined, num_bytes, num_handles)) =
8817                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8818            {
8819                let member_inline_size =
8820                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8821                if inlined != (member_inline_size <= 4) {
8822                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8823                }
8824                let inner_offset;
8825                let mut inner_depth = depth.clone();
8826                if inlined {
8827                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8828                    inner_offset = next_offset;
8829                } else {
8830                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8831                    inner_depth.increment()?;
8832                }
8833                let val_ref = self.turn_on_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
8834                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
8835                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8836                {
8837                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8838                }
8839                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8840                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8841                }
8842            }
8843
8844            next_offset += envelope_size;
8845            _next_ordinal_to_read += 1;
8846            if next_offset >= end_offset {
8847                return Ok(());
8848            }
8849
8850            // Decode unknown envelopes for gaps in ordinals.
8851            while _next_ordinal_to_read < 5 {
8852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8853                _next_ordinal_to_read += 1;
8854                next_offset += envelope_size;
8855            }
8856
8857            let next_out_of_line = decoder.next_out_of_line();
8858            let handles_before = decoder.remaining_handles();
8859            if let Some((inlined, num_bytes, num_handles)) =
8860                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8861            {
8862                let member_inline_size =
8863                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8864                if inlined != (member_inline_size <= 4) {
8865                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8866                }
8867                let inner_offset;
8868                let mut inner_depth = depth.clone();
8869                if inlined {
8870                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8871                    inner_offset = next_offset;
8872                } else {
8873                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8874                    inner_depth.increment()?;
8875                }
8876                let val_ref =
8877                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
8878                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
8879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8880                {
8881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8882                }
8883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8885                }
8886            }
8887
8888            next_offset += envelope_size;
8889
8890            // Decode the remaining unknown envelopes.
8891            while next_offset < end_offset {
8892                _next_ordinal_to_read += 1;
8893                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8894                next_offset += envelope_size;
8895            }
8896
8897            Ok(())
8898        }
8899    }
8900
8901    impl StreamProperties {
8902        #[inline(always)]
8903        fn max_ordinal_present(&self) -> u64 {
8904            if let Some(_) = self.clock_domain {
8905                return 11;
8906            }
8907            if let Some(_) = self.product {
8908                return 10;
8909            }
8910            if let Some(_) = self.manufacturer {
8911                return 9;
8912            }
8913            if let Some(_) = self.plug_detect_capabilities {
8914                return 8;
8915            }
8916            if let Some(_) = self.gain_step_db {
8917                return 7;
8918            }
8919            if let Some(_) = self.max_gain_db {
8920                return 6;
8921            }
8922            if let Some(_) = self.min_gain_db {
8923                return 5;
8924            }
8925            if let Some(_) = self.can_agc {
8926                return 4;
8927            }
8928            if let Some(_) = self.can_mute {
8929                return 3;
8930            }
8931            if let Some(_) = self.is_input {
8932                return 2;
8933            }
8934            if let Some(_) = self.unique_id {
8935                return 1;
8936            }
8937            0
8938        }
8939    }
8940
8941    impl fidl::encoding::ValueTypeMarker for StreamProperties {
8942        type Borrowed<'a> = &'a Self;
8943        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8944            value
8945        }
8946    }
8947
8948    unsafe impl fidl::encoding::TypeMarker for StreamProperties {
8949        type Owned = Self;
8950
8951        #[inline(always)]
8952        fn inline_align(_context: fidl::encoding::Context) -> usize {
8953            8
8954        }
8955
8956        #[inline(always)]
8957        fn inline_size(_context: fidl::encoding::Context) -> usize {
8958            16
8959        }
8960    }
8961
8962    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamProperties, D>
8963        for &StreamProperties
8964    {
8965        unsafe fn encode(
8966            self,
8967            encoder: &mut fidl::encoding::Encoder<'_, D>,
8968            offset: usize,
8969            mut depth: fidl::encoding::Depth,
8970        ) -> fidl::Result<()> {
8971            encoder.debug_check_bounds::<StreamProperties>(offset);
8972            // Vector header
8973            let max_ordinal: u64 = self.max_ordinal_present();
8974            encoder.write_num(max_ordinal, offset);
8975            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8976            // Calling encoder.out_of_line_offset(0) is not allowed.
8977            if max_ordinal == 0 {
8978                return Ok(());
8979            }
8980            depth.increment()?;
8981            let envelope_size = 8;
8982            let bytes_len = max_ordinal as usize * envelope_size;
8983            #[allow(unused_variables)]
8984            let offset = encoder.out_of_line_offset(bytes_len);
8985            let mut _prev_end_offset: usize = 0;
8986            if 1 > max_ordinal {
8987                return Ok(());
8988            }
8989
8990            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8991            // are envelope_size bytes.
8992            let cur_offset: usize = (1 - 1) * envelope_size;
8993
8994            // Zero reserved fields.
8995            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8996
8997            // Safety:
8998            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8999            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9000            //   envelope_size bytes, there is always sufficient room.
9001            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
9002                self.unique_id.as_ref().map(
9003                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
9004                ),
9005                encoder,
9006                offset + cur_offset,
9007                depth,
9008            )?;
9009
9010            _prev_end_offset = cur_offset + envelope_size;
9011            if 2 > max_ordinal {
9012                return Ok(());
9013            }
9014
9015            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9016            // are envelope_size bytes.
9017            let cur_offset: usize = (2 - 1) * envelope_size;
9018
9019            // Zero reserved fields.
9020            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9021
9022            // Safety:
9023            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9024            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9025            //   envelope_size bytes, there is always sufficient room.
9026            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9027                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9028                encoder,
9029                offset + cur_offset,
9030                depth,
9031            )?;
9032
9033            _prev_end_offset = cur_offset + envelope_size;
9034            if 3 > max_ordinal {
9035                return Ok(());
9036            }
9037
9038            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9039            // are envelope_size bytes.
9040            let cur_offset: usize = (3 - 1) * envelope_size;
9041
9042            // Zero reserved fields.
9043            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9044
9045            // Safety:
9046            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9047            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9048            //   envelope_size bytes, there is always sufficient room.
9049            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9050                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9051                encoder,
9052                offset + cur_offset,
9053                depth,
9054            )?;
9055
9056            _prev_end_offset = cur_offset + envelope_size;
9057            if 4 > max_ordinal {
9058                return Ok(());
9059            }
9060
9061            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9062            // are envelope_size bytes.
9063            let cur_offset: usize = (4 - 1) * envelope_size;
9064
9065            // Zero reserved fields.
9066            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9067
9068            // Safety:
9069            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9070            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9071            //   envelope_size bytes, there is always sufficient room.
9072            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9073                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9074                encoder,
9075                offset + cur_offset,
9076                depth,
9077            )?;
9078
9079            _prev_end_offset = cur_offset + envelope_size;
9080            if 5 > max_ordinal {
9081                return Ok(());
9082            }
9083
9084            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9085            // are envelope_size bytes.
9086            let cur_offset: usize = (5 - 1) * envelope_size;
9087
9088            // Zero reserved fields.
9089            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9090
9091            // Safety:
9092            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9093            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9094            //   envelope_size bytes, there is always sufficient room.
9095            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9096                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9097                encoder,
9098                offset + cur_offset,
9099                depth,
9100            )?;
9101
9102            _prev_end_offset = cur_offset + envelope_size;
9103            if 6 > max_ordinal {
9104                return Ok(());
9105            }
9106
9107            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9108            // are envelope_size bytes.
9109            let cur_offset: usize = (6 - 1) * envelope_size;
9110
9111            // Zero reserved fields.
9112            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9113
9114            // Safety:
9115            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9116            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9117            //   envelope_size bytes, there is always sufficient room.
9118            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9119                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9120                encoder,
9121                offset + cur_offset,
9122                depth,
9123            )?;
9124
9125            _prev_end_offset = cur_offset + envelope_size;
9126            if 7 > max_ordinal {
9127                return Ok(());
9128            }
9129
9130            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9131            // are envelope_size bytes.
9132            let cur_offset: usize = (7 - 1) * envelope_size;
9133
9134            // Zero reserved fields.
9135            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9136
9137            // Safety:
9138            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9139            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9140            //   envelope_size bytes, there is always sufficient room.
9141            fidl::encoding::encode_in_envelope_optional::<f32, D>(
9142                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
9143                encoder,
9144                offset + cur_offset,
9145                depth,
9146            )?;
9147
9148            _prev_end_offset = cur_offset + envelope_size;
9149            if 8 > max_ordinal {
9150                return Ok(());
9151            }
9152
9153            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9154            // are envelope_size bytes.
9155            let cur_offset: usize = (8 - 1) * envelope_size;
9156
9157            // Zero reserved fields.
9158            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9159
9160            // Safety:
9161            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9162            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9163            //   envelope_size bytes, there is always sufficient room.
9164            fidl::encoding::encode_in_envelope_optional::<PlugDetectCapabilities, D>(
9165                self.plug_detect_capabilities
9166                    .as_ref()
9167                    .map(<PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
9168                encoder,
9169                offset + cur_offset,
9170                depth,
9171            )?;
9172
9173            _prev_end_offset = cur_offset + envelope_size;
9174            if 9 > max_ordinal {
9175                return Ok(());
9176            }
9177
9178            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9179            // are envelope_size bytes.
9180            let cur_offset: usize = (9 - 1) * envelope_size;
9181
9182            // Zero reserved fields.
9183            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9184
9185            // Safety:
9186            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9187            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9188            //   envelope_size bytes, there is always sufficient room.
9189            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
9190                self.manufacturer.as_ref().map(
9191                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
9192                ),
9193                encoder,
9194                offset + cur_offset,
9195                depth,
9196            )?;
9197
9198            _prev_end_offset = cur_offset + envelope_size;
9199            if 10 > max_ordinal {
9200                return Ok(());
9201            }
9202
9203            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9204            // are envelope_size bytes.
9205            let cur_offset: usize = (10 - 1) * envelope_size;
9206
9207            // Zero reserved fields.
9208            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9209
9210            // Safety:
9211            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9212            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9213            //   envelope_size bytes, there is always sufficient room.
9214            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
9215                self.product.as_ref().map(
9216                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
9217                ),
9218                encoder,
9219                offset + cur_offset,
9220                depth,
9221            )?;
9222
9223            _prev_end_offset = cur_offset + envelope_size;
9224            if 11 > max_ordinal {
9225                return Ok(());
9226            }
9227
9228            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9229            // are envelope_size bytes.
9230            let cur_offset: usize = (11 - 1) * envelope_size;
9231
9232            // Zero reserved fields.
9233            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9234
9235            // Safety:
9236            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9237            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9238            //   envelope_size bytes, there is always sufficient room.
9239            fidl::encoding::encode_in_envelope_optional::<u32, D>(
9240                self.clock_domain.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
9241                encoder,
9242                offset + cur_offset,
9243                depth,
9244            )?;
9245
9246            _prev_end_offset = cur_offset + envelope_size;
9247
9248            Ok(())
9249        }
9250    }
9251
9252    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamProperties {
9253        #[inline(always)]
9254        fn new_empty() -> Self {
9255            Self::default()
9256        }
9257
9258        unsafe fn decode(
9259            &mut self,
9260            decoder: &mut fidl::encoding::Decoder<'_, D>,
9261            offset: usize,
9262            mut depth: fidl::encoding::Depth,
9263        ) -> fidl::Result<()> {
9264            decoder.debug_check_bounds::<Self>(offset);
9265            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9266                None => return Err(fidl::Error::NotNullable),
9267                Some(len) => len,
9268            };
9269            // Calling decoder.out_of_line_offset(0) is not allowed.
9270            if len == 0 {
9271                return Ok(());
9272            };
9273            depth.increment()?;
9274            let envelope_size = 8;
9275            let bytes_len = len * envelope_size;
9276            let offset = decoder.out_of_line_offset(bytes_len)?;
9277            // Decode the envelope for each type.
9278            let mut _next_ordinal_to_read = 0;
9279            let mut next_offset = offset;
9280            let end_offset = offset + bytes_len;
9281            _next_ordinal_to_read += 1;
9282            if next_offset >= end_offset {
9283                return Ok(());
9284            }
9285
9286            // Decode unknown envelopes for gaps in ordinals.
9287            while _next_ordinal_to_read < 1 {
9288                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9289                _next_ordinal_to_read += 1;
9290                next_offset += envelope_size;
9291            }
9292
9293            let next_out_of_line = decoder.next_out_of_line();
9294            let handles_before = decoder.remaining_handles();
9295            if let Some((inlined, num_bytes, num_handles)) =
9296                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9297            {
9298                let member_inline_size =
9299                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
9300                        decoder.context,
9301                    );
9302                if inlined != (member_inline_size <= 4) {
9303                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9304                }
9305                let inner_offset;
9306                let mut inner_depth = depth.clone();
9307                if inlined {
9308                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9309                    inner_offset = next_offset;
9310                } else {
9311                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9312                    inner_depth.increment()?;
9313                }
9314                let val_ref = self
9315                    .unique_id
9316                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
9317                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
9318                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9319                {
9320                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9321                }
9322                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9323                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9324                }
9325            }
9326
9327            next_offset += envelope_size;
9328            _next_ordinal_to_read += 1;
9329            if next_offset >= end_offset {
9330                return Ok(());
9331            }
9332
9333            // Decode unknown envelopes for gaps in ordinals.
9334            while _next_ordinal_to_read < 2 {
9335                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9336                _next_ordinal_to_read += 1;
9337                next_offset += envelope_size;
9338            }
9339
9340            let next_out_of_line = decoder.next_out_of_line();
9341            let handles_before = decoder.remaining_handles();
9342            if let Some((inlined, num_bytes, num_handles)) =
9343                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9344            {
9345                let member_inline_size =
9346                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9347                if inlined != (member_inline_size <= 4) {
9348                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9349                }
9350                let inner_offset;
9351                let mut inner_depth = depth.clone();
9352                if inlined {
9353                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9354                    inner_offset = next_offset;
9355                } else {
9356                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9357                    inner_depth.increment()?;
9358                }
9359                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
9360                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9362                {
9363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9364                }
9365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9367                }
9368            }
9369
9370            next_offset += envelope_size;
9371            _next_ordinal_to_read += 1;
9372            if next_offset >= end_offset {
9373                return Ok(());
9374            }
9375
9376            // Decode unknown envelopes for gaps in ordinals.
9377            while _next_ordinal_to_read < 3 {
9378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9379                _next_ordinal_to_read += 1;
9380                next_offset += envelope_size;
9381            }
9382
9383            let next_out_of_line = decoder.next_out_of_line();
9384            let handles_before = decoder.remaining_handles();
9385            if let Some((inlined, num_bytes, num_handles)) =
9386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9387            {
9388                let member_inline_size =
9389                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9390                if inlined != (member_inline_size <= 4) {
9391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9392                }
9393                let inner_offset;
9394                let mut inner_depth = depth.clone();
9395                if inlined {
9396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9397                    inner_offset = next_offset;
9398                } else {
9399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9400                    inner_depth.increment()?;
9401                }
9402                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
9403                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9404                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9405                {
9406                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9407                }
9408                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9409                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9410                }
9411            }
9412
9413            next_offset += envelope_size;
9414            _next_ordinal_to_read += 1;
9415            if next_offset >= end_offset {
9416                return Ok(());
9417            }
9418
9419            // Decode unknown envelopes for gaps in ordinals.
9420            while _next_ordinal_to_read < 4 {
9421                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9422                _next_ordinal_to_read += 1;
9423                next_offset += envelope_size;
9424            }
9425
9426            let next_out_of_line = decoder.next_out_of_line();
9427            let handles_before = decoder.remaining_handles();
9428            if let Some((inlined, num_bytes, num_handles)) =
9429                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9430            {
9431                let member_inline_size =
9432                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9433                if inlined != (member_inline_size <= 4) {
9434                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9435                }
9436                let inner_offset;
9437                let mut inner_depth = depth.clone();
9438                if inlined {
9439                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9440                    inner_offset = next_offset;
9441                } else {
9442                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9443                    inner_depth.increment()?;
9444                }
9445                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
9446                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9447                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9448                {
9449                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9450                }
9451                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9452                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9453                }
9454            }
9455
9456            next_offset += envelope_size;
9457            _next_ordinal_to_read += 1;
9458            if next_offset >= end_offset {
9459                return Ok(());
9460            }
9461
9462            // Decode unknown envelopes for gaps in ordinals.
9463            while _next_ordinal_to_read < 5 {
9464                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9465                _next_ordinal_to_read += 1;
9466                next_offset += envelope_size;
9467            }
9468
9469            let next_out_of_line = decoder.next_out_of_line();
9470            let handles_before = decoder.remaining_handles();
9471            if let Some((inlined, num_bytes, num_handles)) =
9472                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9473            {
9474                let member_inline_size =
9475                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9476                if inlined != (member_inline_size <= 4) {
9477                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9478                }
9479                let inner_offset;
9480                let mut inner_depth = depth.clone();
9481                if inlined {
9482                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9483                    inner_offset = next_offset;
9484                } else {
9485                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9486                    inner_depth.increment()?;
9487                }
9488                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9489                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9490                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9491                {
9492                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9493                }
9494                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9495                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9496                }
9497            }
9498
9499            next_offset += envelope_size;
9500            _next_ordinal_to_read += 1;
9501            if next_offset >= end_offset {
9502                return Ok(());
9503            }
9504
9505            // Decode unknown envelopes for gaps in ordinals.
9506            while _next_ordinal_to_read < 6 {
9507                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9508                _next_ordinal_to_read += 1;
9509                next_offset += envelope_size;
9510            }
9511
9512            let next_out_of_line = decoder.next_out_of_line();
9513            let handles_before = decoder.remaining_handles();
9514            if let Some((inlined, num_bytes, num_handles)) =
9515                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9516            {
9517                let member_inline_size =
9518                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9519                if inlined != (member_inline_size <= 4) {
9520                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9521                }
9522                let inner_offset;
9523                let mut inner_depth = depth.clone();
9524                if inlined {
9525                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9526                    inner_offset = next_offset;
9527                } else {
9528                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9529                    inner_depth.increment()?;
9530                }
9531                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9532                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9533                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9534                {
9535                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9536                }
9537                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9538                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9539                }
9540            }
9541
9542            next_offset += envelope_size;
9543            _next_ordinal_to_read += 1;
9544            if next_offset >= end_offset {
9545                return Ok(());
9546            }
9547
9548            // Decode unknown envelopes for gaps in ordinals.
9549            while _next_ordinal_to_read < 7 {
9550                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9551                _next_ordinal_to_read += 1;
9552                next_offset += envelope_size;
9553            }
9554
9555            let next_out_of_line = decoder.next_out_of_line();
9556            let handles_before = decoder.remaining_handles();
9557            if let Some((inlined, num_bytes, num_handles)) =
9558                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9559            {
9560                let member_inline_size =
9561                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9562                if inlined != (member_inline_size <= 4) {
9563                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9564                }
9565                let inner_offset;
9566                let mut inner_depth = depth.clone();
9567                if inlined {
9568                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9569                    inner_offset = next_offset;
9570                } else {
9571                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9572                    inner_depth.increment()?;
9573                }
9574                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
9575                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
9576                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9577                {
9578                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9579                }
9580                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9581                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9582                }
9583            }
9584
9585            next_offset += envelope_size;
9586            _next_ordinal_to_read += 1;
9587            if next_offset >= end_offset {
9588                return Ok(());
9589            }
9590
9591            // Decode unknown envelopes for gaps in ordinals.
9592            while _next_ordinal_to_read < 8 {
9593                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9594                _next_ordinal_to_read += 1;
9595                next_offset += envelope_size;
9596            }
9597
9598            let next_out_of_line = decoder.next_out_of_line();
9599            let handles_before = decoder.remaining_handles();
9600            if let Some((inlined, num_bytes, num_handles)) =
9601                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9602            {
9603                let member_inline_size =
9604                    <PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(
9605                        decoder.context,
9606                    );
9607                if inlined != (member_inline_size <= 4) {
9608                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9609                }
9610                let inner_offset;
9611                let mut inner_depth = depth.clone();
9612                if inlined {
9613                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9614                    inner_offset = next_offset;
9615                } else {
9616                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9617                    inner_depth.increment()?;
9618                }
9619                let val_ref = self
9620                    .plug_detect_capabilities
9621                    .get_or_insert_with(|| fidl::new_empty!(PlugDetectCapabilities, D));
9622                fidl::decode!(
9623                    PlugDetectCapabilities,
9624                    D,
9625                    val_ref,
9626                    decoder,
9627                    inner_offset,
9628                    inner_depth
9629                )?;
9630                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9631                {
9632                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9633                }
9634                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9635                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9636                }
9637            }
9638
9639            next_offset += envelope_size;
9640            _next_ordinal_to_read += 1;
9641            if next_offset >= end_offset {
9642                return Ok(());
9643            }
9644
9645            // Decode unknown envelopes for gaps in ordinals.
9646            while _next_ordinal_to_read < 9 {
9647                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9648                _next_ordinal_to_read += 1;
9649                next_offset += envelope_size;
9650            }
9651
9652            let next_out_of_line = decoder.next_out_of_line();
9653            let handles_before = decoder.remaining_handles();
9654            if let Some((inlined, num_bytes, num_handles)) =
9655                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9656            {
9657                let member_inline_size =
9658                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
9659                        decoder.context,
9660                    );
9661                if inlined != (member_inline_size <= 4) {
9662                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9663                }
9664                let inner_offset;
9665                let mut inner_depth = depth.clone();
9666                if inlined {
9667                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9668                    inner_offset = next_offset;
9669                } else {
9670                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9671                    inner_depth.increment()?;
9672                }
9673                let val_ref = self
9674                    .manufacturer
9675                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
9676                fidl::decode!(
9677                    fidl::encoding::BoundedString<256>,
9678                    D,
9679                    val_ref,
9680                    decoder,
9681                    inner_offset,
9682                    inner_depth
9683                )?;
9684                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9685                {
9686                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9687                }
9688                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9689                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9690                }
9691            }
9692
9693            next_offset += envelope_size;
9694            _next_ordinal_to_read += 1;
9695            if next_offset >= end_offset {
9696                return Ok(());
9697            }
9698
9699            // Decode unknown envelopes for gaps in ordinals.
9700            while _next_ordinal_to_read < 10 {
9701                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9702                _next_ordinal_to_read += 1;
9703                next_offset += envelope_size;
9704            }
9705
9706            let next_out_of_line = decoder.next_out_of_line();
9707            let handles_before = decoder.remaining_handles();
9708            if let Some((inlined, num_bytes, num_handles)) =
9709                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9710            {
9711                let member_inline_size =
9712                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
9713                        decoder.context,
9714                    );
9715                if inlined != (member_inline_size <= 4) {
9716                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9717                }
9718                let inner_offset;
9719                let mut inner_depth = depth.clone();
9720                if inlined {
9721                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9722                    inner_offset = next_offset;
9723                } else {
9724                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9725                    inner_depth.increment()?;
9726                }
9727                let val_ref = self
9728                    .product
9729                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
9730                fidl::decode!(
9731                    fidl::encoding::BoundedString<256>,
9732                    D,
9733                    val_ref,
9734                    decoder,
9735                    inner_offset,
9736                    inner_depth
9737                )?;
9738                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9739                {
9740                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9741                }
9742                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9743                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9744                }
9745            }
9746
9747            next_offset += envelope_size;
9748            _next_ordinal_to_read += 1;
9749            if next_offset >= end_offset {
9750                return Ok(());
9751            }
9752
9753            // Decode unknown envelopes for gaps in ordinals.
9754            while _next_ordinal_to_read < 11 {
9755                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9756                _next_ordinal_to_read += 1;
9757                next_offset += envelope_size;
9758            }
9759
9760            let next_out_of_line = decoder.next_out_of_line();
9761            let handles_before = decoder.remaining_handles();
9762            if let Some((inlined, num_bytes, num_handles)) =
9763                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9764            {
9765                let member_inline_size =
9766                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9767                if inlined != (member_inline_size <= 4) {
9768                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9769                }
9770                let inner_offset;
9771                let mut inner_depth = depth.clone();
9772                if inlined {
9773                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9774                    inner_offset = next_offset;
9775                } else {
9776                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9777                    inner_depth.increment()?;
9778                }
9779                let val_ref = self.clock_domain.get_or_insert_with(|| fidl::new_empty!(u32, D));
9780                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
9781                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9782                {
9783                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9784                }
9785                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9786                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9787                }
9788            }
9789
9790            next_offset += envelope_size;
9791
9792            // Decode the remaining unknown envelopes.
9793            while next_offset < end_offset {
9794                _next_ordinal_to_read += 1;
9795                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9796                next_offset += envelope_size;
9797            }
9798
9799            Ok(())
9800        }
9801    }
9802
9803    impl SupportedFormats {
9804        #[inline(always)]
9805        fn max_ordinal_present(&self) -> u64 {
9806            if let Some(_) = self.pcm_supported_formats {
9807                return 1;
9808            }
9809            0
9810        }
9811    }
9812
9813    impl fidl::encoding::ValueTypeMarker for SupportedFormats {
9814        type Borrowed<'a> = &'a Self;
9815        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9816            value
9817        }
9818    }
9819
9820    unsafe impl fidl::encoding::TypeMarker for SupportedFormats {
9821        type Owned = Self;
9822
9823        #[inline(always)]
9824        fn inline_align(_context: fidl::encoding::Context) -> usize {
9825            8
9826        }
9827
9828        #[inline(always)]
9829        fn inline_size(_context: fidl::encoding::Context) -> usize {
9830            16
9831        }
9832    }
9833
9834    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SupportedFormats, D>
9835        for &SupportedFormats
9836    {
9837        unsafe fn encode(
9838            self,
9839            encoder: &mut fidl::encoding::Encoder<'_, D>,
9840            offset: usize,
9841            mut depth: fidl::encoding::Depth,
9842        ) -> fidl::Result<()> {
9843            encoder.debug_check_bounds::<SupportedFormats>(offset);
9844            // Vector header
9845            let max_ordinal: u64 = self.max_ordinal_present();
9846            encoder.write_num(max_ordinal, offset);
9847            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9848            // Calling encoder.out_of_line_offset(0) is not allowed.
9849            if max_ordinal == 0 {
9850                return Ok(());
9851            }
9852            depth.increment()?;
9853            let envelope_size = 8;
9854            let bytes_len = max_ordinal as usize * envelope_size;
9855            #[allow(unused_variables)]
9856            let offset = encoder.out_of_line_offset(bytes_len);
9857            let mut _prev_end_offset: usize = 0;
9858            if 1 > max_ordinal {
9859                return Ok(());
9860            }
9861
9862            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9863            // are envelope_size bytes.
9864            let cur_offset: usize = (1 - 1) * envelope_size;
9865
9866            // Zero reserved fields.
9867            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9868
9869            // Safety:
9870            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9871            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9872            //   envelope_size bytes, there is always sufficient room.
9873            fidl::encoding::encode_in_envelope_optional::<PcmSupportedFormats, D>(
9874                self.pcm_supported_formats
9875                    .as_ref()
9876                    .map(<PcmSupportedFormats as fidl::encoding::ValueTypeMarker>::borrow),
9877                encoder,
9878                offset + cur_offset,
9879                depth,
9880            )?;
9881
9882            _prev_end_offset = cur_offset + envelope_size;
9883
9884            Ok(())
9885        }
9886    }
9887
9888    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SupportedFormats {
9889        #[inline(always)]
9890        fn new_empty() -> Self {
9891            Self::default()
9892        }
9893
9894        unsafe fn decode(
9895            &mut self,
9896            decoder: &mut fidl::encoding::Decoder<'_, D>,
9897            offset: usize,
9898            mut depth: fidl::encoding::Depth,
9899        ) -> fidl::Result<()> {
9900            decoder.debug_check_bounds::<Self>(offset);
9901            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9902                None => return Err(fidl::Error::NotNullable),
9903                Some(len) => len,
9904            };
9905            // Calling decoder.out_of_line_offset(0) is not allowed.
9906            if len == 0 {
9907                return Ok(());
9908            };
9909            depth.increment()?;
9910            let envelope_size = 8;
9911            let bytes_len = len * envelope_size;
9912            let offset = decoder.out_of_line_offset(bytes_len)?;
9913            // Decode the envelope for each type.
9914            let mut _next_ordinal_to_read = 0;
9915            let mut next_offset = offset;
9916            let end_offset = offset + bytes_len;
9917            _next_ordinal_to_read += 1;
9918            if next_offset >= end_offset {
9919                return Ok(());
9920            }
9921
9922            // Decode unknown envelopes for gaps in ordinals.
9923            while _next_ordinal_to_read < 1 {
9924                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9925                _next_ordinal_to_read += 1;
9926                next_offset += envelope_size;
9927            }
9928
9929            let next_out_of_line = decoder.next_out_of_line();
9930            let handles_before = decoder.remaining_handles();
9931            if let Some((inlined, num_bytes, num_handles)) =
9932                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9933            {
9934                let member_inline_size =
9935                    <PcmSupportedFormats as fidl::encoding::TypeMarker>::inline_size(
9936                        decoder.context,
9937                    );
9938                if inlined != (member_inline_size <= 4) {
9939                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9940                }
9941                let inner_offset;
9942                let mut inner_depth = depth.clone();
9943                if inlined {
9944                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9945                    inner_offset = next_offset;
9946                } else {
9947                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9948                    inner_depth.increment()?;
9949                }
9950                let val_ref = self
9951                    .pcm_supported_formats
9952                    .get_or_insert_with(|| fidl::new_empty!(PcmSupportedFormats, D));
9953                fidl::decode!(PcmSupportedFormats, D, val_ref, decoder, inner_offset, inner_depth)?;
9954                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9955                {
9956                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9957                }
9958                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9959                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9960                }
9961            }
9962
9963            next_offset += envelope_size;
9964
9965            // Decode the remaining unknown envelopes.
9966            while next_offset < end_offset {
9967                _next_ordinal_to_read += 1;
9968                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9969                next_offset += envelope_size;
9970            }
9971
9972            Ok(())
9973        }
9974    }
9975
9976    impl fidl::encoding::ValueTypeMarker for DaiFrameFormat {
9977        type Borrowed<'a> = &'a Self;
9978        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9979            value
9980        }
9981    }
9982
9983    unsafe impl fidl::encoding::TypeMarker for DaiFrameFormat {
9984        type Owned = Self;
9985
9986        #[inline(always)]
9987        fn inline_align(_context: fidl::encoding::Context) -> usize {
9988            8
9989        }
9990
9991        #[inline(always)]
9992        fn inline_size(_context: fidl::encoding::Context) -> usize {
9993            16
9994        }
9995    }
9996
9997    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiFrameFormat, D>
9998        for &DaiFrameFormat
9999    {
10000        #[inline]
10001        unsafe fn encode(
10002            self,
10003            encoder: &mut fidl::encoding::Encoder<'_, D>,
10004            offset: usize,
10005            _depth: fidl::encoding::Depth,
10006        ) -> fidl::Result<()> {
10007            encoder.debug_check_bounds::<DaiFrameFormat>(offset);
10008            encoder.write_num::<u64>(self.ordinal(), offset);
10009            match self {
10010                DaiFrameFormat::FrameFormatStandard(ref val) => {
10011                    fidl::encoding::encode_in_envelope::<DaiFrameFormatStandard, D>(
10012                        <DaiFrameFormatStandard as fidl::encoding::ValueTypeMarker>::borrow(val),
10013                        encoder,
10014                        offset + 8,
10015                        _depth,
10016                    )
10017                }
10018                DaiFrameFormat::FrameFormatCustom(ref val) => {
10019                    fidl::encoding::encode_in_envelope::<DaiFrameFormatCustom, D>(
10020                        <DaiFrameFormatCustom as fidl::encoding::ValueTypeMarker>::borrow(val),
10021                        encoder,
10022                        offset + 8,
10023                        _depth,
10024                    )
10025                }
10026            }
10027        }
10028    }
10029
10030    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiFrameFormat {
10031        #[inline(always)]
10032        fn new_empty() -> Self {
10033            Self::FrameFormatStandard(fidl::new_empty!(DaiFrameFormatStandard, D))
10034        }
10035
10036        #[inline]
10037        unsafe fn decode(
10038            &mut self,
10039            decoder: &mut fidl::encoding::Decoder<'_, D>,
10040            offset: usize,
10041            mut depth: fidl::encoding::Depth,
10042        ) -> fidl::Result<()> {
10043            decoder.debug_check_bounds::<Self>(offset);
10044            #[allow(unused_variables)]
10045            let next_out_of_line = decoder.next_out_of_line();
10046            let handles_before = decoder.remaining_handles();
10047            let (ordinal, inlined, num_bytes, num_handles) =
10048                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
10049
10050            let member_inline_size = match ordinal {
10051                1 => <DaiFrameFormatStandard as fidl::encoding::TypeMarker>::inline_size(
10052                    decoder.context,
10053                ),
10054                2 => <DaiFrameFormatCustom as fidl::encoding::TypeMarker>::inline_size(
10055                    decoder.context,
10056                ),
10057                _ => return Err(fidl::Error::UnknownUnionTag),
10058            };
10059
10060            if inlined != (member_inline_size <= 4) {
10061                return Err(fidl::Error::InvalidInlineBitInEnvelope);
10062            }
10063            let _inner_offset;
10064            if inlined {
10065                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
10066                _inner_offset = offset + 8;
10067            } else {
10068                depth.increment()?;
10069                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10070            }
10071            match ordinal {
10072                1 => {
10073                    #[allow(irrefutable_let_patterns)]
10074                    if let DaiFrameFormat::FrameFormatStandard(_) = self {
10075                        // Do nothing, read the value into the object
10076                    } else {
10077                        // Initialize `self` to the right variant
10078                        *self = DaiFrameFormat::FrameFormatStandard(fidl::new_empty!(
10079                            DaiFrameFormatStandard,
10080                            D
10081                        ));
10082                    }
10083                    #[allow(irrefutable_let_patterns)]
10084                    if let DaiFrameFormat::FrameFormatStandard(ref mut val) = self {
10085                        fidl::decode!(
10086                            DaiFrameFormatStandard,
10087                            D,
10088                            val,
10089                            decoder,
10090                            _inner_offset,
10091                            depth
10092                        )?;
10093                    } else {
10094                        unreachable!()
10095                    }
10096                }
10097                2 => {
10098                    #[allow(irrefutable_let_patterns)]
10099                    if let DaiFrameFormat::FrameFormatCustom(_) = self {
10100                        // Do nothing, read the value into the object
10101                    } else {
10102                        // Initialize `self` to the right variant
10103                        *self = DaiFrameFormat::FrameFormatCustom(fidl::new_empty!(
10104                            DaiFrameFormatCustom,
10105                            D
10106                        ));
10107                    }
10108                    #[allow(irrefutable_let_patterns)]
10109                    if let DaiFrameFormat::FrameFormatCustom(ref mut val) = self {
10110                        fidl::decode!(DaiFrameFormatCustom, D, val, decoder, _inner_offset, depth)?;
10111                    } else {
10112                        unreachable!()
10113                    }
10114                }
10115                ordinal => panic!("unexpected ordinal {:?}", ordinal),
10116            }
10117            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
10118                return Err(fidl::Error::InvalidNumBytesInEnvelope);
10119            }
10120            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10121                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10122            }
10123            Ok(())
10124        }
10125    }
10126}