fidl_fuchsia_hardware_power_suspend__common/
fidl_fuchsia_hardware_power_suspend__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![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
11/// Maximum number of suspend states supported by the system.
12pub const MAX_SUSPEND_STATES: u32 = 256;
13
14/// Specifies the interpretation of `WakeReason.wake_vectors`.
15#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
16pub enum WakeVectorType {
17    /// Each element of `WakeReason.wake_vectors` is a koid.
18    Koid,
19    #[doc(hidden)]
20    __SourceBreaking { unknown_ordinal: u32 },
21}
22
23/// Pattern that matches an unknown `WakeVectorType` member.
24#[macro_export]
25macro_rules! WakeVectorTypeUnknown {
26    () => {
27        _
28    };
29}
30
31impl WakeVectorType {
32    #[inline]
33    pub fn from_primitive(prim: u32) -> Option<Self> {
34        match prim {
35            1 => Some(Self::Koid),
36            _ => None,
37        }
38    }
39
40    #[inline]
41    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
42        match prim {
43            1 => Self::Koid,
44            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
45        }
46    }
47
48    #[inline]
49    pub fn unknown() -> Self {
50        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
51    }
52
53    #[inline]
54    pub const fn into_primitive(self) -> u32 {
55        match self {
56            Self::Koid => 1,
57            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
58        }
59    }
60
61    #[inline]
62    pub fn is_unknown(&self) -> bool {
63        match self {
64            Self::__SourceBreaking { unknown_ordinal: _ } => true,
65            _ => false,
66        }
67    }
68}
69
70#[derive(Clone, Debug, Default, PartialEq)]
71pub struct SuspendState {
72    /// The amount of time taken for the system to resume from this
73    /// suspend state.
74    pub resume_latency: Option<i64>,
75    #[doc(hidden)]
76    pub __source_breaking: fidl::marker::SourceBreaking,
77}
78
79impl fidl::Persistable for SuspendState {}
80
81#[derive(Clone, Debug, Default, PartialEq)]
82pub struct SuspenderSuspendRequest {
83    /// This index corresponds to an entry in the vector returned by
84    /// GetSuspendStates. Returns ZX_ERR_OUT_OF_RANGE if `state_index` is
85    /// greater than the number of supported suspend states. Returns
86    /// ZX_ERR_INVALID_ARGS if this field is unset.
87    pub state_index: Option<u64>,
88    #[doc(hidden)]
89    pub __source_breaking: fidl::marker::SourceBreaking,
90}
91
92impl fidl::Persistable for SuspenderSuspendRequest {}
93
94#[derive(Clone, Debug, Default, PartialEq)]
95pub struct SuspenderGetSuspendStatesResponse {
96    pub suspend_states: Option<Vec<SuspendState>>,
97    #[doc(hidden)]
98    pub __source_breaking: fidl::marker::SourceBreaking,
99}
100
101impl fidl::Persistable for SuspenderGetSuspendStatesResponse {}
102
103#[derive(Clone, Debug, Default, PartialEq)]
104pub struct SuspenderSuspendResponse {
105    /// The `WakeReason` that caused the system to resume.
106    ///
107    /// See type `WakeReason` above for more details about wake reasons.
108    pub reason: Option<WakeReason>,
109    /// The amount of time the system spent suspended. If the system is
110    /// interrupted during suspend this field is unset.
111    pub suspend_duration: Option<i64>,
112    /// The amount of time it took for the system to suspend and resume not
113    /// including the duration that the system was suspended.
114    pub suspend_overhead: Option<i64>,
115    #[doc(hidden)]
116    pub __source_breaking: fidl::marker::SourceBreaking,
117}
118
119impl fidl::Persistable for SuspenderSuspendResponse {}
120
121#[derive(Clone, Debug, Default, PartialEq)]
122pub struct WakeReason {
123    /// A list of platform defined integers, each of which corresponds to
124    /// a physical interrupt vector on the system. The simplest such mapping
125    /// would be to map each interrupt number to a wake vector.
126    ///
127    /// The interpretation of this list of numbers is encoded by
128    /// `wake_vectors_type`.
129    pub wake_vectors: Option<Vec<u64>>,
130    /// A list of platform defined integers, each of which corresponds to
131    /// a wake vector that is *not* backed by a hardware interrupt.
132    pub soft_wake_vectors: Option<Vec<u64>>,
133    /// If set, clarifies the interpretation of `wake_vectors`.
134    pub wake_vectors_type: Option<WakeVectorType>,
135    /// If set to true, we reported fewer than the actual number of wake
136    /// vectors.
137    pub wake_vectors_overflow: Option<bool>,
138    #[doc(hidden)]
139    pub __source_breaking: fidl::marker::SourceBreaking,
140}
141
142impl fidl::Persistable for WakeReason {}
143
144pub mod suspender_ordinals {
145    pub const GET_SUSPEND_STATES: u64 = 0xa3fc4a1101bcbe1;
146    pub const SUSPEND: u64 = 0x5d8bb5e292987c8a;
147}
148
149mod internal {
150    use super::*;
151    unsafe impl fidl::encoding::TypeMarker for WakeVectorType {
152        type Owned = Self;
153
154        #[inline(always)]
155        fn inline_align(_context: fidl::encoding::Context) -> usize {
156            std::mem::align_of::<u32>()
157        }
158
159        #[inline(always)]
160        fn inline_size(_context: fidl::encoding::Context) -> usize {
161            std::mem::size_of::<u32>()
162        }
163
164        #[inline(always)]
165        fn encode_is_copy() -> bool {
166            false
167        }
168
169        #[inline(always)]
170        fn decode_is_copy() -> bool {
171            false
172        }
173    }
174
175    impl fidl::encoding::ValueTypeMarker for WakeVectorType {
176        type Borrowed<'a> = Self;
177        #[inline(always)]
178        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
179            *value
180        }
181    }
182
183    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for WakeVectorType {
184        #[inline]
185        unsafe fn encode(
186            self,
187            encoder: &mut fidl::encoding::Encoder<'_, D>,
188            offset: usize,
189            _depth: fidl::encoding::Depth,
190        ) -> fidl::Result<()> {
191            encoder.debug_check_bounds::<Self>(offset);
192            encoder.write_num(self.into_primitive(), offset);
193            Ok(())
194        }
195    }
196
197    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WakeVectorType {
198        #[inline(always)]
199        fn new_empty() -> Self {
200            Self::unknown()
201        }
202
203        #[inline]
204        unsafe fn decode(
205            &mut self,
206            decoder: &mut fidl::encoding::Decoder<'_, D>,
207            offset: usize,
208            _depth: fidl::encoding::Depth,
209        ) -> fidl::Result<()> {
210            decoder.debug_check_bounds::<Self>(offset);
211            let prim = decoder.read_num::<u32>(offset);
212
213            *self = Self::from_primitive_allow_unknown(prim);
214            Ok(())
215        }
216    }
217
218    impl SuspendState {
219        #[inline(always)]
220        fn max_ordinal_present(&self) -> u64 {
221            if let Some(_) = self.resume_latency {
222                return 1;
223            }
224            0
225        }
226    }
227
228    impl fidl::encoding::ValueTypeMarker for SuspendState {
229        type Borrowed<'a> = &'a Self;
230        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
231            value
232        }
233    }
234
235    unsafe impl fidl::encoding::TypeMarker for SuspendState {
236        type Owned = Self;
237
238        #[inline(always)]
239        fn inline_align(_context: fidl::encoding::Context) -> usize {
240            8
241        }
242
243        #[inline(always)]
244        fn inline_size(_context: fidl::encoding::Context) -> usize {
245            16
246        }
247    }
248
249    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SuspendState, D>
250        for &SuspendState
251    {
252        unsafe fn encode(
253            self,
254            encoder: &mut fidl::encoding::Encoder<'_, D>,
255            offset: usize,
256            mut depth: fidl::encoding::Depth,
257        ) -> fidl::Result<()> {
258            encoder.debug_check_bounds::<SuspendState>(offset);
259            // Vector header
260            let max_ordinal: u64 = self.max_ordinal_present();
261            encoder.write_num(max_ordinal, offset);
262            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
263            // Calling encoder.out_of_line_offset(0) is not allowed.
264            if max_ordinal == 0 {
265                return Ok(());
266            }
267            depth.increment()?;
268            let envelope_size = 8;
269            let bytes_len = max_ordinal as usize * envelope_size;
270            #[allow(unused_variables)]
271            let offset = encoder.out_of_line_offset(bytes_len);
272            let mut _prev_end_offset: usize = 0;
273            if 1 > max_ordinal {
274                return Ok(());
275            }
276
277            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
278            // are envelope_size bytes.
279            let cur_offset: usize = (1 - 1) * envelope_size;
280
281            // Zero reserved fields.
282            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
283
284            // Safety:
285            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
286            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
287            //   envelope_size bytes, there is always sufficient room.
288            fidl::encoding::encode_in_envelope_optional::<i64, D>(
289                self.resume_latency.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
290                encoder,
291                offset + cur_offset,
292                depth,
293            )?;
294
295            _prev_end_offset = cur_offset + envelope_size;
296
297            Ok(())
298        }
299    }
300
301    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SuspendState {
302        #[inline(always)]
303        fn new_empty() -> Self {
304            Self::default()
305        }
306
307        unsafe fn decode(
308            &mut self,
309            decoder: &mut fidl::encoding::Decoder<'_, D>,
310            offset: usize,
311            mut depth: fidl::encoding::Depth,
312        ) -> fidl::Result<()> {
313            decoder.debug_check_bounds::<Self>(offset);
314            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
315                None => return Err(fidl::Error::NotNullable),
316                Some(len) => len,
317            };
318            // Calling decoder.out_of_line_offset(0) is not allowed.
319            if len == 0 {
320                return Ok(());
321            };
322            depth.increment()?;
323            let envelope_size = 8;
324            let bytes_len = len * envelope_size;
325            let offset = decoder.out_of_line_offset(bytes_len)?;
326            // Decode the envelope for each type.
327            let mut _next_ordinal_to_read = 0;
328            let mut next_offset = offset;
329            let end_offset = offset + bytes_len;
330            _next_ordinal_to_read += 1;
331            if next_offset >= end_offset {
332                return Ok(());
333            }
334
335            // Decode unknown envelopes for gaps in ordinals.
336            while _next_ordinal_to_read < 1 {
337                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
338                _next_ordinal_to_read += 1;
339                next_offset += envelope_size;
340            }
341
342            let next_out_of_line = decoder.next_out_of_line();
343            let handles_before = decoder.remaining_handles();
344            if let Some((inlined, num_bytes, num_handles)) =
345                fidl::encoding::decode_envelope_header(decoder, next_offset)?
346            {
347                let member_inline_size =
348                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
349                if inlined != (member_inline_size <= 4) {
350                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
351                }
352                let inner_offset;
353                let mut inner_depth = depth.clone();
354                if inlined {
355                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
356                    inner_offset = next_offset;
357                } else {
358                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
359                    inner_depth.increment()?;
360                }
361                let val_ref = self.resume_latency.get_or_insert_with(|| fidl::new_empty!(i64, D));
362                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
363                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
364                {
365                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
366                }
367                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
368                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
369                }
370            }
371
372            next_offset += envelope_size;
373
374            // Decode the remaining unknown envelopes.
375            while next_offset < end_offset {
376                _next_ordinal_to_read += 1;
377                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
378                next_offset += envelope_size;
379            }
380
381            Ok(())
382        }
383    }
384
385    impl SuspenderSuspendRequest {
386        #[inline(always)]
387        fn max_ordinal_present(&self) -> u64 {
388            if let Some(_) = self.state_index {
389                return 1;
390            }
391            0
392        }
393    }
394
395    impl fidl::encoding::ValueTypeMarker for SuspenderSuspendRequest {
396        type Borrowed<'a> = &'a Self;
397        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
398            value
399        }
400    }
401
402    unsafe impl fidl::encoding::TypeMarker for SuspenderSuspendRequest {
403        type Owned = Self;
404
405        #[inline(always)]
406        fn inline_align(_context: fidl::encoding::Context) -> usize {
407            8
408        }
409
410        #[inline(always)]
411        fn inline_size(_context: fidl::encoding::Context) -> usize {
412            16
413        }
414    }
415
416    unsafe impl<D: fidl::encoding::ResourceDialect>
417        fidl::encoding::Encode<SuspenderSuspendRequest, D> for &SuspenderSuspendRequest
418    {
419        unsafe fn encode(
420            self,
421            encoder: &mut fidl::encoding::Encoder<'_, D>,
422            offset: usize,
423            mut depth: fidl::encoding::Depth,
424        ) -> fidl::Result<()> {
425            encoder.debug_check_bounds::<SuspenderSuspendRequest>(offset);
426            // Vector header
427            let max_ordinal: u64 = self.max_ordinal_present();
428            encoder.write_num(max_ordinal, offset);
429            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
430            // Calling encoder.out_of_line_offset(0) is not allowed.
431            if max_ordinal == 0 {
432                return Ok(());
433            }
434            depth.increment()?;
435            let envelope_size = 8;
436            let bytes_len = max_ordinal as usize * envelope_size;
437            #[allow(unused_variables)]
438            let offset = encoder.out_of_line_offset(bytes_len);
439            let mut _prev_end_offset: usize = 0;
440            if 1 > max_ordinal {
441                return Ok(());
442            }
443
444            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
445            // are envelope_size bytes.
446            let cur_offset: usize = (1 - 1) * envelope_size;
447
448            // Zero reserved fields.
449            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
450
451            // Safety:
452            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
453            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
454            //   envelope_size bytes, there is always sufficient room.
455            fidl::encoding::encode_in_envelope_optional::<u64, D>(
456                self.state_index.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
457                encoder,
458                offset + cur_offset,
459                depth,
460            )?;
461
462            _prev_end_offset = cur_offset + envelope_size;
463
464            Ok(())
465        }
466    }
467
468    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
469        for SuspenderSuspendRequest
470    {
471        #[inline(always)]
472        fn new_empty() -> Self {
473            Self::default()
474        }
475
476        unsafe fn decode(
477            &mut self,
478            decoder: &mut fidl::encoding::Decoder<'_, D>,
479            offset: usize,
480            mut depth: fidl::encoding::Depth,
481        ) -> fidl::Result<()> {
482            decoder.debug_check_bounds::<Self>(offset);
483            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
484                None => return Err(fidl::Error::NotNullable),
485                Some(len) => len,
486            };
487            // Calling decoder.out_of_line_offset(0) is not allowed.
488            if len == 0 {
489                return Ok(());
490            };
491            depth.increment()?;
492            let envelope_size = 8;
493            let bytes_len = len * envelope_size;
494            let offset = decoder.out_of_line_offset(bytes_len)?;
495            // Decode the envelope for each type.
496            let mut _next_ordinal_to_read = 0;
497            let mut next_offset = offset;
498            let end_offset = offset + bytes_len;
499            _next_ordinal_to_read += 1;
500            if next_offset >= end_offset {
501                return Ok(());
502            }
503
504            // Decode unknown envelopes for gaps in ordinals.
505            while _next_ordinal_to_read < 1 {
506                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
507                _next_ordinal_to_read += 1;
508                next_offset += envelope_size;
509            }
510
511            let next_out_of_line = decoder.next_out_of_line();
512            let handles_before = decoder.remaining_handles();
513            if let Some((inlined, num_bytes, num_handles)) =
514                fidl::encoding::decode_envelope_header(decoder, next_offset)?
515            {
516                let member_inline_size =
517                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
518                if inlined != (member_inline_size <= 4) {
519                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
520                }
521                let inner_offset;
522                let mut inner_depth = depth.clone();
523                if inlined {
524                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
525                    inner_offset = next_offset;
526                } else {
527                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
528                    inner_depth.increment()?;
529                }
530                let val_ref = self.state_index.get_or_insert_with(|| fidl::new_empty!(u64, D));
531                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
532                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
533                {
534                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
535                }
536                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
537                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
538                }
539            }
540
541            next_offset += envelope_size;
542
543            // Decode the remaining unknown envelopes.
544            while next_offset < end_offset {
545                _next_ordinal_to_read += 1;
546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
547                next_offset += envelope_size;
548            }
549
550            Ok(())
551        }
552    }
553
554    impl SuspenderGetSuspendStatesResponse {
555        #[inline(always)]
556        fn max_ordinal_present(&self) -> u64 {
557            if let Some(_) = self.suspend_states {
558                return 1;
559            }
560            0
561        }
562    }
563
564    impl fidl::encoding::ValueTypeMarker for SuspenderGetSuspendStatesResponse {
565        type Borrowed<'a> = &'a Self;
566        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
567            value
568        }
569    }
570
571    unsafe impl fidl::encoding::TypeMarker for SuspenderGetSuspendStatesResponse {
572        type Owned = Self;
573
574        #[inline(always)]
575        fn inline_align(_context: fidl::encoding::Context) -> usize {
576            8
577        }
578
579        #[inline(always)]
580        fn inline_size(_context: fidl::encoding::Context) -> usize {
581            16
582        }
583    }
584
585    unsafe impl<D: fidl::encoding::ResourceDialect>
586        fidl::encoding::Encode<SuspenderGetSuspendStatesResponse, D>
587        for &SuspenderGetSuspendStatesResponse
588    {
589        unsafe fn encode(
590            self,
591            encoder: &mut fidl::encoding::Encoder<'_, D>,
592            offset: usize,
593            mut depth: fidl::encoding::Depth,
594        ) -> fidl::Result<()> {
595            encoder.debug_check_bounds::<SuspenderGetSuspendStatesResponse>(offset);
596            // Vector header
597            let max_ordinal: u64 = self.max_ordinal_present();
598            encoder.write_num(max_ordinal, offset);
599            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
600            // Calling encoder.out_of_line_offset(0) is not allowed.
601            if max_ordinal == 0 {
602                return Ok(());
603            }
604            depth.increment()?;
605            let envelope_size = 8;
606            let bytes_len = max_ordinal as usize * envelope_size;
607            #[allow(unused_variables)]
608            let offset = encoder.out_of_line_offset(bytes_len);
609            let mut _prev_end_offset: usize = 0;
610            if 1 > max_ordinal {
611                return Ok(());
612            }
613
614            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
615            // are envelope_size bytes.
616            let cur_offset: usize = (1 - 1) * envelope_size;
617
618            // Zero reserved fields.
619            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
620
621            // Safety:
622            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
623            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
624            //   envelope_size bytes, there is always sufficient room.
625            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<SuspendState, 256>, D>(
626            self.suspend_states.as_ref().map(<fidl::encoding::Vector<SuspendState, 256> as fidl::encoding::ValueTypeMarker>::borrow),
627            encoder, offset + cur_offset, depth
628        )?;
629
630            _prev_end_offset = cur_offset + envelope_size;
631
632            Ok(())
633        }
634    }
635
636    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
637        for SuspenderGetSuspendStatesResponse
638    {
639        #[inline(always)]
640        fn new_empty() -> Self {
641            Self::default()
642        }
643
644        unsafe fn decode(
645            &mut self,
646            decoder: &mut fidl::encoding::Decoder<'_, D>,
647            offset: usize,
648            mut depth: fidl::encoding::Depth,
649        ) -> fidl::Result<()> {
650            decoder.debug_check_bounds::<Self>(offset);
651            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
652                None => return Err(fidl::Error::NotNullable),
653                Some(len) => len,
654            };
655            // Calling decoder.out_of_line_offset(0) is not allowed.
656            if len == 0 {
657                return Ok(());
658            };
659            depth.increment()?;
660            let envelope_size = 8;
661            let bytes_len = len * envelope_size;
662            let offset = decoder.out_of_line_offset(bytes_len)?;
663            // Decode the envelope for each type.
664            let mut _next_ordinal_to_read = 0;
665            let mut next_offset = offset;
666            let end_offset = offset + bytes_len;
667            _next_ordinal_to_read += 1;
668            if next_offset >= end_offset {
669                return Ok(());
670            }
671
672            // Decode unknown envelopes for gaps in ordinals.
673            while _next_ordinal_to_read < 1 {
674                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
675                _next_ordinal_to_read += 1;
676                next_offset += envelope_size;
677            }
678
679            let next_out_of_line = decoder.next_out_of_line();
680            let handles_before = decoder.remaining_handles();
681            if let Some((inlined, num_bytes, num_handles)) =
682                fidl::encoding::decode_envelope_header(decoder, next_offset)?
683            {
684                let member_inline_size = <fidl::encoding::Vector<SuspendState, 256> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
685                if inlined != (member_inline_size <= 4) {
686                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
687                }
688                let inner_offset;
689                let mut inner_depth = depth.clone();
690                if inlined {
691                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
692                    inner_offset = next_offset;
693                } else {
694                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
695                    inner_depth.increment()?;
696                }
697                let val_ref = self.suspend_states.get_or_insert_with(
698                    || fidl::new_empty!(fidl::encoding::Vector<SuspendState, 256>, D),
699                );
700                fidl::decode!(fidl::encoding::Vector<SuspendState, 256>, D, val_ref, decoder, inner_offset, inner_depth)?;
701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
702                {
703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
704                }
705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
707                }
708            }
709
710            next_offset += envelope_size;
711
712            // Decode the remaining unknown envelopes.
713            while next_offset < end_offset {
714                _next_ordinal_to_read += 1;
715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
716                next_offset += envelope_size;
717            }
718
719            Ok(())
720        }
721    }
722
723    impl SuspenderSuspendResponse {
724        #[inline(always)]
725        fn max_ordinal_present(&self) -> u64 {
726            if let Some(_) = self.suspend_overhead {
727                return 3;
728            }
729            if let Some(_) = self.suspend_duration {
730                return 2;
731            }
732            if let Some(_) = self.reason {
733                return 1;
734            }
735            0
736        }
737    }
738
739    impl fidl::encoding::ValueTypeMarker for SuspenderSuspendResponse {
740        type Borrowed<'a> = &'a Self;
741        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
742            value
743        }
744    }
745
746    unsafe impl fidl::encoding::TypeMarker for SuspenderSuspendResponse {
747        type Owned = Self;
748
749        #[inline(always)]
750        fn inline_align(_context: fidl::encoding::Context) -> usize {
751            8
752        }
753
754        #[inline(always)]
755        fn inline_size(_context: fidl::encoding::Context) -> usize {
756            16
757        }
758    }
759
760    unsafe impl<D: fidl::encoding::ResourceDialect>
761        fidl::encoding::Encode<SuspenderSuspendResponse, D> for &SuspenderSuspendResponse
762    {
763        unsafe fn encode(
764            self,
765            encoder: &mut fidl::encoding::Encoder<'_, D>,
766            offset: usize,
767            mut depth: fidl::encoding::Depth,
768        ) -> fidl::Result<()> {
769            encoder.debug_check_bounds::<SuspenderSuspendResponse>(offset);
770            // Vector header
771            let max_ordinal: u64 = self.max_ordinal_present();
772            encoder.write_num(max_ordinal, offset);
773            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
774            // Calling encoder.out_of_line_offset(0) is not allowed.
775            if max_ordinal == 0 {
776                return Ok(());
777            }
778            depth.increment()?;
779            let envelope_size = 8;
780            let bytes_len = max_ordinal as usize * envelope_size;
781            #[allow(unused_variables)]
782            let offset = encoder.out_of_line_offset(bytes_len);
783            let mut _prev_end_offset: usize = 0;
784            if 1 > max_ordinal {
785                return Ok(());
786            }
787
788            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
789            // are envelope_size bytes.
790            let cur_offset: usize = (1 - 1) * envelope_size;
791
792            // Zero reserved fields.
793            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
794
795            // Safety:
796            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
797            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
798            //   envelope_size bytes, there is always sufficient room.
799            fidl::encoding::encode_in_envelope_optional::<WakeReason, D>(
800                self.reason.as_ref().map(<WakeReason as fidl::encoding::ValueTypeMarker>::borrow),
801                encoder,
802                offset + cur_offset,
803                depth,
804            )?;
805
806            _prev_end_offset = cur_offset + envelope_size;
807            if 2 > max_ordinal {
808                return Ok(());
809            }
810
811            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
812            // are envelope_size bytes.
813            let cur_offset: usize = (2 - 1) * envelope_size;
814
815            // Zero reserved fields.
816            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
817
818            // Safety:
819            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
820            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
821            //   envelope_size bytes, there is always sufficient room.
822            fidl::encoding::encode_in_envelope_optional::<i64, D>(
823                self.suspend_duration
824                    .as_ref()
825                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
826                encoder,
827                offset + cur_offset,
828                depth,
829            )?;
830
831            _prev_end_offset = cur_offset + envelope_size;
832            if 3 > max_ordinal {
833                return Ok(());
834            }
835
836            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
837            // are envelope_size bytes.
838            let cur_offset: usize = (3 - 1) * envelope_size;
839
840            // Zero reserved fields.
841            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
842
843            // Safety:
844            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
845            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
846            //   envelope_size bytes, there is always sufficient room.
847            fidl::encoding::encode_in_envelope_optional::<i64, D>(
848                self.suspend_overhead
849                    .as_ref()
850                    .map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
851                encoder,
852                offset + cur_offset,
853                depth,
854            )?;
855
856            _prev_end_offset = cur_offset + envelope_size;
857
858            Ok(())
859        }
860    }
861
862    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
863        for SuspenderSuspendResponse
864    {
865        #[inline(always)]
866        fn new_empty() -> Self {
867            Self::default()
868        }
869
870        unsafe fn decode(
871            &mut self,
872            decoder: &mut fidl::encoding::Decoder<'_, D>,
873            offset: usize,
874            mut depth: fidl::encoding::Depth,
875        ) -> fidl::Result<()> {
876            decoder.debug_check_bounds::<Self>(offset);
877            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
878                None => return Err(fidl::Error::NotNullable),
879                Some(len) => len,
880            };
881            // Calling decoder.out_of_line_offset(0) is not allowed.
882            if len == 0 {
883                return Ok(());
884            };
885            depth.increment()?;
886            let envelope_size = 8;
887            let bytes_len = len * envelope_size;
888            let offset = decoder.out_of_line_offset(bytes_len)?;
889            // Decode the envelope for each type.
890            let mut _next_ordinal_to_read = 0;
891            let mut next_offset = offset;
892            let end_offset = offset + bytes_len;
893            _next_ordinal_to_read += 1;
894            if next_offset >= end_offset {
895                return Ok(());
896            }
897
898            // Decode unknown envelopes for gaps in ordinals.
899            while _next_ordinal_to_read < 1 {
900                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
901                _next_ordinal_to_read += 1;
902                next_offset += envelope_size;
903            }
904
905            let next_out_of_line = decoder.next_out_of_line();
906            let handles_before = decoder.remaining_handles();
907            if let Some((inlined, num_bytes, num_handles)) =
908                fidl::encoding::decode_envelope_header(decoder, next_offset)?
909            {
910                let member_inline_size =
911                    <WakeReason as fidl::encoding::TypeMarker>::inline_size(decoder.context);
912                if inlined != (member_inline_size <= 4) {
913                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
914                }
915                let inner_offset;
916                let mut inner_depth = depth.clone();
917                if inlined {
918                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
919                    inner_offset = next_offset;
920                } else {
921                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
922                    inner_depth.increment()?;
923                }
924                let val_ref = self.reason.get_or_insert_with(|| fidl::new_empty!(WakeReason, D));
925                fidl::decode!(WakeReason, D, val_ref, decoder, inner_offset, inner_depth)?;
926                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
927                {
928                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
929                }
930                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
931                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
932                }
933            }
934
935            next_offset += envelope_size;
936            _next_ordinal_to_read += 1;
937            if next_offset >= end_offset {
938                return Ok(());
939            }
940
941            // Decode unknown envelopes for gaps in ordinals.
942            while _next_ordinal_to_read < 2 {
943                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
944                _next_ordinal_to_read += 1;
945                next_offset += envelope_size;
946            }
947
948            let next_out_of_line = decoder.next_out_of_line();
949            let handles_before = decoder.remaining_handles();
950            if let Some((inlined, num_bytes, num_handles)) =
951                fidl::encoding::decode_envelope_header(decoder, next_offset)?
952            {
953                let member_inline_size =
954                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
955                if inlined != (member_inline_size <= 4) {
956                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
957                }
958                let inner_offset;
959                let mut inner_depth = depth.clone();
960                if inlined {
961                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
962                    inner_offset = next_offset;
963                } else {
964                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
965                    inner_depth.increment()?;
966                }
967                let val_ref = self.suspend_duration.get_or_insert_with(|| fidl::new_empty!(i64, D));
968                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
969                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
970                {
971                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
972                }
973                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
974                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
975                }
976            }
977
978            next_offset += envelope_size;
979            _next_ordinal_to_read += 1;
980            if next_offset >= end_offset {
981                return Ok(());
982            }
983
984            // Decode unknown envelopes for gaps in ordinals.
985            while _next_ordinal_to_read < 3 {
986                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
987                _next_ordinal_to_read += 1;
988                next_offset += envelope_size;
989            }
990
991            let next_out_of_line = decoder.next_out_of_line();
992            let handles_before = decoder.remaining_handles();
993            if let Some((inlined, num_bytes, num_handles)) =
994                fidl::encoding::decode_envelope_header(decoder, next_offset)?
995            {
996                let member_inline_size =
997                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
998                if inlined != (member_inline_size <= 4) {
999                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1000                }
1001                let inner_offset;
1002                let mut inner_depth = depth.clone();
1003                if inlined {
1004                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1005                    inner_offset = next_offset;
1006                } else {
1007                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1008                    inner_depth.increment()?;
1009                }
1010                let val_ref = self.suspend_overhead.get_or_insert_with(|| fidl::new_empty!(i64, D));
1011                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
1012                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1013                {
1014                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1015                }
1016                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1017                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1018                }
1019            }
1020
1021            next_offset += envelope_size;
1022
1023            // Decode the remaining unknown envelopes.
1024            while next_offset < end_offset {
1025                _next_ordinal_to_read += 1;
1026                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1027                next_offset += envelope_size;
1028            }
1029
1030            Ok(())
1031        }
1032    }
1033
1034    impl WakeReason {
1035        #[inline(always)]
1036        fn max_ordinal_present(&self) -> u64 {
1037            if let Some(_) = self.wake_vectors_overflow {
1038                return 4;
1039            }
1040            if let Some(_) = self.wake_vectors_type {
1041                return 3;
1042            }
1043            if let Some(_) = self.soft_wake_vectors {
1044                return 2;
1045            }
1046            if let Some(_) = self.wake_vectors {
1047                return 1;
1048            }
1049            0
1050        }
1051    }
1052
1053    impl fidl::encoding::ValueTypeMarker for WakeReason {
1054        type Borrowed<'a> = &'a Self;
1055        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1056            value
1057        }
1058    }
1059
1060    unsafe impl fidl::encoding::TypeMarker for WakeReason {
1061        type Owned = Self;
1062
1063        #[inline(always)]
1064        fn inline_align(_context: fidl::encoding::Context) -> usize {
1065            8
1066        }
1067
1068        #[inline(always)]
1069        fn inline_size(_context: fidl::encoding::Context) -> usize {
1070            16
1071        }
1072    }
1073
1074    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<WakeReason, D>
1075        for &WakeReason
1076    {
1077        unsafe fn encode(
1078            self,
1079            encoder: &mut fidl::encoding::Encoder<'_, D>,
1080            offset: usize,
1081            mut depth: fidl::encoding::Depth,
1082        ) -> fidl::Result<()> {
1083            encoder.debug_check_bounds::<WakeReason>(offset);
1084            // Vector header
1085            let max_ordinal: u64 = self.max_ordinal_present();
1086            encoder.write_num(max_ordinal, offset);
1087            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1088            // Calling encoder.out_of_line_offset(0) is not allowed.
1089            if max_ordinal == 0 {
1090                return Ok(());
1091            }
1092            depth.increment()?;
1093            let envelope_size = 8;
1094            let bytes_len = max_ordinal as usize * envelope_size;
1095            #[allow(unused_variables)]
1096            let offset = encoder.out_of_line_offset(bytes_len);
1097            let mut _prev_end_offset: usize = 0;
1098            if 1 > max_ordinal {
1099                return Ok(());
1100            }
1101
1102            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1103            // are envelope_size bytes.
1104            let cur_offset: usize = (1 - 1) * envelope_size;
1105
1106            // Zero reserved fields.
1107            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1108
1109            // Safety:
1110            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1111            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1112            //   envelope_size bytes, there is always sufficient room.
1113            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
1114            self.wake_vectors.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
1115            encoder, offset + cur_offset, depth
1116        )?;
1117
1118            _prev_end_offset = cur_offset + envelope_size;
1119            if 2 > max_ordinal {
1120                return Ok(());
1121            }
1122
1123            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1124            // are envelope_size bytes.
1125            let cur_offset: usize = (2 - 1) * envelope_size;
1126
1127            // Zero reserved fields.
1128            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1129
1130            // Safety:
1131            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1132            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1133            //   envelope_size bytes, there is always sufficient room.
1134            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
1135            self.soft_wake_vectors.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
1136            encoder, offset + cur_offset, depth
1137        )?;
1138
1139            _prev_end_offset = cur_offset + envelope_size;
1140            if 3 > max_ordinal {
1141                return Ok(());
1142            }
1143
1144            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1145            // are envelope_size bytes.
1146            let cur_offset: usize = (3 - 1) * envelope_size;
1147
1148            // Zero reserved fields.
1149            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1150
1151            // Safety:
1152            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1153            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1154            //   envelope_size bytes, there is always sufficient room.
1155            fidl::encoding::encode_in_envelope_optional::<WakeVectorType, D>(
1156                self.wake_vectors_type
1157                    .as_ref()
1158                    .map(<WakeVectorType as fidl::encoding::ValueTypeMarker>::borrow),
1159                encoder,
1160                offset + cur_offset,
1161                depth,
1162            )?;
1163
1164            _prev_end_offset = cur_offset + envelope_size;
1165            if 4 > max_ordinal {
1166                return Ok(());
1167            }
1168
1169            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1170            // are envelope_size bytes.
1171            let cur_offset: usize = (4 - 1) * envelope_size;
1172
1173            // Zero reserved fields.
1174            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1175
1176            // Safety:
1177            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1178            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1179            //   envelope_size bytes, there is always sufficient room.
1180            fidl::encoding::encode_in_envelope_optional::<bool, D>(
1181                self.wake_vectors_overflow
1182                    .as_ref()
1183                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
1184                encoder,
1185                offset + cur_offset,
1186                depth,
1187            )?;
1188
1189            _prev_end_offset = cur_offset + envelope_size;
1190
1191            Ok(())
1192        }
1193    }
1194
1195    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for WakeReason {
1196        #[inline(always)]
1197        fn new_empty() -> Self {
1198            Self::default()
1199        }
1200
1201        unsafe fn decode(
1202            &mut self,
1203            decoder: &mut fidl::encoding::Decoder<'_, D>,
1204            offset: usize,
1205            mut depth: fidl::encoding::Depth,
1206        ) -> fidl::Result<()> {
1207            decoder.debug_check_bounds::<Self>(offset);
1208            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1209                None => return Err(fidl::Error::NotNullable),
1210                Some(len) => len,
1211            };
1212            // Calling decoder.out_of_line_offset(0) is not allowed.
1213            if len == 0 {
1214                return Ok(());
1215            };
1216            depth.increment()?;
1217            let envelope_size = 8;
1218            let bytes_len = len * envelope_size;
1219            let offset = decoder.out_of_line_offset(bytes_len)?;
1220            // Decode the envelope for each type.
1221            let mut _next_ordinal_to_read = 0;
1222            let mut next_offset = offset;
1223            let end_offset = offset + bytes_len;
1224            _next_ordinal_to_read += 1;
1225            if next_offset >= end_offset {
1226                return Ok(());
1227            }
1228
1229            // Decode unknown envelopes for gaps in ordinals.
1230            while _next_ordinal_to_read < 1 {
1231                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1232                _next_ordinal_to_read += 1;
1233                next_offset += envelope_size;
1234            }
1235
1236            let next_out_of_line = decoder.next_out_of_line();
1237            let handles_before = decoder.remaining_handles();
1238            if let Some((inlined, num_bytes, num_handles)) =
1239                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1240            {
1241                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1242                if inlined != (member_inline_size <= 4) {
1243                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1244                }
1245                let inner_offset;
1246                let mut inner_depth = depth.clone();
1247                if inlined {
1248                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1249                    inner_offset = next_offset;
1250                } else {
1251                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1252                    inner_depth.increment()?;
1253                }
1254                let val_ref = self.wake_vectors.get_or_insert_with(|| {
1255                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
1256                });
1257                fidl::decode!(
1258                    fidl::encoding::UnboundedVector<u64>,
1259                    D,
1260                    val_ref,
1261                    decoder,
1262                    inner_offset,
1263                    inner_depth
1264                )?;
1265                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1266                {
1267                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1268                }
1269                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1270                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1271                }
1272            }
1273
1274            next_offset += envelope_size;
1275            _next_ordinal_to_read += 1;
1276            if next_offset >= end_offset {
1277                return Ok(());
1278            }
1279
1280            // Decode unknown envelopes for gaps in ordinals.
1281            while _next_ordinal_to_read < 2 {
1282                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1283                _next_ordinal_to_read += 1;
1284                next_offset += envelope_size;
1285            }
1286
1287            let next_out_of_line = decoder.next_out_of_line();
1288            let handles_before = decoder.remaining_handles();
1289            if let Some((inlined, num_bytes, num_handles)) =
1290                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1291            {
1292                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1293                if inlined != (member_inline_size <= 4) {
1294                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1295                }
1296                let inner_offset;
1297                let mut inner_depth = depth.clone();
1298                if inlined {
1299                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1300                    inner_offset = next_offset;
1301                } else {
1302                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1303                    inner_depth.increment()?;
1304                }
1305                let val_ref = self.soft_wake_vectors.get_or_insert_with(|| {
1306                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
1307                });
1308                fidl::decode!(
1309                    fidl::encoding::UnboundedVector<u64>,
1310                    D,
1311                    val_ref,
1312                    decoder,
1313                    inner_offset,
1314                    inner_depth
1315                )?;
1316                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1317                {
1318                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1319                }
1320                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1321                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1322                }
1323            }
1324
1325            next_offset += envelope_size;
1326            _next_ordinal_to_read += 1;
1327            if next_offset >= end_offset {
1328                return Ok(());
1329            }
1330
1331            // Decode unknown envelopes for gaps in ordinals.
1332            while _next_ordinal_to_read < 3 {
1333                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1334                _next_ordinal_to_read += 1;
1335                next_offset += envelope_size;
1336            }
1337
1338            let next_out_of_line = decoder.next_out_of_line();
1339            let handles_before = decoder.remaining_handles();
1340            if let Some((inlined, num_bytes, num_handles)) =
1341                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1342            {
1343                let member_inline_size =
1344                    <WakeVectorType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1345                if inlined != (member_inline_size <= 4) {
1346                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1347                }
1348                let inner_offset;
1349                let mut inner_depth = depth.clone();
1350                if inlined {
1351                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1352                    inner_offset = next_offset;
1353                } else {
1354                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1355                    inner_depth.increment()?;
1356                }
1357                let val_ref = self
1358                    .wake_vectors_type
1359                    .get_or_insert_with(|| fidl::new_empty!(WakeVectorType, D));
1360                fidl::decode!(WakeVectorType, D, val_ref, decoder, inner_offset, inner_depth)?;
1361                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1362                {
1363                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1364                }
1365                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1366                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1367                }
1368            }
1369
1370            next_offset += envelope_size;
1371            _next_ordinal_to_read += 1;
1372            if next_offset >= end_offset {
1373                return Ok(());
1374            }
1375
1376            // Decode unknown envelopes for gaps in ordinals.
1377            while _next_ordinal_to_read < 4 {
1378                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1379                _next_ordinal_to_read += 1;
1380                next_offset += envelope_size;
1381            }
1382
1383            let next_out_of_line = decoder.next_out_of_line();
1384            let handles_before = decoder.remaining_handles();
1385            if let Some((inlined, num_bytes, num_handles)) =
1386                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1387            {
1388                let member_inline_size =
1389                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1390                if inlined != (member_inline_size <= 4) {
1391                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1392                }
1393                let inner_offset;
1394                let mut inner_depth = depth.clone();
1395                if inlined {
1396                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1397                    inner_offset = next_offset;
1398                } else {
1399                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1400                    inner_depth.increment()?;
1401                }
1402                let val_ref =
1403                    self.wake_vectors_overflow.get_or_insert_with(|| fidl::new_empty!(bool, D));
1404                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
1405                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1406                {
1407                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1408                }
1409                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1410                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1411                }
1412            }
1413
1414            next_offset += envelope_size;
1415
1416            // Decode the remaining unknown envelopes.
1417            while next_offset < end_offset {
1418                _next_ordinal_to_read += 1;
1419                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1420                next_offset += envelope_size;
1421            }
1422
1423            Ok(())
1424        }
1425    }
1426}