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