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