Skip to main content

fidl_fuchsia_memory_heapdump_client__common/
fidl_fuchsia_memory_heapdump_client__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type StackTraceKey = u64;
12
13pub type ThreadInfoKey = u64;
14
15pub const MAX_BUILD_ID_LENGTH: u32 = 32;
16
17/// The reason why a method failed.
18#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
19pub enum CollectorError {
20    /// The given ProcessSelector value is not supported.
21    ProcessSelectorUnsupported,
22    /// The given ProcessSelector value does not match any process.
23    ProcessSelectorNoMatch,
24    /// The given ProcessSelector value matches more than one process but the requested operation
25    /// needs a unique match.
26    ProcessSelectorAmbiguous,
27    /// Failed to take a live snapshot.
28    LiveSnapshotFailed,
29    /// The requested StoredSnapshot does not exist.
30    StoredSnapshotNotFound,
31    #[doc(hidden)]
32    __SourceBreaking { unknown_ordinal: u32 },
33}
34
35/// Pattern that matches an unknown `CollectorError` member.
36#[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/// An ELF build ID.
95#[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/// One or more allocated memory blocks.
124#[derive(Clone, Debug, Default, PartialEq)]
125pub struct Allocation {
126    /// Address of the memory block.
127    pub address: Option<u64>,
128    /// Total memory blocks size, in bytes.
129    pub size: Option<u64>,
130    /// Stack trace of the allocation site.
131    pub stack_trace_key: Option<u64>,
132    /// Allocation timestamp.
133    pub timestamp: Option<fidl::MonotonicInstant>,
134    /// Allocating thread.
135    pub thread_info_key: Option<u64>,
136    /// Number of allocated memory blocks that have been aggregated into this element.
137    /// 1 by default.
138    pub count: Option<u64>,
139    #[doc(hidden)]
140    pub __source_breaking: fidl::marker::SourceBreaking,
141}
142
143impl fidl::Persistable for Allocation {}
144
145/// The contents of an allocated memory block.
146///
147/// In order to avoid exceeding the channel's maximum message size, bigger blocks can be split in
148/// chunks. Receivers should be prepared to handle multiple BlockContents with the same address and
149/// reassemble them by concatenating their payloads. Each block's reassembled size always matches
150/// the size field of the corresponding Allocation.
151#[derive(Clone, Debug, Default, PartialEq)]
152pub struct BlockContents {
153    /// The address of the corresponding memory block.
154    pub address: Option<u64>,
155    /// The payload.
156    pub contents: Option<Vec<u8>>,
157    #[doc(hidden)]
158    pub __source_breaking: fidl::marker::SourceBreaking,
159}
160
161impl fidl::Persistable for BlockContents {}
162
163/// A memory region containing code loaded from an ELF file.
164#[derive(Clone, Debug, Default, PartialEq)]
165pub struct ExecutableRegion {
166    /// The address of the memory region.
167    pub address: Option<u64>,
168    /// Region size, in bytes.
169    pub size: Option<u64>,
170    /// The file offset corresponding to the first byte within the region.
171    pub file_offset: Option<u64>,
172    /// The build ID of the ELF file.
173    pub build_id: Option<BuildId>,
174    /// The address of the memory region relative to the file's load address.
175    pub vaddr: Option<u64>,
176    /// Description of the memory region (e.g. ELF soname or VMO name).
177    pub name: Option<String>,
178    #[doc(hidden)]
179    pub __source_breaking: fidl::marker::SourceBreaking,
180}
181
182impl fidl::Persistable for ExecutableRegion {}
183
184/// Marks the beginning of a new snapshot.
185///
186/// Note: this element is only present in live snapshots taken with
187/// `multi_process` set to true.
188#[derive(Clone, Debug, Default, PartialEq)]
189pub struct SnapshotHeader {
190    /// ZX_PROP_NAME of the process the snapshot is about.
191    pub process_name: Option<String>,
192    /// Koid of the process.
193    pub process_koid: Option<u64>,
194    #[doc(hidden)]
195    pub __source_breaking: fidl::marker::SourceBreaking,
196}
197
198impl fidl::Persistable for SnapshotHeader {}
199
200/// A stack trace.
201///
202/// In order to avoid exceeding the channel's maximum message size, stack traces can be split in
203/// multiple chunks. Receivers should be prepared to handle multiple StackTrace elements with the
204/// same key and reassemble them by concatenating their program addresses.
205#[derive(Clone, Debug, Default, PartialEq)]
206pub struct StackTrace {
207    /// A number that uniquely identifies this stack trace within the parent snapshot.
208    pub stack_trace_key: Option<u64>,
209    /// The program counters corresponding to stack each frame.
210    ///
211    /// Entries are listed in reverse call order: the first entry refers to the leaf frame, and the
212    /// last entry refers to the frame at the root of the call stack.
213    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/// A snapshot that is stored on the device and that can be downloaded.
221///
222/// Application-initiated snapshots belong to this category.
223#[derive(Clone, Debug, Default, PartialEq)]
224pub struct StoredSnapshot {
225    /// A number that uniquely identifies this snapshot within a Collector.
226    pub snapshot_id: Option<u32>,
227    /// The name given to this snapshot.
228    pub snapshot_name: Option<String>,
229    /// The koid of the process that this snapshot refers to.
230    pub process_koid: Option<u64>,
231    /// The name of the process that this snapshot refers to.
232    pub process_name: Option<String>,
233    #[doc(hidden)]
234    pub __source_breaking: fidl::marker::SourceBreaking,
235}
236
237impl fidl::Persistable for StoredSnapshot {}
238
239/// Information on a given thread.
240///
241/// Note: Under some circumstances, more than one entry could exist for a given koid (e.g. if the
242/// thread changed its name between different allocations).
243#[derive(Clone, Debug, Default, PartialEq)]
244pub struct ThreadInfo {
245    /// A number that uniquely identifies this entry within the parent snapshot.
246    pub thread_info_key: Option<u64>,
247    /// The koid of the thread that this entry refers to.
248    pub koid: Option<u64>,
249    /// The name of the thread that this entry refers to.
250    pub name: Option<String>,
251    #[doc(hidden)]
252    pub __source_breaking: fidl::marker::SourceBreaking,
253}
254
255impl fidl::Persistable for ThreadInfo {}
256
257/// Filter to restrict an operation to a subset of the available processes.
258#[derive(Clone, Debug)]
259pub enum ProcessSelector {
260    /// Matches any process with the given ZX_PROP_NAME.
261    ByName(String),
262    /// Matches the process with the given koid.
263    /// ZX_KOID_KERNEL(1) stands for the kernel.
264    ByKoid(u64),
265    #[doc(hidden)]
266    __SourceBreaking { unknown_ordinal: u64 },
267}
268
269/// Pattern that matches an unknown `ProcessSelector` member.
270#[macro_export]
271macro_rules! ProcessSelectorUnknown {
272    () => {
273        _
274    };
275}
276
277// Custom PartialEq so that unknown variants are not equal to themselves.
278impl 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/// An element that is part of a snapshot.
315#[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/// Pattern that matches an unknown `SnapshotElement` member.
330#[macro_export]
331macro_rules! SnapshotElementUnknown {
332    () => {
333        _
334    };
335}
336
337// Custom PartialEq so that unknown variants are not equal to themselves.
338impl 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            // Delegate to tuple encoding.
497            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            // Zero out padding regions. There's no need to apply masks
521            // because the unmasked parts will be overwritten by fields.
522            // Write the fields.
523            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            // Verify that padding bytes are zero.
543            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            // Delegate to tuple encoding.
581            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            // Zero out padding regions. There's no need to apply masks
603            // because the unmasked parts will be overwritten by fields.
604            // Write the fields.
605            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            // Verify that padding bytes are zero.
627            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            // Delegate to tuple encoding.
673            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            // Zero out padding regions. There's no need to apply masks
693            // because the unmasked parts will be overwritten by fields.
694            // Write the fields.
695            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            // Verify that padding bytes are zero.
717            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            // Delegate to tuple encoding.
756            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            // Zero out padding regions. There's no need to apply masks
778            // because the unmasked parts will be overwritten by fields.
779            // Write the fields.
780            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            // Verify that padding bytes are zero.
802            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            // Vector header
871            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            // Calling encoder.out_of_line_offset(0) is not allowed.
875            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
889            // are envelope_size bytes.
890            let cur_offset: usize = (1 - 1) * envelope_size;
891
892            // Zero reserved fields.
893            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
894
895            // Safety:
896            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
897            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
898            //   envelope_size bytes, there is always sufficient room.
899            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
912            // are envelope_size bytes.
913            let cur_offset: usize = (2 - 1) * envelope_size;
914
915            // Zero reserved fields.
916            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
917
918            // Safety:
919            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
920            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
921            //   envelope_size bytes, there is always sufficient room.
922            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
935            // are envelope_size bytes.
936            let cur_offset: usize = (3 - 1) * envelope_size;
937
938            // Zero reserved fields.
939            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
940
941            // Safety:
942            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
943            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
944            //   envelope_size bytes, there is always sufficient room.
945            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
958            // are envelope_size bytes.
959            let cur_offset: usize = (4 - 1) * envelope_size;
960
961            // Zero reserved fields.
962            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
963
964            // Safety:
965            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
966            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
967            //   envelope_size bytes, there is always sufficient room.
968            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
983            // are envelope_size bytes.
984            let cur_offset: usize = (5 - 1) * envelope_size;
985
986            // Zero reserved fields.
987            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
988
989            // Safety:
990            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
991            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
992            //   envelope_size bytes, there is always sufficient room.
993            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1006            // are envelope_size bytes.
1007            let cur_offset: usize = (6 - 1) * envelope_size;
1008
1009            // Zero reserved fields.
1010            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1011
1012            // Safety:
1013            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1014            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1015            //   envelope_size bytes, there is always sufficient room.
1016            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            // Calling decoder.out_of_line_offset(0) is not allowed.
1047            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            // Decode the envelope for each type.
1055            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            // Decode unknown envelopes for gaps in ordinals.
1064            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            // Decode unknown envelopes for gaps in ordinals.
1107            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            // Decode unknown envelopes for gaps in ordinals.
1150            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            // Decode unknown envelopes for gaps in ordinals.
1193            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            // Decode unknown envelopes for gaps in ordinals.
1247            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            // Decode unknown envelopes for gaps in ordinals.
1290            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            // Decode the remaining unknown envelopes.
1329            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            // Vector header
1384            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            // Calling encoder.out_of_line_offset(0) is not allowed.
1388            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1402            // are envelope_size bytes.
1403            let cur_offset: usize = (1 - 1) * envelope_size;
1404
1405            // Zero reserved fields.
1406            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1407
1408            // Safety:
1409            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1410            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1411            //   envelope_size bytes, there is always sufficient room.
1412            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1425            // are envelope_size bytes.
1426            let cur_offset: usize = (2 - 1) * envelope_size;
1427
1428            // Zero reserved fields.
1429            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1430
1431            // Safety:
1432            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1433            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1434            //   envelope_size bytes, there is always sufficient room.
1435            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            // Calling decoder.out_of_line_offset(0) is not allowed.
1464            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            // Decode the envelope for each type.
1472            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            // Decode unknown envelopes for gaps in ordinals.
1481            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            // Decode unknown envelopes for gaps in ordinals.
1524            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            // Decode the remaining unknown envelopes.
1571            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            // Vector header
1638            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            // Calling encoder.out_of_line_offset(0) is not allowed.
1642            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1656            // are envelope_size bytes.
1657            let cur_offset: usize = (1 - 1) * envelope_size;
1658
1659            // Zero reserved fields.
1660            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1661
1662            // Safety:
1663            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1664            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1665            //   envelope_size bytes, there is always sufficient room.
1666            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1679            // are envelope_size bytes.
1680            let cur_offset: usize = (2 - 1) * envelope_size;
1681
1682            // Zero reserved fields.
1683            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1684
1685            // Safety:
1686            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1687            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1688            //   envelope_size bytes, there is always sufficient room.
1689            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1702            // are envelope_size bytes.
1703            let cur_offset: usize = (3 - 1) * envelope_size;
1704
1705            // Zero reserved fields.
1706            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1707
1708            // Safety:
1709            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1710            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1711            //   envelope_size bytes, there is always sufficient room.
1712            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1725            // are envelope_size bytes.
1726            let cur_offset: usize = (4 - 1) * envelope_size;
1727
1728            // Zero reserved fields.
1729            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1730
1731            // Safety:
1732            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1733            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1734            //   envelope_size bytes, there is always sufficient room.
1735            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1748            // are envelope_size bytes.
1749            let cur_offset: usize = (5 - 1) * envelope_size;
1750
1751            // Zero reserved fields.
1752            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1753
1754            // Safety:
1755            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1756            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1757            //   envelope_size bytes, there is always sufficient room.
1758            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1771            // are envelope_size bytes.
1772            let cur_offset: usize = (6 - 1) * envelope_size;
1773
1774            // Zero reserved fields.
1775            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1776
1777            // Safety:
1778            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1779            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1780            //   envelope_size bytes, there is always sufficient room.
1781            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            // Calling decoder.out_of_line_offset(0) is not allowed.
1814            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            // Decode the envelope for each type.
1822            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            // Decode unknown envelopes for gaps in ordinals.
1831            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            // Decode unknown envelopes for gaps in ordinals.
1874            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            // Decode unknown envelopes for gaps in ordinals.
1917            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            // Decode unknown envelopes for gaps in ordinals.
1960            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            // Decode unknown envelopes for gaps in ordinals.
2003            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            // Decode unknown envelopes for gaps in ordinals.
2046            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            // Decode the remaining unknown envelopes.
2096            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            // Vector header
2151            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            // Calling encoder.out_of_line_offset(0) is not allowed.
2155            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2169            // are envelope_size bytes.
2170            let cur_offset: usize = (1 - 1) * envelope_size;
2171
2172            // Zero reserved fields.
2173            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2174
2175            // Safety:
2176            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2177            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2178            //   envelope_size bytes, there is always sufficient room.
2179            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2194            // are envelope_size bytes.
2195            let cur_offset: usize = (2 - 1) * envelope_size;
2196
2197            // Zero reserved fields.
2198            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2199
2200            // Safety:
2201            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2202            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2203            //   envelope_size bytes, there is always sufficient room.
2204            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            // Calling decoder.out_of_line_offset(0) is not allowed.
2235            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            // Decode the envelope for each type.
2243            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            // Decode unknown envelopes for gaps in ordinals.
2252            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            // Decode unknown envelopes for gaps in ordinals.
2306            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            // Decode the remaining unknown envelopes.
2345            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            // Vector header
2400            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            // Calling encoder.out_of_line_offset(0) is not allowed.
2404            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2418            // are envelope_size bytes.
2419            let cur_offset: usize = (1 - 1) * envelope_size;
2420
2421            // Zero reserved fields.
2422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2423
2424            // Safety:
2425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2427            //   envelope_size bytes, there is always sufficient room.
2428            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2441            // are envelope_size bytes.
2442            let cur_offset: usize = (2 - 1) * envelope_size;
2443
2444            // Zero reserved fields.
2445            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2446
2447            // Safety:
2448            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2449            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2450            //   envelope_size bytes, there is always sufficient room.
2451            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            // Calling decoder.out_of_line_offset(0) is not allowed.
2480            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            // Decode the envelope for each type.
2488            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            // Decode unknown envelopes for gaps in ordinals.
2497            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            // Decode unknown envelopes for gaps in ordinals.
2540            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            // Decode the remaining unknown envelopes.
2587            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            // Vector header
2648            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            // Calling encoder.out_of_line_offset(0) is not allowed.
2652            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2666            // are envelope_size bytes.
2667            let cur_offset: usize = (1 - 1) * envelope_size;
2668
2669            // Zero reserved fields.
2670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2671
2672            // Safety:
2673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2675            //   envelope_size bytes, there is always sufficient room.
2676            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2689            // are envelope_size bytes.
2690            let cur_offset: usize = (2 - 1) * envelope_size;
2691
2692            // Zero reserved fields.
2693            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2694
2695            // Safety:
2696            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2697            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2698            //   envelope_size bytes, there is always sufficient room.
2699            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2714            // are envelope_size bytes.
2715            let cur_offset: usize = (3 - 1) * envelope_size;
2716
2717            // Zero reserved fields.
2718            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2719
2720            // Safety:
2721            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2722            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2723            //   envelope_size bytes, there is always sufficient room.
2724            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2737            // are envelope_size bytes.
2738            let cur_offset: usize = (4 - 1) * envelope_size;
2739
2740            // Zero reserved fields.
2741            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2742
2743            // Safety:
2744            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2745            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2746            //   envelope_size bytes, there is always sufficient room.
2747            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            // Calling decoder.out_of_line_offset(0) is not allowed.
2780            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            // Decode the envelope for each type.
2788            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            // Decode unknown envelopes for gaps in ordinals.
2797            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            // Decode unknown envelopes for gaps in ordinals.
2840            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            // Decode unknown envelopes for gaps in ordinals.
2894            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            // Decode unknown envelopes for gaps in ordinals.
2937            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            // Decode the remaining unknown envelopes.
2987            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            // Vector header
3045            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            // Calling encoder.out_of_line_offset(0) is not allowed.
3049            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3063            // are envelope_size bytes.
3064            let cur_offset: usize = (1 - 1) * envelope_size;
3065
3066            // Zero reserved fields.
3067            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3068
3069            // Safety:
3070            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3071            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3072            //   envelope_size bytes, there is always sufficient room.
3073            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3086            // are envelope_size bytes.
3087            let cur_offset: usize = (2 - 1) * envelope_size;
3088
3089            // Zero reserved fields.
3090            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3091
3092            // Safety:
3093            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3094            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3095            //   envelope_size bytes, there is always sufficient room.
3096            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            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3109            // are envelope_size bytes.
3110            let cur_offset: usize = (3 - 1) * envelope_size;
3111
3112            // Zero reserved fields.
3113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3114
3115            // Safety:
3116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3118            //   envelope_size bytes, there is always sufficient room.
3119            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            // Calling decoder.out_of_line_offset(0) is not allowed.
3152            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            // Decode the envelope for each type.
3160            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            // Decode unknown envelopes for gaps in ordinals.
3169            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            // Decode unknown envelopes for gaps in ordinals.
3212            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            // Decode unknown envelopes for gaps in ordinals.
3255            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            // Decode the remaining unknown envelopes.
3305            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                        // Do nothing, read the value into the object
3418                    } else {
3419                        // Initialize `self` to the right variant
3420                        *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                        // Do nothing, read the value into the object
3443                    } else {
3444                        // Initialize `self` to the right variant
3445                        *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                        // Do nothing, read the value into the object
3606                    } else {
3607                        // Initialize `self` to the right variant
3608                        *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                        // Do nothing, read the value into the object
3621                    } else {
3622                        // Initialize `self` to the right variant
3623                        *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                        // Do nothing, read the value into the object
3636                    } else {
3637                        // Initialize `self` to the right variant
3638                        *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                        // Do nothing, read the value into the object
3654                    } else {
3655                        // Initialize `self` to the right variant
3656                        *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                        // Do nothing, read the value into the object
3669                    } else {
3670                        // Initialize `self` to the right variant
3671                        *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                        // Do nothing, read the value into the object
3684                    } else {
3685                        // Initialize `self` to the right variant
3686                        *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}