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    /// The system failed to transition between power levels within the expected time.
277    PowerLevelTransitionStuck,
278    #[doc(hidden)]
279    __SourceBreaking { unknown_ordinal: u32 },
280}
281
282/// Pattern that matches an unknown `ShutdownReason` member.
283#[macro_export]
284macro_rules! ShutdownReasonUnknown {
285    () => {
286        _
287    };
288}
289
290impl ShutdownReason {
291    #[inline]
292    pub fn from_primitive(prim: u32) -> Option<Self> {
293        match prim {
294            1 => Some(Self::UserRequest),
295            16 => Some(Self::UserRequestDeviceStuck),
296            2 => Some(Self::DeveloperRequest),
297            3 => Some(Self::SystemUpdate),
298            4 => Some(Self::RetrySystemUpdate),
299            5 => Some(Self::HighTemperature),
300            6 => Some(Self::FactoryDataReset),
301            7 => Some(Self::SessionFailure),
302            8 => Some(Self::CriticalComponentFailure),
303            9 => Some(Self::ZbiSwap),
304            10 => Some(Self::OutOfMemory),
305            11 => Some(Self::NetstackMigration),
306            12 => Some(Self::AndroidUnexpectedReason),
307            15 => Some(Self::StarnixContainerNoReason),
308            13 => Some(Self::AndroidRescueParty),
309            14 => Some(Self::AndroidCriticalProcessFailure),
310            17 => Some(Self::BatteryDrained),
311            18 => Some(Self::SuspensionFailure),
312            19 => Some(Self::CriticalDriverFailure),
313            20 => Some(Self::PowerLevelTransitionStuck),
314            _ => None,
315        }
316    }
317
318    #[inline]
319    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
320        match prim {
321            1 => Self::UserRequest,
322            16 => Self::UserRequestDeviceStuck,
323            2 => Self::DeveloperRequest,
324            3 => Self::SystemUpdate,
325            4 => Self::RetrySystemUpdate,
326            5 => Self::HighTemperature,
327            6 => Self::FactoryDataReset,
328            7 => Self::SessionFailure,
329            8 => Self::CriticalComponentFailure,
330            9 => Self::ZbiSwap,
331            10 => Self::OutOfMemory,
332            11 => Self::NetstackMigration,
333            12 => Self::AndroidUnexpectedReason,
334            15 => Self::StarnixContainerNoReason,
335            13 => Self::AndroidRescueParty,
336            14 => Self::AndroidCriticalProcessFailure,
337            17 => Self::BatteryDrained,
338            18 => Self::SuspensionFailure,
339            19 => Self::CriticalDriverFailure,
340            20 => Self::PowerLevelTransitionStuck,
341            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
342        }
343    }
344
345    #[inline]
346    pub fn unknown() -> Self {
347        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
348    }
349
350    #[inline]
351    pub const fn into_primitive(self) -> u32 {
352        match self {
353            Self::UserRequest => 1,
354            Self::UserRequestDeviceStuck => 16,
355            Self::DeveloperRequest => 2,
356            Self::SystemUpdate => 3,
357            Self::RetrySystemUpdate => 4,
358            Self::HighTemperature => 5,
359            Self::FactoryDataReset => 6,
360            Self::SessionFailure => 7,
361            Self::CriticalComponentFailure => 8,
362            Self::ZbiSwap => 9,
363            Self::OutOfMemory => 10,
364            Self::NetstackMigration => 11,
365            Self::AndroidUnexpectedReason => 12,
366            Self::StarnixContainerNoReason => 15,
367            Self::AndroidRescueParty => 13,
368            Self::AndroidCriticalProcessFailure => 14,
369            Self::BatteryDrained => 17,
370            Self::SuspensionFailure => 18,
371            Self::CriticalDriverFailure => 19,
372            Self::PowerLevelTransitionStuck => 20,
373            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
374        }
375    }
376
377    #[inline]
378    pub fn is_unknown(&self) -> bool {
379        match self {
380            Self::__SourceBreaking { unknown_ordinal: _ } => true,
381            _ => false,
382        }
383    }
384}
385
386#[derive(Clone, Debug, PartialEq)]
387pub struct AdminPerformRebootRequest {
388    pub options: RebootOptions,
389}
390
391impl fidl::Persistable for AdminPerformRebootRequest {}
392
393#[derive(Clone, Debug, PartialEq)]
394pub struct AdminShutdownRequest {
395    pub options: ShutdownOptions,
396}
397
398impl fidl::Persistable for AdminShutdownRequest {}
399
400#[derive(Clone, Debug, PartialEq)]
401pub struct RebootWatcherOnRebootRequest {
402    pub options: RebootOptions,
403}
404
405impl fidl::Persistable for RebootWatcherOnRebootRequest {}
406
407#[derive(Clone, Debug, PartialEq)]
408pub struct ShutdownWatcherOnShutdownRequest {
409    pub options: ShutdownOptions,
410}
411
412impl fidl::Persistable for ShutdownWatcherOnShutdownRequest {}
413
414/// The options specified when a reboot is requested.
415#[derive(Clone, Debug, Default, PartialEq)]
416pub struct RebootOptions {
417    /// The set of reboot reasons that are responsible for this reboot request.
418    pub reasons: Option<Vec<RebootReason2>>,
419    #[doc(hidden)]
420    pub __source_breaking: fidl::marker::SourceBreaking,
421}
422
423impl fidl::Persistable for RebootOptions {}
424
425/// The options specified when a shutdown is requested.
426#[derive(Clone, Debug, Default, PartialEq)]
427pub struct ShutdownOptions {
428    pub action: Option<ShutdownAction>,
429    /// The set of shutdown reasons that are responsible for this shutdown request.
430    pub reasons: Option<Vec<ShutdownReason>>,
431    #[doc(hidden)]
432    pub __source_breaking: fidl::marker::SourceBreaking,
433}
434
435impl fidl::Persistable for ShutdownOptions {}
436
437pub mod admin_ordinals {
438    pub const POWER_FULLY_ON: u64 = 0xb3272d15e00712f;
439    pub const SHUTDOWN: u64 = 0x3722c53e45dc022f;
440    pub const PERFORM_REBOOT: u64 = 0x9416b4d36a80b4;
441    pub const REBOOT_TO_BOOTLOADER: u64 = 0x6dce331b33786aa;
442    pub const REBOOT_TO_RECOVERY: u64 = 0x1575c566be54f505;
443    pub const POWEROFF: u64 = 0x24101c5d0b439748;
444    pub const MEXEC: u64 = 0x1f91e77ec781a4c6;
445    pub const SUSPEND_TO_RAM: u64 = 0x3b0e356782e7620e;
446}
447
448pub mod reboot_methods_watcher_register_ordinals {
449    pub const REGISTER_WATCHER: u64 = 0x3e6610e78471238;
450}
451
452pub mod reboot_watcher_ordinals {
453    pub const ON_REBOOT: u64 = 0x5334bbbe774f13c3;
454}
455
456pub mod shutdown_watcher_ordinals {
457    pub const ON_SHUTDOWN: u64 = 0x1d9467990d7dc6db;
458}
459
460pub mod shutdown_watcher_register_ordinals {
461    pub const REGISTER_WATCHER: u64 = 0x3db6ce5d34810aff;
462    pub const REGISTER_TERMINAL_STATE_WATCHER: u64 = 0x1cce7216bb7869fc;
463}
464
465pub mod terminal_state_watcher_ordinals {
466    pub const ON_TERMINAL_STATE_TRANSITION_STARTED: u64 = 0x25d95d9d1ae60f10;
467}
468
469mod internal {
470    use super::*;
471    unsafe impl fidl::encoding::TypeMarker for RebootReason2 {
472        type Owned = Self;
473
474        #[inline(always)]
475        fn inline_align(_context: fidl::encoding::Context) -> usize {
476            std::mem::align_of::<u32>()
477        }
478
479        #[inline(always)]
480        fn inline_size(_context: fidl::encoding::Context) -> usize {
481            std::mem::size_of::<u32>()
482        }
483
484        #[inline(always)]
485        fn encode_is_copy() -> bool {
486            false
487        }
488
489        #[inline(always)]
490        fn decode_is_copy() -> bool {
491            false
492        }
493    }
494
495    impl fidl::encoding::ValueTypeMarker for RebootReason2 {
496        type Borrowed<'a> = Self;
497        #[inline(always)]
498        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
499            *value
500        }
501    }
502
503    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RebootReason2 {
504        #[inline]
505        unsafe fn encode(
506            self,
507            encoder: &mut fidl::encoding::Encoder<'_, D>,
508            offset: usize,
509            _depth: fidl::encoding::Depth,
510        ) -> fidl::Result<()> {
511            encoder.debug_check_bounds::<Self>(offset);
512            encoder.write_num(self.into_primitive(), offset);
513            Ok(())
514        }
515    }
516
517    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootReason2 {
518        #[inline(always)]
519        fn new_empty() -> Self {
520            Self::unknown()
521        }
522
523        #[inline]
524        unsafe fn decode(
525            &mut self,
526            decoder: &mut fidl::encoding::Decoder<'_, D>,
527            offset: usize,
528            _depth: fidl::encoding::Depth,
529        ) -> fidl::Result<()> {
530            decoder.debug_check_bounds::<Self>(offset);
531            let prim = decoder.read_num::<u32>(offset);
532
533            *self = Self::from_primitive_allow_unknown(prim);
534            Ok(())
535        }
536    }
537    unsafe impl fidl::encoding::TypeMarker for ShutdownAction {
538        type Owned = Self;
539
540        #[inline(always)]
541        fn inline_align(_context: fidl::encoding::Context) -> usize {
542            std::mem::align_of::<u32>()
543        }
544
545        #[inline(always)]
546        fn inline_size(_context: fidl::encoding::Context) -> usize {
547            std::mem::size_of::<u32>()
548        }
549
550        #[inline(always)]
551        fn encode_is_copy() -> bool {
552            false
553        }
554
555        #[inline(always)]
556        fn decode_is_copy() -> bool {
557            false
558        }
559    }
560
561    impl fidl::encoding::ValueTypeMarker for ShutdownAction {
562        type Borrowed<'a> = Self;
563        #[inline(always)]
564        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
565            *value
566        }
567    }
568
569    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ShutdownAction {
570        #[inline]
571        unsafe fn encode(
572            self,
573            encoder: &mut fidl::encoding::Encoder<'_, D>,
574            offset: usize,
575            _depth: fidl::encoding::Depth,
576        ) -> fidl::Result<()> {
577            encoder.debug_check_bounds::<Self>(offset);
578            encoder.write_num(self.into_primitive(), offset);
579            Ok(())
580        }
581    }
582
583    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownAction {
584        #[inline(always)]
585        fn new_empty() -> Self {
586            Self::unknown()
587        }
588
589        #[inline]
590        unsafe fn decode(
591            &mut self,
592            decoder: &mut fidl::encoding::Decoder<'_, D>,
593            offset: usize,
594            _depth: fidl::encoding::Depth,
595        ) -> fidl::Result<()> {
596            decoder.debug_check_bounds::<Self>(offset);
597            let prim = decoder.read_num::<u32>(offset);
598
599            *self = Self::from_primitive_allow_unknown(prim);
600            Ok(())
601        }
602    }
603    unsafe impl fidl::encoding::TypeMarker for ShutdownReason {
604        type Owned = Self;
605
606        #[inline(always)]
607        fn inline_align(_context: fidl::encoding::Context) -> usize {
608            std::mem::align_of::<u32>()
609        }
610
611        #[inline(always)]
612        fn inline_size(_context: fidl::encoding::Context) -> usize {
613            std::mem::size_of::<u32>()
614        }
615
616        #[inline(always)]
617        fn encode_is_copy() -> bool {
618            false
619        }
620
621        #[inline(always)]
622        fn decode_is_copy() -> bool {
623            false
624        }
625    }
626
627    impl fidl::encoding::ValueTypeMarker for ShutdownReason {
628        type Borrowed<'a> = Self;
629        #[inline(always)]
630        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
631            *value
632        }
633    }
634
635    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ShutdownReason {
636        #[inline]
637        unsafe fn encode(
638            self,
639            encoder: &mut fidl::encoding::Encoder<'_, D>,
640            offset: usize,
641            _depth: fidl::encoding::Depth,
642        ) -> fidl::Result<()> {
643            encoder.debug_check_bounds::<Self>(offset);
644            encoder.write_num(self.into_primitive(), offset);
645            Ok(())
646        }
647    }
648
649    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownReason {
650        #[inline(always)]
651        fn new_empty() -> Self {
652            Self::unknown()
653        }
654
655        #[inline]
656        unsafe fn decode(
657            &mut self,
658            decoder: &mut fidl::encoding::Decoder<'_, D>,
659            offset: usize,
660            _depth: fidl::encoding::Depth,
661        ) -> fidl::Result<()> {
662            decoder.debug_check_bounds::<Self>(offset);
663            let prim = decoder.read_num::<u32>(offset);
664
665            *self = Self::from_primitive_allow_unknown(prim);
666            Ok(())
667        }
668    }
669
670    impl fidl::encoding::ValueTypeMarker for AdminPerformRebootRequest {
671        type Borrowed<'a> = &'a Self;
672        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
673            value
674        }
675    }
676
677    unsafe impl fidl::encoding::TypeMarker for AdminPerformRebootRequest {
678        type Owned = Self;
679
680        #[inline(always)]
681        fn inline_align(_context: fidl::encoding::Context) -> usize {
682            8
683        }
684
685        #[inline(always)]
686        fn inline_size(_context: fidl::encoding::Context) -> usize {
687            16
688        }
689    }
690
691    unsafe impl<D: fidl::encoding::ResourceDialect>
692        fidl::encoding::Encode<AdminPerformRebootRequest, D> for &AdminPerformRebootRequest
693    {
694        #[inline]
695        unsafe fn encode(
696            self,
697            encoder: &mut fidl::encoding::Encoder<'_, D>,
698            offset: usize,
699            _depth: fidl::encoding::Depth,
700        ) -> fidl::Result<()> {
701            encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
702            // Delegate to tuple encoding.
703            fidl::encoding::Encode::<AdminPerformRebootRequest, D>::encode(
704                (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
705                encoder,
706                offset,
707                _depth,
708            )
709        }
710    }
711    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
712        fidl::encoding::Encode<AdminPerformRebootRequest, D> for (T0,)
713    {
714        #[inline]
715        unsafe fn encode(
716            self,
717            encoder: &mut fidl::encoding::Encoder<'_, D>,
718            offset: usize,
719            depth: fidl::encoding::Depth,
720        ) -> fidl::Result<()> {
721            encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
722            // Zero out padding regions. There's no need to apply masks
723            // because the unmasked parts will be overwritten by fields.
724            // Write the fields.
725            self.0.encode(encoder, offset + 0, depth)?;
726            Ok(())
727        }
728    }
729
730    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
731        for AdminPerformRebootRequest
732    {
733        #[inline(always)]
734        fn new_empty() -> Self {
735            Self { options: fidl::new_empty!(RebootOptions, D) }
736        }
737
738        #[inline]
739        unsafe fn decode(
740            &mut self,
741            decoder: &mut fidl::encoding::Decoder<'_, D>,
742            offset: usize,
743            _depth: fidl::encoding::Depth,
744        ) -> fidl::Result<()> {
745            decoder.debug_check_bounds::<Self>(offset);
746            // Verify that padding bytes are zero.
747            fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
748            Ok(())
749        }
750    }
751
752    impl fidl::encoding::ValueTypeMarker for AdminShutdownRequest {
753        type Borrowed<'a> = &'a Self;
754        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
755            value
756        }
757    }
758
759    unsafe impl fidl::encoding::TypeMarker for AdminShutdownRequest {
760        type Owned = Self;
761
762        #[inline(always)]
763        fn inline_align(_context: fidl::encoding::Context) -> usize {
764            8
765        }
766
767        #[inline(always)]
768        fn inline_size(_context: fidl::encoding::Context) -> usize {
769            16
770        }
771    }
772
773    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdminShutdownRequest, D>
774        for &AdminShutdownRequest
775    {
776        #[inline]
777        unsafe fn encode(
778            self,
779            encoder: &mut fidl::encoding::Encoder<'_, D>,
780            offset: usize,
781            _depth: fidl::encoding::Depth,
782        ) -> fidl::Result<()> {
783            encoder.debug_check_bounds::<AdminShutdownRequest>(offset);
784            // Delegate to tuple encoding.
785            fidl::encoding::Encode::<AdminShutdownRequest, D>::encode(
786                (<ShutdownOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
787                encoder,
788                offset,
789                _depth,
790            )
791        }
792    }
793    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ShutdownOptions, D>>
794        fidl::encoding::Encode<AdminShutdownRequest, D> for (T0,)
795    {
796        #[inline]
797        unsafe fn encode(
798            self,
799            encoder: &mut fidl::encoding::Encoder<'_, D>,
800            offset: usize,
801            depth: fidl::encoding::Depth,
802        ) -> fidl::Result<()> {
803            encoder.debug_check_bounds::<AdminShutdownRequest>(offset);
804            // Zero out padding regions. There's no need to apply masks
805            // because the unmasked parts will be overwritten by fields.
806            // Write the fields.
807            self.0.encode(encoder, offset + 0, depth)?;
808            Ok(())
809        }
810    }
811
812    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdminShutdownRequest {
813        #[inline(always)]
814        fn new_empty() -> Self {
815            Self { options: fidl::new_empty!(ShutdownOptions, D) }
816        }
817
818        #[inline]
819        unsafe fn decode(
820            &mut self,
821            decoder: &mut fidl::encoding::Decoder<'_, D>,
822            offset: usize,
823            _depth: fidl::encoding::Depth,
824        ) -> fidl::Result<()> {
825            decoder.debug_check_bounds::<Self>(offset);
826            // Verify that padding bytes are zero.
827            fidl::decode!(ShutdownOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
828            Ok(())
829        }
830    }
831
832    impl fidl::encoding::ValueTypeMarker for RebootWatcherOnRebootRequest {
833        type Borrowed<'a> = &'a Self;
834        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
835            value
836        }
837    }
838
839    unsafe impl fidl::encoding::TypeMarker for RebootWatcherOnRebootRequest {
840        type Owned = Self;
841
842        #[inline(always)]
843        fn inline_align(_context: fidl::encoding::Context) -> usize {
844            8
845        }
846
847        #[inline(always)]
848        fn inline_size(_context: fidl::encoding::Context) -> usize {
849            16
850        }
851    }
852
853    unsafe impl<D: fidl::encoding::ResourceDialect>
854        fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for &RebootWatcherOnRebootRequest
855    {
856        #[inline]
857        unsafe fn encode(
858            self,
859            encoder: &mut fidl::encoding::Encoder<'_, D>,
860            offset: usize,
861            _depth: fidl::encoding::Depth,
862        ) -> fidl::Result<()> {
863            encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
864            // Delegate to tuple encoding.
865            fidl::encoding::Encode::<RebootWatcherOnRebootRequest, D>::encode(
866                (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
867                encoder,
868                offset,
869                _depth,
870            )
871        }
872    }
873    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
874        fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for (T0,)
875    {
876        #[inline]
877        unsafe fn encode(
878            self,
879            encoder: &mut fidl::encoding::Encoder<'_, D>,
880            offset: usize,
881            depth: fidl::encoding::Depth,
882        ) -> fidl::Result<()> {
883            encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
884            // Zero out padding regions. There's no need to apply masks
885            // because the unmasked parts will be overwritten by fields.
886            // Write the fields.
887            self.0.encode(encoder, offset + 0, depth)?;
888            Ok(())
889        }
890    }
891
892    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
893        for RebootWatcherOnRebootRequest
894    {
895        #[inline(always)]
896        fn new_empty() -> Self {
897            Self { options: fidl::new_empty!(RebootOptions, D) }
898        }
899
900        #[inline]
901        unsafe fn decode(
902            &mut self,
903            decoder: &mut fidl::encoding::Decoder<'_, D>,
904            offset: usize,
905            _depth: fidl::encoding::Depth,
906        ) -> fidl::Result<()> {
907            decoder.debug_check_bounds::<Self>(offset);
908            // Verify that padding bytes are zero.
909            fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
910            Ok(())
911        }
912    }
913
914    impl fidl::encoding::ValueTypeMarker for ShutdownWatcherOnShutdownRequest {
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 ShutdownWatcherOnShutdownRequest {
922        type Owned = Self;
923
924        #[inline(always)]
925        fn inline_align(_context: fidl::encoding::Context) -> usize {
926            8
927        }
928
929        #[inline(always)]
930        fn inline_size(_context: fidl::encoding::Context) -> usize {
931            16
932        }
933    }
934
935    unsafe impl<D: fidl::encoding::ResourceDialect>
936        fidl::encoding::Encode<ShutdownWatcherOnShutdownRequest, D>
937        for &ShutdownWatcherOnShutdownRequest
938    {
939        #[inline]
940        unsafe fn encode(
941            self,
942            encoder: &mut fidl::encoding::Encoder<'_, D>,
943            offset: usize,
944            _depth: fidl::encoding::Depth,
945        ) -> fidl::Result<()> {
946            encoder.debug_check_bounds::<ShutdownWatcherOnShutdownRequest>(offset);
947            // Delegate to tuple encoding.
948            fidl::encoding::Encode::<ShutdownWatcherOnShutdownRequest, D>::encode(
949                (<ShutdownOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
950                encoder,
951                offset,
952                _depth,
953            )
954        }
955    }
956    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ShutdownOptions, D>>
957        fidl::encoding::Encode<ShutdownWatcherOnShutdownRequest, D> for (T0,)
958    {
959        #[inline]
960        unsafe fn encode(
961            self,
962            encoder: &mut fidl::encoding::Encoder<'_, D>,
963            offset: usize,
964            depth: fidl::encoding::Depth,
965        ) -> fidl::Result<()> {
966            encoder.debug_check_bounds::<ShutdownWatcherOnShutdownRequest>(offset);
967            // Zero out padding regions. There's no need to apply masks
968            // because the unmasked parts will be overwritten by fields.
969            // Write the fields.
970            self.0.encode(encoder, offset + 0, depth)?;
971            Ok(())
972        }
973    }
974
975    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
976        for ShutdownWatcherOnShutdownRequest
977    {
978        #[inline(always)]
979        fn new_empty() -> Self {
980            Self { options: fidl::new_empty!(ShutdownOptions, D) }
981        }
982
983        #[inline]
984        unsafe fn decode(
985            &mut self,
986            decoder: &mut fidl::encoding::Decoder<'_, D>,
987            offset: usize,
988            _depth: fidl::encoding::Depth,
989        ) -> fidl::Result<()> {
990            decoder.debug_check_bounds::<Self>(offset);
991            // Verify that padding bytes are zero.
992            fidl::decode!(ShutdownOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
993            Ok(())
994        }
995    }
996
997    impl RebootOptions {
998        #[inline(always)]
999        fn max_ordinal_present(&self) -> u64 {
1000            if let Some(_) = self.reasons {
1001                return 1;
1002            }
1003            0
1004        }
1005    }
1006
1007    impl fidl::encoding::ValueTypeMarker for RebootOptions {
1008        type Borrowed<'a> = &'a Self;
1009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1010            value
1011        }
1012    }
1013
1014    unsafe impl fidl::encoding::TypeMarker for RebootOptions {
1015        type Owned = Self;
1016
1017        #[inline(always)]
1018        fn inline_align(_context: fidl::encoding::Context) -> usize {
1019            8
1020        }
1021
1022        #[inline(always)]
1023        fn inline_size(_context: fidl::encoding::Context) -> usize {
1024            16
1025        }
1026    }
1027
1028    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RebootOptions, D>
1029        for &RebootOptions
1030    {
1031        unsafe fn encode(
1032            self,
1033            encoder: &mut fidl::encoding::Encoder<'_, D>,
1034            offset: usize,
1035            mut depth: fidl::encoding::Depth,
1036        ) -> fidl::Result<()> {
1037            encoder.debug_check_bounds::<RebootOptions>(offset);
1038            // Vector header
1039            let max_ordinal: u64 = self.max_ordinal_present();
1040            encoder.write_num(max_ordinal, offset);
1041            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1042            // Calling encoder.out_of_line_offset(0) is not allowed.
1043            if max_ordinal == 0 {
1044                return Ok(());
1045            }
1046            depth.increment()?;
1047            let envelope_size = 8;
1048            let bytes_len = max_ordinal as usize * envelope_size;
1049            #[allow(unused_variables)]
1050            let offset = encoder.out_of_line_offset(bytes_len);
1051            let mut _prev_end_offset: usize = 0;
1052            if 1 > max_ordinal {
1053                return Ok(());
1054            }
1055
1056            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1057            // are envelope_size bytes.
1058            let cur_offset: usize = (1 - 1) * envelope_size;
1059
1060            // Zero reserved fields.
1061            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1062
1063            // Safety:
1064            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1065            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1066            //   envelope_size bytes, there is always sufficient room.
1067            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RebootReason2, 100>, D>(
1068            self.reasons.as_ref().map(<fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1069            encoder, offset + cur_offset, depth
1070        )?;
1071
1072            _prev_end_offset = cur_offset + envelope_size;
1073
1074            Ok(())
1075        }
1076    }
1077
1078    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootOptions {
1079        #[inline(always)]
1080        fn new_empty() -> Self {
1081            Self::default()
1082        }
1083
1084        unsafe fn decode(
1085            &mut self,
1086            decoder: &mut fidl::encoding::Decoder<'_, D>,
1087            offset: usize,
1088            mut depth: fidl::encoding::Depth,
1089        ) -> fidl::Result<()> {
1090            decoder.debug_check_bounds::<Self>(offset);
1091            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1092                None => return Err(fidl::Error::NotNullable),
1093                Some(len) => len,
1094            };
1095            // Calling decoder.out_of_line_offset(0) is not allowed.
1096            if len == 0 {
1097                return Ok(());
1098            };
1099            depth.increment()?;
1100            let envelope_size = 8;
1101            let bytes_len = len * envelope_size;
1102            let offset = decoder.out_of_line_offset(bytes_len)?;
1103            // Decode the envelope for each type.
1104            let mut _next_ordinal_to_read = 0;
1105            let mut next_offset = offset;
1106            let end_offset = offset + bytes_len;
1107            _next_ordinal_to_read += 1;
1108            if next_offset >= end_offset {
1109                return Ok(());
1110            }
1111
1112            // Decode unknown envelopes for gaps in ordinals.
1113            while _next_ordinal_to_read < 1 {
1114                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1115                _next_ordinal_to_read += 1;
1116                next_offset += envelope_size;
1117            }
1118
1119            let next_out_of_line = decoder.next_out_of_line();
1120            let handles_before = decoder.remaining_handles();
1121            if let Some((inlined, num_bytes, num_handles)) =
1122                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1123            {
1124                let member_inline_size = <fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1125                if inlined != (member_inline_size <= 4) {
1126                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1127                }
1128                let inner_offset;
1129                let mut inner_depth = depth.clone();
1130                if inlined {
1131                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1132                    inner_offset = next_offset;
1133                } else {
1134                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1135                    inner_depth.increment()?;
1136                }
1137                let val_ref = self.reasons.get_or_insert_with(
1138                    || fidl::new_empty!(fidl::encoding::Vector<RebootReason2, 100>, D),
1139                );
1140                fidl::decode!(fidl::encoding::Vector<RebootReason2, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1141                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1142                {
1143                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1144                }
1145                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1146                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1147                }
1148            }
1149
1150            next_offset += envelope_size;
1151
1152            // Decode the remaining unknown envelopes.
1153            while next_offset < end_offset {
1154                _next_ordinal_to_read += 1;
1155                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1156                next_offset += envelope_size;
1157            }
1158
1159            Ok(())
1160        }
1161    }
1162
1163    impl ShutdownOptions {
1164        #[inline(always)]
1165        fn max_ordinal_present(&self) -> u64 {
1166            if let Some(_) = self.reasons {
1167                return 2;
1168            }
1169            if let Some(_) = self.action {
1170                return 1;
1171            }
1172            0
1173        }
1174    }
1175
1176    impl fidl::encoding::ValueTypeMarker for ShutdownOptions {
1177        type Borrowed<'a> = &'a Self;
1178        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1179            value
1180        }
1181    }
1182
1183    unsafe impl fidl::encoding::TypeMarker for ShutdownOptions {
1184        type Owned = Self;
1185
1186        #[inline(always)]
1187        fn inline_align(_context: fidl::encoding::Context) -> usize {
1188            8
1189        }
1190
1191        #[inline(always)]
1192        fn inline_size(_context: fidl::encoding::Context) -> usize {
1193            16
1194        }
1195    }
1196
1197    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ShutdownOptions, D>
1198        for &ShutdownOptions
1199    {
1200        unsafe fn encode(
1201            self,
1202            encoder: &mut fidl::encoding::Encoder<'_, D>,
1203            offset: usize,
1204            mut depth: fidl::encoding::Depth,
1205        ) -> fidl::Result<()> {
1206            encoder.debug_check_bounds::<ShutdownOptions>(offset);
1207            // Vector header
1208            let max_ordinal: u64 = self.max_ordinal_present();
1209            encoder.write_num(max_ordinal, offset);
1210            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1211            // Calling encoder.out_of_line_offset(0) is not allowed.
1212            if max_ordinal == 0 {
1213                return Ok(());
1214            }
1215            depth.increment()?;
1216            let envelope_size = 8;
1217            let bytes_len = max_ordinal as usize * envelope_size;
1218            #[allow(unused_variables)]
1219            let offset = encoder.out_of_line_offset(bytes_len);
1220            let mut _prev_end_offset: usize = 0;
1221            if 1 > max_ordinal {
1222                return Ok(());
1223            }
1224
1225            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1226            // are envelope_size bytes.
1227            let cur_offset: usize = (1 - 1) * envelope_size;
1228
1229            // Zero reserved fields.
1230            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1231
1232            // Safety:
1233            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1234            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1235            //   envelope_size bytes, there is always sufficient room.
1236            fidl::encoding::encode_in_envelope_optional::<ShutdownAction, D>(
1237                self.action
1238                    .as_ref()
1239                    .map(<ShutdownAction as fidl::encoding::ValueTypeMarker>::borrow),
1240                encoder,
1241                offset + cur_offset,
1242                depth,
1243            )?;
1244
1245            _prev_end_offset = cur_offset + envelope_size;
1246            if 2 > max_ordinal {
1247                return Ok(());
1248            }
1249
1250            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1251            // are envelope_size bytes.
1252            let cur_offset: usize = (2 - 1) * envelope_size;
1253
1254            // Zero reserved fields.
1255            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1256
1257            // Safety:
1258            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1259            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1260            //   envelope_size bytes, there is always sufficient room.
1261            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ShutdownReason, 100>, D>(
1262            self.reasons.as_ref().map(<fidl::encoding::Vector<ShutdownReason, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1263            encoder, offset + cur_offset, depth
1264        )?;
1265
1266            _prev_end_offset = cur_offset + envelope_size;
1267
1268            Ok(())
1269        }
1270    }
1271
1272    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownOptions {
1273        #[inline(always)]
1274        fn new_empty() -> Self {
1275            Self::default()
1276        }
1277
1278        unsafe fn decode(
1279            &mut self,
1280            decoder: &mut fidl::encoding::Decoder<'_, D>,
1281            offset: usize,
1282            mut depth: fidl::encoding::Depth,
1283        ) -> fidl::Result<()> {
1284            decoder.debug_check_bounds::<Self>(offset);
1285            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1286                None => return Err(fidl::Error::NotNullable),
1287                Some(len) => len,
1288            };
1289            // Calling decoder.out_of_line_offset(0) is not allowed.
1290            if len == 0 {
1291                return Ok(());
1292            };
1293            depth.increment()?;
1294            let envelope_size = 8;
1295            let bytes_len = len * envelope_size;
1296            let offset = decoder.out_of_line_offset(bytes_len)?;
1297            // Decode the envelope for each type.
1298            let mut _next_ordinal_to_read = 0;
1299            let mut next_offset = offset;
1300            let end_offset = offset + bytes_len;
1301            _next_ordinal_to_read += 1;
1302            if next_offset >= end_offset {
1303                return Ok(());
1304            }
1305
1306            // Decode unknown envelopes for gaps in ordinals.
1307            while _next_ordinal_to_read < 1 {
1308                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1309                _next_ordinal_to_read += 1;
1310                next_offset += envelope_size;
1311            }
1312
1313            let next_out_of_line = decoder.next_out_of_line();
1314            let handles_before = decoder.remaining_handles();
1315            if let Some((inlined, num_bytes, num_handles)) =
1316                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1317            {
1318                let member_inline_size =
1319                    <ShutdownAction as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1320                if inlined != (member_inline_size <= 4) {
1321                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1322                }
1323                let inner_offset;
1324                let mut inner_depth = depth.clone();
1325                if inlined {
1326                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1327                    inner_offset = next_offset;
1328                } else {
1329                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1330                    inner_depth.increment()?;
1331                }
1332                let val_ref =
1333                    self.action.get_or_insert_with(|| fidl::new_empty!(ShutdownAction, D));
1334                fidl::decode!(ShutdownAction, D, val_ref, decoder, inner_offset, inner_depth)?;
1335                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1336                {
1337                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1338                }
1339                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1340                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1341                }
1342            }
1343
1344            next_offset += envelope_size;
1345            _next_ordinal_to_read += 1;
1346            if next_offset >= end_offset {
1347                return Ok(());
1348            }
1349
1350            // Decode unknown envelopes for gaps in ordinals.
1351            while _next_ordinal_to_read < 2 {
1352                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1353                _next_ordinal_to_read += 1;
1354                next_offset += envelope_size;
1355            }
1356
1357            let next_out_of_line = decoder.next_out_of_line();
1358            let handles_before = decoder.remaining_handles();
1359            if let Some((inlined, num_bytes, num_handles)) =
1360                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1361            {
1362                let member_inline_size = <fidl::encoding::Vector<ShutdownReason, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1363                if inlined != (member_inline_size <= 4) {
1364                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1365                }
1366                let inner_offset;
1367                let mut inner_depth = depth.clone();
1368                if inlined {
1369                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1370                    inner_offset = next_offset;
1371                } else {
1372                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1373                    inner_depth.increment()?;
1374                }
1375                let val_ref = self.reasons.get_or_insert_with(
1376                    || fidl::new_empty!(fidl::encoding::Vector<ShutdownReason, 100>, D),
1377                );
1378                fidl::decode!(fidl::encoding::Vector<ShutdownReason, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1379                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1380                {
1381                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1382                }
1383                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1384                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1385                }
1386            }
1387
1388            next_offset += envelope_size;
1389
1390            // Decode the remaining unknown envelopes.
1391            while next_offset < end_offset {
1392                _next_ordinal_to_read += 1;
1393                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1394                next_offset += envelope_size;
1395            }
1396
1397            Ok(())
1398        }
1399    }
1400}