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