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