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