Skip to main content

fidl_fuchsia_virtualaudio_common/
fidl_fuchsia_virtualaudio_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 const CONTROL_NODE_NAME: &str = "sys/platform/virtual-audio/virtual-audio";
12
13pub const LEGACY_CONTROL_NODE_NAME: &str = "sys/platform/virtual-audio-legacy/virtual-audio-legacy";
14
15pub const MAX_COUNT_DAI_INTERCONNECTS: u32 =
16    fidl_fuchsia_hardware_audio_signalprocessing_common::MAX_COUNT_PROCESSING_ELEMENTS as u32;
17
18pub const MAX_COUNT_PACKET_STREAMS: u32 =
19    fidl_fuchsia_hardware_audio_signalprocessing_common::MAX_COUNT_PROCESSING_ELEMENTS as u32;
20
21pub const MAX_COUNT_RING_BUFFERS: u32 =
22    fidl_fuchsia_hardware_audio_signalprocessing_common::MAX_COUNT_PROCESSING_ELEMENTS as u32;
23
24pub const MAX_FORMAT_RANGES: u32 = 64;
25
26pub const MAX_UI_STRING_SIZE: u32 = 256;
27
28#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
29pub enum DeviceType {
30    /// Device supports the fuchsia.hardware.audio/StreamConfig protocol.
31    StreamConfig,
32    /// Device supports the fuchsia.hardware.audio/Dai protocol.
33    Dai,
34    /// Device supports the fuchsia.hardware.audio/Codec protocol.
35    Codec,
36    /// Device supports the fuchsia.hardware.audio/Composite protocol.
37    Composite,
38    #[doc(hidden)]
39    __SourceBreaking { unknown_ordinal: u32 },
40}
41
42/// Pattern that matches an unknown `DeviceType` member.
43#[macro_export]
44macro_rules! DeviceTypeUnknown {
45    () => {
46        _
47    };
48}
49
50impl DeviceType {
51    #[inline]
52    pub fn from_primitive(prim: u32) -> Option<Self> {
53        match prim {
54            1 => Some(Self::StreamConfig),
55            2 => Some(Self::Dai),
56            3 => Some(Self::Codec),
57            4 => Some(Self::Composite),
58            _ => None,
59        }
60    }
61
62    #[inline]
63    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
64        match prim {
65            1 => Self::StreamConfig,
66            2 => Self::Dai,
67            3 => Self::Codec,
68            4 => Self::Composite,
69            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
70        }
71    }
72
73    #[inline]
74    pub fn unknown() -> Self {
75        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
76    }
77
78    #[inline]
79    pub const fn into_primitive(self) -> u32 {
80        match self {
81            Self::StreamConfig => 1,
82            Self::Dai => 2,
83            Self::Codec => 3,
84            Self::Composite => 4,
85            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
86        }
87    }
88
89    #[inline]
90    pub fn is_unknown(&self) -> bool {
91        match self {
92            Self::__SourceBreaking { unknown_ordinal: _ } => true,
93            _ => false,
94        }
95    }
96}
97
98#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
99pub enum Error {
100    /// Unknown internal error occurred.
101    Internal,
102    /// The ring buffer has not been created yet.
103    NoRingBuffer,
104    /// The device has not yet started streaming.
105    NotStarted,
106    /// The operation is not implemented, supported, or enabled.
107    NotSupported,
108    /// An argument is invalid.
109    InvalidArgs,
110    #[doc(hidden)]
111    __SourceBreaking { unknown_ordinal: u32 },
112}
113
114/// Pattern that matches an unknown `Error` member.
115#[macro_export]
116macro_rules! ErrorUnknown {
117    () => {
118        _
119    };
120}
121
122impl Error {
123    #[inline]
124    pub fn from_primitive(prim: u32) -> Option<Self> {
125        match prim {
126            1 => Some(Self::Internal),
127            2 => Some(Self::NoRingBuffer),
128            3 => Some(Self::NotStarted),
129            4 => Some(Self::NotSupported),
130            5 => Some(Self::InvalidArgs),
131            _ => None,
132        }
133    }
134
135    #[inline]
136    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
137        match prim {
138            1 => Self::Internal,
139            2 => Self::NoRingBuffer,
140            3 => Self::NotStarted,
141            4 => Self::NotSupported,
142            5 => Self::InvalidArgs,
143            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
144        }
145    }
146
147    #[inline]
148    pub fn unknown() -> Self {
149        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
150    }
151
152    #[inline]
153    pub const fn into_primitive(self) -> u32 {
154        match self {
155            Self::Internal => 1,
156            Self::NoRingBuffer => 2,
157            Self::NotStarted => 3,
158            Self::NotSupported => 4,
159            Self::InvalidArgs => 5,
160            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
161        }
162    }
163
164    #[inline]
165    pub fn is_unknown(&self) -> bool {
166        match self {
167            Self::__SourceBreaking { unknown_ordinal: _ } => true,
168            _ => false,
169        }
170    }
171}
172
173#[derive(Clone, Debug, PartialEq)]
174pub struct ControlGetDefaultConfigurationRequest {
175    pub type_: DeviceType,
176    pub direction: Direction,
177}
178
179impl fidl::Persistable for ControlGetDefaultConfigurationRequest {}
180
181#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
182#[repr(C)]
183pub struct ControlGetNumDevicesResponse {
184    pub num_input_devices: u32,
185    pub num_output_devices: u32,
186    pub num_unspecified_direction_devices: u32,
187}
188
189impl fidl::Persistable for ControlGetNumDevicesResponse {}
190
191#[derive(Clone, Debug, PartialEq)]
192pub struct ControlGetDefaultConfigurationResponse {
193    pub config: Configuration,
194}
195
196impl fidl::Persistable for ControlGetDefaultConfigurationResponse {}
197
198#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
199#[repr(C)]
200pub struct DeviceAdjustClockRateRequest {
201    pub ppm_from_monotonic: i32,
202}
203
204impl fidl::Persistable for DeviceAdjustClockRateRequest {}
205
206#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
207pub struct DeviceChangePlugStateRequest {
208    pub plug_change_time: i64,
209    pub plugged: bool,
210}
211
212impl fidl::Persistable for DeviceChangePlugStateRequest {}
213
214#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
215#[repr(C)]
216pub struct DeviceOnPositionNotifyRequest {
217    pub monotonic_time: i64,
218    pub ring_position: u32,
219}
220
221impl fidl::Persistable for DeviceOnPositionNotifyRequest {}
222
223#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
224#[repr(C)]
225pub struct DeviceOnSetFormatRequest {
226    pub frames_per_second: u32,
227    pub sample_format: u32,
228    pub num_channels: u32,
229    pub external_delay: i64,
230}
231
232impl fidl::Persistable for DeviceOnSetFormatRequest {}
233
234#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
235pub struct DeviceOnSetGainRequest {
236    pub current_mute: bool,
237    pub current_agc: bool,
238    pub current_gain_db: f32,
239}
240
241impl fidl::Persistable for DeviceOnSetGainRequest {}
242
243#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
244#[repr(C)]
245pub struct DeviceOnStartRequest {
246    pub start_time: i64,
247}
248
249impl fidl::Persistable for DeviceOnStartRequest {}
250
251#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
252#[repr(C)]
253pub struct DeviceOnStopRequest {
254    pub stop_time: i64,
255    pub ring_position: u32,
256}
257
258impl fidl::Persistable for DeviceOnStopRequest {}
259
260#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
261#[repr(C)]
262pub struct DeviceSetNotificationFrequencyRequest {
263    pub notifications_per_ring: u32,
264}
265
266impl fidl::Persistable for DeviceSetNotificationFrequencyRequest {}
267
268#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
269#[repr(C)]
270pub struct DeviceGetFormatResponse {
271    pub frames_per_second: u32,
272    pub sample_format: u32,
273    pub num_channels: u32,
274    pub external_delay: i64,
275}
276
277impl fidl::Persistable for DeviceGetFormatResponse {}
278
279#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
280pub struct DeviceGetGainResponse {
281    pub current_mute: bool,
282    pub current_agc: bool,
283    pub current_gain_db: f32,
284}
285
286impl fidl::Persistable for DeviceGetGainResponse {}
287
288#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
289#[repr(C)]
290pub struct DeviceGetPositionResponse {
291    pub monotonic_time: i64,
292    pub ring_position: u32,
293}
294
295impl fidl::Persistable for DeviceGetPositionResponse {}
296
297#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
298#[repr(C)]
299pub struct FormatRange {
300    /// Has type audio_sample_format_t (see zircon/device/audio.h)
301    pub sample_format_flags: u32,
302    pub min_frame_rate: u32,
303    pub max_frame_rate: u32,
304    pub min_channels: u8,
305    pub max_channels: u8,
306    /// Bitfield of `ASF_RANGE_FLAG_FPS_*` flags (see zircon/device/audio.h)
307    pub rate_family_flags: u16,
308}
309
310impl fidl::Persistable for FormatRange {}
311
312/// Set restrictions for the device ring buffer. This must be called before
313/// calling `Add()`, or after `Remove()`. Once the device is activated, the
314/// ring buffer and its size are returned by the driver in response to an
315/// `AUDIO_RB_CMD_GET_BUFFER` command on the ring buffer channel.
316/// Note: both min_frames and max_frames must be multiples of modulo_frames.
317#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
318#[repr(C)]
319pub struct RingBufferConstraints {
320    /// The ring buffer must have at least this many frames.
321    /// Must be a multiple of `modulo_frames`.
322    pub min_frames: u32,
323    /// The ring buffer can have at most this many frames.
324    /// Must be a multiple of `modulo_frames`.
325    pub max_frames: u32,
326    /// The ring buffer must have a multiple of this many frames.
327    /// Cannot be zero.
328    pub modulo_frames: u32,
329}
330
331impl fidl::Persistable for RingBufferConstraints {}
332
333#[derive(Clone, Debug, Default, PartialEq)]
334pub struct ClockProperties {
335    /// The clock domain is an int32 provided by the clock tree to an audio
336    /// driver. special values for `CLOCK_DOMAIN_MONOTONIC` (0), and
337    /// `CLOCK_DOMAIN_EXTERNAL` (-1) (not locally controllable) are defined in
338    /// `fuchsia.hardware.audio`. Note: other than -1, clients should treat any
339    /// negative `clock_domain` value as invalid.
340    ///
341    /// Optional.
342    pub domain: Option<i32>,
343    /// Rate-adjustment value for this clock. If omitted, treated as 0 ppm.
344    ///
345    /// Optional.
346    pub rate_adjustment_ppm: Option<i32>,
347    #[doc(hidden)]
348    pub __source_breaking: fidl::marker::SourceBreaking,
349}
350
351impl fidl::Persistable for ClockProperties {}
352
353/// Configuration for a fuchsia.hardware.audio/Codec driver.
354#[derive(Clone, Debug, Default, PartialEq)]
355pub struct Codec {
356    /// Device type is input (true) or output (false).
357    /// If unspecified, then the driver may be used for both input and output.
358    ///
359    /// Optional.
360    pub is_input: Option<bool>,
361    /// Configuration for the device's DAI interconnect.
362    ///
363    /// Required.
364    pub dai_interconnect: Option<DaiInterconnect>,
365    /// Configuration of the device's plug state.
366    ///
367    /// Required.
368    pub plug_properties: Option<PlugProperties>,
369    #[doc(hidden)]
370    pub __source_breaking: fidl::marker::SourceBreaking,
371}
372
373impl fidl::Persistable for Codec {}
374
375/// Configuration for a fuchsia.hardware.audio/Composite driver.
376#[derive(Clone, Debug, Default, PartialEq)]
377pub struct Composite {
378    /// Ring buffers configuration.
379    ///
380    /// Required.
381    pub ring_buffers: Option<Vec<CompositeRingBuffer>>,
382    /// DAI interconnects configurations.
383    ///
384    /// Required.
385    pub dai_interconnects: Option<Vec<CompositeDaiInterconnect>>,
386    /// Configuration for the device's clock.
387    ///
388    /// Required.
389    pub clock_properties: Option<ClockProperties>,
390    /// Topologies supported via the signalprocessing API.
391    ///
392    /// Optional.
393    pub topologies: Option<Vec<fidl_fuchsia_hardware_audio_signalprocessing_common::Topology>>,
394    /// Packet streams configurations.
395    ///
396    /// Required.
397    pub packet_streams: Option<Vec<CompositePacketStream>>,
398    #[doc(hidden)]
399    pub __source_breaking: fidl::marker::SourceBreaking,
400}
401
402impl fidl::Persistable for Composite {}
403
404/// Configuration for a DAI interconnect as used by a Composite driver.
405#[derive(Clone, Debug, Default, PartialEq)]
406pub struct CompositeDaiInterconnect {
407    /// Signal processing id for this composite device DAI interconnect.
408    ///
409    /// Required.
410    pub id: Option<u64>,
411    /// Configuration for this DAI interconnect.
412    ///
413    /// Required.
414    pub dai_interconnect: Option<DaiInterconnect>,
415    #[doc(hidden)]
416    pub __source_breaking: fidl::marker::SourceBreaking,
417}
418
419impl fidl::Persistable for CompositeDaiInterconnect {}
420
421/// Configuration for a fuchsia.hardware.audio/PacketStreamControl as used by a Composite driver.
422#[derive(Clone, Debug, Default, PartialEq)]
423pub struct CompositePacketStream {
424    /// Signal processing id for this composite device packet stream.
425    ///
426    /// Required.
427    pub id: Option<u64>,
428    /// Configuration for this packet stream.
429    ///
430    /// Required.
431    pub packet_stream: Option<PacketStream>,
432    #[doc(hidden)]
433    pub __source_breaking: fidl::marker::SourceBreaking,
434}
435
436impl fidl::Persistable for CompositePacketStream {}
437
438/// Configuration for a fuchsia.hardware.audio/RingBuffer as used by a Composite driver.
439#[derive(Clone, Debug, Default, PartialEq)]
440pub struct CompositeRingBuffer {
441    /// Signal processing id for this composite device ring buffer.
442    ///
443    /// Required.
444    pub id: Option<u64>,
445    /// Configuration for this ring buffer.
446    ///
447    /// Required.
448    pub ring_buffer: Option<RingBuffer>,
449    #[doc(hidden)]
450    pub __source_breaking: fidl::marker::SourceBreaking,
451}
452
453impl fidl::Persistable for CompositeRingBuffer {}
454
455/// Configures a virtual audio device.
456#[derive(Clone, Debug, Default, PartialEq)]
457pub struct Configuration {
458    /// Device's name.
459    ///
460    /// Optional.
461    pub device_name: Option<String>,
462    /// Device manufacturer's name.
463    ///
464    /// Optional.
465    pub manufacturer_name: Option<String>,
466    /// Device's product name.
467    ///
468    /// Optional.
469    pub product_name: Option<String>,
470    /// Device's unique identifier, a 16 byte string.
471    /// This field is only valid for `device_type` `STREAM_CONFIG` and `CODEC`.
472    /// If it is specified for another device_type, the AddDevice call will
473    /// fail with `INVALID_ARGS`.
474    ///
475    /// Optional.
476    pub unique_id: Option<[u8; 16]>,
477    /// The configuration specific to this device type.
478    /// The device type is determined by which `DeviceSpecific` union
479    /// member is defined.
480    ///
481    /// Required.
482    pub device_specific: Option<DeviceSpecific>,
483    #[doc(hidden)]
484    pub __source_breaking: fidl::marker::SourceBreaking,
485}
486
487impl fidl::Persistable for Configuration {}
488
489/// Configuration for a fuchsia.hardware.audio/Dai driver.
490#[derive(Clone, Debug, Default, PartialEq)]
491pub struct Dai {
492    /// Device type is input (true) or output (false).
493    ///
494    /// Optional.
495    pub is_input: Option<bool>,
496    /// Configuration for the device ring buffer.
497    ///
498    /// Required.
499    pub ring_buffer: Option<RingBuffer>,
500    /// Configuration for the device DAI interconnect.
501    ///
502    /// Required.
503    pub dai_interconnect: Option<DaiInterconnect>,
504    /// Configuration for the device's clock.
505    ///
506    /// Required.
507    pub clock_properties: Option<ClockProperties>,
508    #[doc(hidden)]
509    pub __source_breaking: fidl::marker::SourceBreaking,
510}
511
512impl fidl::Persistable for Dai {}
513
514/// Configuration for a DAI interconnect.
515#[derive(Clone, Debug, Default, PartialEq)]
516pub struct DaiInterconnect {
517    /// DAI interconnect supported formats.
518    ///
519    /// Required.
520    pub dai_supported_formats: Option<Vec<fidl_fuchsia_hardware_audio_common::DaiSupportedFormats>>,
521    #[doc(hidden)]
522    pub __source_breaking: fidl::marker::SourceBreaking,
523}
524
525impl fidl::Persistable for DaiInterconnect {}
526
527#[derive(Clone, Debug, Default, PartialEq)]
528pub struct Direction {
529    /// Device type is input (true) or output (false)
530    /// If unspecified, then the driver may be used for both input and output.
531    ///
532    /// For StreamConfig devices `is_input` is required.
533    /// For Dai devices `is_input` is required.
534    /// For Codec devices `is_input` is optional.
535    /// For Composite devices `is_input` is ignored.
536    ///
537    /// Optional.
538    pub is_input: Option<bool>,
539    #[doc(hidden)]
540    pub __source_breaking: fidl::marker::SourceBreaking,
541}
542
543impl fidl::Persistable for Direction {}
544
545#[derive(Clone, Debug, Default, PartialEq)]
546pub struct GainProperties {
547    /// The initial gain state at device initialization time.
548    ///
549    /// Required.
550    pub gain_state: Option<fidl_fuchsia_hardware_audio_common::GainState>,
551    /// The device's minimum gain, in decibels.
552    ///
553    /// Optional.
554    pub min_gain_db: Option<f32>,
555    /// The device's maximum gain, in decibels.
556    ///
557    /// Optional.
558    pub max_gain_db: Option<f32>,
559    /// The precision of each gain-change step, in decibels.
560    ///
561    /// Optional.
562    pub gain_step_db: Option<f32>,
563    /// If true, the device contains a distinct MUTE control. If false or
564    /// absent, it does not.
565    ///
566    /// Optional.
567    pub can_mute: Option<bool>,
568    /// Automatic Gain Control. If absent, this hardware does not support AGC.
569    ///
570    /// Optional.
571    pub can_agc: Option<bool>,
572    #[doc(hidden)]
573    pub __source_breaking: fidl::marker::SourceBreaking,
574}
575
576impl fidl::Persistable for GainProperties {}
577
578/// Configuration for a fuchsia.hardware.audio/PacketStreamControl.
579#[derive(Clone, Debug, Default, PartialEq)]
580pub struct PacketStream {
581    /// The buffer methods supported by this driver.
582    ///
583    /// Required.
584    pub supported_buffer_types: Option<fidl_fuchsia_hardware_audio_common::BufferType>,
585    /// When set to true, indicates that the packet-stream runs in a different cache coherency
586    /// domain. Clients must ensure data writes are flushed to main memory (during output)
587    /// or invalidated before reading (during input).
588    ///
589    /// Optional.
590    pub needs_cache_flush_or_invalidate: Option<bool>,
591    #[doc(hidden)]
592    pub __source_breaking: fidl::marker::SourceBreaking,
593}
594
595impl fidl::Persistable for PacketStream {}
596
597#[derive(Clone, Debug, Default, PartialEq)]
598pub struct PlugProperties {
599    /// The initial plug state at device initialization time.
600    ///
601    /// Required.
602    pub plug_state: Option<fidl_fuchsia_hardware_audio_common::PlugState>,
603    /// Plug Detect Capabilities.
604    ///
605    /// Optional.
606    pub plug_detect_capabilities:
607        Option<fidl_fuchsia_hardware_audio_common::PlugDetectCapabilities>,
608    #[doc(hidden)]
609    pub __source_breaking: fidl::marker::SourceBreaking,
610}
611
612impl fidl::Persistable for PlugProperties {}
613
614/// Configuration for a fuchsia.hardware.audio/RingBuffer.
615#[derive(Clone, Debug, Default, PartialEq)]
616pub struct RingBuffer {
617    /// Driver transfer bytes.
618    ///
619    /// Optional.
620    pub driver_transfer_bytes: Option<u32>,
621    /// Internal delay.
622    ///
623    /// Optional.
624    pub internal_delay: Option<i64>,
625    /// External delay.
626    ///
627    /// Optional.
628    pub external_delay: Option<i64>,
629    /// Supported ring buffer format ranges for this ring buffer.
630    ///
631    /// Required.
632    pub supported_formats: Option<Vec<FormatRange>>,
633    /// Constraints on the ring buffer.
634    /// If unspecified, there are no constraints.
635    ///
636    /// Optional.
637    pub ring_buffer_constraints: Option<RingBufferConstraints>,
638    /// Notification frequency.
639    /// This can be changed later with SetNotificationFrequency.
640    /// If unspecified, the notification frequency will be the same as that
641    /// specified by the client when retrieving the RingBuffer VMO.
642    ///
643    /// Optional.
644    pub notifications_per_ring: Option<u32>,
645    #[doc(hidden)]
646    pub __source_breaking: fidl::marker::SourceBreaking,
647}
648
649impl fidl::Persistable for RingBuffer {}
650
651/// Configuration for a fuchsia.hardware.audio/StreamConfig driver.
652#[derive(Clone, Debug, Default, PartialEq)]
653pub struct StreamConfig {
654    /// Device type is input (true) or output (false).
655    /// This is required such that a user can find a device in devfs in either
656    /// the `/dev/class/audio-output' or `/dev/class/audio-input`, otherwise it
657    /// would be optional such that a driver could be misconfigured on purpose to
658    /// not have an `is_input` field.
659    ///
660    /// Required.
661    pub is_input: Option<bool>,
662    /// Configuration for the device ring buffer.
663    ///
664    /// Required.
665    pub ring_buffer: Option<RingBuffer>,
666    /// Configuration for the device's clock.
667    ///
668    /// Required.
669    pub clock_properties: Option<ClockProperties>,
670    /// Configuration of the device gain.
671    ///
672    /// Required.
673    pub gain_properties: Option<GainProperties>,
674    /// Configuration of the device's plug state.
675    ///
676    /// Required.
677    pub plug_properties: Option<PlugProperties>,
678    #[doc(hidden)]
679    pub __source_breaking: fidl::marker::SourceBreaking,
680}
681
682impl fidl::Persistable for StreamConfig {}
683
684/// Configuration for various types of drivers.
685#[derive(Clone, Debug)]
686pub enum DeviceSpecific {
687    /// Configuration for a fuchsia.hardware.audio/StreamConfig driver.
688    StreamConfig(StreamConfig),
689    /// Configuration for a fuchsia.hardware.audio/Dai driver.
690    Dai(Dai),
691    /// Configuration for a fuchsia.hardware.audio/Codec driver.
692    Codec(Codec),
693    /// Configuration for a fuchsia.hardware.audio/Composite driver.
694    Composite(Composite),
695    #[doc(hidden)]
696    __SourceBreaking { unknown_ordinal: u64 },
697}
698
699/// Pattern that matches an unknown `DeviceSpecific` member.
700#[macro_export]
701macro_rules! DeviceSpecificUnknown {
702    () => {
703        _
704    };
705}
706
707// Custom PartialEq so that unknown variants are not equal to themselves.
708impl PartialEq for DeviceSpecific {
709    fn eq(&self, other: &Self) -> bool {
710        match (self, other) {
711            (Self::StreamConfig(x), Self::StreamConfig(y)) => *x == *y,
712            (Self::Dai(x), Self::Dai(y)) => *x == *y,
713            (Self::Codec(x), Self::Codec(y)) => *x == *y,
714            (Self::Composite(x), Self::Composite(y)) => *x == *y,
715            _ => false,
716        }
717    }
718}
719
720impl DeviceSpecific {
721    #[inline]
722    pub fn ordinal(&self) -> u64 {
723        match *self {
724            Self::StreamConfig(_) => 1,
725            Self::Dai(_) => 2,
726            Self::Codec(_) => 3,
727            Self::Composite(_) => 4,
728            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
729        }
730    }
731
732    #[inline]
733    pub fn unknown_variant_for_testing() -> Self {
734        Self::__SourceBreaking { unknown_ordinal: 0 }
735    }
736
737    #[inline]
738    pub fn is_unknown(&self) -> bool {
739        match self {
740            Self::__SourceBreaking { .. } => true,
741            _ => false,
742        }
743    }
744}
745
746impl fidl::Persistable for DeviceSpecific {}
747
748pub mod control_ordinals {
749    pub const GET_DEFAULT_CONFIGURATION: u64 = 0x18fbd1298daa19e9;
750    pub const ADD_DEVICE: u64 = 0x6b5fff2f3ed7ce9;
751    pub const GET_NUM_DEVICES: u64 = 0x256704ce2f8097af;
752    pub const REMOVE_ALL: u64 = 0x7904287969087c4b;
753}
754
755pub mod device_ordinals {
756    pub const GET_FORMAT: u64 = 0x6107d32083bacc1b;
757    pub const ON_SET_FORMAT: u64 = 0x2a547759ab3678b2;
758    pub const GET_GAIN: u64 = 0x6d85d82b49fb28e9;
759    pub const ON_SET_GAIN: u64 = 0x31fffec81b3a9393;
760    pub const GET_BUFFER: u64 = 0x38e202be0db060d0;
761    pub const ON_BUFFER_CREATED: u64 = 0x5c2eb72e264afefd;
762    pub const SET_NOTIFICATION_FREQUENCY: u64 = 0x45789b88ca9185b8;
763    pub const ON_START: u64 = 0x498f0b7e64d7ca58;
764    pub const ON_STOP: u64 = 0x6f5d4d2fe223ae5b;
765    pub const GET_POSITION: u64 = 0x6fe5bbf9065258e8;
766    pub const ON_POSITION_NOTIFY: u64 = 0x79274c4de9013585;
767    pub const CHANGE_PLUG_STATE: u64 = 0x61aa2d370caaf8f0;
768    pub const ADJUST_CLOCK_RATE: u64 = 0x754661f655350134;
769}
770
771mod internal {
772    use super::*;
773    unsafe impl fidl::encoding::TypeMarker for DeviceType {
774        type Owned = Self;
775
776        #[inline(always)]
777        fn inline_align(_context: fidl::encoding::Context) -> usize {
778            std::mem::align_of::<u32>()
779        }
780
781        #[inline(always)]
782        fn inline_size(_context: fidl::encoding::Context) -> usize {
783            std::mem::size_of::<u32>()
784        }
785
786        #[inline(always)]
787        fn encode_is_copy() -> bool {
788            false
789        }
790
791        #[inline(always)]
792        fn decode_is_copy() -> bool {
793            false
794        }
795    }
796
797    impl fidl::encoding::ValueTypeMarker for DeviceType {
798        type Borrowed<'a> = Self;
799        #[inline(always)]
800        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
801            *value
802        }
803    }
804
805    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for DeviceType {
806        #[inline]
807        unsafe fn encode(
808            self,
809            encoder: &mut fidl::encoding::Encoder<'_, D>,
810            offset: usize,
811            _depth: fidl::encoding::Depth,
812        ) -> fidl::Result<()> {
813            encoder.debug_check_bounds::<Self>(offset);
814            encoder.write_num(self.into_primitive(), offset);
815            Ok(())
816        }
817    }
818
819    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceType {
820        #[inline(always)]
821        fn new_empty() -> Self {
822            Self::unknown()
823        }
824
825        #[inline]
826        unsafe fn decode(
827            &mut self,
828            decoder: &mut fidl::encoding::Decoder<'_, D>,
829            offset: usize,
830            _depth: fidl::encoding::Depth,
831        ) -> fidl::Result<()> {
832            decoder.debug_check_bounds::<Self>(offset);
833            let prim = decoder.read_num::<u32>(offset);
834
835            *self = Self::from_primitive_allow_unknown(prim);
836            Ok(())
837        }
838    }
839    unsafe impl fidl::encoding::TypeMarker for Error {
840        type Owned = Self;
841
842        #[inline(always)]
843        fn inline_align(_context: fidl::encoding::Context) -> usize {
844            std::mem::align_of::<u32>()
845        }
846
847        #[inline(always)]
848        fn inline_size(_context: fidl::encoding::Context) -> usize {
849            std::mem::size_of::<u32>()
850        }
851
852        #[inline(always)]
853        fn encode_is_copy() -> bool {
854            false
855        }
856
857        #[inline(always)]
858        fn decode_is_copy() -> bool {
859            false
860        }
861    }
862
863    impl fidl::encoding::ValueTypeMarker for Error {
864        type Borrowed<'a> = Self;
865        #[inline(always)]
866        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
867            *value
868        }
869    }
870
871    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Error {
872        #[inline]
873        unsafe fn encode(
874            self,
875            encoder: &mut fidl::encoding::Encoder<'_, D>,
876            offset: usize,
877            _depth: fidl::encoding::Depth,
878        ) -> fidl::Result<()> {
879            encoder.debug_check_bounds::<Self>(offset);
880            encoder.write_num(self.into_primitive(), offset);
881            Ok(())
882        }
883    }
884
885    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Error {
886        #[inline(always)]
887        fn new_empty() -> Self {
888            Self::unknown()
889        }
890
891        #[inline]
892        unsafe fn decode(
893            &mut self,
894            decoder: &mut fidl::encoding::Decoder<'_, D>,
895            offset: usize,
896            _depth: fidl::encoding::Depth,
897        ) -> fidl::Result<()> {
898            decoder.debug_check_bounds::<Self>(offset);
899            let prim = decoder.read_num::<u32>(offset);
900
901            *self = Self::from_primitive_allow_unknown(prim);
902            Ok(())
903        }
904    }
905
906    impl fidl::encoding::ValueTypeMarker for ControlGetDefaultConfigurationRequest {
907        type Borrowed<'a> = &'a Self;
908        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
909            value
910        }
911    }
912
913    unsafe impl fidl::encoding::TypeMarker for ControlGetDefaultConfigurationRequest {
914        type Owned = Self;
915
916        #[inline(always)]
917        fn inline_align(_context: fidl::encoding::Context) -> usize {
918            8
919        }
920
921        #[inline(always)]
922        fn inline_size(_context: fidl::encoding::Context) -> usize {
923            24
924        }
925    }
926
927    unsafe impl<D: fidl::encoding::ResourceDialect>
928        fidl::encoding::Encode<ControlGetDefaultConfigurationRequest, D>
929        for &ControlGetDefaultConfigurationRequest
930    {
931        #[inline]
932        unsafe fn encode(
933            self,
934            encoder: &mut fidl::encoding::Encoder<'_, D>,
935            offset: usize,
936            _depth: fidl::encoding::Depth,
937        ) -> fidl::Result<()> {
938            encoder.debug_check_bounds::<ControlGetDefaultConfigurationRequest>(offset);
939            // Delegate to tuple encoding.
940            fidl::encoding::Encode::<ControlGetDefaultConfigurationRequest, D>::encode(
941                (
942                    <DeviceType as fidl::encoding::ValueTypeMarker>::borrow(&self.type_),
943                    <Direction as fidl::encoding::ValueTypeMarker>::borrow(&self.direction),
944                ),
945                encoder,
946                offset,
947                _depth,
948            )
949        }
950    }
951    unsafe impl<
952        D: fidl::encoding::ResourceDialect,
953        T0: fidl::encoding::Encode<DeviceType, D>,
954        T1: fidl::encoding::Encode<Direction, D>,
955    > fidl::encoding::Encode<ControlGetDefaultConfigurationRequest, D> for (T0, T1)
956    {
957        #[inline]
958        unsafe fn encode(
959            self,
960            encoder: &mut fidl::encoding::Encoder<'_, D>,
961            offset: usize,
962            depth: fidl::encoding::Depth,
963        ) -> fidl::Result<()> {
964            encoder.debug_check_bounds::<ControlGetDefaultConfigurationRequest>(offset);
965            // Zero out padding regions. There's no need to apply masks
966            // because the unmasked parts will be overwritten by fields.
967            unsafe {
968                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
969                (ptr as *mut u64).write_unaligned(0);
970            }
971            // Write the fields.
972            self.0.encode(encoder, offset + 0, depth)?;
973            self.1.encode(encoder, offset + 8, depth)?;
974            Ok(())
975        }
976    }
977
978    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
979        for ControlGetDefaultConfigurationRequest
980    {
981        #[inline(always)]
982        fn new_empty() -> Self {
983            Self {
984                type_: fidl::new_empty!(DeviceType, D),
985                direction: fidl::new_empty!(Direction, D),
986            }
987        }
988
989        #[inline]
990        unsafe fn decode(
991            &mut self,
992            decoder: &mut fidl::encoding::Decoder<'_, D>,
993            offset: usize,
994            _depth: fidl::encoding::Depth,
995        ) -> fidl::Result<()> {
996            decoder.debug_check_bounds::<Self>(offset);
997            // Verify that padding bytes are zero.
998            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
999            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1000            let mask = 0xffffffff00000000u64;
1001            let maskedval = padval & mask;
1002            if maskedval != 0 {
1003                return Err(fidl::Error::NonZeroPadding {
1004                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1005                });
1006            }
1007            fidl::decode!(DeviceType, D, &mut self.type_, decoder, offset + 0, _depth)?;
1008            fidl::decode!(Direction, D, &mut self.direction, decoder, offset + 8, _depth)?;
1009            Ok(())
1010        }
1011    }
1012
1013    impl fidl::encoding::ValueTypeMarker for ControlGetNumDevicesResponse {
1014        type Borrowed<'a> = &'a Self;
1015        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1016            value
1017        }
1018    }
1019
1020    unsafe impl fidl::encoding::TypeMarker for ControlGetNumDevicesResponse {
1021        type Owned = Self;
1022
1023        #[inline(always)]
1024        fn inline_align(_context: fidl::encoding::Context) -> usize {
1025            4
1026        }
1027
1028        #[inline(always)]
1029        fn inline_size(_context: fidl::encoding::Context) -> usize {
1030            12
1031        }
1032        #[inline(always)]
1033        fn encode_is_copy() -> bool {
1034            true
1035        }
1036
1037        #[inline(always)]
1038        fn decode_is_copy() -> bool {
1039            true
1040        }
1041    }
1042
1043    unsafe impl<D: fidl::encoding::ResourceDialect>
1044        fidl::encoding::Encode<ControlGetNumDevicesResponse, D> for &ControlGetNumDevicesResponse
1045    {
1046        #[inline]
1047        unsafe fn encode(
1048            self,
1049            encoder: &mut fidl::encoding::Encoder<'_, D>,
1050            offset: usize,
1051            _depth: fidl::encoding::Depth,
1052        ) -> fidl::Result<()> {
1053            encoder.debug_check_bounds::<ControlGetNumDevicesResponse>(offset);
1054            unsafe {
1055                // Copy the object into the buffer.
1056                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1057                (buf_ptr as *mut ControlGetNumDevicesResponse)
1058                    .write_unaligned((self as *const ControlGetNumDevicesResponse).read());
1059                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1060                // done second because the memcpy will write garbage to these bytes.
1061            }
1062            Ok(())
1063        }
1064    }
1065    unsafe impl<
1066        D: fidl::encoding::ResourceDialect,
1067        T0: fidl::encoding::Encode<u32, D>,
1068        T1: fidl::encoding::Encode<u32, D>,
1069        T2: fidl::encoding::Encode<u32, D>,
1070    > fidl::encoding::Encode<ControlGetNumDevicesResponse, D> for (T0, T1, T2)
1071    {
1072        #[inline]
1073        unsafe fn encode(
1074            self,
1075            encoder: &mut fidl::encoding::Encoder<'_, D>,
1076            offset: usize,
1077            depth: fidl::encoding::Depth,
1078        ) -> fidl::Result<()> {
1079            encoder.debug_check_bounds::<ControlGetNumDevicesResponse>(offset);
1080            // Zero out padding regions. There's no need to apply masks
1081            // because the unmasked parts will be overwritten by fields.
1082            // Write the fields.
1083            self.0.encode(encoder, offset + 0, depth)?;
1084            self.1.encode(encoder, offset + 4, depth)?;
1085            self.2.encode(encoder, offset + 8, depth)?;
1086            Ok(())
1087        }
1088    }
1089
1090    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1091        for ControlGetNumDevicesResponse
1092    {
1093        #[inline(always)]
1094        fn new_empty() -> Self {
1095            Self {
1096                num_input_devices: fidl::new_empty!(u32, D),
1097                num_output_devices: fidl::new_empty!(u32, D),
1098                num_unspecified_direction_devices: fidl::new_empty!(u32, D),
1099            }
1100        }
1101
1102        #[inline]
1103        unsafe fn decode(
1104            &mut self,
1105            decoder: &mut fidl::encoding::Decoder<'_, D>,
1106            offset: usize,
1107            _depth: fidl::encoding::Depth,
1108        ) -> fidl::Result<()> {
1109            decoder.debug_check_bounds::<Self>(offset);
1110            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1111            // Verify that padding bytes are zero.
1112            // Copy from the buffer into the object.
1113            unsafe {
1114                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
1115            }
1116            Ok(())
1117        }
1118    }
1119
1120    impl fidl::encoding::ValueTypeMarker for ControlGetDefaultConfigurationResponse {
1121        type Borrowed<'a> = &'a Self;
1122        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1123            value
1124        }
1125    }
1126
1127    unsafe impl fidl::encoding::TypeMarker for ControlGetDefaultConfigurationResponse {
1128        type Owned = Self;
1129
1130        #[inline(always)]
1131        fn inline_align(_context: fidl::encoding::Context) -> usize {
1132            8
1133        }
1134
1135        #[inline(always)]
1136        fn inline_size(_context: fidl::encoding::Context) -> usize {
1137            16
1138        }
1139    }
1140
1141    unsafe impl<D: fidl::encoding::ResourceDialect>
1142        fidl::encoding::Encode<ControlGetDefaultConfigurationResponse, D>
1143        for &ControlGetDefaultConfigurationResponse
1144    {
1145        #[inline]
1146        unsafe fn encode(
1147            self,
1148            encoder: &mut fidl::encoding::Encoder<'_, D>,
1149            offset: usize,
1150            _depth: fidl::encoding::Depth,
1151        ) -> fidl::Result<()> {
1152            encoder.debug_check_bounds::<ControlGetDefaultConfigurationResponse>(offset);
1153            // Delegate to tuple encoding.
1154            fidl::encoding::Encode::<ControlGetDefaultConfigurationResponse, D>::encode(
1155                (<Configuration as fidl::encoding::ValueTypeMarker>::borrow(&self.config),),
1156                encoder,
1157                offset,
1158                _depth,
1159            )
1160        }
1161    }
1162    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<Configuration, D>>
1163        fidl::encoding::Encode<ControlGetDefaultConfigurationResponse, D> for (T0,)
1164    {
1165        #[inline]
1166        unsafe fn encode(
1167            self,
1168            encoder: &mut fidl::encoding::Encoder<'_, D>,
1169            offset: usize,
1170            depth: fidl::encoding::Depth,
1171        ) -> fidl::Result<()> {
1172            encoder.debug_check_bounds::<ControlGetDefaultConfigurationResponse>(offset);
1173            // Zero out padding regions. There's no need to apply masks
1174            // because the unmasked parts will be overwritten by fields.
1175            // Write the fields.
1176            self.0.encode(encoder, offset + 0, depth)?;
1177            Ok(())
1178        }
1179    }
1180
1181    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1182        for ControlGetDefaultConfigurationResponse
1183    {
1184        #[inline(always)]
1185        fn new_empty() -> Self {
1186            Self { config: fidl::new_empty!(Configuration, D) }
1187        }
1188
1189        #[inline]
1190        unsafe fn decode(
1191            &mut self,
1192            decoder: &mut fidl::encoding::Decoder<'_, D>,
1193            offset: usize,
1194            _depth: fidl::encoding::Depth,
1195        ) -> fidl::Result<()> {
1196            decoder.debug_check_bounds::<Self>(offset);
1197            // Verify that padding bytes are zero.
1198            fidl::decode!(Configuration, D, &mut self.config, decoder, offset + 0, _depth)?;
1199            Ok(())
1200        }
1201    }
1202
1203    impl fidl::encoding::ValueTypeMarker for DeviceAdjustClockRateRequest {
1204        type Borrowed<'a> = &'a Self;
1205        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1206            value
1207        }
1208    }
1209
1210    unsafe impl fidl::encoding::TypeMarker for DeviceAdjustClockRateRequest {
1211        type Owned = Self;
1212
1213        #[inline(always)]
1214        fn inline_align(_context: fidl::encoding::Context) -> usize {
1215            4
1216        }
1217
1218        #[inline(always)]
1219        fn inline_size(_context: fidl::encoding::Context) -> usize {
1220            4
1221        }
1222        #[inline(always)]
1223        fn encode_is_copy() -> bool {
1224            true
1225        }
1226
1227        #[inline(always)]
1228        fn decode_is_copy() -> bool {
1229            true
1230        }
1231    }
1232
1233    unsafe impl<D: fidl::encoding::ResourceDialect>
1234        fidl::encoding::Encode<DeviceAdjustClockRateRequest, D> for &DeviceAdjustClockRateRequest
1235    {
1236        #[inline]
1237        unsafe fn encode(
1238            self,
1239            encoder: &mut fidl::encoding::Encoder<'_, D>,
1240            offset: usize,
1241            _depth: fidl::encoding::Depth,
1242        ) -> fidl::Result<()> {
1243            encoder.debug_check_bounds::<DeviceAdjustClockRateRequest>(offset);
1244            unsafe {
1245                // Copy the object into the buffer.
1246                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1247                (buf_ptr as *mut DeviceAdjustClockRateRequest)
1248                    .write_unaligned((self as *const DeviceAdjustClockRateRequest).read());
1249                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1250                // done second because the memcpy will write garbage to these bytes.
1251            }
1252            Ok(())
1253        }
1254    }
1255    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
1256        fidl::encoding::Encode<DeviceAdjustClockRateRequest, D> for (T0,)
1257    {
1258        #[inline]
1259        unsafe fn encode(
1260            self,
1261            encoder: &mut fidl::encoding::Encoder<'_, D>,
1262            offset: usize,
1263            depth: fidl::encoding::Depth,
1264        ) -> fidl::Result<()> {
1265            encoder.debug_check_bounds::<DeviceAdjustClockRateRequest>(offset);
1266            // Zero out padding regions. There's no need to apply masks
1267            // because the unmasked parts will be overwritten by fields.
1268            // Write the fields.
1269            self.0.encode(encoder, offset + 0, depth)?;
1270            Ok(())
1271        }
1272    }
1273
1274    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1275        for DeviceAdjustClockRateRequest
1276    {
1277        #[inline(always)]
1278        fn new_empty() -> Self {
1279            Self { ppm_from_monotonic: fidl::new_empty!(i32, D) }
1280        }
1281
1282        #[inline]
1283        unsafe fn decode(
1284            &mut self,
1285            decoder: &mut fidl::encoding::Decoder<'_, D>,
1286            offset: usize,
1287            _depth: fidl::encoding::Depth,
1288        ) -> fidl::Result<()> {
1289            decoder.debug_check_bounds::<Self>(offset);
1290            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1291            // Verify that padding bytes are zero.
1292            // Copy from the buffer into the object.
1293            unsafe {
1294                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1295            }
1296            Ok(())
1297        }
1298    }
1299
1300    impl fidl::encoding::ValueTypeMarker for DeviceChangePlugStateRequest {
1301        type Borrowed<'a> = &'a Self;
1302        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1303            value
1304        }
1305    }
1306
1307    unsafe impl fidl::encoding::TypeMarker for DeviceChangePlugStateRequest {
1308        type Owned = Self;
1309
1310        #[inline(always)]
1311        fn inline_align(_context: fidl::encoding::Context) -> usize {
1312            8
1313        }
1314
1315        #[inline(always)]
1316        fn inline_size(_context: fidl::encoding::Context) -> usize {
1317            16
1318        }
1319    }
1320
1321    unsafe impl<D: fidl::encoding::ResourceDialect>
1322        fidl::encoding::Encode<DeviceChangePlugStateRequest, D> for &DeviceChangePlugStateRequest
1323    {
1324        #[inline]
1325        unsafe fn encode(
1326            self,
1327            encoder: &mut fidl::encoding::Encoder<'_, D>,
1328            offset: usize,
1329            _depth: fidl::encoding::Depth,
1330        ) -> fidl::Result<()> {
1331            encoder.debug_check_bounds::<DeviceChangePlugStateRequest>(offset);
1332            // Delegate to tuple encoding.
1333            fidl::encoding::Encode::<DeviceChangePlugStateRequest, D>::encode(
1334                (
1335                    <i64 as fidl::encoding::ValueTypeMarker>::borrow(&self.plug_change_time),
1336                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.plugged),
1337                ),
1338                encoder,
1339                offset,
1340                _depth,
1341            )
1342        }
1343    }
1344    unsafe impl<
1345        D: fidl::encoding::ResourceDialect,
1346        T0: fidl::encoding::Encode<i64, D>,
1347        T1: fidl::encoding::Encode<bool, D>,
1348    > fidl::encoding::Encode<DeviceChangePlugStateRequest, D> for (T0, T1)
1349    {
1350        #[inline]
1351        unsafe fn encode(
1352            self,
1353            encoder: &mut fidl::encoding::Encoder<'_, D>,
1354            offset: usize,
1355            depth: fidl::encoding::Depth,
1356        ) -> fidl::Result<()> {
1357            encoder.debug_check_bounds::<DeviceChangePlugStateRequest>(offset);
1358            // Zero out padding regions. There's no need to apply masks
1359            // because the unmasked parts will be overwritten by fields.
1360            unsafe {
1361                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
1362                (ptr as *mut u64).write_unaligned(0);
1363            }
1364            // Write the fields.
1365            self.0.encode(encoder, offset + 0, depth)?;
1366            self.1.encode(encoder, offset + 8, depth)?;
1367            Ok(())
1368        }
1369    }
1370
1371    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1372        for DeviceChangePlugStateRequest
1373    {
1374        #[inline(always)]
1375        fn new_empty() -> Self {
1376            Self { plug_change_time: fidl::new_empty!(i64, D), plugged: fidl::new_empty!(bool, D) }
1377        }
1378
1379        #[inline]
1380        unsafe fn decode(
1381            &mut self,
1382            decoder: &mut fidl::encoding::Decoder<'_, D>,
1383            offset: usize,
1384            _depth: fidl::encoding::Depth,
1385        ) -> fidl::Result<()> {
1386            decoder.debug_check_bounds::<Self>(offset);
1387            // Verify that padding bytes are zero.
1388            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
1389            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1390            let mask = 0xffffffffffffff00u64;
1391            let maskedval = padval & mask;
1392            if maskedval != 0 {
1393                return Err(fidl::Error::NonZeroPadding {
1394                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
1395                });
1396            }
1397            fidl::decode!(i64, D, &mut self.plug_change_time, decoder, offset + 0, _depth)?;
1398            fidl::decode!(bool, D, &mut self.plugged, decoder, offset + 8, _depth)?;
1399            Ok(())
1400        }
1401    }
1402
1403    impl fidl::encoding::ValueTypeMarker for DeviceOnPositionNotifyRequest {
1404        type Borrowed<'a> = &'a Self;
1405        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1406            value
1407        }
1408    }
1409
1410    unsafe impl fidl::encoding::TypeMarker for DeviceOnPositionNotifyRequest {
1411        type Owned = Self;
1412
1413        #[inline(always)]
1414        fn inline_align(_context: fidl::encoding::Context) -> usize {
1415            8
1416        }
1417
1418        #[inline(always)]
1419        fn inline_size(_context: fidl::encoding::Context) -> usize {
1420            16
1421        }
1422    }
1423
1424    unsafe impl<D: fidl::encoding::ResourceDialect>
1425        fidl::encoding::Encode<DeviceOnPositionNotifyRequest, D>
1426        for &DeviceOnPositionNotifyRequest
1427    {
1428        #[inline]
1429        unsafe fn encode(
1430            self,
1431            encoder: &mut fidl::encoding::Encoder<'_, D>,
1432            offset: usize,
1433            _depth: fidl::encoding::Depth,
1434        ) -> fidl::Result<()> {
1435            encoder.debug_check_bounds::<DeviceOnPositionNotifyRequest>(offset);
1436            unsafe {
1437                // Copy the object into the buffer.
1438                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1439                (buf_ptr as *mut DeviceOnPositionNotifyRequest)
1440                    .write_unaligned((self as *const DeviceOnPositionNotifyRequest).read());
1441                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1442                // done second because the memcpy will write garbage to these bytes.
1443                let padding_ptr = buf_ptr.offset(8) as *mut u64;
1444                let padding_mask = 0xffffffff00000000u64;
1445                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1446            }
1447            Ok(())
1448        }
1449    }
1450    unsafe impl<
1451        D: fidl::encoding::ResourceDialect,
1452        T0: fidl::encoding::Encode<i64, D>,
1453        T1: fidl::encoding::Encode<u32, D>,
1454    > fidl::encoding::Encode<DeviceOnPositionNotifyRequest, D> for (T0, T1)
1455    {
1456        #[inline]
1457        unsafe fn encode(
1458            self,
1459            encoder: &mut fidl::encoding::Encoder<'_, D>,
1460            offset: usize,
1461            depth: fidl::encoding::Depth,
1462        ) -> fidl::Result<()> {
1463            encoder.debug_check_bounds::<DeviceOnPositionNotifyRequest>(offset);
1464            // Zero out padding regions. There's no need to apply masks
1465            // because the unmasked parts will be overwritten by fields.
1466            unsafe {
1467                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
1468                (ptr as *mut u64).write_unaligned(0);
1469            }
1470            // Write the fields.
1471            self.0.encode(encoder, offset + 0, depth)?;
1472            self.1.encode(encoder, offset + 8, depth)?;
1473            Ok(())
1474        }
1475    }
1476
1477    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1478        for DeviceOnPositionNotifyRequest
1479    {
1480        #[inline(always)]
1481        fn new_empty() -> Self {
1482            Self {
1483                monotonic_time: fidl::new_empty!(i64, D),
1484                ring_position: fidl::new_empty!(u32, D),
1485            }
1486        }
1487
1488        #[inline]
1489        unsafe fn decode(
1490            &mut self,
1491            decoder: &mut fidl::encoding::Decoder<'_, D>,
1492            offset: usize,
1493            _depth: fidl::encoding::Depth,
1494        ) -> fidl::Result<()> {
1495            decoder.debug_check_bounds::<Self>(offset);
1496            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1497            // Verify that padding bytes are zero.
1498            let ptr = unsafe { buf_ptr.offset(8) };
1499            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1500            let mask = 0xffffffff00000000u64;
1501            let maskedval = padval & mask;
1502            if maskedval != 0 {
1503                return Err(fidl::Error::NonZeroPadding {
1504                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
1505                });
1506            }
1507            // Copy from the buffer into the object.
1508            unsafe {
1509                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1510            }
1511            Ok(())
1512        }
1513    }
1514
1515    impl fidl::encoding::ValueTypeMarker for DeviceOnSetFormatRequest {
1516        type Borrowed<'a> = &'a Self;
1517        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1518            value
1519        }
1520    }
1521
1522    unsafe impl fidl::encoding::TypeMarker for DeviceOnSetFormatRequest {
1523        type Owned = Self;
1524
1525        #[inline(always)]
1526        fn inline_align(_context: fidl::encoding::Context) -> usize {
1527            8
1528        }
1529
1530        #[inline(always)]
1531        fn inline_size(_context: fidl::encoding::Context) -> usize {
1532            24
1533        }
1534    }
1535
1536    unsafe impl<D: fidl::encoding::ResourceDialect>
1537        fidl::encoding::Encode<DeviceOnSetFormatRequest, D> for &DeviceOnSetFormatRequest
1538    {
1539        #[inline]
1540        unsafe fn encode(
1541            self,
1542            encoder: &mut fidl::encoding::Encoder<'_, D>,
1543            offset: usize,
1544            _depth: fidl::encoding::Depth,
1545        ) -> fidl::Result<()> {
1546            encoder.debug_check_bounds::<DeviceOnSetFormatRequest>(offset);
1547            unsafe {
1548                // Copy the object into the buffer.
1549                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1550                (buf_ptr as *mut DeviceOnSetFormatRequest)
1551                    .write_unaligned((self as *const DeviceOnSetFormatRequest).read());
1552                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1553                // done second because the memcpy will write garbage to these bytes.
1554                let padding_ptr = buf_ptr.offset(8) as *mut u64;
1555                let padding_mask = 0xffffffff00000000u64;
1556                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1557            }
1558            Ok(())
1559        }
1560    }
1561    unsafe impl<
1562        D: fidl::encoding::ResourceDialect,
1563        T0: fidl::encoding::Encode<u32, D>,
1564        T1: fidl::encoding::Encode<u32, D>,
1565        T2: fidl::encoding::Encode<u32, D>,
1566        T3: fidl::encoding::Encode<i64, D>,
1567    > fidl::encoding::Encode<DeviceOnSetFormatRequest, D> for (T0, T1, T2, T3)
1568    {
1569        #[inline]
1570        unsafe fn encode(
1571            self,
1572            encoder: &mut fidl::encoding::Encoder<'_, D>,
1573            offset: usize,
1574            depth: fidl::encoding::Depth,
1575        ) -> fidl::Result<()> {
1576            encoder.debug_check_bounds::<DeviceOnSetFormatRequest>(offset);
1577            // Zero out padding regions. There's no need to apply masks
1578            // because the unmasked parts will be overwritten by fields.
1579            unsafe {
1580                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
1581                (ptr as *mut u64).write_unaligned(0);
1582            }
1583            // Write the fields.
1584            self.0.encode(encoder, offset + 0, depth)?;
1585            self.1.encode(encoder, offset + 4, depth)?;
1586            self.2.encode(encoder, offset + 8, depth)?;
1587            self.3.encode(encoder, offset + 16, depth)?;
1588            Ok(())
1589        }
1590    }
1591
1592    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1593        for DeviceOnSetFormatRequest
1594    {
1595        #[inline(always)]
1596        fn new_empty() -> Self {
1597            Self {
1598                frames_per_second: fidl::new_empty!(u32, D),
1599                sample_format: fidl::new_empty!(u32, D),
1600                num_channels: fidl::new_empty!(u32, D),
1601                external_delay: fidl::new_empty!(i64, D),
1602            }
1603        }
1604
1605        #[inline]
1606        unsafe fn decode(
1607            &mut self,
1608            decoder: &mut fidl::encoding::Decoder<'_, D>,
1609            offset: usize,
1610            _depth: fidl::encoding::Depth,
1611        ) -> fidl::Result<()> {
1612            decoder.debug_check_bounds::<Self>(offset);
1613            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1614            // Verify that padding bytes are zero.
1615            let ptr = unsafe { buf_ptr.offset(8) };
1616            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1617            let mask = 0xffffffff00000000u64;
1618            let maskedval = padval & mask;
1619            if maskedval != 0 {
1620                return Err(fidl::Error::NonZeroPadding {
1621                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
1622                });
1623            }
1624            // Copy from the buffer into the object.
1625            unsafe {
1626                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 24);
1627            }
1628            Ok(())
1629        }
1630    }
1631
1632    impl fidl::encoding::ValueTypeMarker for DeviceOnSetGainRequest {
1633        type Borrowed<'a> = &'a Self;
1634        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1635            value
1636        }
1637    }
1638
1639    unsafe impl fidl::encoding::TypeMarker for DeviceOnSetGainRequest {
1640        type Owned = Self;
1641
1642        #[inline(always)]
1643        fn inline_align(_context: fidl::encoding::Context) -> usize {
1644            4
1645        }
1646
1647        #[inline(always)]
1648        fn inline_size(_context: fidl::encoding::Context) -> usize {
1649            8
1650        }
1651    }
1652
1653    unsafe impl<D: fidl::encoding::ResourceDialect>
1654        fidl::encoding::Encode<DeviceOnSetGainRequest, D> for &DeviceOnSetGainRequest
1655    {
1656        #[inline]
1657        unsafe fn encode(
1658            self,
1659            encoder: &mut fidl::encoding::Encoder<'_, D>,
1660            offset: usize,
1661            _depth: fidl::encoding::Depth,
1662        ) -> fidl::Result<()> {
1663            encoder.debug_check_bounds::<DeviceOnSetGainRequest>(offset);
1664            // Delegate to tuple encoding.
1665            fidl::encoding::Encode::<DeviceOnSetGainRequest, D>::encode(
1666                (
1667                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.current_mute),
1668                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.current_agc),
1669                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.current_gain_db),
1670                ),
1671                encoder,
1672                offset,
1673                _depth,
1674            )
1675        }
1676    }
1677    unsafe impl<
1678        D: fidl::encoding::ResourceDialect,
1679        T0: fidl::encoding::Encode<bool, D>,
1680        T1: fidl::encoding::Encode<bool, D>,
1681        T2: fidl::encoding::Encode<f32, D>,
1682    > fidl::encoding::Encode<DeviceOnSetGainRequest, D> for (T0, T1, T2)
1683    {
1684        #[inline]
1685        unsafe fn encode(
1686            self,
1687            encoder: &mut fidl::encoding::Encoder<'_, D>,
1688            offset: usize,
1689            depth: fidl::encoding::Depth,
1690        ) -> fidl::Result<()> {
1691            encoder.debug_check_bounds::<DeviceOnSetGainRequest>(offset);
1692            // Zero out padding regions. There's no need to apply masks
1693            // because the unmasked parts will be overwritten by fields.
1694            unsafe {
1695                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1696                (ptr as *mut u32).write_unaligned(0);
1697            }
1698            // Write the fields.
1699            self.0.encode(encoder, offset + 0, depth)?;
1700            self.1.encode(encoder, offset + 1, depth)?;
1701            self.2.encode(encoder, offset + 4, depth)?;
1702            Ok(())
1703        }
1704    }
1705
1706    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1707        for DeviceOnSetGainRequest
1708    {
1709        #[inline(always)]
1710        fn new_empty() -> Self {
1711            Self {
1712                current_mute: fidl::new_empty!(bool, D),
1713                current_agc: fidl::new_empty!(bool, D),
1714                current_gain_db: fidl::new_empty!(f32, D),
1715            }
1716        }
1717
1718        #[inline]
1719        unsafe fn decode(
1720            &mut self,
1721            decoder: &mut fidl::encoding::Decoder<'_, D>,
1722            offset: usize,
1723            _depth: fidl::encoding::Depth,
1724        ) -> fidl::Result<()> {
1725            decoder.debug_check_bounds::<Self>(offset);
1726            // Verify that padding bytes are zero.
1727            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1728            let padval = unsafe { (ptr as *const u32).read_unaligned() };
1729            let mask = 0xffff0000u32;
1730            let maskedval = padval & mask;
1731            if maskedval != 0 {
1732                return Err(fidl::Error::NonZeroPadding {
1733                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1734                });
1735            }
1736            fidl::decode!(bool, D, &mut self.current_mute, decoder, offset + 0, _depth)?;
1737            fidl::decode!(bool, D, &mut self.current_agc, decoder, offset + 1, _depth)?;
1738            fidl::decode!(f32, D, &mut self.current_gain_db, decoder, offset + 4, _depth)?;
1739            Ok(())
1740        }
1741    }
1742
1743    impl fidl::encoding::ValueTypeMarker for DeviceOnStartRequest {
1744        type Borrowed<'a> = &'a Self;
1745        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1746            value
1747        }
1748    }
1749
1750    unsafe impl fidl::encoding::TypeMarker for DeviceOnStartRequest {
1751        type Owned = Self;
1752
1753        #[inline(always)]
1754        fn inline_align(_context: fidl::encoding::Context) -> usize {
1755            8
1756        }
1757
1758        #[inline(always)]
1759        fn inline_size(_context: fidl::encoding::Context) -> usize {
1760            8
1761        }
1762        #[inline(always)]
1763        fn encode_is_copy() -> bool {
1764            true
1765        }
1766
1767        #[inline(always)]
1768        fn decode_is_copy() -> bool {
1769            true
1770        }
1771    }
1772
1773    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceOnStartRequest, D>
1774        for &DeviceOnStartRequest
1775    {
1776        #[inline]
1777        unsafe fn encode(
1778            self,
1779            encoder: &mut fidl::encoding::Encoder<'_, D>,
1780            offset: usize,
1781            _depth: fidl::encoding::Depth,
1782        ) -> fidl::Result<()> {
1783            encoder.debug_check_bounds::<DeviceOnStartRequest>(offset);
1784            unsafe {
1785                // Copy the object into the buffer.
1786                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1787                (buf_ptr as *mut DeviceOnStartRequest)
1788                    .write_unaligned((self as *const DeviceOnStartRequest).read());
1789                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1790                // done second because the memcpy will write garbage to these bytes.
1791            }
1792            Ok(())
1793        }
1794    }
1795    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1796        fidl::encoding::Encode<DeviceOnStartRequest, D> for (T0,)
1797    {
1798        #[inline]
1799        unsafe fn encode(
1800            self,
1801            encoder: &mut fidl::encoding::Encoder<'_, D>,
1802            offset: usize,
1803            depth: fidl::encoding::Depth,
1804        ) -> fidl::Result<()> {
1805            encoder.debug_check_bounds::<DeviceOnStartRequest>(offset);
1806            // Zero out padding regions. There's no need to apply masks
1807            // because the unmasked parts will be overwritten by fields.
1808            // Write the fields.
1809            self.0.encode(encoder, offset + 0, depth)?;
1810            Ok(())
1811        }
1812    }
1813
1814    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceOnStartRequest {
1815        #[inline(always)]
1816        fn new_empty() -> Self {
1817            Self { start_time: fidl::new_empty!(i64, D) }
1818        }
1819
1820        #[inline]
1821        unsafe fn decode(
1822            &mut self,
1823            decoder: &mut fidl::encoding::Decoder<'_, D>,
1824            offset: usize,
1825            _depth: fidl::encoding::Depth,
1826        ) -> fidl::Result<()> {
1827            decoder.debug_check_bounds::<Self>(offset);
1828            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1829            // Verify that padding bytes are zero.
1830            // Copy from the buffer into the object.
1831            unsafe {
1832                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1833            }
1834            Ok(())
1835        }
1836    }
1837
1838    impl fidl::encoding::ValueTypeMarker for DeviceOnStopRequest {
1839        type Borrowed<'a> = &'a Self;
1840        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1841            value
1842        }
1843    }
1844
1845    unsafe impl fidl::encoding::TypeMarker for DeviceOnStopRequest {
1846        type Owned = Self;
1847
1848        #[inline(always)]
1849        fn inline_align(_context: fidl::encoding::Context) -> usize {
1850            8
1851        }
1852
1853        #[inline(always)]
1854        fn inline_size(_context: fidl::encoding::Context) -> usize {
1855            16
1856        }
1857    }
1858
1859    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceOnStopRequest, D>
1860        for &DeviceOnStopRequest
1861    {
1862        #[inline]
1863        unsafe fn encode(
1864            self,
1865            encoder: &mut fidl::encoding::Encoder<'_, D>,
1866            offset: usize,
1867            _depth: fidl::encoding::Depth,
1868        ) -> fidl::Result<()> {
1869            encoder.debug_check_bounds::<DeviceOnStopRequest>(offset);
1870            unsafe {
1871                // Copy the object into the buffer.
1872                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1873                (buf_ptr as *mut DeviceOnStopRequest)
1874                    .write_unaligned((self as *const DeviceOnStopRequest).read());
1875                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1876                // done second because the memcpy will write garbage to these bytes.
1877                let padding_ptr = buf_ptr.offset(8) as *mut u64;
1878                let padding_mask = 0xffffffff00000000u64;
1879                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1880            }
1881            Ok(())
1882        }
1883    }
1884    unsafe impl<
1885        D: fidl::encoding::ResourceDialect,
1886        T0: fidl::encoding::Encode<i64, D>,
1887        T1: fidl::encoding::Encode<u32, D>,
1888    > fidl::encoding::Encode<DeviceOnStopRequest, D> for (T0, T1)
1889    {
1890        #[inline]
1891        unsafe fn encode(
1892            self,
1893            encoder: &mut fidl::encoding::Encoder<'_, D>,
1894            offset: usize,
1895            depth: fidl::encoding::Depth,
1896        ) -> fidl::Result<()> {
1897            encoder.debug_check_bounds::<DeviceOnStopRequest>(offset);
1898            // Zero out padding regions. There's no need to apply masks
1899            // because the unmasked parts will be overwritten by fields.
1900            unsafe {
1901                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
1902                (ptr as *mut u64).write_unaligned(0);
1903            }
1904            // Write the fields.
1905            self.0.encode(encoder, offset + 0, depth)?;
1906            self.1.encode(encoder, offset + 8, depth)?;
1907            Ok(())
1908        }
1909    }
1910
1911    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceOnStopRequest {
1912        #[inline(always)]
1913        fn new_empty() -> Self {
1914            Self { stop_time: fidl::new_empty!(i64, D), ring_position: fidl::new_empty!(u32, D) }
1915        }
1916
1917        #[inline]
1918        unsafe fn decode(
1919            &mut self,
1920            decoder: &mut fidl::encoding::Decoder<'_, D>,
1921            offset: usize,
1922            _depth: fidl::encoding::Depth,
1923        ) -> fidl::Result<()> {
1924            decoder.debug_check_bounds::<Self>(offset);
1925            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1926            // Verify that padding bytes are zero.
1927            let ptr = unsafe { buf_ptr.offset(8) };
1928            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1929            let mask = 0xffffffff00000000u64;
1930            let maskedval = padval & mask;
1931            if maskedval != 0 {
1932                return Err(fidl::Error::NonZeroPadding {
1933                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
1934                });
1935            }
1936            // Copy from the buffer into the object.
1937            unsafe {
1938                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1939            }
1940            Ok(())
1941        }
1942    }
1943
1944    impl fidl::encoding::ValueTypeMarker for DeviceSetNotificationFrequencyRequest {
1945        type Borrowed<'a> = &'a Self;
1946        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1947            value
1948        }
1949    }
1950
1951    unsafe impl fidl::encoding::TypeMarker for DeviceSetNotificationFrequencyRequest {
1952        type Owned = Self;
1953
1954        #[inline(always)]
1955        fn inline_align(_context: fidl::encoding::Context) -> usize {
1956            4
1957        }
1958
1959        #[inline(always)]
1960        fn inline_size(_context: fidl::encoding::Context) -> usize {
1961            4
1962        }
1963        #[inline(always)]
1964        fn encode_is_copy() -> bool {
1965            true
1966        }
1967
1968        #[inline(always)]
1969        fn decode_is_copy() -> bool {
1970            true
1971        }
1972    }
1973
1974    unsafe impl<D: fidl::encoding::ResourceDialect>
1975        fidl::encoding::Encode<DeviceSetNotificationFrequencyRequest, D>
1976        for &DeviceSetNotificationFrequencyRequest
1977    {
1978        #[inline]
1979        unsafe fn encode(
1980            self,
1981            encoder: &mut fidl::encoding::Encoder<'_, D>,
1982            offset: usize,
1983            _depth: fidl::encoding::Depth,
1984        ) -> fidl::Result<()> {
1985            encoder.debug_check_bounds::<DeviceSetNotificationFrequencyRequest>(offset);
1986            unsafe {
1987                // Copy the object into the buffer.
1988                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1989                (buf_ptr as *mut DeviceSetNotificationFrequencyRequest)
1990                    .write_unaligned((self as *const DeviceSetNotificationFrequencyRequest).read());
1991                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1992                // done second because the memcpy will write garbage to these bytes.
1993            }
1994            Ok(())
1995        }
1996    }
1997    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1998        fidl::encoding::Encode<DeviceSetNotificationFrequencyRequest, D> for (T0,)
1999    {
2000        #[inline]
2001        unsafe fn encode(
2002            self,
2003            encoder: &mut fidl::encoding::Encoder<'_, D>,
2004            offset: usize,
2005            depth: fidl::encoding::Depth,
2006        ) -> fidl::Result<()> {
2007            encoder.debug_check_bounds::<DeviceSetNotificationFrequencyRequest>(offset);
2008            // Zero out padding regions. There's no need to apply masks
2009            // because the unmasked parts will be overwritten by fields.
2010            // Write the fields.
2011            self.0.encode(encoder, offset + 0, depth)?;
2012            Ok(())
2013        }
2014    }
2015
2016    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2017        for DeviceSetNotificationFrequencyRequest
2018    {
2019        #[inline(always)]
2020        fn new_empty() -> Self {
2021            Self { notifications_per_ring: fidl::new_empty!(u32, D) }
2022        }
2023
2024        #[inline]
2025        unsafe fn decode(
2026            &mut self,
2027            decoder: &mut fidl::encoding::Decoder<'_, D>,
2028            offset: usize,
2029            _depth: fidl::encoding::Depth,
2030        ) -> fidl::Result<()> {
2031            decoder.debug_check_bounds::<Self>(offset);
2032            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2033            // Verify that padding bytes are zero.
2034            // Copy from the buffer into the object.
2035            unsafe {
2036                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2037            }
2038            Ok(())
2039        }
2040    }
2041
2042    impl fidl::encoding::ValueTypeMarker for DeviceGetFormatResponse {
2043        type Borrowed<'a> = &'a Self;
2044        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2045            value
2046        }
2047    }
2048
2049    unsafe impl fidl::encoding::TypeMarker for DeviceGetFormatResponse {
2050        type Owned = Self;
2051
2052        #[inline(always)]
2053        fn inline_align(_context: fidl::encoding::Context) -> usize {
2054            8
2055        }
2056
2057        #[inline(always)]
2058        fn inline_size(_context: fidl::encoding::Context) -> usize {
2059            24
2060        }
2061    }
2062
2063    unsafe impl<D: fidl::encoding::ResourceDialect>
2064        fidl::encoding::Encode<DeviceGetFormatResponse, D> for &DeviceGetFormatResponse
2065    {
2066        #[inline]
2067        unsafe fn encode(
2068            self,
2069            encoder: &mut fidl::encoding::Encoder<'_, D>,
2070            offset: usize,
2071            _depth: fidl::encoding::Depth,
2072        ) -> fidl::Result<()> {
2073            encoder.debug_check_bounds::<DeviceGetFormatResponse>(offset);
2074            unsafe {
2075                // Copy the object into the buffer.
2076                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2077                (buf_ptr as *mut DeviceGetFormatResponse)
2078                    .write_unaligned((self as *const DeviceGetFormatResponse).read());
2079                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2080                // done second because the memcpy will write garbage to these bytes.
2081                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2082                let padding_mask = 0xffffffff00000000u64;
2083                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2084            }
2085            Ok(())
2086        }
2087    }
2088    unsafe impl<
2089        D: fidl::encoding::ResourceDialect,
2090        T0: fidl::encoding::Encode<u32, D>,
2091        T1: fidl::encoding::Encode<u32, D>,
2092        T2: fidl::encoding::Encode<u32, D>,
2093        T3: fidl::encoding::Encode<i64, D>,
2094    > fidl::encoding::Encode<DeviceGetFormatResponse, D> for (T0, T1, T2, T3)
2095    {
2096        #[inline]
2097        unsafe fn encode(
2098            self,
2099            encoder: &mut fidl::encoding::Encoder<'_, D>,
2100            offset: usize,
2101            depth: fidl::encoding::Depth,
2102        ) -> fidl::Result<()> {
2103            encoder.debug_check_bounds::<DeviceGetFormatResponse>(offset);
2104            // Zero out padding regions. There's no need to apply masks
2105            // because the unmasked parts will be overwritten by fields.
2106            unsafe {
2107                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2108                (ptr as *mut u64).write_unaligned(0);
2109            }
2110            // Write the fields.
2111            self.0.encode(encoder, offset + 0, depth)?;
2112            self.1.encode(encoder, offset + 4, depth)?;
2113            self.2.encode(encoder, offset + 8, depth)?;
2114            self.3.encode(encoder, offset + 16, depth)?;
2115            Ok(())
2116        }
2117    }
2118
2119    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2120        for DeviceGetFormatResponse
2121    {
2122        #[inline(always)]
2123        fn new_empty() -> Self {
2124            Self {
2125                frames_per_second: fidl::new_empty!(u32, D),
2126                sample_format: fidl::new_empty!(u32, D),
2127                num_channels: fidl::new_empty!(u32, D),
2128                external_delay: fidl::new_empty!(i64, D),
2129            }
2130        }
2131
2132        #[inline]
2133        unsafe fn decode(
2134            &mut self,
2135            decoder: &mut fidl::encoding::Decoder<'_, D>,
2136            offset: usize,
2137            _depth: fidl::encoding::Depth,
2138        ) -> fidl::Result<()> {
2139            decoder.debug_check_bounds::<Self>(offset);
2140            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2141            // Verify that padding bytes are zero.
2142            let ptr = unsafe { buf_ptr.offset(8) };
2143            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2144            let mask = 0xffffffff00000000u64;
2145            let maskedval = padval & mask;
2146            if maskedval != 0 {
2147                return Err(fidl::Error::NonZeroPadding {
2148                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2149                });
2150            }
2151            // Copy from the buffer into the object.
2152            unsafe {
2153                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 24);
2154            }
2155            Ok(())
2156        }
2157    }
2158
2159    impl fidl::encoding::ValueTypeMarker for DeviceGetGainResponse {
2160        type Borrowed<'a> = &'a Self;
2161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2162            value
2163        }
2164    }
2165
2166    unsafe impl fidl::encoding::TypeMarker for DeviceGetGainResponse {
2167        type Owned = Self;
2168
2169        #[inline(always)]
2170        fn inline_align(_context: fidl::encoding::Context) -> usize {
2171            4
2172        }
2173
2174        #[inline(always)]
2175        fn inline_size(_context: fidl::encoding::Context) -> usize {
2176            8
2177        }
2178    }
2179
2180    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceGetGainResponse, D>
2181        for &DeviceGetGainResponse
2182    {
2183        #[inline]
2184        unsafe fn encode(
2185            self,
2186            encoder: &mut fidl::encoding::Encoder<'_, D>,
2187            offset: usize,
2188            _depth: fidl::encoding::Depth,
2189        ) -> fidl::Result<()> {
2190            encoder.debug_check_bounds::<DeviceGetGainResponse>(offset);
2191            // Delegate to tuple encoding.
2192            fidl::encoding::Encode::<DeviceGetGainResponse, D>::encode(
2193                (
2194                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.current_mute),
2195                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.current_agc),
2196                    <f32 as fidl::encoding::ValueTypeMarker>::borrow(&self.current_gain_db),
2197                ),
2198                encoder,
2199                offset,
2200                _depth,
2201            )
2202        }
2203    }
2204    unsafe impl<
2205        D: fidl::encoding::ResourceDialect,
2206        T0: fidl::encoding::Encode<bool, D>,
2207        T1: fidl::encoding::Encode<bool, D>,
2208        T2: fidl::encoding::Encode<f32, D>,
2209    > fidl::encoding::Encode<DeviceGetGainResponse, D> for (T0, T1, T2)
2210    {
2211        #[inline]
2212        unsafe fn encode(
2213            self,
2214            encoder: &mut fidl::encoding::Encoder<'_, D>,
2215            offset: usize,
2216            depth: fidl::encoding::Depth,
2217        ) -> fidl::Result<()> {
2218            encoder.debug_check_bounds::<DeviceGetGainResponse>(offset);
2219            // Zero out padding regions. There's no need to apply masks
2220            // because the unmasked parts will be overwritten by fields.
2221            unsafe {
2222                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2223                (ptr as *mut u32).write_unaligned(0);
2224            }
2225            // Write the fields.
2226            self.0.encode(encoder, offset + 0, depth)?;
2227            self.1.encode(encoder, offset + 1, depth)?;
2228            self.2.encode(encoder, offset + 4, depth)?;
2229            Ok(())
2230        }
2231    }
2232
2233    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceGetGainResponse {
2234        #[inline(always)]
2235        fn new_empty() -> Self {
2236            Self {
2237                current_mute: fidl::new_empty!(bool, D),
2238                current_agc: fidl::new_empty!(bool, D),
2239                current_gain_db: fidl::new_empty!(f32, D),
2240            }
2241        }
2242
2243        #[inline]
2244        unsafe fn decode(
2245            &mut self,
2246            decoder: &mut fidl::encoding::Decoder<'_, D>,
2247            offset: usize,
2248            _depth: fidl::encoding::Depth,
2249        ) -> fidl::Result<()> {
2250            decoder.debug_check_bounds::<Self>(offset);
2251            // Verify that padding bytes are zero.
2252            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2253            let padval = unsafe { (ptr as *const u32).read_unaligned() };
2254            let mask = 0xffff0000u32;
2255            let maskedval = padval & mask;
2256            if maskedval != 0 {
2257                return Err(fidl::Error::NonZeroPadding {
2258                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2259                });
2260            }
2261            fidl::decode!(bool, D, &mut self.current_mute, decoder, offset + 0, _depth)?;
2262            fidl::decode!(bool, D, &mut self.current_agc, decoder, offset + 1, _depth)?;
2263            fidl::decode!(f32, D, &mut self.current_gain_db, decoder, offset + 4, _depth)?;
2264            Ok(())
2265        }
2266    }
2267
2268    impl fidl::encoding::ValueTypeMarker for DeviceGetPositionResponse {
2269        type Borrowed<'a> = &'a Self;
2270        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2271            value
2272        }
2273    }
2274
2275    unsafe impl fidl::encoding::TypeMarker for DeviceGetPositionResponse {
2276        type Owned = Self;
2277
2278        #[inline(always)]
2279        fn inline_align(_context: fidl::encoding::Context) -> usize {
2280            8
2281        }
2282
2283        #[inline(always)]
2284        fn inline_size(_context: fidl::encoding::Context) -> usize {
2285            16
2286        }
2287    }
2288
2289    unsafe impl<D: fidl::encoding::ResourceDialect>
2290        fidl::encoding::Encode<DeviceGetPositionResponse, D> for &DeviceGetPositionResponse
2291    {
2292        #[inline]
2293        unsafe fn encode(
2294            self,
2295            encoder: &mut fidl::encoding::Encoder<'_, D>,
2296            offset: usize,
2297            _depth: fidl::encoding::Depth,
2298        ) -> fidl::Result<()> {
2299            encoder.debug_check_bounds::<DeviceGetPositionResponse>(offset);
2300            unsafe {
2301                // Copy the object into the buffer.
2302                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2303                (buf_ptr as *mut DeviceGetPositionResponse)
2304                    .write_unaligned((self as *const DeviceGetPositionResponse).read());
2305                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2306                // done second because the memcpy will write garbage to these bytes.
2307                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2308                let padding_mask = 0xffffffff00000000u64;
2309                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2310            }
2311            Ok(())
2312        }
2313    }
2314    unsafe impl<
2315        D: fidl::encoding::ResourceDialect,
2316        T0: fidl::encoding::Encode<i64, D>,
2317        T1: fidl::encoding::Encode<u32, D>,
2318    > fidl::encoding::Encode<DeviceGetPositionResponse, D> for (T0, T1)
2319    {
2320        #[inline]
2321        unsafe fn encode(
2322            self,
2323            encoder: &mut fidl::encoding::Encoder<'_, D>,
2324            offset: usize,
2325            depth: fidl::encoding::Depth,
2326        ) -> fidl::Result<()> {
2327            encoder.debug_check_bounds::<DeviceGetPositionResponse>(offset);
2328            // Zero out padding regions. There's no need to apply masks
2329            // because the unmasked parts will be overwritten by fields.
2330            unsafe {
2331                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2332                (ptr as *mut u64).write_unaligned(0);
2333            }
2334            // Write the fields.
2335            self.0.encode(encoder, offset + 0, depth)?;
2336            self.1.encode(encoder, offset + 8, depth)?;
2337            Ok(())
2338        }
2339    }
2340
2341    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2342        for DeviceGetPositionResponse
2343    {
2344        #[inline(always)]
2345        fn new_empty() -> Self {
2346            Self {
2347                monotonic_time: fidl::new_empty!(i64, D),
2348                ring_position: fidl::new_empty!(u32, D),
2349            }
2350        }
2351
2352        #[inline]
2353        unsafe fn decode(
2354            &mut self,
2355            decoder: &mut fidl::encoding::Decoder<'_, D>,
2356            offset: usize,
2357            _depth: fidl::encoding::Depth,
2358        ) -> fidl::Result<()> {
2359            decoder.debug_check_bounds::<Self>(offset);
2360            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2361            // Verify that padding bytes are zero.
2362            let ptr = unsafe { buf_ptr.offset(8) };
2363            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2364            let mask = 0xffffffff00000000u64;
2365            let maskedval = padval & mask;
2366            if maskedval != 0 {
2367                return Err(fidl::Error::NonZeroPadding {
2368                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2369                });
2370            }
2371            // Copy from the buffer into the object.
2372            unsafe {
2373                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2374            }
2375            Ok(())
2376        }
2377    }
2378
2379    impl fidl::encoding::ValueTypeMarker for FormatRange {
2380        type Borrowed<'a> = &'a Self;
2381        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2382            value
2383        }
2384    }
2385
2386    unsafe impl fidl::encoding::TypeMarker for FormatRange {
2387        type Owned = Self;
2388
2389        #[inline(always)]
2390        fn inline_align(_context: fidl::encoding::Context) -> usize {
2391            4
2392        }
2393
2394        #[inline(always)]
2395        fn inline_size(_context: fidl::encoding::Context) -> usize {
2396            16
2397        }
2398        #[inline(always)]
2399        fn encode_is_copy() -> bool {
2400            true
2401        }
2402
2403        #[inline(always)]
2404        fn decode_is_copy() -> bool {
2405            true
2406        }
2407    }
2408
2409    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<FormatRange, D>
2410        for &FormatRange
2411    {
2412        #[inline]
2413        unsafe fn encode(
2414            self,
2415            encoder: &mut fidl::encoding::Encoder<'_, D>,
2416            offset: usize,
2417            _depth: fidl::encoding::Depth,
2418        ) -> fidl::Result<()> {
2419            encoder.debug_check_bounds::<FormatRange>(offset);
2420            unsafe {
2421                // Copy the object into the buffer.
2422                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2423                (buf_ptr as *mut FormatRange).write_unaligned((self as *const FormatRange).read());
2424                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2425                // done second because the memcpy will write garbage to these bytes.
2426            }
2427            Ok(())
2428        }
2429    }
2430    unsafe impl<
2431        D: fidl::encoding::ResourceDialect,
2432        T0: fidl::encoding::Encode<u32, D>,
2433        T1: fidl::encoding::Encode<u32, D>,
2434        T2: fidl::encoding::Encode<u32, D>,
2435        T3: fidl::encoding::Encode<u8, D>,
2436        T4: fidl::encoding::Encode<u8, D>,
2437        T5: fidl::encoding::Encode<u16, D>,
2438    > fidl::encoding::Encode<FormatRange, D> for (T0, T1, T2, T3, T4, T5)
2439    {
2440        #[inline]
2441        unsafe fn encode(
2442            self,
2443            encoder: &mut fidl::encoding::Encoder<'_, D>,
2444            offset: usize,
2445            depth: fidl::encoding::Depth,
2446        ) -> fidl::Result<()> {
2447            encoder.debug_check_bounds::<FormatRange>(offset);
2448            // Zero out padding regions. There's no need to apply masks
2449            // because the unmasked parts will be overwritten by fields.
2450            // Write the fields.
2451            self.0.encode(encoder, offset + 0, depth)?;
2452            self.1.encode(encoder, offset + 4, depth)?;
2453            self.2.encode(encoder, offset + 8, depth)?;
2454            self.3.encode(encoder, offset + 12, depth)?;
2455            self.4.encode(encoder, offset + 13, depth)?;
2456            self.5.encode(encoder, offset + 14, depth)?;
2457            Ok(())
2458        }
2459    }
2460
2461    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for FormatRange {
2462        #[inline(always)]
2463        fn new_empty() -> Self {
2464            Self {
2465                sample_format_flags: fidl::new_empty!(u32, D),
2466                min_frame_rate: fidl::new_empty!(u32, D),
2467                max_frame_rate: fidl::new_empty!(u32, D),
2468                min_channels: fidl::new_empty!(u8, D),
2469                max_channels: fidl::new_empty!(u8, D),
2470                rate_family_flags: fidl::new_empty!(u16, D),
2471            }
2472        }
2473
2474        #[inline]
2475        unsafe fn decode(
2476            &mut self,
2477            decoder: &mut fidl::encoding::Decoder<'_, D>,
2478            offset: usize,
2479            _depth: fidl::encoding::Depth,
2480        ) -> fidl::Result<()> {
2481            decoder.debug_check_bounds::<Self>(offset);
2482            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2483            // Verify that padding bytes are zero.
2484            // Copy from the buffer into the object.
2485            unsafe {
2486                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2487            }
2488            Ok(())
2489        }
2490    }
2491
2492    impl fidl::encoding::ValueTypeMarker for RingBufferConstraints {
2493        type Borrowed<'a> = &'a Self;
2494        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2495            value
2496        }
2497    }
2498
2499    unsafe impl fidl::encoding::TypeMarker for RingBufferConstraints {
2500        type Owned = Self;
2501
2502        #[inline(always)]
2503        fn inline_align(_context: fidl::encoding::Context) -> usize {
2504            4
2505        }
2506
2507        #[inline(always)]
2508        fn inline_size(_context: fidl::encoding::Context) -> usize {
2509            12
2510        }
2511        #[inline(always)]
2512        fn encode_is_copy() -> bool {
2513            true
2514        }
2515
2516        #[inline(always)]
2517        fn decode_is_copy() -> bool {
2518            true
2519        }
2520    }
2521
2522    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBufferConstraints, D>
2523        for &RingBufferConstraints
2524    {
2525        #[inline]
2526        unsafe fn encode(
2527            self,
2528            encoder: &mut fidl::encoding::Encoder<'_, D>,
2529            offset: usize,
2530            _depth: fidl::encoding::Depth,
2531        ) -> fidl::Result<()> {
2532            encoder.debug_check_bounds::<RingBufferConstraints>(offset);
2533            unsafe {
2534                // Copy the object into the buffer.
2535                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2536                (buf_ptr as *mut RingBufferConstraints)
2537                    .write_unaligned((self as *const RingBufferConstraints).read());
2538                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2539                // done second because the memcpy will write garbage to these bytes.
2540            }
2541            Ok(())
2542        }
2543    }
2544    unsafe impl<
2545        D: fidl::encoding::ResourceDialect,
2546        T0: fidl::encoding::Encode<u32, D>,
2547        T1: fidl::encoding::Encode<u32, D>,
2548        T2: fidl::encoding::Encode<u32, D>,
2549    > fidl::encoding::Encode<RingBufferConstraints, D> for (T0, T1, T2)
2550    {
2551        #[inline]
2552        unsafe fn encode(
2553            self,
2554            encoder: &mut fidl::encoding::Encoder<'_, D>,
2555            offset: usize,
2556            depth: fidl::encoding::Depth,
2557        ) -> fidl::Result<()> {
2558            encoder.debug_check_bounds::<RingBufferConstraints>(offset);
2559            // Zero out padding regions. There's no need to apply masks
2560            // because the unmasked parts will be overwritten by fields.
2561            // Write the fields.
2562            self.0.encode(encoder, offset + 0, depth)?;
2563            self.1.encode(encoder, offset + 4, depth)?;
2564            self.2.encode(encoder, offset + 8, depth)?;
2565            Ok(())
2566        }
2567    }
2568
2569    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBufferConstraints {
2570        #[inline(always)]
2571        fn new_empty() -> Self {
2572            Self {
2573                min_frames: fidl::new_empty!(u32, D),
2574                max_frames: fidl::new_empty!(u32, D),
2575                modulo_frames: fidl::new_empty!(u32, D),
2576            }
2577        }
2578
2579        #[inline]
2580        unsafe fn decode(
2581            &mut self,
2582            decoder: &mut fidl::encoding::Decoder<'_, D>,
2583            offset: usize,
2584            _depth: fidl::encoding::Depth,
2585        ) -> fidl::Result<()> {
2586            decoder.debug_check_bounds::<Self>(offset);
2587            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2588            // Verify that padding bytes are zero.
2589            // Copy from the buffer into the object.
2590            unsafe {
2591                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
2592            }
2593            Ok(())
2594        }
2595    }
2596
2597    impl ClockProperties {
2598        #[inline(always)]
2599        fn max_ordinal_present(&self) -> u64 {
2600            if let Some(_) = self.rate_adjustment_ppm {
2601                return 2;
2602            }
2603            if let Some(_) = self.domain {
2604                return 1;
2605            }
2606            0
2607        }
2608    }
2609
2610    impl fidl::encoding::ValueTypeMarker for ClockProperties {
2611        type Borrowed<'a> = &'a Self;
2612        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2613            value
2614        }
2615    }
2616
2617    unsafe impl fidl::encoding::TypeMarker for ClockProperties {
2618        type Owned = Self;
2619
2620        #[inline(always)]
2621        fn inline_align(_context: fidl::encoding::Context) -> usize {
2622            8
2623        }
2624
2625        #[inline(always)]
2626        fn inline_size(_context: fidl::encoding::Context) -> usize {
2627            16
2628        }
2629    }
2630
2631    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ClockProperties, D>
2632        for &ClockProperties
2633    {
2634        unsafe fn encode(
2635            self,
2636            encoder: &mut fidl::encoding::Encoder<'_, D>,
2637            offset: usize,
2638            mut depth: fidl::encoding::Depth,
2639        ) -> fidl::Result<()> {
2640            encoder.debug_check_bounds::<ClockProperties>(offset);
2641            // Vector header
2642            let max_ordinal: u64 = self.max_ordinal_present();
2643            encoder.write_num(max_ordinal, offset);
2644            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2645            // Calling encoder.out_of_line_offset(0) is not allowed.
2646            if max_ordinal == 0 {
2647                return Ok(());
2648            }
2649            depth.increment()?;
2650            let envelope_size = 8;
2651            let bytes_len = max_ordinal as usize * envelope_size;
2652            #[allow(unused_variables)]
2653            let offset = encoder.out_of_line_offset(bytes_len);
2654            let mut _prev_end_offset: usize = 0;
2655            if 1 > max_ordinal {
2656                return Ok(());
2657            }
2658
2659            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2660            // are envelope_size bytes.
2661            let cur_offset: usize = (1 - 1) * envelope_size;
2662
2663            // Zero reserved fields.
2664            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2665
2666            // Safety:
2667            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2668            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2669            //   envelope_size bytes, there is always sufficient room.
2670            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2671                self.domain.as_ref().map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2672                encoder,
2673                offset + cur_offset,
2674                depth,
2675            )?;
2676
2677            _prev_end_offset = cur_offset + envelope_size;
2678            if 2 > max_ordinal {
2679                return Ok(());
2680            }
2681
2682            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2683            // are envelope_size bytes.
2684            let cur_offset: usize = (2 - 1) * envelope_size;
2685
2686            // Zero reserved fields.
2687            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2688
2689            // Safety:
2690            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2691            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2692            //   envelope_size bytes, there is always sufficient room.
2693            fidl::encoding::encode_in_envelope_optional::<i32, D>(
2694                self.rate_adjustment_ppm
2695                    .as_ref()
2696                    .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
2697                encoder,
2698                offset + cur_offset,
2699                depth,
2700            )?;
2701
2702            _prev_end_offset = cur_offset + envelope_size;
2703
2704            Ok(())
2705        }
2706    }
2707
2708    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ClockProperties {
2709        #[inline(always)]
2710        fn new_empty() -> Self {
2711            Self::default()
2712        }
2713
2714        unsafe fn decode(
2715            &mut self,
2716            decoder: &mut fidl::encoding::Decoder<'_, D>,
2717            offset: usize,
2718            mut depth: fidl::encoding::Depth,
2719        ) -> fidl::Result<()> {
2720            decoder.debug_check_bounds::<Self>(offset);
2721            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2722                None => return Err(fidl::Error::NotNullable),
2723                Some(len) => len,
2724            };
2725            // Calling decoder.out_of_line_offset(0) is not allowed.
2726            if len == 0 {
2727                return Ok(());
2728            };
2729            depth.increment()?;
2730            let envelope_size = 8;
2731            let bytes_len = len * envelope_size;
2732            let offset = decoder.out_of_line_offset(bytes_len)?;
2733            // Decode the envelope for each type.
2734            let mut _next_ordinal_to_read = 0;
2735            let mut next_offset = offset;
2736            let end_offset = offset + bytes_len;
2737            _next_ordinal_to_read += 1;
2738            if next_offset >= end_offset {
2739                return Ok(());
2740            }
2741
2742            // Decode unknown envelopes for gaps in ordinals.
2743            while _next_ordinal_to_read < 1 {
2744                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2745                _next_ordinal_to_read += 1;
2746                next_offset += envelope_size;
2747            }
2748
2749            let next_out_of_line = decoder.next_out_of_line();
2750            let handles_before = decoder.remaining_handles();
2751            if let Some((inlined, num_bytes, num_handles)) =
2752                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2753            {
2754                let member_inline_size =
2755                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2756                if inlined != (member_inline_size <= 4) {
2757                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2758                }
2759                let inner_offset;
2760                let mut inner_depth = depth.clone();
2761                if inlined {
2762                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2763                    inner_offset = next_offset;
2764                } else {
2765                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2766                    inner_depth.increment()?;
2767                }
2768                let val_ref = self.domain.get_or_insert_with(|| fidl::new_empty!(i32, D));
2769                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
2770                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2771                {
2772                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2773                }
2774                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2775                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2776                }
2777            }
2778
2779            next_offset += envelope_size;
2780            _next_ordinal_to_read += 1;
2781            if next_offset >= end_offset {
2782                return Ok(());
2783            }
2784
2785            // Decode unknown envelopes for gaps in ordinals.
2786            while _next_ordinal_to_read < 2 {
2787                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2788                _next_ordinal_to_read += 1;
2789                next_offset += envelope_size;
2790            }
2791
2792            let next_out_of_line = decoder.next_out_of_line();
2793            let handles_before = decoder.remaining_handles();
2794            if let Some((inlined, num_bytes, num_handles)) =
2795                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2796            {
2797                let member_inline_size =
2798                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2799                if inlined != (member_inline_size <= 4) {
2800                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2801                }
2802                let inner_offset;
2803                let mut inner_depth = depth.clone();
2804                if inlined {
2805                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2806                    inner_offset = next_offset;
2807                } else {
2808                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2809                    inner_depth.increment()?;
2810                }
2811                let val_ref =
2812                    self.rate_adjustment_ppm.get_or_insert_with(|| fidl::new_empty!(i32, D));
2813                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
2814                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2815                {
2816                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2817                }
2818                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2819                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2820                }
2821            }
2822
2823            next_offset += envelope_size;
2824
2825            // Decode the remaining unknown envelopes.
2826            while next_offset < end_offset {
2827                _next_ordinal_to_read += 1;
2828                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2829                next_offset += envelope_size;
2830            }
2831
2832            Ok(())
2833        }
2834    }
2835
2836    impl Codec {
2837        #[inline(always)]
2838        fn max_ordinal_present(&self) -> u64 {
2839            if let Some(_) = self.plug_properties {
2840                return 3;
2841            }
2842            if let Some(_) = self.dai_interconnect {
2843                return 2;
2844            }
2845            if let Some(_) = self.is_input {
2846                return 1;
2847            }
2848            0
2849        }
2850    }
2851
2852    impl fidl::encoding::ValueTypeMarker for Codec {
2853        type Borrowed<'a> = &'a Self;
2854        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2855            value
2856        }
2857    }
2858
2859    unsafe impl fidl::encoding::TypeMarker for Codec {
2860        type Owned = Self;
2861
2862        #[inline(always)]
2863        fn inline_align(_context: fidl::encoding::Context) -> usize {
2864            8
2865        }
2866
2867        #[inline(always)]
2868        fn inline_size(_context: fidl::encoding::Context) -> usize {
2869            16
2870        }
2871    }
2872
2873    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Codec, D> for &Codec {
2874        unsafe fn encode(
2875            self,
2876            encoder: &mut fidl::encoding::Encoder<'_, D>,
2877            offset: usize,
2878            mut depth: fidl::encoding::Depth,
2879        ) -> fidl::Result<()> {
2880            encoder.debug_check_bounds::<Codec>(offset);
2881            // Vector header
2882            let max_ordinal: u64 = self.max_ordinal_present();
2883            encoder.write_num(max_ordinal, offset);
2884            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2885            // Calling encoder.out_of_line_offset(0) is not allowed.
2886            if max_ordinal == 0 {
2887                return Ok(());
2888            }
2889            depth.increment()?;
2890            let envelope_size = 8;
2891            let bytes_len = max_ordinal as usize * envelope_size;
2892            #[allow(unused_variables)]
2893            let offset = encoder.out_of_line_offset(bytes_len);
2894            let mut _prev_end_offset: usize = 0;
2895            if 1 > max_ordinal {
2896                return Ok(());
2897            }
2898
2899            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2900            // are envelope_size bytes.
2901            let cur_offset: usize = (1 - 1) * envelope_size;
2902
2903            // Zero reserved fields.
2904            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2905
2906            // Safety:
2907            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2908            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2909            //   envelope_size bytes, there is always sufficient room.
2910            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2911                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2912                encoder,
2913                offset + cur_offset,
2914                depth,
2915            )?;
2916
2917            _prev_end_offset = cur_offset + envelope_size;
2918            if 2 > max_ordinal {
2919                return Ok(());
2920            }
2921
2922            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2923            // are envelope_size bytes.
2924            let cur_offset: usize = (2 - 1) * envelope_size;
2925
2926            // Zero reserved fields.
2927            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2928
2929            // Safety:
2930            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2931            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2932            //   envelope_size bytes, there is always sufficient room.
2933            fidl::encoding::encode_in_envelope_optional::<DaiInterconnect, D>(
2934                self.dai_interconnect
2935                    .as_ref()
2936                    .map(<DaiInterconnect as fidl::encoding::ValueTypeMarker>::borrow),
2937                encoder,
2938                offset + cur_offset,
2939                depth,
2940            )?;
2941
2942            _prev_end_offset = cur_offset + envelope_size;
2943            if 3 > max_ordinal {
2944                return Ok(());
2945            }
2946
2947            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2948            // are envelope_size bytes.
2949            let cur_offset: usize = (3 - 1) * envelope_size;
2950
2951            // Zero reserved fields.
2952            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2953
2954            // Safety:
2955            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2956            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2957            //   envelope_size bytes, there is always sufficient room.
2958            fidl::encoding::encode_in_envelope_optional::<PlugProperties, D>(
2959                self.plug_properties
2960                    .as_ref()
2961                    .map(<PlugProperties as fidl::encoding::ValueTypeMarker>::borrow),
2962                encoder,
2963                offset + cur_offset,
2964                depth,
2965            )?;
2966
2967            _prev_end_offset = cur_offset + envelope_size;
2968
2969            Ok(())
2970        }
2971    }
2972
2973    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Codec {
2974        #[inline(always)]
2975        fn new_empty() -> Self {
2976            Self::default()
2977        }
2978
2979        unsafe fn decode(
2980            &mut self,
2981            decoder: &mut fidl::encoding::Decoder<'_, D>,
2982            offset: usize,
2983            mut depth: fidl::encoding::Depth,
2984        ) -> fidl::Result<()> {
2985            decoder.debug_check_bounds::<Self>(offset);
2986            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2987                None => return Err(fidl::Error::NotNullable),
2988                Some(len) => len,
2989            };
2990            // Calling decoder.out_of_line_offset(0) is not allowed.
2991            if len == 0 {
2992                return Ok(());
2993            };
2994            depth.increment()?;
2995            let envelope_size = 8;
2996            let bytes_len = len * envelope_size;
2997            let offset = decoder.out_of_line_offset(bytes_len)?;
2998            // Decode the envelope for each type.
2999            let mut _next_ordinal_to_read = 0;
3000            let mut next_offset = offset;
3001            let end_offset = offset + bytes_len;
3002            _next_ordinal_to_read += 1;
3003            if next_offset >= end_offset {
3004                return Ok(());
3005            }
3006
3007            // Decode unknown envelopes for gaps in ordinals.
3008            while _next_ordinal_to_read < 1 {
3009                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3010                _next_ordinal_to_read += 1;
3011                next_offset += envelope_size;
3012            }
3013
3014            let next_out_of_line = decoder.next_out_of_line();
3015            let handles_before = decoder.remaining_handles();
3016            if let Some((inlined, num_bytes, num_handles)) =
3017                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3018            {
3019                let member_inline_size =
3020                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3021                if inlined != (member_inline_size <= 4) {
3022                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3023                }
3024                let inner_offset;
3025                let mut inner_depth = depth.clone();
3026                if inlined {
3027                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3028                    inner_offset = next_offset;
3029                } else {
3030                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3031                    inner_depth.increment()?;
3032                }
3033                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
3034                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3035                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3036                {
3037                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3038                }
3039                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3040                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3041                }
3042            }
3043
3044            next_offset += envelope_size;
3045            _next_ordinal_to_read += 1;
3046            if next_offset >= end_offset {
3047                return Ok(());
3048            }
3049
3050            // Decode unknown envelopes for gaps in ordinals.
3051            while _next_ordinal_to_read < 2 {
3052                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3053                _next_ordinal_to_read += 1;
3054                next_offset += envelope_size;
3055            }
3056
3057            let next_out_of_line = decoder.next_out_of_line();
3058            let handles_before = decoder.remaining_handles();
3059            if let Some((inlined, num_bytes, num_handles)) =
3060                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3061            {
3062                let member_inline_size =
3063                    <DaiInterconnect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3064                if inlined != (member_inline_size <= 4) {
3065                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3066                }
3067                let inner_offset;
3068                let mut inner_depth = depth.clone();
3069                if inlined {
3070                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3071                    inner_offset = next_offset;
3072                } else {
3073                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3074                    inner_depth.increment()?;
3075                }
3076                let val_ref = self
3077                    .dai_interconnect
3078                    .get_or_insert_with(|| fidl::new_empty!(DaiInterconnect, D));
3079                fidl::decode!(DaiInterconnect, D, val_ref, decoder, inner_offset, inner_depth)?;
3080                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3081                {
3082                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3083                }
3084                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3085                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3086                }
3087            }
3088
3089            next_offset += envelope_size;
3090            _next_ordinal_to_read += 1;
3091            if next_offset >= end_offset {
3092                return Ok(());
3093            }
3094
3095            // Decode unknown envelopes for gaps in ordinals.
3096            while _next_ordinal_to_read < 3 {
3097                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3098                _next_ordinal_to_read += 1;
3099                next_offset += envelope_size;
3100            }
3101
3102            let next_out_of_line = decoder.next_out_of_line();
3103            let handles_before = decoder.remaining_handles();
3104            if let Some((inlined, num_bytes, num_handles)) =
3105                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3106            {
3107                let member_inline_size =
3108                    <PlugProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3109                if inlined != (member_inline_size <= 4) {
3110                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3111                }
3112                let inner_offset;
3113                let mut inner_depth = depth.clone();
3114                if inlined {
3115                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3116                    inner_offset = next_offset;
3117                } else {
3118                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3119                    inner_depth.increment()?;
3120                }
3121                let val_ref =
3122                    self.plug_properties.get_or_insert_with(|| fidl::new_empty!(PlugProperties, D));
3123                fidl::decode!(PlugProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
3124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3125                {
3126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3127                }
3128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3130                }
3131            }
3132
3133            next_offset += envelope_size;
3134
3135            // Decode the remaining unknown envelopes.
3136            while next_offset < end_offset {
3137                _next_ordinal_to_read += 1;
3138                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3139                next_offset += envelope_size;
3140            }
3141
3142            Ok(())
3143        }
3144    }
3145
3146    impl Composite {
3147        #[inline(always)]
3148        fn max_ordinal_present(&self) -> u64 {
3149            if let Some(_) = self.packet_streams {
3150                return 5;
3151            }
3152            if let Some(_) = self.topologies {
3153                return 4;
3154            }
3155            if let Some(_) = self.clock_properties {
3156                return 3;
3157            }
3158            if let Some(_) = self.dai_interconnects {
3159                return 2;
3160            }
3161            if let Some(_) = self.ring_buffers {
3162                return 1;
3163            }
3164            0
3165        }
3166    }
3167
3168    impl fidl::encoding::ValueTypeMarker for Composite {
3169        type Borrowed<'a> = &'a Self;
3170        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3171            value
3172        }
3173    }
3174
3175    unsafe impl fidl::encoding::TypeMarker for Composite {
3176        type Owned = Self;
3177
3178        #[inline(always)]
3179        fn inline_align(_context: fidl::encoding::Context) -> usize {
3180            8
3181        }
3182
3183        #[inline(always)]
3184        fn inline_size(_context: fidl::encoding::Context) -> usize {
3185            16
3186        }
3187    }
3188
3189    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Composite, D>
3190        for &Composite
3191    {
3192        unsafe fn encode(
3193            self,
3194            encoder: &mut fidl::encoding::Encoder<'_, D>,
3195            offset: usize,
3196            mut depth: fidl::encoding::Depth,
3197        ) -> fidl::Result<()> {
3198            encoder.debug_check_bounds::<Composite>(offset);
3199            // Vector header
3200            let max_ordinal: u64 = self.max_ordinal_present();
3201            encoder.write_num(max_ordinal, offset);
3202            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3203            // Calling encoder.out_of_line_offset(0) is not allowed.
3204            if max_ordinal == 0 {
3205                return Ok(());
3206            }
3207            depth.increment()?;
3208            let envelope_size = 8;
3209            let bytes_len = max_ordinal as usize * envelope_size;
3210            #[allow(unused_variables)]
3211            let offset = encoder.out_of_line_offset(bytes_len);
3212            let mut _prev_end_offset: usize = 0;
3213            if 1 > max_ordinal {
3214                return Ok(());
3215            }
3216
3217            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3218            // are envelope_size bytes.
3219            let cur_offset: usize = (1 - 1) * envelope_size;
3220
3221            // Zero reserved fields.
3222            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3223
3224            // Safety:
3225            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3226            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3227            //   envelope_size bytes, there is always sufficient room.
3228            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<CompositeRingBuffer, 64>, D>(
3229            self.ring_buffers.as_ref().map(<fidl::encoding::Vector<CompositeRingBuffer, 64> as fidl::encoding::ValueTypeMarker>::borrow),
3230            encoder, offset + cur_offset, depth
3231        )?;
3232
3233            _prev_end_offset = cur_offset + envelope_size;
3234            if 2 > max_ordinal {
3235                return Ok(());
3236            }
3237
3238            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3239            // are envelope_size bytes.
3240            let cur_offset: usize = (2 - 1) * envelope_size;
3241
3242            // Zero reserved fields.
3243            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3244
3245            // Safety:
3246            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3247            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3248            //   envelope_size bytes, there is always sufficient room.
3249            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<CompositeDaiInterconnect, 64>, D>(
3250            self.dai_interconnects.as_ref().map(<fidl::encoding::Vector<CompositeDaiInterconnect, 64> as fidl::encoding::ValueTypeMarker>::borrow),
3251            encoder, offset + cur_offset, depth
3252        )?;
3253
3254            _prev_end_offset = cur_offset + envelope_size;
3255            if 3 > max_ordinal {
3256                return Ok(());
3257            }
3258
3259            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3260            // are envelope_size bytes.
3261            let cur_offset: usize = (3 - 1) * envelope_size;
3262
3263            // Zero reserved fields.
3264            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3265
3266            // Safety:
3267            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3268            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3269            //   envelope_size bytes, there is always sufficient room.
3270            fidl::encoding::encode_in_envelope_optional::<ClockProperties, D>(
3271                self.clock_properties
3272                    .as_ref()
3273                    .map(<ClockProperties as fidl::encoding::ValueTypeMarker>::borrow),
3274                encoder,
3275                offset + cur_offset,
3276                depth,
3277            )?;
3278
3279            _prev_end_offset = cur_offset + envelope_size;
3280            if 4 > max_ordinal {
3281                return Ok(());
3282            }
3283
3284            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3285            // are envelope_size bytes.
3286            let cur_offset: usize = (4 - 1) * envelope_size;
3287
3288            // Zero reserved fields.
3289            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3290
3291            // Safety:
3292            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3293            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3294            //   envelope_size bytes, there is always sufficient room.
3295            fidl::encoding::encode_in_envelope_optional::<
3296                fidl::encoding::Vector<
3297                    fidl_fuchsia_hardware_audio_signalprocessing_common::Topology,
3298                    64,
3299                >,
3300                D,
3301            >(
3302                self.topologies.as_ref().map(
3303                    <fidl::encoding::Vector<
3304                        fidl_fuchsia_hardware_audio_signalprocessing_common::Topology,
3305                        64,
3306                    > as fidl::encoding::ValueTypeMarker>::borrow,
3307                ),
3308                encoder,
3309                offset + cur_offset,
3310                depth,
3311            )?;
3312
3313            _prev_end_offset = cur_offset + envelope_size;
3314            if 5 > max_ordinal {
3315                return Ok(());
3316            }
3317
3318            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3319            // are envelope_size bytes.
3320            let cur_offset: usize = (5 - 1) * envelope_size;
3321
3322            // Zero reserved fields.
3323            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3324
3325            // Safety:
3326            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3327            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3328            //   envelope_size bytes, there is always sufficient room.
3329            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<CompositePacketStream, 64>, D>(
3330            self.packet_streams.as_ref().map(<fidl::encoding::Vector<CompositePacketStream, 64> as fidl::encoding::ValueTypeMarker>::borrow),
3331            encoder, offset + cur_offset, depth
3332        )?;
3333
3334            _prev_end_offset = cur_offset + envelope_size;
3335
3336            Ok(())
3337        }
3338    }
3339
3340    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Composite {
3341        #[inline(always)]
3342        fn new_empty() -> Self {
3343            Self::default()
3344        }
3345
3346        unsafe fn decode(
3347            &mut self,
3348            decoder: &mut fidl::encoding::Decoder<'_, D>,
3349            offset: usize,
3350            mut depth: fidl::encoding::Depth,
3351        ) -> fidl::Result<()> {
3352            decoder.debug_check_bounds::<Self>(offset);
3353            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3354                None => return Err(fidl::Error::NotNullable),
3355                Some(len) => len,
3356            };
3357            // Calling decoder.out_of_line_offset(0) is not allowed.
3358            if len == 0 {
3359                return Ok(());
3360            };
3361            depth.increment()?;
3362            let envelope_size = 8;
3363            let bytes_len = len * envelope_size;
3364            let offset = decoder.out_of_line_offset(bytes_len)?;
3365            // Decode the envelope for each type.
3366            let mut _next_ordinal_to_read = 0;
3367            let mut next_offset = offset;
3368            let end_offset = offset + bytes_len;
3369            _next_ordinal_to_read += 1;
3370            if next_offset >= end_offset {
3371                return Ok(());
3372            }
3373
3374            // Decode unknown envelopes for gaps in ordinals.
3375            while _next_ordinal_to_read < 1 {
3376                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3377                _next_ordinal_to_read += 1;
3378                next_offset += envelope_size;
3379            }
3380
3381            let next_out_of_line = decoder.next_out_of_line();
3382            let handles_before = decoder.remaining_handles();
3383            if let Some((inlined, num_bytes, num_handles)) =
3384                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3385            {
3386                let member_inline_size = <fidl::encoding::Vector<CompositeRingBuffer, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3387                if inlined != (member_inline_size <= 4) {
3388                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3389                }
3390                let inner_offset;
3391                let mut inner_depth = depth.clone();
3392                if inlined {
3393                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3394                    inner_offset = next_offset;
3395                } else {
3396                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3397                    inner_depth.increment()?;
3398                }
3399                let val_ref = self.ring_buffers.get_or_insert_with(
3400                    || fidl::new_empty!(fidl::encoding::Vector<CompositeRingBuffer, 64>, D),
3401                );
3402                fidl::decode!(fidl::encoding::Vector<CompositeRingBuffer, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
3403                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3404                {
3405                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3406                }
3407                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3408                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3409                }
3410            }
3411
3412            next_offset += envelope_size;
3413            _next_ordinal_to_read += 1;
3414            if next_offset >= end_offset {
3415                return Ok(());
3416            }
3417
3418            // Decode unknown envelopes for gaps in ordinals.
3419            while _next_ordinal_to_read < 2 {
3420                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3421                _next_ordinal_to_read += 1;
3422                next_offset += envelope_size;
3423            }
3424
3425            let next_out_of_line = decoder.next_out_of_line();
3426            let handles_before = decoder.remaining_handles();
3427            if let Some((inlined, num_bytes, num_handles)) =
3428                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3429            {
3430                let member_inline_size = <fidl::encoding::Vector<CompositeDaiInterconnect, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3431                if inlined != (member_inline_size <= 4) {
3432                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3433                }
3434                let inner_offset;
3435                let mut inner_depth = depth.clone();
3436                if inlined {
3437                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3438                    inner_offset = next_offset;
3439                } else {
3440                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3441                    inner_depth.increment()?;
3442                }
3443                let val_ref = self.dai_interconnects.get_or_insert_with(
3444                    || fidl::new_empty!(fidl::encoding::Vector<CompositeDaiInterconnect, 64>, D),
3445                );
3446                fidl::decode!(fidl::encoding::Vector<CompositeDaiInterconnect, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
3447                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3448                {
3449                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3450                }
3451                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3452                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3453                }
3454            }
3455
3456            next_offset += envelope_size;
3457            _next_ordinal_to_read += 1;
3458            if next_offset >= end_offset {
3459                return Ok(());
3460            }
3461
3462            // Decode unknown envelopes for gaps in ordinals.
3463            while _next_ordinal_to_read < 3 {
3464                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3465                _next_ordinal_to_read += 1;
3466                next_offset += envelope_size;
3467            }
3468
3469            let next_out_of_line = decoder.next_out_of_line();
3470            let handles_before = decoder.remaining_handles();
3471            if let Some((inlined, num_bytes, num_handles)) =
3472                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3473            {
3474                let member_inline_size =
3475                    <ClockProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3476                if inlined != (member_inline_size <= 4) {
3477                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3478                }
3479                let inner_offset;
3480                let mut inner_depth = depth.clone();
3481                if inlined {
3482                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3483                    inner_offset = next_offset;
3484                } else {
3485                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3486                    inner_depth.increment()?;
3487                }
3488                let val_ref = self
3489                    .clock_properties
3490                    .get_or_insert_with(|| fidl::new_empty!(ClockProperties, D));
3491                fidl::decode!(ClockProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
3492                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3493                {
3494                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3495                }
3496                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3497                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3498                }
3499            }
3500
3501            next_offset += envelope_size;
3502            _next_ordinal_to_read += 1;
3503            if next_offset >= end_offset {
3504                return Ok(());
3505            }
3506
3507            // Decode unknown envelopes for gaps in ordinals.
3508            while _next_ordinal_to_read < 4 {
3509                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3510                _next_ordinal_to_read += 1;
3511                next_offset += envelope_size;
3512            }
3513
3514            let next_out_of_line = decoder.next_out_of_line();
3515            let handles_before = decoder.remaining_handles();
3516            if let Some((inlined, num_bytes, num_handles)) =
3517                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3518            {
3519                let member_inline_size = <fidl::encoding::Vector<
3520                    fidl_fuchsia_hardware_audio_signalprocessing_common::Topology,
3521                    64,
3522                > as fidl::encoding::TypeMarker>::inline_size(
3523                    decoder.context
3524                );
3525                if inlined != (member_inline_size <= 4) {
3526                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3527                }
3528                let inner_offset;
3529                let mut inner_depth = depth.clone();
3530                if inlined {
3531                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3532                    inner_offset = next_offset;
3533                } else {
3534                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3535                    inner_depth.increment()?;
3536                }
3537                let val_ref =
3538                self.topologies.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_hardware_audio_signalprocessing_common::Topology, 64>, D));
3539                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_hardware_audio_signalprocessing_common::Topology, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
3540                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3541                {
3542                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3543                }
3544                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3545                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3546                }
3547            }
3548
3549            next_offset += envelope_size;
3550            _next_ordinal_to_read += 1;
3551            if next_offset >= end_offset {
3552                return Ok(());
3553            }
3554
3555            // Decode unknown envelopes for gaps in ordinals.
3556            while _next_ordinal_to_read < 5 {
3557                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3558                _next_ordinal_to_read += 1;
3559                next_offset += envelope_size;
3560            }
3561
3562            let next_out_of_line = decoder.next_out_of_line();
3563            let handles_before = decoder.remaining_handles();
3564            if let Some((inlined, num_bytes, num_handles)) =
3565                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3566            {
3567                let member_inline_size = <fidl::encoding::Vector<CompositePacketStream, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3568                if inlined != (member_inline_size <= 4) {
3569                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3570                }
3571                let inner_offset;
3572                let mut inner_depth = depth.clone();
3573                if inlined {
3574                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3575                    inner_offset = next_offset;
3576                } else {
3577                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3578                    inner_depth.increment()?;
3579                }
3580                let val_ref = self.packet_streams.get_or_insert_with(
3581                    || fidl::new_empty!(fidl::encoding::Vector<CompositePacketStream, 64>, D),
3582                );
3583                fidl::decode!(fidl::encoding::Vector<CompositePacketStream, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
3584                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3585                {
3586                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3587                }
3588                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3589                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3590                }
3591            }
3592
3593            next_offset += envelope_size;
3594
3595            // Decode the remaining unknown envelopes.
3596            while next_offset < end_offset {
3597                _next_ordinal_to_read += 1;
3598                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3599                next_offset += envelope_size;
3600            }
3601
3602            Ok(())
3603        }
3604    }
3605
3606    impl CompositeDaiInterconnect {
3607        #[inline(always)]
3608        fn max_ordinal_present(&self) -> u64 {
3609            if let Some(_) = self.dai_interconnect {
3610                return 2;
3611            }
3612            if let Some(_) = self.id {
3613                return 1;
3614            }
3615            0
3616        }
3617    }
3618
3619    impl fidl::encoding::ValueTypeMarker for CompositeDaiInterconnect {
3620        type Borrowed<'a> = &'a Self;
3621        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3622            value
3623        }
3624    }
3625
3626    unsafe impl fidl::encoding::TypeMarker for CompositeDaiInterconnect {
3627        type Owned = Self;
3628
3629        #[inline(always)]
3630        fn inline_align(_context: fidl::encoding::Context) -> usize {
3631            8
3632        }
3633
3634        #[inline(always)]
3635        fn inline_size(_context: fidl::encoding::Context) -> usize {
3636            16
3637        }
3638    }
3639
3640    unsafe impl<D: fidl::encoding::ResourceDialect>
3641        fidl::encoding::Encode<CompositeDaiInterconnect, D> for &CompositeDaiInterconnect
3642    {
3643        unsafe fn encode(
3644            self,
3645            encoder: &mut fidl::encoding::Encoder<'_, D>,
3646            offset: usize,
3647            mut depth: fidl::encoding::Depth,
3648        ) -> fidl::Result<()> {
3649            encoder.debug_check_bounds::<CompositeDaiInterconnect>(offset);
3650            // Vector header
3651            let max_ordinal: u64 = self.max_ordinal_present();
3652            encoder.write_num(max_ordinal, offset);
3653            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3654            // Calling encoder.out_of_line_offset(0) is not allowed.
3655            if max_ordinal == 0 {
3656                return Ok(());
3657            }
3658            depth.increment()?;
3659            let envelope_size = 8;
3660            let bytes_len = max_ordinal as usize * envelope_size;
3661            #[allow(unused_variables)]
3662            let offset = encoder.out_of_line_offset(bytes_len);
3663            let mut _prev_end_offset: usize = 0;
3664            if 1 > max_ordinal {
3665                return Ok(());
3666            }
3667
3668            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3669            // are envelope_size bytes.
3670            let cur_offset: usize = (1 - 1) * envelope_size;
3671
3672            // Zero reserved fields.
3673            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3674
3675            // Safety:
3676            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3677            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3678            //   envelope_size bytes, there is always sufficient room.
3679            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3680                self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3681                encoder,
3682                offset + cur_offset,
3683                depth,
3684            )?;
3685
3686            _prev_end_offset = cur_offset + envelope_size;
3687            if 2 > max_ordinal {
3688                return Ok(());
3689            }
3690
3691            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3692            // are envelope_size bytes.
3693            let cur_offset: usize = (2 - 1) * envelope_size;
3694
3695            // Zero reserved fields.
3696            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3697
3698            // Safety:
3699            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3700            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3701            //   envelope_size bytes, there is always sufficient room.
3702            fidl::encoding::encode_in_envelope_optional::<DaiInterconnect, D>(
3703                self.dai_interconnect
3704                    .as_ref()
3705                    .map(<DaiInterconnect as fidl::encoding::ValueTypeMarker>::borrow),
3706                encoder,
3707                offset + cur_offset,
3708                depth,
3709            )?;
3710
3711            _prev_end_offset = cur_offset + envelope_size;
3712
3713            Ok(())
3714        }
3715    }
3716
3717    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3718        for CompositeDaiInterconnect
3719    {
3720        #[inline(always)]
3721        fn new_empty() -> Self {
3722            Self::default()
3723        }
3724
3725        unsafe fn decode(
3726            &mut self,
3727            decoder: &mut fidl::encoding::Decoder<'_, D>,
3728            offset: usize,
3729            mut depth: fidl::encoding::Depth,
3730        ) -> fidl::Result<()> {
3731            decoder.debug_check_bounds::<Self>(offset);
3732            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3733                None => return Err(fidl::Error::NotNullable),
3734                Some(len) => len,
3735            };
3736            // Calling decoder.out_of_line_offset(0) is not allowed.
3737            if len == 0 {
3738                return Ok(());
3739            };
3740            depth.increment()?;
3741            let envelope_size = 8;
3742            let bytes_len = len * envelope_size;
3743            let offset = decoder.out_of_line_offset(bytes_len)?;
3744            // Decode the envelope for each type.
3745            let mut _next_ordinal_to_read = 0;
3746            let mut next_offset = offset;
3747            let end_offset = offset + bytes_len;
3748            _next_ordinal_to_read += 1;
3749            if next_offset >= end_offset {
3750                return Ok(());
3751            }
3752
3753            // Decode unknown envelopes for gaps in ordinals.
3754            while _next_ordinal_to_read < 1 {
3755                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3756                _next_ordinal_to_read += 1;
3757                next_offset += envelope_size;
3758            }
3759
3760            let next_out_of_line = decoder.next_out_of_line();
3761            let handles_before = decoder.remaining_handles();
3762            if let Some((inlined, num_bytes, num_handles)) =
3763                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3764            {
3765                let member_inline_size =
3766                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3767                if inlined != (member_inline_size <= 4) {
3768                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3769                }
3770                let inner_offset;
3771                let mut inner_depth = depth.clone();
3772                if inlined {
3773                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3774                    inner_offset = next_offset;
3775                } else {
3776                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3777                    inner_depth.increment()?;
3778                }
3779                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
3780                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3781                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3782                {
3783                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3784                }
3785                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3786                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3787                }
3788            }
3789
3790            next_offset += envelope_size;
3791            _next_ordinal_to_read += 1;
3792            if next_offset >= end_offset {
3793                return Ok(());
3794            }
3795
3796            // Decode unknown envelopes for gaps in ordinals.
3797            while _next_ordinal_to_read < 2 {
3798                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3799                _next_ordinal_to_read += 1;
3800                next_offset += envelope_size;
3801            }
3802
3803            let next_out_of_line = decoder.next_out_of_line();
3804            let handles_before = decoder.remaining_handles();
3805            if let Some((inlined, num_bytes, num_handles)) =
3806                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3807            {
3808                let member_inline_size =
3809                    <DaiInterconnect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3810                if inlined != (member_inline_size <= 4) {
3811                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3812                }
3813                let inner_offset;
3814                let mut inner_depth = depth.clone();
3815                if inlined {
3816                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3817                    inner_offset = next_offset;
3818                } else {
3819                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3820                    inner_depth.increment()?;
3821                }
3822                let val_ref = self
3823                    .dai_interconnect
3824                    .get_or_insert_with(|| fidl::new_empty!(DaiInterconnect, D));
3825                fidl::decode!(DaiInterconnect, D, val_ref, decoder, inner_offset, inner_depth)?;
3826                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3827                {
3828                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3829                }
3830                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3831                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3832                }
3833            }
3834
3835            next_offset += envelope_size;
3836
3837            // Decode the remaining unknown envelopes.
3838            while next_offset < end_offset {
3839                _next_ordinal_to_read += 1;
3840                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3841                next_offset += envelope_size;
3842            }
3843
3844            Ok(())
3845        }
3846    }
3847
3848    impl CompositePacketStream {
3849        #[inline(always)]
3850        fn max_ordinal_present(&self) -> u64 {
3851            if let Some(_) = self.packet_stream {
3852                return 2;
3853            }
3854            if let Some(_) = self.id {
3855                return 1;
3856            }
3857            0
3858        }
3859    }
3860
3861    impl fidl::encoding::ValueTypeMarker for CompositePacketStream {
3862        type Borrowed<'a> = &'a Self;
3863        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3864            value
3865        }
3866    }
3867
3868    unsafe impl fidl::encoding::TypeMarker for CompositePacketStream {
3869        type Owned = Self;
3870
3871        #[inline(always)]
3872        fn inline_align(_context: fidl::encoding::Context) -> usize {
3873            8
3874        }
3875
3876        #[inline(always)]
3877        fn inline_size(_context: fidl::encoding::Context) -> usize {
3878            16
3879        }
3880    }
3881
3882    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositePacketStream, D>
3883        for &CompositePacketStream
3884    {
3885        unsafe fn encode(
3886            self,
3887            encoder: &mut fidl::encoding::Encoder<'_, D>,
3888            offset: usize,
3889            mut depth: fidl::encoding::Depth,
3890        ) -> fidl::Result<()> {
3891            encoder.debug_check_bounds::<CompositePacketStream>(offset);
3892            // Vector header
3893            let max_ordinal: u64 = self.max_ordinal_present();
3894            encoder.write_num(max_ordinal, offset);
3895            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3896            // Calling encoder.out_of_line_offset(0) is not allowed.
3897            if max_ordinal == 0 {
3898                return Ok(());
3899            }
3900            depth.increment()?;
3901            let envelope_size = 8;
3902            let bytes_len = max_ordinal as usize * envelope_size;
3903            #[allow(unused_variables)]
3904            let offset = encoder.out_of_line_offset(bytes_len);
3905            let mut _prev_end_offset: usize = 0;
3906            if 1 > max_ordinal {
3907                return Ok(());
3908            }
3909
3910            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3911            // are envelope_size bytes.
3912            let cur_offset: usize = (1 - 1) * envelope_size;
3913
3914            // Zero reserved fields.
3915            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3916
3917            // Safety:
3918            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3919            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3920            //   envelope_size bytes, there is always sufficient room.
3921            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3922                self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3923                encoder,
3924                offset + cur_offset,
3925                depth,
3926            )?;
3927
3928            _prev_end_offset = cur_offset + envelope_size;
3929            if 2 > max_ordinal {
3930                return Ok(());
3931            }
3932
3933            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3934            // are envelope_size bytes.
3935            let cur_offset: usize = (2 - 1) * envelope_size;
3936
3937            // Zero reserved fields.
3938            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3939
3940            // Safety:
3941            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3942            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3943            //   envelope_size bytes, there is always sufficient room.
3944            fidl::encoding::encode_in_envelope_optional::<PacketStream, D>(
3945                self.packet_stream
3946                    .as_ref()
3947                    .map(<PacketStream as fidl::encoding::ValueTypeMarker>::borrow),
3948                encoder,
3949                offset + cur_offset,
3950                depth,
3951            )?;
3952
3953            _prev_end_offset = cur_offset + envelope_size;
3954
3955            Ok(())
3956        }
3957    }
3958
3959    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositePacketStream {
3960        #[inline(always)]
3961        fn new_empty() -> Self {
3962            Self::default()
3963        }
3964
3965        unsafe fn decode(
3966            &mut self,
3967            decoder: &mut fidl::encoding::Decoder<'_, D>,
3968            offset: usize,
3969            mut depth: fidl::encoding::Depth,
3970        ) -> fidl::Result<()> {
3971            decoder.debug_check_bounds::<Self>(offset);
3972            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3973                None => return Err(fidl::Error::NotNullable),
3974                Some(len) => len,
3975            };
3976            // Calling decoder.out_of_line_offset(0) is not allowed.
3977            if len == 0 {
3978                return Ok(());
3979            };
3980            depth.increment()?;
3981            let envelope_size = 8;
3982            let bytes_len = len * envelope_size;
3983            let offset = decoder.out_of_line_offset(bytes_len)?;
3984            // Decode the envelope for each type.
3985            let mut _next_ordinal_to_read = 0;
3986            let mut next_offset = offset;
3987            let end_offset = offset + bytes_len;
3988            _next_ordinal_to_read += 1;
3989            if next_offset >= end_offset {
3990                return Ok(());
3991            }
3992
3993            // Decode unknown envelopes for gaps in ordinals.
3994            while _next_ordinal_to_read < 1 {
3995                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3996                _next_ordinal_to_read += 1;
3997                next_offset += envelope_size;
3998            }
3999
4000            let next_out_of_line = decoder.next_out_of_line();
4001            let handles_before = decoder.remaining_handles();
4002            if let Some((inlined, num_bytes, num_handles)) =
4003                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4004            {
4005                let member_inline_size =
4006                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4007                if inlined != (member_inline_size <= 4) {
4008                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4009                }
4010                let inner_offset;
4011                let mut inner_depth = depth.clone();
4012                if inlined {
4013                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4014                    inner_offset = next_offset;
4015                } else {
4016                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4017                    inner_depth.increment()?;
4018                }
4019                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
4020                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4021                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4022                {
4023                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4024                }
4025                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4026                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4027                }
4028            }
4029
4030            next_offset += envelope_size;
4031            _next_ordinal_to_read += 1;
4032            if next_offset >= end_offset {
4033                return Ok(());
4034            }
4035
4036            // Decode unknown envelopes for gaps in ordinals.
4037            while _next_ordinal_to_read < 2 {
4038                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4039                _next_ordinal_to_read += 1;
4040                next_offset += envelope_size;
4041            }
4042
4043            let next_out_of_line = decoder.next_out_of_line();
4044            let handles_before = decoder.remaining_handles();
4045            if let Some((inlined, num_bytes, num_handles)) =
4046                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4047            {
4048                let member_inline_size =
4049                    <PacketStream as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4050                if inlined != (member_inline_size <= 4) {
4051                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4052                }
4053                let inner_offset;
4054                let mut inner_depth = depth.clone();
4055                if inlined {
4056                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4057                    inner_offset = next_offset;
4058                } else {
4059                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4060                    inner_depth.increment()?;
4061                }
4062                let val_ref =
4063                    self.packet_stream.get_or_insert_with(|| fidl::new_empty!(PacketStream, D));
4064                fidl::decode!(PacketStream, D, val_ref, decoder, inner_offset, inner_depth)?;
4065                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4066                {
4067                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4068                }
4069                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4070                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4071                }
4072            }
4073
4074            next_offset += envelope_size;
4075
4076            // Decode the remaining unknown envelopes.
4077            while next_offset < end_offset {
4078                _next_ordinal_to_read += 1;
4079                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4080                next_offset += envelope_size;
4081            }
4082
4083            Ok(())
4084        }
4085    }
4086
4087    impl CompositeRingBuffer {
4088        #[inline(always)]
4089        fn max_ordinal_present(&self) -> u64 {
4090            if let Some(_) = self.ring_buffer {
4091                return 2;
4092            }
4093            if let Some(_) = self.id {
4094                return 1;
4095            }
4096            0
4097        }
4098    }
4099
4100    impl fidl::encoding::ValueTypeMarker for CompositeRingBuffer {
4101        type Borrowed<'a> = &'a Self;
4102        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4103            value
4104        }
4105    }
4106
4107    unsafe impl fidl::encoding::TypeMarker for CompositeRingBuffer {
4108        type Owned = Self;
4109
4110        #[inline(always)]
4111        fn inline_align(_context: fidl::encoding::Context) -> usize {
4112            8
4113        }
4114
4115        #[inline(always)]
4116        fn inline_size(_context: fidl::encoding::Context) -> usize {
4117            16
4118        }
4119    }
4120
4121    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeRingBuffer, D>
4122        for &CompositeRingBuffer
4123    {
4124        unsafe fn encode(
4125            self,
4126            encoder: &mut fidl::encoding::Encoder<'_, D>,
4127            offset: usize,
4128            mut depth: fidl::encoding::Depth,
4129        ) -> fidl::Result<()> {
4130            encoder.debug_check_bounds::<CompositeRingBuffer>(offset);
4131            // Vector header
4132            let max_ordinal: u64 = self.max_ordinal_present();
4133            encoder.write_num(max_ordinal, offset);
4134            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4135            // Calling encoder.out_of_line_offset(0) is not allowed.
4136            if max_ordinal == 0 {
4137                return Ok(());
4138            }
4139            depth.increment()?;
4140            let envelope_size = 8;
4141            let bytes_len = max_ordinal as usize * envelope_size;
4142            #[allow(unused_variables)]
4143            let offset = encoder.out_of_line_offset(bytes_len);
4144            let mut _prev_end_offset: usize = 0;
4145            if 1 > max_ordinal {
4146                return Ok(());
4147            }
4148
4149            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4150            // are envelope_size bytes.
4151            let cur_offset: usize = (1 - 1) * envelope_size;
4152
4153            // Zero reserved fields.
4154            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4155
4156            // Safety:
4157            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4158            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4159            //   envelope_size bytes, there is always sufficient room.
4160            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4161                self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4162                encoder,
4163                offset + cur_offset,
4164                depth,
4165            )?;
4166
4167            _prev_end_offset = cur_offset + envelope_size;
4168            if 2 > max_ordinal {
4169                return Ok(());
4170            }
4171
4172            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4173            // are envelope_size bytes.
4174            let cur_offset: usize = (2 - 1) * envelope_size;
4175
4176            // Zero reserved fields.
4177            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4178
4179            // Safety:
4180            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4181            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4182            //   envelope_size bytes, there is always sufficient room.
4183            fidl::encoding::encode_in_envelope_optional::<RingBuffer, D>(
4184                self.ring_buffer
4185                    .as_ref()
4186                    .map(<RingBuffer as fidl::encoding::ValueTypeMarker>::borrow),
4187                encoder,
4188                offset + cur_offset,
4189                depth,
4190            )?;
4191
4192            _prev_end_offset = cur_offset + envelope_size;
4193
4194            Ok(())
4195        }
4196    }
4197
4198    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeRingBuffer {
4199        #[inline(always)]
4200        fn new_empty() -> Self {
4201            Self::default()
4202        }
4203
4204        unsafe fn decode(
4205            &mut self,
4206            decoder: &mut fidl::encoding::Decoder<'_, D>,
4207            offset: usize,
4208            mut depth: fidl::encoding::Depth,
4209        ) -> fidl::Result<()> {
4210            decoder.debug_check_bounds::<Self>(offset);
4211            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4212                None => return Err(fidl::Error::NotNullable),
4213                Some(len) => len,
4214            };
4215            // Calling decoder.out_of_line_offset(0) is not allowed.
4216            if len == 0 {
4217                return Ok(());
4218            };
4219            depth.increment()?;
4220            let envelope_size = 8;
4221            let bytes_len = len * envelope_size;
4222            let offset = decoder.out_of_line_offset(bytes_len)?;
4223            // Decode the envelope for each type.
4224            let mut _next_ordinal_to_read = 0;
4225            let mut next_offset = offset;
4226            let end_offset = offset + bytes_len;
4227            _next_ordinal_to_read += 1;
4228            if next_offset >= end_offset {
4229                return Ok(());
4230            }
4231
4232            // Decode unknown envelopes for gaps in ordinals.
4233            while _next_ordinal_to_read < 1 {
4234                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4235                _next_ordinal_to_read += 1;
4236                next_offset += envelope_size;
4237            }
4238
4239            let next_out_of_line = decoder.next_out_of_line();
4240            let handles_before = decoder.remaining_handles();
4241            if let Some((inlined, num_bytes, num_handles)) =
4242                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4243            {
4244                let member_inline_size =
4245                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4246                if inlined != (member_inline_size <= 4) {
4247                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4248                }
4249                let inner_offset;
4250                let mut inner_depth = depth.clone();
4251                if inlined {
4252                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4253                    inner_offset = next_offset;
4254                } else {
4255                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4256                    inner_depth.increment()?;
4257                }
4258                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
4259                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4260                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4261                {
4262                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4263                }
4264                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4265                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4266                }
4267            }
4268
4269            next_offset += envelope_size;
4270            _next_ordinal_to_read += 1;
4271            if next_offset >= end_offset {
4272                return Ok(());
4273            }
4274
4275            // Decode unknown envelopes for gaps in ordinals.
4276            while _next_ordinal_to_read < 2 {
4277                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4278                _next_ordinal_to_read += 1;
4279                next_offset += envelope_size;
4280            }
4281
4282            let next_out_of_line = decoder.next_out_of_line();
4283            let handles_before = decoder.remaining_handles();
4284            if let Some((inlined, num_bytes, num_handles)) =
4285                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4286            {
4287                let member_inline_size =
4288                    <RingBuffer as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4289                if inlined != (member_inline_size <= 4) {
4290                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4291                }
4292                let inner_offset;
4293                let mut inner_depth = depth.clone();
4294                if inlined {
4295                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4296                    inner_offset = next_offset;
4297                } else {
4298                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4299                    inner_depth.increment()?;
4300                }
4301                let val_ref =
4302                    self.ring_buffer.get_or_insert_with(|| fidl::new_empty!(RingBuffer, D));
4303                fidl::decode!(RingBuffer, D, val_ref, decoder, inner_offset, inner_depth)?;
4304                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4305                {
4306                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4307                }
4308                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4309                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4310                }
4311            }
4312
4313            next_offset += envelope_size;
4314
4315            // Decode the remaining unknown envelopes.
4316            while next_offset < end_offset {
4317                _next_ordinal_to_read += 1;
4318                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4319                next_offset += envelope_size;
4320            }
4321
4322            Ok(())
4323        }
4324    }
4325
4326    impl Configuration {
4327        #[inline(always)]
4328        fn max_ordinal_present(&self) -> u64 {
4329            if let Some(_) = self.device_specific {
4330                return 5;
4331            }
4332            if let Some(_) = self.unique_id {
4333                return 4;
4334            }
4335            if let Some(_) = self.product_name {
4336                return 3;
4337            }
4338            if let Some(_) = self.manufacturer_name {
4339                return 2;
4340            }
4341            if let Some(_) = self.device_name {
4342                return 1;
4343            }
4344            0
4345        }
4346    }
4347
4348    impl fidl::encoding::ValueTypeMarker for Configuration {
4349        type Borrowed<'a> = &'a Self;
4350        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4351            value
4352        }
4353    }
4354
4355    unsafe impl fidl::encoding::TypeMarker for Configuration {
4356        type Owned = Self;
4357
4358        #[inline(always)]
4359        fn inline_align(_context: fidl::encoding::Context) -> usize {
4360            8
4361        }
4362
4363        #[inline(always)]
4364        fn inline_size(_context: fidl::encoding::Context) -> usize {
4365            16
4366        }
4367    }
4368
4369    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Configuration, D>
4370        for &Configuration
4371    {
4372        unsafe fn encode(
4373            self,
4374            encoder: &mut fidl::encoding::Encoder<'_, D>,
4375            offset: usize,
4376            mut depth: fidl::encoding::Depth,
4377        ) -> fidl::Result<()> {
4378            encoder.debug_check_bounds::<Configuration>(offset);
4379            // Vector header
4380            let max_ordinal: u64 = self.max_ordinal_present();
4381            encoder.write_num(max_ordinal, offset);
4382            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4383            // Calling encoder.out_of_line_offset(0) is not allowed.
4384            if max_ordinal == 0 {
4385                return Ok(());
4386            }
4387            depth.increment()?;
4388            let envelope_size = 8;
4389            let bytes_len = max_ordinal as usize * envelope_size;
4390            #[allow(unused_variables)]
4391            let offset = encoder.out_of_line_offset(bytes_len);
4392            let mut _prev_end_offset: usize = 0;
4393            if 1 > max_ordinal {
4394                return Ok(());
4395            }
4396
4397            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4398            // are envelope_size bytes.
4399            let cur_offset: usize = (1 - 1) * envelope_size;
4400
4401            // Zero reserved fields.
4402            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4403
4404            // Safety:
4405            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4406            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4407            //   envelope_size bytes, there is always sufficient room.
4408            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
4409                self.device_name.as_ref().map(
4410                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
4411                ),
4412                encoder,
4413                offset + cur_offset,
4414                depth,
4415            )?;
4416
4417            _prev_end_offset = cur_offset + envelope_size;
4418            if 2 > max_ordinal {
4419                return Ok(());
4420            }
4421
4422            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4423            // are envelope_size bytes.
4424            let cur_offset: usize = (2 - 1) * envelope_size;
4425
4426            // Zero reserved fields.
4427            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4428
4429            // Safety:
4430            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4431            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4432            //   envelope_size bytes, there is always sufficient room.
4433            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
4434                self.manufacturer_name.as_ref().map(
4435                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
4436                ),
4437                encoder,
4438                offset + cur_offset,
4439                depth,
4440            )?;
4441
4442            _prev_end_offset = cur_offset + envelope_size;
4443            if 3 > max_ordinal {
4444                return Ok(());
4445            }
4446
4447            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4448            // are envelope_size bytes.
4449            let cur_offset: usize = (3 - 1) * envelope_size;
4450
4451            // Zero reserved fields.
4452            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4453
4454            // Safety:
4455            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4456            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4457            //   envelope_size bytes, there is always sufficient room.
4458            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<256>, D>(
4459                self.product_name.as_ref().map(
4460                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow,
4461                ),
4462                encoder,
4463                offset + cur_offset,
4464                depth,
4465            )?;
4466
4467            _prev_end_offset = cur_offset + envelope_size;
4468            if 4 > max_ordinal {
4469                return Ok(());
4470            }
4471
4472            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4473            // are envelope_size bytes.
4474            let cur_offset: usize = (4 - 1) * envelope_size;
4475
4476            // Zero reserved fields.
4477            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4478
4479            // Safety:
4480            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4481            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4482            //   envelope_size bytes, there is always sufficient room.
4483            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<u8, 16>, D>(
4484                self.unique_id.as_ref().map(
4485                    <fidl::encoding::Array<u8, 16> as fidl::encoding::ValueTypeMarker>::borrow,
4486                ),
4487                encoder,
4488                offset + cur_offset,
4489                depth,
4490            )?;
4491
4492            _prev_end_offset = cur_offset + envelope_size;
4493            if 5 > max_ordinal {
4494                return Ok(());
4495            }
4496
4497            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4498            // are envelope_size bytes.
4499            let cur_offset: usize = (5 - 1) * envelope_size;
4500
4501            // Zero reserved fields.
4502            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4503
4504            // Safety:
4505            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4506            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4507            //   envelope_size bytes, there is always sufficient room.
4508            fidl::encoding::encode_in_envelope_optional::<DeviceSpecific, D>(
4509                self.device_specific
4510                    .as_ref()
4511                    .map(<DeviceSpecific as fidl::encoding::ValueTypeMarker>::borrow),
4512                encoder,
4513                offset + cur_offset,
4514                depth,
4515            )?;
4516
4517            _prev_end_offset = cur_offset + envelope_size;
4518
4519            Ok(())
4520        }
4521    }
4522
4523    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Configuration {
4524        #[inline(always)]
4525        fn new_empty() -> Self {
4526            Self::default()
4527        }
4528
4529        unsafe fn decode(
4530            &mut self,
4531            decoder: &mut fidl::encoding::Decoder<'_, D>,
4532            offset: usize,
4533            mut depth: fidl::encoding::Depth,
4534        ) -> fidl::Result<()> {
4535            decoder.debug_check_bounds::<Self>(offset);
4536            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4537                None => return Err(fidl::Error::NotNullable),
4538                Some(len) => len,
4539            };
4540            // Calling decoder.out_of_line_offset(0) is not allowed.
4541            if len == 0 {
4542                return Ok(());
4543            };
4544            depth.increment()?;
4545            let envelope_size = 8;
4546            let bytes_len = len * envelope_size;
4547            let offset = decoder.out_of_line_offset(bytes_len)?;
4548            // Decode the envelope for each type.
4549            let mut _next_ordinal_to_read = 0;
4550            let mut next_offset = offset;
4551            let end_offset = offset + bytes_len;
4552            _next_ordinal_to_read += 1;
4553            if next_offset >= end_offset {
4554                return Ok(());
4555            }
4556
4557            // Decode unknown envelopes for gaps in ordinals.
4558            while _next_ordinal_to_read < 1 {
4559                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4560                _next_ordinal_to_read += 1;
4561                next_offset += envelope_size;
4562            }
4563
4564            let next_out_of_line = decoder.next_out_of_line();
4565            let handles_before = decoder.remaining_handles();
4566            if let Some((inlined, num_bytes, num_handles)) =
4567                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4568            {
4569                let member_inline_size =
4570                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
4571                        decoder.context,
4572                    );
4573                if inlined != (member_inline_size <= 4) {
4574                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4575                }
4576                let inner_offset;
4577                let mut inner_depth = depth.clone();
4578                if inlined {
4579                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4580                    inner_offset = next_offset;
4581                } else {
4582                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4583                    inner_depth.increment()?;
4584                }
4585                let val_ref = self
4586                    .device_name
4587                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
4588                fidl::decode!(
4589                    fidl::encoding::BoundedString<256>,
4590                    D,
4591                    val_ref,
4592                    decoder,
4593                    inner_offset,
4594                    inner_depth
4595                )?;
4596                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4597                {
4598                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4599                }
4600                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4601                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4602                }
4603            }
4604
4605            next_offset += envelope_size;
4606            _next_ordinal_to_read += 1;
4607            if next_offset >= end_offset {
4608                return Ok(());
4609            }
4610
4611            // Decode unknown envelopes for gaps in ordinals.
4612            while _next_ordinal_to_read < 2 {
4613                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4614                _next_ordinal_to_read += 1;
4615                next_offset += envelope_size;
4616            }
4617
4618            let next_out_of_line = decoder.next_out_of_line();
4619            let handles_before = decoder.remaining_handles();
4620            if let Some((inlined, num_bytes, num_handles)) =
4621                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4622            {
4623                let member_inline_size =
4624                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
4625                        decoder.context,
4626                    );
4627                if inlined != (member_inline_size <= 4) {
4628                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4629                }
4630                let inner_offset;
4631                let mut inner_depth = depth.clone();
4632                if inlined {
4633                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4634                    inner_offset = next_offset;
4635                } else {
4636                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4637                    inner_depth.increment()?;
4638                }
4639                let val_ref = self
4640                    .manufacturer_name
4641                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
4642                fidl::decode!(
4643                    fidl::encoding::BoundedString<256>,
4644                    D,
4645                    val_ref,
4646                    decoder,
4647                    inner_offset,
4648                    inner_depth
4649                )?;
4650                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4651                {
4652                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4653                }
4654                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4655                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4656                }
4657            }
4658
4659            next_offset += envelope_size;
4660            _next_ordinal_to_read += 1;
4661            if next_offset >= end_offset {
4662                return Ok(());
4663            }
4664
4665            // Decode unknown envelopes for gaps in ordinals.
4666            while _next_ordinal_to_read < 3 {
4667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4668                _next_ordinal_to_read += 1;
4669                next_offset += envelope_size;
4670            }
4671
4672            let next_out_of_line = decoder.next_out_of_line();
4673            let handles_before = decoder.remaining_handles();
4674            if let Some((inlined, num_bytes, num_handles)) =
4675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4676            {
4677                let member_inline_size =
4678                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
4679                        decoder.context,
4680                    );
4681                if inlined != (member_inline_size <= 4) {
4682                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4683                }
4684                let inner_offset;
4685                let mut inner_depth = depth.clone();
4686                if inlined {
4687                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4688                    inner_offset = next_offset;
4689                } else {
4690                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4691                    inner_depth.increment()?;
4692                }
4693                let val_ref = self
4694                    .product_name
4695                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<256>, D));
4696                fidl::decode!(
4697                    fidl::encoding::BoundedString<256>,
4698                    D,
4699                    val_ref,
4700                    decoder,
4701                    inner_offset,
4702                    inner_depth
4703                )?;
4704                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4705                {
4706                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4707                }
4708                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4709                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4710                }
4711            }
4712
4713            next_offset += envelope_size;
4714            _next_ordinal_to_read += 1;
4715            if next_offset >= end_offset {
4716                return Ok(());
4717            }
4718
4719            // Decode unknown envelopes for gaps in ordinals.
4720            while _next_ordinal_to_read < 4 {
4721                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4722                _next_ordinal_to_read += 1;
4723                next_offset += envelope_size;
4724            }
4725
4726            let next_out_of_line = decoder.next_out_of_line();
4727            let handles_before = decoder.remaining_handles();
4728            if let Some((inlined, num_bytes, num_handles)) =
4729                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4730            {
4731                let member_inline_size =
4732                    <fidl::encoding::Array<u8, 16> as fidl::encoding::TypeMarker>::inline_size(
4733                        decoder.context,
4734                    );
4735                if inlined != (member_inline_size <= 4) {
4736                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4737                }
4738                let inner_offset;
4739                let mut inner_depth = depth.clone();
4740                if inlined {
4741                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4742                    inner_offset = next_offset;
4743                } else {
4744                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4745                    inner_depth.increment()?;
4746                }
4747                let val_ref = self
4748                    .unique_id
4749                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<u8, 16>, D));
4750                fidl::decode!(fidl::encoding::Array<u8, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
4751                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4752                {
4753                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4754                }
4755                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4756                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4757                }
4758            }
4759
4760            next_offset += envelope_size;
4761            _next_ordinal_to_read += 1;
4762            if next_offset >= end_offset {
4763                return Ok(());
4764            }
4765
4766            // Decode unknown envelopes for gaps in ordinals.
4767            while _next_ordinal_to_read < 5 {
4768                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4769                _next_ordinal_to_read += 1;
4770                next_offset += envelope_size;
4771            }
4772
4773            let next_out_of_line = decoder.next_out_of_line();
4774            let handles_before = decoder.remaining_handles();
4775            if let Some((inlined, num_bytes, num_handles)) =
4776                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4777            {
4778                let member_inline_size =
4779                    <DeviceSpecific as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4780                if inlined != (member_inline_size <= 4) {
4781                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4782                }
4783                let inner_offset;
4784                let mut inner_depth = depth.clone();
4785                if inlined {
4786                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4787                    inner_offset = next_offset;
4788                } else {
4789                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4790                    inner_depth.increment()?;
4791                }
4792                let val_ref =
4793                    self.device_specific.get_or_insert_with(|| fidl::new_empty!(DeviceSpecific, D));
4794                fidl::decode!(DeviceSpecific, D, val_ref, decoder, inner_offset, inner_depth)?;
4795                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4796                {
4797                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4798                }
4799                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4800                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4801                }
4802            }
4803
4804            next_offset += envelope_size;
4805
4806            // Decode the remaining unknown envelopes.
4807            while next_offset < end_offset {
4808                _next_ordinal_to_read += 1;
4809                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4810                next_offset += envelope_size;
4811            }
4812
4813            Ok(())
4814        }
4815    }
4816
4817    impl Dai {
4818        #[inline(always)]
4819        fn max_ordinal_present(&self) -> u64 {
4820            if let Some(_) = self.clock_properties {
4821                return 4;
4822            }
4823            if let Some(_) = self.dai_interconnect {
4824                return 3;
4825            }
4826            if let Some(_) = self.ring_buffer {
4827                return 2;
4828            }
4829            if let Some(_) = self.is_input {
4830                return 1;
4831            }
4832            0
4833        }
4834    }
4835
4836    impl fidl::encoding::ValueTypeMarker for Dai {
4837        type Borrowed<'a> = &'a Self;
4838        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4839            value
4840        }
4841    }
4842
4843    unsafe impl fidl::encoding::TypeMarker for Dai {
4844        type Owned = Self;
4845
4846        #[inline(always)]
4847        fn inline_align(_context: fidl::encoding::Context) -> usize {
4848            8
4849        }
4850
4851        #[inline(always)]
4852        fn inline_size(_context: fidl::encoding::Context) -> usize {
4853            16
4854        }
4855    }
4856
4857    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dai, D> for &Dai {
4858        unsafe fn encode(
4859            self,
4860            encoder: &mut fidl::encoding::Encoder<'_, D>,
4861            offset: usize,
4862            mut depth: fidl::encoding::Depth,
4863        ) -> fidl::Result<()> {
4864            encoder.debug_check_bounds::<Dai>(offset);
4865            // Vector header
4866            let max_ordinal: u64 = self.max_ordinal_present();
4867            encoder.write_num(max_ordinal, offset);
4868            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4869            // Calling encoder.out_of_line_offset(0) is not allowed.
4870            if max_ordinal == 0 {
4871                return Ok(());
4872            }
4873            depth.increment()?;
4874            let envelope_size = 8;
4875            let bytes_len = max_ordinal as usize * envelope_size;
4876            #[allow(unused_variables)]
4877            let offset = encoder.out_of_line_offset(bytes_len);
4878            let mut _prev_end_offset: usize = 0;
4879            if 1 > max_ordinal {
4880                return Ok(());
4881            }
4882
4883            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4884            // are envelope_size bytes.
4885            let cur_offset: usize = (1 - 1) * envelope_size;
4886
4887            // Zero reserved fields.
4888            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4889
4890            // Safety:
4891            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4892            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4893            //   envelope_size bytes, there is always sufficient room.
4894            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4895                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4896                encoder,
4897                offset + cur_offset,
4898                depth,
4899            )?;
4900
4901            _prev_end_offset = cur_offset + envelope_size;
4902            if 2 > max_ordinal {
4903                return Ok(());
4904            }
4905
4906            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4907            // are envelope_size bytes.
4908            let cur_offset: usize = (2 - 1) * envelope_size;
4909
4910            // Zero reserved fields.
4911            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4912
4913            // Safety:
4914            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4915            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4916            //   envelope_size bytes, there is always sufficient room.
4917            fidl::encoding::encode_in_envelope_optional::<RingBuffer, D>(
4918                self.ring_buffer
4919                    .as_ref()
4920                    .map(<RingBuffer as fidl::encoding::ValueTypeMarker>::borrow),
4921                encoder,
4922                offset + cur_offset,
4923                depth,
4924            )?;
4925
4926            _prev_end_offset = cur_offset + envelope_size;
4927            if 3 > max_ordinal {
4928                return Ok(());
4929            }
4930
4931            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4932            // are envelope_size bytes.
4933            let cur_offset: usize = (3 - 1) * envelope_size;
4934
4935            // Zero reserved fields.
4936            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4937
4938            // Safety:
4939            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4940            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4941            //   envelope_size bytes, there is always sufficient room.
4942            fidl::encoding::encode_in_envelope_optional::<DaiInterconnect, D>(
4943                self.dai_interconnect
4944                    .as_ref()
4945                    .map(<DaiInterconnect as fidl::encoding::ValueTypeMarker>::borrow),
4946                encoder,
4947                offset + cur_offset,
4948                depth,
4949            )?;
4950
4951            _prev_end_offset = cur_offset + envelope_size;
4952            if 4 > max_ordinal {
4953                return Ok(());
4954            }
4955
4956            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4957            // are envelope_size bytes.
4958            let cur_offset: usize = (4 - 1) * envelope_size;
4959
4960            // Zero reserved fields.
4961            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4962
4963            // Safety:
4964            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4965            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4966            //   envelope_size bytes, there is always sufficient room.
4967            fidl::encoding::encode_in_envelope_optional::<ClockProperties, D>(
4968                self.clock_properties
4969                    .as_ref()
4970                    .map(<ClockProperties as fidl::encoding::ValueTypeMarker>::borrow),
4971                encoder,
4972                offset + cur_offset,
4973                depth,
4974            )?;
4975
4976            _prev_end_offset = cur_offset + envelope_size;
4977
4978            Ok(())
4979        }
4980    }
4981
4982    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dai {
4983        #[inline(always)]
4984        fn new_empty() -> Self {
4985            Self::default()
4986        }
4987
4988        unsafe fn decode(
4989            &mut self,
4990            decoder: &mut fidl::encoding::Decoder<'_, D>,
4991            offset: usize,
4992            mut depth: fidl::encoding::Depth,
4993        ) -> fidl::Result<()> {
4994            decoder.debug_check_bounds::<Self>(offset);
4995            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4996                None => return Err(fidl::Error::NotNullable),
4997                Some(len) => len,
4998            };
4999            // Calling decoder.out_of_line_offset(0) is not allowed.
5000            if len == 0 {
5001                return Ok(());
5002            };
5003            depth.increment()?;
5004            let envelope_size = 8;
5005            let bytes_len = len * envelope_size;
5006            let offset = decoder.out_of_line_offset(bytes_len)?;
5007            // Decode the envelope for each type.
5008            let mut _next_ordinal_to_read = 0;
5009            let mut next_offset = offset;
5010            let end_offset = offset + bytes_len;
5011            _next_ordinal_to_read += 1;
5012            if next_offset >= end_offset {
5013                return Ok(());
5014            }
5015
5016            // Decode unknown envelopes for gaps in ordinals.
5017            while _next_ordinal_to_read < 1 {
5018                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5019                _next_ordinal_to_read += 1;
5020                next_offset += envelope_size;
5021            }
5022
5023            let next_out_of_line = decoder.next_out_of_line();
5024            let handles_before = decoder.remaining_handles();
5025            if let Some((inlined, num_bytes, num_handles)) =
5026                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5027            {
5028                let member_inline_size =
5029                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5030                if inlined != (member_inline_size <= 4) {
5031                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5032                }
5033                let inner_offset;
5034                let mut inner_depth = depth.clone();
5035                if inlined {
5036                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5037                    inner_offset = next_offset;
5038                } else {
5039                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5040                    inner_depth.increment()?;
5041                }
5042                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
5043                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5044                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5045                {
5046                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5047                }
5048                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5049                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5050                }
5051            }
5052
5053            next_offset += envelope_size;
5054            _next_ordinal_to_read += 1;
5055            if next_offset >= end_offset {
5056                return Ok(());
5057            }
5058
5059            // Decode unknown envelopes for gaps in ordinals.
5060            while _next_ordinal_to_read < 2 {
5061                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5062                _next_ordinal_to_read += 1;
5063                next_offset += envelope_size;
5064            }
5065
5066            let next_out_of_line = decoder.next_out_of_line();
5067            let handles_before = decoder.remaining_handles();
5068            if let Some((inlined, num_bytes, num_handles)) =
5069                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5070            {
5071                let member_inline_size =
5072                    <RingBuffer as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5073                if inlined != (member_inline_size <= 4) {
5074                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5075                }
5076                let inner_offset;
5077                let mut inner_depth = depth.clone();
5078                if inlined {
5079                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5080                    inner_offset = next_offset;
5081                } else {
5082                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5083                    inner_depth.increment()?;
5084                }
5085                let val_ref =
5086                    self.ring_buffer.get_or_insert_with(|| fidl::new_empty!(RingBuffer, D));
5087                fidl::decode!(RingBuffer, D, val_ref, decoder, inner_offset, inner_depth)?;
5088                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5089                {
5090                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5091                }
5092                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5093                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5094                }
5095            }
5096
5097            next_offset += envelope_size;
5098            _next_ordinal_to_read += 1;
5099            if next_offset >= end_offset {
5100                return Ok(());
5101            }
5102
5103            // Decode unknown envelopes for gaps in ordinals.
5104            while _next_ordinal_to_read < 3 {
5105                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5106                _next_ordinal_to_read += 1;
5107                next_offset += envelope_size;
5108            }
5109
5110            let next_out_of_line = decoder.next_out_of_line();
5111            let handles_before = decoder.remaining_handles();
5112            if let Some((inlined, num_bytes, num_handles)) =
5113                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5114            {
5115                let member_inline_size =
5116                    <DaiInterconnect as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5117                if inlined != (member_inline_size <= 4) {
5118                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5119                }
5120                let inner_offset;
5121                let mut inner_depth = depth.clone();
5122                if inlined {
5123                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5124                    inner_offset = next_offset;
5125                } else {
5126                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5127                    inner_depth.increment()?;
5128                }
5129                let val_ref = self
5130                    .dai_interconnect
5131                    .get_or_insert_with(|| fidl::new_empty!(DaiInterconnect, D));
5132                fidl::decode!(DaiInterconnect, D, val_ref, decoder, inner_offset, inner_depth)?;
5133                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5134                {
5135                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5136                }
5137                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5138                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5139                }
5140            }
5141
5142            next_offset += envelope_size;
5143            _next_ordinal_to_read += 1;
5144            if next_offset >= end_offset {
5145                return Ok(());
5146            }
5147
5148            // Decode unknown envelopes for gaps in ordinals.
5149            while _next_ordinal_to_read < 4 {
5150                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5151                _next_ordinal_to_read += 1;
5152                next_offset += envelope_size;
5153            }
5154
5155            let next_out_of_line = decoder.next_out_of_line();
5156            let handles_before = decoder.remaining_handles();
5157            if let Some((inlined, num_bytes, num_handles)) =
5158                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5159            {
5160                let member_inline_size =
5161                    <ClockProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5162                if inlined != (member_inline_size <= 4) {
5163                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5164                }
5165                let inner_offset;
5166                let mut inner_depth = depth.clone();
5167                if inlined {
5168                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5169                    inner_offset = next_offset;
5170                } else {
5171                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5172                    inner_depth.increment()?;
5173                }
5174                let val_ref = self
5175                    .clock_properties
5176                    .get_or_insert_with(|| fidl::new_empty!(ClockProperties, D));
5177                fidl::decode!(ClockProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
5178                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5179                {
5180                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5181                }
5182                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5183                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5184                }
5185            }
5186
5187            next_offset += envelope_size;
5188
5189            // Decode the remaining unknown envelopes.
5190            while next_offset < end_offset {
5191                _next_ordinal_to_read += 1;
5192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5193                next_offset += envelope_size;
5194            }
5195
5196            Ok(())
5197        }
5198    }
5199
5200    impl DaiInterconnect {
5201        #[inline(always)]
5202        fn max_ordinal_present(&self) -> u64 {
5203            if let Some(_) = self.dai_supported_formats {
5204                return 1;
5205            }
5206            0
5207        }
5208    }
5209
5210    impl fidl::encoding::ValueTypeMarker for DaiInterconnect {
5211        type Borrowed<'a> = &'a Self;
5212        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5213            value
5214        }
5215    }
5216
5217    unsafe impl fidl::encoding::TypeMarker for DaiInterconnect {
5218        type Owned = Self;
5219
5220        #[inline(always)]
5221        fn inline_align(_context: fidl::encoding::Context) -> usize {
5222            8
5223        }
5224
5225        #[inline(always)]
5226        fn inline_size(_context: fidl::encoding::Context) -> usize {
5227            16
5228        }
5229    }
5230
5231    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DaiInterconnect, D>
5232        for &DaiInterconnect
5233    {
5234        unsafe fn encode(
5235            self,
5236            encoder: &mut fidl::encoding::Encoder<'_, D>,
5237            offset: usize,
5238            mut depth: fidl::encoding::Depth,
5239        ) -> fidl::Result<()> {
5240            encoder.debug_check_bounds::<DaiInterconnect>(offset);
5241            // Vector header
5242            let max_ordinal: u64 = self.max_ordinal_present();
5243            encoder.write_num(max_ordinal, offset);
5244            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5245            // Calling encoder.out_of_line_offset(0) is not allowed.
5246            if max_ordinal == 0 {
5247                return Ok(());
5248            }
5249            depth.increment()?;
5250            let envelope_size = 8;
5251            let bytes_len = max_ordinal as usize * envelope_size;
5252            #[allow(unused_variables)]
5253            let offset = encoder.out_of_line_offset(bytes_len);
5254            let mut _prev_end_offset: usize = 0;
5255            if 1 > max_ordinal {
5256                return Ok(());
5257            }
5258
5259            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5260            // are envelope_size bytes.
5261            let cur_offset: usize = (1 - 1) * envelope_size;
5262
5263            // Zero reserved fields.
5264            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5265
5266            // Safety:
5267            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5268            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5269            //   envelope_size bytes, there is always sufficient room.
5270            fidl::encoding::encode_in_envelope_optional::<
5271                fidl::encoding::Vector<fidl_fuchsia_hardware_audio_common::DaiSupportedFormats, 64>,
5272                D,
5273            >(
5274                self.dai_supported_formats.as_ref().map(
5275                    <fidl::encoding::Vector<
5276                        fidl_fuchsia_hardware_audio_common::DaiSupportedFormats,
5277                        64,
5278                    > as fidl::encoding::ValueTypeMarker>::borrow,
5279                ),
5280                encoder,
5281                offset + cur_offset,
5282                depth,
5283            )?;
5284
5285            _prev_end_offset = cur_offset + envelope_size;
5286
5287            Ok(())
5288        }
5289    }
5290
5291    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DaiInterconnect {
5292        #[inline(always)]
5293        fn new_empty() -> Self {
5294            Self::default()
5295        }
5296
5297        unsafe fn decode(
5298            &mut self,
5299            decoder: &mut fidl::encoding::Decoder<'_, D>,
5300            offset: usize,
5301            mut depth: fidl::encoding::Depth,
5302        ) -> fidl::Result<()> {
5303            decoder.debug_check_bounds::<Self>(offset);
5304            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5305                None => return Err(fidl::Error::NotNullable),
5306                Some(len) => len,
5307            };
5308            // Calling decoder.out_of_line_offset(0) is not allowed.
5309            if len == 0 {
5310                return Ok(());
5311            };
5312            depth.increment()?;
5313            let envelope_size = 8;
5314            let bytes_len = len * envelope_size;
5315            let offset = decoder.out_of_line_offset(bytes_len)?;
5316            // Decode the envelope for each type.
5317            let mut _next_ordinal_to_read = 0;
5318            let mut next_offset = offset;
5319            let end_offset = offset + bytes_len;
5320            _next_ordinal_to_read += 1;
5321            if next_offset >= end_offset {
5322                return Ok(());
5323            }
5324
5325            // Decode unknown envelopes for gaps in ordinals.
5326            while _next_ordinal_to_read < 1 {
5327                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5328                _next_ordinal_to_read += 1;
5329                next_offset += envelope_size;
5330            }
5331
5332            let next_out_of_line = decoder.next_out_of_line();
5333            let handles_before = decoder.remaining_handles();
5334            if let Some((inlined, num_bytes, num_handles)) =
5335                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5336            {
5337                let member_inline_size = <fidl::encoding::Vector<
5338                    fidl_fuchsia_hardware_audio_common::DaiSupportedFormats,
5339                    64,
5340                > as fidl::encoding::TypeMarker>::inline_size(
5341                    decoder.context
5342                );
5343                if inlined != (member_inline_size <= 4) {
5344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5345                }
5346                let inner_offset;
5347                let mut inner_depth = depth.clone();
5348                if inlined {
5349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5350                    inner_offset = next_offset;
5351                } else {
5352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5353                    inner_depth.increment()?;
5354                }
5355                let val_ref =
5356                self.dai_supported_formats.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_hardware_audio_common::DaiSupportedFormats, 64>, D));
5357                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_hardware_audio_common::DaiSupportedFormats, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
5358                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5359                {
5360                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5361                }
5362                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5363                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5364                }
5365            }
5366
5367            next_offset += envelope_size;
5368
5369            // Decode the remaining unknown envelopes.
5370            while next_offset < end_offset {
5371                _next_ordinal_to_read += 1;
5372                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5373                next_offset += envelope_size;
5374            }
5375
5376            Ok(())
5377        }
5378    }
5379
5380    impl Direction {
5381        #[inline(always)]
5382        fn max_ordinal_present(&self) -> u64 {
5383            if let Some(_) = self.is_input {
5384                return 1;
5385            }
5386            0
5387        }
5388    }
5389
5390    impl fidl::encoding::ValueTypeMarker for Direction {
5391        type Borrowed<'a> = &'a Self;
5392        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5393            value
5394        }
5395    }
5396
5397    unsafe impl fidl::encoding::TypeMarker for Direction {
5398        type Owned = Self;
5399
5400        #[inline(always)]
5401        fn inline_align(_context: fidl::encoding::Context) -> usize {
5402            8
5403        }
5404
5405        #[inline(always)]
5406        fn inline_size(_context: fidl::encoding::Context) -> usize {
5407            16
5408        }
5409    }
5410
5411    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Direction, D>
5412        for &Direction
5413    {
5414        unsafe fn encode(
5415            self,
5416            encoder: &mut fidl::encoding::Encoder<'_, D>,
5417            offset: usize,
5418            mut depth: fidl::encoding::Depth,
5419        ) -> fidl::Result<()> {
5420            encoder.debug_check_bounds::<Direction>(offset);
5421            // Vector header
5422            let max_ordinal: u64 = self.max_ordinal_present();
5423            encoder.write_num(max_ordinal, offset);
5424            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5425            // Calling encoder.out_of_line_offset(0) is not allowed.
5426            if max_ordinal == 0 {
5427                return Ok(());
5428            }
5429            depth.increment()?;
5430            let envelope_size = 8;
5431            let bytes_len = max_ordinal as usize * envelope_size;
5432            #[allow(unused_variables)]
5433            let offset = encoder.out_of_line_offset(bytes_len);
5434            let mut _prev_end_offset: usize = 0;
5435            if 1 > max_ordinal {
5436                return Ok(());
5437            }
5438
5439            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5440            // are envelope_size bytes.
5441            let cur_offset: usize = (1 - 1) * envelope_size;
5442
5443            // Zero reserved fields.
5444            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5445
5446            // Safety:
5447            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5448            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5449            //   envelope_size bytes, there is always sufficient room.
5450            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5451                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5452                encoder,
5453                offset + cur_offset,
5454                depth,
5455            )?;
5456
5457            _prev_end_offset = cur_offset + envelope_size;
5458
5459            Ok(())
5460        }
5461    }
5462
5463    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Direction {
5464        #[inline(always)]
5465        fn new_empty() -> Self {
5466            Self::default()
5467        }
5468
5469        unsafe fn decode(
5470            &mut self,
5471            decoder: &mut fidl::encoding::Decoder<'_, D>,
5472            offset: usize,
5473            mut depth: fidl::encoding::Depth,
5474        ) -> fidl::Result<()> {
5475            decoder.debug_check_bounds::<Self>(offset);
5476            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5477                None => return Err(fidl::Error::NotNullable),
5478                Some(len) => len,
5479            };
5480            // Calling decoder.out_of_line_offset(0) is not allowed.
5481            if len == 0 {
5482                return Ok(());
5483            };
5484            depth.increment()?;
5485            let envelope_size = 8;
5486            let bytes_len = len * envelope_size;
5487            let offset = decoder.out_of_line_offset(bytes_len)?;
5488            // Decode the envelope for each type.
5489            let mut _next_ordinal_to_read = 0;
5490            let mut next_offset = offset;
5491            let end_offset = offset + bytes_len;
5492            _next_ordinal_to_read += 1;
5493            if next_offset >= end_offset {
5494                return Ok(());
5495            }
5496
5497            // Decode unknown envelopes for gaps in ordinals.
5498            while _next_ordinal_to_read < 1 {
5499                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5500                _next_ordinal_to_read += 1;
5501                next_offset += envelope_size;
5502            }
5503
5504            let next_out_of_line = decoder.next_out_of_line();
5505            let handles_before = decoder.remaining_handles();
5506            if let Some((inlined, num_bytes, num_handles)) =
5507                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5508            {
5509                let member_inline_size =
5510                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5511                if inlined != (member_inline_size <= 4) {
5512                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5513                }
5514                let inner_offset;
5515                let mut inner_depth = depth.clone();
5516                if inlined {
5517                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5518                    inner_offset = next_offset;
5519                } else {
5520                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5521                    inner_depth.increment()?;
5522                }
5523                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
5524                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5525                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5526                {
5527                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5528                }
5529                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5530                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5531                }
5532            }
5533
5534            next_offset += envelope_size;
5535
5536            // Decode the remaining unknown envelopes.
5537            while next_offset < end_offset {
5538                _next_ordinal_to_read += 1;
5539                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5540                next_offset += envelope_size;
5541            }
5542
5543            Ok(())
5544        }
5545    }
5546
5547    impl GainProperties {
5548        #[inline(always)]
5549        fn max_ordinal_present(&self) -> u64 {
5550            if let Some(_) = self.can_agc {
5551                return 6;
5552            }
5553            if let Some(_) = self.can_mute {
5554                return 5;
5555            }
5556            if let Some(_) = self.gain_step_db {
5557                return 4;
5558            }
5559            if let Some(_) = self.max_gain_db {
5560                return 3;
5561            }
5562            if let Some(_) = self.min_gain_db {
5563                return 2;
5564            }
5565            if let Some(_) = self.gain_state {
5566                return 1;
5567            }
5568            0
5569        }
5570    }
5571
5572    impl fidl::encoding::ValueTypeMarker for GainProperties {
5573        type Borrowed<'a> = &'a Self;
5574        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5575            value
5576        }
5577    }
5578
5579    unsafe impl fidl::encoding::TypeMarker for GainProperties {
5580        type Owned = Self;
5581
5582        #[inline(always)]
5583        fn inline_align(_context: fidl::encoding::Context) -> usize {
5584            8
5585        }
5586
5587        #[inline(always)]
5588        fn inline_size(_context: fidl::encoding::Context) -> usize {
5589            16
5590        }
5591    }
5592
5593    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GainProperties, D>
5594        for &GainProperties
5595    {
5596        unsafe fn encode(
5597            self,
5598            encoder: &mut fidl::encoding::Encoder<'_, D>,
5599            offset: usize,
5600            mut depth: fidl::encoding::Depth,
5601        ) -> fidl::Result<()> {
5602            encoder.debug_check_bounds::<GainProperties>(offset);
5603            // Vector header
5604            let max_ordinal: u64 = self.max_ordinal_present();
5605            encoder.write_num(max_ordinal, offset);
5606            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5607            // Calling encoder.out_of_line_offset(0) is not allowed.
5608            if max_ordinal == 0 {
5609                return Ok(());
5610            }
5611            depth.increment()?;
5612            let envelope_size = 8;
5613            let bytes_len = max_ordinal as usize * envelope_size;
5614            #[allow(unused_variables)]
5615            let offset = encoder.out_of_line_offset(bytes_len);
5616            let mut _prev_end_offset: usize = 0;
5617            if 1 > max_ordinal {
5618                return Ok(());
5619            }
5620
5621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5622            // are envelope_size bytes.
5623            let cur_offset: usize = (1 - 1) * envelope_size;
5624
5625            // Zero reserved fields.
5626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5627
5628            // Safety:
5629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5631            //   envelope_size bytes, there is always sufficient room.
5632            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_audio_common::GainState, D>(
5633            self.gain_state.as_ref().map(<fidl_fuchsia_hardware_audio_common::GainState as fidl::encoding::ValueTypeMarker>::borrow),
5634            encoder, offset + cur_offset, depth
5635        )?;
5636
5637            _prev_end_offset = cur_offset + envelope_size;
5638            if 2 > max_ordinal {
5639                return Ok(());
5640            }
5641
5642            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5643            // are envelope_size bytes.
5644            let cur_offset: usize = (2 - 1) * envelope_size;
5645
5646            // Zero reserved fields.
5647            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5648
5649            // Safety:
5650            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5651            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5652            //   envelope_size bytes, there is always sufficient room.
5653            fidl::encoding::encode_in_envelope_optional::<f32, D>(
5654                self.min_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
5655                encoder,
5656                offset + cur_offset,
5657                depth,
5658            )?;
5659
5660            _prev_end_offset = cur_offset + envelope_size;
5661            if 3 > max_ordinal {
5662                return Ok(());
5663            }
5664
5665            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5666            // are envelope_size bytes.
5667            let cur_offset: usize = (3 - 1) * envelope_size;
5668
5669            // Zero reserved fields.
5670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5671
5672            // Safety:
5673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5675            //   envelope_size bytes, there is always sufficient room.
5676            fidl::encoding::encode_in_envelope_optional::<f32, D>(
5677                self.max_gain_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
5678                encoder,
5679                offset + cur_offset,
5680                depth,
5681            )?;
5682
5683            _prev_end_offset = cur_offset + envelope_size;
5684            if 4 > max_ordinal {
5685                return Ok(());
5686            }
5687
5688            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5689            // are envelope_size bytes.
5690            let cur_offset: usize = (4 - 1) * envelope_size;
5691
5692            // Zero reserved fields.
5693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5694
5695            // Safety:
5696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5698            //   envelope_size bytes, there is always sufficient room.
5699            fidl::encoding::encode_in_envelope_optional::<f32, D>(
5700                self.gain_step_db.as_ref().map(<f32 as fidl::encoding::ValueTypeMarker>::borrow),
5701                encoder,
5702                offset + cur_offset,
5703                depth,
5704            )?;
5705
5706            _prev_end_offset = cur_offset + envelope_size;
5707            if 5 > max_ordinal {
5708                return Ok(());
5709            }
5710
5711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5712            // are envelope_size bytes.
5713            let cur_offset: usize = (5 - 1) * envelope_size;
5714
5715            // Zero reserved fields.
5716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5717
5718            // Safety:
5719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5721            //   envelope_size bytes, there is always sufficient room.
5722            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5723                self.can_mute.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5724                encoder,
5725                offset + cur_offset,
5726                depth,
5727            )?;
5728
5729            _prev_end_offset = cur_offset + envelope_size;
5730            if 6 > max_ordinal {
5731                return Ok(());
5732            }
5733
5734            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5735            // are envelope_size bytes.
5736            let cur_offset: usize = (6 - 1) * envelope_size;
5737
5738            // Zero reserved fields.
5739            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5740
5741            // Safety:
5742            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5743            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5744            //   envelope_size bytes, there is always sufficient room.
5745            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5746                self.can_agc.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5747                encoder,
5748                offset + cur_offset,
5749                depth,
5750            )?;
5751
5752            _prev_end_offset = cur_offset + envelope_size;
5753
5754            Ok(())
5755        }
5756    }
5757
5758    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GainProperties {
5759        #[inline(always)]
5760        fn new_empty() -> Self {
5761            Self::default()
5762        }
5763
5764        unsafe fn decode(
5765            &mut self,
5766            decoder: &mut fidl::encoding::Decoder<'_, D>,
5767            offset: usize,
5768            mut depth: fidl::encoding::Depth,
5769        ) -> fidl::Result<()> {
5770            decoder.debug_check_bounds::<Self>(offset);
5771            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5772                None => return Err(fidl::Error::NotNullable),
5773                Some(len) => len,
5774            };
5775            // Calling decoder.out_of_line_offset(0) is not allowed.
5776            if len == 0 {
5777                return Ok(());
5778            };
5779            depth.increment()?;
5780            let envelope_size = 8;
5781            let bytes_len = len * envelope_size;
5782            let offset = decoder.out_of_line_offset(bytes_len)?;
5783            // Decode the envelope for each type.
5784            let mut _next_ordinal_to_read = 0;
5785            let mut next_offset = offset;
5786            let end_offset = offset + bytes_len;
5787            _next_ordinal_to_read += 1;
5788            if next_offset >= end_offset {
5789                return Ok(());
5790            }
5791
5792            // Decode unknown envelopes for gaps in ordinals.
5793            while _next_ordinal_to_read < 1 {
5794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5795                _next_ordinal_to_read += 1;
5796                next_offset += envelope_size;
5797            }
5798
5799            let next_out_of_line = decoder.next_out_of_line();
5800            let handles_before = decoder.remaining_handles();
5801            if let Some((inlined, num_bytes, num_handles)) =
5802                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5803            {
5804                let member_inline_size = <fidl_fuchsia_hardware_audio_common::GainState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5805                if inlined != (member_inline_size <= 4) {
5806                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5807                }
5808                let inner_offset;
5809                let mut inner_depth = depth.clone();
5810                if inlined {
5811                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5812                    inner_offset = next_offset;
5813                } else {
5814                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5815                    inner_depth.increment()?;
5816                }
5817                let val_ref = self.gain_state.get_or_insert_with(|| {
5818                    fidl::new_empty!(fidl_fuchsia_hardware_audio_common::GainState, D)
5819                });
5820                fidl::decode!(
5821                    fidl_fuchsia_hardware_audio_common::GainState,
5822                    D,
5823                    val_ref,
5824                    decoder,
5825                    inner_offset,
5826                    inner_depth
5827                )?;
5828                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5829                {
5830                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5831                }
5832                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5833                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5834                }
5835            }
5836
5837            next_offset += envelope_size;
5838            _next_ordinal_to_read += 1;
5839            if next_offset >= end_offset {
5840                return Ok(());
5841            }
5842
5843            // Decode unknown envelopes for gaps in ordinals.
5844            while _next_ordinal_to_read < 2 {
5845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5846                _next_ordinal_to_read += 1;
5847                next_offset += envelope_size;
5848            }
5849
5850            let next_out_of_line = decoder.next_out_of_line();
5851            let handles_before = decoder.remaining_handles();
5852            if let Some((inlined, num_bytes, num_handles)) =
5853                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5854            {
5855                let member_inline_size =
5856                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5857                if inlined != (member_inline_size <= 4) {
5858                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5859                }
5860                let inner_offset;
5861                let mut inner_depth = depth.clone();
5862                if inlined {
5863                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5864                    inner_offset = next_offset;
5865                } else {
5866                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5867                    inner_depth.increment()?;
5868                }
5869                let val_ref = self.min_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
5870                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
5871                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5872                {
5873                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5874                }
5875                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5876                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5877                }
5878            }
5879
5880            next_offset += envelope_size;
5881            _next_ordinal_to_read += 1;
5882            if next_offset >= end_offset {
5883                return Ok(());
5884            }
5885
5886            // Decode unknown envelopes for gaps in ordinals.
5887            while _next_ordinal_to_read < 3 {
5888                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5889                _next_ordinal_to_read += 1;
5890                next_offset += envelope_size;
5891            }
5892
5893            let next_out_of_line = decoder.next_out_of_line();
5894            let handles_before = decoder.remaining_handles();
5895            if let Some((inlined, num_bytes, num_handles)) =
5896                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5897            {
5898                let member_inline_size =
5899                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5900                if inlined != (member_inline_size <= 4) {
5901                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5902                }
5903                let inner_offset;
5904                let mut inner_depth = depth.clone();
5905                if inlined {
5906                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5907                    inner_offset = next_offset;
5908                } else {
5909                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5910                    inner_depth.increment()?;
5911                }
5912                let val_ref = self.max_gain_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
5913                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
5914                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5915                {
5916                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5917                }
5918                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5919                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5920                }
5921            }
5922
5923            next_offset += envelope_size;
5924            _next_ordinal_to_read += 1;
5925            if next_offset >= end_offset {
5926                return Ok(());
5927            }
5928
5929            // Decode unknown envelopes for gaps in ordinals.
5930            while _next_ordinal_to_read < 4 {
5931                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5932                _next_ordinal_to_read += 1;
5933                next_offset += envelope_size;
5934            }
5935
5936            let next_out_of_line = decoder.next_out_of_line();
5937            let handles_before = decoder.remaining_handles();
5938            if let Some((inlined, num_bytes, num_handles)) =
5939                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5940            {
5941                let member_inline_size =
5942                    <f32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5943                if inlined != (member_inline_size <= 4) {
5944                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5945                }
5946                let inner_offset;
5947                let mut inner_depth = depth.clone();
5948                if inlined {
5949                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5950                    inner_offset = next_offset;
5951                } else {
5952                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5953                    inner_depth.increment()?;
5954                }
5955                let val_ref = self.gain_step_db.get_or_insert_with(|| fidl::new_empty!(f32, D));
5956                fidl::decode!(f32, D, val_ref, decoder, inner_offset, inner_depth)?;
5957                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5958                {
5959                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5960                }
5961                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5962                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5963                }
5964            }
5965
5966            next_offset += envelope_size;
5967            _next_ordinal_to_read += 1;
5968            if next_offset >= end_offset {
5969                return Ok(());
5970            }
5971
5972            // Decode unknown envelopes for gaps in ordinals.
5973            while _next_ordinal_to_read < 5 {
5974                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5975                _next_ordinal_to_read += 1;
5976                next_offset += envelope_size;
5977            }
5978
5979            let next_out_of_line = decoder.next_out_of_line();
5980            let handles_before = decoder.remaining_handles();
5981            if let Some((inlined, num_bytes, num_handles)) =
5982                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5983            {
5984                let member_inline_size =
5985                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5986                if inlined != (member_inline_size <= 4) {
5987                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5988                }
5989                let inner_offset;
5990                let mut inner_depth = depth.clone();
5991                if inlined {
5992                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5993                    inner_offset = next_offset;
5994                } else {
5995                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5996                    inner_depth.increment()?;
5997                }
5998                let val_ref = self.can_mute.get_or_insert_with(|| fidl::new_empty!(bool, D));
5999                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6000                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6001                {
6002                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6003                }
6004                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6005                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6006                }
6007            }
6008
6009            next_offset += envelope_size;
6010            _next_ordinal_to_read += 1;
6011            if next_offset >= end_offset {
6012                return Ok(());
6013            }
6014
6015            // Decode unknown envelopes for gaps in ordinals.
6016            while _next_ordinal_to_read < 6 {
6017                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6018                _next_ordinal_to_read += 1;
6019                next_offset += envelope_size;
6020            }
6021
6022            let next_out_of_line = decoder.next_out_of_line();
6023            let handles_before = decoder.remaining_handles();
6024            if let Some((inlined, num_bytes, num_handles)) =
6025                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6026            {
6027                let member_inline_size =
6028                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6029                if inlined != (member_inline_size <= 4) {
6030                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6031                }
6032                let inner_offset;
6033                let mut inner_depth = depth.clone();
6034                if inlined {
6035                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6036                    inner_offset = next_offset;
6037                } else {
6038                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6039                    inner_depth.increment()?;
6040                }
6041                let val_ref = self.can_agc.get_or_insert_with(|| fidl::new_empty!(bool, D));
6042                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6044                {
6045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6046                }
6047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6049                }
6050            }
6051
6052            next_offset += envelope_size;
6053
6054            // Decode the remaining unknown envelopes.
6055            while next_offset < end_offset {
6056                _next_ordinal_to_read += 1;
6057                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6058                next_offset += envelope_size;
6059            }
6060
6061            Ok(())
6062        }
6063    }
6064
6065    impl PacketStream {
6066        #[inline(always)]
6067        fn max_ordinal_present(&self) -> u64 {
6068            if let Some(_) = self.needs_cache_flush_or_invalidate {
6069                return 2;
6070            }
6071            if let Some(_) = self.supported_buffer_types {
6072                return 1;
6073            }
6074            0
6075        }
6076    }
6077
6078    impl fidl::encoding::ValueTypeMarker for PacketStream {
6079        type Borrowed<'a> = &'a Self;
6080        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6081            value
6082        }
6083    }
6084
6085    unsafe impl fidl::encoding::TypeMarker for PacketStream {
6086        type Owned = Self;
6087
6088        #[inline(always)]
6089        fn inline_align(_context: fidl::encoding::Context) -> usize {
6090            8
6091        }
6092
6093        #[inline(always)]
6094        fn inline_size(_context: fidl::encoding::Context) -> usize {
6095            16
6096        }
6097    }
6098
6099    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PacketStream, D>
6100        for &PacketStream
6101    {
6102        unsafe fn encode(
6103            self,
6104            encoder: &mut fidl::encoding::Encoder<'_, D>,
6105            offset: usize,
6106            mut depth: fidl::encoding::Depth,
6107        ) -> fidl::Result<()> {
6108            encoder.debug_check_bounds::<PacketStream>(offset);
6109            // Vector header
6110            let max_ordinal: u64 = self.max_ordinal_present();
6111            encoder.write_num(max_ordinal, offset);
6112            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6113            // Calling encoder.out_of_line_offset(0) is not allowed.
6114            if max_ordinal == 0 {
6115                return Ok(());
6116            }
6117            depth.increment()?;
6118            let envelope_size = 8;
6119            let bytes_len = max_ordinal as usize * envelope_size;
6120            #[allow(unused_variables)]
6121            let offset = encoder.out_of_line_offset(bytes_len);
6122            let mut _prev_end_offset: usize = 0;
6123            if 1 > max_ordinal {
6124                return Ok(());
6125            }
6126
6127            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6128            // are envelope_size bytes.
6129            let cur_offset: usize = (1 - 1) * envelope_size;
6130
6131            // Zero reserved fields.
6132            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6133
6134            // Safety:
6135            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6136            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6137            //   envelope_size bytes, there is always sufficient room.
6138            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_audio_common::BufferType, D>(
6139            self.supported_buffer_types.as_ref().map(<fidl_fuchsia_hardware_audio_common::BufferType as fidl::encoding::ValueTypeMarker>::borrow),
6140            encoder, offset + cur_offset, depth
6141        )?;
6142
6143            _prev_end_offset = cur_offset + envelope_size;
6144            if 2 > max_ordinal {
6145                return Ok(());
6146            }
6147
6148            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6149            // are envelope_size bytes.
6150            let cur_offset: usize = (2 - 1) * envelope_size;
6151
6152            // Zero reserved fields.
6153            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6154
6155            // Safety:
6156            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6157            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6158            //   envelope_size bytes, there is always sufficient room.
6159            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6160                self.needs_cache_flush_or_invalidate
6161                    .as_ref()
6162                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6163                encoder,
6164                offset + cur_offset,
6165                depth,
6166            )?;
6167
6168            _prev_end_offset = cur_offset + envelope_size;
6169
6170            Ok(())
6171        }
6172    }
6173
6174    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PacketStream {
6175        #[inline(always)]
6176        fn new_empty() -> Self {
6177            Self::default()
6178        }
6179
6180        unsafe fn decode(
6181            &mut self,
6182            decoder: &mut fidl::encoding::Decoder<'_, D>,
6183            offset: usize,
6184            mut depth: fidl::encoding::Depth,
6185        ) -> fidl::Result<()> {
6186            decoder.debug_check_bounds::<Self>(offset);
6187            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6188                None => return Err(fidl::Error::NotNullable),
6189                Some(len) => len,
6190            };
6191            // Calling decoder.out_of_line_offset(0) is not allowed.
6192            if len == 0 {
6193                return Ok(());
6194            };
6195            depth.increment()?;
6196            let envelope_size = 8;
6197            let bytes_len = len * envelope_size;
6198            let offset = decoder.out_of_line_offset(bytes_len)?;
6199            // Decode the envelope for each type.
6200            let mut _next_ordinal_to_read = 0;
6201            let mut next_offset = offset;
6202            let end_offset = offset + bytes_len;
6203            _next_ordinal_to_read += 1;
6204            if next_offset >= end_offset {
6205                return Ok(());
6206            }
6207
6208            // Decode unknown envelopes for gaps in ordinals.
6209            while _next_ordinal_to_read < 1 {
6210                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6211                _next_ordinal_to_read += 1;
6212                next_offset += envelope_size;
6213            }
6214
6215            let next_out_of_line = decoder.next_out_of_line();
6216            let handles_before = decoder.remaining_handles();
6217            if let Some((inlined, num_bytes, num_handles)) =
6218                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6219            {
6220                let member_inline_size = <fidl_fuchsia_hardware_audio_common::BufferType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6221                if inlined != (member_inline_size <= 4) {
6222                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6223                }
6224                let inner_offset;
6225                let mut inner_depth = depth.clone();
6226                if inlined {
6227                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6228                    inner_offset = next_offset;
6229                } else {
6230                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6231                    inner_depth.increment()?;
6232                }
6233                let val_ref = self.supported_buffer_types.get_or_insert_with(|| {
6234                    fidl::new_empty!(fidl_fuchsia_hardware_audio_common::BufferType, D)
6235                });
6236                fidl::decode!(
6237                    fidl_fuchsia_hardware_audio_common::BufferType,
6238                    D,
6239                    val_ref,
6240                    decoder,
6241                    inner_offset,
6242                    inner_depth
6243                )?;
6244                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6245                {
6246                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6247                }
6248                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6249                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6250                }
6251            }
6252
6253            next_offset += envelope_size;
6254            _next_ordinal_to_read += 1;
6255            if next_offset >= end_offset {
6256                return Ok(());
6257            }
6258
6259            // Decode unknown envelopes for gaps in ordinals.
6260            while _next_ordinal_to_read < 2 {
6261                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6262                _next_ordinal_to_read += 1;
6263                next_offset += envelope_size;
6264            }
6265
6266            let next_out_of_line = decoder.next_out_of_line();
6267            let handles_before = decoder.remaining_handles();
6268            if let Some((inlined, num_bytes, num_handles)) =
6269                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6270            {
6271                let member_inline_size =
6272                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6273                if inlined != (member_inline_size <= 4) {
6274                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6275                }
6276                let inner_offset;
6277                let mut inner_depth = depth.clone();
6278                if inlined {
6279                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6280                    inner_offset = next_offset;
6281                } else {
6282                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6283                    inner_depth.increment()?;
6284                }
6285                let val_ref = self
6286                    .needs_cache_flush_or_invalidate
6287                    .get_or_insert_with(|| fidl::new_empty!(bool, D));
6288                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6290                {
6291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6292                }
6293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6295                }
6296            }
6297
6298            next_offset += envelope_size;
6299
6300            // Decode the remaining unknown envelopes.
6301            while next_offset < end_offset {
6302                _next_ordinal_to_read += 1;
6303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6304                next_offset += envelope_size;
6305            }
6306
6307            Ok(())
6308        }
6309    }
6310
6311    impl PlugProperties {
6312        #[inline(always)]
6313        fn max_ordinal_present(&self) -> u64 {
6314            if let Some(_) = self.plug_detect_capabilities {
6315                return 2;
6316            }
6317            if let Some(_) = self.plug_state {
6318                return 1;
6319            }
6320            0
6321        }
6322    }
6323
6324    impl fidl::encoding::ValueTypeMarker for PlugProperties {
6325        type Borrowed<'a> = &'a Self;
6326        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6327            value
6328        }
6329    }
6330
6331    unsafe impl fidl::encoding::TypeMarker for PlugProperties {
6332        type Owned = Self;
6333
6334        #[inline(always)]
6335        fn inline_align(_context: fidl::encoding::Context) -> usize {
6336            8
6337        }
6338
6339        #[inline(always)]
6340        fn inline_size(_context: fidl::encoding::Context) -> usize {
6341            16
6342        }
6343    }
6344
6345    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PlugProperties, D>
6346        for &PlugProperties
6347    {
6348        unsafe fn encode(
6349            self,
6350            encoder: &mut fidl::encoding::Encoder<'_, D>,
6351            offset: usize,
6352            mut depth: fidl::encoding::Depth,
6353        ) -> fidl::Result<()> {
6354            encoder.debug_check_bounds::<PlugProperties>(offset);
6355            // Vector header
6356            let max_ordinal: u64 = self.max_ordinal_present();
6357            encoder.write_num(max_ordinal, offset);
6358            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6359            // Calling encoder.out_of_line_offset(0) is not allowed.
6360            if max_ordinal == 0 {
6361                return Ok(());
6362            }
6363            depth.increment()?;
6364            let envelope_size = 8;
6365            let bytes_len = max_ordinal as usize * envelope_size;
6366            #[allow(unused_variables)]
6367            let offset = encoder.out_of_line_offset(bytes_len);
6368            let mut _prev_end_offset: usize = 0;
6369            if 1 > max_ordinal {
6370                return Ok(());
6371            }
6372
6373            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6374            // are envelope_size bytes.
6375            let cur_offset: usize = (1 - 1) * envelope_size;
6376
6377            // Zero reserved fields.
6378            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6379
6380            // Safety:
6381            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6382            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6383            //   envelope_size bytes, there is always sufficient room.
6384            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_audio_common::PlugState, D>(
6385            self.plug_state.as_ref().map(<fidl_fuchsia_hardware_audio_common::PlugState as fidl::encoding::ValueTypeMarker>::borrow),
6386            encoder, offset + cur_offset, depth
6387        )?;
6388
6389            _prev_end_offset = cur_offset + envelope_size;
6390            if 2 > max_ordinal {
6391                return Ok(());
6392            }
6393
6394            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6395            // are envelope_size bytes.
6396            let cur_offset: usize = (2 - 1) * envelope_size;
6397
6398            // Zero reserved fields.
6399            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6400
6401            // Safety:
6402            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6403            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6404            //   envelope_size bytes, there is always sufficient room.
6405            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_hardware_audio_common::PlugDetectCapabilities, D>(
6406            self.plug_detect_capabilities.as_ref().map(<fidl_fuchsia_hardware_audio_common::PlugDetectCapabilities as fidl::encoding::ValueTypeMarker>::borrow),
6407            encoder, offset + cur_offset, depth
6408        )?;
6409
6410            _prev_end_offset = cur_offset + envelope_size;
6411
6412            Ok(())
6413        }
6414    }
6415
6416    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PlugProperties {
6417        #[inline(always)]
6418        fn new_empty() -> Self {
6419            Self::default()
6420        }
6421
6422        unsafe fn decode(
6423            &mut self,
6424            decoder: &mut fidl::encoding::Decoder<'_, D>,
6425            offset: usize,
6426            mut depth: fidl::encoding::Depth,
6427        ) -> fidl::Result<()> {
6428            decoder.debug_check_bounds::<Self>(offset);
6429            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6430                None => return Err(fidl::Error::NotNullable),
6431                Some(len) => len,
6432            };
6433            // Calling decoder.out_of_line_offset(0) is not allowed.
6434            if len == 0 {
6435                return Ok(());
6436            };
6437            depth.increment()?;
6438            let envelope_size = 8;
6439            let bytes_len = len * envelope_size;
6440            let offset = decoder.out_of_line_offset(bytes_len)?;
6441            // Decode the envelope for each type.
6442            let mut _next_ordinal_to_read = 0;
6443            let mut next_offset = offset;
6444            let end_offset = offset + bytes_len;
6445            _next_ordinal_to_read += 1;
6446            if next_offset >= end_offset {
6447                return Ok(());
6448            }
6449
6450            // Decode unknown envelopes for gaps in ordinals.
6451            while _next_ordinal_to_read < 1 {
6452                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6453                _next_ordinal_to_read += 1;
6454                next_offset += envelope_size;
6455            }
6456
6457            let next_out_of_line = decoder.next_out_of_line();
6458            let handles_before = decoder.remaining_handles();
6459            if let Some((inlined, num_bytes, num_handles)) =
6460                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6461            {
6462                let member_inline_size = <fidl_fuchsia_hardware_audio_common::PlugState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6463                if inlined != (member_inline_size <= 4) {
6464                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6465                }
6466                let inner_offset;
6467                let mut inner_depth = depth.clone();
6468                if inlined {
6469                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6470                    inner_offset = next_offset;
6471                } else {
6472                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6473                    inner_depth.increment()?;
6474                }
6475                let val_ref = self.plug_state.get_or_insert_with(|| {
6476                    fidl::new_empty!(fidl_fuchsia_hardware_audio_common::PlugState, D)
6477                });
6478                fidl::decode!(
6479                    fidl_fuchsia_hardware_audio_common::PlugState,
6480                    D,
6481                    val_ref,
6482                    decoder,
6483                    inner_offset,
6484                    inner_depth
6485                )?;
6486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6487                {
6488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6489                }
6490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6492                }
6493            }
6494
6495            next_offset += envelope_size;
6496            _next_ordinal_to_read += 1;
6497            if next_offset >= end_offset {
6498                return Ok(());
6499            }
6500
6501            // Decode unknown envelopes for gaps in ordinals.
6502            while _next_ordinal_to_read < 2 {
6503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6504                _next_ordinal_to_read += 1;
6505                next_offset += envelope_size;
6506            }
6507
6508            let next_out_of_line = decoder.next_out_of_line();
6509            let handles_before = decoder.remaining_handles();
6510            if let Some((inlined, num_bytes, num_handles)) =
6511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6512            {
6513                let member_inline_size = <fidl_fuchsia_hardware_audio_common::PlugDetectCapabilities as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6514                if inlined != (member_inline_size <= 4) {
6515                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6516                }
6517                let inner_offset;
6518                let mut inner_depth = depth.clone();
6519                if inlined {
6520                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6521                    inner_offset = next_offset;
6522                } else {
6523                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6524                    inner_depth.increment()?;
6525                }
6526                let val_ref = self.plug_detect_capabilities.get_or_insert_with(|| {
6527                    fidl::new_empty!(fidl_fuchsia_hardware_audio_common::PlugDetectCapabilities, D)
6528                });
6529                fidl::decode!(
6530                    fidl_fuchsia_hardware_audio_common::PlugDetectCapabilities,
6531                    D,
6532                    val_ref,
6533                    decoder,
6534                    inner_offset,
6535                    inner_depth
6536                )?;
6537                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6538                {
6539                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6540                }
6541                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6542                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6543                }
6544            }
6545
6546            next_offset += envelope_size;
6547
6548            // Decode the remaining unknown envelopes.
6549            while next_offset < end_offset {
6550                _next_ordinal_to_read += 1;
6551                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6552                next_offset += envelope_size;
6553            }
6554
6555            Ok(())
6556        }
6557    }
6558
6559    impl RingBuffer {
6560        #[inline(always)]
6561        fn max_ordinal_present(&self) -> u64 {
6562            if let Some(_) = self.notifications_per_ring {
6563                return 6;
6564            }
6565            if let Some(_) = self.ring_buffer_constraints {
6566                return 5;
6567            }
6568            if let Some(_) = self.supported_formats {
6569                return 4;
6570            }
6571            if let Some(_) = self.external_delay {
6572                return 3;
6573            }
6574            if let Some(_) = self.internal_delay {
6575                return 2;
6576            }
6577            if let Some(_) = self.driver_transfer_bytes {
6578                return 1;
6579            }
6580            0
6581        }
6582    }
6583
6584    impl fidl::encoding::ValueTypeMarker for RingBuffer {
6585        type Borrowed<'a> = &'a Self;
6586        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6587            value
6588        }
6589    }
6590
6591    unsafe impl fidl::encoding::TypeMarker for RingBuffer {
6592        type Owned = Self;
6593
6594        #[inline(always)]
6595        fn inline_align(_context: fidl::encoding::Context) -> usize {
6596            8
6597        }
6598
6599        #[inline(always)]
6600        fn inline_size(_context: fidl::encoding::Context) -> usize {
6601            16
6602        }
6603    }
6604
6605    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RingBuffer, D>
6606        for &RingBuffer
6607    {
6608        unsafe fn encode(
6609            self,
6610            encoder: &mut fidl::encoding::Encoder<'_, D>,
6611            offset: usize,
6612            mut depth: fidl::encoding::Depth,
6613        ) -> fidl::Result<()> {
6614            encoder.debug_check_bounds::<RingBuffer>(offset);
6615            // Vector header
6616            let max_ordinal: u64 = self.max_ordinal_present();
6617            encoder.write_num(max_ordinal, offset);
6618            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6619            // Calling encoder.out_of_line_offset(0) is not allowed.
6620            if max_ordinal == 0 {
6621                return Ok(());
6622            }
6623            depth.increment()?;
6624            let envelope_size = 8;
6625            let bytes_len = max_ordinal as usize * envelope_size;
6626            #[allow(unused_variables)]
6627            let offset = encoder.out_of_line_offset(bytes_len);
6628            let mut _prev_end_offset: usize = 0;
6629            if 1 > max_ordinal {
6630                return Ok(());
6631            }
6632
6633            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6634            // are envelope_size bytes.
6635            let cur_offset: usize = (1 - 1) * envelope_size;
6636
6637            // Zero reserved fields.
6638            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6639
6640            // Safety:
6641            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6642            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6643            //   envelope_size bytes, there is always sufficient room.
6644            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6645                self.driver_transfer_bytes
6646                    .as_ref()
6647                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6648                encoder,
6649                offset + cur_offset,
6650                depth,
6651            )?;
6652
6653            _prev_end_offset = cur_offset + envelope_size;
6654            if 2 > max_ordinal {
6655                return Ok(());
6656            }
6657
6658            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6659            // are envelope_size bytes.
6660            let cur_offset: usize = (2 - 1) * envelope_size;
6661
6662            // Zero reserved fields.
6663            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6664
6665            // Safety:
6666            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6667            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6668            //   envelope_size bytes, there is always sufficient room.
6669            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6670                self.internal_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6671                encoder,
6672                offset + cur_offset,
6673                depth,
6674            )?;
6675
6676            _prev_end_offset = cur_offset + envelope_size;
6677            if 3 > max_ordinal {
6678                return Ok(());
6679            }
6680
6681            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6682            // are envelope_size bytes.
6683            let cur_offset: usize = (3 - 1) * envelope_size;
6684
6685            // Zero reserved fields.
6686            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6687
6688            // Safety:
6689            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6690            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6691            //   envelope_size bytes, there is always sufficient room.
6692            fidl::encoding::encode_in_envelope_optional::<i64, D>(
6693                self.external_delay.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
6694                encoder,
6695                offset + cur_offset,
6696                depth,
6697            )?;
6698
6699            _prev_end_offset = cur_offset + envelope_size;
6700            if 4 > max_ordinal {
6701                return Ok(());
6702            }
6703
6704            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6705            // are envelope_size bytes.
6706            let cur_offset: usize = (4 - 1) * envelope_size;
6707
6708            // Zero reserved fields.
6709            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6710
6711            // Safety:
6712            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6713            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6714            //   envelope_size bytes, there is always sufficient room.
6715            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<FormatRange, 64>, D>(
6716            self.supported_formats.as_ref().map(<fidl::encoding::Vector<FormatRange, 64> as fidl::encoding::ValueTypeMarker>::borrow),
6717            encoder, offset + cur_offset, depth
6718        )?;
6719
6720            _prev_end_offset = cur_offset + envelope_size;
6721            if 5 > max_ordinal {
6722                return Ok(());
6723            }
6724
6725            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6726            // are envelope_size bytes.
6727            let cur_offset: usize = (5 - 1) * envelope_size;
6728
6729            // Zero reserved fields.
6730            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6731
6732            // Safety:
6733            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6734            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6735            //   envelope_size bytes, there is always sufficient room.
6736            fidl::encoding::encode_in_envelope_optional::<RingBufferConstraints, D>(
6737                self.ring_buffer_constraints
6738                    .as_ref()
6739                    .map(<RingBufferConstraints as fidl::encoding::ValueTypeMarker>::borrow),
6740                encoder,
6741                offset + cur_offset,
6742                depth,
6743            )?;
6744
6745            _prev_end_offset = cur_offset + envelope_size;
6746            if 6 > max_ordinal {
6747                return Ok(());
6748            }
6749
6750            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6751            // are envelope_size bytes.
6752            let cur_offset: usize = (6 - 1) * envelope_size;
6753
6754            // Zero reserved fields.
6755            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6756
6757            // Safety:
6758            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6759            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6760            //   envelope_size bytes, there is always sufficient room.
6761            fidl::encoding::encode_in_envelope_optional::<u32, D>(
6762                self.notifications_per_ring
6763                    .as_ref()
6764                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
6765                encoder,
6766                offset + cur_offset,
6767                depth,
6768            )?;
6769
6770            _prev_end_offset = cur_offset + envelope_size;
6771
6772            Ok(())
6773        }
6774    }
6775
6776    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RingBuffer {
6777        #[inline(always)]
6778        fn new_empty() -> Self {
6779            Self::default()
6780        }
6781
6782        unsafe fn decode(
6783            &mut self,
6784            decoder: &mut fidl::encoding::Decoder<'_, D>,
6785            offset: usize,
6786            mut depth: fidl::encoding::Depth,
6787        ) -> fidl::Result<()> {
6788            decoder.debug_check_bounds::<Self>(offset);
6789            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6790                None => return Err(fidl::Error::NotNullable),
6791                Some(len) => len,
6792            };
6793            // Calling decoder.out_of_line_offset(0) is not allowed.
6794            if len == 0 {
6795                return Ok(());
6796            };
6797            depth.increment()?;
6798            let envelope_size = 8;
6799            let bytes_len = len * envelope_size;
6800            let offset = decoder.out_of_line_offset(bytes_len)?;
6801            // Decode the envelope for each type.
6802            let mut _next_ordinal_to_read = 0;
6803            let mut next_offset = offset;
6804            let end_offset = offset + bytes_len;
6805            _next_ordinal_to_read += 1;
6806            if next_offset >= end_offset {
6807                return Ok(());
6808            }
6809
6810            // Decode unknown envelopes for gaps in ordinals.
6811            while _next_ordinal_to_read < 1 {
6812                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6813                _next_ordinal_to_read += 1;
6814                next_offset += envelope_size;
6815            }
6816
6817            let next_out_of_line = decoder.next_out_of_line();
6818            let handles_before = decoder.remaining_handles();
6819            if let Some((inlined, num_bytes, num_handles)) =
6820                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6821            {
6822                let member_inline_size =
6823                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6824                if inlined != (member_inline_size <= 4) {
6825                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6826                }
6827                let inner_offset;
6828                let mut inner_depth = depth.clone();
6829                if inlined {
6830                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6831                    inner_offset = next_offset;
6832                } else {
6833                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6834                    inner_depth.increment()?;
6835                }
6836                let val_ref =
6837                    self.driver_transfer_bytes.get_or_insert_with(|| fidl::new_empty!(u32, D));
6838                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
6839                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6840                {
6841                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6842                }
6843                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6844                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6845                }
6846            }
6847
6848            next_offset += envelope_size;
6849            _next_ordinal_to_read += 1;
6850            if next_offset >= end_offset {
6851                return Ok(());
6852            }
6853
6854            // Decode unknown envelopes for gaps in ordinals.
6855            while _next_ordinal_to_read < 2 {
6856                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6857                _next_ordinal_to_read += 1;
6858                next_offset += envelope_size;
6859            }
6860
6861            let next_out_of_line = decoder.next_out_of_line();
6862            let handles_before = decoder.remaining_handles();
6863            if let Some((inlined, num_bytes, num_handles)) =
6864                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6865            {
6866                let member_inline_size =
6867                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6868                if inlined != (member_inline_size <= 4) {
6869                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6870                }
6871                let inner_offset;
6872                let mut inner_depth = depth.clone();
6873                if inlined {
6874                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6875                    inner_offset = next_offset;
6876                } else {
6877                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6878                    inner_depth.increment()?;
6879                }
6880                let val_ref = self.internal_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6881                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6882                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6883                {
6884                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6885                }
6886                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6887                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6888                }
6889            }
6890
6891            next_offset += envelope_size;
6892            _next_ordinal_to_read += 1;
6893            if next_offset >= end_offset {
6894                return Ok(());
6895            }
6896
6897            // Decode unknown envelopes for gaps in ordinals.
6898            while _next_ordinal_to_read < 3 {
6899                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6900                _next_ordinal_to_read += 1;
6901                next_offset += envelope_size;
6902            }
6903
6904            let next_out_of_line = decoder.next_out_of_line();
6905            let handles_before = decoder.remaining_handles();
6906            if let Some((inlined, num_bytes, num_handles)) =
6907                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6908            {
6909                let member_inline_size =
6910                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6911                if inlined != (member_inline_size <= 4) {
6912                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6913                }
6914                let inner_offset;
6915                let mut inner_depth = depth.clone();
6916                if inlined {
6917                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6918                    inner_offset = next_offset;
6919                } else {
6920                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6921                    inner_depth.increment()?;
6922                }
6923                let val_ref = self.external_delay.get_or_insert_with(|| fidl::new_empty!(i64, D));
6924                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
6925                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6926                {
6927                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6928                }
6929                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6930                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6931                }
6932            }
6933
6934            next_offset += envelope_size;
6935            _next_ordinal_to_read += 1;
6936            if next_offset >= end_offset {
6937                return Ok(());
6938            }
6939
6940            // Decode unknown envelopes for gaps in ordinals.
6941            while _next_ordinal_to_read < 4 {
6942                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6943                _next_ordinal_to_read += 1;
6944                next_offset += envelope_size;
6945            }
6946
6947            let next_out_of_line = decoder.next_out_of_line();
6948            let handles_before = decoder.remaining_handles();
6949            if let Some((inlined, num_bytes, num_handles)) =
6950                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6951            {
6952                let member_inline_size = <fidl::encoding::Vector<FormatRange, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6953                if inlined != (member_inline_size <= 4) {
6954                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6955                }
6956                let inner_offset;
6957                let mut inner_depth = depth.clone();
6958                if inlined {
6959                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6960                    inner_offset = next_offset;
6961                } else {
6962                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6963                    inner_depth.increment()?;
6964                }
6965                let val_ref = self.supported_formats.get_or_insert_with(
6966                    || fidl::new_empty!(fidl::encoding::Vector<FormatRange, 64>, D),
6967                );
6968                fidl::decode!(fidl::encoding::Vector<FormatRange, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
6969                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6970                {
6971                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6972                }
6973                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6974                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6975                }
6976            }
6977
6978            next_offset += envelope_size;
6979            _next_ordinal_to_read += 1;
6980            if next_offset >= end_offset {
6981                return Ok(());
6982            }
6983
6984            // Decode unknown envelopes for gaps in ordinals.
6985            while _next_ordinal_to_read < 5 {
6986                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6987                _next_ordinal_to_read += 1;
6988                next_offset += envelope_size;
6989            }
6990
6991            let next_out_of_line = decoder.next_out_of_line();
6992            let handles_before = decoder.remaining_handles();
6993            if let Some((inlined, num_bytes, num_handles)) =
6994                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6995            {
6996                let member_inline_size =
6997                    <RingBufferConstraints as fidl::encoding::TypeMarker>::inline_size(
6998                        decoder.context,
6999                    );
7000                if inlined != (member_inline_size <= 4) {
7001                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7002                }
7003                let inner_offset;
7004                let mut inner_depth = depth.clone();
7005                if inlined {
7006                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7007                    inner_offset = next_offset;
7008                } else {
7009                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7010                    inner_depth.increment()?;
7011                }
7012                let val_ref = self
7013                    .ring_buffer_constraints
7014                    .get_or_insert_with(|| fidl::new_empty!(RingBufferConstraints, D));
7015                fidl::decode!(
7016                    RingBufferConstraints,
7017                    D,
7018                    val_ref,
7019                    decoder,
7020                    inner_offset,
7021                    inner_depth
7022                )?;
7023                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7024                {
7025                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7026                }
7027                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7028                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7029                }
7030            }
7031
7032            next_offset += envelope_size;
7033            _next_ordinal_to_read += 1;
7034            if next_offset >= end_offset {
7035                return Ok(());
7036            }
7037
7038            // Decode unknown envelopes for gaps in ordinals.
7039            while _next_ordinal_to_read < 6 {
7040                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7041                _next_ordinal_to_read += 1;
7042                next_offset += envelope_size;
7043            }
7044
7045            let next_out_of_line = decoder.next_out_of_line();
7046            let handles_before = decoder.remaining_handles();
7047            if let Some((inlined, num_bytes, num_handles)) =
7048                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7049            {
7050                let member_inline_size =
7051                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7052                if inlined != (member_inline_size <= 4) {
7053                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7054                }
7055                let inner_offset;
7056                let mut inner_depth = depth.clone();
7057                if inlined {
7058                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7059                    inner_offset = next_offset;
7060                } else {
7061                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7062                    inner_depth.increment()?;
7063                }
7064                let val_ref =
7065                    self.notifications_per_ring.get_or_insert_with(|| fidl::new_empty!(u32, D));
7066                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
7067                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7068                {
7069                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7070                }
7071                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7072                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7073                }
7074            }
7075
7076            next_offset += envelope_size;
7077
7078            // Decode the remaining unknown envelopes.
7079            while next_offset < end_offset {
7080                _next_ordinal_to_read += 1;
7081                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7082                next_offset += envelope_size;
7083            }
7084
7085            Ok(())
7086        }
7087    }
7088
7089    impl StreamConfig {
7090        #[inline(always)]
7091        fn max_ordinal_present(&self) -> u64 {
7092            if let Some(_) = self.plug_properties {
7093                return 5;
7094            }
7095            if let Some(_) = self.gain_properties {
7096                return 4;
7097            }
7098            if let Some(_) = self.clock_properties {
7099                return 3;
7100            }
7101            if let Some(_) = self.ring_buffer {
7102                return 2;
7103            }
7104            if let Some(_) = self.is_input {
7105                return 1;
7106            }
7107            0
7108        }
7109    }
7110
7111    impl fidl::encoding::ValueTypeMarker for StreamConfig {
7112        type Borrowed<'a> = &'a Self;
7113        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7114            value
7115        }
7116    }
7117
7118    unsafe impl fidl::encoding::TypeMarker for StreamConfig {
7119        type Owned = Self;
7120
7121        #[inline(always)]
7122        fn inline_align(_context: fidl::encoding::Context) -> usize {
7123            8
7124        }
7125
7126        #[inline(always)]
7127        fn inline_size(_context: fidl::encoding::Context) -> usize {
7128            16
7129        }
7130    }
7131
7132    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StreamConfig, D>
7133        for &StreamConfig
7134    {
7135        unsafe fn encode(
7136            self,
7137            encoder: &mut fidl::encoding::Encoder<'_, D>,
7138            offset: usize,
7139            mut depth: fidl::encoding::Depth,
7140        ) -> fidl::Result<()> {
7141            encoder.debug_check_bounds::<StreamConfig>(offset);
7142            // Vector header
7143            let max_ordinal: u64 = self.max_ordinal_present();
7144            encoder.write_num(max_ordinal, offset);
7145            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7146            // Calling encoder.out_of_line_offset(0) is not allowed.
7147            if max_ordinal == 0 {
7148                return Ok(());
7149            }
7150            depth.increment()?;
7151            let envelope_size = 8;
7152            let bytes_len = max_ordinal as usize * envelope_size;
7153            #[allow(unused_variables)]
7154            let offset = encoder.out_of_line_offset(bytes_len);
7155            let mut _prev_end_offset: usize = 0;
7156            if 1 > max_ordinal {
7157                return Ok(());
7158            }
7159
7160            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7161            // are envelope_size bytes.
7162            let cur_offset: usize = (1 - 1) * envelope_size;
7163
7164            // Zero reserved fields.
7165            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7166
7167            // Safety:
7168            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7169            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7170            //   envelope_size bytes, there is always sufficient room.
7171            fidl::encoding::encode_in_envelope_optional::<bool, D>(
7172                self.is_input.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
7173                encoder,
7174                offset + cur_offset,
7175                depth,
7176            )?;
7177
7178            _prev_end_offset = cur_offset + envelope_size;
7179            if 2 > max_ordinal {
7180                return Ok(());
7181            }
7182
7183            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7184            // are envelope_size bytes.
7185            let cur_offset: usize = (2 - 1) * envelope_size;
7186
7187            // Zero reserved fields.
7188            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7189
7190            // Safety:
7191            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7192            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7193            //   envelope_size bytes, there is always sufficient room.
7194            fidl::encoding::encode_in_envelope_optional::<RingBuffer, D>(
7195                self.ring_buffer
7196                    .as_ref()
7197                    .map(<RingBuffer as fidl::encoding::ValueTypeMarker>::borrow),
7198                encoder,
7199                offset + cur_offset,
7200                depth,
7201            )?;
7202
7203            _prev_end_offset = cur_offset + envelope_size;
7204            if 3 > max_ordinal {
7205                return Ok(());
7206            }
7207
7208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7209            // are envelope_size bytes.
7210            let cur_offset: usize = (3 - 1) * envelope_size;
7211
7212            // Zero reserved fields.
7213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7214
7215            // Safety:
7216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7218            //   envelope_size bytes, there is always sufficient room.
7219            fidl::encoding::encode_in_envelope_optional::<ClockProperties, D>(
7220                self.clock_properties
7221                    .as_ref()
7222                    .map(<ClockProperties as fidl::encoding::ValueTypeMarker>::borrow),
7223                encoder,
7224                offset + cur_offset,
7225                depth,
7226            )?;
7227
7228            _prev_end_offset = cur_offset + envelope_size;
7229            if 4 > max_ordinal {
7230                return Ok(());
7231            }
7232
7233            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7234            // are envelope_size bytes.
7235            let cur_offset: usize = (4 - 1) * envelope_size;
7236
7237            // Zero reserved fields.
7238            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7239
7240            // Safety:
7241            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7242            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7243            //   envelope_size bytes, there is always sufficient room.
7244            fidl::encoding::encode_in_envelope_optional::<GainProperties, D>(
7245                self.gain_properties
7246                    .as_ref()
7247                    .map(<GainProperties as fidl::encoding::ValueTypeMarker>::borrow),
7248                encoder,
7249                offset + cur_offset,
7250                depth,
7251            )?;
7252
7253            _prev_end_offset = cur_offset + envelope_size;
7254            if 5 > max_ordinal {
7255                return Ok(());
7256            }
7257
7258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7259            // are envelope_size bytes.
7260            let cur_offset: usize = (5 - 1) * envelope_size;
7261
7262            // Zero reserved fields.
7263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7264
7265            // Safety:
7266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7268            //   envelope_size bytes, there is always sufficient room.
7269            fidl::encoding::encode_in_envelope_optional::<PlugProperties, D>(
7270                self.plug_properties
7271                    .as_ref()
7272                    .map(<PlugProperties as fidl::encoding::ValueTypeMarker>::borrow),
7273                encoder,
7274                offset + cur_offset,
7275                depth,
7276            )?;
7277
7278            _prev_end_offset = cur_offset + envelope_size;
7279
7280            Ok(())
7281        }
7282    }
7283
7284    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StreamConfig {
7285        #[inline(always)]
7286        fn new_empty() -> Self {
7287            Self::default()
7288        }
7289
7290        unsafe fn decode(
7291            &mut self,
7292            decoder: &mut fidl::encoding::Decoder<'_, D>,
7293            offset: usize,
7294            mut depth: fidl::encoding::Depth,
7295        ) -> fidl::Result<()> {
7296            decoder.debug_check_bounds::<Self>(offset);
7297            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7298                None => return Err(fidl::Error::NotNullable),
7299                Some(len) => len,
7300            };
7301            // Calling decoder.out_of_line_offset(0) is not allowed.
7302            if len == 0 {
7303                return Ok(());
7304            };
7305            depth.increment()?;
7306            let envelope_size = 8;
7307            let bytes_len = len * envelope_size;
7308            let offset = decoder.out_of_line_offset(bytes_len)?;
7309            // Decode the envelope for each type.
7310            let mut _next_ordinal_to_read = 0;
7311            let mut next_offset = offset;
7312            let end_offset = offset + bytes_len;
7313            _next_ordinal_to_read += 1;
7314            if next_offset >= end_offset {
7315                return Ok(());
7316            }
7317
7318            // Decode unknown envelopes for gaps in ordinals.
7319            while _next_ordinal_to_read < 1 {
7320                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7321                _next_ordinal_to_read += 1;
7322                next_offset += envelope_size;
7323            }
7324
7325            let next_out_of_line = decoder.next_out_of_line();
7326            let handles_before = decoder.remaining_handles();
7327            if let Some((inlined, num_bytes, num_handles)) =
7328                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7329            {
7330                let member_inline_size =
7331                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7332                if inlined != (member_inline_size <= 4) {
7333                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7334                }
7335                let inner_offset;
7336                let mut inner_depth = depth.clone();
7337                if inlined {
7338                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7339                    inner_offset = next_offset;
7340                } else {
7341                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7342                    inner_depth.increment()?;
7343                }
7344                let val_ref = self.is_input.get_or_insert_with(|| fidl::new_empty!(bool, D));
7345                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7346                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7347                {
7348                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7349                }
7350                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7351                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7352                }
7353            }
7354
7355            next_offset += envelope_size;
7356            _next_ordinal_to_read += 1;
7357            if next_offset >= end_offset {
7358                return Ok(());
7359            }
7360
7361            // Decode unknown envelopes for gaps in ordinals.
7362            while _next_ordinal_to_read < 2 {
7363                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7364                _next_ordinal_to_read += 1;
7365                next_offset += envelope_size;
7366            }
7367
7368            let next_out_of_line = decoder.next_out_of_line();
7369            let handles_before = decoder.remaining_handles();
7370            if let Some((inlined, num_bytes, num_handles)) =
7371                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7372            {
7373                let member_inline_size =
7374                    <RingBuffer as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7375                if inlined != (member_inline_size <= 4) {
7376                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7377                }
7378                let inner_offset;
7379                let mut inner_depth = depth.clone();
7380                if inlined {
7381                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7382                    inner_offset = next_offset;
7383                } else {
7384                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7385                    inner_depth.increment()?;
7386                }
7387                let val_ref =
7388                    self.ring_buffer.get_or_insert_with(|| fidl::new_empty!(RingBuffer, D));
7389                fidl::decode!(RingBuffer, D, val_ref, decoder, inner_offset, inner_depth)?;
7390                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7391                {
7392                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7393                }
7394                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7395                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7396                }
7397            }
7398
7399            next_offset += envelope_size;
7400            _next_ordinal_to_read += 1;
7401            if next_offset >= end_offset {
7402                return Ok(());
7403            }
7404
7405            // Decode unknown envelopes for gaps in ordinals.
7406            while _next_ordinal_to_read < 3 {
7407                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7408                _next_ordinal_to_read += 1;
7409                next_offset += envelope_size;
7410            }
7411
7412            let next_out_of_line = decoder.next_out_of_line();
7413            let handles_before = decoder.remaining_handles();
7414            if let Some((inlined, num_bytes, num_handles)) =
7415                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7416            {
7417                let member_inline_size =
7418                    <ClockProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7419                if inlined != (member_inline_size <= 4) {
7420                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7421                }
7422                let inner_offset;
7423                let mut inner_depth = depth.clone();
7424                if inlined {
7425                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7426                    inner_offset = next_offset;
7427                } else {
7428                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7429                    inner_depth.increment()?;
7430                }
7431                let val_ref = self
7432                    .clock_properties
7433                    .get_or_insert_with(|| fidl::new_empty!(ClockProperties, D));
7434                fidl::decode!(ClockProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
7435                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7436                {
7437                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7438                }
7439                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7440                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7441                }
7442            }
7443
7444            next_offset += envelope_size;
7445            _next_ordinal_to_read += 1;
7446            if next_offset >= end_offset {
7447                return Ok(());
7448            }
7449
7450            // Decode unknown envelopes for gaps in ordinals.
7451            while _next_ordinal_to_read < 4 {
7452                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7453                _next_ordinal_to_read += 1;
7454                next_offset += envelope_size;
7455            }
7456
7457            let next_out_of_line = decoder.next_out_of_line();
7458            let handles_before = decoder.remaining_handles();
7459            if let Some((inlined, num_bytes, num_handles)) =
7460                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7461            {
7462                let member_inline_size =
7463                    <GainProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7464                if inlined != (member_inline_size <= 4) {
7465                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7466                }
7467                let inner_offset;
7468                let mut inner_depth = depth.clone();
7469                if inlined {
7470                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7471                    inner_offset = next_offset;
7472                } else {
7473                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7474                    inner_depth.increment()?;
7475                }
7476                let val_ref =
7477                    self.gain_properties.get_or_insert_with(|| fidl::new_empty!(GainProperties, D));
7478                fidl::decode!(GainProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
7479                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7480                {
7481                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7482                }
7483                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7484                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7485                }
7486            }
7487
7488            next_offset += envelope_size;
7489            _next_ordinal_to_read += 1;
7490            if next_offset >= end_offset {
7491                return Ok(());
7492            }
7493
7494            // Decode unknown envelopes for gaps in ordinals.
7495            while _next_ordinal_to_read < 5 {
7496                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7497                _next_ordinal_to_read += 1;
7498                next_offset += envelope_size;
7499            }
7500
7501            let next_out_of_line = decoder.next_out_of_line();
7502            let handles_before = decoder.remaining_handles();
7503            if let Some((inlined, num_bytes, num_handles)) =
7504                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7505            {
7506                let member_inline_size =
7507                    <PlugProperties as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7508                if inlined != (member_inline_size <= 4) {
7509                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7510                }
7511                let inner_offset;
7512                let mut inner_depth = depth.clone();
7513                if inlined {
7514                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7515                    inner_offset = next_offset;
7516                } else {
7517                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7518                    inner_depth.increment()?;
7519                }
7520                let val_ref =
7521                    self.plug_properties.get_or_insert_with(|| fidl::new_empty!(PlugProperties, D));
7522                fidl::decode!(PlugProperties, D, val_ref, decoder, inner_offset, inner_depth)?;
7523                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7524                {
7525                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7526                }
7527                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7528                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7529                }
7530            }
7531
7532            next_offset += envelope_size;
7533
7534            // Decode the remaining unknown envelopes.
7535            while next_offset < end_offset {
7536                _next_ordinal_to_read += 1;
7537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7538                next_offset += envelope_size;
7539            }
7540
7541            Ok(())
7542        }
7543    }
7544
7545    impl fidl::encoding::ValueTypeMarker for DeviceSpecific {
7546        type Borrowed<'a> = &'a Self;
7547        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7548            value
7549        }
7550    }
7551
7552    unsafe impl fidl::encoding::TypeMarker for DeviceSpecific {
7553        type Owned = Self;
7554
7555        #[inline(always)]
7556        fn inline_align(_context: fidl::encoding::Context) -> usize {
7557            8
7558        }
7559
7560        #[inline(always)]
7561        fn inline_size(_context: fidl::encoding::Context) -> usize {
7562            16
7563        }
7564    }
7565
7566    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceSpecific, D>
7567        for &DeviceSpecific
7568    {
7569        #[inline]
7570        unsafe fn encode(
7571            self,
7572            encoder: &mut fidl::encoding::Encoder<'_, D>,
7573            offset: usize,
7574            _depth: fidl::encoding::Depth,
7575        ) -> fidl::Result<()> {
7576            encoder.debug_check_bounds::<DeviceSpecific>(offset);
7577            encoder.write_num::<u64>(self.ordinal(), offset);
7578            match self {
7579                DeviceSpecific::StreamConfig(ref val) => {
7580                    fidl::encoding::encode_in_envelope::<StreamConfig, D>(
7581                        <StreamConfig as fidl::encoding::ValueTypeMarker>::borrow(val),
7582                        encoder,
7583                        offset + 8,
7584                        _depth,
7585                    )
7586                }
7587                DeviceSpecific::Dai(ref val) => fidl::encoding::encode_in_envelope::<Dai, D>(
7588                    <Dai as fidl::encoding::ValueTypeMarker>::borrow(val),
7589                    encoder,
7590                    offset + 8,
7591                    _depth,
7592                ),
7593                DeviceSpecific::Codec(ref val) => fidl::encoding::encode_in_envelope::<Codec, D>(
7594                    <Codec as fidl::encoding::ValueTypeMarker>::borrow(val),
7595                    encoder,
7596                    offset + 8,
7597                    _depth,
7598                ),
7599                DeviceSpecific::Composite(ref val) => {
7600                    fidl::encoding::encode_in_envelope::<Composite, D>(
7601                        <Composite as fidl::encoding::ValueTypeMarker>::borrow(val),
7602                        encoder,
7603                        offset + 8,
7604                        _depth,
7605                    )
7606                }
7607                DeviceSpecific::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7608            }
7609        }
7610    }
7611
7612    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceSpecific {
7613        #[inline(always)]
7614        fn new_empty() -> Self {
7615            Self::__SourceBreaking { unknown_ordinal: 0 }
7616        }
7617
7618        #[inline]
7619        unsafe fn decode(
7620            &mut self,
7621            decoder: &mut fidl::encoding::Decoder<'_, D>,
7622            offset: usize,
7623            mut depth: fidl::encoding::Depth,
7624        ) -> fidl::Result<()> {
7625            decoder.debug_check_bounds::<Self>(offset);
7626            #[allow(unused_variables)]
7627            let next_out_of_line = decoder.next_out_of_line();
7628            let handles_before = decoder.remaining_handles();
7629            let (ordinal, inlined, num_bytes, num_handles) =
7630                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7631
7632            let member_inline_size = match ordinal {
7633                1 => <StreamConfig as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7634                2 => <Dai as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7635                3 => <Codec as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7636                4 => <Composite as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7637                0 => return Err(fidl::Error::UnknownUnionTag),
7638                _ => num_bytes as usize,
7639            };
7640
7641            if inlined != (member_inline_size <= 4) {
7642                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7643            }
7644            let _inner_offset;
7645            if inlined {
7646                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7647                _inner_offset = offset + 8;
7648            } else {
7649                depth.increment()?;
7650                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7651            }
7652            match ordinal {
7653                1 => {
7654                    #[allow(irrefutable_let_patterns)]
7655                    if let DeviceSpecific::StreamConfig(_) = self {
7656                        // Do nothing, read the value into the object
7657                    } else {
7658                        // Initialize `self` to the right variant
7659                        *self = DeviceSpecific::StreamConfig(fidl::new_empty!(StreamConfig, D));
7660                    }
7661                    #[allow(irrefutable_let_patterns)]
7662                    if let DeviceSpecific::StreamConfig(ref mut val) = self {
7663                        fidl::decode!(StreamConfig, D, val, decoder, _inner_offset, depth)?;
7664                    } else {
7665                        unreachable!()
7666                    }
7667                }
7668                2 => {
7669                    #[allow(irrefutable_let_patterns)]
7670                    if let DeviceSpecific::Dai(_) = self {
7671                        // Do nothing, read the value into the object
7672                    } else {
7673                        // Initialize `self` to the right variant
7674                        *self = DeviceSpecific::Dai(fidl::new_empty!(Dai, D));
7675                    }
7676                    #[allow(irrefutable_let_patterns)]
7677                    if let DeviceSpecific::Dai(ref mut val) = self {
7678                        fidl::decode!(Dai, D, val, decoder, _inner_offset, depth)?;
7679                    } else {
7680                        unreachable!()
7681                    }
7682                }
7683                3 => {
7684                    #[allow(irrefutable_let_patterns)]
7685                    if let DeviceSpecific::Codec(_) = self {
7686                        // Do nothing, read the value into the object
7687                    } else {
7688                        // Initialize `self` to the right variant
7689                        *self = DeviceSpecific::Codec(fidl::new_empty!(Codec, D));
7690                    }
7691                    #[allow(irrefutable_let_patterns)]
7692                    if let DeviceSpecific::Codec(ref mut val) = self {
7693                        fidl::decode!(Codec, D, val, decoder, _inner_offset, depth)?;
7694                    } else {
7695                        unreachable!()
7696                    }
7697                }
7698                4 => {
7699                    #[allow(irrefutable_let_patterns)]
7700                    if let DeviceSpecific::Composite(_) = self {
7701                        // Do nothing, read the value into the object
7702                    } else {
7703                        // Initialize `self` to the right variant
7704                        *self = DeviceSpecific::Composite(fidl::new_empty!(Composite, D));
7705                    }
7706                    #[allow(irrefutable_let_patterns)]
7707                    if let DeviceSpecific::Composite(ref mut val) = self {
7708                        fidl::decode!(Composite, D, val, decoder, _inner_offset, depth)?;
7709                    } else {
7710                        unreachable!()
7711                    }
7712                }
7713                #[allow(deprecated)]
7714                ordinal => {
7715                    for _ in 0..num_handles {
7716                        decoder.drop_next_handle()?;
7717                    }
7718                    *self = DeviceSpecific::__SourceBreaking { unknown_ordinal: ordinal };
7719                }
7720            }
7721            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
7722                return Err(fidl::Error::InvalidNumBytesInEnvelope);
7723            }
7724            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7725                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7726            }
7727            Ok(())
7728        }
7729    }
7730}