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