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
19#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
23#[repr(u32)]
24pub enum RebootReason {
25 UserRequest = 1,
26 SystemUpdate = 2,
28 RetrySystemUpdate = 8,
30 HighTemperature = 3,
31 FactoryDataReset = 6,
32 SessionFailure = 4,
34 SysmgrFailure = 5,
36 CriticalComponentFailure = 7,
38 ZbiSwap = 9,
40 OutOfMemory = 10,
42}
43
44impl RebootReason {
45 #[inline]
46 pub fn from_primitive(prim: u32) -> Option<Self> {
47 match prim {
48 1 => Some(Self::UserRequest),
49 2 => Some(Self::SystemUpdate),
50 8 => Some(Self::RetrySystemUpdate),
51 3 => Some(Self::HighTemperature),
52 6 => Some(Self::FactoryDataReset),
53 4 => Some(Self::SessionFailure),
54 5 => Some(Self::SysmgrFailure),
55 7 => Some(Self::CriticalComponentFailure),
56 9 => Some(Self::ZbiSwap),
57 10 => Some(Self::OutOfMemory),
58 _ => None,
59 }
60 }
61
62 #[inline]
63 pub const fn into_primitive(self) -> u32 {
64 self as u32
65 }
66}
67
68#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
70pub enum RebootReason2 {
71 UserRequest,
76 DeveloperRequest,
79 SystemUpdate,
81 RetrySystemUpdate,
83 HighTemperature,
84 FactoryDataReset,
85 SessionFailure,
87 SysmgrFailure,
89 CriticalComponentFailure,
91 ZbiSwap,
93 OutOfMemory,
95 NetstackMigration,
97 AndroidUnexpectedReason,
99 AndroidRescueParty,
101 AndroidCriticalProcessFailure,
103 #[doc(hidden)]
104 __SourceBreaking {
105 unknown_ordinal: u32,
106 },
107}
108
109#[macro_export]
111macro_rules! RebootReason2Unknown {
112 () => {
113 _
114 };
115}
116
117impl RebootReason2 {
118 #[inline]
119 pub fn from_primitive(prim: u32) -> Option<Self> {
120 match prim {
121 1 => Some(Self::UserRequest),
122 13 => Some(Self::DeveloperRequest),
123 2 => Some(Self::SystemUpdate),
124 8 => Some(Self::RetrySystemUpdate),
125 3 => Some(Self::HighTemperature),
126 6 => Some(Self::FactoryDataReset),
127 4 => Some(Self::SessionFailure),
128 5 => Some(Self::SysmgrFailure),
129 7 => Some(Self::CriticalComponentFailure),
130 9 => Some(Self::ZbiSwap),
131 10 => Some(Self::OutOfMemory),
132 11 => Some(Self::NetstackMigration),
133 12 => Some(Self::AndroidUnexpectedReason),
134 14 => Some(Self::AndroidRescueParty),
135 15 => Some(Self::AndroidCriticalProcessFailure),
136 _ => None,
137 }
138 }
139
140 #[inline]
141 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
142 match prim {
143 1 => Self::UserRequest,
144 13 => Self::DeveloperRequest,
145 2 => Self::SystemUpdate,
146 8 => Self::RetrySystemUpdate,
147 3 => Self::HighTemperature,
148 6 => Self::FactoryDataReset,
149 4 => Self::SessionFailure,
150 5 => Self::SysmgrFailure,
151 7 => Self::CriticalComponentFailure,
152 9 => Self::ZbiSwap,
153 10 => Self::OutOfMemory,
154 11 => Self::NetstackMigration,
155 12 => Self::AndroidUnexpectedReason,
156 14 => Self::AndroidRescueParty,
157 15 => Self::AndroidCriticalProcessFailure,
158 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
159 }
160 }
161
162 #[inline]
163 pub fn unknown() -> Self {
164 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
165 }
166
167 #[inline]
168 pub const fn into_primitive(self) -> u32 {
169 match self {
170 Self::UserRequest => 1,
171 Self::DeveloperRequest => 13,
172 Self::SystemUpdate => 2,
173 Self::RetrySystemUpdate => 8,
174 Self::HighTemperature => 3,
175 Self::FactoryDataReset => 6,
176 Self::SessionFailure => 4,
177 Self::SysmgrFailure => 5,
178 Self::CriticalComponentFailure => 7,
179 Self::ZbiSwap => 9,
180 Self::OutOfMemory => 10,
181 Self::NetstackMigration => 11,
182 Self::AndroidUnexpectedReason => 12,
183 Self::AndroidRescueParty => 14,
184 Self::AndroidCriticalProcessFailure => 15,
185 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
186 }
187 }
188
189 #[inline]
190 pub fn is_unknown(&self) -> bool {
191 match self {
192 Self::__SourceBreaking { unknown_ordinal: _ } => true,
193 _ => false,
194 }
195 }
196}
197
198#[derive(Clone, Debug, PartialEq)]
199pub struct AdminPerformRebootRequest {
200 pub options: RebootOptions,
201}
202
203impl fidl::Persistable for AdminPerformRebootRequest {}
204
205#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
206pub struct AdminRebootRequest {
207 pub reason: RebootReason,
208}
209
210impl fidl::Persistable for AdminRebootRequest {}
211
212#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
213pub struct RebootMethodsWatcherOnRebootRequest {
214 pub reason: RebootReason,
215}
216
217impl fidl::Persistable for RebootMethodsWatcherOnRebootRequest {}
218
219#[derive(Clone, Debug, PartialEq)]
220pub struct RebootWatcherOnRebootRequest {
221 pub options: RebootOptions,
222}
223
224impl fidl::Persistable for RebootWatcherOnRebootRequest {}
225
226#[derive(Clone, Debug, Default, PartialEq)]
228pub struct RebootOptions {
229 pub reasons: Option<Vec<RebootReason2>>,
231 #[doc(hidden)]
232 pub __source_breaking: fidl::marker::SourceBreaking,
233}
234
235impl fidl::Persistable for RebootOptions {}
236
237pub mod admin_ordinals {
238 pub const POWER_FULLY_ON: u64 = 0xb3272d15e00712f;
239 pub const REBOOT: u64 = 0x21f258bd20297368;
240 pub const PERFORM_REBOOT: u64 = 0x9416b4d36a80b4;
241 pub const REBOOT_TO_BOOTLOADER: u64 = 0x6dce331b33786aa;
242 pub const REBOOT_TO_RECOVERY: u64 = 0x1575c566be54f505;
243 pub const POWEROFF: u64 = 0x24101c5d0b439748;
244 pub const MEXEC: u64 = 0x1f91e77ec781a4c6;
245 pub const SUSPEND_TO_RAM: u64 = 0x3b0e356782e7620e;
246}
247
248pub mod reboot_methods_watcher_ordinals {
249 pub const ON_REBOOT: u64 = 0x225a5f32436a1b13;
250}
251
252pub mod reboot_methods_watcher_register_ordinals {
253 pub const REGISTER: u64 = 0x1fd793df8385f937;
254 pub const REGISTER_WITH_ACK: u64 = 0x243cbccabdac17ec;
255 pub const REGISTER_WATCHER: u64 = 0x3e6610e78471238;
256}
257
258pub mod reboot_watcher_ordinals {
259 pub const ON_REBOOT: u64 = 0x5334bbbe774f13c3;
260}
261
262mod internal {
263 use super::*;
264 unsafe impl fidl::encoding::TypeMarker for RebootReason {
265 type Owned = Self;
266
267 #[inline(always)]
268 fn inline_align(_context: fidl::encoding::Context) -> usize {
269 std::mem::align_of::<u32>()
270 }
271
272 #[inline(always)]
273 fn inline_size(_context: fidl::encoding::Context) -> usize {
274 std::mem::size_of::<u32>()
275 }
276
277 #[inline(always)]
278 fn encode_is_copy() -> bool {
279 true
280 }
281
282 #[inline(always)]
283 fn decode_is_copy() -> bool {
284 false
285 }
286 }
287
288 impl fidl::encoding::ValueTypeMarker for RebootReason {
289 type Borrowed<'a> = Self;
290 #[inline(always)]
291 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
292 *value
293 }
294 }
295
296 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RebootReason {
297 #[inline]
298 unsafe fn encode(
299 self,
300 encoder: &mut fidl::encoding::Encoder<'_, D>,
301 offset: usize,
302 _depth: fidl::encoding::Depth,
303 ) -> fidl::Result<()> {
304 encoder.debug_check_bounds::<Self>(offset);
305 encoder.write_num(self.into_primitive(), offset);
306 Ok(())
307 }
308 }
309
310 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootReason {
311 #[inline(always)]
312 fn new_empty() -> Self {
313 Self::UserRequest
314 }
315
316 #[inline]
317 unsafe fn decode(
318 &mut self,
319 decoder: &mut fidl::encoding::Decoder<'_, D>,
320 offset: usize,
321 _depth: fidl::encoding::Depth,
322 ) -> fidl::Result<()> {
323 decoder.debug_check_bounds::<Self>(offset);
324 let prim = decoder.read_num::<u32>(offset);
325
326 *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
327 Ok(())
328 }
329 }
330 unsafe impl fidl::encoding::TypeMarker for RebootReason2 {
331 type Owned = Self;
332
333 #[inline(always)]
334 fn inline_align(_context: fidl::encoding::Context) -> usize {
335 std::mem::align_of::<u32>()
336 }
337
338 #[inline(always)]
339 fn inline_size(_context: fidl::encoding::Context) -> usize {
340 std::mem::size_of::<u32>()
341 }
342
343 #[inline(always)]
344 fn encode_is_copy() -> bool {
345 false
346 }
347
348 #[inline(always)]
349 fn decode_is_copy() -> bool {
350 false
351 }
352 }
353
354 impl fidl::encoding::ValueTypeMarker for RebootReason2 {
355 type Borrowed<'a> = Self;
356 #[inline(always)]
357 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
358 *value
359 }
360 }
361
362 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for RebootReason2 {
363 #[inline]
364 unsafe fn encode(
365 self,
366 encoder: &mut fidl::encoding::Encoder<'_, D>,
367 offset: usize,
368 _depth: fidl::encoding::Depth,
369 ) -> fidl::Result<()> {
370 encoder.debug_check_bounds::<Self>(offset);
371 encoder.write_num(self.into_primitive(), offset);
372 Ok(())
373 }
374 }
375
376 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootReason2 {
377 #[inline(always)]
378 fn new_empty() -> Self {
379 Self::unknown()
380 }
381
382 #[inline]
383 unsafe fn decode(
384 &mut self,
385 decoder: &mut fidl::encoding::Decoder<'_, D>,
386 offset: usize,
387 _depth: fidl::encoding::Depth,
388 ) -> fidl::Result<()> {
389 decoder.debug_check_bounds::<Self>(offset);
390 let prim = decoder.read_num::<u32>(offset);
391
392 *self = Self::from_primitive_allow_unknown(prim);
393 Ok(())
394 }
395 }
396
397 impl fidl::encoding::ValueTypeMarker for AdminPerformRebootRequest {
398 type Borrowed<'a> = &'a Self;
399 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
400 value
401 }
402 }
403
404 unsafe impl fidl::encoding::TypeMarker for AdminPerformRebootRequest {
405 type Owned = Self;
406
407 #[inline(always)]
408 fn inline_align(_context: fidl::encoding::Context) -> usize {
409 8
410 }
411
412 #[inline(always)]
413 fn inline_size(_context: fidl::encoding::Context) -> usize {
414 16
415 }
416 }
417
418 unsafe impl<D: fidl::encoding::ResourceDialect>
419 fidl::encoding::Encode<AdminPerformRebootRequest, D> for &AdminPerformRebootRequest
420 {
421 #[inline]
422 unsafe fn encode(
423 self,
424 encoder: &mut fidl::encoding::Encoder<'_, D>,
425 offset: usize,
426 _depth: fidl::encoding::Depth,
427 ) -> fidl::Result<()> {
428 encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
429 fidl::encoding::Encode::<AdminPerformRebootRequest, D>::encode(
431 (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
432 encoder,
433 offset,
434 _depth,
435 )
436 }
437 }
438 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
439 fidl::encoding::Encode<AdminPerformRebootRequest, D> for (T0,)
440 {
441 #[inline]
442 unsafe fn encode(
443 self,
444 encoder: &mut fidl::encoding::Encoder<'_, D>,
445 offset: usize,
446 depth: fidl::encoding::Depth,
447 ) -> fidl::Result<()> {
448 encoder.debug_check_bounds::<AdminPerformRebootRequest>(offset);
449 self.0.encode(encoder, offset + 0, depth)?;
453 Ok(())
454 }
455 }
456
457 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
458 for AdminPerformRebootRequest
459 {
460 #[inline(always)]
461 fn new_empty() -> Self {
462 Self { options: fidl::new_empty!(RebootOptions, D) }
463 }
464
465 #[inline]
466 unsafe fn decode(
467 &mut self,
468 decoder: &mut fidl::encoding::Decoder<'_, D>,
469 offset: usize,
470 _depth: fidl::encoding::Depth,
471 ) -> fidl::Result<()> {
472 decoder.debug_check_bounds::<Self>(offset);
473 fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
475 Ok(())
476 }
477 }
478
479 impl fidl::encoding::ValueTypeMarker for AdminRebootRequest {
480 type Borrowed<'a> = &'a Self;
481 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
482 value
483 }
484 }
485
486 unsafe impl fidl::encoding::TypeMarker for AdminRebootRequest {
487 type Owned = Self;
488
489 #[inline(always)]
490 fn inline_align(_context: fidl::encoding::Context) -> usize {
491 4
492 }
493
494 #[inline(always)]
495 fn inline_size(_context: fidl::encoding::Context) -> usize {
496 4
497 }
498 }
499
500 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AdminRebootRequest, D>
501 for &AdminRebootRequest
502 {
503 #[inline]
504 unsafe fn encode(
505 self,
506 encoder: &mut fidl::encoding::Encoder<'_, D>,
507 offset: usize,
508 _depth: fidl::encoding::Depth,
509 ) -> fidl::Result<()> {
510 encoder.debug_check_bounds::<AdminRebootRequest>(offset);
511 fidl::encoding::Encode::<AdminRebootRequest, D>::encode(
513 (<RebootReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
514 encoder,
515 offset,
516 _depth,
517 )
518 }
519 }
520 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootReason, D>>
521 fidl::encoding::Encode<AdminRebootRequest, D> for (T0,)
522 {
523 #[inline]
524 unsafe fn encode(
525 self,
526 encoder: &mut fidl::encoding::Encoder<'_, D>,
527 offset: usize,
528 depth: fidl::encoding::Depth,
529 ) -> fidl::Result<()> {
530 encoder.debug_check_bounds::<AdminRebootRequest>(offset);
531 self.0.encode(encoder, offset + 0, depth)?;
535 Ok(())
536 }
537 }
538
539 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AdminRebootRequest {
540 #[inline(always)]
541 fn new_empty() -> Self {
542 Self { reason: fidl::new_empty!(RebootReason, D) }
543 }
544
545 #[inline]
546 unsafe fn decode(
547 &mut self,
548 decoder: &mut fidl::encoding::Decoder<'_, D>,
549 offset: usize,
550 _depth: fidl::encoding::Depth,
551 ) -> fidl::Result<()> {
552 decoder.debug_check_bounds::<Self>(offset);
553 fidl::decode!(RebootReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
555 Ok(())
556 }
557 }
558
559 impl fidl::encoding::ValueTypeMarker for RebootMethodsWatcherOnRebootRequest {
560 type Borrowed<'a> = &'a Self;
561 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
562 value
563 }
564 }
565
566 unsafe impl fidl::encoding::TypeMarker for RebootMethodsWatcherOnRebootRequest {
567 type Owned = Self;
568
569 #[inline(always)]
570 fn inline_align(_context: fidl::encoding::Context) -> usize {
571 4
572 }
573
574 #[inline(always)]
575 fn inline_size(_context: fidl::encoding::Context) -> usize {
576 4
577 }
578 }
579
580 unsafe impl<D: fidl::encoding::ResourceDialect>
581 fidl::encoding::Encode<RebootMethodsWatcherOnRebootRequest, D>
582 for &RebootMethodsWatcherOnRebootRequest
583 {
584 #[inline]
585 unsafe fn encode(
586 self,
587 encoder: &mut fidl::encoding::Encoder<'_, D>,
588 offset: usize,
589 _depth: fidl::encoding::Depth,
590 ) -> fidl::Result<()> {
591 encoder.debug_check_bounds::<RebootMethodsWatcherOnRebootRequest>(offset);
592 fidl::encoding::Encode::<RebootMethodsWatcherOnRebootRequest, D>::encode(
594 (<RebootReason as fidl::encoding::ValueTypeMarker>::borrow(&self.reason),),
595 encoder,
596 offset,
597 _depth,
598 )
599 }
600 }
601 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootReason, D>>
602 fidl::encoding::Encode<RebootMethodsWatcherOnRebootRequest, D> for (T0,)
603 {
604 #[inline]
605 unsafe fn encode(
606 self,
607 encoder: &mut fidl::encoding::Encoder<'_, D>,
608 offset: usize,
609 depth: fidl::encoding::Depth,
610 ) -> fidl::Result<()> {
611 encoder.debug_check_bounds::<RebootMethodsWatcherOnRebootRequest>(offset);
612 self.0.encode(encoder, offset + 0, depth)?;
616 Ok(())
617 }
618 }
619
620 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
621 for RebootMethodsWatcherOnRebootRequest
622 {
623 #[inline(always)]
624 fn new_empty() -> Self {
625 Self { reason: fidl::new_empty!(RebootReason, D) }
626 }
627
628 #[inline]
629 unsafe fn decode(
630 &mut self,
631 decoder: &mut fidl::encoding::Decoder<'_, D>,
632 offset: usize,
633 _depth: fidl::encoding::Depth,
634 ) -> fidl::Result<()> {
635 decoder.debug_check_bounds::<Self>(offset);
636 fidl::decode!(RebootReason, D, &mut self.reason, decoder, offset + 0, _depth)?;
638 Ok(())
639 }
640 }
641
642 impl fidl::encoding::ValueTypeMarker for RebootWatcherOnRebootRequest {
643 type Borrowed<'a> = &'a Self;
644 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
645 value
646 }
647 }
648
649 unsafe impl fidl::encoding::TypeMarker for RebootWatcherOnRebootRequest {
650 type Owned = Self;
651
652 #[inline(always)]
653 fn inline_align(_context: fidl::encoding::Context) -> usize {
654 8
655 }
656
657 #[inline(always)]
658 fn inline_size(_context: fidl::encoding::Context) -> usize {
659 16
660 }
661 }
662
663 unsafe impl<D: fidl::encoding::ResourceDialect>
664 fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for &RebootWatcherOnRebootRequest
665 {
666 #[inline]
667 unsafe fn encode(
668 self,
669 encoder: &mut fidl::encoding::Encoder<'_, D>,
670 offset: usize,
671 _depth: fidl::encoding::Depth,
672 ) -> fidl::Result<()> {
673 encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
674 fidl::encoding::Encode::<RebootWatcherOnRebootRequest, D>::encode(
676 (<RebootOptions as fidl::encoding::ValueTypeMarker>::borrow(&self.options),),
677 encoder,
678 offset,
679 _depth,
680 )
681 }
682 }
683 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<RebootOptions, D>>
684 fidl::encoding::Encode<RebootWatcherOnRebootRequest, D> for (T0,)
685 {
686 #[inline]
687 unsafe fn encode(
688 self,
689 encoder: &mut fidl::encoding::Encoder<'_, D>,
690 offset: usize,
691 depth: fidl::encoding::Depth,
692 ) -> fidl::Result<()> {
693 encoder.debug_check_bounds::<RebootWatcherOnRebootRequest>(offset);
694 self.0.encode(encoder, offset + 0, depth)?;
698 Ok(())
699 }
700 }
701
702 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
703 for RebootWatcherOnRebootRequest
704 {
705 #[inline(always)]
706 fn new_empty() -> Self {
707 Self { options: fidl::new_empty!(RebootOptions, D) }
708 }
709
710 #[inline]
711 unsafe fn decode(
712 &mut self,
713 decoder: &mut fidl::encoding::Decoder<'_, D>,
714 offset: usize,
715 _depth: fidl::encoding::Depth,
716 ) -> fidl::Result<()> {
717 decoder.debug_check_bounds::<Self>(offset);
718 fidl::decode!(RebootOptions, D, &mut self.options, decoder, offset + 0, _depth)?;
720 Ok(())
721 }
722 }
723
724 impl RebootOptions {
725 #[inline(always)]
726 fn max_ordinal_present(&self) -> u64 {
727 if let Some(_) = self.reasons {
728 return 1;
729 }
730 0
731 }
732 }
733
734 impl fidl::encoding::ValueTypeMarker for RebootOptions {
735 type Borrowed<'a> = &'a Self;
736 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
737 value
738 }
739 }
740
741 unsafe impl fidl::encoding::TypeMarker for RebootOptions {
742 type Owned = Self;
743
744 #[inline(always)]
745 fn inline_align(_context: fidl::encoding::Context) -> usize {
746 8
747 }
748
749 #[inline(always)]
750 fn inline_size(_context: fidl::encoding::Context) -> usize {
751 16
752 }
753 }
754
755 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RebootOptions, D>
756 for &RebootOptions
757 {
758 unsafe fn encode(
759 self,
760 encoder: &mut fidl::encoding::Encoder<'_, D>,
761 offset: usize,
762 mut depth: fidl::encoding::Depth,
763 ) -> fidl::Result<()> {
764 encoder.debug_check_bounds::<RebootOptions>(offset);
765 let max_ordinal: u64 = self.max_ordinal_present();
767 encoder.write_num(max_ordinal, offset);
768 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
769 if max_ordinal == 0 {
771 return Ok(());
772 }
773 depth.increment()?;
774 let envelope_size = 8;
775 let bytes_len = max_ordinal as usize * envelope_size;
776 #[allow(unused_variables)]
777 let offset = encoder.out_of_line_offset(bytes_len);
778 let mut _prev_end_offset: usize = 0;
779 if 1 > max_ordinal {
780 return Ok(());
781 }
782
783 let cur_offset: usize = (1 - 1) * envelope_size;
786
787 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
789
790 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<RebootReason2, 100>, D>(
795 self.reasons.as_ref().map(<fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::ValueTypeMarker>::borrow),
796 encoder, offset + cur_offset, depth
797 )?;
798
799 _prev_end_offset = cur_offset + envelope_size;
800
801 Ok(())
802 }
803 }
804
805 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RebootOptions {
806 #[inline(always)]
807 fn new_empty() -> Self {
808 Self::default()
809 }
810
811 unsafe fn decode(
812 &mut self,
813 decoder: &mut fidl::encoding::Decoder<'_, D>,
814 offset: usize,
815 mut depth: fidl::encoding::Depth,
816 ) -> fidl::Result<()> {
817 decoder.debug_check_bounds::<Self>(offset);
818 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
819 None => return Err(fidl::Error::NotNullable),
820 Some(len) => len,
821 };
822 if len == 0 {
824 return Ok(());
825 };
826 depth.increment()?;
827 let envelope_size = 8;
828 let bytes_len = len * envelope_size;
829 let offset = decoder.out_of_line_offset(bytes_len)?;
830 let mut _next_ordinal_to_read = 0;
832 let mut next_offset = offset;
833 let end_offset = offset + bytes_len;
834 _next_ordinal_to_read += 1;
835 if next_offset >= end_offset {
836 return Ok(());
837 }
838
839 while _next_ordinal_to_read < 1 {
841 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
842 _next_ordinal_to_read += 1;
843 next_offset += envelope_size;
844 }
845
846 let next_out_of_line = decoder.next_out_of_line();
847 let handles_before = decoder.remaining_handles();
848 if let Some((inlined, num_bytes, num_handles)) =
849 fidl::encoding::decode_envelope_header(decoder, next_offset)?
850 {
851 let member_inline_size = <fidl::encoding::Vector<RebootReason2, 100> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
852 if inlined != (member_inline_size <= 4) {
853 return Err(fidl::Error::InvalidInlineBitInEnvelope);
854 }
855 let inner_offset;
856 let mut inner_depth = depth.clone();
857 if inlined {
858 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
859 inner_offset = next_offset;
860 } else {
861 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
862 inner_depth.increment()?;
863 }
864 let val_ref = self.reasons.get_or_insert_with(
865 || fidl::new_empty!(fidl::encoding::Vector<RebootReason2, 100>, D),
866 );
867 fidl::decode!(fidl::encoding::Vector<RebootReason2, 100>, D, val_ref, decoder, inner_offset, inner_depth)?;
868 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
869 {
870 return Err(fidl::Error::InvalidNumBytesInEnvelope);
871 }
872 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
873 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
874 }
875 }
876
877 next_offset += envelope_size;
878
879 while next_offset < end_offset {
881 _next_ordinal_to_read += 1;
882 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
883 next_offset += envelope_size;
884 }
885
886 Ok(())
887 }
888 }
889}