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