fidl_fuchsia_hardware_power__common/
fidl_fuchsia_hardware_power__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 const MAX_DEPENDENCIES: u16 = 128;
12
13/// Should be MAX_TRANSITIONS + 1
14pub const MAX_LEVELS: u16 = 128;
15
16pub const MAX_NAME_LENGTH: u16 = 63;
17
18pub const MAX_POWER_ELEMENTS: u16 = 32;
19
20/// This means we could have up to 128 power levels, which seems like more than
21/// enough.
22pub const MAX_TRANSITIONS: u16 = 127;
23
24/// Represents the power elements related to controlling the CPU. This is an
25/// enum with a single variant to add flexibility for future addition of more
26/// elements related to CPU power state.
27#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
28#[repr(u32)]
29pub enum CpuPowerElement {
30    Cpu = 1,
31}
32
33impl CpuPowerElement {
34    #[inline]
35    pub fn from_primitive(prim: u32) -> Option<Self> {
36        match prim {
37            1 => Some(Self::Cpu),
38            _ => None,
39        }
40    }
41
42    #[inline]
43    pub const fn into_primitive(self) -> u32 {
44        self as u32
45    }
46}
47
48#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
49#[repr(u32)]
50pub enum FrameworkElementLevels {
51    Off = 0,
52    On = 1,
53}
54
55impl FrameworkElementLevels {
56    #[inline]
57    pub fn from_primitive(prim: u32) -> Option<Self> {
58        match prim {
59            0 => Some(Self::Off),
60            1 => Some(Self::On),
61            _ => None,
62        }
63    }
64
65    #[inline]
66    pub const fn into_primitive(self) -> u32 {
67        self as u32
68    }
69}
70
71#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
72#[repr(u8)]
73pub enum PowerDomainStatus {
74    Disabled = 1,
75    Enabled = 2,
76}
77
78impl PowerDomainStatus {
79    #[inline]
80    pub fn from_primitive(prim: u8) -> Option<Self> {
81        match prim {
82            1 => Some(Self::Disabled),
83            2 => Some(Self::Enabled),
84            _ => None,
85        }
86    }
87
88    #[inline]
89    pub const fn into_primitive(self) -> u8 {
90        self as u8
91    }
92}
93
94#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
95#[repr(u32)]
96pub enum SagElement {
97    ExecutionState = 1,
98    ApplicationActivity = 4,
99}
100
101impl SagElement {
102    #[inline]
103    pub fn from_primitive(prim: u32) -> Option<Self> {
104        match prim {
105            1 => Some(Self::ExecutionState),
106            4 => Some(Self::ApplicationActivity),
107            _ => None,
108        }
109    }
110
111    #[inline]
112    pub const fn into_primitive(self) -> u32 {
113        self as u32
114    }
115}
116
117/// The configuration for a component's power elements.
118#[derive(Clone, Debug, PartialEq)]
119pub struct ComponentPowerConfiguration {
120    pub power_elements: Vec<PowerElementConfiguration>,
121}
122
123impl fidl::Persistable for ComponentPowerConfiguration {}
124
125#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
126#[repr(C)]
127pub struct DeviceGetCurrentVoltageRequest {
128    pub index: u32,
129}
130
131impl fidl::Persistable for DeviceGetCurrentVoltageRequest {}
132
133#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
134#[repr(C)]
135pub struct DeviceReadPmicCtrlRegRequest {
136    pub reg_addr: u32,
137}
138
139impl fidl::Persistable for DeviceReadPmicCtrlRegRequest {}
140
141#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
142#[repr(C)]
143pub struct DeviceRegisterPowerDomainRequest {
144    pub min_needed_voltage: u32,
145    pub max_supported_voltage: u32,
146}
147
148impl fidl::Persistable for DeviceRegisterPowerDomainRequest {}
149
150#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
151#[repr(C)]
152pub struct DeviceRequestVoltageRequest {
153    pub voltage: u32,
154}
155
156impl fidl::Persistable for DeviceRequestVoltageRequest {}
157
158#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
159#[repr(C)]
160pub struct DeviceWritePmicCtrlRegRequest {
161    pub reg_addr: u32,
162    pub value: u32,
163}
164
165impl fidl::Persistable for DeviceWritePmicCtrlRegRequest {}
166
167#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
168#[repr(C)]
169pub struct DeviceGetCurrentVoltageResponse {
170    pub current_voltage: u32,
171}
172
173impl fidl::Persistable for DeviceGetCurrentVoltageResponse {}
174
175#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
176pub struct DeviceGetPowerDomainStatusResponse {
177    pub status: PowerDomainStatus,
178}
179
180impl fidl::Persistable for DeviceGetPowerDomainStatusResponse {}
181
182#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
183#[repr(C)]
184pub struct DeviceGetSupportedVoltageRangeResponse {
185    pub min: u32,
186    pub max: u32,
187}
188
189impl fidl::Persistable for DeviceGetSupportedVoltageRangeResponse {}
190
191#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
192#[repr(C)]
193pub struct DeviceReadPmicCtrlRegResponse {
194    pub value: u32,
195}
196
197impl fidl::Persistable for DeviceReadPmicCtrlRegResponse {}
198
199#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
200#[repr(C)]
201pub struct DeviceRequestVoltageResponse {
202    pub actual_voltage: u32,
203}
204
205impl fidl::Persistable for DeviceRequestVoltageResponse {}
206
207/// Information related to a power domain.
208#[derive(Clone, Debug, Default, PartialEq)]
209pub struct Domain {
210    /// Domain ID should be unique across all power domains in the same level.
211    /// Used to associate power consumers that belong to the same power domain.
212    pub id: Option<u32>,
213    #[doc(hidden)]
214    pub __source_breaking: fidl::marker::SourceBreaking,
215}
216
217impl fidl::Persistable for Domain {}
218
219/// Passed to the power core driver in metadata.
220#[derive(Clone, Debug, Default, PartialEq)]
221pub struct DomainMetadata {
222    /// List of power domains to be managed by this power driver.
223    pub domains: Option<Vec<Domain>>,
224    #[doc(hidden)]
225    pub __source_breaking: fidl::marker::SourceBreaking,
226}
227
228impl fidl::Persistable for DomainMetadata {}
229impl fidl::Serializable for DomainMetadata {
230    const SERIALIZABLE_NAME: &'static str = "fuchsia.hardware.power.DomainMetadata";
231}
232
233/// Represents a dependency between two power levels of two different
234/// `PowerElement`s.
235#[derive(Clone, Debug, Default, PartialEq)]
236pub struct LevelTuple {
237    pub child_level: Option<u8>,
238    pub parent_level: Option<u8>,
239    #[doc(hidden)]
240    pub __source_breaking: fidl::marker::SourceBreaking,
241}
242
243impl fidl::Persistable for LevelTuple {}
244
245/// Describes the relationship between the `PowerLevel`s of two
246/// `PowerElement`s. `child` is the name of the `PowerElement` which has
247/// `PowerLevel`s that depend on `parent`.
248/// + `child` is the name for a `PowerElement` which a driver owns.
249/// + `parent` is the name for a `PowerElement` which a driver has access to
250/// + `level_deps` is the map of level dependencies from `child` to `parent`.
251#[derive(Clone, Debug, Default, PartialEq)]
252pub struct PowerDependency {
253    pub child: Option<String>,
254    pub parent: Option<ParentElement>,
255    pub level_deps: Option<Vec<LevelTuple>>,
256    #[doc(hidden)]
257    pub __source_breaking: fidl::marker::SourceBreaking,
258}
259
260impl fidl::Persistable for PowerDependency {}
261
262/// Set of `PowerLevel`s and a human-readable identifier. A `PowerLevel` itself
263/// contains information about valid transitions out of that level.
264#[derive(Clone, Debug, Default, PartialEq)]
265pub struct PowerElement {
266    pub name: Option<String>,
267    pub levels: Option<Vec<PowerLevel>>,
268    #[doc(hidden)]
269    pub __source_breaking: fidl::marker::SourceBreaking,
270}
271
272impl fidl::Persistable for PowerElement {}
273
274/// Contains the `PowerElement` description and any dependencies it has on
275/// other `PowerElement`s.
276#[derive(Clone, Debug, Default, PartialEq)]
277pub struct PowerElementConfiguration {
278    pub element: Option<PowerElement>,
279    pub dependencies: Option<Vec<PowerDependency>>,
280    #[doc(hidden)]
281    pub __source_breaking: fidl::marker::SourceBreaking,
282}
283
284impl fidl::Persistable for PowerElementConfiguration {}
285
286/// A zero-indexed set of levels that a device can assume.
287/// + `level` is the zero-indexed level of this `PowerLevel`.
288/// + `name` is a human-readable label for this `PowerLevel`, used only for
289///   debugging.
290/// + `transitions` describes the levels that are valid transitions from this
291///   `PowerLevel`.
292#[derive(Clone, Debug, Default, PartialEq)]
293pub struct PowerLevel {
294    pub level: Option<u8>,
295    pub name: Option<String>,
296    pub transitions: Option<Vec<Transition>>,
297    #[doc(hidden)]
298    pub __source_breaking: fidl::marker::SourceBreaking,
299}
300
301impl fidl::Persistable for PowerLevel {}
302
303/// The length of time it takes to move to a power level.
304/// + `target_level` is the power level we're moving to.
305/// + `latency_us` is the time it takes to move to the level in microseconds.
306#[derive(Clone, Debug, Default, PartialEq)]
307pub struct Transition {
308    pub target_level: Option<u8>,
309    pub latency_us: Option<u32>,
310    #[doc(hidden)]
311    pub __source_breaking: fidl::marker::SourceBreaking,
312}
313
314impl fidl::Persistable for Transition {}
315
316/// Identifier for an element that is another element's parent, in other words
317/// an element that the other element depends upon.
318#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
319pub enum ParentElement {
320    /// The parent element is one of SAG's elements and the access token should
321    /// be obtained from the appropriate SAG-related protocol.
322    Sag(SagElement),
323    /// The parent element's access token should be available from
324    /// `/svc/fuchsia.hardware.power.PowerTokenProvider/{instance_name}`.
325    InstanceName(String),
326    /// The parent element comes from the fuchsia.power.system/CpuElementManager
327    /// protocol.
328    CpuControl(CpuPowerElement),
329}
330
331impl ParentElement {
332    #[inline]
333    pub fn ordinal(&self) -> u64 {
334        match *self {
335            Self::Sag(_) => 1,
336            Self::InstanceName(_) => 2,
337            Self::CpuControl(_) => 3,
338        }
339    }
340}
341
342impl fidl::Persistable for ParentElement {}
343
344pub mod device_ordinals {
345    pub const REGISTER_POWER_DOMAIN: u64 = 0x3dde3e7cb91210dc;
346    pub const UNREGISTER_POWER_DOMAIN: u64 = 0x6b1b26f908fd8c69;
347    pub const GET_SUPPORTED_VOLTAGE_RANGE: u64 = 0x6d75897fea248df0;
348    pub const REQUEST_VOLTAGE: u64 = 0x23ca354dfe067e9b;
349    pub const GET_CURRENT_VOLTAGE: u64 = 0x6a9f80a0412da961;
350    pub const GET_POWER_DOMAIN_STATUS: u64 = 0x39fe7f1e3e3c74ba;
351    pub const WRITE_PMIC_CTRL_REG: u64 = 0x340a3483d4740299;
352    pub const READ_PMIC_CTRL_REG: u64 = 0x72eebf304bb82f13;
353}
354
355pub mod power_token_provider_ordinals {
356    pub const GET_TOKEN: u64 = 0x289cd59b7d9f90ca;
357}
358
359mod internal {
360    use super::*;
361    unsafe impl fidl::encoding::TypeMarker for CpuPowerElement {
362        type Owned = Self;
363
364        #[inline(always)]
365        fn inline_align(_context: fidl::encoding::Context) -> usize {
366            std::mem::align_of::<u32>()
367        }
368
369        #[inline(always)]
370        fn inline_size(_context: fidl::encoding::Context) -> usize {
371            std::mem::size_of::<u32>()
372        }
373
374        #[inline(always)]
375        fn encode_is_copy() -> bool {
376            true
377        }
378
379        #[inline(always)]
380        fn decode_is_copy() -> bool {
381            false
382        }
383    }
384
385    impl fidl::encoding::ValueTypeMarker for CpuPowerElement {
386        type Borrowed<'a> = Self;
387        #[inline(always)]
388        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
389            *value
390        }
391    }
392
393    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
394        for CpuPowerElement
395    {
396        #[inline]
397        unsafe fn encode(
398            self,
399            encoder: &mut fidl::encoding::Encoder<'_, D>,
400            offset: usize,
401            _depth: fidl::encoding::Depth,
402        ) -> fidl::Result<()> {
403            encoder.debug_check_bounds::<Self>(offset);
404            encoder.write_num(self.into_primitive(), offset);
405            Ok(())
406        }
407    }
408
409    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CpuPowerElement {
410        #[inline(always)]
411        fn new_empty() -> Self {
412            Self::Cpu
413        }
414
415        #[inline]
416        unsafe fn decode(
417            &mut self,
418            decoder: &mut fidl::encoding::Decoder<'_, D>,
419            offset: usize,
420            _depth: fidl::encoding::Depth,
421        ) -> fidl::Result<()> {
422            decoder.debug_check_bounds::<Self>(offset);
423            let prim = decoder.read_num::<u32>(offset);
424
425            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
426            Ok(())
427        }
428    }
429    unsafe impl fidl::encoding::TypeMarker for FrameworkElementLevels {
430        type Owned = Self;
431
432        #[inline(always)]
433        fn inline_align(_context: fidl::encoding::Context) -> usize {
434            std::mem::align_of::<u32>()
435        }
436
437        #[inline(always)]
438        fn inline_size(_context: fidl::encoding::Context) -> usize {
439            std::mem::size_of::<u32>()
440        }
441
442        #[inline(always)]
443        fn encode_is_copy() -> bool {
444            true
445        }
446
447        #[inline(always)]
448        fn decode_is_copy() -> bool {
449            false
450        }
451    }
452
453    impl fidl::encoding::ValueTypeMarker for FrameworkElementLevels {
454        type Borrowed<'a> = Self;
455        #[inline(always)]
456        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
457            *value
458        }
459    }
460
461    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
462        for FrameworkElementLevels
463    {
464        #[inline]
465        unsafe fn encode(
466            self,
467            encoder: &mut fidl::encoding::Encoder<'_, D>,
468            offset: usize,
469            _depth: fidl::encoding::Depth,
470        ) -> fidl::Result<()> {
471            encoder.debug_check_bounds::<Self>(offset);
472            encoder.write_num(self.into_primitive(), offset);
473            Ok(())
474        }
475    }
476
477    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
478        for FrameworkElementLevels
479    {
480        #[inline(always)]
481        fn new_empty() -> Self {
482            Self::Off
483        }
484
485        #[inline]
486        unsafe fn decode(
487            &mut self,
488            decoder: &mut fidl::encoding::Decoder<'_, D>,
489            offset: usize,
490            _depth: fidl::encoding::Depth,
491        ) -> fidl::Result<()> {
492            decoder.debug_check_bounds::<Self>(offset);
493            let prim = decoder.read_num::<u32>(offset);
494
495            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
496            Ok(())
497        }
498    }
499    unsafe impl fidl::encoding::TypeMarker for PowerDomainStatus {
500        type Owned = Self;
501
502        #[inline(always)]
503        fn inline_align(_context: fidl::encoding::Context) -> usize {
504            std::mem::align_of::<u8>()
505        }
506
507        #[inline(always)]
508        fn inline_size(_context: fidl::encoding::Context) -> usize {
509            std::mem::size_of::<u8>()
510        }
511
512        #[inline(always)]
513        fn encode_is_copy() -> bool {
514            true
515        }
516
517        #[inline(always)]
518        fn decode_is_copy() -> bool {
519            false
520        }
521    }
522
523    impl fidl::encoding::ValueTypeMarker for PowerDomainStatus {
524        type Borrowed<'a> = Self;
525        #[inline(always)]
526        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
527            *value
528        }
529    }
530
531    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
532        for PowerDomainStatus
533    {
534        #[inline]
535        unsafe fn encode(
536            self,
537            encoder: &mut fidl::encoding::Encoder<'_, D>,
538            offset: usize,
539            _depth: fidl::encoding::Depth,
540        ) -> fidl::Result<()> {
541            encoder.debug_check_bounds::<Self>(offset);
542            encoder.write_num(self.into_primitive(), offset);
543            Ok(())
544        }
545    }
546
547    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerDomainStatus {
548        #[inline(always)]
549        fn new_empty() -> Self {
550            Self::Disabled
551        }
552
553        #[inline]
554        unsafe fn decode(
555            &mut self,
556            decoder: &mut fidl::encoding::Decoder<'_, D>,
557            offset: usize,
558            _depth: fidl::encoding::Depth,
559        ) -> fidl::Result<()> {
560            decoder.debug_check_bounds::<Self>(offset);
561            let prim = decoder.read_num::<u8>(offset);
562
563            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
564            Ok(())
565        }
566    }
567    unsafe impl fidl::encoding::TypeMarker for SagElement {
568        type Owned = Self;
569
570        #[inline(always)]
571        fn inline_align(_context: fidl::encoding::Context) -> usize {
572            std::mem::align_of::<u32>()
573        }
574
575        #[inline(always)]
576        fn inline_size(_context: fidl::encoding::Context) -> usize {
577            std::mem::size_of::<u32>()
578        }
579
580        #[inline(always)]
581        fn encode_is_copy() -> bool {
582            true
583        }
584
585        #[inline(always)]
586        fn decode_is_copy() -> bool {
587            false
588        }
589    }
590
591    impl fidl::encoding::ValueTypeMarker for SagElement {
592        type Borrowed<'a> = Self;
593        #[inline(always)]
594        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
595            *value
596        }
597    }
598
599    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for SagElement {
600        #[inline]
601        unsafe fn encode(
602            self,
603            encoder: &mut fidl::encoding::Encoder<'_, D>,
604            offset: usize,
605            _depth: fidl::encoding::Depth,
606        ) -> fidl::Result<()> {
607            encoder.debug_check_bounds::<Self>(offset);
608            encoder.write_num(self.into_primitive(), offset);
609            Ok(())
610        }
611    }
612
613    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SagElement {
614        #[inline(always)]
615        fn new_empty() -> Self {
616            Self::ExecutionState
617        }
618
619        #[inline]
620        unsafe fn decode(
621            &mut self,
622            decoder: &mut fidl::encoding::Decoder<'_, D>,
623            offset: usize,
624            _depth: fidl::encoding::Depth,
625        ) -> fidl::Result<()> {
626            decoder.debug_check_bounds::<Self>(offset);
627            let prim = decoder.read_num::<u32>(offset);
628
629            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
630            Ok(())
631        }
632    }
633
634    impl fidl::encoding::ValueTypeMarker for ComponentPowerConfiguration {
635        type Borrowed<'a> = &'a Self;
636        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
637            value
638        }
639    }
640
641    unsafe impl fidl::encoding::TypeMarker for ComponentPowerConfiguration {
642        type Owned = Self;
643
644        #[inline(always)]
645        fn inline_align(_context: fidl::encoding::Context) -> usize {
646            8
647        }
648
649        #[inline(always)]
650        fn inline_size(_context: fidl::encoding::Context) -> usize {
651            16
652        }
653    }
654
655    unsafe impl<D: fidl::encoding::ResourceDialect>
656        fidl::encoding::Encode<ComponentPowerConfiguration, D> for &ComponentPowerConfiguration
657    {
658        #[inline]
659        unsafe fn encode(
660            self,
661            encoder: &mut fidl::encoding::Encoder<'_, D>,
662            offset: usize,
663            _depth: fidl::encoding::Depth,
664        ) -> fidl::Result<()> {
665            encoder.debug_check_bounds::<ComponentPowerConfiguration>(offset);
666            // Delegate to tuple encoding.
667            fidl::encoding::Encode::<ComponentPowerConfiguration, D>::encode(
668                (
669                    <fidl::encoding::Vector<PowerElementConfiguration, 32> as fidl::encoding::ValueTypeMarker>::borrow(&self.power_elements),
670                ),
671                encoder, offset, _depth
672            )
673        }
674    }
675    unsafe impl<
676        D: fidl::encoding::ResourceDialect,
677        T0: fidl::encoding::Encode<fidl::encoding::Vector<PowerElementConfiguration, 32>, D>,
678    > fidl::encoding::Encode<ComponentPowerConfiguration, D> for (T0,)
679    {
680        #[inline]
681        unsafe fn encode(
682            self,
683            encoder: &mut fidl::encoding::Encoder<'_, D>,
684            offset: usize,
685            depth: fidl::encoding::Depth,
686        ) -> fidl::Result<()> {
687            encoder.debug_check_bounds::<ComponentPowerConfiguration>(offset);
688            // Zero out padding regions. There's no need to apply masks
689            // because the unmasked parts will be overwritten by fields.
690            // Write the fields.
691            self.0.encode(encoder, offset + 0, depth)?;
692            Ok(())
693        }
694    }
695
696    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
697        for ComponentPowerConfiguration
698    {
699        #[inline(always)]
700        fn new_empty() -> Self {
701            Self {
702                power_elements: fidl::new_empty!(fidl::encoding::Vector<PowerElementConfiguration, 32>, D),
703            }
704        }
705
706        #[inline]
707        unsafe fn decode(
708            &mut self,
709            decoder: &mut fidl::encoding::Decoder<'_, D>,
710            offset: usize,
711            _depth: fidl::encoding::Depth,
712        ) -> fidl::Result<()> {
713            decoder.debug_check_bounds::<Self>(offset);
714            // Verify that padding bytes are zero.
715            fidl::decode!(fidl::encoding::Vector<PowerElementConfiguration, 32>, D, &mut self.power_elements, decoder, offset + 0, _depth)?;
716            Ok(())
717        }
718    }
719
720    impl fidl::encoding::ValueTypeMarker for DeviceGetCurrentVoltageRequest {
721        type Borrowed<'a> = &'a Self;
722        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
723            value
724        }
725    }
726
727    unsafe impl fidl::encoding::TypeMarker for DeviceGetCurrentVoltageRequest {
728        type Owned = Self;
729
730        #[inline(always)]
731        fn inline_align(_context: fidl::encoding::Context) -> usize {
732            4
733        }
734
735        #[inline(always)]
736        fn inline_size(_context: fidl::encoding::Context) -> usize {
737            4
738        }
739        #[inline(always)]
740        fn encode_is_copy() -> bool {
741            true
742        }
743
744        #[inline(always)]
745        fn decode_is_copy() -> bool {
746            true
747        }
748    }
749
750    unsafe impl<D: fidl::encoding::ResourceDialect>
751        fidl::encoding::Encode<DeviceGetCurrentVoltageRequest, D>
752        for &DeviceGetCurrentVoltageRequest
753    {
754        #[inline]
755        unsafe fn encode(
756            self,
757            encoder: &mut fidl::encoding::Encoder<'_, D>,
758            offset: usize,
759            _depth: fidl::encoding::Depth,
760        ) -> fidl::Result<()> {
761            encoder.debug_check_bounds::<DeviceGetCurrentVoltageRequest>(offset);
762            unsafe {
763                // Copy the object into the buffer.
764                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
765                (buf_ptr as *mut DeviceGetCurrentVoltageRequest)
766                    .write_unaligned((self as *const DeviceGetCurrentVoltageRequest).read());
767                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
768                // done second because the memcpy will write garbage to these bytes.
769            }
770            Ok(())
771        }
772    }
773    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
774        fidl::encoding::Encode<DeviceGetCurrentVoltageRequest, D> for (T0,)
775    {
776        #[inline]
777        unsafe fn encode(
778            self,
779            encoder: &mut fidl::encoding::Encoder<'_, D>,
780            offset: usize,
781            depth: fidl::encoding::Depth,
782        ) -> fidl::Result<()> {
783            encoder.debug_check_bounds::<DeviceGetCurrentVoltageRequest>(offset);
784            // Zero out padding regions. There's no need to apply masks
785            // because the unmasked parts will be overwritten by fields.
786            // Write the fields.
787            self.0.encode(encoder, offset + 0, depth)?;
788            Ok(())
789        }
790    }
791
792    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
793        for DeviceGetCurrentVoltageRequest
794    {
795        #[inline(always)]
796        fn new_empty() -> Self {
797            Self { index: fidl::new_empty!(u32, D) }
798        }
799
800        #[inline]
801        unsafe fn decode(
802            &mut self,
803            decoder: &mut fidl::encoding::Decoder<'_, D>,
804            offset: usize,
805            _depth: fidl::encoding::Depth,
806        ) -> fidl::Result<()> {
807            decoder.debug_check_bounds::<Self>(offset);
808            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
809            // Verify that padding bytes are zero.
810            // Copy from the buffer into the object.
811            unsafe {
812                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
813            }
814            Ok(())
815        }
816    }
817
818    impl fidl::encoding::ValueTypeMarker for DeviceReadPmicCtrlRegRequest {
819        type Borrowed<'a> = &'a Self;
820        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
821            value
822        }
823    }
824
825    unsafe impl fidl::encoding::TypeMarker for DeviceReadPmicCtrlRegRequest {
826        type Owned = Self;
827
828        #[inline(always)]
829        fn inline_align(_context: fidl::encoding::Context) -> usize {
830            4
831        }
832
833        #[inline(always)]
834        fn inline_size(_context: fidl::encoding::Context) -> usize {
835            4
836        }
837        #[inline(always)]
838        fn encode_is_copy() -> bool {
839            true
840        }
841
842        #[inline(always)]
843        fn decode_is_copy() -> bool {
844            true
845        }
846    }
847
848    unsafe impl<D: fidl::encoding::ResourceDialect>
849        fidl::encoding::Encode<DeviceReadPmicCtrlRegRequest, D> for &DeviceReadPmicCtrlRegRequest
850    {
851        #[inline]
852        unsafe fn encode(
853            self,
854            encoder: &mut fidl::encoding::Encoder<'_, D>,
855            offset: usize,
856            _depth: fidl::encoding::Depth,
857        ) -> fidl::Result<()> {
858            encoder.debug_check_bounds::<DeviceReadPmicCtrlRegRequest>(offset);
859            unsafe {
860                // Copy the object into the buffer.
861                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
862                (buf_ptr as *mut DeviceReadPmicCtrlRegRequest)
863                    .write_unaligned((self as *const DeviceReadPmicCtrlRegRequest).read());
864                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
865                // done second because the memcpy will write garbage to these bytes.
866            }
867            Ok(())
868        }
869    }
870    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
871        fidl::encoding::Encode<DeviceReadPmicCtrlRegRequest, D> for (T0,)
872    {
873        #[inline]
874        unsafe fn encode(
875            self,
876            encoder: &mut fidl::encoding::Encoder<'_, D>,
877            offset: usize,
878            depth: fidl::encoding::Depth,
879        ) -> fidl::Result<()> {
880            encoder.debug_check_bounds::<DeviceReadPmicCtrlRegRequest>(offset);
881            // Zero out padding regions. There's no need to apply masks
882            // because the unmasked parts will be overwritten by fields.
883            // Write the fields.
884            self.0.encode(encoder, offset + 0, depth)?;
885            Ok(())
886        }
887    }
888
889    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
890        for DeviceReadPmicCtrlRegRequest
891    {
892        #[inline(always)]
893        fn new_empty() -> Self {
894            Self { reg_addr: fidl::new_empty!(u32, D) }
895        }
896
897        #[inline]
898        unsafe fn decode(
899            &mut self,
900            decoder: &mut fidl::encoding::Decoder<'_, D>,
901            offset: usize,
902            _depth: fidl::encoding::Depth,
903        ) -> fidl::Result<()> {
904            decoder.debug_check_bounds::<Self>(offset);
905            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
906            // Verify that padding bytes are zero.
907            // Copy from the buffer into the object.
908            unsafe {
909                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
910            }
911            Ok(())
912        }
913    }
914
915    impl fidl::encoding::ValueTypeMarker for DeviceRegisterPowerDomainRequest {
916        type Borrowed<'a> = &'a Self;
917        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
918            value
919        }
920    }
921
922    unsafe impl fidl::encoding::TypeMarker for DeviceRegisterPowerDomainRequest {
923        type Owned = Self;
924
925        #[inline(always)]
926        fn inline_align(_context: fidl::encoding::Context) -> usize {
927            4
928        }
929
930        #[inline(always)]
931        fn inline_size(_context: fidl::encoding::Context) -> usize {
932            8
933        }
934        #[inline(always)]
935        fn encode_is_copy() -> bool {
936            true
937        }
938
939        #[inline(always)]
940        fn decode_is_copy() -> bool {
941            true
942        }
943    }
944
945    unsafe impl<D: fidl::encoding::ResourceDialect>
946        fidl::encoding::Encode<DeviceRegisterPowerDomainRequest, D>
947        for &DeviceRegisterPowerDomainRequest
948    {
949        #[inline]
950        unsafe fn encode(
951            self,
952            encoder: &mut fidl::encoding::Encoder<'_, D>,
953            offset: usize,
954            _depth: fidl::encoding::Depth,
955        ) -> fidl::Result<()> {
956            encoder.debug_check_bounds::<DeviceRegisterPowerDomainRequest>(offset);
957            unsafe {
958                // Copy the object into the buffer.
959                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
960                (buf_ptr as *mut DeviceRegisterPowerDomainRequest)
961                    .write_unaligned((self as *const DeviceRegisterPowerDomainRequest).read());
962                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
963                // done second because the memcpy will write garbage to these bytes.
964            }
965            Ok(())
966        }
967    }
968    unsafe impl<
969        D: fidl::encoding::ResourceDialect,
970        T0: fidl::encoding::Encode<u32, D>,
971        T1: fidl::encoding::Encode<u32, D>,
972    > fidl::encoding::Encode<DeviceRegisterPowerDomainRequest, D> for (T0, T1)
973    {
974        #[inline]
975        unsafe fn encode(
976            self,
977            encoder: &mut fidl::encoding::Encoder<'_, D>,
978            offset: usize,
979            depth: fidl::encoding::Depth,
980        ) -> fidl::Result<()> {
981            encoder.debug_check_bounds::<DeviceRegisterPowerDomainRequest>(offset);
982            // Zero out padding regions. There's no need to apply masks
983            // because the unmasked parts will be overwritten by fields.
984            // Write the fields.
985            self.0.encode(encoder, offset + 0, depth)?;
986            self.1.encode(encoder, offset + 4, depth)?;
987            Ok(())
988        }
989    }
990
991    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
992        for DeviceRegisterPowerDomainRequest
993    {
994        #[inline(always)]
995        fn new_empty() -> Self {
996            Self {
997                min_needed_voltage: fidl::new_empty!(u32, D),
998                max_supported_voltage: fidl::new_empty!(u32, D),
999            }
1000        }
1001
1002        #[inline]
1003        unsafe fn decode(
1004            &mut self,
1005            decoder: &mut fidl::encoding::Decoder<'_, D>,
1006            offset: usize,
1007            _depth: fidl::encoding::Depth,
1008        ) -> fidl::Result<()> {
1009            decoder.debug_check_bounds::<Self>(offset);
1010            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1011            // Verify that padding bytes are zero.
1012            // Copy from the buffer into the object.
1013            unsafe {
1014                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1015            }
1016            Ok(())
1017        }
1018    }
1019
1020    impl fidl::encoding::ValueTypeMarker for DeviceRequestVoltageRequest {
1021        type Borrowed<'a> = &'a Self;
1022        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1023            value
1024        }
1025    }
1026
1027    unsafe impl fidl::encoding::TypeMarker for DeviceRequestVoltageRequest {
1028        type Owned = Self;
1029
1030        #[inline(always)]
1031        fn inline_align(_context: fidl::encoding::Context) -> usize {
1032            4
1033        }
1034
1035        #[inline(always)]
1036        fn inline_size(_context: fidl::encoding::Context) -> usize {
1037            4
1038        }
1039        #[inline(always)]
1040        fn encode_is_copy() -> bool {
1041            true
1042        }
1043
1044        #[inline(always)]
1045        fn decode_is_copy() -> bool {
1046            true
1047        }
1048    }
1049
1050    unsafe impl<D: fidl::encoding::ResourceDialect>
1051        fidl::encoding::Encode<DeviceRequestVoltageRequest, D> for &DeviceRequestVoltageRequest
1052    {
1053        #[inline]
1054        unsafe fn encode(
1055            self,
1056            encoder: &mut fidl::encoding::Encoder<'_, D>,
1057            offset: usize,
1058            _depth: fidl::encoding::Depth,
1059        ) -> fidl::Result<()> {
1060            encoder.debug_check_bounds::<DeviceRequestVoltageRequest>(offset);
1061            unsafe {
1062                // Copy the object into the buffer.
1063                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1064                (buf_ptr as *mut DeviceRequestVoltageRequest)
1065                    .write_unaligned((self as *const DeviceRequestVoltageRequest).read());
1066                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1067                // done second because the memcpy will write garbage to these bytes.
1068            }
1069            Ok(())
1070        }
1071    }
1072    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1073        fidl::encoding::Encode<DeviceRequestVoltageRequest, D> for (T0,)
1074    {
1075        #[inline]
1076        unsafe fn encode(
1077            self,
1078            encoder: &mut fidl::encoding::Encoder<'_, D>,
1079            offset: usize,
1080            depth: fidl::encoding::Depth,
1081        ) -> fidl::Result<()> {
1082            encoder.debug_check_bounds::<DeviceRequestVoltageRequest>(offset);
1083            // Zero out padding regions. There's no need to apply masks
1084            // because the unmasked parts will be overwritten by fields.
1085            // Write the fields.
1086            self.0.encode(encoder, offset + 0, depth)?;
1087            Ok(())
1088        }
1089    }
1090
1091    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1092        for DeviceRequestVoltageRequest
1093    {
1094        #[inline(always)]
1095        fn new_empty() -> Self {
1096            Self { voltage: fidl::new_empty!(u32, D) }
1097        }
1098
1099        #[inline]
1100        unsafe fn decode(
1101            &mut self,
1102            decoder: &mut fidl::encoding::Decoder<'_, D>,
1103            offset: usize,
1104            _depth: fidl::encoding::Depth,
1105        ) -> fidl::Result<()> {
1106            decoder.debug_check_bounds::<Self>(offset);
1107            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1108            // Verify that padding bytes are zero.
1109            // Copy from the buffer into the object.
1110            unsafe {
1111                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1112            }
1113            Ok(())
1114        }
1115    }
1116
1117    impl fidl::encoding::ValueTypeMarker for DeviceWritePmicCtrlRegRequest {
1118        type Borrowed<'a> = &'a Self;
1119        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1120            value
1121        }
1122    }
1123
1124    unsafe impl fidl::encoding::TypeMarker for DeviceWritePmicCtrlRegRequest {
1125        type Owned = Self;
1126
1127        #[inline(always)]
1128        fn inline_align(_context: fidl::encoding::Context) -> usize {
1129            4
1130        }
1131
1132        #[inline(always)]
1133        fn inline_size(_context: fidl::encoding::Context) -> usize {
1134            8
1135        }
1136        #[inline(always)]
1137        fn encode_is_copy() -> bool {
1138            true
1139        }
1140
1141        #[inline(always)]
1142        fn decode_is_copy() -> bool {
1143            true
1144        }
1145    }
1146
1147    unsafe impl<D: fidl::encoding::ResourceDialect>
1148        fidl::encoding::Encode<DeviceWritePmicCtrlRegRequest, D>
1149        for &DeviceWritePmicCtrlRegRequest
1150    {
1151        #[inline]
1152        unsafe fn encode(
1153            self,
1154            encoder: &mut fidl::encoding::Encoder<'_, D>,
1155            offset: usize,
1156            _depth: fidl::encoding::Depth,
1157        ) -> fidl::Result<()> {
1158            encoder.debug_check_bounds::<DeviceWritePmicCtrlRegRequest>(offset);
1159            unsafe {
1160                // Copy the object into the buffer.
1161                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1162                (buf_ptr as *mut DeviceWritePmicCtrlRegRequest)
1163                    .write_unaligned((self as *const DeviceWritePmicCtrlRegRequest).read());
1164                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1165                // done second because the memcpy will write garbage to these bytes.
1166            }
1167            Ok(())
1168        }
1169    }
1170    unsafe impl<
1171        D: fidl::encoding::ResourceDialect,
1172        T0: fidl::encoding::Encode<u32, D>,
1173        T1: fidl::encoding::Encode<u32, D>,
1174    > fidl::encoding::Encode<DeviceWritePmicCtrlRegRequest, D> for (T0, T1)
1175    {
1176        #[inline]
1177        unsafe fn encode(
1178            self,
1179            encoder: &mut fidl::encoding::Encoder<'_, D>,
1180            offset: usize,
1181            depth: fidl::encoding::Depth,
1182        ) -> fidl::Result<()> {
1183            encoder.debug_check_bounds::<DeviceWritePmicCtrlRegRequest>(offset);
1184            // Zero out padding regions. There's no need to apply masks
1185            // because the unmasked parts will be overwritten by fields.
1186            // Write the fields.
1187            self.0.encode(encoder, offset + 0, depth)?;
1188            self.1.encode(encoder, offset + 4, depth)?;
1189            Ok(())
1190        }
1191    }
1192
1193    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1194        for DeviceWritePmicCtrlRegRequest
1195    {
1196        #[inline(always)]
1197        fn new_empty() -> Self {
1198            Self { reg_addr: fidl::new_empty!(u32, D), value: fidl::new_empty!(u32, D) }
1199        }
1200
1201        #[inline]
1202        unsafe fn decode(
1203            &mut self,
1204            decoder: &mut fidl::encoding::Decoder<'_, D>,
1205            offset: usize,
1206            _depth: fidl::encoding::Depth,
1207        ) -> fidl::Result<()> {
1208            decoder.debug_check_bounds::<Self>(offset);
1209            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1210            // Verify that padding bytes are zero.
1211            // Copy from the buffer into the object.
1212            unsafe {
1213                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1214            }
1215            Ok(())
1216        }
1217    }
1218
1219    impl fidl::encoding::ValueTypeMarker for DeviceGetCurrentVoltageResponse {
1220        type Borrowed<'a> = &'a Self;
1221        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1222            value
1223        }
1224    }
1225
1226    unsafe impl fidl::encoding::TypeMarker for DeviceGetCurrentVoltageResponse {
1227        type Owned = Self;
1228
1229        #[inline(always)]
1230        fn inline_align(_context: fidl::encoding::Context) -> usize {
1231            4
1232        }
1233
1234        #[inline(always)]
1235        fn inline_size(_context: fidl::encoding::Context) -> usize {
1236            4
1237        }
1238        #[inline(always)]
1239        fn encode_is_copy() -> bool {
1240            true
1241        }
1242
1243        #[inline(always)]
1244        fn decode_is_copy() -> bool {
1245            true
1246        }
1247    }
1248
1249    unsafe impl<D: fidl::encoding::ResourceDialect>
1250        fidl::encoding::Encode<DeviceGetCurrentVoltageResponse, D>
1251        for &DeviceGetCurrentVoltageResponse
1252    {
1253        #[inline]
1254        unsafe fn encode(
1255            self,
1256            encoder: &mut fidl::encoding::Encoder<'_, D>,
1257            offset: usize,
1258            _depth: fidl::encoding::Depth,
1259        ) -> fidl::Result<()> {
1260            encoder.debug_check_bounds::<DeviceGetCurrentVoltageResponse>(offset);
1261            unsafe {
1262                // Copy the object into the buffer.
1263                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1264                (buf_ptr as *mut DeviceGetCurrentVoltageResponse)
1265                    .write_unaligned((self as *const DeviceGetCurrentVoltageResponse).read());
1266                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1267                // done second because the memcpy will write garbage to these bytes.
1268            }
1269            Ok(())
1270        }
1271    }
1272    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1273        fidl::encoding::Encode<DeviceGetCurrentVoltageResponse, D> for (T0,)
1274    {
1275        #[inline]
1276        unsafe fn encode(
1277            self,
1278            encoder: &mut fidl::encoding::Encoder<'_, D>,
1279            offset: usize,
1280            depth: fidl::encoding::Depth,
1281        ) -> fidl::Result<()> {
1282            encoder.debug_check_bounds::<DeviceGetCurrentVoltageResponse>(offset);
1283            // Zero out padding regions. There's no need to apply masks
1284            // because the unmasked parts will be overwritten by fields.
1285            // Write the fields.
1286            self.0.encode(encoder, offset + 0, depth)?;
1287            Ok(())
1288        }
1289    }
1290
1291    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1292        for DeviceGetCurrentVoltageResponse
1293    {
1294        #[inline(always)]
1295        fn new_empty() -> Self {
1296            Self { current_voltage: fidl::new_empty!(u32, D) }
1297        }
1298
1299        #[inline]
1300        unsafe fn decode(
1301            &mut self,
1302            decoder: &mut fidl::encoding::Decoder<'_, D>,
1303            offset: usize,
1304            _depth: fidl::encoding::Depth,
1305        ) -> fidl::Result<()> {
1306            decoder.debug_check_bounds::<Self>(offset);
1307            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1308            // Verify that padding bytes are zero.
1309            // Copy from the buffer into the object.
1310            unsafe {
1311                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1312            }
1313            Ok(())
1314        }
1315    }
1316
1317    impl fidl::encoding::ValueTypeMarker for DeviceGetPowerDomainStatusResponse {
1318        type Borrowed<'a> = &'a Self;
1319        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1320            value
1321        }
1322    }
1323
1324    unsafe impl fidl::encoding::TypeMarker for DeviceGetPowerDomainStatusResponse {
1325        type Owned = Self;
1326
1327        #[inline(always)]
1328        fn inline_align(_context: fidl::encoding::Context) -> usize {
1329            1
1330        }
1331
1332        #[inline(always)]
1333        fn inline_size(_context: fidl::encoding::Context) -> usize {
1334            1
1335        }
1336    }
1337
1338    unsafe impl<D: fidl::encoding::ResourceDialect>
1339        fidl::encoding::Encode<DeviceGetPowerDomainStatusResponse, D>
1340        for &DeviceGetPowerDomainStatusResponse
1341    {
1342        #[inline]
1343        unsafe fn encode(
1344            self,
1345            encoder: &mut fidl::encoding::Encoder<'_, D>,
1346            offset: usize,
1347            _depth: fidl::encoding::Depth,
1348        ) -> fidl::Result<()> {
1349            encoder.debug_check_bounds::<DeviceGetPowerDomainStatusResponse>(offset);
1350            // Delegate to tuple encoding.
1351            fidl::encoding::Encode::<DeviceGetPowerDomainStatusResponse, D>::encode(
1352                (<PowerDomainStatus as fidl::encoding::ValueTypeMarker>::borrow(&self.status),),
1353                encoder,
1354                offset,
1355                _depth,
1356            )
1357        }
1358    }
1359    unsafe impl<
1360        D: fidl::encoding::ResourceDialect,
1361        T0: fidl::encoding::Encode<PowerDomainStatus, D>,
1362    > fidl::encoding::Encode<DeviceGetPowerDomainStatusResponse, D> for (T0,)
1363    {
1364        #[inline]
1365        unsafe fn encode(
1366            self,
1367            encoder: &mut fidl::encoding::Encoder<'_, D>,
1368            offset: usize,
1369            depth: fidl::encoding::Depth,
1370        ) -> fidl::Result<()> {
1371            encoder.debug_check_bounds::<DeviceGetPowerDomainStatusResponse>(offset);
1372            // Zero out padding regions. There's no need to apply masks
1373            // because the unmasked parts will be overwritten by fields.
1374            // Write the fields.
1375            self.0.encode(encoder, offset + 0, depth)?;
1376            Ok(())
1377        }
1378    }
1379
1380    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1381        for DeviceGetPowerDomainStatusResponse
1382    {
1383        #[inline(always)]
1384        fn new_empty() -> Self {
1385            Self { status: fidl::new_empty!(PowerDomainStatus, D) }
1386        }
1387
1388        #[inline]
1389        unsafe fn decode(
1390            &mut self,
1391            decoder: &mut fidl::encoding::Decoder<'_, D>,
1392            offset: usize,
1393            _depth: fidl::encoding::Depth,
1394        ) -> fidl::Result<()> {
1395            decoder.debug_check_bounds::<Self>(offset);
1396            // Verify that padding bytes are zero.
1397            fidl::decode!(PowerDomainStatus, D, &mut self.status, decoder, offset + 0, _depth)?;
1398            Ok(())
1399        }
1400    }
1401
1402    impl fidl::encoding::ValueTypeMarker for DeviceGetSupportedVoltageRangeResponse {
1403        type Borrowed<'a> = &'a Self;
1404        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1405            value
1406        }
1407    }
1408
1409    unsafe impl fidl::encoding::TypeMarker for DeviceGetSupportedVoltageRangeResponse {
1410        type Owned = Self;
1411
1412        #[inline(always)]
1413        fn inline_align(_context: fidl::encoding::Context) -> usize {
1414            4
1415        }
1416
1417        #[inline(always)]
1418        fn inline_size(_context: fidl::encoding::Context) -> usize {
1419            8
1420        }
1421        #[inline(always)]
1422        fn encode_is_copy() -> bool {
1423            true
1424        }
1425
1426        #[inline(always)]
1427        fn decode_is_copy() -> bool {
1428            true
1429        }
1430    }
1431
1432    unsafe impl<D: fidl::encoding::ResourceDialect>
1433        fidl::encoding::Encode<DeviceGetSupportedVoltageRangeResponse, D>
1434        for &DeviceGetSupportedVoltageRangeResponse
1435    {
1436        #[inline]
1437        unsafe fn encode(
1438            self,
1439            encoder: &mut fidl::encoding::Encoder<'_, D>,
1440            offset: usize,
1441            _depth: fidl::encoding::Depth,
1442        ) -> fidl::Result<()> {
1443            encoder.debug_check_bounds::<DeviceGetSupportedVoltageRangeResponse>(offset);
1444            unsafe {
1445                // Copy the object into the buffer.
1446                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1447                (buf_ptr as *mut DeviceGetSupportedVoltageRangeResponse).write_unaligned(
1448                    (self as *const DeviceGetSupportedVoltageRangeResponse).read(),
1449                );
1450                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1451                // done second because the memcpy will write garbage to these bytes.
1452            }
1453            Ok(())
1454        }
1455    }
1456    unsafe impl<
1457        D: fidl::encoding::ResourceDialect,
1458        T0: fidl::encoding::Encode<u32, D>,
1459        T1: fidl::encoding::Encode<u32, D>,
1460    > fidl::encoding::Encode<DeviceGetSupportedVoltageRangeResponse, D> for (T0, T1)
1461    {
1462        #[inline]
1463        unsafe fn encode(
1464            self,
1465            encoder: &mut fidl::encoding::Encoder<'_, D>,
1466            offset: usize,
1467            depth: fidl::encoding::Depth,
1468        ) -> fidl::Result<()> {
1469            encoder.debug_check_bounds::<DeviceGetSupportedVoltageRangeResponse>(offset);
1470            // Zero out padding regions. There's no need to apply masks
1471            // because the unmasked parts will be overwritten by fields.
1472            // Write the fields.
1473            self.0.encode(encoder, offset + 0, depth)?;
1474            self.1.encode(encoder, offset + 4, depth)?;
1475            Ok(())
1476        }
1477    }
1478
1479    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1480        for DeviceGetSupportedVoltageRangeResponse
1481    {
1482        #[inline(always)]
1483        fn new_empty() -> Self {
1484            Self { min: fidl::new_empty!(u32, D), max: fidl::new_empty!(u32, D) }
1485        }
1486
1487        #[inline]
1488        unsafe fn decode(
1489            &mut self,
1490            decoder: &mut fidl::encoding::Decoder<'_, D>,
1491            offset: usize,
1492            _depth: fidl::encoding::Depth,
1493        ) -> fidl::Result<()> {
1494            decoder.debug_check_bounds::<Self>(offset);
1495            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1496            // Verify that padding bytes are zero.
1497            // Copy from the buffer into the object.
1498            unsafe {
1499                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1500            }
1501            Ok(())
1502        }
1503    }
1504
1505    impl fidl::encoding::ValueTypeMarker for DeviceReadPmicCtrlRegResponse {
1506        type Borrowed<'a> = &'a Self;
1507        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1508            value
1509        }
1510    }
1511
1512    unsafe impl fidl::encoding::TypeMarker for DeviceReadPmicCtrlRegResponse {
1513        type Owned = Self;
1514
1515        #[inline(always)]
1516        fn inline_align(_context: fidl::encoding::Context) -> usize {
1517            4
1518        }
1519
1520        #[inline(always)]
1521        fn inline_size(_context: fidl::encoding::Context) -> usize {
1522            4
1523        }
1524        #[inline(always)]
1525        fn encode_is_copy() -> bool {
1526            true
1527        }
1528
1529        #[inline(always)]
1530        fn decode_is_copy() -> bool {
1531            true
1532        }
1533    }
1534
1535    unsafe impl<D: fidl::encoding::ResourceDialect>
1536        fidl::encoding::Encode<DeviceReadPmicCtrlRegResponse, D>
1537        for &DeviceReadPmicCtrlRegResponse
1538    {
1539        #[inline]
1540        unsafe fn encode(
1541            self,
1542            encoder: &mut fidl::encoding::Encoder<'_, D>,
1543            offset: usize,
1544            _depth: fidl::encoding::Depth,
1545        ) -> fidl::Result<()> {
1546            encoder.debug_check_bounds::<DeviceReadPmicCtrlRegResponse>(offset);
1547            unsafe {
1548                // Copy the object into the buffer.
1549                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1550                (buf_ptr as *mut DeviceReadPmicCtrlRegResponse)
1551                    .write_unaligned((self as *const DeviceReadPmicCtrlRegResponse).read());
1552                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1553                // done second because the memcpy will write garbage to these bytes.
1554            }
1555            Ok(())
1556        }
1557    }
1558    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1559        fidl::encoding::Encode<DeviceReadPmicCtrlRegResponse, D> for (T0,)
1560    {
1561        #[inline]
1562        unsafe fn encode(
1563            self,
1564            encoder: &mut fidl::encoding::Encoder<'_, D>,
1565            offset: usize,
1566            depth: fidl::encoding::Depth,
1567        ) -> fidl::Result<()> {
1568            encoder.debug_check_bounds::<DeviceReadPmicCtrlRegResponse>(offset);
1569            // Zero out padding regions. There's no need to apply masks
1570            // because the unmasked parts will be overwritten by fields.
1571            // Write the fields.
1572            self.0.encode(encoder, offset + 0, depth)?;
1573            Ok(())
1574        }
1575    }
1576
1577    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1578        for DeviceReadPmicCtrlRegResponse
1579    {
1580        #[inline(always)]
1581        fn new_empty() -> Self {
1582            Self { value: fidl::new_empty!(u32, D) }
1583        }
1584
1585        #[inline]
1586        unsafe fn decode(
1587            &mut self,
1588            decoder: &mut fidl::encoding::Decoder<'_, D>,
1589            offset: usize,
1590            _depth: fidl::encoding::Depth,
1591        ) -> fidl::Result<()> {
1592            decoder.debug_check_bounds::<Self>(offset);
1593            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1594            // Verify that padding bytes are zero.
1595            // Copy from the buffer into the object.
1596            unsafe {
1597                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1598            }
1599            Ok(())
1600        }
1601    }
1602
1603    impl fidl::encoding::ValueTypeMarker for DeviceRequestVoltageResponse {
1604        type Borrowed<'a> = &'a Self;
1605        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1606            value
1607        }
1608    }
1609
1610    unsafe impl fidl::encoding::TypeMarker for DeviceRequestVoltageResponse {
1611        type Owned = Self;
1612
1613        #[inline(always)]
1614        fn inline_align(_context: fidl::encoding::Context) -> usize {
1615            4
1616        }
1617
1618        #[inline(always)]
1619        fn inline_size(_context: fidl::encoding::Context) -> usize {
1620            4
1621        }
1622        #[inline(always)]
1623        fn encode_is_copy() -> bool {
1624            true
1625        }
1626
1627        #[inline(always)]
1628        fn decode_is_copy() -> bool {
1629            true
1630        }
1631    }
1632
1633    unsafe impl<D: fidl::encoding::ResourceDialect>
1634        fidl::encoding::Encode<DeviceRequestVoltageResponse, D> for &DeviceRequestVoltageResponse
1635    {
1636        #[inline]
1637        unsafe fn encode(
1638            self,
1639            encoder: &mut fidl::encoding::Encoder<'_, D>,
1640            offset: usize,
1641            _depth: fidl::encoding::Depth,
1642        ) -> fidl::Result<()> {
1643            encoder.debug_check_bounds::<DeviceRequestVoltageResponse>(offset);
1644            unsafe {
1645                // Copy the object into the buffer.
1646                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1647                (buf_ptr as *mut DeviceRequestVoltageResponse)
1648                    .write_unaligned((self as *const DeviceRequestVoltageResponse).read());
1649                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1650                // done second because the memcpy will write garbage to these bytes.
1651            }
1652            Ok(())
1653        }
1654    }
1655    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1656        fidl::encoding::Encode<DeviceRequestVoltageResponse, D> for (T0,)
1657    {
1658        #[inline]
1659        unsafe fn encode(
1660            self,
1661            encoder: &mut fidl::encoding::Encoder<'_, D>,
1662            offset: usize,
1663            depth: fidl::encoding::Depth,
1664        ) -> fidl::Result<()> {
1665            encoder.debug_check_bounds::<DeviceRequestVoltageResponse>(offset);
1666            // Zero out padding regions. There's no need to apply masks
1667            // because the unmasked parts will be overwritten by fields.
1668            // Write the fields.
1669            self.0.encode(encoder, offset + 0, depth)?;
1670            Ok(())
1671        }
1672    }
1673
1674    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1675        for DeviceRequestVoltageResponse
1676    {
1677        #[inline(always)]
1678        fn new_empty() -> Self {
1679            Self { actual_voltage: fidl::new_empty!(u32, D) }
1680        }
1681
1682        #[inline]
1683        unsafe fn decode(
1684            &mut self,
1685            decoder: &mut fidl::encoding::Decoder<'_, D>,
1686            offset: usize,
1687            _depth: fidl::encoding::Depth,
1688        ) -> fidl::Result<()> {
1689            decoder.debug_check_bounds::<Self>(offset);
1690            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1691            // Verify that padding bytes are zero.
1692            // Copy from the buffer into the object.
1693            unsafe {
1694                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1695            }
1696            Ok(())
1697        }
1698    }
1699
1700    impl Domain {
1701        #[inline(always)]
1702        fn max_ordinal_present(&self) -> u64 {
1703            if let Some(_) = self.id {
1704                return 1;
1705            }
1706            0
1707        }
1708    }
1709
1710    impl fidl::encoding::ValueTypeMarker for Domain {
1711        type Borrowed<'a> = &'a Self;
1712        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1713            value
1714        }
1715    }
1716
1717    unsafe impl fidl::encoding::TypeMarker for Domain {
1718        type Owned = Self;
1719
1720        #[inline(always)]
1721        fn inline_align(_context: fidl::encoding::Context) -> usize {
1722            8
1723        }
1724
1725        #[inline(always)]
1726        fn inline_size(_context: fidl::encoding::Context) -> usize {
1727            16
1728        }
1729    }
1730
1731    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Domain, D> for &Domain {
1732        unsafe fn encode(
1733            self,
1734            encoder: &mut fidl::encoding::Encoder<'_, D>,
1735            offset: usize,
1736            mut depth: fidl::encoding::Depth,
1737        ) -> fidl::Result<()> {
1738            encoder.debug_check_bounds::<Domain>(offset);
1739            // Vector header
1740            let max_ordinal: u64 = self.max_ordinal_present();
1741            encoder.write_num(max_ordinal, offset);
1742            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1743            // Calling encoder.out_of_line_offset(0) is not allowed.
1744            if max_ordinal == 0 {
1745                return Ok(());
1746            }
1747            depth.increment()?;
1748            let envelope_size = 8;
1749            let bytes_len = max_ordinal as usize * envelope_size;
1750            #[allow(unused_variables)]
1751            let offset = encoder.out_of_line_offset(bytes_len);
1752            let mut _prev_end_offset: usize = 0;
1753            if 1 > max_ordinal {
1754                return Ok(());
1755            }
1756
1757            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1758            // are envelope_size bytes.
1759            let cur_offset: usize = (1 - 1) * envelope_size;
1760
1761            // Zero reserved fields.
1762            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1763
1764            // Safety:
1765            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1766            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1767            //   envelope_size bytes, there is always sufficient room.
1768            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1769                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1770                encoder,
1771                offset + cur_offset,
1772                depth,
1773            )?;
1774
1775            _prev_end_offset = cur_offset + envelope_size;
1776
1777            Ok(())
1778        }
1779    }
1780
1781    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Domain {
1782        #[inline(always)]
1783        fn new_empty() -> Self {
1784            Self::default()
1785        }
1786
1787        unsafe fn decode(
1788            &mut self,
1789            decoder: &mut fidl::encoding::Decoder<'_, D>,
1790            offset: usize,
1791            mut depth: fidl::encoding::Depth,
1792        ) -> fidl::Result<()> {
1793            decoder.debug_check_bounds::<Self>(offset);
1794            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1795                None => return Err(fidl::Error::NotNullable),
1796                Some(len) => len,
1797            };
1798            // Calling decoder.out_of_line_offset(0) is not allowed.
1799            if len == 0 {
1800                return Ok(());
1801            };
1802            depth.increment()?;
1803            let envelope_size = 8;
1804            let bytes_len = len * envelope_size;
1805            let offset = decoder.out_of_line_offset(bytes_len)?;
1806            // Decode the envelope for each type.
1807            let mut _next_ordinal_to_read = 0;
1808            let mut next_offset = offset;
1809            let end_offset = offset + bytes_len;
1810            _next_ordinal_to_read += 1;
1811            if next_offset >= end_offset {
1812                return Ok(());
1813            }
1814
1815            // Decode unknown envelopes for gaps in ordinals.
1816            while _next_ordinal_to_read < 1 {
1817                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1818                _next_ordinal_to_read += 1;
1819                next_offset += envelope_size;
1820            }
1821
1822            let next_out_of_line = decoder.next_out_of_line();
1823            let handles_before = decoder.remaining_handles();
1824            if let Some((inlined, num_bytes, num_handles)) =
1825                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1826            {
1827                let member_inline_size =
1828                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1829                if inlined != (member_inline_size <= 4) {
1830                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1831                }
1832                let inner_offset;
1833                let mut inner_depth = depth.clone();
1834                if inlined {
1835                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1836                    inner_offset = next_offset;
1837                } else {
1838                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1839                    inner_depth.increment()?;
1840                }
1841                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1842                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1843                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1844                {
1845                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1846                }
1847                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1848                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1849                }
1850            }
1851
1852            next_offset += envelope_size;
1853
1854            // Decode the remaining unknown envelopes.
1855            while next_offset < end_offset {
1856                _next_ordinal_to_read += 1;
1857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1858                next_offset += envelope_size;
1859            }
1860
1861            Ok(())
1862        }
1863    }
1864
1865    impl DomainMetadata {
1866        #[inline(always)]
1867        fn max_ordinal_present(&self) -> u64 {
1868            if let Some(_) = self.domains {
1869                return 1;
1870            }
1871            0
1872        }
1873    }
1874
1875    impl fidl::encoding::ValueTypeMarker for DomainMetadata {
1876        type Borrowed<'a> = &'a Self;
1877        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1878            value
1879        }
1880    }
1881
1882    unsafe impl fidl::encoding::TypeMarker for DomainMetadata {
1883        type Owned = Self;
1884
1885        #[inline(always)]
1886        fn inline_align(_context: fidl::encoding::Context) -> usize {
1887            8
1888        }
1889
1890        #[inline(always)]
1891        fn inline_size(_context: fidl::encoding::Context) -> usize {
1892            16
1893        }
1894    }
1895
1896    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DomainMetadata, D>
1897        for &DomainMetadata
1898    {
1899        unsafe fn encode(
1900            self,
1901            encoder: &mut fidl::encoding::Encoder<'_, D>,
1902            offset: usize,
1903            mut depth: fidl::encoding::Depth,
1904        ) -> fidl::Result<()> {
1905            encoder.debug_check_bounds::<DomainMetadata>(offset);
1906            // Vector header
1907            let max_ordinal: u64 = self.max_ordinal_present();
1908            encoder.write_num(max_ordinal, offset);
1909            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1910            // Calling encoder.out_of_line_offset(0) is not allowed.
1911            if max_ordinal == 0 {
1912                return Ok(());
1913            }
1914            depth.increment()?;
1915            let envelope_size = 8;
1916            let bytes_len = max_ordinal as usize * envelope_size;
1917            #[allow(unused_variables)]
1918            let offset = encoder.out_of_line_offset(bytes_len);
1919            let mut _prev_end_offset: usize = 0;
1920            if 1 > max_ordinal {
1921                return Ok(());
1922            }
1923
1924            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1925            // are envelope_size bytes.
1926            let cur_offset: usize = (1 - 1) * envelope_size;
1927
1928            // Zero reserved fields.
1929            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1930
1931            // Safety:
1932            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1933            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1934            //   envelope_size bytes, there is always sufficient room.
1935            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Domain>, D>(
1936            self.domains.as_ref().map(<fidl::encoding::UnboundedVector<Domain> as fidl::encoding::ValueTypeMarker>::borrow),
1937            encoder, offset + cur_offset, depth
1938        )?;
1939
1940            _prev_end_offset = cur_offset + envelope_size;
1941
1942            Ok(())
1943        }
1944    }
1945
1946    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DomainMetadata {
1947        #[inline(always)]
1948        fn new_empty() -> Self {
1949            Self::default()
1950        }
1951
1952        unsafe fn decode(
1953            &mut self,
1954            decoder: &mut fidl::encoding::Decoder<'_, D>,
1955            offset: usize,
1956            mut depth: fidl::encoding::Depth,
1957        ) -> fidl::Result<()> {
1958            decoder.debug_check_bounds::<Self>(offset);
1959            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1960                None => return Err(fidl::Error::NotNullable),
1961                Some(len) => len,
1962            };
1963            // Calling decoder.out_of_line_offset(0) is not allowed.
1964            if len == 0 {
1965                return Ok(());
1966            };
1967            depth.increment()?;
1968            let envelope_size = 8;
1969            let bytes_len = len * envelope_size;
1970            let offset = decoder.out_of_line_offset(bytes_len)?;
1971            // Decode the envelope for each type.
1972            let mut _next_ordinal_to_read = 0;
1973            let mut next_offset = offset;
1974            let end_offset = offset + bytes_len;
1975            _next_ordinal_to_read += 1;
1976            if next_offset >= end_offset {
1977                return Ok(());
1978            }
1979
1980            // Decode unknown envelopes for gaps in ordinals.
1981            while _next_ordinal_to_read < 1 {
1982                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1983                _next_ordinal_to_read += 1;
1984                next_offset += envelope_size;
1985            }
1986
1987            let next_out_of_line = decoder.next_out_of_line();
1988            let handles_before = decoder.remaining_handles();
1989            if let Some((inlined, num_bytes, num_handles)) =
1990                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1991            {
1992                let member_inline_size = <fidl::encoding::UnboundedVector<Domain> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1993                if inlined != (member_inline_size <= 4) {
1994                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1995                }
1996                let inner_offset;
1997                let mut inner_depth = depth.clone();
1998                if inlined {
1999                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2000                    inner_offset = next_offset;
2001                } else {
2002                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2003                    inner_depth.increment()?;
2004                }
2005                let val_ref = self.domains.get_or_insert_with(|| {
2006                    fidl::new_empty!(fidl::encoding::UnboundedVector<Domain>, D)
2007                });
2008                fidl::decode!(
2009                    fidl::encoding::UnboundedVector<Domain>,
2010                    D,
2011                    val_ref,
2012                    decoder,
2013                    inner_offset,
2014                    inner_depth
2015                )?;
2016                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2017                {
2018                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2019                }
2020                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2021                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2022                }
2023            }
2024
2025            next_offset += envelope_size;
2026
2027            // Decode the remaining unknown envelopes.
2028            while next_offset < end_offset {
2029                _next_ordinal_to_read += 1;
2030                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2031                next_offset += envelope_size;
2032            }
2033
2034            Ok(())
2035        }
2036    }
2037
2038    impl LevelTuple {
2039        #[inline(always)]
2040        fn max_ordinal_present(&self) -> u64 {
2041            if let Some(_) = self.parent_level {
2042                return 2;
2043            }
2044            if let Some(_) = self.child_level {
2045                return 1;
2046            }
2047            0
2048        }
2049    }
2050
2051    impl fidl::encoding::ValueTypeMarker for LevelTuple {
2052        type Borrowed<'a> = &'a Self;
2053        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2054            value
2055        }
2056    }
2057
2058    unsafe impl fidl::encoding::TypeMarker for LevelTuple {
2059        type Owned = Self;
2060
2061        #[inline(always)]
2062        fn inline_align(_context: fidl::encoding::Context) -> usize {
2063            8
2064        }
2065
2066        #[inline(always)]
2067        fn inline_size(_context: fidl::encoding::Context) -> usize {
2068            16
2069        }
2070    }
2071
2072    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LevelTuple, D>
2073        for &LevelTuple
2074    {
2075        unsafe fn encode(
2076            self,
2077            encoder: &mut fidl::encoding::Encoder<'_, D>,
2078            offset: usize,
2079            mut depth: fidl::encoding::Depth,
2080        ) -> fidl::Result<()> {
2081            encoder.debug_check_bounds::<LevelTuple>(offset);
2082            // Vector header
2083            let max_ordinal: u64 = self.max_ordinal_present();
2084            encoder.write_num(max_ordinal, offset);
2085            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2086            // Calling encoder.out_of_line_offset(0) is not allowed.
2087            if max_ordinal == 0 {
2088                return Ok(());
2089            }
2090            depth.increment()?;
2091            let envelope_size = 8;
2092            let bytes_len = max_ordinal as usize * envelope_size;
2093            #[allow(unused_variables)]
2094            let offset = encoder.out_of_line_offset(bytes_len);
2095            let mut _prev_end_offset: usize = 0;
2096            if 1 > max_ordinal {
2097                return Ok(());
2098            }
2099
2100            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2101            // are envelope_size bytes.
2102            let cur_offset: usize = (1 - 1) * envelope_size;
2103
2104            // Zero reserved fields.
2105            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2106
2107            // Safety:
2108            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2109            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2110            //   envelope_size bytes, there is always sufficient room.
2111            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2112                self.child_level.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2113                encoder,
2114                offset + cur_offset,
2115                depth,
2116            )?;
2117
2118            _prev_end_offset = cur_offset + envelope_size;
2119            if 2 > max_ordinal {
2120                return Ok(());
2121            }
2122
2123            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2124            // are envelope_size bytes.
2125            let cur_offset: usize = (2 - 1) * envelope_size;
2126
2127            // Zero reserved fields.
2128            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2129
2130            // Safety:
2131            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2132            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2133            //   envelope_size bytes, there is always sufficient room.
2134            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2135                self.parent_level.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2136                encoder,
2137                offset + cur_offset,
2138                depth,
2139            )?;
2140
2141            _prev_end_offset = cur_offset + envelope_size;
2142
2143            Ok(())
2144        }
2145    }
2146
2147    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LevelTuple {
2148        #[inline(always)]
2149        fn new_empty() -> Self {
2150            Self::default()
2151        }
2152
2153        unsafe fn decode(
2154            &mut self,
2155            decoder: &mut fidl::encoding::Decoder<'_, D>,
2156            offset: usize,
2157            mut depth: fidl::encoding::Depth,
2158        ) -> fidl::Result<()> {
2159            decoder.debug_check_bounds::<Self>(offset);
2160            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2161                None => return Err(fidl::Error::NotNullable),
2162                Some(len) => len,
2163            };
2164            // Calling decoder.out_of_line_offset(0) is not allowed.
2165            if len == 0 {
2166                return Ok(());
2167            };
2168            depth.increment()?;
2169            let envelope_size = 8;
2170            let bytes_len = len * envelope_size;
2171            let offset = decoder.out_of_line_offset(bytes_len)?;
2172            // Decode the envelope for each type.
2173            let mut _next_ordinal_to_read = 0;
2174            let mut next_offset = offset;
2175            let end_offset = offset + bytes_len;
2176            _next_ordinal_to_read += 1;
2177            if next_offset >= end_offset {
2178                return Ok(());
2179            }
2180
2181            // Decode unknown envelopes for gaps in ordinals.
2182            while _next_ordinal_to_read < 1 {
2183                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2184                _next_ordinal_to_read += 1;
2185                next_offset += envelope_size;
2186            }
2187
2188            let next_out_of_line = decoder.next_out_of_line();
2189            let handles_before = decoder.remaining_handles();
2190            if let Some((inlined, num_bytes, num_handles)) =
2191                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2192            {
2193                let member_inline_size =
2194                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2195                if inlined != (member_inline_size <= 4) {
2196                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2197                }
2198                let inner_offset;
2199                let mut inner_depth = depth.clone();
2200                if inlined {
2201                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2202                    inner_offset = next_offset;
2203                } else {
2204                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2205                    inner_depth.increment()?;
2206                }
2207                let val_ref = self.child_level.get_or_insert_with(|| fidl::new_empty!(u8, D));
2208                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2209                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2210                {
2211                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2212                }
2213                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2214                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2215                }
2216            }
2217
2218            next_offset += envelope_size;
2219            _next_ordinal_to_read += 1;
2220            if next_offset >= end_offset {
2221                return Ok(());
2222            }
2223
2224            // Decode unknown envelopes for gaps in ordinals.
2225            while _next_ordinal_to_read < 2 {
2226                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2227                _next_ordinal_to_read += 1;
2228                next_offset += envelope_size;
2229            }
2230
2231            let next_out_of_line = decoder.next_out_of_line();
2232            let handles_before = decoder.remaining_handles();
2233            if let Some((inlined, num_bytes, num_handles)) =
2234                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2235            {
2236                let member_inline_size =
2237                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2238                if inlined != (member_inline_size <= 4) {
2239                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2240                }
2241                let inner_offset;
2242                let mut inner_depth = depth.clone();
2243                if inlined {
2244                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2245                    inner_offset = next_offset;
2246                } else {
2247                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2248                    inner_depth.increment()?;
2249                }
2250                let val_ref = self.parent_level.get_or_insert_with(|| fidl::new_empty!(u8, D));
2251                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2252                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2253                {
2254                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2255                }
2256                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2257                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2258                }
2259            }
2260
2261            next_offset += envelope_size;
2262
2263            // Decode the remaining unknown envelopes.
2264            while next_offset < end_offset {
2265                _next_ordinal_to_read += 1;
2266                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2267                next_offset += envelope_size;
2268            }
2269
2270            Ok(())
2271        }
2272    }
2273
2274    impl PowerDependency {
2275        #[inline(always)]
2276        fn max_ordinal_present(&self) -> u64 {
2277            if let Some(_) = self.level_deps {
2278                return 3;
2279            }
2280            if let Some(_) = self.parent {
2281                return 2;
2282            }
2283            if let Some(_) = self.child {
2284                return 1;
2285            }
2286            0
2287        }
2288    }
2289
2290    impl fidl::encoding::ValueTypeMarker for PowerDependency {
2291        type Borrowed<'a> = &'a Self;
2292        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2293            value
2294        }
2295    }
2296
2297    unsafe impl fidl::encoding::TypeMarker for PowerDependency {
2298        type Owned = Self;
2299
2300        #[inline(always)]
2301        fn inline_align(_context: fidl::encoding::Context) -> usize {
2302            8
2303        }
2304
2305        #[inline(always)]
2306        fn inline_size(_context: fidl::encoding::Context) -> usize {
2307            16
2308        }
2309    }
2310
2311    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PowerDependency, D>
2312        for &PowerDependency
2313    {
2314        unsafe fn encode(
2315            self,
2316            encoder: &mut fidl::encoding::Encoder<'_, D>,
2317            offset: usize,
2318            mut depth: fidl::encoding::Depth,
2319        ) -> fidl::Result<()> {
2320            encoder.debug_check_bounds::<PowerDependency>(offset);
2321            // Vector header
2322            let max_ordinal: u64 = self.max_ordinal_present();
2323            encoder.write_num(max_ordinal, offset);
2324            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2325            // Calling encoder.out_of_line_offset(0) is not allowed.
2326            if max_ordinal == 0 {
2327                return Ok(());
2328            }
2329            depth.increment()?;
2330            let envelope_size = 8;
2331            let bytes_len = max_ordinal as usize * envelope_size;
2332            #[allow(unused_variables)]
2333            let offset = encoder.out_of_line_offset(bytes_len);
2334            let mut _prev_end_offset: usize = 0;
2335            if 1 > max_ordinal {
2336                return Ok(());
2337            }
2338
2339            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2340            // are envelope_size bytes.
2341            let cur_offset: usize = (1 - 1) * envelope_size;
2342
2343            // Zero reserved fields.
2344            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2345
2346            // Safety:
2347            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2348            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2349            //   envelope_size bytes, there is always sufficient room.
2350            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<63>, D>(
2351                self.child.as_ref().map(
2352                    <fidl::encoding::BoundedString<63> as fidl::encoding::ValueTypeMarker>::borrow,
2353                ),
2354                encoder,
2355                offset + cur_offset,
2356                depth,
2357            )?;
2358
2359            _prev_end_offset = cur_offset + envelope_size;
2360            if 2 > max_ordinal {
2361                return Ok(());
2362            }
2363
2364            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2365            // are envelope_size bytes.
2366            let cur_offset: usize = (2 - 1) * envelope_size;
2367
2368            // Zero reserved fields.
2369            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2370
2371            // Safety:
2372            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2373            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2374            //   envelope_size bytes, there is always sufficient room.
2375            fidl::encoding::encode_in_envelope_optional::<ParentElement, D>(
2376                self.parent
2377                    .as_ref()
2378                    .map(<ParentElement as fidl::encoding::ValueTypeMarker>::borrow),
2379                encoder,
2380                offset + cur_offset,
2381                depth,
2382            )?;
2383
2384            _prev_end_offset = cur_offset + envelope_size;
2385            if 3 > max_ordinal {
2386                return Ok(());
2387            }
2388
2389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2390            // are envelope_size bytes.
2391            let cur_offset: usize = (3 - 1) * envelope_size;
2392
2393            // Zero reserved fields.
2394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2395
2396            // Safety:
2397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2399            //   envelope_size bytes, there is always sufficient room.
2400            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<LevelTuple, 128>, D>(
2401            self.level_deps.as_ref().map(<fidl::encoding::Vector<LevelTuple, 128> as fidl::encoding::ValueTypeMarker>::borrow),
2402            encoder, offset + cur_offset, depth
2403        )?;
2404
2405            _prev_end_offset = cur_offset + envelope_size;
2406
2407            Ok(())
2408        }
2409    }
2410
2411    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerDependency {
2412        #[inline(always)]
2413        fn new_empty() -> Self {
2414            Self::default()
2415        }
2416
2417        unsafe fn decode(
2418            &mut self,
2419            decoder: &mut fidl::encoding::Decoder<'_, D>,
2420            offset: usize,
2421            mut depth: fidl::encoding::Depth,
2422        ) -> fidl::Result<()> {
2423            decoder.debug_check_bounds::<Self>(offset);
2424            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2425                None => return Err(fidl::Error::NotNullable),
2426                Some(len) => len,
2427            };
2428            // Calling decoder.out_of_line_offset(0) is not allowed.
2429            if len == 0 {
2430                return Ok(());
2431            };
2432            depth.increment()?;
2433            let envelope_size = 8;
2434            let bytes_len = len * envelope_size;
2435            let offset = decoder.out_of_line_offset(bytes_len)?;
2436            // Decode the envelope for each type.
2437            let mut _next_ordinal_to_read = 0;
2438            let mut next_offset = offset;
2439            let end_offset = offset + bytes_len;
2440            _next_ordinal_to_read += 1;
2441            if next_offset >= end_offset {
2442                return Ok(());
2443            }
2444
2445            // Decode unknown envelopes for gaps in ordinals.
2446            while _next_ordinal_to_read < 1 {
2447                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2448                _next_ordinal_to_read += 1;
2449                next_offset += envelope_size;
2450            }
2451
2452            let next_out_of_line = decoder.next_out_of_line();
2453            let handles_before = decoder.remaining_handles();
2454            if let Some((inlined, num_bytes, num_handles)) =
2455                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2456            {
2457                let member_inline_size =
2458                    <fidl::encoding::BoundedString<63> as fidl::encoding::TypeMarker>::inline_size(
2459                        decoder.context,
2460                    );
2461                if inlined != (member_inline_size <= 4) {
2462                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2463                }
2464                let inner_offset;
2465                let mut inner_depth = depth.clone();
2466                if inlined {
2467                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2468                    inner_offset = next_offset;
2469                } else {
2470                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2471                    inner_depth.increment()?;
2472                }
2473                let val_ref = self
2474                    .child
2475                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<63>, D));
2476                fidl::decode!(
2477                    fidl::encoding::BoundedString<63>,
2478                    D,
2479                    val_ref,
2480                    decoder,
2481                    inner_offset,
2482                    inner_depth
2483                )?;
2484                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2485                {
2486                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2487                }
2488                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2489                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2490                }
2491            }
2492
2493            next_offset += envelope_size;
2494            _next_ordinal_to_read += 1;
2495            if next_offset >= end_offset {
2496                return Ok(());
2497            }
2498
2499            // Decode unknown envelopes for gaps in ordinals.
2500            while _next_ordinal_to_read < 2 {
2501                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2502                _next_ordinal_to_read += 1;
2503                next_offset += envelope_size;
2504            }
2505
2506            let next_out_of_line = decoder.next_out_of_line();
2507            let handles_before = decoder.remaining_handles();
2508            if let Some((inlined, num_bytes, num_handles)) =
2509                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2510            {
2511                let member_inline_size =
2512                    <ParentElement as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2513                if inlined != (member_inline_size <= 4) {
2514                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2515                }
2516                let inner_offset;
2517                let mut inner_depth = depth.clone();
2518                if inlined {
2519                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2520                    inner_offset = next_offset;
2521                } else {
2522                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2523                    inner_depth.increment()?;
2524                }
2525                let val_ref = self.parent.get_or_insert_with(|| fidl::new_empty!(ParentElement, D));
2526                fidl::decode!(ParentElement, D, val_ref, decoder, inner_offset, inner_depth)?;
2527                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2528                {
2529                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2530                }
2531                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2532                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2533                }
2534            }
2535
2536            next_offset += envelope_size;
2537            _next_ordinal_to_read += 1;
2538            if next_offset >= end_offset {
2539                return Ok(());
2540            }
2541
2542            // Decode unknown envelopes for gaps in ordinals.
2543            while _next_ordinal_to_read < 3 {
2544                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2545                _next_ordinal_to_read += 1;
2546                next_offset += envelope_size;
2547            }
2548
2549            let next_out_of_line = decoder.next_out_of_line();
2550            let handles_before = decoder.remaining_handles();
2551            if let Some((inlined, num_bytes, num_handles)) =
2552                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2553            {
2554                let member_inline_size = <fidl::encoding::Vector<LevelTuple, 128> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2555                if inlined != (member_inline_size <= 4) {
2556                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2557                }
2558                let inner_offset;
2559                let mut inner_depth = depth.clone();
2560                if inlined {
2561                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2562                    inner_offset = next_offset;
2563                } else {
2564                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2565                    inner_depth.increment()?;
2566                }
2567                let val_ref = self.level_deps.get_or_insert_with(
2568                    || fidl::new_empty!(fidl::encoding::Vector<LevelTuple, 128>, D),
2569                );
2570                fidl::decode!(fidl::encoding::Vector<LevelTuple, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
2571                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2572                {
2573                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2574                }
2575                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2576                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2577                }
2578            }
2579
2580            next_offset += envelope_size;
2581
2582            // Decode the remaining unknown envelopes.
2583            while next_offset < end_offset {
2584                _next_ordinal_to_read += 1;
2585                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2586                next_offset += envelope_size;
2587            }
2588
2589            Ok(())
2590        }
2591    }
2592
2593    impl PowerElement {
2594        #[inline(always)]
2595        fn max_ordinal_present(&self) -> u64 {
2596            if let Some(_) = self.levels {
2597                return 2;
2598            }
2599            if let Some(_) = self.name {
2600                return 1;
2601            }
2602            0
2603        }
2604    }
2605
2606    impl fidl::encoding::ValueTypeMarker for PowerElement {
2607        type Borrowed<'a> = &'a Self;
2608        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2609            value
2610        }
2611    }
2612
2613    unsafe impl fidl::encoding::TypeMarker for PowerElement {
2614        type Owned = Self;
2615
2616        #[inline(always)]
2617        fn inline_align(_context: fidl::encoding::Context) -> usize {
2618            8
2619        }
2620
2621        #[inline(always)]
2622        fn inline_size(_context: fidl::encoding::Context) -> usize {
2623            16
2624        }
2625    }
2626
2627    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PowerElement, D>
2628        for &PowerElement
2629    {
2630        unsafe fn encode(
2631            self,
2632            encoder: &mut fidl::encoding::Encoder<'_, D>,
2633            offset: usize,
2634            mut depth: fidl::encoding::Depth,
2635        ) -> fidl::Result<()> {
2636            encoder.debug_check_bounds::<PowerElement>(offset);
2637            // Vector header
2638            let max_ordinal: u64 = self.max_ordinal_present();
2639            encoder.write_num(max_ordinal, offset);
2640            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2641            // Calling encoder.out_of_line_offset(0) is not allowed.
2642            if max_ordinal == 0 {
2643                return Ok(());
2644            }
2645            depth.increment()?;
2646            let envelope_size = 8;
2647            let bytes_len = max_ordinal as usize * envelope_size;
2648            #[allow(unused_variables)]
2649            let offset = encoder.out_of_line_offset(bytes_len);
2650            let mut _prev_end_offset: usize = 0;
2651            if 1 > max_ordinal {
2652                return Ok(());
2653            }
2654
2655            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2656            // are envelope_size bytes.
2657            let cur_offset: usize = (1 - 1) * envelope_size;
2658
2659            // Zero reserved fields.
2660            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2661
2662            // Safety:
2663            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2664            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2665            //   envelope_size bytes, there is always sufficient room.
2666            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<63>, D>(
2667                self.name.as_ref().map(
2668                    <fidl::encoding::BoundedString<63> as fidl::encoding::ValueTypeMarker>::borrow,
2669                ),
2670                encoder,
2671                offset + cur_offset,
2672                depth,
2673            )?;
2674
2675            _prev_end_offset = cur_offset + envelope_size;
2676            if 2 > max_ordinal {
2677                return Ok(());
2678            }
2679
2680            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2681            // are envelope_size bytes.
2682            let cur_offset: usize = (2 - 1) * envelope_size;
2683
2684            // Zero reserved fields.
2685            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2686
2687            // Safety:
2688            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2689            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2690            //   envelope_size bytes, there is always sufficient room.
2691            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<PowerLevel, 128>, D>(
2692            self.levels.as_ref().map(<fidl::encoding::Vector<PowerLevel, 128> as fidl::encoding::ValueTypeMarker>::borrow),
2693            encoder, offset + cur_offset, depth
2694        )?;
2695
2696            _prev_end_offset = cur_offset + envelope_size;
2697
2698            Ok(())
2699        }
2700    }
2701
2702    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerElement {
2703        #[inline(always)]
2704        fn new_empty() -> Self {
2705            Self::default()
2706        }
2707
2708        unsafe fn decode(
2709            &mut self,
2710            decoder: &mut fidl::encoding::Decoder<'_, D>,
2711            offset: usize,
2712            mut depth: fidl::encoding::Depth,
2713        ) -> fidl::Result<()> {
2714            decoder.debug_check_bounds::<Self>(offset);
2715            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2716                None => return Err(fidl::Error::NotNullable),
2717                Some(len) => len,
2718            };
2719            // Calling decoder.out_of_line_offset(0) is not allowed.
2720            if len == 0 {
2721                return Ok(());
2722            };
2723            depth.increment()?;
2724            let envelope_size = 8;
2725            let bytes_len = len * envelope_size;
2726            let offset = decoder.out_of_line_offset(bytes_len)?;
2727            // Decode the envelope for each type.
2728            let mut _next_ordinal_to_read = 0;
2729            let mut next_offset = offset;
2730            let end_offset = offset + bytes_len;
2731            _next_ordinal_to_read += 1;
2732            if next_offset >= end_offset {
2733                return Ok(());
2734            }
2735
2736            // Decode unknown envelopes for gaps in ordinals.
2737            while _next_ordinal_to_read < 1 {
2738                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2739                _next_ordinal_to_read += 1;
2740                next_offset += envelope_size;
2741            }
2742
2743            let next_out_of_line = decoder.next_out_of_line();
2744            let handles_before = decoder.remaining_handles();
2745            if let Some((inlined, num_bytes, num_handles)) =
2746                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2747            {
2748                let member_inline_size =
2749                    <fidl::encoding::BoundedString<63> as fidl::encoding::TypeMarker>::inline_size(
2750                        decoder.context,
2751                    );
2752                if inlined != (member_inline_size <= 4) {
2753                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2754                }
2755                let inner_offset;
2756                let mut inner_depth = depth.clone();
2757                if inlined {
2758                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2759                    inner_offset = next_offset;
2760                } else {
2761                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2762                    inner_depth.increment()?;
2763                }
2764                let val_ref = self
2765                    .name
2766                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<63>, D));
2767                fidl::decode!(
2768                    fidl::encoding::BoundedString<63>,
2769                    D,
2770                    val_ref,
2771                    decoder,
2772                    inner_offset,
2773                    inner_depth
2774                )?;
2775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2776                {
2777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2778                }
2779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2781                }
2782            }
2783
2784            next_offset += envelope_size;
2785            _next_ordinal_to_read += 1;
2786            if next_offset >= end_offset {
2787                return Ok(());
2788            }
2789
2790            // Decode unknown envelopes for gaps in ordinals.
2791            while _next_ordinal_to_read < 2 {
2792                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2793                _next_ordinal_to_read += 1;
2794                next_offset += envelope_size;
2795            }
2796
2797            let next_out_of_line = decoder.next_out_of_line();
2798            let handles_before = decoder.remaining_handles();
2799            if let Some((inlined, num_bytes, num_handles)) =
2800                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2801            {
2802                let member_inline_size = <fidl::encoding::Vector<PowerLevel, 128> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2803                if inlined != (member_inline_size <= 4) {
2804                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2805                }
2806                let inner_offset;
2807                let mut inner_depth = depth.clone();
2808                if inlined {
2809                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2810                    inner_offset = next_offset;
2811                } else {
2812                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2813                    inner_depth.increment()?;
2814                }
2815                let val_ref = self.levels.get_or_insert_with(
2816                    || fidl::new_empty!(fidl::encoding::Vector<PowerLevel, 128>, D),
2817                );
2818                fidl::decode!(fidl::encoding::Vector<PowerLevel, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
2819                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2820                {
2821                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2822                }
2823                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2824                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2825                }
2826            }
2827
2828            next_offset += envelope_size;
2829
2830            // Decode the remaining unknown envelopes.
2831            while next_offset < end_offset {
2832                _next_ordinal_to_read += 1;
2833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2834                next_offset += envelope_size;
2835            }
2836
2837            Ok(())
2838        }
2839    }
2840
2841    impl PowerElementConfiguration {
2842        #[inline(always)]
2843        fn max_ordinal_present(&self) -> u64 {
2844            if let Some(_) = self.dependencies {
2845                return 2;
2846            }
2847            if let Some(_) = self.element {
2848                return 1;
2849            }
2850            0
2851        }
2852    }
2853
2854    impl fidl::encoding::ValueTypeMarker for PowerElementConfiguration {
2855        type Borrowed<'a> = &'a Self;
2856        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2857            value
2858        }
2859    }
2860
2861    unsafe impl fidl::encoding::TypeMarker for PowerElementConfiguration {
2862        type Owned = Self;
2863
2864        #[inline(always)]
2865        fn inline_align(_context: fidl::encoding::Context) -> usize {
2866            8
2867        }
2868
2869        #[inline(always)]
2870        fn inline_size(_context: fidl::encoding::Context) -> usize {
2871            16
2872        }
2873    }
2874
2875    unsafe impl<D: fidl::encoding::ResourceDialect>
2876        fidl::encoding::Encode<PowerElementConfiguration, D> for &PowerElementConfiguration
2877    {
2878        unsafe fn encode(
2879            self,
2880            encoder: &mut fidl::encoding::Encoder<'_, D>,
2881            offset: usize,
2882            mut depth: fidl::encoding::Depth,
2883        ) -> fidl::Result<()> {
2884            encoder.debug_check_bounds::<PowerElementConfiguration>(offset);
2885            // Vector header
2886            let max_ordinal: u64 = self.max_ordinal_present();
2887            encoder.write_num(max_ordinal, offset);
2888            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2889            // Calling encoder.out_of_line_offset(0) is not allowed.
2890            if max_ordinal == 0 {
2891                return Ok(());
2892            }
2893            depth.increment()?;
2894            let envelope_size = 8;
2895            let bytes_len = max_ordinal as usize * envelope_size;
2896            #[allow(unused_variables)]
2897            let offset = encoder.out_of_line_offset(bytes_len);
2898            let mut _prev_end_offset: usize = 0;
2899            if 1 > max_ordinal {
2900                return Ok(());
2901            }
2902
2903            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2904            // are envelope_size bytes.
2905            let cur_offset: usize = (1 - 1) * envelope_size;
2906
2907            // Zero reserved fields.
2908            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2909
2910            // Safety:
2911            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2912            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2913            //   envelope_size bytes, there is always sufficient room.
2914            fidl::encoding::encode_in_envelope_optional::<PowerElement, D>(
2915                self.element
2916                    .as_ref()
2917                    .map(<PowerElement as fidl::encoding::ValueTypeMarker>::borrow),
2918                encoder,
2919                offset + cur_offset,
2920                depth,
2921            )?;
2922
2923            _prev_end_offset = cur_offset + envelope_size;
2924            if 2 > max_ordinal {
2925                return Ok(());
2926            }
2927
2928            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2929            // are envelope_size bytes.
2930            let cur_offset: usize = (2 - 1) * envelope_size;
2931
2932            // Zero reserved fields.
2933            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2934
2935            // Safety:
2936            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2937            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2938            //   envelope_size bytes, there is always sufficient room.
2939            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<PowerDependency, 128>, D>(
2940            self.dependencies.as_ref().map(<fidl::encoding::Vector<PowerDependency, 128> as fidl::encoding::ValueTypeMarker>::borrow),
2941            encoder, offset + cur_offset, depth
2942        )?;
2943
2944            _prev_end_offset = cur_offset + envelope_size;
2945
2946            Ok(())
2947        }
2948    }
2949
2950    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2951        for PowerElementConfiguration
2952    {
2953        #[inline(always)]
2954        fn new_empty() -> Self {
2955            Self::default()
2956        }
2957
2958        unsafe fn decode(
2959            &mut self,
2960            decoder: &mut fidl::encoding::Decoder<'_, D>,
2961            offset: usize,
2962            mut depth: fidl::encoding::Depth,
2963        ) -> fidl::Result<()> {
2964            decoder.debug_check_bounds::<Self>(offset);
2965            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2966                None => return Err(fidl::Error::NotNullable),
2967                Some(len) => len,
2968            };
2969            // Calling decoder.out_of_line_offset(0) is not allowed.
2970            if len == 0 {
2971                return Ok(());
2972            };
2973            depth.increment()?;
2974            let envelope_size = 8;
2975            let bytes_len = len * envelope_size;
2976            let offset = decoder.out_of_line_offset(bytes_len)?;
2977            // Decode the envelope for each type.
2978            let mut _next_ordinal_to_read = 0;
2979            let mut next_offset = offset;
2980            let end_offset = offset + bytes_len;
2981            _next_ordinal_to_read += 1;
2982            if next_offset >= end_offset {
2983                return Ok(());
2984            }
2985
2986            // Decode unknown envelopes for gaps in ordinals.
2987            while _next_ordinal_to_read < 1 {
2988                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2989                _next_ordinal_to_read += 1;
2990                next_offset += envelope_size;
2991            }
2992
2993            let next_out_of_line = decoder.next_out_of_line();
2994            let handles_before = decoder.remaining_handles();
2995            if let Some((inlined, num_bytes, num_handles)) =
2996                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2997            {
2998                let member_inline_size =
2999                    <PowerElement as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3000                if inlined != (member_inline_size <= 4) {
3001                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3002                }
3003                let inner_offset;
3004                let mut inner_depth = depth.clone();
3005                if inlined {
3006                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3007                    inner_offset = next_offset;
3008                } else {
3009                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3010                    inner_depth.increment()?;
3011                }
3012                let val_ref = self.element.get_or_insert_with(|| fidl::new_empty!(PowerElement, D));
3013                fidl::decode!(PowerElement, D, val_ref, decoder, inner_offset, inner_depth)?;
3014                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3015                {
3016                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3017                }
3018                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3019                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3020                }
3021            }
3022
3023            next_offset += envelope_size;
3024            _next_ordinal_to_read += 1;
3025            if next_offset >= end_offset {
3026                return Ok(());
3027            }
3028
3029            // Decode unknown envelopes for gaps in ordinals.
3030            while _next_ordinal_to_read < 2 {
3031                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3032                _next_ordinal_to_read += 1;
3033                next_offset += envelope_size;
3034            }
3035
3036            let next_out_of_line = decoder.next_out_of_line();
3037            let handles_before = decoder.remaining_handles();
3038            if let Some((inlined, num_bytes, num_handles)) =
3039                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3040            {
3041                let member_inline_size = <fidl::encoding::Vector<PowerDependency, 128> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3042                if inlined != (member_inline_size <= 4) {
3043                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3044                }
3045                let inner_offset;
3046                let mut inner_depth = depth.clone();
3047                if inlined {
3048                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3049                    inner_offset = next_offset;
3050                } else {
3051                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3052                    inner_depth.increment()?;
3053                }
3054                let val_ref = self.dependencies.get_or_insert_with(
3055                    || fidl::new_empty!(fidl::encoding::Vector<PowerDependency, 128>, D),
3056                );
3057                fidl::decode!(fidl::encoding::Vector<PowerDependency, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
3058                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3059                {
3060                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3061                }
3062                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3063                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3064                }
3065            }
3066
3067            next_offset += envelope_size;
3068
3069            // Decode the remaining unknown envelopes.
3070            while next_offset < end_offset {
3071                _next_ordinal_to_read += 1;
3072                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3073                next_offset += envelope_size;
3074            }
3075
3076            Ok(())
3077        }
3078    }
3079
3080    impl PowerLevel {
3081        #[inline(always)]
3082        fn max_ordinal_present(&self) -> u64 {
3083            if let Some(_) = self.transitions {
3084                return 3;
3085            }
3086            if let Some(_) = self.name {
3087                return 2;
3088            }
3089            if let Some(_) = self.level {
3090                return 1;
3091            }
3092            0
3093        }
3094    }
3095
3096    impl fidl::encoding::ValueTypeMarker for PowerLevel {
3097        type Borrowed<'a> = &'a Self;
3098        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3099            value
3100        }
3101    }
3102
3103    unsafe impl fidl::encoding::TypeMarker for PowerLevel {
3104        type Owned = Self;
3105
3106        #[inline(always)]
3107        fn inline_align(_context: fidl::encoding::Context) -> usize {
3108            8
3109        }
3110
3111        #[inline(always)]
3112        fn inline_size(_context: fidl::encoding::Context) -> usize {
3113            16
3114        }
3115    }
3116
3117    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PowerLevel, D>
3118        for &PowerLevel
3119    {
3120        unsafe fn encode(
3121            self,
3122            encoder: &mut fidl::encoding::Encoder<'_, D>,
3123            offset: usize,
3124            mut depth: fidl::encoding::Depth,
3125        ) -> fidl::Result<()> {
3126            encoder.debug_check_bounds::<PowerLevel>(offset);
3127            // Vector header
3128            let max_ordinal: u64 = self.max_ordinal_present();
3129            encoder.write_num(max_ordinal, offset);
3130            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3131            // Calling encoder.out_of_line_offset(0) is not allowed.
3132            if max_ordinal == 0 {
3133                return Ok(());
3134            }
3135            depth.increment()?;
3136            let envelope_size = 8;
3137            let bytes_len = max_ordinal as usize * envelope_size;
3138            #[allow(unused_variables)]
3139            let offset = encoder.out_of_line_offset(bytes_len);
3140            let mut _prev_end_offset: usize = 0;
3141            if 1 > max_ordinal {
3142                return Ok(());
3143            }
3144
3145            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3146            // are envelope_size bytes.
3147            let cur_offset: usize = (1 - 1) * envelope_size;
3148
3149            // Zero reserved fields.
3150            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3151
3152            // Safety:
3153            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3154            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3155            //   envelope_size bytes, there is always sufficient room.
3156            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3157                self.level.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3158                encoder,
3159                offset + cur_offset,
3160                depth,
3161            )?;
3162
3163            _prev_end_offset = cur_offset + envelope_size;
3164            if 2 > max_ordinal {
3165                return Ok(());
3166            }
3167
3168            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3169            // are envelope_size bytes.
3170            let cur_offset: usize = (2 - 1) * envelope_size;
3171
3172            // Zero reserved fields.
3173            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3174
3175            // Safety:
3176            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3177            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3178            //   envelope_size bytes, there is always sufficient room.
3179            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<63>, D>(
3180                self.name.as_ref().map(
3181                    <fidl::encoding::BoundedString<63> as fidl::encoding::ValueTypeMarker>::borrow,
3182                ),
3183                encoder,
3184                offset + cur_offset,
3185                depth,
3186            )?;
3187
3188            _prev_end_offset = cur_offset + envelope_size;
3189            if 3 > max_ordinal {
3190                return Ok(());
3191            }
3192
3193            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3194            // are envelope_size bytes.
3195            let cur_offset: usize = (3 - 1) * envelope_size;
3196
3197            // Zero reserved fields.
3198            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3199
3200            // Safety:
3201            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3202            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3203            //   envelope_size bytes, there is always sufficient room.
3204            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Transition, 127>, D>(
3205            self.transitions.as_ref().map(<fidl::encoding::Vector<Transition, 127> as fidl::encoding::ValueTypeMarker>::borrow),
3206            encoder, offset + cur_offset, depth
3207        )?;
3208
3209            _prev_end_offset = cur_offset + envelope_size;
3210
3211            Ok(())
3212        }
3213    }
3214
3215    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerLevel {
3216        #[inline(always)]
3217        fn new_empty() -> Self {
3218            Self::default()
3219        }
3220
3221        unsafe fn decode(
3222            &mut self,
3223            decoder: &mut fidl::encoding::Decoder<'_, D>,
3224            offset: usize,
3225            mut depth: fidl::encoding::Depth,
3226        ) -> fidl::Result<()> {
3227            decoder.debug_check_bounds::<Self>(offset);
3228            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3229                None => return Err(fidl::Error::NotNullable),
3230                Some(len) => len,
3231            };
3232            // Calling decoder.out_of_line_offset(0) is not allowed.
3233            if len == 0 {
3234                return Ok(());
3235            };
3236            depth.increment()?;
3237            let envelope_size = 8;
3238            let bytes_len = len * envelope_size;
3239            let offset = decoder.out_of_line_offset(bytes_len)?;
3240            // Decode the envelope for each type.
3241            let mut _next_ordinal_to_read = 0;
3242            let mut next_offset = offset;
3243            let end_offset = offset + bytes_len;
3244            _next_ordinal_to_read += 1;
3245            if next_offset >= end_offset {
3246                return Ok(());
3247            }
3248
3249            // Decode unknown envelopes for gaps in ordinals.
3250            while _next_ordinal_to_read < 1 {
3251                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3252                _next_ordinal_to_read += 1;
3253                next_offset += envelope_size;
3254            }
3255
3256            let next_out_of_line = decoder.next_out_of_line();
3257            let handles_before = decoder.remaining_handles();
3258            if let Some((inlined, num_bytes, num_handles)) =
3259                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3260            {
3261                let member_inline_size =
3262                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3263                if inlined != (member_inline_size <= 4) {
3264                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3265                }
3266                let inner_offset;
3267                let mut inner_depth = depth.clone();
3268                if inlined {
3269                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3270                    inner_offset = next_offset;
3271                } else {
3272                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3273                    inner_depth.increment()?;
3274                }
3275                let val_ref = self.level.get_or_insert_with(|| fidl::new_empty!(u8, D));
3276                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3277                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3278                {
3279                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3280                }
3281                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3282                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3283                }
3284            }
3285
3286            next_offset += envelope_size;
3287            _next_ordinal_to_read += 1;
3288            if next_offset >= end_offset {
3289                return Ok(());
3290            }
3291
3292            // Decode unknown envelopes for gaps in ordinals.
3293            while _next_ordinal_to_read < 2 {
3294                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3295                _next_ordinal_to_read += 1;
3296                next_offset += envelope_size;
3297            }
3298
3299            let next_out_of_line = decoder.next_out_of_line();
3300            let handles_before = decoder.remaining_handles();
3301            if let Some((inlined, num_bytes, num_handles)) =
3302                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3303            {
3304                let member_inline_size =
3305                    <fidl::encoding::BoundedString<63> as fidl::encoding::TypeMarker>::inline_size(
3306                        decoder.context,
3307                    );
3308                if inlined != (member_inline_size <= 4) {
3309                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3310                }
3311                let inner_offset;
3312                let mut inner_depth = depth.clone();
3313                if inlined {
3314                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3315                    inner_offset = next_offset;
3316                } else {
3317                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3318                    inner_depth.increment()?;
3319                }
3320                let val_ref = self
3321                    .name
3322                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<63>, D));
3323                fidl::decode!(
3324                    fidl::encoding::BoundedString<63>,
3325                    D,
3326                    val_ref,
3327                    decoder,
3328                    inner_offset,
3329                    inner_depth
3330                )?;
3331                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3332                {
3333                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3334                }
3335                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3336                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3337                }
3338            }
3339
3340            next_offset += envelope_size;
3341            _next_ordinal_to_read += 1;
3342            if next_offset >= end_offset {
3343                return Ok(());
3344            }
3345
3346            // Decode unknown envelopes for gaps in ordinals.
3347            while _next_ordinal_to_read < 3 {
3348                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3349                _next_ordinal_to_read += 1;
3350                next_offset += envelope_size;
3351            }
3352
3353            let next_out_of_line = decoder.next_out_of_line();
3354            let handles_before = decoder.remaining_handles();
3355            if let Some((inlined, num_bytes, num_handles)) =
3356                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3357            {
3358                let member_inline_size = <fidl::encoding::Vector<Transition, 127> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3359                if inlined != (member_inline_size <= 4) {
3360                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3361                }
3362                let inner_offset;
3363                let mut inner_depth = depth.clone();
3364                if inlined {
3365                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3366                    inner_offset = next_offset;
3367                } else {
3368                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3369                    inner_depth.increment()?;
3370                }
3371                let val_ref = self.transitions.get_or_insert_with(
3372                    || fidl::new_empty!(fidl::encoding::Vector<Transition, 127>, D),
3373                );
3374                fidl::decode!(fidl::encoding::Vector<Transition, 127>, D, val_ref, decoder, inner_offset, inner_depth)?;
3375                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3376                {
3377                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3378                }
3379                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3380                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3381                }
3382            }
3383
3384            next_offset += envelope_size;
3385
3386            // Decode the remaining unknown envelopes.
3387            while next_offset < end_offset {
3388                _next_ordinal_to_read += 1;
3389                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3390                next_offset += envelope_size;
3391            }
3392
3393            Ok(())
3394        }
3395    }
3396
3397    impl Transition {
3398        #[inline(always)]
3399        fn max_ordinal_present(&self) -> u64 {
3400            if let Some(_) = self.latency_us {
3401                return 2;
3402            }
3403            if let Some(_) = self.target_level {
3404                return 1;
3405            }
3406            0
3407        }
3408    }
3409
3410    impl fidl::encoding::ValueTypeMarker for Transition {
3411        type Borrowed<'a> = &'a Self;
3412        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3413            value
3414        }
3415    }
3416
3417    unsafe impl fidl::encoding::TypeMarker for Transition {
3418        type Owned = Self;
3419
3420        #[inline(always)]
3421        fn inline_align(_context: fidl::encoding::Context) -> usize {
3422            8
3423        }
3424
3425        #[inline(always)]
3426        fn inline_size(_context: fidl::encoding::Context) -> usize {
3427            16
3428        }
3429    }
3430
3431    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Transition, D>
3432        for &Transition
3433    {
3434        unsafe fn encode(
3435            self,
3436            encoder: &mut fidl::encoding::Encoder<'_, D>,
3437            offset: usize,
3438            mut depth: fidl::encoding::Depth,
3439        ) -> fidl::Result<()> {
3440            encoder.debug_check_bounds::<Transition>(offset);
3441            // Vector header
3442            let max_ordinal: u64 = self.max_ordinal_present();
3443            encoder.write_num(max_ordinal, offset);
3444            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3445            // Calling encoder.out_of_line_offset(0) is not allowed.
3446            if max_ordinal == 0 {
3447                return Ok(());
3448            }
3449            depth.increment()?;
3450            let envelope_size = 8;
3451            let bytes_len = max_ordinal as usize * envelope_size;
3452            #[allow(unused_variables)]
3453            let offset = encoder.out_of_line_offset(bytes_len);
3454            let mut _prev_end_offset: usize = 0;
3455            if 1 > max_ordinal {
3456                return Ok(());
3457            }
3458
3459            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3460            // are envelope_size bytes.
3461            let cur_offset: usize = (1 - 1) * envelope_size;
3462
3463            // Zero reserved fields.
3464            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3465
3466            // Safety:
3467            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3468            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3469            //   envelope_size bytes, there is always sufficient room.
3470            fidl::encoding::encode_in_envelope_optional::<u8, D>(
3471                self.target_level.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
3472                encoder,
3473                offset + cur_offset,
3474                depth,
3475            )?;
3476
3477            _prev_end_offset = cur_offset + envelope_size;
3478            if 2 > max_ordinal {
3479                return Ok(());
3480            }
3481
3482            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3483            // are envelope_size bytes.
3484            let cur_offset: usize = (2 - 1) * envelope_size;
3485
3486            // Zero reserved fields.
3487            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3488
3489            // Safety:
3490            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3491            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3492            //   envelope_size bytes, there is always sufficient room.
3493            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3494                self.latency_us.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3495                encoder,
3496                offset + cur_offset,
3497                depth,
3498            )?;
3499
3500            _prev_end_offset = cur_offset + envelope_size;
3501
3502            Ok(())
3503        }
3504    }
3505
3506    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Transition {
3507        #[inline(always)]
3508        fn new_empty() -> Self {
3509            Self::default()
3510        }
3511
3512        unsafe fn decode(
3513            &mut self,
3514            decoder: &mut fidl::encoding::Decoder<'_, D>,
3515            offset: usize,
3516            mut depth: fidl::encoding::Depth,
3517        ) -> fidl::Result<()> {
3518            decoder.debug_check_bounds::<Self>(offset);
3519            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3520                None => return Err(fidl::Error::NotNullable),
3521                Some(len) => len,
3522            };
3523            // Calling decoder.out_of_line_offset(0) is not allowed.
3524            if len == 0 {
3525                return Ok(());
3526            };
3527            depth.increment()?;
3528            let envelope_size = 8;
3529            let bytes_len = len * envelope_size;
3530            let offset = decoder.out_of_line_offset(bytes_len)?;
3531            // Decode the envelope for each type.
3532            let mut _next_ordinal_to_read = 0;
3533            let mut next_offset = offset;
3534            let end_offset = offset + bytes_len;
3535            _next_ordinal_to_read += 1;
3536            if next_offset >= end_offset {
3537                return Ok(());
3538            }
3539
3540            // Decode unknown envelopes for gaps in ordinals.
3541            while _next_ordinal_to_read < 1 {
3542                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3543                _next_ordinal_to_read += 1;
3544                next_offset += envelope_size;
3545            }
3546
3547            let next_out_of_line = decoder.next_out_of_line();
3548            let handles_before = decoder.remaining_handles();
3549            if let Some((inlined, num_bytes, num_handles)) =
3550                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3551            {
3552                let member_inline_size =
3553                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3554                if inlined != (member_inline_size <= 4) {
3555                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3556                }
3557                let inner_offset;
3558                let mut inner_depth = depth.clone();
3559                if inlined {
3560                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3561                    inner_offset = next_offset;
3562                } else {
3563                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3564                    inner_depth.increment()?;
3565                }
3566                let val_ref = self.target_level.get_or_insert_with(|| fidl::new_empty!(u8, D));
3567                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
3568                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3569                {
3570                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3571                }
3572                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3573                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3574                }
3575            }
3576
3577            next_offset += envelope_size;
3578            _next_ordinal_to_read += 1;
3579            if next_offset >= end_offset {
3580                return Ok(());
3581            }
3582
3583            // Decode unknown envelopes for gaps in ordinals.
3584            while _next_ordinal_to_read < 2 {
3585                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3586                _next_ordinal_to_read += 1;
3587                next_offset += envelope_size;
3588            }
3589
3590            let next_out_of_line = decoder.next_out_of_line();
3591            let handles_before = decoder.remaining_handles();
3592            if let Some((inlined, num_bytes, num_handles)) =
3593                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3594            {
3595                let member_inline_size =
3596                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3597                if inlined != (member_inline_size <= 4) {
3598                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3599                }
3600                let inner_offset;
3601                let mut inner_depth = depth.clone();
3602                if inlined {
3603                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3604                    inner_offset = next_offset;
3605                } else {
3606                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3607                    inner_depth.increment()?;
3608                }
3609                let val_ref = self.latency_us.get_or_insert_with(|| fidl::new_empty!(u32, D));
3610                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3611                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3612                {
3613                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3614                }
3615                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3616                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3617                }
3618            }
3619
3620            next_offset += envelope_size;
3621
3622            // Decode the remaining unknown envelopes.
3623            while next_offset < end_offset {
3624                _next_ordinal_to_read += 1;
3625                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3626                next_offset += envelope_size;
3627            }
3628
3629            Ok(())
3630        }
3631    }
3632
3633    impl fidl::encoding::ValueTypeMarker for ParentElement {
3634        type Borrowed<'a> = &'a Self;
3635        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3636            value
3637        }
3638    }
3639
3640    unsafe impl fidl::encoding::TypeMarker for ParentElement {
3641        type Owned = Self;
3642
3643        #[inline(always)]
3644        fn inline_align(_context: fidl::encoding::Context) -> usize {
3645            8
3646        }
3647
3648        #[inline(always)]
3649        fn inline_size(_context: fidl::encoding::Context) -> usize {
3650            16
3651        }
3652    }
3653
3654    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ParentElement, D>
3655        for &ParentElement
3656    {
3657        #[inline]
3658        unsafe fn encode(
3659            self,
3660            encoder: &mut fidl::encoding::Encoder<'_, D>,
3661            offset: usize,
3662            _depth: fidl::encoding::Depth,
3663        ) -> fidl::Result<()> {
3664            encoder.debug_check_bounds::<ParentElement>(offset);
3665            encoder.write_num::<u64>(self.ordinal(), offset);
3666            match self {
3667                ParentElement::Sag(ref val) => fidl::encoding::encode_in_envelope::<SagElement, D>(
3668                    <SagElement as fidl::encoding::ValueTypeMarker>::borrow(val),
3669                    encoder,
3670                    offset + 8,
3671                    _depth,
3672                ),
3673                ParentElement::InstanceName(ref val) => fidl::encoding::encode_in_envelope::<
3674                    fidl::encoding::BoundedString<63>,
3675                    D,
3676                >(
3677                    <fidl::encoding::BoundedString<63> as fidl::encoding::ValueTypeMarker>::borrow(
3678                        val,
3679                    ),
3680                    encoder,
3681                    offset + 8,
3682                    _depth,
3683                ),
3684                ParentElement::CpuControl(ref val) => {
3685                    fidl::encoding::encode_in_envelope::<CpuPowerElement, D>(
3686                        <CpuPowerElement as fidl::encoding::ValueTypeMarker>::borrow(val),
3687                        encoder,
3688                        offset + 8,
3689                        _depth,
3690                    )
3691                }
3692            }
3693        }
3694    }
3695
3696    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ParentElement {
3697        #[inline(always)]
3698        fn new_empty() -> Self {
3699            Self::Sag(fidl::new_empty!(SagElement, D))
3700        }
3701
3702        #[inline]
3703        unsafe fn decode(
3704            &mut self,
3705            decoder: &mut fidl::encoding::Decoder<'_, D>,
3706            offset: usize,
3707            mut depth: fidl::encoding::Depth,
3708        ) -> fidl::Result<()> {
3709            decoder.debug_check_bounds::<Self>(offset);
3710            #[allow(unused_variables)]
3711            let next_out_of_line = decoder.next_out_of_line();
3712            let handles_before = decoder.remaining_handles();
3713            let (ordinal, inlined, num_bytes, num_handles) =
3714                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
3715
3716            let member_inline_size = match ordinal {
3717                1 => <SagElement as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3718                2 => {
3719                    <fidl::encoding::BoundedString<63> as fidl::encoding::TypeMarker>::inline_size(
3720                        decoder.context,
3721                    )
3722                }
3723                3 => <CpuPowerElement as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3724                _ => return Err(fidl::Error::UnknownUnionTag),
3725            };
3726
3727            if inlined != (member_inline_size <= 4) {
3728                return Err(fidl::Error::InvalidInlineBitInEnvelope);
3729            }
3730            let _inner_offset;
3731            if inlined {
3732                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
3733                _inner_offset = offset + 8;
3734            } else {
3735                depth.increment()?;
3736                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3737            }
3738            match ordinal {
3739                1 => {
3740                    #[allow(irrefutable_let_patterns)]
3741                    if let ParentElement::Sag(_) = self {
3742                        // Do nothing, read the value into the object
3743                    } else {
3744                        // Initialize `self` to the right variant
3745                        *self = ParentElement::Sag(fidl::new_empty!(SagElement, D));
3746                    }
3747                    #[allow(irrefutable_let_patterns)]
3748                    if let ParentElement::Sag(ref mut val) = self {
3749                        fidl::decode!(SagElement, D, val, decoder, _inner_offset, depth)?;
3750                    } else {
3751                        unreachable!()
3752                    }
3753                }
3754                2 => {
3755                    #[allow(irrefutable_let_patterns)]
3756                    if let ParentElement::InstanceName(_) = self {
3757                        // Do nothing, read the value into the object
3758                    } else {
3759                        // Initialize `self` to the right variant
3760                        *self = ParentElement::InstanceName(fidl::new_empty!(
3761                            fidl::encoding::BoundedString<63>,
3762                            D
3763                        ));
3764                    }
3765                    #[allow(irrefutable_let_patterns)]
3766                    if let ParentElement::InstanceName(ref mut val) = self {
3767                        fidl::decode!(
3768                            fidl::encoding::BoundedString<63>,
3769                            D,
3770                            val,
3771                            decoder,
3772                            _inner_offset,
3773                            depth
3774                        )?;
3775                    } else {
3776                        unreachable!()
3777                    }
3778                }
3779                3 => {
3780                    #[allow(irrefutable_let_patterns)]
3781                    if let ParentElement::CpuControl(_) = self {
3782                        // Do nothing, read the value into the object
3783                    } else {
3784                        // Initialize `self` to the right variant
3785                        *self = ParentElement::CpuControl(fidl::new_empty!(CpuPowerElement, D));
3786                    }
3787                    #[allow(irrefutable_let_patterns)]
3788                    if let ParentElement::CpuControl(ref mut val) = self {
3789                        fidl::decode!(CpuPowerElement, D, val, decoder, _inner_offset, depth)?;
3790                    } else {
3791                        unreachable!()
3792                    }
3793                }
3794                ordinal => panic!("unexpected ordinal {:?}", ordinal),
3795            }
3796            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
3797                return Err(fidl::Error::InvalidNumBytesInEnvelope);
3798            }
3799            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3800                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3801            }
3802            Ok(())
3803        }
3804    }
3805}