fidl_fuchsia_hardware_audio_signalprocessing__common/
fidl_fuchsia_hardware_audio_signalprocessing__common.rs

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