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 DeveloperRequest,
238 SystemUpdate,
240 RetrySystemUpdate,
242 HighTemperature,
244 FactoryDataReset,
246 SessionFailure,
248 CriticalComponentFailure,
250 ZbiSwap,
252 OutOfMemory,
254 NetstackMigration,
256 AndroidUnexpectedReason,
258 StarnixContainerNoReason,
260 AndroidRescueParty,
262 AndroidCriticalProcessFailure,
264 #[doc(hidden)]
265 __SourceBreaking { unknown_ordinal: u32 },
266}
267
268#[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#[derive(Clone, Debug, Default, PartialEq)]
387pub struct RebootOptions {
388 pub reasons: Option<Vec<RebootReason2>>,
390 #[doc(hidden)]
391 pub __source_breaking: fidl::marker::SourceBreaking,
392}
393
394impl fidl::Persistable for RebootOptions {}
395
396#[derive(Clone, Debug, Default, PartialEq)]
398pub struct ShutdownOptions {
399 pub action: Option<ShutdownAction>,
400 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
1025
1026 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1028
1029 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
1194
1195 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1197
1198 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 let cur_offset: usize = (2 - 1) * envelope_size;
1219
1220 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1222
1223 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 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 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 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 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 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}