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