Skip to main content

fidl_fuchsia_hardware_power_statecontrol_common/
fidl_fuchsia_hardware_power_statecontrol_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
11/// The maximum number of reboot reasons that can be attributed to a single
12/// reboot request.
13pub const MAX_REBOOT_REASONS: u8 = 100;
14
15/// The maxium number of seconds the server will wait for responses from all RebootMethodsWatchers
16/// before changing the system power state.
17pub const MAX_REBOOT_WATCHER_RESPONSE_TIME_SECONDS: u32 = 5;
18
19/// The maximum number of shutdown reasons that can be attributed to a single
20/// shutdown request.
21pub const MAX_SHUTDOWN_REASONS: u8 = 100;
22
23/// The maximum number of seconds the server will wait for responses from all ShutdownWatchers
24/// before changing the system power state.
25pub const MAX_SHUTDOWN_WATCHER_RESPONSE_TIME_SECONDS: u32 = 5;
26
27/// The maximum number of seconds the server will wait for responses from all TerminalStateWatchers
28/// before changing the system power state.
29pub const MAX_TERMINAL_STATE_WATCHER_RESPONSE_TIME_SECONDS: u32 = 5;
30
31/// Why the system reboots.
32///
33/// Replaced by `ShutdownReason`.
34#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
35pub enum RebootReason2 {
36    /// The device rebooted because the end user of the device initiated the reboot.
37    ///
38    /// DO NOT USE for any code path not directly related to an end user explicit reboot action.
39    /// Use DEVELOPER_REQUEST below instead.
40    UserRequest,
41    /// The device rebooted because a developer initiated the reboot, typically via a shell command
42    /// or similar interface, including within an automated test.
43    DeveloperRequest,
44    /// A new system update has been downloaded.
45    SystemUpdate,
46    /// Applying the system update has failed.
47    RetrySystemUpdate,
48    HighTemperature,
49    FactoryDataReset,
50    /// Sessionmgr has failed.
51    SessionFailure,
52    /// sysmgr crashed.
53    SysmgrFailure,
54    /// A critical system component has failed.
55    CriticalComponentFailure,
56    /// A boot partition change was effected.
57    ZbiSwap,
58    /// The system hit a critical low threshold of available memory.
59    OutOfMemory,
60    /// The Netstack component is changing versions.
61    NetstackMigration,
62    /// An Android-initiated reboot reason that Starnix doesn't recognize
63    AndroidUnexpectedReason,
64    /// Android called for the "RescueParty".
65    AndroidRescueParty,
66    /// A critical Android process failed.
67    AndroidCriticalProcessFailure,
68    #[doc(hidden)]
69    __SourceBreaking {
70        unknown_ordinal: u32,
71    },
72}
73
74/// Pattern that matches an unknown `RebootReason2` member.
75#[macro_export]
76macro_rules! RebootReason2Unknown {
77    () => {
78        _
79    };
80}
81
82impl RebootReason2 {
83    #[inline]
84    pub fn from_primitive(prim: u32) -> Option<Self> {
85        match prim {
86            1 => Some(Self::UserRequest),
87            13 => Some(Self::DeveloperRequest),
88            2 => Some(Self::SystemUpdate),
89            8 => Some(Self::RetrySystemUpdate),
90            3 => Some(Self::HighTemperature),
91            6 => Some(Self::FactoryDataReset),
92            4 => Some(Self::SessionFailure),
93            5 => Some(Self::SysmgrFailure),
94            7 => Some(Self::CriticalComponentFailure),
95            9 => Some(Self::ZbiSwap),
96            10 => Some(Self::OutOfMemory),
97            11 => Some(Self::NetstackMigration),
98            12 => Some(Self::AndroidUnexpectedReason),
99            14 => Some(Self::AndroidRescueParty),
100            15 => Some(Self::AndroidCriticalProcessFailure),
101            _ => None,
102        }
103    }
104
105    #[inline]
106    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
107        match prim {
108            1 => Self::UserRequest,
109            13 => Self::DeveloperRequest,
110            2 => Self::SystemUpdate,
111            8 => Self::RetrySystemUpdate,
112            3 => Self::HighTemperature,
113            6 => Self::FactoryDataReset,
114            4 => Self::SessionFailure,
115            5 => Self::SysmgrFailure,
116            7 => Self::CriticalComponentFailure,
117            9 => Self::ZbiSwap,
118            10 => Self::OutOfMemory,
119            11 => Self::NetstackMigration,
120            12 => Self::AndroidUnexpectedReason,
121            14 => Self::AndroidRescueParty,
122            15 => Self::AndroidCriticalProcessFailure,
123            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
124        }
125    }
126
127    #[inline]
128    pub fn unknown() -> Self {
129        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
130    }
131
132    #[inline]
133    pub const fn into_primitive(self) -> u32 {
134        match self {
135            Self::UserRequest => 1,
136            Self::DeveloperRequest => 13,
137            Self::SystemUpdate => 2,
138            Self::RetrySystemUpdate => 8,
139            Self::HighTemperature => 3,
140            Self::FactoryDataReset => 6,
141            Self::SessionFailure => 4,
142            Self::SysmgrFailure => 5,
143            Self::CriticalComponentFailure => 7,
144            Self::ZbiSwap => 9,
145            Self::OutOfMemory => 10,
146            Self::NetstackMigration => 11,
147            Self::AndroidUnexpectedReason => 12,
148            Self::AndroidRescueParty => 14,
149            Self::AndroidCriticalProcessFailure => 15,
150            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
151        }
152    }
153
154    #[inline]
155    pub fn is_unknown(&self) -> bool {
156        match self {
157            Self::__SourceBreaking { unknown_ordinal: _ } => true,
158            _ => false,
159        }
160    }
161}
162
163#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
164pub enum ShutdownAction {
165    Poweroff,
166    Reboot,
167    RebootToRecovery,
168    RebootToBootloader,
169    #[doc(hidden)]
170    __SourceBreaking {
171        unknown_ordinal: u32,
172    },
173}
174
175/// Pattern that matches an unknown `ShutdownAction` member.
176#[macro_export]
177macro_rules! ShutdownActionUnknown {
178    () => {
179        _
180    };
181}
182
183impl ShutdownAction {
184    #[inline]
185    pub fn from_primitive(prim: u32) -> Option<Self> {
186        match prim {
187            1 => Some(Self::Poweroff),
188            2 => Some(Self::Reboot),
189            3 => Some(Self::RebootToRecovery),
190            4 => Some(Self::RebootToBootloader),
191            _ => None,
192        }
193    }
194
195    #[inline]
196    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
197        match prim {
198            1 => Self::Poweroff,
199            2 => Self::Reboot,
200            3 => Self::RebootToRecovery,
201            4 => Self::RebootToBootloader,
202            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
203        }
204    }
205
206    #[inline]
207    pub fn unknown() -> Self {
208        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
209    }
210
211    #[inline]
212    pub const fn into_primitive(self) -> u32 {
213        match self {
214            Self::Poweroff => 1,
215            Self::Reboot => 2,
216            Self::RebootToRecovery => 3,
217            Self::RebootToBootloader => 4,
218            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
219        }
220    }
221
222    #[inline]
223    pub fn is_unknown(&self) -> bool {
224        match self {
225            Self::__SourceBreaking { unknown_ordinal: _ } => true,
226            _ => false,
227        }
228    }
229}
230
231/// Why the system is shutting down.
232#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
233pub enum ShutdownReason {
234    /// The end user of the device initiated the shutdown.
235    ///
236    /// DO NOT USE for any code path not directly related to an end user explicit shutdown action.
237    /// Use DEVELOPER_REQUEST below instead.
238    UserRequest,
239    /// The end user of the device initiated the shutdown because the device was stuck.
240    UserRequestDeviceStuck,
241    /// The developer initiated the shutdown, typically via a shell command or similar interface,
242    /// including within an automated test.
243    DeveloperRequest,
244    /// A new system update has been downloaded.
245    SystemUpdate,
246    /// Applying the system update has failed.
247    RetrySystemUpdate,
248    /// The device has crossed the high temperature threshold.
249    HighTemperature,
250    /// The device is about to perform an FDR.
251    FactoryDataReset,
252    /// Sessionmgr has failed.
253    SessionFailure,
254    /// A critical system component has failed.
255    CriticalComponentFailure,
256    /// A boot partition change was effected.
257    ZbiSwap,
258    /// The system hit a critical low threshold of available memory.
259    OutOfMemory,
260    /// The Netstack component is changing versions.
261    NetstackMigration,
262    /// An Android-initiated shutdown reason that Starnix doesn't recognize.
263    AndroidUnexpectedReason,
264    /// A Starnix container initiated the shutdown but Starnix doesn't know why.
265    StarnixContainerNoReason,
266    /// Android called for the "RescueParty".
267    AndroidRescueParty,
268    /// A critical Android process failed.
269    AndroidCriticalProcessFailure,
270    /// The device battery is drained.
271    BatteryDrained,
272    /// The system failed to suspend or resume within the expected time.
273    SuspensionFailure,
274    /// A critical driver has failed.
275    CriticalDriverFailure,
276    #[doc(hidden)]
277    __SourceBreaking { unknown_ordinal: u32 },
278}
279
280/// Pattern that matches an unknown `ShutdownReason` member.
281#[macro_export]
282macro_rules! ShutdownReasonUnknown {
283    () => {
284        _
285    };
286}
287
288impl ShutdownReason {
289    #[inline]
290    pub fn from_primitive(prim: u32) -> Option<Self> {
291        match prim {
292            1 => Some(Self::UserRequest),
293            16 => Some(Self::UserRequestDeviceStuck),
294            2 => Some(Self::DeveloperRequest),
295            3 => Some(Self::SystemUpdate),
296            4 => Some(Self::RetrySystemUpdate),
297            5 => Some(Self::HighTemperature),
298            6 => Some(Self::FactoryDataReset),
299            7 => Some(Self::SessionFailure),
300            8 => Some(Self::CriticalComponentFailure),
301            9 => Some(Self::ZbiSwap),
302            10 => Some(Self::OutOfMemory),
303            11 => Some(Self::NetstackMigration),
304            12 => Some(Self::AndroidUnexpectedReason),
305            15 => Some(Self::StarnixContainerNoReason),
306            13 => Some(Self::AndroidRescueParty),
307            14 => Some(Self::AndroidCriticalProcessFailure),
308            17 => Some(Self::BatteryDrained),
309            18 => Some(Self::SuspensionFailure),
310            19 => Some(Self::CriticalDriverFailure),
311            _ => None,
312        }
313    }
314
315    #[inline]
316    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
317        match prim {
318            1 => Self::UserRequest,
319            16 => Self::UserRequestDeviceStuck,
320            2 => Self::DeveloperRequest,
321            3 => Self::SystemUpdate,
322            4 => Self::RetrySystemUpdate,
323            5 => Self::HighTemperature,
324            6 => Self::FactoryDataReset,
325            7 => Self::SessionFailure,
326            8 => Self::CriticalComponentFailure,
327            9 => Self::ZbiSwap,
328            10 => Self::OutOfMemory,
329            11 => Self::NetstackMigration,
330            12 => Self::AndroidUnexpectedReason,
331            15 => Self::StarnixContainerNoReason,
332            13 => Self::AndroidRescueParty,
333            14 => Self::AndroidCriticalProcessFailure,
334            17 => Self::BatteryDrained,
335            18 => Self::SuspensionFailure,
336            19 => Self::CriticalDriverFailure,
337            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
338        }
339    }
340
341    #[inline]
342    pub fn unknown() -> Self {
343        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
344    }
345
346    #[inline]
347    pub const fn into_primitive(self) -> u32 {
348        match self {
349            Self::UserRequest => 1,
350            Self::UserRequestDeviceStuck => 16,
351            Self::DeveloperRequest => 2,
352            Self::SystemUpdate => 3,
353            Self::RetrySystemUpdate => 4,
354            Self::HighTemperature => 5,
355            Self::FactoryDataReset => 6,
356            Self::SessionFailure => 7,
357            Self::CriticalComponentFailure => 8,
358            Self::ZbiSwap => 9,
359            Self::OutOfMemory => 10,
360            Self::NetstackMigration => 11,
361            Self::AndroidUnexpectedReason => 12,
362            Self::StarnixContainerNoReason => 15,
363            Self::AndroidRescueParty => 13,
364            Self::AndroidCriticalProcessFailure => 14,
365            Self::BatteryDrained => 17,
366            Self::SuspensionFailure => 18,
367            Self::CriticalDriverFailure => 19,
368            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
369        }
370    }
371
372    #[inline]
373    pub fn is_unknown(&self) -> bool {
374        match self {
375            Self::__SourceBreaking { unknown_ordinal: _ } => true,
376            _ => false,
377        }
378    }
379}
380
381#[derive(Clone, Debug, PartialEq)]
382pub struct AdminPerformRebootRequest {
383    pub options: RebootOptions,
384}
385
386impl fidl::Persistable for AdminPerformRebootRequest {}
387
388#[derive(Clone, Debug, PartialEq)]
389pub struct AdminShutdownRequest {
390    pub options: ShutdownOptions,
391}
392
393impl fidl::Persistable for AdminShutdownRequest {}
394
395#[derive(Clone, Debug, PartialEq)]
396pub struct RebootWatcherOnRebootRequest {
397    pub options: RebootOptions,
398}
399
400impl fidl::Persistable for RebootWatcherOnRebootRequest {}
401
402#[derive(Clone, Debug, PartialEq)]
403pub struct ShutdownWatcherOnShutdownRequest {
404    pub options: ShutdownOptions,
405}
406
407impl fidl::Persistable for ShutdownWatcherOnShutdownRequest {}
408
409/// The options specified when a reboot is requested.
410#[derive(Clone, Debug, Default, PartialEq)]
411pub struct RebootOptions {
412    /// The set of reboot reasons that are responsible for this reboot request.
413    pub reasons: Option<Vec<RebootReason2>>,
414    #[doc(hidden)]
415    pub __source_breaking: fidl::marker::SourceBreaking,
416}
417
418impl fidl::Persistable for RebootOptions {}
419
420/// The options specified when a shutdown is requested.
421#[derive(Clone, Debug, Default, PartialEq)]
422pub struct ShutdownOptions {
423    pub action: Option<ShutdownAction>,
424    /// The set of shutdown reasons that are responsible for this shutdown request.
425    pub reasons: Option<Vec<ShutdownReason>>,
426    #[doc(hidden)]
427    pub __source_breaking: fidl::marker::SourceBreaking,
428}
429
430impl fidl::Persistable for ShutdownOptions {}
431
432pub mod admin_ordinals {
433    pub const POWER_FULLY_ON: u64 = 0xb3272d15e00712f;
434    pub const SHUTDOWN: u64 = 0x3722c53e45dc022f;
435    pub const PERFORM_REBOOT: u64 = 0x9416b4d36a80b4;
436    pub const REBOOT_TO_BOOTLOADER: u64 = 0x6dce331b33786aa;
437    pub const REBOOT_TO_RECOVERY: u64 = 0x1575c566be54f505;
438    pub const POWEROFF: u64 = 0x24101c5d0b439748;
439    pub const MEXEC: u64 = 0x1f91e77ec781a4c6;
440    pub const SUSPEND_TO_RAM: u64 = 0x3b0e356782e7620e;
441}
442
443pub mod reboot_methods_watcher_register_ordinals {
444    pub const REGISTER_WATCHER: u64 = 0x3e6610e78471238;
445}
446
447pub mod reboot_watcher_ordinals {
448    pub const ON_REBOOT: u64 = 0x5334bbbe774f13c3;
449}
450
451pub mod shutdown_watcher_ordinals {
452    pub const ON_SHUTDOWN: u64 = 0x1d9467990d7dc6db;
453}
454
455pub mod shutdown_watcher_register_ordinals {
456    pub const REGISTER_WATCHER: u64 = 0x3db6ce5d34810aff;
457    pub const REGISTER_TERMINAL_STATE_WATCHER: u64 = 0x1cce7216bb7869fc;
458}
459
460pub mod terminal_state_watcher_ordinals {
461    pub const ON_TERMINAL_STATE_TRANSITION_STARTED: u64 = 0x25d95d9d1ae60f10;
462}
463
464mod internal {
465    use super::*;
466    unsafe impl fidl::encoding::TypeMarker for RebootReason2 {
467        type Owned = Self;
468
469        #[inline(always)]
470        fn inline_align(_context: fidl::encoding::Context) -> usize {
471            std::mem::align_of::<u32>()
472        }
473
474        #[inline(always)]
475        fn inline_size(_context: fidl::encoding::Context) -> usize {
476            std::mem::size_of::<u32>()
477        }
478
479        #[inline(always)]
480        fn encode_is_copy() -> bool {
481            false
482        }
483
484        #[inline(always)]
485        fn decode_is_copy() -> bool {
486            false
487        }
488    }
489
490    impl fidl::encoding::ValueTypeMarker for RebootReason2 {
491        type Borrowed<'a> = Self;
492        #[inline(always)]
493        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
494            *value
495        }
496    }
497
498    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RebootReason2 {
499        #[inline]
500        unsafe fn encode(
501            self,
502            encoder: &mut fidl::encoding::Encoder<'_, D>,
503            offset: usize,
504            _depth: fidl::encoding::Depth,
505        ) -> fidl::Result<()> {
506            encoder.debug_check_bounds::<Self>(offset);
507            encoder.write_num(self.into_primitive(), offset);
508            Ok(())
509        }
510    }
511
512    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootReason2 {
513        #[inline(always)]
514        fn new_empty() -> Self {
515            Self::unknown()
516        }
517
518        #[inline]
519        unsafe fn decode(
520            &mut self,
521            decoder: &mut fidl::encoding::Decoder<'_, D>,
522            offset: usize,
523            _depth: fidl::encoding::Depth,
524        ) -> fidl::Result<()> {
525            decoder.debug_check_bounds::<Self>(offset);
526            let prim = decoder.read_num::<u32>(offset);
527
528            *self = Self::from_primitive_allow_unknown(prim);
529            Ok(())
530        }
531    }
532    unsafe impl fidl::encoding::TypeMarker for ShutdownAction {
533        type Owned = Self;
534
535        #[inline(always)]
536        fn inline_align(_context: fidl::encoding::Context) -> usize {
537            std::mem::align_of::<u32>()
538        }
539
540        #[inline(always)]
541        fn inline_size(_context: fidl::encoding::Context) -> usize {
542            std::mem::size_of::<u32>()
543        }
544
545        #[inline(always)]
546        fn encode_is_copy() -> bool {
547            false
548        }
549
550        #[inline(always)]
551        fn decode_is_copy() -> bool {
552            false
553        }
554    }
555
556    impl fidl::encoding::ValueTypeMarker for ShutdownAction {
557        type Borrowed<'a> = Self;
558        #[inline(always)]
559        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
560            *value
561        }
562    }
563
564    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ShutdownAction {
565        #[inline]
566        unsafe fn encode(
567            self,
568            encoder: &mut fidl::encoding::Encoder<'_, D>,
569            offset: usize,
570            _depth: fidl::encoding::Depth,
571        ) -> fidl::Result<()> {
572            encoder.debug_check_bounds::<Self>(offset);
573            encoder.write_num(self.into_primitive(), offset);
574            Ok(())
575        }
576    }
577
578    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownAction {
579        #[inline(always)]
580        fn new_empty() -> Self {
581            Self::unknown()
582        }
583
584        #[inline]
585        unsafe fn decode(
586            &mut self,
587            decoder: &mut fidl::encoding::Decoder<'_, D>,
588            offset: usize,
589            _depth: fidl::encoding::Depth,
590        ) -> fidl::Result<()> {
591            decoder.debug_check_bounds::<Self>(offset);
592            let prim = decoder.read_num::<u32>(offset);
593
594            *self = Self::from_primitive_allow_unknown(prim);
595            Ok(())
596        }
597    }
598    unsafe impl fidl::encoding::TypeMarker for ShutdownReason {
599        type Owned = Self;
600
601        #[inline(always)]
602        fn inline_align(_context: fidl::encoding::Context) -> usize {
603            std::mem::align_of::<u32>()
604        }
605
606        #[inline(always)]
607        fn inline_size(_context: fidl::encoding::Context) -> usize {
608            std::mem::size_of::<u32>()
609        }
610
611        #[inline(always)]
612        fn encode_is_copy() -> bool {
613            false
614        }
615
616        #[inline(always)]
617        fn decode_is_copy() -> bool {
618            false
619        }
620    }
621
622    impl fidl::encoding::ValueTypeMarker for ShutdownReason {
623        type Borrowed<'a> = Self;
624        #[inline(always)]
625        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
626            *value
627        }
628    }
629
630    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ShutdownReason {
631        #[inline]
632        unsafe fn encode(
633            self,
634            encoder: &mut fidl::encoding::Encoder<'_, D>,
635            offset: usize,
636            _depth: fidl::encoding::Depth,
637        ) -> fidl::Result<()> {
638            encoder.debug_check_bounds::<Self>(offset);
639            encoder.write_num(self.into_primitive(), offset);
640            Ok(())
641        }
642    }
643
644    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownReason {
645        #[inline(always)]
646        fn new_empty() -> Self {
647            Self::unknown()
648        }
649
650        #[inline]
651        unsafe fn decode(
652            &mut self,
653            decoder: &mut fidl::encoding::Decoder<'_, D>,
654            offset: usize,
655            _depth: fidl::encoding::Depth,
656        ) -> fidl::Result<()> {
657            decoder.debug_check_bounds::<Self>(offset);
658            let prim = decoder.read_num::<u32>(offset);
659
660            *self = Self::from_primitive_allow_unknown(prim);
661            Ok(())
662        }
663    }
664
665    impl fidl::encoding::ValueTypeMarker for AdminPerformRebootRequest {
666        type Borrowed<'a> = &'a Self;
667        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
668            value
669        }
670    }
671
672    unsafe impl fidl::encoding::TypeMarker for AdminPerformRebootRequest {
673        type Owned = Self;
674
675        #[inline(always)]
676        fn inline_align(_context: fidl::encoding::Context) -> usize {
677            8
678        }
679
680        #[inline(always)]
681        fn inline_size(_context: fidl::encoding::Context) -> usize {
682            16
683        }
684    }
685
686    unsafe impl<D: fidl::encoding::ResourceDialect>
687        fidl::encoding::Encode<AdminPerformRebootRequest, D> for &AdminPerformRebootRequest
688    {
689        #[inline]
690        unsafe fn encode(
691            self,
692            encoder: &mut fidl::encoding::Encoder<'_, D>,
693            offset: usize,
694            _depth: fidl::encoding::Depth,
695        ) -> fidl::Result<()> {
696            encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
697            // Delegate to tuple encoding.
698            fidl::encoding::Encode::<AdminPerformRebootRequest, D>::encode(
699                (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
700                encoder,
701                offset,
702                _depth,
703            )
704        }
705    }
706    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
707        fidl::encoding::Encode<AdminPerformRebootRequest, D> for (T0,)
708    {
709        #[inline]
710        unsafe fn encode(
711            self,
712            encoder: &mut fidl::encoding::Encoder<'_, D>,
713            offset: usize,
714            depth: fidl::encoding::Depth,
715        ) -> fidl::Result<()> {
716            encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
717            // Zero out padding regions. There's no need to apply masks
718            // because the unmasked parts will be overwritten by fields.
719            // Write the fields.
720            self.0.encode(encoder, offset + 0, depth)?;
721            Ok(())
722        }
723    }
724
725    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
726        for AdminPerformRebootRequest
727    {
728        #[inline(always)]
729        fn new_empty() -> Self {
730            Self { options: fidl::new_empty!(RebootOptions, D) }
731        }
732
733        #[inline]
734        unsafe fn decode(
735            &mut self,
736            decoder: &mut fidl::encoding::Decoder<'_, D>,
737            offset: usize,
738            _depth: fidl::encoding::Depth,
739        ) -> fidl::Result<()> {
740            decoder.debug_check_bounds::<Self>(offset);
741            // Verify that padding bytes are zero.
742            fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
743            Ok(())
744        }
745    }
746
747    impl fidl::encoding::ValueTypeMarker for AdminShutdownRequest {
748        type Borrowed<'a> = &'a Self;
749        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
750            value
751        }
752    }
753
754    unsafe impl fidl::encoding::TypeMarker for AdminShutdownRequest {
755        type Owned = Self;
756
757        #[inline(always)]
758        fn inline_align(_context: fidl::encoding::Context) -> usize {
759            8
760        }
761
762        #[inline(always)]
763        fn inline_size(_context: fidl::encoding::Context) -> usize {
764            16
765        }
766    }
767
768    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdminShutdownRequest, D>
769        for &AdminShutdownRequest
770    {
771        #[inline]
772        unsafe fn encode(
773            self,
774            encoder: &mut fidl::encoding::Encoder<'_, D>,
775            offset: usize,
776            _depth: fidl::encoding::Depth,
777        ) -> fidl::Result<()> {
778            encoder.debug_check_bounds::<AdminShutdownRequest>(offset);
779            // Delegate to tuple encoding.
780            fidl::encoding::Encode::<AdminShutdownRequest, D>::encode(
781                (<ShutdownOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
782                encoder,
783                offset,
784                _depth,
785            )
786        }
787    }
788    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ShutdownOptions, D>>
789        fidl::encoding::Encode<AdminShutdownRequest, D> for (T0,)
790    {
791        #[inline]
792        unsafe fn encode(
793            self,
794            encoder: &mut fidl::encoding::Encoder<'_, D>,
795            offset: usize,
796            depth: fidl::encoding::Depth,
797        ) -> fidl::Result<()> {
798            encoder.debug_check_bounds::<AdminShutdownRequest>(offset);
799            // Zero out padding regions. There's no need to apply masks
800            // because the unmasked parts will be overwritten by fields.
801            // Write the fields.
802            self.0.encode(encoder, offset + 0, depth)?;
803            Ok(())
804        }
805    }
806
807    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdminShutdownRequest {
808        #[inline(always)]
809        fn new_empty() -> Self {
810            Self { options: fidl::new_empty!(ShutdownOptions, D) }
811        }
812
813        #[inline]
814        unsafe fn decode(
815            &mut self,
816            decoder: &mut fidl::encoding::Decoder<'_, D>,
817            offset: usize,
818            _depth: fidl::encoding::Depth,
819        ) -> fidl::Result<()> {
820            decoder.debug_check_bounds::<Self>(offset);
821            // Verify that padding bytes are zero.
822            fidl::decode!(ShutdownOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
823            Ok(())
824        }
825    }
826
827    impl fidl::encoding::ValueTypeMarker for RebootWatcherOnRebootRequest {
828        type Borrowed<'a> = &'a Self;
829        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
830            value
831        }
832    }
833
834    unsafe impl fidl::encoding::TypeMarker for RebootWatcherOnRebootRequest {
835        type Owned = Self;
836
837        #[inline(always)]
838        fn inline_align(_context: fidl::encoding::Context) -> usize {
839            8
840        }
841
842        #[inline(always)]
843        fn inline_size(_context: fidl::encoding::Context) -> usize {
844            16
845        }
846    }
847
848    unsafe impl<D: fidl::encoding::ResourceDialect>
849        fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for &RebootWatcherOnRebootRequest
850    {
851        #[inline]
852        unsafe fn encode(
853            self,
854            encoder: &mut fidl::encoding::Encoder<'_, D>,
855            offset: usize,
856            _depth: fidl::encoding::Depth,
857        ) -> fidl::Result<()> {
858            encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
859            // Delegate to tuple encoding.
860            fidl::encoding::Encode::<RebootWatcherOnRebootRequest, D>::encode(
861                (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
862                encoder,
863                offset,
864                _depth,
865            )
866        }
867    }
868    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
869        fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for (T0,)
870    {
871        #[inline]
872        unsafe fn encode(
873            self,
874            encoder: &mut fidl::encoding::Encoder<'_, D>,
875            offset: usize,
876            depth: fidl::encoding::Depth,
877        ) -> fidl::Result<()> {
878            encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
879            // Zero out padding regions. There's no need to apply masks
880            // because the unmasked parts will be overwritten by fields.
881            // Write the fields.
882            self.0.encode(encoder, offset + 0, depth)?;
883            Ok(())
884        }
885    }
886
887    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
888        for RebootWatcherOnRebootRequest
889    {
890        #[inline(always)]
891        fn new_empty() -> Self {
892            Self { options: fidl::new_empty!(RebootOptions, D) }
893        }
894
895        #[inline]
896        unsafe fn decode(
897            &mut self,
898            decoder: &mut fidl::encoding::Decoder<'_, D>,
899            offset: usize,
900            _depth: fidl::encoding::Depth,
901        ) -> fidl::Result<()> {
902            decoder.debug_check_bounds::<Self>(offset);
903            // Verify that padding bytes are zero.
904            fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
905            Ok(())
906        }
907    }
908
909    impl fidl::encoding::ValueTypeMarker for ShutdownWatcherOnShutdownRequest {
910        type Borrowed<'a> = &'a Self;
911        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
912            value
913        }
914    }
915
916    unsafe impl fidl::encoding::TypeMarker for ShutdownWatcherOnShutdownRequest {
917        type Owned = Self;
918
919        #[inline(always)]
920        fn inline_align(_context: fidl::encoding::Context) -> usize {
921            8
922        }
923
924        #[inline(always)]
925        fn inline_size(_context: fidl::encoding::Context) -> usize {
926            16
927        }
928    }
929
930    unsafe impl<D: fidl::encoding::ResourceDialect>
931        fidl::encoding::Encode<ShutdownWatcherOnShutdownRequest, D>
932        for &ShutdownWatcherOnShutdownRequest
933    {
934        #[inline]
935        unsafe fn encode(
936            self,
937            encoder: &mut fidl::encoding::Encoder<'_, D>,
938            offset: usize,
939            _depth: fidl::encoding::Depth,
940        ) -> fidl::Result<()> {
941            encoder.debug_check_bounds::<ShutdownWatcherOnShutdownRequest>(offset);
942            // Delegate to tuple encoding.
943            fidl::encoding::Encode::<ShutdownWatcherOnShutdownRequest, D>::encode(
944                (<ShutdownOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
945                encoder,
946                offset,
947                _depth,
948            )
949        }
950    }
951    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ShutdownOptions, D>>
952        fidl::encoding::Encode<ShutdownWatcherOnShutdownRequest, D> for (T0,)
953    {
954        #[inline]
955        unsafe fn encode(
956            self,
957            encoder: &mut fidl::encoding::Encoder<'_, D>,
958            offset: usize,
959            depth: fidl::encoding::Depth,
960        ) -> fidl::Result<()> {
961            encoder.debug_check_bounds::<ShutdownWatcherOnShutdownRequest>(offset);
962            // Zero out padding regions. There's no need to apply masks
963            // because the unmasked parts will be overwritten by fields.
964            // Write the fields.
965            self.0.encode(encoder, offset + 0, depth)?;
966            Ok(())
967        }
968    }
969
970    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
971        for ShutdownWatcherOnShutdownRequest
972    {
973        #[inline(always)]
974        fn new_empty() -> Self {
975            Self { options: fidl::new_empty!(ShutdownOptions, D) }
976        }
977
978        #[inline]
979        unsafe fn decode(
980            &mut self,
981            decoder: &mut fidl::encoding::Decoder<'_, D>,
982            offset: usize,
983            _depth: fidl::encoding::Depth,
984        ) -> fidl::Result<()> {
985            decoder.debug_check_bounds::<Self>(offset);
986            // Verify that padding bytes are zero.
987            fidl::decode!(ShutdownOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
988            Ok(())
989        }
990    }
991
992    impl RebootOptions {
993        #[inline(always)]
994        fn max_ordinal_present(&self) -> u64 {
995            if let Some(_) = self.reasons {
996                return 1;
997            }
998            0
999        }
1000    }
1001
1002    impl fidl::encoding::ValueTypeMarker for RebootOptions {
1003        type Borrowed<'a> = &'a Self;
1004        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1005            value
1006        }
1007    }
1008
1009    unsafe impl fidl::encoding::TypeMarker for RebootOptions {
1010        type Owned = Self;
1011
1012        #[inline(always)]
1013        fn inline_align(_context: fidl::encoding::Context) -> usize {
1014            8
1015        }
1016
1017        #[inline(always)]
1018        fn inline_size(_context: fidl::encoding::Context) -> usize {
1019            16
1020        }
1021    }
1022
1023    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RebootOptions, D>
1024        for &RebootOptions
1025    {
1026        unsafe fn encode(
1027            self,
1028            encoder: &mut fidl::encoding::Encoder<'_, D>,
1029            offset: usize,
1030            mut depth: fidl::encoding::Depth,
1031        ) -> fidl::Result<()> {
1032            encoder.debug_check_bounds::<RebootOptions>(offset);
1033            // Vector header
1034            let max_ordinal: u64 = self.max_ordinal_present();
1035            encoder.write_num(max_ordinal, offset);
1036            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1037            // Calling encoder.out_of_line_offset(0) is not allowed.
1038            if max_ordinal == 0 {
1039                return Ok(());
1040            }
1041            depth.increment()?;
1042            let envelope_size = 8;
1043            let bytes_len = max_ordinal as usize * envelope_size;
1044            #[allow(unused_variables)]
1045            let offset = encoder.out_of_line_offset(bytes_len);
1046            let mut _prev_end_offset: usize = 0;
1047            if 1 > max_ordinal {
1048                return Ok(());
1049            }
1050
1051            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1052            // are envelope_size bytes.
1053            let cur_offset: usize = (1 - 1) * envelope_size;
1054
1055            // Zero reserved fields.
1056            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1057
1058            // Safety:
1059            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1060            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1061            //   envelope_size bytes, there is always sufficient room.
1062            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RebootReason2, 100>, D>(
1063            self.reasons.as_ref().map(<fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1064            encoder, offset + cur_offset, depth
1065        )?;
1066
1067            _prev_end_offset = cur_offset + envelope_size;
1068
1069            Ok(())
1070        }
1071    }
1072
1073    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootOptions {
1074        #[inline(always)]
1075        fn new_empty() -> Self {
1076            Self::default()
1077        }
1078
1079        unsafe fn decode(
1080            &mut self,
1081            decoder: &mut fidl::encoding::Decoder<'_, D>,
1082            offset: usize,
1083            mut depth: fidl::encoding::Depth,
1084        ) -> fidl::Result<()> {
1085            decoder.debug_check_bounds::<Self>(offset);
1086            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1087                None => return Err(fidl::Error::NotNullable),
1088                Some(len) => len,
1089            };
1090            // Calling decoder.out_of_line_offset(0) is not allowed.
1091            if len == 0 {
1092                return Ok(());
1093            };
1094            depth.increment()?;
1095            let envelope_size = 8;
1096            let bytes_len = len * envelope_size;
1097            let offset = decoder.out_of_line_offset(bytes_len)?;
1098            // Decode the envelope for each type.
1099            let mut _next_ordinal_to_read = 0;
1100            let mut next_offset = offset;
1101            let end_offset = offset + bytes_len;
1102            _next_ordinal_to_read += 1;
1103            if next_offset >= end_offset {
1104                return Ok(());
1105            }
1106
1107            // Decode unknown envelopes for gaps in ordinals.
1108            while _next_ordinal_to_read < 1 {
1109                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1110                _next_ordinal_to_read += 1;
1111                next_offset += envelope_size;
1112            }
1113
1114            let next_out_of_line = decoder.next_out_of_line();
1115            let handles_before = decoder.remaining_handles();
1116            if let Some((inlined, num_bytes, num_handles)) =
1117                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1118            {
1119                let member_inline_size = <fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1120                if inlined != (member_inline_size <= 4) {
1121                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1122                }
1123                let inner_offset;
1124                let mut inner_depth = depth.clone();
1125                if inlined {
1126                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1127                    inner_offset = next_offset;
1128                } else {
1129                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1130                    inner_depth.increment()?;
1131                }
1132                let val_ref = self.reasons.get_or_insert_with(
1133                    || fidl::new_empty!(fidl::encoding::Vector<RebootReason2, 100>, D),
1134                );
1135                fidl::decode!(fidl::encoding::Vector<RebootReason2, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1136                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1137                {
1138                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1139                }
1140                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1141                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1142                }
1143            }
1144
1145            next_offset += envelope_size;
1146
1147            // Decode the remaining unknown envelopes.
1148            while next_offset < end_offset {
1149                _next_ordinal_to_read += 1;
1150                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1151                next_offset += envelope_size;
1152            }
1153
1154            Ok(())
1155        }
1156    }
1157
1158    impl ShutdownOptions {
1159        #[inline(always)]
1160        fn max_ordinal_present(&self) -> u64 {
1161            if let Some(_) = self.reasons {
1162                return 2;
1163            }
1164            if let Some(_) = self.action {
1165                return 1;
1166            }
1167            0
1168        }
1169    }
1170
1171    impl fidl::encoding::ValueTypeMarker for ShutdownOptions {
1172        type Borrowed<'a> = &'a Self;
1173        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1174            value
1175        }
1176    }
1177
1178    unsafe impl fidl::encoding::TypeMarker for ShutdownOptions {
1179        type Owned = Self;
1180
1181        #[inline(always)]
1182        fn inline_align(_context: fidl::encoding::Context) -> usize {
1183            8
1184        }
1185
1186        #[inline(always)]
1187        fn inline_size(_context: fidl::encoding::Context) -> usize {
1188            16
1189        }
1190    }
1191
1192    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ShutdownOptions, D>
1193        for &ShutdownOptions
1194    {
1195        unsafe fn encode(
1196            self,
1197            encoder: &mut fidl::encoding::Encoder<'_, D>,
1198            offset: usize,
1199            mut depth: fidl::encoding::Depth,
1200        ) -> fidl::Result<()> {
1201            encoder.debug_check_bounds::<ShutdownOptions>(offset);
1202            // Vector header
1203            let max_ordinal: u64 = self.max_ordinal_present();
1204            encoder.write_num(max_ordinal, offset);
1205            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1206            // Calling encoder.out_of_line_offset(0) is not allowed.
1207            if max_ordinal == 0 {
1208                return Ok(());
1209            }
1210            depth.increment()?;
1211            let envelope_size = 8;
1212            let bytes_len = max_ordinal as usize * envelope_size;
1213            #[allow(unused_variables)]
1214            let offset = encoder.out_of_line_offset(bytes_len);
1215            let mut _prev_end_offset: usize = 0;
1216            if 1 > max_ordinal {
1217                return Ok(());
1218            }
1219
1220            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1221            // are envelope_size bytes.
1222            let cur_offset: usize = (1 - 1) * envelope_size;
1223
1224            // Zero reserved fields.
1225            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1226
1227            // Safety:
1228            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1229            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1230            //   envelope_size bytes, there is always sufficient room.
1231            fidl::encoding::encode_in_envelope_optional::<ShutdownAction, D>(
1232                self.action
1233                    .as_ref()
1234                    .map(<ShutdownAction as fidl::encoding::ValueTypeMarker>::borrow),
1235                encoder,
1236                offset + cur_offset,
1237                depth,
1238            )?;
1239
1240            _prev_end_offset = cur_offset + envelope_size;
1241            if 2 > max_ordinal {
1242                return Ok(());
1243            }
1244
1245            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1246            // are envelope_size bytes.
1247            let cur_offset: usize = (2 - 1) * envelope_size;
1248
1249            // Zero reserved fields.
1250            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1251
1252            // Safety:
1253            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1254            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1255            //   envelope_size bytes, there is always sufficient room.
1256            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ShutdownReason, 100>, D>(
1257            self.reasons.as_ref().map(<fidl::encoding::Vector<ShutdownReason, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1258            encoder, offset + cur_offset, depth
1259        )?;
1260
1261            _prev_end_offset = cur_offset + envelope_size;
1262
1263            Ok(())
1264        }
1265    }
1266
1267    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownOptions {
1268        #[inline(always)]
1269        fn new_empty() -> Self {
1270            Self::default()
1271        }
1272
1273        unsafe fn decode(
1274            &mut self,
1275            decoder: &mut fidl::encoding::Decoder<'_, D>,
1276            offset: usize,
1277            mut depth: fidl::encoding::Depth,
1278        ) -> fidl::Result<()> {
1279            decoder.debug_check_bounds::<Self>(offset);
1280            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1281                None => return Err(fidl::Error::NotNullable),
1282                Some(len) => len,
1283            };
1284            // Calling decoder.out_of_line_offset(0) is not allowed.
1285            if len == 0 {
1286                return Ok(());
1287            };
1288            depth.increment()?;
1289            let envelope_size = 8;
1290            let bytes_len = len * envelope_size;
1291            let offset = decoder.out_of_line_offset(bytes_len)?;
1292            // Decode the envelope for each type.
1293            let mut _next_ordinal_to_read = 0;
1294            let mut next_offset = offset;
1295            let end_offset = offset + bytes_len;
1296            _next_ordinal_to_read += 1;
1297            if next_offset >= end_offset {
1298                return Ok(());
1299            }
1300
1301            // Decode unknown envelopes for gaps in ordinals.
1302            while _next_ordinal_to_read < 1 {
1303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1304                _next_ordinal_to_read += 1;
1305                next_offset += envelope_size;
1306            }
1307
1308            let next_out_of_line = decoder.next_out_of_line();
1309            let handles_before = decoder.remaining_handles();
1310            if let Some((inlined, num_bytes, num_handles)) =
1311                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1312            {
1313                let member_inline_size =
1314                    <ShutdownAction as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1315                if inlined != (member_inline_size <= 4) {
1316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1317                }
1318                let inner_offset;
1319                let mut inner_depth = depth.clone();
1320                if inlined {
1321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1322                    inner_offset = next_offset;
1323                } else {
1324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1325                    inner_depth.increment()?;
1326                }
1327                let val_ref =
1328                    self.action.get_or_insert_with(|| fidl::new_empty!(ShutdownAction, D));
1329                fidl::decode!(ShutdownAction, D, val_ref, decoder, inner_offset, inner_depth)?;
1330                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1331                {
1332                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1333                }
1334                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1335                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1336                }
1337            }
1338
1339            next_offset += envelope_size;
1340            _next_ordinal_to_read += 1;
1341            if next_offset >= end_offset {
1342                return Ok(());
1343            }
1344
1345            // Decode unknown envelopes for gaps in ordinals.
1346            while _next_ordinal_to_read < 2 {
1347                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1348                _next_ordinal_to_read += 1;
1349                next_offset += envelope_size;
1350            }
1351
1352            let next_out_of_line = decoder.next_out_of_line();
1353            let handles_before = decoder.remaining_handles();
1354            if let Some((inlined, num_bytes, num_handles)) =
1355                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1356            {
1357                let member_inline_size = <fidl::encoding::Vector<ShutdownReason, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1358                if inlined != (member_inline_size <= 4) {
1359                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1360                }
1361                let inner_offset;
1362                let mut inner_depth = depth.clone();
1363                if inlined {
1364                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1365                    inner_offset = next_offset;
1366                } else {
1367                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1368                    inner_depth.increment()?;
1369                }
1370                let val_ref = self.reasons.get_or_insert_with(
1371                    || fidl::new_empty!(fidl::encoding::Vector<ShutdownReason, 100>, D),
1372                );
1373                fidl::decode!(fidl::encoding::Vector<ShutdownReason, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1374                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1375                {
1376                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1377                }
1378                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1379                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1380                }
1381            }
1382
1383            next_offset += envelope_size;
1384
1385            // Decode the remaining unknown envelopes.
1386            while next_offset < end_offset {
1387                _next_ordinal_to_read += 1;
1388                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1389                next_offset += envelope_size;
1390            }
1391
1392            Ok(())
1393        }
1394    }
1395}