1#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const MAX_SUSPEND_STATES: u32 = 256;
13
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
16pub enum WakeVectorType {
17 Koid,
19 #[doc(hidden)]
20 __SourceBreaking { unknown_ordinal: u32 },
21}
22
23#[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 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 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 pub reason: Option<WakeReason>,
109 pub suspend_duration: Option<i64>,
112 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 pub wake_vectors: Option<Vec<u64>>,
130 pub soft_wake_vectors: Option<Vec<u64>>,
133 pub wake_vectors_type: Option<WakeVectorType>,
135 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
280
281 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
283
284 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
447
448 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
450
451 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
617
618 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
620
621 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
791
792 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
794
795 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 let cur_offset: usize = (2 - 1) * envelope_size;
814
815 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
817
818 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 let cur_offset: usize = (3 - 1) * envelope_size;
839
840 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
842
843 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 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 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 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 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 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 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 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 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 let cur_offset: usize = (1 - 1) * envelope_size;
1105
1106 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1108
1109 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 let cur_offset: usize = (2 - 1) * envelope_size;
1126
1127 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1129
1130 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 let cur_offset: usize = (3 - 1) * envelope_size;
1147
1148 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1150
1151 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 let cur_offset: usize = (4 - 1) * envelope_size;
1172
1173 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1175
1176 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 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 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 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 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 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 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 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}