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 type StackTraceKey = u64;
12
13pub type ThreadInfoKey = u64;
14
15pub const MAX_BUILD_ID_LENGTH: u32 = 32;
16
17#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
19pub enum CollectorError {
20 ProcessSelectorUnsupported,
22 ProcessSelectorNoMatch,
24 ProcessSelectorAmbiguous,
27 LiveSnapshotFailed,
29 StoredSnapshotNotFound,
31 #[doc(hidden)]
32 __SourceBreaking { unknown_ordinal: u32 },
33}
34
35#[macro_export]
37macro_rules! CollectorErrorUnknown {
38 () => {
39 _
40 };
41}
42
43impl CollectorError {
44 #[inline]
45 pub fn from_primitive(prim: u32) -> Option<Self> {
46 match prim {
47 1 => Some(Self::ProcessSelectorUnsupported),
48 2 => Some(Self::ProcessSelectorNoMatch),
49 3 => Some(Self::ProcessSelectorAmbiguous),
50 4 => Some(Self::LiveSnapshotFailed),
51 5 => Some(Self::StoredSnapshotNotFound),
52 _ => None,
53 }
54 }
55
56 #[inline]
57 pub fn from_primitive_allow_unknown(prim: u32) -> Self {
58 match prim {
59 1 => Self::ProcessSelectorUnsupported,
60 2 => Self::ProcessSelectorNoMatch,
61 3 => Self::ProcessSelectorAmbiguous,
62 4 => Self::LiveSnapshotFailed,
63 5 => Self::StoredSnapshotNotFound,
64 unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
65 }
66 }
67
68 #[inline]
69 pub fn unknown() -> Self {
70 Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
71 }
72
73 #[inline]
74 pub const fn into_primitive(self) -> u32 {
75 match self {
76 Self::ProcessSelectorUnsupported => 1,
77 Self::ProcessSelectorNoMatch => 2,
78 Self::ProcessSelectorAmbiguous => 3,
79 Self::LiveSnapshotFailed => 4,
80 Self::StoredSnapshotNotFound => 5,
81 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
82 }
83 }
84
85 #[inline]
86 pub fn is_unknown(&self) -> bool {
87 match self {
88 Self::__SourceBreaking { unknown_ordinal: _ } => true,
89 _ => false,
90 }
91 }
92}
93
94#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
96pub struct BuildId {
97 pub value: Vec<u8>,
98}
99
100impl fidl::Persistable for BuildId {}
101
102#[derive(Clone, Debug, PartialEq)]
103pub struct SnapshotReceiverBatchRequest {
104 pub batch: Vec<SnapshotElement>,
105}
106
107impl fidl::Persistable for SnapshotReceiverBatchRequest {}
108
109#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
110pub struct SnapshotReceiverReportErrorRequest {
111 pub error: CollectorError,
112}
113
114impl fidl::Persistable for SnapshotReceiverReportErrorRequest {}
115
116#[derive(Clone, Debug, PartialEq)]
117pub struct StoredSnapshotIteratorGetNextResponse {
118 pub batch: Vec<StoredSnapshot>,
119}
120
121impl fidl::Persistable for StoredSnapshotIteratorGetNextResponse {}
122
123#[derive(Clone, Debug, Default, PartialEq)]
125pub struct Allocation {
126 pub address: Option<u64>,
128 pub size: Option<u64>,
130 pub stack_trace_key: Option<u64>,
132 pub timestamp: Option<fidl::MonotonicInstant>,
134 pub thread_info_key: Option<u64>,
136 pub count: Option<u64>,
139 #[doc(hidden)]
140 pub __source_breaking: fidl::marker::SourceBreaking,
141}
142
143impl fidl::Persistable for Allocation {}
144
145#[derive(Clone, Debug, Default, PartialEq)]
152pub struct BlockContents {
153 pub address: Option<u64>,
155 pub contents: Option<Vec<u8>>,
157 #[doc(hidden)]
158 pub __source_breaking: fidl::marker::SourceBreaking,
159}
160
161impl fidl::Persistable for BlockContents {}
162
163#[derive(Clone, Debug, Default, PartialEq)]
165pub struct ExecutableRegion {
166 pub address: Option<u64>,
168 pub size: Option<u64>,
170 pub file_offset: Option<u64>,
172 pub build_id: Option<BuildId>,
174 pub vaddr: Option<u64>,
176 pub name: Option<String>,
178 #[doc(hidden)]
179 pub __source_breaking: fidl::marker::SourceBreaking,
180}
181
182impl fidl::Persistable for ExecutableRegion {}
183
184#[derive(Clone, Debug, Default, PartialEq)]
189pub struct SnapshotHeader {
190 pub process_name: Option<String>,
192 pub process_koid: Option<u64>,
194 #[doc(hidden)]
195 pub __source_breaking: fidl::marker::SourceBreaking,
196}
197
198impl fidl::Persistable for SnapshotHeader {}
199
200#[derive(Clone, Debug, Default, PartialEq)]
206pub struct StackTrace {
207 pub stack_trace_key: Option<u64>,
209 pub program_addresses: Option<Vec<u64>>,
214 #[doc(hidden)]
215 pub __source_breaking: fidl::marker::SourceBreaking,
216}
217
218impl fidl::Persistable for StackTrace {}
219
220#[derive(Clone, Debug, Default, PartialEq)]
224pub struct StoredSnapshot {
225 pub snapshot_id: Option<u32>,
227 pub snapshot_name: Option<String>,
229 pub process_koid: Option<u64>,
231 pub process_name: Option<String>,
233 #[doc(hidden)]
234 pub __source_breaking: fidl::marker::SourceBreaking,
235}
236
237impl fidl::Persistable for StoredSnapshot {}
238
239#[derive(Clone, Debug, Default, PartialEq)]
244pub struct ThreadInfo {
245 pub thread_info_key: Option<u64>,
247 pub koid: Option<u64>,
249 pub name: Option<String>,
251 #[doc(hidden)]
252 pub __source_breaking: fidl::marker::SourceBreaking,
253}
254
255impl fidl::Persistable for ThreadInfo {}
256
257#[derive(Clone, Debug)]
259pub enum ProcessSelector {
260 ByName(String),
262 ByKoid(u64),
265 #[doc(hidden)]
266 __SourceBreaking { unknown_ordinal: u64 },
267}
268
269#[macro_export]
271macro_rules! ProcessSelectorUnknown {
272 () => {
273 _
274 };
275}
276
277impl PartialEq for ProcessSelector {
279 fn eq(&self, other: &Self) -> bool {
280 match (self, other) {
281 (Self::ByName(x), Self::ByName(y)) => *x == *y,
282 (Self::ByKoid(x), Self::ByKoid(y)) => *x == *y,
283 _ => false,
284 }
285 }
286}
287
288impl ProcessSelector {
289 #[inline]
290 pub fn ordinal(&self) -> u64 {
291 match *self {
292 Self::ByName(_) => 1,
293 Self::ByKoid(_) => 2,
294 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
295 }
296 }
297
298 #[inline]
299 pub fn unknown_variant_for_testing() -> Self {
300 Self::__SourceBreaking { unknown_ordinal: 0 }
301 }
302
303 #[inline]
304 pub fn is_unknown(&self) -> bool {
305 match self {
306 Self::__SourceBreaking { .. } => true,
307 _ => false,
308 }
309 }
310}
311
312impl fidl::Persistable for ProcessSelector {}
313
314#[derive(Clone, Debug)]
316pub enum SnapshotElement {
317 Allocation(Allocation),
318 StackTrace(StackTrace),
319 ExecutableRegion(ExecutableRegion),
320 BlockContents(BlockContents),
321 ThreadInfo(ThreadInfo),
322 SnapshotHeader(SnapshotHeader),
323 #[doc(hidden)]
324 __SourceBreaking {
325 unknown_ordinal: u64,
326 },
327}
328
329#[macro_export]
331macro_rules! SnapshotElementUnknown {
332 () => {
333 _
334 };
335}
336
337impl PartialEq for SnapshotElement {
339 fn eq(&self, other: &Self) -> bool {
340 match (self, other) {
341 (Self::Allocation(x), Self::Allocation(y)) => *x == *y,
342 (Self::StackTrace(x), Self::StackTrace(y)) => *x == *y,
343 (Self::ExecutableRegion(x), Self::ExecutableRegion(y)) => *x == *y,
344 (Self::BlockContents(x), Self::BlockContents(y)) => *x == *y,
345 (Self::ThreadInfo(x), Self::ThreadInfo(y)) => *x == *y,
346 (Self::SnapshotHeader(x), Self::SnapshotHeader(y)) => *x == *y,
347 _ => false,
348 }
349 }
350}
351
352impl SnapshotElement {
353 #[inline]
354 pub fn ordinal(&self) -> u64 {
355 match *self {
356 Self::Allocation(_) => 1,
357 Self::StackTrace(_) => 2,
358 Self::ExecutableRegion(_) => 3,
359 Self::BlockContents(_) => 4,
360 Self::ThreadInfo(_) => 5,
361 Self::SnapshotHeader(_) => 6,
362 Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
363 }
364 }
365
366 #[inline]
367 pub fn unknown_variant_for_testing() -> Self {
368 Self::__SourceBreaking { unknown_ordinal: 0 }
369 }
370
371 #[inline]
372 pub fn is_unknown(&self) -> bool {
373 match self {
374 Self::__SourceBreaking { .. } => true,
375 _ => false,
376 }
377 }
378}
379
380impl fidl::Persistable for SnapshotElement {}
381
382pub mod collector_ordinals {
383 pub const TAKE_LIVE_SNAPSHOT: u64 = 0xa581ff8b75eaea3;
384 pub const LIST_STORED_SNAPSHOTS: u64 = 0x13fd9211708b42e6;
385 pub const DOWNLOAD_STORED_SNAPSHOT: u64 = 0x48e9792c6f7f1c2e;
386}
387
388pub mod snapshot_receiver_ordinals {
389 pub const BATCH: u64 = 0x4e2a7b07ec4bf37e;
390 pub const REPORT_ERROR: u64 = 0x7bc3329e0ec250c4;
391}
392
393pub mod stored_snapshot_iterator_ordinals {
394 pub const GET_NEXT: u64 = 0x486d0c7d309d2474;
395}
396
397mod internal {
398 use super::*;
399 unsafe impl fidl::encoding::TypeMarker for CollectorError {
400 type Owned = Self;
401
402 #[inline(always)]
403 fn inline_align(_context: fidl::encoding::Context) -> usize {
404 std::mem::align_of::<u32>()
405 }
406
407 #[inline(always)]
408 fn inline_size(_context: fidl::encoding::Context) -> usize {
409 std::mem::size_of::<u32>()
410 }
411
412 #[inline(always)]
413 fn encode_is_copy() -> bool {
414 false
415 }
416
417 #[inline(always)]
418 fn decode_is_copy() -> bool {
419 false
420 }
421 }
422
423 impl fidl::encoding::ValueTypeMarker for CollectorError {
424 type Borrowed<'a> = Self;
425 #[inline(always)]
426 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
427 *value
428 }
429 }
430
431 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for CollectorError {
432 #[inline]
433 unsafe fn encode(
434 self,
435 encoder: &mut fidl::encoding::Encoder<'_, D>,
436 offset: usize,
437 _depth: fidl::encoding::Depth,
438 ) -> fidl::Result<()> {
439 encoder.debug_check_bounds::<Self>(offset);
440 encoder.write_num(self.into_primitive(), offset);
441 Ok(())
442 }
443 }
444
445 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CollectorError {
446 #[inline(always)]
447 fn new_empty() -> Self {
448 Self::unknown()
449 }
450
451 #[inline]
452 unsafe fn decode(
453 &mut self,
454 decoder: &mut fidl::encoding::Decoder<'_, D>,
455 offset: usize,
456 _depth: fidl::encoding::Depth,
457 ) -> fidl::Result<()> {
458 decoder.debug_check_bounds::<Self>(offset);
459 let prim = decoder.read_num::<u32>(offset);
460
461 *self = Self::from_primitive_allow_unknown(prim);
462 Ok(())
463 }
464 }
465
466 impl fidl::encoding::ValueTypeMarker for BuildId {
467 type Borrowed<'a> = &'a Self;
468 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
469 value
470 }
471 }
472
473 unsafe impl fidl::encoding::TypeMarker for BuildId {
474 type Owned = Self;
475
476 #[inline(always)]
477 fn inline_align(_context: fidl::encoding::Context) -> usize {
478 8
479 }
480
481 #[inline(always)]
482 fn inline_size(_context: fidl::encoding::Context) -> usize {
483 16
484 }
485 }
486
487 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BuildId, D> for &BuildId {
488 #[inline]
489 unsafe fn encode(
490 self,
491 encoder: &mut fidl::encoding::Encoder<'_, D>,
492 offset: usize,
493 _depth: fidl::encoding::Depth,
494 ) -> fidl::Result<()> {
495 encoder.debug_check_bounds::<BuildId>(offset);
496 fidl::encoding::Encode::<BuildId, D>::encode(
498 (<fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow(
499 &self.value,
500 ),),
501 encoder,
502 offset,
503 _depth,
504 )
505 }
506 }
507 unsafe impl<
508 D: fidl::encoding::ResourceDialect,
509 T0: fidl::encoding::Encode<fidl::encoding::Vector<u8, 32>, D>,
510 > fidl::encoding::Encode<BuildId, D> for (T0,)
511 {
512 #[inline]
513 unsafe fn encode(
514 self,
515 encoder: &mut fidl::encoding::Encoder<'_, D>,
516 offset: usize,
517 depth: fidl::encoding::Depth,
518 ) -> fidl::Result<()> {
519 encoder.debug_check_bounds::<BuildId>(offset);
520 self.0.encode(encoder, offset + 0, depth)?;
524 Ok(())
525 }
526 }
527
528 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BuildId {
529 #[inline(always)]
530 fn new_empty() -> Self {
531 Self { value: fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D) }
532 }
533
534 #[inline]
535 unsafe fn decode(
536 &mut self,
537 decoder: &mut fidl::encoding::Decoder<'_, D>,
538 offset: usize,
539 _depth: fidl::encoding::Depth,
540 ) -> fidl::Result<()> {
541 decoder.debug_check_bounds::<Self>(offset);
542 fidl::decode!(fidl::encoding::Vector<u8, 32>, D, &mut self.value, decoder, offset + 0, _depth)?;
544 Ok(())
545 }
546 }
547
548 impl fidl::encoding::ValueTypeMarker for SnapshotReceiverBatchRequest {
549 type Borrowed<'a> = &'a Self;
550 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
551 value
552 }
553 }
554
555 unsafe impl fidl::encoding::TypeMarker for SnapshotReceiverBatchRequest {
556 type Owned = Self;
557
558 #[inline(always)]
559 fn inline_align(_context: fidl::encoding::Context) -> usize {
560 8
561 }
562
563 #[inline(always)]
564 fn inline_size(_context: fidl::encoding::Context) -> usize {
565 16
566 }
567 }
568
569 unsafe impl<D: fidl::encoding::ResourceDialect>
570 fidl::encoding::Encode<SnapshotReceiverBatchRequest, D> for &SnapshotReceiverBatchRequest
571 {
572 #[inline]
573 unsafe fn encode(
574 self,
575 encoder: &mut fidl::encoding::Encoder<'_, D>,
576 offset: usize,
577 _depth: fidl::encoding::Depth,
578 ) -> fidl::Result<()> {
579 encoder.debug_check_bounds::<SnapshotReceiverBatchRequest>(offset);
580 fidl::encoding::Encode::<SnapshotReceiverBatchRequest, D>::encode(
582 (
583 <fidl::encoding::UnboundedVector<SnapshotElement> as fidl::encoding::ValueTypeMarker>::borrow(&self.batch),
584 ),
585 encoder, offset, _depth
586 )
587 }
588 }
589 unsafe impl<
590 D: fidl::encoding::ResourceDialect,
591 T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<SnapshotElement>, D>,
592 > fidl::encoding::Encode<SnapshotReceiverBatchRequest, D> for (T0,)
593 {
594 #[inline]
595 unsafe fn encode(
596 self,
597 encoder: &mut fidl::encoding::Encoder<'_, D>,
598 offset: usize,
599 depth: fidl::encoding::Depth,
600 ) -> fidl::Result<()> {
601 encoder.debug_check_bounds::<SnapshotReceiverBatchRequest>(offset);
602 self.0.encode(encoder, offset + 0, depth)?;
606 Ok(())
607 }
608 }
609
610 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
611 for SnapshotReceiverBatchRequest
612 {
613 #[inline(always)]
614 fn new_empty() -> Self {
615 Self { batch: fidl::new_empty!(fidl::encoding::UnboundedVector<SnapshotElement>, D) }
616 }
617
618 #[inline]
619 unsafe fn decode(
620 &mut self,
621 decoder: &mut fidl::encoding::Decoder<'_, D>,
622 offset: usize,
623 _depth: fidl::encoding::Depth,
624 ) -> fidl::Result<()> {
625 decoder.debug_check_bounds::<Self>(offset);
626 fidl::decode!(
628 fidl::encoding::UnboundedVector<SnapshotElement>,
629 D,
630 &mut self.batch,
631 decoder,
632 offset + 0,
633 _depth
634 )?;
635 Ok(())
636 }
637 }
638
639 impl fidl::encoding::ValueTypeMarker for SnapshotReceiverReportErrorRequest {
640 type Borrowed<'a> = &'a Self;
641 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
642 value
643 }
644 }
645
646 unsafe impl fidl::encoding::TypeMarker for SnapshotReceiverReportErrorRequest {
647 type Owned = Self;
648
649 #[inline(always)]
650 fn inline_align(_context: fidl::encoding::Context) -> usize {
651 4
652 }
653
654 #[inline(always)]
655 fn inline_size(_context: fidl::encoding::Context) -> usize {
656 4
657 }
658 }
659
660 unsafe impl<D: fidl::encoding::ResourceDialect>
661 fidl::encoding::Encode<SnapshotReceiverReportErrorRequest, D>
662 for &SnapshotReceiverReportErrorRequest
663 {
664 #[inline]
665 unsafe fn encode(
666 self,
667 encoder: &mut fidl::encoding::Encoder<'_, D>,
668 offset: usize,
669 _depth: fidl::encoding::Depth,
670 ) -> fidl::Result<()> {
671 encoder.debug_check_bounds::<SnapshotReceiverReportErrorRequest>(offset);
672 fidl::encoding::Encode::<SnapshotReceiverReportErrorRequest, D>::encode(
674 (<CollectorError as fidl::encoding::ValueTypeMarker>::borrow(&self.error),),
675 encoder,
676 offset,
677 _depth,
678 )
679 }
680 }
681 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<CollectorError, D>>
682 fidl::encoding::Encode<SnapshotReceiverReportErrorRequest, D> for (T0,)
683 {
684 #[inline]
685 unsafe fn encode(
686 self,
687 encoder: &mut fidl::encoding::Encoder<'_, D>,
688 offset: usize,
689 depth: fidl::encoding::Depth,
690 ) -> fidl::Result<()> {
691 encoder.debug_check_bounds::<SnapshotReceiverReportErrorRequest>(offset);
692 self.0.encode(encoder, offset + 0, depth)?;
696 Ok(())
697 }
698 }
699
700 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
701 for SnapshotReceiverReportErrorRequest
702 {
703 #[inline(always)]
704 fn new_empty() -> Self {
705 Self { error: fidl::new_empty!(CollectorError, D) }
706 }
707
708 #[inline]
709 unsafe fn decode(
710 &mut self,
711 decoder: &mut fidl::encoding::Decoder<'_, D>,
712 offset: usize,
713 _depth: fidl::encoding::Depth,
714 ) -> fidl::Result<()> {
715 decoder.debug_check_bounds::<Self>(offset);
716 fidl::decode!(CollectorError, D, &mut self.error, decoder, offset + 0, _depth)?;
718 Ok(())
719 }
720 }
721
722 impl fidl::encoding::ValueTypeMarker for StoredSnapshotIteratorGetNextResponse {
723 type Borrowed<'a> = &'a Self;
724 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
725 value
726 }
727 }
728
729 unsafe impl fidl::encoding::TypeMarker for StoredSnapshotIteratorGetNextResponse {
730 type Owned = Self;
731
732 #[inline(always)]
733 fn inline_align(_context: fidl::encoding::Context) -> usize {
734 8
735 }
736
737 #[inline(always)]
738 fn inline_size(_context: fidl::encoding::Context) -> usize {
739 16
740 }
741 }
742
743 unsafe impl<D: fidl::encoding::ResourceDialect>
744 fidl::encoding::Encode<StoredSnapshotIteratorGetNextResponse, D>
745 for &StoredSnapshotIteratorGetNextResponse
746 {
747 #[inline]
748 unsafe fn encode(
749 self,
750 encoder: &mut fidl::encoding::Encoder<'_, D>,
751 offset: usize,
752 _depth: fidl::encoding::Depth,
753 ) -> fidl::Result<()> {
754 encoder.debug_check_bounds::<StoredSnapshotIteratorGetNextResponse>(offset);
755 fidl::encoding::Encode::<StoredSnapshotIteratorGetNextResponse, D>::encode(
757 (
758 <fidl::encoding::UnboundedVector<StoredSnapshot> as fidl::encoding::ValueTypeMarker>::borrow(&self.batch),
759 ),
760 encoder, offset, _depth
761 )
762 }
763 }
764 unsafe impl<
765 D: fidl::encoding::ResourceDialect,
766 T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<StoredSnapshot>, D>,
767 > fidl::encoding::Encode<StoredSnapshotIteratorGetNextResponse, D> for (T0,)
768 {
769 #[inline]
770 unsafe fn encode(
771 self,
772 encoder: &mut fidl::encoding::Encoder<'_, D>,
773 offset: usize,
774 depth: fidl::encoding::Depth,
775 ) -> fidl::Result<()> {
776 encoder.debug_check_bounds::<StoredSnapshotIteratorGetNextResponse>(offset);
777 self.0.encode(encoder, offset + 0, depth)?;
781 Ok(())
782 }
783 }
784
785 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
786 for StoredSnapshotIteratorGetNextResponse
787 {
788 #[inline(always)]
789 fn new_empty() -> Self {
790 Self { batch: fidl::new_empty!(fidl::encoding::UnboundedVector<StoredSnapshot>, D) }
791 }
792
793 #[inline]
794 unsafe fn decode(
795 &mut self,
796 decoder: &mut fidl::encoding::Decoder<'_, D>,
797 offset: usize,
798 _depth: fidl::encoding::Depth,
799 ) -> fidl::Result<()> {
800 decoder.debug_check_bounds::<Self>(offset);
801 fidl::decode!(
803 fidl::encoding::UnboundedVector<StoredSnapshot>,
804 D,
805 &mut self.batch,
806 decoder,
807 offset + 0,
808 _depth
809 )?;
810 Ok(())
811 }
812 }
813
814 impl Allocation {
815 #[inline(always)]
816 fn max_ordinal_present(&self) -> u64 {
817 if let Some(_) = self.count {
818 return 6;
819 }
820 if let Some(_) = self.thread_info_key {
821 return 5;
822 }
823 if let Some(_) = self.timestamp {
824 return 4;
825 }
826 if let Some(_) = self.stack_trace_key {
827 return 3;
828 }
829 if let Some(_) = self.size {
830 return 2;
831 }
832 if let Some(_) = self.address {
833 return 1;
834 }
835 0
836 }
837 }
838
839 impl fidl::encoding::ValueTypeMarker for Allocation {
840 type Borrowed<'a> = &'a Self;
841 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
842 value
843 }
844 }
845
846 unsafe impl fidl::encoding::TypeMarker for Allocation {
847 type Owned = Self;
848
849 #[inline(always)]
850 fn inline_align(_context: fidl::encoding::Context) -> usize {
851 8
852 }
853
854 #[inline(always)]
855 fn inline_size(_context: fidl::encoding::Context) -> usize {
856 16
857 }
858 }
859
860 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Allocation, D>
861 for &Allocation
862 {
863 unsafe fn encode(
864 self,
865 encoder: &mut fidl::encoding::Encoder<'_, D>,
866 offset: usize,
867 mut depth: fidl::encoding::Depth,
868 ) -> fidl::Result<()> {
869 encoder.debug_check_bounds::<Allocation>(offset);
870 let max_ordinal: u64 = self.max_ordinal_present();
872 encoder.write_num(max_ordinal, offset);
873 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
874 if max_ordinal == 0 {
876 return Ok(());
877 }
878 depth.increment()?;
879 let envelope_size = 8;
880 let bytes_len = max_ordinal as usize * envelope_size;
881 #[allow(unused_variables)]
882 let offset = encoder.out_of_line_offset(bytes_len);
883 let mut _prev_end_offset: usize = 0;
884 if 1 > max_ordinal {
885 return Ok(());
886 }
887
888 let cur_offset: usize = (1 - 1) * envelope_size;
891
892 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
894
895 fidl::encoding::encode_in_envelope_optional::<u64, D>(
900 self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
901 encoder,
902 offset + cur_offset,
903 depth,
904 )?;
905
906 _prev_end_offset = cur_offset + envelope_size;
907 if 2 > max_ordinal {
908 return Ok(());
909 }
910
911 let cur_offset: usize = (2 - 1) * envelope_size;
914
915 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
917
918 fidl::encoding::encode_in_envelope_optional::<u64, D>(
923 self.size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
924 encoder,
925 offset + cur_offset,
926 depth,
927 )?;
928
929 _prev_end_offset = cur_offset + envelope_size;
930 if 3 > max_ordinal {
931 return Ok(());
932 }
933
934 let cur_offset: usize = (3 - 1) * envelope_size;
937
938 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
940
941 fidl::encoding::encode_in_envelope_optional::<u64, D>(
946 self.stack_trace_key.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
947 encoder,
948 offset + cur_offset,
949 depth,
950 )?;
951
952 _prev_end_offset = cur_offset + envelope_size;
953 if 4 > max_ordinal {
954 return Ok(());
955 }
956
957 let cur_offset: usize = (4 - 1) * envelope_size;
960
961 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
963
964 fidl::encoding::encode_in_envelope_optional::<fidl::MonotonicInstant, D>(
969 self.timestamp
970 .as_ref()
971 .map(<fidl::MonotonicInstant as fidl::encoding::ValueTypeMarker>::borrow),
972 encoder,
973 offset + cur_offset,
974 depth,
975 )?;
976
977 _prev_end_offset = cur_offset + envelope_size;
978 if 5 > max_ordinal {
979 return Ok(());
980 }
981
982 let cur_offset: usize = (5 - 1) * envelope_size;
985
986 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
988
989 fidl::encoding::encode_in_envelope_optional::<u64, D>(
994 self.thread_info_key.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
995 encoder,
996 offset + cur_offset,
997 depth,
998 )?;
999
1000 _prev_end_offset = cur_offset + envelope_size;
1001 if 6 > max_ordinal {
1002 return Ok(());
1003 }
1004
1005 let cur_offset: usize = (6 - 1) * envelope_size;
1008
1009 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1011
1012 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1017 self.count.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1018 encoder,
1019 offset + cur_offset,
1020 depth,
1021 )?;
1022
1023 _prev_end_offset = cur_offset + envelope_size;
1024
1025 Ok(())
1026 }
1027 }
1028
1029 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Allocation {
1030 #[inline(always)]
1031 fn new_empty() -> Self {
1032 Self::default()
1033 }
1034
1035 unsafe fn decode(
1036 &mut self,
1037 decoder: &mut fidl::encoding::Decoder<'_, D>,
1038 offset: usize,
1039 mut depth: fidl::encoding::Depth,
1040 ) -> fidl::Result<()> {
1041 decoder.debug_check_bounds::<Self>(offset);
1042 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1043 None => return Err(fidl::Error::NotNullable),
1044 Some(len) => len,
1045 };
1046 if len == 0 {
1048 return Ok(());
1049 };
1050 depth.increment()?;
1051 let envelope_size = 8;
1052 let bytes_len = len * envelope_size;
1053 let offset = decoder.out_of_line_offset(bytes_len)?;
1054 let mut _next_ordinal_to_read = 0;
1056 let mut next_offset = offset;
1057 let end_offset = offset + bytes_len;
1058 _next_ordinal_to_read += 1;
1059 if next_offset >= end_offset {
1060 return Ok(());
1061 }
1062
1063 while _next_ordinal_to_read < 1 {
1065 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1066 _next_ordinal_to_read += 1;
1067 next_offset += envelope_size;
1068 }
1069
1070 let next_out_of_line = decoder.next_out_of_line();
1071 let handles_before = decoder.remaining_handles();
1072 if let Some((inlined, num_bytes, num_handles)) =
1073 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1074 {
1075 let member_inline_size =
1076 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1077 if inlined != (member_inline_size <= 4) {
1078 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1079 }
1080 let inner_offset;
1081 let mut inner_depth = depth.clone();
1082 if inlined {
1083 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1084 inner_offset = next_offset;
1085 } else {
1086 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1087 inner_depth.increment()?;
1088 }
1089 let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
1090 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1091 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1092 {
1093 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1094 }
1095 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1096 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1097 }
1098 }
1099
1100 next_offset += envelope_size;
1101 _next_ordinal_to_read += 1;
1102 if next_offset >= end_offset {
1103 return Ok(());
1104 }
1105
1106 while _next_ordinal_to_read < 2 {
1108 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1109 _next_ordinal_to_read += 1;
1110 next_offset += envelope_size;
1111 }
1112
1113 let next_out_of_line = decoder.next_out_of_line();
1114 let handles_before = decoder.remaining_handles();
1115 if let Some((inlined, num_bytes, num_handles)) =
1116 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1117 {
1118 let member_inline_size =
1119 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1120 if inlined != (member_inline_size <= 4) {
1121 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1122 }
1123 let inner_offset;
1124 let mut inner_depth = depth.clone();
1125 if inlined {
1126 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1127 inner_offset = next_offset;
1128 } else {
1129 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1130 inner_depth.increment()?;
1131 }
1132 let val_ref = self.size.get_or_insert_with(|| fidl::new_empty!(u64, D));
1133 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1134 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1135 {
1136 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1137 }
1138 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1139 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1140 }
1141 }
1142
1143 next_offset += envelope_size;
1144 _next_ordinal_to_read += 1;
1145 if next_offset >= end_offset {
1146 return Ok(());
1147 }
1148
1149 while _next_ordinal_to_read < 3 {
1151 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1152 _next_ordinal_to_read += 1;
1153 next_offset += envelope_size;
1154 }
1155
1156 let next_out_of_line = decoder.next_out_of_line();
1157 let handles_before = decoder.remaining_handles();
1158 if let Some((inlined, num_bytes, num_handles)) =
1159 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1160 {
1161 let member_inline_size =
1162 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1163 if inlined != (member_inline_size <= 4) {
1164 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1165 }
1166 let inner_offset;
1167 let mut inner_depth = depth.clone();
1168 if inlined {
1169 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1170 inner_offset = next_offset;
1171 } else {
1172 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1173 inner_depth.increment()?;
1174 }
1175 let val_ref = self.stack_trace_key.get_or_insert_with(|| fidl::new_empty!(u64, D));
1176 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1177 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1178 {
1179 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1180 }
1181 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1182 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1183 }
1184 }
1185
1186 next_offset += envelope_size;
1187 _next_ordinal_to_read += 1;
1188 if next_offset >= end_offset {
1189 return Ok(());
1190 }
1191
1192 while _next_ordinal_to_read < 4 {
1194 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1195 _next_ordinal_to_read += 1;
1196 next_offset += envelope_size;
1197 }
1198
1199 let next_out_of_line = decoder.next_out_of_line();
1200 let handles_before = decoder.remaining_handles();
1201 if let Some((inlined, num_bytes, num_handles)) =
1202 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1203 {
1204 let member_inline_size =
1205 <fidl::MonotonicInstant as fidl::encoding::TypeMarker>::inline_size(
1206 decoder.context,
1207 );
1208 if inlined != (member_inline_size <= 4) {
1209 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1210 }
1211 let inner_offset;
1212 let mut inner_depth = depth.clone();
1213 if inlined {
1214 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1215 inner_offset = next_offset;
1216 } else {
1217 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1218 inner_depth.increment()?;
1219 }
1220 let val_ref = self
1221 .timestamp
1222 .get_or_insert_with(|| fidl::new_empty!(fidl::MonotonicInstant, D));
1223 fidl::decode!(
1224 fidl::MonotonicInstant,
1225 D,
1226 val_ref,
1227 decoder,
1228 inner_offset,
1229 inner_depth
1230 )?;
1231 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1232 {
1233 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1234 }
1235 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1236 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1237 }
1238 }
1239
1240 next_offset += envelope_size;
1241 _next_ordinal_to_read += 1;
1242 if next_offset >= end_offset {
1243 return Ok(());
1244 }
1245
1246 while _next_ordinal_to_read < 5 {
1248 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1249 _next_ordinal_to_read += 1;
1250 next_offset += envelope_size;
1251 }
1252
1253 let next_out_of_line = decoder.next_out_of_line();
1254 let handles_before = decoder.remaining_handles();
1255 if let Some((inlined, num_bytes, num_handles)) =
1256 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1257 {
1258 let member_inline_size =
1259 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1260 if inlined != (member_inline_size <= 4) {
1261 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1262 }
1263 let inner_offset;
1264 let mut inner_depth = depth.clone();
1265 if inlined {
1266 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1267 inner_offset = next_offset;
1268 } else {
1269 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1270 inner_depth.increment()?;
1271 }
1272 let val_ref = self.thread_info_key.get_or_insert_with(|| fidl::new_empty!(u64, D));
1273 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1274 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1275 {
1276 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1277 }
1278 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1279 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1280 }
1281 }
1282
1283 next_offset += envelope_size;
1284 _next_ordinal_to_read += 1;
1285 if next_offset >= end_offset {
1286 return Ok(());
1287 }
1288
1289 while _next_ordinal_to_read < 6 {
1291 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1292 _next_ordinal_to_read += 1;
1293 next_offset += envelope_size;
1294 }
1295
1296 let next_out_of_line = decoder.next_out_of_line();
1297 let handles_before = decoder.remaining_handles();
1298 if let Some((inlined, num_bytes, num_handles)) =
1299 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1300 {
1301 let member_inline_size =
1302 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1303 if inlined != (member_inline_size <= 4) {
1304 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1305 }
1306 let inner_offset;
1307 let mut inner_depth = depth.clone();
1308 if inlined {
1309 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1310 inner_offset = next_offset;
1311 } else {
1312 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1313 inner_depth.increment()?;
1314 }
1315 let val_ref = self.count.get_or_insert_with(|| fidl::new_empty!(u64, D));
1316 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1317 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1318 {
1319 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1320 }
1321 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1322 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1323 }
1324 }
1325
1326 next_offset += envelope_size;
1327
1328 while next_offset < end_offset {
1330 _next_ordinal_to_read += 1;
1331 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1332 next_offset += envelope_size;
1333 }
1334
1335 Ok(())
1336 }
1337 }
1338
1339 impl BlockContents {
1340 #[inline(always)]
1341 fn max_ordinal_present(&self) -> u64 {
1342 if let Some(_) = self.contents {
1343 return 2;
1344 }
1345 if let Some(_) = self.address {
1346 return 1;
1347 }
1348 0
1349 }
1350 }
1351
1352 impl fidl::encoding::ValueTypeMarker for BlockContents {
1353 type Borrowed<'a> = &'a Self;
1354 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1355 value
1356 }
1357 }
1358
1359 unsafe impl fidl::encoding::TypeMarker for BlockContents {
1360 type Owned = Self;
1361
1362 #[inline(always)]
1363 fn inline_align(_context: fidl::encoding::Context) -> usize {
1364 8
1365 }
1366
1367 #[inline(always)]
1368 fn inline_size(_context: fidl::encoding::Context) -> usize {
1369 16
1370 }
1371 }
1372
1373 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BlockContents, D>
1374 for &BlockContents
1375 {
1376 unsafe fn encode(
1377 self,
1378 encoder: &mut fidl::encoding::Encoder<'_, D>,
1379 offset: usize,
1380 mut depth: fidl::encoding::Depth,
1381 ) -> fidl::Result<()> {
1382 encoder.debug_check_bounds::<BlockContents>(offset);
1383 let max_ordinal: u64 = self.max_ordinal_present();
1385 encoder.write_num(max_ordinal, offset);
1386 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1387 if max_ordinal == 0 {
1389 return Ok(());
1390 }
1391 depth.increment()?;
1392 let envelope_size = 8;
1393 let bytes_len = max_ordinal as usize * envelope_size;
1394 #[allow(unused_variables)]
1395 let offset = encoder.out_of_line_offset(bytes_len);
1396 let mut _prev_end_offset: usize = 0;
1397 if 1 > max_ordinal {
1398 return Ok(());
1399 }
1400
1401 let cur_offset: usize = (1 - 1) * envelope_size;
1404
1405 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1407
1408 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1413 self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1414 encoder,
1415 offset + cur_offset,
1416 depth,
1417 )?;
1418
1419 _prev_end_offset = cur_offset + envelope_size;
1420 if 2 > max_ordinal {
1421 return Ok(());
1422 }
1423
1424 let cur_offset: usize = (2 - 1) * envelope_size;
1427
1428 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1430
1431 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
1436 self.contents.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
1437 encoder, offset + cur_offset, depth
1438 )?;
1439
1440 _prev_end_offset = cur_offset + envelope_size;
1441
1442 Ok(())
1443 }
1444 }
1445
1446 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BlockContents {
1447 #[inline(always)]
1448 fn new_empty() -> Self {
1449 Self::default()
1450 }
1451
1452 unsafe fn decode(
1453 &mut self,
1454 decoder: &mut fidl::encoding::Decoder<'_, D>,
1455 offset: usize,
1456 mut depth: fidl::encoding::Depth,
1457 ) -> fidl::Result<()> {
1458 decoder.debug_check_bounds::<Self>(offset);
1459 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1460 None => return Err(fidl::Error::NotNullable),
1461 Some(len) => len,
1462 };
1463 if len == 0 {
1465 return Ok(());
1466 };
1467 depth.increment()?;
1468 let envelope_size = 8;
1469 let bytes_len = len * envelope_size;
1470 let offset = decoder.out_of_line_offset(bytes_len)?;
1471 let mut _next_ordinal_to_read = 0;
1473 let mut next_offset = offset;
1474 let end_offset = offset + bytes_len;
1475 _next_ordinal_to_read += 1;
1476 if next_offset >= end_offset {
1477 return Ok(());
1478 }
1479
1480 while _next_ordinal_to_read < 1 {
1482 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1483 _next_ordinal_to_read += 1;
1484 next_offset += envelope_size;
1485 }
1486
1487 let next_out_of_line = decoder.next_out_of_line();
1488 let handles_before = decoder.remaining_handles();
1489 if let Some((inlined, num_bytes, num_handles)) =
1490 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1491 {
1492 let member_inline_size =
1493 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1494 if inlined != (member_inline_size <= 4) {
1495 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1496 }
1497 let inner_offset;
1498 let mut inner_depth = depth.clone();
1499 if inlined {
1500 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1501 inner_offset = next_offset;
1502 } else {
1503 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1504 inner_depth.increment()?;
1505 }
1506 let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
1507 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1508 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1509 {
1510 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1511 }
1512 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1513 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1514 }
1515 }
1516
1517 next_offset += envelope_size;
1518 _next_ordinal_to_read += 1;
1519 if next_offset >= end_offset {
1520 return Ok(());
1521 }
1522
1523 while _next_ordinal_to_read < 2 {
1525 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1526 _next_ordinal_to_read += 1;
1527 next_offset += envelope_size;
1528 }
1529
1530 let next_out_of_line = decoder.next_out_of_line();
1531 let handles_before = decoder.remaining_handles();
1532 if let Some((inlined, num_bytes, num_handles)) =
1533 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1534 {
1535 let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1536 if inlined != (member_inline_size <= 4) {
1537 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1538 }
1539 let inner_offset;
1540 let mut inner_depth = depth.clone();
1541 if inlined {
1542 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1543 inner_offset = next_offset;
1544 } else {
1545 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1546 inner_depth.increment()?;
1547 }
1548 let val_ref = self.contents.get_or_insert_with(|| {
1549 fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
1550 });
1551 fidl::decode!(
1552 fidl::encoding::UnboundedVector<u8>,
1553 D,
1554 val_ref,
1555 decoder,
1556 inner_offset,
1557 inner_depth
1558 )?;
1559 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1560 {
1561 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1562 }
1563 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1564 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1565 }
1566 }
1567
1568 next_offset += envelope_size;
1569
1570 while next_offset < end_offset {
1572 _next_ordinal_to_read += 1;
1573 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1574 next_offset += envelope_size;
1575 }
1576
1577 Ok(())
1578 }
1579 }
1580
1581 impl ExecutableRegion {
1582 #[inline(always)]
1583 fn max_ordinal_present(&self) -> u64 {
1584 if let Some(_) = self.name {
1585 return 6;
1586 }
1587 if let Some(_) = self.vaddr {
1588 return 5;
1589 }
1590 if let Some(_) = self.build_id {
1591 return 4;
1592 }
1593 if let Some(_) = self.file_offset {
1594 return 3;
1595 }
1596 if let Some(_) = self.size {
1597 return 2;
1598 }
1599 if let Some(_) = self.address {
1600 return 1;
1601 }
1602 0
1603 }
1604 }
1605
1606 impl fidl::encoding::ValueTypeMarker for ExecutableRegion {
1607 type Borrowed<'a> = &'a Self;
1608 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1609 value
1610 }
1611 }
1612
1613 unsafe impl fidl::encoding::TypeMarker for ExecutableRegion {
1614 type Owned = Self;
1615
1616 #[inline(always)]
1617 fn inline_align(_context: fidl::encoding::Context) -> usize {
1618 8
1619 }
1620
1621 #[inline(always)]
1622 fn inline_size(_context: fidl::encoding::Context) -> usize {
1623 16
1624 }
1625 }
1626
1627 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExecutableRegion, D>
1628 for &ExecutableRegion
1629 {
1630 unsafe fn encode(
1631 self,
1632 encoder: &mut fidl::encoding::Encoder<'_, D>,
1633 offset: usize,
1634 mut depth: fidl::encoding::Depth,
1635 ) -> fidl::Result<()> {
1636 encoder.debug_check_bounds::<ExecutableRegion>(offset);
1637 let max_ordinal: u64 = self.max_ordinal_present();
1639 encoder.write_num(max_ordinal, offset);
1640 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1641 if max_ordinal == 0 {
1643 return Ok(());
1644 }
1645 depth.increment()?;
1646 let envelope_size = 8;
1647 let bytes_len = max_ordinal as usize * envelope_size;
1648 #[allow(unused_variables)]
1649 let offset = encoder.out_of_line_offset(bytes_len);
1650 let mut _prev_end_offset: usize = 0;
1651 if 1 > max_ordinal {
1652 return Ok(());
1653 }
1654
1655 let cur_offset: usize = (1 - 1) * envelope_size;
1658
1659 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1661
1662 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1667 self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1668 encoder,
1669 offset + cur_offset,
1670 depth,
1671 )?;
1672
1673 _prev_end_offset = cur_offset + envelope_size;
1674 if 2 > max_ordinal {
1675 return Ok(());
1676 }
1677
1678 let cur_offset: usize = (2 - 1) * envelope_size;
1681
1682 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1684
1685 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1690 self.size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1691 encoder,
1692 offset + cur_offset,
1693 depth,
1694 )?;
1695
1696 _prev_end_offset = cur_offset + envelope_size;
1697 if 3 > max_ordinal {
1698 return Ok(());
1699 }
1700
1701 let cur_offset: usize = (3 - 1) * envelope_size;
1704
1705 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1707
1708 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1713 self.file_offset.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1714 encoder,
1715 offset + cur_offset,
1716 depth,
1717 )?;
1718
1719 _prev_end_offset = cur_offset + envelope_size;
1720 if 4 > max_ordinal {
1721 return Ok(());
1722 }
1723
1724 let cur_offset: usize = (4 - 1) * envelope_size;
1727
1728 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1730
1731 fidl::encoding::encode_in_envelope_optional::<BuildId, D>(
1736 self.build_id.as_ref().map(<BuildId as fidl::encoding::ValueTypeMarker>::borrow),
1737 encoder,
1738 offset + cur_offset,
1739 depth,
1740 )?;
1741
1742 _prev_end_offset = cur_offset + envelope_size;
1743 if 5 > max_ordinal {
1744 return Ok(());
1745 }
1746
1747 let cur_offset: usize = (5 - 1) * envelope_size;
1750
1751 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1753
1754 fidl::encoding::encode_in_envelope_optional::<u64, D>(
1759 self.vaddr.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1760 encoder,
1761 offset + cur_offset,
1762 depth,
1763 )?;
1764
1765 _prev_end_offset = cur_offset + envelope_size;
1766 if 6 > max_ordinal {
1767 return Ok(());
1768 }
1769
1770 let cur_offset: usize = (6 - 1) * envelope_size;
1773
1774 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1776
1777 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1782 self.name.as_ref().map(
1783 <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
1784 ),
1785 encoder,
1786 offset + cur_offset,
1787 depth,
1788 )?;
1789
1790 _prev_end_offset = cur_offset + envelope_size;
1791
1792 Ok(())
1793 }
1794 }
1795
1796 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExecutableRegion {
1797 #[inline(always)]
1798 fn new_empty() -> Self {
1799 Self::default()
1800 }
1801
1802 unsafe fn decode(
1803 &mut self,
1804 decoder: &mut fidl::encoding::Decoder<'_, D>,
1805 offset: usize,
1806 mut depth: fidl::encoding::Depth,
1807 ) -> fidl::Result<()> {
1808 decoder.debug_check_bounds::<Self>(offset);
1809 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1810 None => return Err(fidl::Error::NotNullable),
1811 Some(len) => len,
1812 };
1813 if len == 0 {
1815 return Ok(());
1816 };
1817 depth.increment()?;
1818 let envelope_size = 8;
1819 let bytes_len = len * envelope_size;
1820 let offset = decoder.out_of_line_offset(bytes_len)?;
1821 let mut _next_ordinal_to_read = 0;
1823 let mut next_offset = offset;
1824 let end_offset = offset + bytes_len;
1825 _next_ordinal_to_read += 1;
1826 if next_offset >= end_offset {
1827 return Ok(());
1828 }
1829
1830 while _next_ordinal_to_read < 1 {
1832 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1833 _next_ordinal_to_read += 1;
1834 next_offset += envelope_size;
1835 }
1836
1837 let next_out_of_line = decoder.next_out_of_line();
1838 let handles_before = decoder.remaining_handles();
1839 if let Some((inlined, num_bytes, num_handles)) =
1840 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1841 {
1842 let member_inline_size =
1843 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1844 if inlined != (member_inline_size <= 4) {
1845 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1846 }
1847 let inner_offset;
1848 let mut inner_depth = depth.clone();
1849 if inlined {
1850 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1851 inner_offset = next_offset;
1852 } else {
1853 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1854 inner_depth.increment()?;
1855 }
1856 let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
1857 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1858 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1859 {
1860 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1861 }
1862 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1863 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1864 }
1865 }
1866
1867 next_offset += envelope_size;
1868 _next_ordinal_to_read += 1;
1869 if next_offset >= end_offset {
1870 return Ok(());
1871 }
1872
1873 while _next_ordinal_to_read < 2 {
1875 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1876 _next_ordinal_to_read += 1;
1877 next_offset += envelope_size;
1878 }
1879
1880 let next_out_of_line = decoder.next_out_of_line();
1881 let handles_before = decoder.remaining_handles();
1882 if let Some((inlined, num_bytes, num_handles)) =
1883 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1884 {
1885 let member_inline_size =
1886 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1887 if inlined != (member_inline_size <= 4) {
1888 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1889 }
1890 let inner_offset;
1891 let mut inner_depth = depth.clone();
1892 if inlined {
1893 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1894 inner_offset = next_offset;
1895 } else {
1896 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1897 inner_depth.increment()?;
1898 }
1899 let val_ref = self.size.get_or_insert_with(|| fidl::new_empty!(u64, D));
1900 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1901 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1902 {
1903 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1904 }
1905 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1906 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1907 }
1908 }
1909
1910 next_offset += envelope_size;
1911 _next_ordinal_to_read += 1;
1912 if next_offset >= end_offset {
1913 return Ok(());
1914 }
1915
1916 while _next_ordinal_to_read < 3 {
1918 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1919 _next_ordinal_to_read += 1;
1920 next_offset += envelope_size;
1921 }
1922
1923 let next_out_of_line = decoder.next_out_of_line();
1924 let handles_before = decoder.remaining_handles();
1925 if let Some((inlined, num_bytes, num_handles)) =
1926 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1927 {
1928 let member_inline_size =
1929 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1930 if inlined != (member_inline_size <= 4) {
1931 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1932 }
1933 let inner_offset;
1934 let mut inner_depth = depth.clone();
1935 if inlined {
1936 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1937 inner_offset = next_offset;
1938 } else {
1939 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1940 inner_depth.increment()?;
1941 }
1942 let val_ref = self.file_offset.get_or_insert_with(|| fidl::new_empty!(u64, D));
1943 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1944 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1945 {
1946 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1947 }
1948 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1949 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1950 }
1951 }
1952
1953 next_offset += envelope_size;
1954 _next_ordinal_to_read += 1;
1955 if next_offset >= end_offset {
1956 return Ok(());
1957 }
1958
1959 while _next_ordinal_to_read < 4 {
1961 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1962 _next_ordinal_to_read += 1;
1963 next_offset += envelope_size;
1964 }
1965
1966 let next_out_of_line = decoder.next_out_of_line();
1967 let handles_before = decoder.remaining_handles();
1968 if let Some((inlined, num_bytes, num_handles)) =
1969 fidl::encoding::decode_envelope_header(decoder, next_offset)?
1970 {
1971 let member_inline_size =
1972 <BuildId as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1973 if inlined != (member_inline_size <= 4) {
1974 return Err(fidl::Error::InvalidInlineBitInEnvelope);
1975 }
1976 let inner_offset;
1977 let mut inner_depth = depth.clone();
1978 if inlined {
1979 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1980 inner_offset = next_offset;
1981 } else {
1982 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1983 inner_depth.increment()?;
1984 }
1985 let val_ref = self.build_id.get_or_insert_with(|| fidl::new_empty!(BuildId, D));
1986 fidl::decode!(BuildId, D, val_ref, decoder, inner_offset, inner_depth)?;
1987 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1988 {
1989 return Err(fidl::Error::InvalidNumBytesInEnvelope);
1990 }
1991 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1992 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1993 }
1994 }
1995
1996 next_offset += envelope_size;
1997 _next_ordinal_to_read += 1;
1998 if next_offset >= end_offset {
1999 return Ok(());
2000 }
2001
2002 while _next_ordinal_to_read < 5 {
2004 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2005 _next_ordinal_to_read += 1;
2006 next_offset += envelope_size;
2007 }
2008
2009 let next_out_of_line = decoder.next_out_of_line();
2010 let handles_before = decoder.remaining_handles();
2011 if let Some((inlined, num_bytes, num_handles)) =
2012 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2013 {
2014 let member_inline_size =
2015 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2016 if inlined != (member_inline_size <= 4) {
2017 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2018 }
2019 let inner_offset;
2020 let mut inner_depth = depth.clone();
2021 if inlined {
2022 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2023 inner_offset = next_offset;
2024 } else {
2025 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2026 inner_depth.increment()?;
2027 }
2028 let val_ref = self.vaddr.get_or_insert_with(|| fidl::new_empty!(u64, D));
2029 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2030 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2031 {
2032 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2033 }
2034 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2035 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2036 }
2037 }
2038
2039 next_offset += envelope_size;
2040 _next_ordinal_to_read += 1;
2041 if next_offset >= end_offset {
2042 return Ok(());
2043 }
2044
2045 while _next_ordinal_to_read < 6 {
2047 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2048 _next_ordinal_to_read += 1;
2049 next_offset += envelope_size;
2050 }
2051
2052 let next_out_of_line = decoder.next_out_of_line();
2053 let handles_before = decoder.remaining_handles();
2054 if let Some((inlined, num_bytes, num_handles)) =
2055 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2056 {
2057 let member_inline_size =
2058 <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2059 decoder.context,
2060 );
2061 if inlined != (member_inline_size <= 4) {
2062 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2063 }
2064 let inner_offset;
2065 let mut inner_depth = depth.clone();
2066 if inlined {
2067 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2068 inner_offset = next_offset;
2069 } else {
2070 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2071 inner_depth.increment()?;
2072 }
2073 let val_ref = self
2074 .name
2075 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2076 fidl::decode!(
2077 fidl::encoding::UnboundedString,
2078 D,
2079 val_ref,
2080 decoder,
2081 inner_offset,
2082 inner_depth
2083 )?;
2084 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2085 {
2086 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2087 }
2088 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2089 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2090 }
2091 }
2092
2093 next_offset += envelope_size;
2094
2095 while next_offset < end_offset {
2097 _next_ordinal_to_read += 1;
2098 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2099 next_offset += envelope_size;
2100 }
2101
2102 Ok(())
2103 }
2104 }
2105
2106 impl SnapshotHeader {
2107 #[inline(always)]
2108 fn max_ordinal_present(&self) -> u64 {
2109 if let Some(_) = self.process_koid {
2110 return 2;
2111 }
2112 if let Some(_) = self.process_name {
2113 return 1;
2114 }
2115 0
2116 }
2117 }
2118
2119 impl fidl::encoding::ValueTypeMarker for SnapshotHeader {
2120 type Borrowed<'a> = &'a Self;
2121 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2122 value
2123 }
2124 }
2125
2126 unsafe impl fidl::encoding::TypeMarker for SnapshotHeader {
2127 type Owned = Self;
2128
2129 #[inline(always)]
2130 fn inline_align(_context: fidl::encoding::Context) -> usize {
2131 8
2132 }
2133
2134 #[inline(always)]
2135 fn inline_size(_context: fidl::encoding::Context) -> usize {
2136 16
2137 }
2138 }
2139
2140 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SnapshotHeader, D>
2141 for &SnapshotHeader
2142 {
2143 unsafe fn encode(
2144 self,
2145 encoder: &mut fidl::encoding::Encoder<'_, D>,
2146 offset: usize,
2147 mut depth: fidl::encoding::Depth,
2148 ) -> fidl::Result<()> {
2149 encoder.debug_check_bounds::<SnapshotHeader>(offset);
2150 let max_ordinal: u64 = self.max_ordinal_present();
2152 encoder.write_num(max_ordinal, offset);
2153 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2154 if max_ordinal == 0 {
2156 return Ok(());
2157 }
2158 depth.increment()?;
2159 let envelope_size = 8;
2160 let bytes_len = max_ordinal as usize * envelope_size;
2161 #[allow(unused_variables)]
2162 let offset = encoder.out_of_line_offset(bytes_len);
2163 let mut _prev_end_offset: usize = 0;
2164 if 1 > max_ordinal {
2165 return Ok(());
2166 }
2167
2168 let cur_offset: usize = (1 - 1) * envelope_size;
2171
2172 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2174
2175 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
2180 self.process_name.as_ref().map(
2181 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
2182 ),
2183 encoder,
2184 offset + cur_offset,
2185 depth,
2186 )?;
2187
2188 _prev_end_offset = cur_offset + envelope_size;
2189 if 2 > max_ordinal {
2190 return Ok(());
2191 }
2192
2193 let cur_offset: usize = (2 - 1) * envelope_size;
2196
2197 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2199
2200 fidl::encoding::encode_in_envelope_optional::<u64, D>(
2205 self.process_koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2206 encoder,
2207 offset + cur_offset,
2208 depth,
2209 )?;
2210
2211 _prev_end_offset = cur_offset + envelope_size;
2212
2213 Ok(())
2214 }
2215 }
2216
2217 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SnapshotHeader {
2218 #[inline(always)]
2219 fn new_empty() -> Self {
2220 Self::default()
2221 }
2222
2223 unsafe fn decode(
2224 &mut self,
2225 decoder: &mut fidl::encoding::Decoder<'_, D>,
2226 offset: usize,
2227 mut depth: fidl::encoding::Depth,
2228 ) -> fidl::Result<()> {
2229 decoder.debug_check_bounds::<Self>(offset);
2230 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2231 None => return Err(fidl::Error::NotNullable),
2232 Some(len) => len,
2233 };
2234 if len == 0 {
2236 return Ok(());
2237 };
2238 depth.increment()?;
2239 let envelope_size = 8;
2240 let bytes_len = len * envelope_size;
2241 let offset = decoder.out_of_line_offset(bytes_len)?;
2242 let mut _next_ordinal_to_read = 0;
2244 let mut next_offset = offset;
2245 let end_offset = offset + bytes_len;
2246 _next_ordinal_to_read += 1;
2247 if next_offset >= end_offset {
2248 return Ok(());
2249 }
2250
2251 while _next_ordinal_to_read < 1 {
2253 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2254 _next_ordinal_to_read += 1;
2255 next_offset += envelope_size;
2256 }
2257
2258 let next_out_of_line = decoder.next_out_of_line();
2259 let handles_before = decoder.remaining_handles();
2260 if let Some((inlined, num_bytes, num_handles)) =
2261 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2262 {
2263 let member_inline_size =
2264 <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
2265 decoder.context,
2266 );
2267 if inlined != (member_inline_size <= 4) {
2268 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2269 }
2270 let inner_offset;
2271 let mut inner_depth = depth.clone();
2272 if inlined {
2273 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2274 inner_offset = next_offset;
2275 } else {
2276 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2277 inner_depth.increment()?;
2278 }
2279 let val_ref = self
2280 .process_name
2281 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
2282 fidl::decode!(
2283 fidl::encoding::BoundedString<32>,
2284 D,
2285 val_ref,
2286 decoder,
2287 inner_offset,
2288 inner_depth
2289 )?;
2290 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2291 {
2292 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2293 }
2294 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2295 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2296 }
2297 }
2298
2299 next_offset += envelope_size;
2300 _next_ordinal_to_read += 1;
2301 if next_offset >= end_offset {
2302 return Ok(());
2303 }
2304
2305 while _next_ordinal_to_read < 2 {
2307 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2308 _next_ordinal_to_read += 1;
2309 next_offset += envelope_size;
2310 }
2311
2312 let next_out_of_line = decoder.next_out_of_line();
2313 let handles_before = decoder.remaining_handles();
2314 if let Some((inlined, num_bytes, num_handles)) =
2315 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2316 {
2317 let member_inline_size =
2318 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2319 if inlined != (member_inline_size <= 4) {
2320 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2321 }
2322 let inner_offset;
2323 let mut inner_depth = depth.clone();
2324 if inlined {
2325 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2326 inner_offset = next_offset;
2327 } else {
2328 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2329 inner_depth.increment()?;
2330 }
2331 let val_ref = self.process_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
2332 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2333 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2334 {
2335 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2336 }
2337 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2338 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2339 }
2340 }
2341
2342 next_offset += envelope_size;
2343
2344 while next_offset < end_offset {
2346 _next_ordinal_to_read += 1;
2347 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2348 next_offset += envelope_size;
2349 }
2350
2351 Ok(())
2352 }
2353 }
2354
2355 impl StackTrace {
2356 #[inline(always)]
2357 fn max_ordinal_present(&self) -> u64 {
2358 if let Some(_) = self.program_addresses {
2359 return 2;
2360 }
2361 if let Some(_) = self.stack_trace_key {
2362 return 1;
2363 }
2364 0
2365 }
2366 }
2367
2368 impl fidl::encoding::ValueTypeMarker for StackTrace {
2369 type Borrowed<'a> = &'a Self;
2370 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2371 value
2372 }
2373 }
2374
2375 unsafe impl fidl::encoding::TypeMarker for StackTrace {
2376 type Owned = Self;
2377
2378 #[inline(always)]
2379 fn inline_align(_context: fidl::encoding::Context) -> usize {
2380 8
2381 }
2382
2383 #[inline(always)]
2384 fn inline_size(_context: fidl::encoding::Context) -> usize {
2385 16
2386 }
2387 }
2388
2389 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StackTrace, D>
2390 for &StackTrace
2391 {
2392 unsafe fn encode(
2393 self,
2394 encoder: &mut fidl::encoding::Encoder<'_, D>,
2395 offset: usize,
2396 mut depth: fidl::encoding::Depth,
2397 ) -> fidl::Result<()> {
2398 encoder.debug_check_bounds::<StackTrace>(offset);
2399 let max_ordinal: u64 = self.max_ordinal_present();
2401 encoder.write_num(max_ordinal, offset);
2402 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2403 if max_ordinal == 0 {
2405 return Ok(());
2406 }
2407 depth.increment()?;
2408 let envelope_size = 8;
2409 let bytes_len = max_ordinal as usize * envelope_size;
2410 #[allow(unused_variables)]
2411 let offset = encoder.out_of_line_offset(bytes_len);
2412 let mut _prev_end_offset: usize = 0;
2413 if 1 > max_ordinal {
2414 return Ok(());
2415 }
2416
2417 let cur_offset: usize = (1 - 1) * envelope_size;
2420
2421 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2423
2424 fidl::encoding::encode_in_envelope_optional::<u64, D>(
2429 self.stack_trace_key.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2430 encoder,
2431 offset + cur_offset,
2432 depth,
2433 )?;
2434
2435 _prev_end_offset = cur_offset + envelope_size;
2436 if 2 > max_ordinal {
2437 return Ok(());
2438 }
2439
2440 let cur_offset: usize = (2 - 1) * envelope_size;
2443
2444 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2446
2447 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
2452 self.program_addresses.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
2453 encoder, offset + cur_offset, depth
2454 )?;
2455
2456 _prev_end_offset = cur_offset + envelope_size;
2457
2458 Ok(())
2459 }
2460 }
2461
2462 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StackTrace {
2463 #[inline(always)]
2464 fn new_empty() -> Self {
2465 Self::default()
2466 }
2467
2468 unsafe fn decode(
2469 &mut self,
2470 decoder: &mut fidl::encoding::Decoder<'_, D>,
2471 offset: usize,
2472 mut depth: fidl::encoding::Depth,
2473 ) -> fidl::Result<()> {
2474 decoder.debug_check_bounds::<Self>(offset);
2475 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2476 None => return Err(fidl::Error::NotNullable),
2477 Some(len) => len,
2478 };
2479 if len == 0 {
2481 return Ok(());
2482 };
2483 depth.increment()?;
2484 let envelope_size = 8;
2485 let bytes_len = len * envelope_size;
2486 let offset = decoder.out_of_line_offset(bytes_len)?;
2487 let mut _next_ordinal_to_read = 0;
2489 let mut next_offset = offset;
2490 let end_offset = offset + bytes_len;
2491 _next_ordinal_to_read += 1;
2492 if next_offset >= end_offset {
2493 return Ok(());
2494 }
2495
2496 while _next_ordinal_to_read < 1 {
2498 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2499 _next_ordinal_to_read += 1;
2500 next_offset += envelope_size;
2501 }
2502
2503 let next_out_of_line = decoder.next_out_of_line();
2504 let handles_before = decoder.remaining_handles();
2505 if let Some((inlined, num_bytes, num_handles)) =
2506 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2507 {
2508 let member_inline_size =
2509 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2510 if inlined != (member_inline_size <= 4) {
2511 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2512 }
2513 let inner_offset;
2514 let mut inner_depth = depth.clone();
2515 if inlined {
2516 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2517 inner_offset = next_offset;
2518 } else {
2519 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2520 inner_depth.increment()?;
2521 }
2522 let val_ref = self.stack_trace_key.get_or_insert_with(|| fidl::new_empty!(u64, D));
2523 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2524 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2525 {
2526 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2527 }
2528 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2529 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2530 }
2531 }
2532
2533 next_offset += envelope_size;
2534 _next_ordinal_to_read += 1;
2535 if next_offset >= end_offset {
2536 return Ok(());
2537 }
2538
2539 while _next_ordinal_to_read < 2 {
2541 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2542 _next_ordinal_to_read += 1;
2543 next_offset += envelope_size;
2544 }
2545
2546 let next_out_of_line = decoder.next_out_of_line();
2547 let handles_before = decoder.remaining_handles();
2548 if let Some((inlined, num_bytes, num_handles)) =
2549 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2550 {
2551 let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2552 if inlined != (member_inline_size <= 4) {
2553 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2554 }
2555 let inner_offset;
2556 let mut inner_depth = depth.clone();
2557 if inlined {
2558 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2559 inner_offset = next_offset;
2560 } else {
2561 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2562 inner_depth.increment()?;
2563 }
2564 let val_ref = self.program_addresses.get_or_insert_with(|| {
2565 fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
2566 });
2567 fidl::decode!(
2568 fidl::encoding::UnboundedVector<u64>,
2569 D,
2570 val_ref,
2571 decoder,
2572 inner_offset,
2573 inner_depth
2574 )?;
2575 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2576 {
2577 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2578 }
2579 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2580 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2581 }
2582 }
2583
2584 next_offset += envelope_size;
2585
2586 while next_offset < end_offset {
2588 _next_ordinal_to_read += 1;
2589 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2590 next_offset += envelope_size;
2591 }
2592
2593 Ok(())
2594 }
2595 }
2596
2597 impl StoredSnapshot {
2598 #[inline(always)]
2599 fn max_ordinal_present(&self) -> u64 {
2600 if let Some(_) = self.process_name {
2601 return 4;
2602 }
2603 if let Some(_) = self.process_koid {
2604 return 3;
2605 }
2606 if let Some(_) = self.snapshot_name {
2607 return 2;
2608 }
2609 if let Some(_) = self.snapshot_id {
2610 return 1;
2611 }
2612 0
2613 }
2614 }
2615
2616 impl fidl::encoding::ValueTypeMarker for StoredSnapshot {
2617 type Borrowed<'a> = &'a Self;
2618 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2619 value
2620 }
2621 }
2622
2623 unsafe impl fidl::encoding::TypeMarker for StoredSnapshot {
2624 type Owned = Self;
2625
2626 #[inline(always)]
2627 fn inline_align(_context: fidl::encoding::Context) -> usize {
2628 8
2629 }
2630
2631 #[inline(always)]
2632 fn inline_size(_context: fidl::encoding::Context) -> usize {
2633 16
2634 }
2635 }
2636
2637 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StoredSnapshot, D>
2638 for &StoredSnapshot
2639 {
2640 unsafe fn encode(
2641 self,
2642 encoder: &mut fidl::encoding::Encoder<'_, D>,
2643 offset: usize,
2644 mut depth: fidl::encoding::Depth,
2645 ) -> fidl::Result<()> {
2646 encoder.debug_check_bounds::<StoredSnapshot>(offset);
2647 let max_ordinal: u64 = self.max_ordinal_present();
2649 encoder.write_num(max_ordinal, offset);
2650 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2651 if max_ordinal == 0 {
2653 return Ok(());
2654 }
2655 depth.increment()?;
2656 let envelope_size = 8;
2657 let bytes_len = max_ordinal as usize * envelope_size;
2658 #[allow(unused_variables)]
2659 let offset = encoder.out_of_line_offset(bytes_len);
2660 let mut _prev_end_offset: usize = 0;
2661 if 1 > max_ordinal {
2662 return Ok(());
2663 }
2664
2665 let cur_offset: usize = (1 - 1) * envelope_size;
2668
2669 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2671
2672 fidl::encoding::encode_in_envelope_optional::<u32, D>(
2677 self.snapshot_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2678 encoder,
2679 offset + cur_offset,
2680 depth,
2681 )?;
2682
2683 _prev_end_offset = cur_offset + envelope_size;
2684 if 2 > max_ordinal {
2685 return Ok(());
2686 }
2687
2688 let cur_offset: usize = (2 - 1) * envelope_size;
2691
2692 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2694
2695 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
2700 self.snapshot_name.as_ref().map(
2701 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
2702 ),
2703 encoder,
2704 offset + cur_offset,
2705 depth,
2706 )?;
2707
2708 _prev_end_offset = cur_offset + envelope_size;
2709 if 3 > max_ordinal {
2710 return Ok(());
2711 }
2712
2713 let cur_offset: usize = (3 - 1) * envelope_size;
2716
2717 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2719
2720 fidl::encoding::encode_in_envelope_optional::<u64, D>(
2725 self.process_koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2726 encoder,
2727 offset + cur_offset,
2728 depth,
2729 )?;
2730
2731 _prev_end_offset = cur_offset + envelope_size;
2732 if 4 > max_ordinal {
2733 return Ok(());
2734 }
2735
2736 let cur_offset: usize = (4 - 1) * envelope_size;
2739
2740 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2742
2743 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
2748 self.process_name.as_ref().map(
2749 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
2750 ),
2751 encoder,
2752 offset + cur_offset,
2753 depth,
2754 )?;
2755
2756 _prev_end_offset = cur_offset + envelope_size;
2757
2758 Ok(())
2759 }
2760 }
2761
2762 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StoredSnapshot {
2763 #[inline(always)]
2764 fn new_empty() -> Self {
2765 Self::default()
2766 }
2767
2768 unsafe fn decode(
2769 &mut self,
2770 decoder: &mut fidl::encoding::Decoder<'_, D>,
2771 offset: usize,
2772 mut depth: fidl::encoding::Depth,
2773 ) -> fidl::Result<()> {
2774 decoder.debug_check_bounds::<Self>(offset);
2775 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2776 None => return Err(fidl::Error::NotNullable),
2777 Some(len) => len,
2778 };
2779 if len == 0 {
2781 return Ok(());
2782 };
2783 depth.increment()?;
2784 let envelope_size = 8;
2785 let bytes_len = len * envelope_size;
2786 let offset = decoder.out_of_line_offset(bytes_len)?;
2787 let mut _next_ordinal_to_read = 0;
2789 let mut next_offset = offset;
2790 let end_offset = offset + bytes_len;
2791 _next_ordinal_to_read += 1;
2792 if next_offset >= end_offset {
2793 return Ok(());
2794 }
2795
2796 while _next_ordinal_to_read < 1 {
2798 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2799 _next_ordinal_to_read += 1;
2800 next_offset += envelope_size;
2801 }
2802
2803 let next_out_of_line = decoder.next_out_of_line();
2804 let handles_before = decoder.remaining_handles();
2805 if let Some((inlined, num_bytes, num_handles)) =
2806 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2807 {
2808 let member_inline_size =
2809 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2810 if inlined != (member_inline_size <= 4) {
2811 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2812 }
2813 let inner_offset;
2814 let mut inner_depth = depth.clone();
2815 if inlined {
2816 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2817 inner_offset = next_offset;
2818 } else {
2819 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2820 inner_depth.increment()?;
2821 }
2822 let val_ref = self.snapshot_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2823 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2824 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2825 {
2826 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2827 }
2828 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2829 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2830 }
2831 }
2832
2833 next_offset += envelope_size;
2834 _next_ordinal_to_read += 1;
2835 if next_offset >= end_offset {
2836 return Ok(());
2837 }
2838
2839 while _next_ordinal_to_read < 2 {
2841 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2842 _next_ordinal_to_read += 1;
2843 next_offset += envelope_size;
2844 }
2845
2846 let next_out_of_line = decoder.next_out_of_line();
2847 let handles_before = decoder.remaining_handles();
2848 if let Some((inlined, num_bytes, num_handles)) =
2849 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2850 {
2851 let member_inline_size =
2852 <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
2853 decoder.context,
2854 );
2855 if inlined != (member_inline_size <= 4) {
2856 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2857 }
2858 let inner_offset;
2859 let mut inner_depth = depth.clone();
2860 if inlined {
2861 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2862 inner_offset = next_offset;
2863 } else {
2864 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2865 inner_depth.increment()?;
2866 }
2867 let val_ref = self
2868 .snapshot_name
2869 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
2870 fidl::decode!(
2871 fidl::encoding::BoundedString<32>,
2872 D,
2873 val_ref,
2874 decoder,
2875 inner_offset,
2876 inner_depth
2877 )?;
2878 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2879 {
2880 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2881 }
2882 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2883 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2884 }
2885 }
2886
2887 next_offset += envelope_size;
2888 _next_ordinal_to_read += 1;
2889 if next_offset >= end_offset {
2890 return Ok(());
2891 }
2892
2893 while _next_ordinal_to_read < 3 {
2895 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2896 _next_ordinal_to_read += 1;
2897 next_offset += envelope_size;
2898 }
2899
2900 let next_out_of_line = decoder.next_out_of_line();
2901 let handles_before = decoder.remaining_handles();
2902 if let Some((inlined, num_bytes, num_handles)) =
2903 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2904 {
2905 let member_inline_size =
2906 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2907 if inlined != (member_inline_size <= 4) {
2908 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2909 }
2910 let inner_offset;
2911 let mut inner_depth = depth.clone();
2912 if inlined {
2913 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2914 inner_offset = next_offset;
2915 } else {
2916 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2917 inner_depth.increment()?;
2918 }
2919 let val_ref = self.process_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
2920 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2921 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2922 {
2923 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2924 }
2925 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2926 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2927 }
2928 }
2929
2930 next_offset += envelope_size;
2931 _next_ordinal_to_read += 1;
2932 if next_offset >= end_offset {
2933 return Ok(());
2934 }
2935
2936 while _next_ordinal_to_read < 4 {
2938 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2939 _next_ordinal_to_read += 1;
2940 next_offset += envelope_size;
2941 }
2942
2943 let next_out_of_line = decoder.next_out_of_line();
2944 let handles_before = decoder.remaining_handles();
2945 if let Some((inlined, num_bytes, num_handles)) =
2946 fidl::encoding::decode_envelope_header(decoder, next_offset)?
2947 {
2948 let member_inline_size =
2949 <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
2950 decoder.context,
2951 );
2952 if inlined != (member_inline_size <= 4) {
2953 return Err(fidl::Error::InvalidInlineBitInEnvelope);
2954 }
2955 let inner_offset;
2956 let mut inner_depth = depth.clone();
2957 if inlined {
2958 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2959 inner_offset = next_offset;
2960 } else {
2961 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2962 inner_depth.increment()?;
2963 }
2964 let val_ref = self
2965 .process_name
2966 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
2967 fidl::decode!(
2968 fidl::encoding::BoundedString<32>,
2969 D,
2970 val_ref,
2971 decoder,
2972 inner_offset,
2973 inner_depth
2974 )?;
2975 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2976 {
2977 return Err(fidl::Error::InvalidNumBytesInEnvelope);
2978 }
2979 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2980 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2981 }
2982 }
2983
2984 next_offset += envelope_size;
2985
2986 while next_offset < end_offset {
2988 _next_ordinal_to_read += 1;
2989 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2990 next_offset += envelope_size;
2991 }
2992
2993 Ok(())
2994 }
2995 }
2996
2997 impl ThreadInfo {
2998 #[inline(always)]
2999 fn max_ordinal_present(&self) -> u64 {
3000 if let Some(_) = self.name {
3001 return 3;
3002 }
3003 if let Some(_) = self.koid {
3004 return 2;
3005 }
3006 if let Some(_) = self.thread_info_key {
3007 return 1;
3008 }
3009 0
3010 }
3011 }
3012
3013 impl fidl::encoding::ValueTypeMarker for ThreadInfo {
3014 type Borrowed<'a> = &'a Self;
3015 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3016 value
3017 }
3018 }
3019
3020 unsafe impl fidl::encoding::TypeMarker for ThreadInfo {
3021 type Owned = Self;
3022
3023 #[inline(always)]
3024 fn inline_align(_context: fidl::encoding::Context) -> usize {
3025 8
3026 }
3027
3028 #[inline(always)]
3029 fn inline_size(_context: fidl::encoding::Context) -> usize {
3030 16
3031 }
3032 }
3033
3034 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadInfo, D>
3035 for &ThreadInfo
3036 {
3037 unsafe fn encode(
3038 self,
3039 encoder: &mut fidl::encoding::Encoder<'_, D>,
3040 offset: usize,
3041 mut depth: fidl::encoding::Depth,
3042 ) -> fidl::Result<()> {
3043 encoder.debug_check_bounds::<ThreadInfo>(offset);
3044 let max_ordinal: u64 = self.max_ordinal_present();
3046 encoder.write_num(max_ordinal, offset);
3047 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3048 if max_ordinal == 0 {
3050 return Ok(());
3051 }
3052 depth.increment()?;
3053 let envelope_size = 8;
3054 let bytes_len = max_ordinal as usize * envelope_size;
3055 #[allow(unused_variables)]
3056 let offset = encoder.out_of_line_offset(bytes_len);
3057 let mut _prev_end_offset: usize = 0;
3058 if 1 > max_ordinal {
3059 return Ok(());
3060 }
3061
3062 let cur_offset: usize = (1 - 1) * envelope_size;
3065
3066 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3068
3069 fidl::encoding::encode_in_envelope_optional::<u64, D>(
3074 self.thread_info_key.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3075 encoder,
3076 offset + cur_offset,
3077 depth,
3078 )?;
3079
3080 _prev_end_offset = cur_offset + envelope_size;
3081 if 2 > max_ordinal {
3082 return Ok(());
3083 }
3084
3085 let cur_offset: usize = (2 - 1) * envelope_size;
3088
3089 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3091
3092 fidl::encoding::encode_in_envelope_optional::<u64, D>(
3097 self.koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3098 encoder,
3099 offset + cur_offset,
3100 depth,
3101 )?;
3102
3103 _prev_end_offset = cur_offset + envelope_size;
3104 if 3 > max_ordinal {
3105 return Ok(());
3106 }
3107
3108 let cur_offset: usize = (3 - 1) * envelope_size;
3111
3112 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3114
3115 fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
3120 self.name.as_ref().map(
3121 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
3122 ),
3123 encoder,
3124 offset + cur_offset,
3125 depth,
3126 )?;
3127
3128 _prev_end_offset = cur_offset + envelope_size;
3129
3130 Ok(())
3131 }
3132 }
3133
3134 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadInfo {
3135 #[inline(always)]
3136 fn new_empty() -> Self {
3137 Self::default()
3138 }
3139
3140 unsafe fn decode(
3141 &mut self,
3142 decoder: &mut fidl::encoding::Decoder<'_, D>,
3143 offset: usize,
3144 mut depth: fidl::encoding::Depth,
3145 ) -> fidl::Result<()> {
3146 decoder.debug_check_bounds::<Self>(offset);
3147 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3148 None => return Err(fidl::Error::NotNullable),
3149 Some(len) => len,
3150 };
3151 if len == 0 {
3153 return Ok(());
3154 };
3155 depth.increment()?;
3156 let envelope_size = 8;
3157 let bytes_len = len * envelope_size;
3158 let offset = decoder.out_of_line_offset(bytes_len)?;
3159 let mut _next_ordinal_to_read = 0;
3161 let mut next_offset = offset;
3162 let end_offset = offset + bytes_len;
3163 _next_ordinal_to_read += 1;
3164 if next_offset >= end_offset {
3165 return Ok(());
3166 }
3167
3168 while _next_ordinal_to_read < 1 {
3170 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3171 _next_ordinal_to_read += 1;
3172 next_offset += envelope_size;
3173 }
3174
3175 let next_out_of_line = decoder.next_out_of_line();
3176 let handles_before = decoder.remaining_handles();
3177 if let Some((inlined, num_bytes, num_handles)) =
3178 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3179 {
3180 let member_inline_size =
3181 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3182 if inlined != (member_inline_size <= 4) {
3183 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3184 }
3185 let inner_offset;
3186 let mut inner_depth = depth.clone();
3187 if inlined {
3188 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3189 inner_offset = next_offset;
3190 } else {
3191 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3192 inner_depth.increment()?;
3193 }
3194 let val_ref = self.thread_info_key.get_or_insert_with(|| fidl::new_empty!(u64, D));
3195 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3196 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3197 {
3198 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3199 }
3200 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3201 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3202 }
3203 }
3204
3205 next_offset += envelope_size;
3206 _next_ordinal_to_read += 1;
3207 if next_offset >= end_offset {
3208 return Ok(());
3209 }
3210
3211 while _next_ordinal_to_read < 2 {
3213 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3214 _next_ordinal_to_read += 1;
3215 next_offset += envelope_size;
3216 }
3217
3218 let next_out_of_line = decoder.next_out_of_line();
3219 let handles_before = decoder.remaining_handles();
3220 if let Some((inlined, num_bytes, num_handles)) =
3221 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3222 {
3223 let member_inline_size =
3224 <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3225 if inlined != (member_inline_size <= 4) {
3226 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3227 }
3228 let inner_offset;
3229 let mut inner_depth = depth.clone();
3230 if inlined {
3231 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3232 inner_offset = next_offset;
3233 } else {
3234 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3235 inner_depth.increment()?;
3236 }
3237 let val_ref = self.koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
3238 fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3239 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3240 {
3241 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3242 }
3243 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3244 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3245 }
3246 }
3247
3248 next_offset += envelope_size;
3249 _next_ordinal_to_read += 1;
3250 if next_offset >= end_offset {
3251 return Ok(());
3252 }
3253
3254 while _next_ordinal_to_read < 3 {
3256 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3257 _next_ordinal_to_read += 1;
3258 next_offset += envelope_size;
3259 }
3260
3261 let next_out_of_line = decoder.next_out_of_line();
3262 let handles_before = decoder.remaining_handles();
3263 if let Some((inlined, num_bytes, num_handles)) =
3264 fidl::encoding::decode_envelope_header(decoder, next_offset)?
3265 {
3266 let member_inline_size =
3267 <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
3268 decoder.context,
3269 );
3270 if inlined != (member_inline_size <= 4) {
3271 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3272 }
3273 let inner_offset;
3274 let mut inner_depth = depth.clone();
3275 if inlined {
3276 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3277 inner_offset = next_offset;
3278 } else {
3279 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3280 inner_depth.increment()?;
3281 }
3282 let val_ref = self
3283 .name
3284 .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
3285 fidl::decode!(
3286 fidl::encoding::BoundedString<32>,
3287 D,
3288 val_ref,
3289 decoder,
3290 inner_offset,
3291 inner_depth
3292 )?;
3293 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3294 {
3295 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3296 }
3297 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3298 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3299 }
3300 }
3301
3302 next_offset += envelope_size;
3303
3304 while next_offset < end_offset {
3306 _next_ordinal_to_read += 1;
3307 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3308 next_offset += envelope_size;
3309 }
3310
3311 Ok(())
3312 }
3313 }
3314
3315 impl fidl::encoding::ValueTypeMarker for ProcessSelector {
3316 type Borrowed<'a> = &'a Self;
3317 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3318 value
3319 }
3320 }
3321
3322 unsafe impl fidl::encoding::TypeMarker for ProcessSelector {
3323 type Owned = Self;
3324
3325 #[inline(always)]
3326 fn inline_align(_context: fidl::encoding::Context) -> usize {
3327 8
3328 }
3329
3330 #[inline(always)]
3331 fn inline_size(_context: fidl::encoding::Context) -> usize {
3332 16
3333 }
3334 }
3335
3336 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ProcessSelector, D>
3337 for &ProcessSelector
3338 {
3339 #[inline]
3340 unsafe fn encode(
3341 self,
3342 encoder: &mut fidl::encoding::Encoder<'_, D>,
3343 offset: usize,
3344 _depth: fidl::encoding::Depth,
3345 ) -> fidl::Result<()> {
3346 encoder.debug_check_bounds::<ProcessSelector>(offset);
3347 encoder.write_num::<u64>(self.ordinal(), offset);
3348 match self {
3349 ProcessSelector::ByName(ref val) => fidl::encoding::encode_in_envelope::<
3350 fidl::encoding::BoundedString<32>,
3351 D,
3352 >(
3353 <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(
3354 val,
3355 ),
3356 encoder,
3357 offset + 8,
3358 _depth,
3359 ),
3360 ProcessSelector::ByKoid(ref val) => fidl::encoding::encode_in_envelope::<u64, D>(
3361 <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
3362 encoder,
3363 offset + 8,
3364 _depth,
3365 ),
3366 ProcessSelector::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
3367 }
3368 }
3369 }
3370
3371 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ProcessSelector {
3372 #[inline(always)]
3373 fn new_empty() -> Self {
3374 Self::__SourceBreaking { unknown_ordinal: 0 }
3375 }
3376
3377 #[inline]
3378 unsafe fn decode(
3379 &mut self,
3380 decoder: &mut fidl::encoding::Decoder<'_, D>,
3381 offset: usize,
3382 mut depth: fidl::encoding::Depth,
3383 ) -> fidl::Result<()> {
3384 decoder.debug_check_bounds::<Self>(offset);
3385 #[allow(unused_variables)]
3386 let next_out_of_line = decoder.next_out_of_line();
3387 let handles_before = decoder.remaining_handles();
3388 let (ordinal, inlined, num_bytes, num_handles) =
3389 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
3390
3391 let member_inline_size = match ordinal {
3392 1 => {
3393 <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
3394 decoder.context,
3395 )
3396 }
3397 2 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3398 0 => return Err(fidl::Error::UnknownUnionTag),
3399 _ => num_bytes as usize,
3400 };
3401
3402 if inlined != (member_inline_size <= 4) {
3403 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3404 }
3405 let _inner_offset;
3406 if inlined {
3407 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
3408 _inner_offset = offset + 8;
3409 } else {
3410 depth.increment()?;
3411 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3412 }
3413 match ordinal {
3414 1 => {
3415 #[allow(irrefutable_let_patterns)]
3416 if let ProcessSelector::ByName(_) = self {
3417 } else {
3419 *self = ProcessSelector::ByName(fidl::new_empty!(
3421 fidl::encoding::BoundedString<32>,
3422 D
3423 ));
3424 }
3425 #[allow(irrefutable_let_patterns)]
3426 if let ProcessSelector::ByName(ref mut val) = self {
3427 fidl::decode!(
3428 fidl::encoding::BoundedString<32>,
3429 D,
3430 val,
3431 decoder,
3432 _inner_offset,
3433 depth
3434 )?;
3435 } else {
3436 unreachable!()
3437 }
3438 }
3439 2 => {
3440 #[allow(irrefutable_let_patterns)]
3441 if let ProcessSelector::ByKoid(_) = self {
3442 } else {
3444 *self = ProcessSelector::ByKoid(fidl::new_empty!(u64, D));
3446 }
3447 #[allow(irrefutable_let_patterns)]
3448 if let ProcessSelector::ByKoid(ref mut val) = self {
3449 fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
3450 } else {
3451 unreachable!()
3452 }
3453 }
3454 #[allow(deprecated)]
3455 ordinal => {
3456 for _ in 0..num_handles {
3457 decoder.drop_next_handle()?;
3458 }
3459 *self = ProcessSelector::__SourceBreaking { unknown_ordinal: ordinal };
3460 }
3461 }
3462 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
3463 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3464 }
3465 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3466 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3467 }
3468 Ok(())
3469 }
3470 }
3471
3472 impl fidl::encoding::ValueTypeMarker for SnapshotElement {
3473 type Borrowed<'a> = &'a Self;
3474 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3475 value
3476 }
3477 }
3478
3479 unsafe impl fidl::encoding::TypeMarker for SnapshotElement {
3480 type Owned = Self;
3481
3482 #[inline(always)]
3483 fn inline_align(_context: fidl::encoding::Context) -> usize {
3484 8
3485 }
3486
3487 #[inline(always)]
3488 fn inline_size(_context: fidl::encoding::Context) -> usize {
3489 16
3490 }
3491 }
3492
3493 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SnapshotElement, D>
3494 for &SnapshotElement
3495 {
3496 #[inline]
3497 unsafe fn encode(
3498 self,
3499 encoder: &mut fidl::encoding::Encoder<'_, D>,
3500 offset: usize,
3501 _depth: fidl::encoding::Depth,
3502 ) -> fidl::Result<()> {
3503 encoder.debug_check_bounds::<SnapshotElement>(offset);
3504 encoder.write_num::<u64>(self.ordinal(), offset);
3505 match self {
3506 SnapshotElement::Allocation(ref val) => {
3507 fidl::encoding::encode_in_envelope::<Allocation, D>(
3508 <Allocation as fidl::encoding::ValueTypeMarker>::borrow(val),
3509 encoder,
3510 offset + 8,
3511 _depth,
3512 )
3513 }
3514 SnapshotElement::StackTrace(ref val) => {
3515 fidl::encoding::encode_in_envelope::<StackTrace, D>(
3516 <StackTrace as fidl::encoding::ValueTypeMarker>::borrow(val),
3517 encoder,
3518 offset + 8,
3519 _depth,
3520 )
3521 }
3522 SnapshotElement::ExecutableRegion(ref val) => {
3523 fidl::encoding::encode_in_envelope::<ExecutableRegion, D>(
3524 <ExecutableRegion as fidl::encoding::ValueTypeMarker>::borrow(val),
3525 encoder,
3526 offset + 8,
3527 _depth,
3528 )
3529 }
3530 SnapshotElement::BlockContents(ref val) => {
3531 fidl::encoding::encode_in_envelope::<BlockContents, D>(
3532 <BlockContents as fidl::encoding::ValueTypeMarker>::borrow(val),
3533 encoder,
3534 offset + 8,
3535 _depth,
3536 )
3537 }
3538 SnapshotElement::ThreadInfo(ref val) => {
3539 fidl::encoding::encode_in_envelope::<ThreadInfo, D>(
3540 <ThreadInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
3541 encoder,
3542 offset + 8,
3543 _depth,
3544 )
3545 }
3546 SnapshotElement::SnapshotHeader(ref val) => {
3547 fidl::encoding::encode_in_envelope::<SnapshotHeader, D>(
3548 <SnapshotHeader as fidl::encoding::ValueTypeMarker>::borrow(val),
3549 encoder,
3550 offset + 8,
3551 _depth,
3552 )
3553 }
3554 SnapshotElement::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
3555 }
3556 }
3557 }
3558
3559 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SnapshotElement {
3560 #[inline(always)]
3561 fn new_empty() -> Self {
3562 Self::__SourceBreaking { unknown_ordinal: 0 }
3563 }
3564
3565 #[inline]
3566 unsafe fn decode(
3567 &mut self,
3568 decoder: &mut fidl::encoding::Decoder<'_, D>,
3569 offset: usize,
3570 mut depth: fidl::encoding::Depth,
3571 ) -> fidl::Result<()> {
3572 decoder.debug_check_bounds::<Self>(offset);
3573 #[allow(unused_variables)]
3574 let next_out_of_line = decoder.next_out_of_line();
3575 let handles_before = decoder.remaining_handles();
3576 let (ordinal, inlined, num_bytes, num_handles) =
3577 fidl::encoding::decode_union_inline_portion(decoder, offset)?;
3578
3579 let member_inline_size = match ordinal {
3580 1 => <Allocation as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3581 2 => <StackTrace as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3582 3 => <ExecutableRegion as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3583 4 => <BlockContents as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3584 5 => <ThreadInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3585 6 => <SnapshotHeader as fidl::encoding::TypeMarker>::inline_size(decoder.context),
3586 0 => return Err(fidl::Error::UnknownUnionTag),
3587 _ => num_bytes as usize,
3588 };
3589
3590 if inlined != (member_inline_size <= 4) {
3591 return Err(fidl::Error::InvalidInlineBitInEnvelope);
3592 }
3593 let _inner_offset;
3594 if inlined {
3595 decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
3596 _inner_offset = offset + 8;
3597 } else {
3598 depth.increment()?;
3599 _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3600 }
3601 match ordinal {
3602 1 => {
3603 #[allow(irrefutable_let_patterns)]
3604 if let SnapshotElement::Allocation(_) = self {
3605 } else {
3607 *self = SnapshotElement::Allocation(fidl::new_empty!(Allocation, D));
3609 }
3610 #[allow(irrefutable_let_patterns)]
3611 if let SnapshotElement::Allocation(ref mut val) = self {
3612 fidl::decode!(Allocation, D, val, decoder, _inner_offset, depth)?;
3613 } else {
3614 unreachable!()
3615 }
3616 }
3617 2 => {
3618 #[allow(irrefutable_let_patterns)]
3619 if let SnapshotElement::StackTrace(_) = self {
3620 } else {
3622 *self = SnapshotElement::StackTrace(fidl::new_empty!(StackTrace, D));
3624 }
3625 #[allow(irrefutable_let_patterns)]
3626 if let SnapshotElement::StackTrace(ref mut val) = self {
3627 fidl::decode!(StackTrace, D, val, decoder, _inner_offset, depth)?;
3628 } else {
3629 unreachable!()
3630 }
3631 }
3632 3 => {
3633 #[allow(irrefutable_let_patterns)]
3634 if let SnapshotElement::ExecutableRegion(_) = self {
3635 } else {
3637 *self = SnapshotElement::ExecutableRegion(fidl::new_empty!(
3639 ExecutableRegion,
3640 D
3641 ));
3642 }
3643 #[allow(irrefutable_let_patterns)]
3644 if let SnapshotElement::ExecutableRegion(ref mut val) = self {
3645 fidl::decode!(ExecutableRegion, D, val, decoder, _inner_offset, depth)?;
3646 } else {
3647 unreachable!()
3648 }
3649 }
3650 4 => {
3651 #[allow(irrefutable_let_patterns)]
3652 if let SnapshotElement::BlockContents(_) = self {
3653 } else {
3655 *self = SnapshotElement::BlockContents(fidl::new_empty!(BlockContents, D));
3657 }
3658 #[allow(irrefutable_let_patterns)]
3659 if let SnapshotElement::BlockContents(ref mut val) = self {
3660 fidl::decode!(BlockContents, D, val, decoder, _inner_offset, depth)?;
3661 } else {
3662 unreachable!()
3663 }
3664 }
3665 5 => {
3666 #[allow(irrefutable_let_patterns)]
3667 if let SnapshotElement::ThreadInfo(_) = self {
3668 } else {
3670 *self = SnapshotElement::ThreadInfo(fidl::new_empty!(ThreadInfo, D));
3672 }
3673 #[allow(irrefutable_let_patterns)]
3674 if let SnapshotElement::ThreadInfo(ref mut val) = self {
3675 fidl::decode!(ThreadInfo, D, val, decoder, _inner_offset, depth)?;
3676 } else {
3677 unreachable!()
3678 }
3679 }
3680 6 => {
3681 #[allow(irrefutable_let_patterns)]
3682 if let SnapshotElement::SnapshotHeader(_) = self {
3683 } else {
3685 *self =
3687 SnapshotElement::SnapshotHeader(fidl::new_empty!(SnapshotHeader, D));
3688 }
3689 #[allow(irrefutable_let_patterns)]
3690 if let SnapshotElement::SnapshotHeader(ref mut val) = self {
3691 fidl::decode!(SnapshotHeader, D, val, decoder, _inner_offset, depth)?;
3692 } else {
3693 unreachable!()
3694 }
3695 }
3696 #[allow(deprecated)]
3697 ordinal => {
3698 for _ in 0..num_handles {
3699 decoder.drop_next_handle()?;
3700 }
3701 *self = SnapshotElement::__SourceBreaking { unknown_ordinal: ordinal };
3702 }
3703 }
3704 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
3705 return Err(fidl::Error::InvalidNumBytesInEnvelope);
3706 }
3707 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3708 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3709 }
3710 Ok(())
3711 }
3712 }
3713}