Skip to main content

fidl_fuchsia_hardware_audio_signalprocessing_common/
fidl_fuchsia_hardware_audio_signalprocessing_common.rs

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