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