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