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