1#![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
11pub const MAX_REBOOT_REASONS: u8 = 100;
14
15pub const MAX_REBOOT_WATCHER_RESPONSE_TIME_SECONDS: u32 = 5;
18
19pub const MAX_SHUTDOWN_REASONS: u8 = 100;
22
23pub const MAX_SHUTDOWN_WATCHER_RESPONSE_TIME_SECONDS: u32 = 5;
26
27#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
31#[repr(u32)]
32pub enum RebootReason {
33 UserRequest = 1,
34 SystemUpdate = 2,
36 RetrySystemUpdate = 8,
38 HighTemperature = 3,
39 FactoryDataReset = 6,
40 SessionFailure = 4,
42 SysmgrFailure = 5,
44 CriticalComponentFailure = 7,
46 ZbiSwap = 9,
48 OutOfMemory = 10,
50}
51
52impl RebootReason {
53 #[inline]
54 pub fn from_primitive(prim: u32) -> Option<Self> {
55 match prim {
56 1 => Some(Self::UserRequest),
57 2 => Some(Self::SystemUpdate),
58 8 => Some(Self::RetrySystemUpdate),
59 3 => Some(Self::HighTemperature),
60 6 => Some(Self::FactoryDataReset),
61 4 => Some(Self::SessionFailure),
62 5 => Some(Self::SysmgrFailure),
63 7 => Some(Self::CriticalComponentFailure),
64 9 => Some(Self::ZbiSwap),
65 10 => Some(Self::OutOfMemory),
66 _ => None,
67 }
68 }
69
70 #[inline]
71 pub const fn into_primitive(self) -> u32 {
72 self as u32
73 }
74}
75
76#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
78pub enum RebootReason2 {
79 UserRequest,
84 DeveloperRequest,
87 SystemUpdate,
89 RetrySystemUpdate,
91 HighTemperature,
92 FactoryDataReset,
93 SessionFailure,
95 SysmgrFailure,
97 CriticalComponentFailure,
99 ZbiSwap,
101 OutOfMemory,
103 NetstackMigration,
105 AndroidUnexpectedReason,
107 AndroidRescueParty,
109 AndroidCriticalProcessFailure,
111 #[doc(hidden)]
112 __SourceBreaking {
113 unknown_ordinal: u32,
114 },
115}
116
117#[macro_export]
119macro_rules! RebootReason2Unknown {
120 () => {
121 _
122 };
123}
124
125impl RebootReason2 {
126 #[inline]
127 pub fn from_primitive(prim: u32) -> Option<Self> {
128 match prim {
129 1 => Some(Self::UserRequest),
130 13 => Some(Self::DeveloperRequest),
131 2 => Some(Self::SystemUpdate),
132 8 => Some(Self::RetrySystemUpdate),
133 3 => Some(Self::HighTemperature),
134 6 => Some(Self::FactoryDataReset),
135 4 => Some(Self::SessionFailure),
136 5 => Some(Self::SysmgrFailure),
137 7 => Some(Self::CriticalComponentFailure),
138 9 => Some(Self::ZbiSwap),
139 10 => Some(Self::OutOfMemory),
140 11 => Some(Self::NetstackMigration),
141 12 => Some(Self::AndroidUnexpectedReason),
142 14 => Some(Self::AndroidRescueParty),
143 15 => Some(Self::AndroidCriticalProcessFailure),
144 _ => None,
145 }
146 }
147
148 #[inline]
149 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
150 match prim {
151 1 => Self::UserRequest,
152 13 => Self::DeveloperRequest,
153 2 => Self::SystemUpdate,
154 8 => Self::RetrySystemUpdate,
155 3 => Self::HighTemperature,
156 6 => Self::FactoryDataReset,
157 4 => Self::SessionFailure,
158 5 => Self::SysmgrFailure,
159 7 => Self::CriticalComponentFailure,
160 9 => Self::ZbiSwap,
161 10 => Self::OutOfMemory,
162 11 => Self::NetstackMigration,
163 12 => Self::AndroidUnexpectedReason,
164 14 => Self::AndroidRescueParty,
165 15 => Self::AndroidCriticalProcessFailure,
166 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
167 }
168 }
169
170 #[inline]
171 pub fn unknown() -> Self {
172 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
173 }
174
175 #[inline]
176 pub const fn into_primitive(self) -> u32 {
177 match self {
178 Self::UserRequest => 1,
179 Self::DeveloperRequest => 13,
180 Self::SystemUpdate => 2,
181 Self::RetrySystemUpdate => 8,
182 Self::HighTemperature => 3,
183 Self::FactoryDataReset => 6,
184 Self::SessionFailure => 4,
185 Self::SysmgrFailure => 5,
186 Self::CriticalComponentFailure => 7,
187 Self::ZbiSwap => 9,
188 Self::OutOfMemory => 10,
189 Self::NetstackMigration => 11,
190 Self::AndroidUnexpectedReason => 12,
191 Self::AndroidRescueParty => 14,
192 Self::AndroidCriticalProcessFailure => 15,
193 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
194 }
195 }
196
197 #[inline]
198 pub fn is_unknown(&self) -> bool {
199 match self {
200 Self::__SourceBreaking { unknown_ordinal: _ } => true,
201 _ => false,
202 }
203 }
204}
205
206#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
207pub enum ShutdownAction {
208 Poweroff,
209 Reboot,
210 RebootToRecovery,
211 RebootToBootloader,
212 #[doc(hidden)]
213 __SourceBreaking {
214 unknown_ordinal: u32,
215 },
216}
217
218#[macro_export]
220macro_rules! ShutdownActionUnknown {
221 () => {
222 _
223 };
224}
225
226impl ShutdownAction {
227 #[inline]
228 pub fn from_primitive(prim: u32) -> Option<Self> {
229 match prim {
230 1 => Some(Self::Poweroff),
231 2 => Some(Self::Reboot),
232 3 => Some(Self::RebootToRecovery),
233 4 => Some(Self::RebootToBootloader),
234 _ => None,
235 }
236 }
237
238 #[inline]
239 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
240 match prim {
241 1 => Self::Poweroff,
242 2 => Self::Reboot,
243 3 => Self::RebootToRecovery,
244 4 => Self::RebootToBootloader,
245 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
246 }
247 }
248
249 #[inline]
250 pub fn unknown() -> Self {
251 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
252 }
253
254 #[inline]
255 pub const fn into_primitive(self) -> u32 {
256 match self {
257 Self::Poweroff => 1,
258 Self::Reboot => 2,
259 Self::RebootToRecovery => 3,
260 Self::RebootToBootloader => 4,
261 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
262 }
263 }
264
265 #[inline]
266 pub fn is_unknown(&self) -> bool {
267 match self {
268 Self::__SourceBreaking { unknown_ordinal: _ } => true,
269 _ => false,
270 }
271 }
272}
273
274#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
276pub enum ShutdownReason {
277 UserRequest,
282 DeveloperRequest,
285 SystemUpdate,
287 RetrySystemUpdate,
289 HighTemperature,
291 FactoryDataReset,
293 SessionFailure,
295 CriticalComponentFailure,
297 ZbiSwap,
299 OutOfMemory,
301 NetstackMigration,
303 AndroidUnexpectedReason,
305 AndroidRescueParty,
307 AndroidCriticalProcessFailure,
309 #[doc(hidden)]
310 __SourceBreaking { unknown_ordinal: u32 },
311}
312
313#[macro_export]
315macro_rules! ShutdownReasonUnknown {
316 () => {
317 _
318 };
319}
320
321impl ShutdownReason {
322 #[inline]
323 pub fn from_primitive(prim: u32) -> Option<Self> {
324 match prim {
325 1 => Some(Self::UserRequest),
326 2 => Some(Self::DeveloperRequest),
327 3 => Some(Self::SystemUpdate),
328 4 => Some(Self::RetrySystemUpdate),
329 5 => Some(Self::HighTemperature),
330 6 => Some(Self::FactoryDataReset),
331 7 => Some(Self::SessionFailure),
332 8 => Some(Self::CriticalComponentFailure),
333 9 => Some(Self::ZbiSwap),
334 10 => Some(Self::OutOfMemory),
335 11 => Some(Self::NetstackMigration),
336 12 => Some(Self::AndroidUnexpectedReason),
337 13 => Some(Self::AndroidRescueParty),
338 14 => Some(Self::AndroidCriticalProcessFailure),
339 _ => None,
340 }
341 }
342
343 #[inline]
344 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
345 match prim {
346 1 => Self::UserRequest,
347 2 => Self::DeveloperRequest,
348 3 => Self::SystemUpdate,
349 4 => Self::RetrySystemUpdate,
350 5 => Self::HighTemperature,
351 6 => Self::FactoryDataReset,
352 7 => Self::SessionFailure,
353 8 => Self::CriticalComponentFailure,
354 9 => Self::ZbiSwap,
355 10 => Self::OutOfMemory,
356 11 => Self::NetstackMigration,
357 12 => Self::AndroidUnexpectedReason,
358 13 => Self::AndroidRescueParty,
359 14 => Self::AndroidCriticalProcessFailure,
360 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
361 }
362 }
363
364 #[inline]
365 pub fn unknown() -> Self {
366 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
367 }
368
369 #[inline]
370 pub const fn into_primitive(self) -> u32 {
371 match self {
372 Self::UserRequest => 1,
373 Self::DeveloperRequest => 2,
374 Self::SystemUpdate => 3,
375 Self::RetrySystemUpdate => 4,
376 Self::HighTemperature => 5,
377 Self::FactoryDataReset => 6,
378 Self::SessionFailure => 7,
379 Self::CriticalComponentFailure => 8,
380 Self::ZbiSwap => 9,
381 Self::OutOfMemory => 10,
382 Self::NetstackMigration => 11,
383 Self::AndroidUnexpectedReason => 12,
384 Self::AndroidRescueParty => 13,
385 Self::AndroidCriticalProcessFailure => 14,
386 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
387 }
388 }
389
390 #[inline]
391 pub fn is_unknown(&self) -> bool {
392 match self {
393 Self::__SourceBreaking { unknown_ordinal: _ } => true,
394 _ => false,
395 }
396 }
397}
398
399#[derive(Clone, Debug, PartialEq)]
400pub struct AdminPerformRebootRequest {
401 pub options: RebootOptions,
402}
403
404impl fidl::Persistable for AdminPerformRebootRequest {}
405
406#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
407pub struct AdminRebootRequest {
408 pub reason: RebootReason,
409}
410
411impl fidl::Persistable for AdminRebootRequest {}
412
413#[derive(Clone, Debug, PartialEq)]
414pub struct AdminShutdownRequest {
415 pub options: ShutdownOptions,
416}
417
418impl fidl::Persistable for AdminShutdownRequest {}
419
420#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
421pub struct RebootMethodsWatcherOnRebootRequest {
422 pub reason: RebootReason,
423}
424
425impl fidl::Persistable for RebootMethodsWatcherOnRebootRequest {}
426
427#[derive(Clone, Debug, PartialEq)]
428pub struct RebootWatcherOnRebootRequest {
429 pub options: RebootOptions,
430}
431
432impl fidl::Persistable for RebootWatcherOnRebootRequest {}
433
434#[derive(Clone, Debug, PartialEq)]
435pub struct ShutdownWatcherOnShutdownRequest {
436 pub options: ShutdownOptions,
437}
438
439impl fidl::Persistable for ShutdownWatcherOnShutdownRequest {}
440
441#[derive(Clone, Debug, Default, PartialEq)]
443pub struct RebootOptions {
444 pub reasons: Option<Vec<RebootReason2>>,
446 #[doc(hidden)]
447 pub __source_breaking: fidl::marker::SourceBreaking,
448}
449
450impl fidl::Persistable for RebootOptions {}
451
452#[derive(Clone, Debug, Default, PartialEq)]
454pub struct ShutdownOptions {
455 pub action: Option<ShutdownAction>,
456 pub reasons: Option<Vec<ShutdownReason>>,
458 #[doc(hidden)]
459 pub __source_breaking: fidl::marker::SourceBreaking,
460}
461
462impl fidl::Persistable for ShutdownOptions {}
463
464pub mod admin_ordinals {
465 pub const POWER_FULLY_ON: u64 = 0xb3272d15e00712f;
466 pub const SHUTDOWN: u64 = 0x3722c53e45dc022f;
467 pub const REBOOT: u64 = 0x21f258bd20297368;
468 pub const PERFORM_REBOOT: u64 = 0x9416b4d36a80b4;
469 pub const REBOOT_TO_BOOTLOADER: u64 = 0x6dce331b33786aa;
470 pub const REBOOT_TO_RECOVERY: u64 = 0x1575c566be54f505;
471 pub const POWEROFF: u64 = 0x24101c5d0b439748;
472 pub const MEXEC: u64 = 0x1f91e77ec781a4c6;
473 pub const SUSPEND_TO_RAM: u64 = 0x3b0e356782e7620e;
474}
475
476pub mod reboot_methods_watcher_ordinals {
477 pub const ON_REBOOT: u64 = 0x225a5f32436a1b13;
478}
479
480pub mod reboot_methods_watcher_register_ordinals {
481 pub const REGISTER: u64 = 0x1fd793df8385f937;
482 pub const REGISTER_WITH_ACK: u64 = 0x243cbccabdac17ec;
483 pub const REGISTER_WATCHER: u64 = 0x3e6610e78471238;
484}
485
486pub mod reboot_watcher_ordinals {
487 pub const ON_REBOOT: u64 = 0x5334bbbe774f13c3;
488}
489
490pub mod shutdown_watcher_ordinals {
491 pub const ON_SHUTDOWN: u64 = 0x1d9467990d7dc6db;
492}
493
494pub mod shutdown_watcher_register_ordinals {
495 pub const REGISTER_WATCHER: u64 = 0x3db6ce5d34810aff;
496}
497
498mod internal {
499 use super::*;
500 unsafe impl fidl::encoding::TypeMarker for RebootReason {
501 type Owned = Self;
502
503 #[inline(always)]
504 fn inline_align(_context: fidl::encoding::Context) -> usize {
505 std::mem::align_of::<u32>()
506 }
507
508 #[inline(always)]
509 fn inline_size(_context: fidl::encoding::Context) -> usize {
510 std::mem::size_of::<u32>()
511 }
512
513 #[inline(always)]
514 fn encode_is_copy() -> bool {
515 true
516 }
517
518 #[inline(always)]
519 fn decode_is_copy() -> bool {
520 false
521 }
522 }
523
524 impl fidl::encoding::ValueTypeMarker for RebootReason {
525 type Borrowed<'a> = Self;
526 #[inline(always)]
527 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
528 *value
529 }
530 }
531
532 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RebootReason {
533 #[inline]
534 unsafe fn encode(
535 self,
536 encoder: &mut fidl::encoding::Encoder<'_, D>,
537 offset: usize,
538 _depth: fidl::encoding::Depth,
539 ) -> fidl::Result<()> {
540 encoder.debug_check_bounds::<Self>(offset);
541 encoder.write_num(self.into_primitive(), offset);
542 Ok(())
543 }
544 }
545
546 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootReason {
547 #[inline(always)]
548 fn new_empty() -> Self {
549 Self::UserRequest
550 }
551
552 #[inline]
553 unsafe fn decode(
554 &mut self,
555 decoder: &mut fidl::encoding::Decoder<'_, D>,
556 offset: usize,
557 _depth: fidl::encoding::Depth,
558 ) -> fidl::Result<()> {
559 decoder.debug_check_bounds::<Self>(offset);
560 let prim = decoder.read_num::<u32>(offset);
561
562 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
563 Ok(())
564 }
565 }
566 unsafe impl fidl::encoding::TypeMarker for RebootReason2 {
567 type Owned = Self;
568
569 #[inline(always)]
570 fn inline_align(_context: fidl::encoding::Context) -> usize {
571 std::mem::align_of::<u32>()
572 }
573
574 #[inline(always)]
575 fn inline_size(_context: fidl::encoding::Context) -> usize {
576 std::mem::size_of::<u32>()
577 }
578
579 #[inline(always)]
580 fn encode_is_copy() -> bool {
581 false
582 }
583
584 #[inline(always)]
585 fn decode_is_copy() -> bool {
586 false
587 }
588 }
589
590 impl fidl::encoding::ValueTypeMarker for RebootReason2 {
591 type Borrowed<'a> = Self;
592 #[inline(always)]
593 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
594 *value
595 }
596 }
597
598 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RebootReason2 {
599 #[inline]
600 unsafe fn encode(
601 self,
602 encoder: &mut fidl::encoding::Encoder<'_, D>,
603 offset: usize,
604 _depth: fidl::encoding::Depth,
605 ) -> fidl::Result<()> {
606 encoder.debug_check_bounds::<Self>(offset);
607 encoder.write_num(self.into_primitive(), offset);
608 Ok(())
609 }
610 }
611
612 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootReason2 {
613 #[inline(always)]
614 fn new_empty() -> Self {
615 Self::unknown()
616 }
617
618 #[inline]
619 unsafe fn decode(
620 &mut self,
621 decoder: &mut fidl::encoding::Decoder<'_, D>,
622 offset: usize,
623 _depth: fidl::encoding::Depth,
624 ) -> fidl::Result<()> {
625 decoder.debug_check_bounds::<Self>(offset);
626 let prim = decoder.read_num::<u32>(offset);
627
628 *self = Self::from_primitive_allow_unknown(prim);
629 Ok(())
630 }
631 }
632 unsafe impl fidl::encoding::TypeMarker for ShutdownAction {
633 type Owned = Self;
634
635 #[inline(always)]
636 fn inline_align(_context: fidl::encoding::Context) -> usize {
637 std::mem::align_of::<u32>()
638 }
639
640 #[inline(always)]
641 fn inline_size(_context: fidl::encoding::Context) -> usize {
642 std::mem::size_of::<u32>()
643 }
644
645 #[inline(always)]
646 fn encode_is_copy() -> bool {
647 false
648 }
649
650 #[inline(always)]
651 fn decode_is_copy() -> bool {
652 false
653 }
654 }
655
656 impl fidl::encoding::ValueTypeMarker for ShutdownAction {
657 type Borrowed<'a> = Self;
658 #[inline(always)]
659 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
660 *value
661 }
662 }
663
664 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ShutdownAction {
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::<Self>(offset);
673 encoder.write_num(self.into_primitive(), offset);
674 Ok(())
675 }
676 }
677
678 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownAction {
679 #[inline(always)]
680 fn new_empty() -> Self {
681 Self::unknown()
682 }
683
684 #[inline]
685 unsafe fn decode(
686 &mut self,
687 decoder: &mut fidl::encoding::Decoder<'_, D>,
688 offset: usize,
689 _depth: fidl::encoding::Depth,
690 ) -> fidl::Result<()> {
691 decoder.debug_check_bounds::<Self>(offset);
692 let prim = decoder.read_num::<u32>(offset);
693
694 *self = Self::from_primitive_allow_unknown(prim);
695 Ok(())
696 }
697 }
698 unsafe impl fidl::encoding::TypeMarker for ShutdownReason {
699 type Owned = Self;
700
701 #[inline(always)]
702 fn inline_align(_context: fidl::encoding::Context) -> usize {
703 std::mem::align_of::<u32>()
704 }
705
706 #[inline(always)]
707 fn inline_size(_context: fidl::encoding::Context) -> usize {
708 std::mem::size_of::<u32>()
709 }
710
711 #[inline(always)]
712 fn encode_is_copy() -> bool {
713 false
714 }
715
716 #[inline(always)]
717 fn decode_is_copy() -> bool {
718 false
719 }
720 }
721
722 impl fidl::encoding::ValueTypeMarker for ShutdownReason {
723 type Borrowed<'a> = Self;
724 #[inline(always)]
725 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
726 *value
727 }
728 }
729
730 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ShutdownReason {
731 #[inline]
732 unsafe fn encode(
733 self,
734 encoder: &mut fidl::encoding::Encoder<'_, D>,
735 offset: usize,
736 _depth: fidl::encoding::Depth,
737 ) -> fidl::Result<()> {
738 encoder.debug_check_bounds::<Self>(offset);
739 encoder.write_num(self.into_primitive(), offset);
740 Ok(())
741 }
742 }
743
744 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownReason {
745 #[inline(always)]
746 fn new_empty() -> Self {
747 Self::unknown()
748 }
749
750 #[inline]
751 unsafe fn decode(
752 &mut self,
753 decoder: &mut fidl::encoding::Decoder<'_, D>,
754 offset: usize,
755 _depth: fidl::encoding::Depth,
756 ) -> fidl::Result<()> {
757 decoder.debug_check_bounds::<Self>(offset);
758 let prim = decoder.read_num::<u32>(offset);
759
760 *self = Self::from_primitive_allow_unknown(prim);
761 Ok(())
762 }
763 }
764
765 impl fidl::encoding::ValueTypeMarker for AdminPerformRebootRequest {
766 type Borrowed<'a> = &'a Self;
767 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
768 value
769 }
770 }
771
772 unsafe impl fidl::encoding::TypeMarker for AdminPerformRebootRequest {
773 type Owned = Self;
774
775 #[inline(always)]
776 fn inline_align(_context: fidl::encoding::Context) -> usize {
777 8
778 }
779
780 #[inline(always)]
781 fn inline_size(_context: fidl::encoding::Context) -> usize {
782 16
783 }
784 }
785
786 unsafe impl<D: fidl::encoding::ResourceDialect>
787 fidl::encoding::Encode<AdminPerformRebootRequest, D> for &AdminPerformRebootRequest
788 {
789 #[inline]
790 unsafe fn encode(
791 self,
792 encoder: &mut fidl::encoding::Encoder<'_, D>,
793 offset: usize,
794 _depth: fidl::encoding::Depth,
795 ) -> fidl::Result<()> {
796 encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
797 fidl::encoding::Encode::<AdminPerformRebootRequest, D>::encode(
799 (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
800 encoder,
801 offset,
802 _depth,
803 )
804 }
805 }
806 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
807 fidl::encoding::Encode<AdminPerformRebootRequest, D> for (T0,)
808 {
809 #[inline]
810 unsafe fn encode(
811 self,
812 encoder: &mut fidl::encoding::Encoder<'_, D>,
813 offset: usize,
814 depth: fidl::encoding::Depth,
815 ) -> fidl::Result<()> {
816 encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
817 self.0.encode(encoder, offset + 0, depth)?;
821 Ok(())
822 }
823 }
824
825 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
826 for AdminPerformRebootRequest
827 {
828 #[inline(always)]
829 fn new_empty() -> Self {
830 Self { options: fidl::new_empty!(RebootOptions, D) }
831 }
832
833 #[inline]
834 unsafe fn decode(
835 &mut self,
836 decoder: &mut fidl::encoding::Decoder<'_, D>,
837 offset: usize,
838 _depth: fidl::encoding::Depth,
839 ) -> fidl::Result<()> {
840 decoder.debug_check_bounds::<Self>(offset);
841 fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
843 Ok(())
844 }
845 }
846
847 impl fidl::encoding::ValueTypeMarker for AdminRebootRequest {
848 type Borrowed<'a> = &'a Self;
849 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
850 value
851 }
852 }
853
854 unsafe impl fidl::encoding::TypeMarker for AdminRebootRequest {
855 type Owned = Self;
856
857 #[inline(always)]
858 fn inline_align(_context: fidl::encoding::Context) -> usize {
859 4
860 }
861
862 #[inline(always)]
863 fn inline_size(_context: fidl::encoding::Context) -> usize {
864 4
865 }
866 }
867
868 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdminRebootRequest, D>
869 for &AdminRebootRequest
870 {
871 #[inline]
872 unsafe fn encode(
873 self,
874 encoder: &mut fidl::encoding::Encoder<'_, D>,
875 offset: usize,
876 _depth: fidl::encoding::Depth,
877 ) -> fidl::Result<()> {
878 encoder.debug_check_bounds::<AdminRebootRequest>(offset);
879 fidl::encoding::Encode::<AdminRebootRequest, D>::encode(
881 (<RebootReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
882 encoder,
883 offset,
884 _depth,
885 )
886 }
887 }
888 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootReason, D>>
889 fidl::encoding::Encode<AdminRebootRequest, D> for (T0,)
890 {
891 #[inline]
892 unsafe fn encode(
893 self,
894 encoder: &mut fidl::encoding::Encoder<'_, D>,
895 offset: usize,
896 depth: fidl::encoding::Depth,
897 ) -> fidl::Result<()> {
898 encoder.debug_check_bounds::<AdminRebootRequest>(offset);
899 self.0.encode(encoder, offset + 0, depth)?;
903 Ok(())
904 }
905 }
906
907 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdminRebootRequest {
908 #[inline(always)]
909 fn new_empty() -> Self {
910 Self { reason: fidl::new_empty!(RebootReason, D) }
911 }
912
913 #[inline]
914 unsafe fn decode(
915 &mut self,
916 decoder: &mut fidl::encoding::Decoder<'_, D>,
917 offset: usize,
918 _depth: fidl::encoding::Depth,
919 ) -> fidl::Result<()> {
920 decoder.debug_check_bounds::<Self>(offset);
921 fidl::decode!(RebootReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
923 Ok(())
924 }
925 }
926
927 impl fidl::encoding::ValueTypeMarker for AdminShutdownRequest {
928 type Borrowed<'a> = &'a Self;
929 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
930 value
931 }
932 }
933
934 unsafe impl fidl::encoding::TypeMarker for AdminShutdownRequest {
935 type Owned = Self;
936
937 #[inline(always)]
938 fn inline_align(_context: fidl::encoding::Context) -> usize {
939 8
940 }
941
942 #[inline(always)]
943 fn inline_size(_context: fidl::encoding::Context) -> usize {
944 16
945 }
946 }
947
948 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdminShutdownRequest, D>
949 for &AdminShutdownRequest
950 {
951 #[inline]
952 unsafe fn encode(
953 self,
954 encoder: &mut fidl::encoding::Encoder<'_, D>,
955 offset: usize,
956 _depth: fidl::encoding::Depth,
957 ) -> fidl::Result<()> {
958 encoder.debug_check_bounds::<AdminShutdownRequest>(offset);
959 fidl::encoding::Encode::<AdminShutdownRequest, D>::encode(
961 (<ShutdownOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
962 encoder,
963 offset,
964 _depth,
965 )
966 }
967 }
968 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ShutdownOptions, D>>
969 fidl::encoding::Encode<AdminShutdownRequest, D> for (T0,)
970 {
971 #[inline]
972 unsafe fn encode(
973 self,
974 encoder: &mut fidl::encoding::Encoder<'_, D>,
975 offset: usize,
976 depth: fidl::encoding::Depth,
977 ) -> fidl::Result<()> {
978 encoder.debug_check_bounds::<AdminShutdownRequest>(offset);
979 self.0.encode(encoder, offset + 0, depth)?;
983 Ok(())
984 }
985 }
986
987 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdminShutdownRequest {
988 #[inline(always)]
989 fn new_empty() -> Self {
990 Self { options: fidl::new_empty!(ShutdownOptions, D) }
991 }
992
993 #[inline]
994 unsafe fn decode(
995 &mut self,
996 decoder: &mut fidl::encoding::Decoder<'_, D>,
997 offset: usize,
998 _depth: fidl::encoding::Depth,
999 ) -> fidl::Result<()> {
1000 decoder.debug_check_bounds::<Self>(offset);
1001 fidl::decode!(ShutdownOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
1003 Ok(())
1004 }
1005 }
1006
1007 impl fidl::encoding::ValueTypeMarker for RebootMethodsWatcherOnRebootRequest {
1008 type Borrowed<'a> = &'a Self;
1009 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1010 value
1011 }
1012 }
1013
1014 unsafe impl fidl::encoding::TypeMarker for RebootMethodsWatcherOnRebootRequest {
1015 type Owned = Self;
1016
1017 #[inline(always)]
1018 fn inline_align(_context: fidl::encoding::Context) -> usize {
1019 4
1020 }
1021
1022 #[inline(always)]
1023 fn inline_size(_context: fidl::encoding::Context) -> usize {
1024 4
1025 }
1026 }
1027
1028 unsafe impl<D: fidl::encoding::ResourceDialect>
1029 fidl::encoding::Encode<RebootMethodsWatcherOnRebootRequest, D>
1030 for &RebootMethodsWatcherOnRebootRequest
1031 {
1032 #[inline]
1033 unsafe fn encode(
1034 self,
1035 encoder: &mut fidl::encoding::Encoder<'_, D>,
1036 offset: usize,
1037 _depth: fidl::encoding::Depth,
1038 ) -> fidl::Result<()> {
1039 encoder.debug_check_bounds::<RebootMethodsWatcherOnRebootRequest>(offset);
1040 fidl::encoding::Encode::<RebootMethodsWatcherOnRebootRequest, D>::encode(
1042 (<RebootReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
1043 encoder,
1044 offset,
1045 _depth,
1046 )
1047 }
1048 }
1049 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootReason, D>>
1050 fidl::encoding::Encode<RebootMethodsWatcherOnRebootRequest, D> for (T0,)
1051 {
1052 #[inline]
1053 unsafe fn encode(
1054 self,
1055 encoder: &mut fidl::encoding::Encoder<'_, D>,
1056 offset: usize,
1057 depth: fidl::encoding::Depth,
1058 ) -> fidl::Result<()> {
1059 encoder.debug_check_bounds::<RebootMethodsWatcherOnRebootRequest>(offset);
1060 self.0.encode(encoder, offset + 0, depth)?;
1064 Ok(())
1065 }
1066 }
1067
1068 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1069 for RebootMethodsWatcherOnRebootRequest
1070 {
1071 #[inline(always)]
1072 fn new_empty() -> Self {
1073 Self { reason: fidl::new_empty!(RebootReason, D) }
1074 }
1075
1076 #[inline]
1077 unsafe fn decode(
1078 &mut self,
1079 decoder: &mut fidl::encoding::Decoder<'_, D>,
1080 offset: usize,
1081 _depth: fidl::encoding::Depth,
1082 ) -> fidl::Result<()> {
1083 decoder.debug_check_bounds::<Self>(offset);
1084 fidl::decode!(RebootReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
1086 Ok(())
1087 }
1088 }
1089
1090 impl fidl::encoding::ValueTypeMarker for RebootWatcherOnRebootRequest {
1091 type Borrowed<'a> = &'a Self;
1092 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1093 value
1094 }
1095 }
1096
1097 unsafe impl fidl::encoding::TypeMarker for RebootWatcherOnRebootRequest {
1098 type Owned = Self;
1099
1100 #[inline(always)]
1101 fn inline_align(_context: fidl::encoding::Context) -> usize {
1102 8
1103 }
1104
1105 #[inline(always)]
1106 fn inline_size(_context: fidl::encoding::Context) -> usize {
1107 16
1108 }
1109 }
1110
1111 unsafe impl<D: fidl::encoding::ResourceDialect>
1112 fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for &RebootWatcherOnRebootRequest
1113 {
1114 #[inline]
1115 unsafe fn encode(
1116 self,
1117 encoder: &mut fidl::encoding::Encoder<'_, D>,
1118 offset: usize,
1119 _depth: fidl::encoding::Depth,
1120 ) -> fidl::Result<()> {
1121 encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
1122 fidl::encoding::Encode::<RebootWatcherOnRebootRequest, D>::encode(
1124 (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1125 encoder,
1126 offset,
1127 _depth,
1128 )
1129 }
1130 }
1131 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
1132 fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for (T0,)
1133 {
1134 #[inline]
1135 unsafe fn encode(
1136 self,
1137 encoder: &mut fidl::encoding::Encoder<'_, D>,
1138 offset: usize,
1139 depth: fidl::encoding::Depth,
1140 ) -> fidl::Result<()> {
1141 encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
1142 self.0.encode(encoder, offset + 0, depth)?;
1146 Ok(())
1147 }
1148 }
1149
1150 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1151 for RebootWatcherOnRebootRequest
1152 {
1153 #[inline(always)]
1154 fn new_empty() -> Self {
1155 Self { options: fidl::new_empty!(RebootOptions, D) }
1156 }
1157
1158 #[inline]
1159 unsafe fn decode(
1160 &mut self,
1161 decoder: &mut fidl::encoding::Decoder<'_, D>,
1162 offset: usize,
1163 _depth: fidl::encoding::Depth,
1164 ) -> fidl::Result<()> {
1165 decoder.debug_check_bounds::<Self>(offset);
1166 fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
1168 Ok(())
1169 }
1170 }
1171
1172 impl fidl::encoding::ValueTypeMarker for ShutdownWatcherOnShutdownRequest {
1173 type Borrowed<'a> = &'a Self;
1174 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1175 value
1176 }
1177 }
1178
1179 unsafe impl fidl::encoding::TypeMarker for ShutdownWatcherOnShutdownRequest {
1180 type Owned = Self;
1181
1182 #[inline(always)]
1183 fn inline_align(_context: fidl::encoding::Context) -> usize {
1184 8
1185 }
1186
1187 #[inline(always)]
1188 fn inline_size(_context: fidl::encoding::Context) -> usize {
1189 16
1190 }
1191 }
1192
1193 unsafe impl<D: fidl::encoding::ResourceDialect>
1194 fidl::encoding::Encode<ShutdownWatcherOnShutdownRequest, D>
1195 for &ShutdownWatcherOnShutdownRequest
1196 {
1197 #[inline]
1198 unsafe fn encode(
1199 self,
1200 encoder: &mut fidl::encoding::Encoder<'_, D>,
1201 offset: usize,
1202 _depth: fidl::encoding::Depth,
1203 ) -> fidl::Result<()> {
1204 encoder.debug_check_bounds::<ShutdownWatcherOnShutdownRequest>(offset);
1205 fidl::encoding::Encode::<ShutdownWatcherOnShutdownRequest, D>::encode(
1207 (<ShutdownOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
1208 encoder,
1209 offset,
1210 _depth,
1211 )
1212 }
1213 }
1214 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<ShutdownOptions, D>>
1215 fidl::encoding::Encode<ShutdownWatcherOnShutdownRequest, D> for (T0,)
1216 {
1217 #[inline]
1218 unsafe fn encode(
1219 self,
1220 encoder: &mut fidl::encoding::Encoder<'_, D>,
1221 offset: usize,
1222 depth: fidl::encoding::Depth,
1223 ) -> fidl::Result<()> {
1224 encoder.debug_check_bounds::<ShutdownWatcherOnShutdownRequest>(offset);
1225 self.0.encode(encoder, offset + 0, depth)?;
1229 Ok(())
1230 }
1231 }
1232
1233 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1234 for ShutdownWatcherOnShutdownRequest
1235 {
1236 #[inline(always)]
1237 fn new_empty() -> Self {
1238 Self { options: fidl::new_empty!(ShutdownOptions, D) }
1239 }
1240
1241 #[inline]
1242 unsafe fn decode(
1243 &mut self,
1244 decoder: &mut fidl::encoding::Decoder<'_, D>,
1245 offset: usize,
1246 _depth: fidl::encoding::Depth,
1247 ) -> fidl::Result<()> {
1248 decoder.debug_check_bounds::<Self>(offset);
1249 fidl::decode!(ShutdownOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
1251 Ok(())
1252 }
1253 }
1254
1255 impl RebootOptions {
1256 #[inline(always)]
1257 fn max_ordinal_present(&self) -> u64 {
1258 if let Some(_) = self.reasons {
1259 return 1;
1260 }
1261 0
1262 }
1263 }
1264
1265 impl fidl::encoding::ValueTypeMarker for RebootOptions {
1266 type Borrowed<'a> = &'a Self;
1267 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1268 value
1269 }
1270 }
1271
1272 unsafe impl fidl::encoding::TypeMarker for RebootOptions {
1273 type Owned = Self;
1274
1275 #[inline(always)]
1276 fn inline_align(_context: fidl::encoding::Context) -> usize {
1277 8
1278 }
1279
1280 #[inline(always)]
1281 fn inline_size(_context: fidl::encoding::Context) -> usize {
1282 16
1283 }
1284 }
1285
1286 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RebootOptions, D>
1287 for &RebootOptions
1288 {
1289 unsafe fn encode(
1290 self,
1291 encoder: &mut fidl::encoding::Encoder<'_, D>,
1292 offset: usize,
1293 mut depth: fidl::encoding::Depth,
1294 ) -> fidl::Result<()> {
1295 encoder.debug_check_bounds::<RebootOptions>(offset);
1296 let max_ordinal: u64 = self.max_ordinal_present();
1298 encoder.write_num(max_ordinal, offset);
1299 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1300 if max_ordinal == 0 {
1302 return Ok(());
1303 }
1304 depth.increment()?;
1305 let envelope_size = 8;
1306 let bytes_len = max_ordinal as usize * envelope_size;
1307 #[allow(unused_variables)]
1308 let offset = encoder.out_of_line_offset(bytes_len);
1309 let mut _prev_end_offset: usize = 0;
1310 if 1 > max_ordinal {
1311 return Ok(());
1312 }
1313
1314 let cur_offset: usize = (1 - 1) * envelope_size;
1317
1318 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1320
1321 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RebootReason2, 100>, D>(
1326 self.reasons.as_ref().map(<fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1327 encoder, offset + cur_offset, depth
1328 )?;
1329
1330 _prev_end_offset = cur_offset + envelope_size;
1331
1332 Ok(())
1333 }
1334 }
1335
1336 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootOptions {
1337 #[inline(always)]
1338 fn new_empty() -> Self {
1339 Self::default()
1340 }
1341
1342 unsafe fn decode(
1343 &mut self,
1344 decoder: &mut fidl::encoding::Decoder<'_, D>,
1345 offset: usize,
1346 mut depth: fidl::encoding::Depth,
1347 ) -> fidl::Result<()> {
1348 decoder.debug_check_bounds::<Self>(offset);
1349 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1350 None => return Err(fidl::Error::NotNullable),
1351 Some(len) => len,
1352 };
1353 if len == 0 {
1355 return Ok(());
1356 };
1357 depth.increment()?;
1358 let envelope_size = 8;
1359 let bytes_len = len * envelope_size;
1360 let offset = decoder.out_of_line_offset(bytes_len)?;
1361 let mut _next_ordinal_to_read = 0;
1363 let mut next_offset = offset;
1364 let end_offset = offset + bytes_len;
1365 _next_ordinal_to_read += 1;
1366 if next_offset >= end_offset {
1367 return Ok(());
1368 }
1369
1370 while _next_ordinal_to_read < 1 {
1372 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1373 _next_ordinal_to_read += 1;
1374 next_offset += envelope_size;
1375 }
1376
1377 let next_out_of_line = decoder.next_out_of_line();
1378 let handles_before = decoder.remaining_handles();
1379 if let Some((inlined, num_bytes, num_handles)) =
1380 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1381 {
1382 let member_inline_size = <fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1383 if inlined != (member_inline_size <= 4) {
1384 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1385 }
1386 let inner_offset;
1387 let mut inner_depth = depth.clone();
1388 if inlined {
1389 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1390 inner_offset = next_offset;
1391 } else {
1392 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1393 inner_depth.increment()?;
1394 }
1395 let val_ref = self.reasons.get_or_insert_with(
1396 || fidl::new_empty!(fidl::encoding::Vector<RebootReason2, 100>, D),
1397 );
1398 fidl::decode!(fidl::encoding::Vector<RebootReason2, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1399 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1400 {
1401 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1402 }
1403 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1404 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1405 }
1406 }
1407
1408 next_offset += envelope_size;
1409
1410 while next_offset < end_offset {
1412 _next_ordinal_to_read += 1;
1413 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1414 next_offset += envelope_size;
1415 }
1416
1417 Ok(())
1418 }
1419 }
1420
1421 impl ShutdownOptions {
1422 #[inline(always)]
1423 fn max_ordinal_present(&self) -> u64 {
1424 if let Some(_) = self.reasons {
1425 return 2;
1426 }
1427 if let Some(_) = self.action {
1428 return 1;
1429 }
1430 0
1431 }
1432 }
1433
1434 impl fidl::encoding::ValueTypeMarker for ShutdownOptions {
1435 type Borrowed<'a> = &'a Self;
1436 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1437 value
1438 }
1439 }
1440
1441 unsafe impl fidl::encoding::TypeMarker for ShutdownOptions {
1442 type Owned = Self;
1443
1444 #[inline(always)]
1445 fn inline_align(_context: fidl::encoding::Context) -> usize {
1446 8
1447 }
1448
1449 #[inline(always)]
1450 fn inline_size(_context: fidl::encoding::Context) -> usize {
1451 16
1452 }
1453 }
1454
1455 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ShutdownOptions, D>
1456 for &ShutdownOptions
1457 {
1458 unsafe fn encode(
1459 self,
1460 encoder: &mut fidl::encoding::Encoder<'_, D>,
1461 offset: usize,
1462 mut depth: fidl::encoding::Depth,
1463 ) -> fidl::Result<()> {
1464 encoder.debug_check_bounds::<ShutdownOptions>(offset);
1465 let max_ordinal: u64 = self.max_ordinal_present();
1467 encoder.write_num(max_ordinal, offset);
1468 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1469 if max_ordinal == 0 {
1471 return Ok(());
1472 }
1473 depth.increment()?;
1474 let envelope_size = 8;
1475 let bytes_len = max_ordinal as usize * envelope_size;
1476 #[allow(unused_variables)]
1477 let offset = encoder.out_of_line_offset(bytes_len);
1478 let mut _prev_end_offset: usize = 0;
1479 if 1 > max_ordinal {
1480 return Ok(());
1481 }
1482
1483 let cur_offset: usize = (1 - 1) * envelope_size;
1486
1487 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1489
1490 fidl::encoding::encode_in_envelope_optional::<ShutdownAction, D>(
1495 self.action
1496 .as_ref()
1497 .map(<ShutdownAction as fidl::encoding::ValueTypeMarker>::borrow),
1498 encoder,
1499 offset + cur_offset,
1500 depth,
1501 )?;
1502
1503 _prev_end_offset = cur_offset + envelope_size;
1504 if 2 > max_ordinal {
1505 return Ok(());
1506 }
1507
1508 let cur_offset: usize = (2 - 1) * envelope_size;
1511
1512 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1514
1515 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ShutdownReason, 100>, D>(
1520 self.reasons.as_ref().map(<fidl::encoding::Vector<ShutdownReason, 100> as fidl::encoding::ValueTypeMarker>::borrow),
1521 encoder, offset + cur_offset, depth
1522 )?;
1523
1524 _prev_end_offset = cur_offset + envelope_size;
1525
1526 Ok(())
1527 }
1528 }
1529
1530 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ShutdownOptions {
1531 #[inline(always)]
1532 fn new_empty() -> Self {
1533 Self::default()
1534 }
1535
1536 unsafe fn decode(
1537 &mut self,
1538 decoder: &mut fidl::encoding::Decoder<'_, D>,
1539 offset: usize,
1540 mut depth: fidl::encoding::Depth,
1541 ) -> fidl::Result<()> {
1542 decoder.debug_check_bounds::<Self>(offset);
1543 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1544 None => return Err(fidl::Error::NotNullable),
1545 Some(len) => len,
1546 };
1547 if len == 0 {
1549 return Ok(());
1550 };
1551 depth.increment()?;
1552 let envelope_size = 8;
1553 let bytes_len = len * envelope_size;
1554 let offset = decoder.out_of_line_offset(bytes_len)?;
1555 let mut _next_ordinal_to_read = 0;
1557 let mut next_offset = offset;
1558 let end_offset = offset + bytes_len;
1559 _next_ordinal_to_read += 1;
1560 if next_offset >= end_offset {
1561 return Ok(());
1562 }
1563
1564 while _next_ordinal_to_read < 1 {
1566 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1567 _next_ordinal_to_read += 1;
1568 next_offset += envelope_size;
1569 }
1570
1571 let next_out_of_line = decoder.next_out_of_line();
1572 let handles_before = decoder.remaining_handles();
1573 if let Some((inlined, num_bytes, num_handles)) =
1574 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1575 {
1576 let member_inline_size =
1577 <ShutdownAction as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1578 if inlined != (member_inline_size <= 4) {
1579 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1580 }
1581 let inner_offset;
1582 let mut inner_depth = depth.clone();
1583 if inlined {
1584 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1585 inner_offset = next_offset;
1586 } else {
1587 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1588 inner_depth.increment()?;
1589 }
1590 let val_ref =
1591 self.action.get_or_insert_with(|| fidl::new_empty!(ShutdownAction, D));
1592 fidl::decode!(ShutdownAction, D, val_ref, decoder, inner_offset, inner_depth)?;
1593 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1594 {
1595 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1596 }
1597 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1598 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1599 }
1600 }
1601
1602 next_offset += envelope_size;
1603 _next_ordinal_to_read += 1;
1604 if next_offset >= end_offset {
1605 return Ok(());
1606 }
1607
1608 while _next_ordinal_to_read < 2 {
1610 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1611 _next_ordinal_to_read += 1;
1612 next_offset += envelope_size;
1613 }
1614
1615 let next_out_of_line = decoder.next_out_of_line();
1616 let handles_before = decoder.remaining_handles();
1617 if let Some((inlined, num_bytes, num_handles)) =
1618 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1619 {
1620 let member_inline_size = <fidl::encoding::Vector<ShutdownReason, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1621 if inlined != (member_inline_size <= 4) {
1622 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1623 }
1624 let inner_offset;
1625 let mut inner_depth = depth.clone();
1626 if inlined {
1627 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1628 inner_offset = next_offset;
1629 } else {
1630 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1631 inner_depth.increment()?;
1632 }
1633 let val_ref = self.reasons.get_or_insert_with(
1634 || fidl::new_empty!(fidl::encoding::Vector<ShutdownReason, 100>, D),
1635 );
1636 fidl::decode!(fidl::encoding::Vector<ShutdownReason, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
1637 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1638 {
1639 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1640 }
1641 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1642 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1643 }
1644 }
1645
1646 next_offset += envelope_size;
1647
1648 while next_offset < end_offset {
1650 _next_ordinal_to_read += 1;
1651 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1652 next_offset += envelope_size;
1653 }
1654
1655 Ok(())
1656 }
1657 }
1658}