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