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