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