Skip to main content

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