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