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