Skip to main content

fidl_fuchsia_memory_sampler_common/
fidl_fuchsia_memory_sampler_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11/// A build ID is a 20 bytes long sequence.
12pub const BUILD_ID_BYTES: u32 = 20;
13
14/// Address region that corresponds to an executable segment in an ELF module.
15#[derive(Clone, Debug, Default, PartialEq)]
16pub struct ExecutableSegment {
17    /// Start of the region as mapped in memory.
18    pub start_address: Option<u64>,
19    /// Size of the range of addresses that are part of the region.
20    pub size: Option<u64>,
21    /// Offset of the region in the ELF binary before loading.
22    pub relative_address: Option<u64>,
23    #[doc(hidden)]
24    pub __source_breaking: fidl::marker::SourceBreaking,
25}
26
27impl fidl::Persistable for ExecutableSegment {}
28
29/// Information necessary for the symbolization of a module.
30/// Represents the subset of an ELF module relevant for the purposes of
31/// the profiler. The main use case for this map is the symbolization of stack traces.
32#[derive(Clone, Debug, Default, PartialEq)]
33pub struct ModuleMap {
34    /// Build ID, a string which uniquely identifies a module build.
35    pub build_id: Option<Vec<u8>>,
36    /// Collection of executable segments.
37    pub executable_segments: Option<Vec<ExecutableSegment>>,
38    #[doc(hidden)]
39    pub __source_breaking: fidl::marker::SourceBreaking,
40}
41
42impl fidl::Persistable for ModuleMap {}
43
44#[derive(Clone, Debug, Default, PartialEq)]
45pub struct RecordAllocationEvent {
46    /// Address of the allocation, to uniquely identify it.
47    pub address: Option<u64>,
48    /// Stack frames collected at the allocation point.
49    pub stack_trace: Option<StackTrace>,
50    /// Size (in bytes) of this allocation.
51    pub size: Option<u64>,
52    /// The sampling interval in effect when this allocation was sampled.
53    pub sampling_interval_bytes: Option<u64>,
54    #[doc(hidden)]
55    pub __source_breaking: fidl::marker::SourceBreaking,
56}
57
58impl fidl::Persistable for RecordAllocationEvent {}
59
60#[derive(Clone, Debug, Default, PartialEq)]
61pub struct RecordDeallocationEvent {
62    /// Address of the deallocation, to uniquely identify it.
63    pub address: Option<u64>,
64    /// Stack frames collected at the deallocation point.
65    pub stack_trace: Option<StackTrace>,
66    #[doc(hidden)]
67    pub __source_breaking: fidl::marker::SourceBreaking,
68}
69
70impl fidl::Persistable for RecordDeallocationEvent {}
71
72#[derive(Clone, Debug, Default, PartialEq)]
73pub struct SamplerSetProcessInfoRequest {
74    pub process_name: Option<String>,
75    pub module_map: Option<Vec<ModuleMap>>,
76    #[doc(hidden)]
77    pub __source_breaking: fidl::marker::SourceBreaking,
78}
79
80impl fidl::Persistable for SamplerSetProcessInfoRequest {}
81
82/// A stack trace, as a collection of stack frames.
83#[derive(Clone, Debug, Default, PartialEq)]
84pub struct StackTrace {
85    /// Ordered vector of frame pointers, from the narrower to the wider location.
86    pub stack_frames: Option<Vec<u64>>,
87    #[doc(hidden)]
88    pub __source_breaking: fidl::marker::SourceBreaking,
89}
90
91impl fidl::Persistable for StackTrace {}
92
93#[derive(Clone, Debug)]
94pub enum SamplerDatagram {
95    RecordAllocation(RecordAllocationEvent),
96    RecordDeallocation(RecordDeallocationEvent),
97    #[doc(hidden)]
98    __SourceBreaking {
99        unknown_ordinal: u64,
100    },
101}
102
103/// Pattern that matches an unknown `SamplerDatagram` member.
104#[macro_export]
105macro_rules! SamplerDatagramUnknown {
106    () => {
107        _
108    };
109}
110
111// Custom PartialEq so that unknown variants are not equal to themselves.
112impl PartialEq for SamplerDatagram {
113    fn eq(&self, other: &Self) -> bool {
114        match (self, other) {
115            (Self::RecordAllocation(x), Self::RecordAllocation(y)) => *x == *y,
116            (Self::RecordDeallocation(x), Self::RecordDeallocation(y)) => *x == *y,
117            _ => false,
118        }
119    }
120}
121
122impl SamplerDatagram {
123    #[inline]
124    pub fn ordinal(&self) -> u64 {
125        match *self {
126            Self::RecordAllocation(_) => 1,
127            Self::RecordDeallocation(_) => 2,
128            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
129        }
130    }
131
132    #[inline]
133    pub fn unknown_variant_for_testing() -> Self {
134        Self::__SourceBreaking { unknown_ordinal: 0 }
135    }
136
137    #[inline]
138    pub fn is_unknown(&self) -> bool {
139        match self {
140            Self::__SourceBreaking { .. } => true,
141            _ => false,
142        }
143    }
144}
145
146impl fidl::Persistable for SamplerDatagram {}
147
148pub mod sampler_ordinals {
149    pub const RECORD_ALLOCATION: u64 = 0x6b0add9f7769824d;
150    pub const RECORD_DEALLOCATION: u64 = 0x503bff5ec34dbeeb;
151    pub const SET_PROCESS_INFO: u64 = 0x68a0557106e51783;
152    pub const SET_SHARED_SOCKET: u64 = 0x32e9c11b7a2958fd;
153}
154
155mod internal {
156    use super::*;
157
158    impl ExecutableSegment {
159        #[inline(always)]
160        fn max_ordinal_present(&self) -> u64 {
161            if let Some(_) = self.relative_address {
162                return 3;
163            }
164            if let Some(_) = self.size {
165                return 2;
166            }
167            if let Some(_) = self.start_address {
168                return 1;
169            }
170            0
171        }
172    }
173
174    impl fidl::encoding::ValueTypeMarker for ExecutableSegment {
175        type Borrowed<'a> = &'a Self;
176        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
177            value
178        }
179    }
180
181    unsafe impl fidl::encoding::TypeMarker for ExecutableSegment {
182        type Owned = Self;
183
184        #[inline(always)]
185        fn inline_align(_context: fidl::encoding::Context) -> usize {
186            8
187        }
188
189        #[inline(always)]
190        fn inline_size(_context: fidl::encoding::Context) -> usize {
191            16
192        }
193    }
194
195    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ExecutableSegment, D>
196        for &ExecutableSegment
197    {
198        unsafe fn encode(
199            self,
200            encoder: &mut fidl::encoding::Encoder<'_, D>,
201            offset: usize,
202            mut depth: fidl::encoding::Depth,
203        ) -> fidl::Result<()> {
204            encoder.debug_check_bounds::<ExecutableSegment>(offset);
205            // Vector header
206            let max_ordinal: u64 = self.max_ordinal_present();
207            encoder.write_num(max_ordinal, offset);
208            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
209            // Calling encoder.out_of_line_offset(0) is not allowed.
210            if max_ordinal == 0 {
211                return Ok(());
212            }
213            depth.increment()?;
214            let envelope_size = 8;
215            let bytes_len = max_ordinal as usize * envelope_size;
216            #[allow(unused_variables)]
217            let offset = encoder.out_of_line_offset(bytes_len);
218            let mut _prev_end_offset: usize = 0;
219            if 1 > max_ordinal {
220                return Ok(());
221            }
222
223            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
224            // are envelope_size bytes.
225            let cur_offset: usize = (1 - 1) * envelope_size;
226
227            // Zero reserved fields.
228            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
229
230            // Safety:
231            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
232            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
233            //   envelope_size bytes, there is always sufficient room.
234            fidl::encoding::encode_in_envelope_optional::<u64, D>(
235                self.start_address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
236                encoder,
237                offset + cur_offset,
238                depth,
239            )?;
240
241            _prev_end_offset = cur_offset + envelope_size;
242            if 2 > max_ordinal {
243                return Ok(());
244            }
245
246            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
247            // are envelope_size bytes.
248            let cur_offset: usize = (2 - 1) * envelope_size;
249
250            // Zero reserved fields.
251            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
252
253            // Safety:
254            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
255            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
256            //   envelope_size bytes, there is always sufficient room.
257            fidl::encoding::encode_in_envelope_optional::<u64, D>(
258                self.size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
259                encoder,
260                offset + cur_offset,
261                depth,
262            )?;
263
264            _prev_end_offset = cur_offset + envelope_size;
265            if 3 > max_ordinal {
266                return Ok(());
267            }
268
269            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
270            // are envelope_size bytes.
271            let cur_offset: usize = (3 - 1) * envelope_size;
272
273            // Zero reserved fields.
274            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
275
276            // Safety:
277            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
278            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
279            //   envelope_size bytes, there is always sufficient room.
280            fidl::encoding::encode_in_envelope_optional::<u64, D>(
281                self.relative_address
282                    .as_ref()
283                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
284                encoder,
285                offset + cur_offset,
286                depth,
287            )?;
288
289            _prev_end_offset = cur_offset + envelope_size;
290
291            Ok(())
292        }
293    }
294
295    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ExecutableSegment {
296        #[inline(always)]
297        fn new_empty() -> Self {
298            Self::default()
299        }
300
301        unsafe fn decode(
302            &mut self,
303            decoder: &mut fidl::encoding::Decoder<'_, D>,
304            offset: usize,
305            mut depth: fidl::encoding::Depth,
306        ) -> fidl::Result<()> {
307            decoder.debug_check_bounds::<Self>(offset);
308            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
309                None => return Err(fidl::Error::NotNullable),
310                Some(len) => len,
311            };
312            // Calling decoder.out_of_line_offset(0) is not allowed.
313            if len == 0 {
314                return Ok(());
315            };
316            depth.increment()?;
317            let envelope_size = 8;
318            let bytes_len = len * envelope_size;
319            let offset = decoder.out_of_line_offset(bytes_len)?;
320            // Decode the envelope for each type.
321            let mut _next_ordinal_to_read = 0;
322            let mut next_offset = offset;
323            let end_offset = offset + bytes_len;
324            _next_ordinal_to_read += 1;
325            if next_offset >= end_offset {
326                return Ok(());
327            }
328
329            // Decode unknown envelopes for gaps in ordinals.
330            while _next_ordinal_to_read < 1 {
331                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
332                _next_ordinal_to_read += 1;
333                next_offset += envelope_size;
334            }
335
336            let next_out_of_line = decoder.next_out_of_line();
337            let handles_before = decoder.remaining_handles();
338            if let Some((inlined, num_bytes, num_handles)) =
339                fidl::encoding::decode_envelope_header(decoder, next_offset)?
340            {
341                let member_inline_size =
342                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
343                if inlined != (member_inline_size <= 4) {
344                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
345                }
346                let inner_offset;
347                let mut inner_depth = depth.clone();
348                if inlined {
349                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
350                    inner_offset = next_offset;
351                } else {
352                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
353                    inner_depth.increment()?;
354                }
355                let val_ref = self.start_address.get_or_insert_with(|| fidl::new_empty!(u64, D));
356                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
357                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
358                {
359                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
360                }
361                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
362                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
363                }
364            }
365
366            next_offset += envelope_size;
367            _next_ordinal_to_read += 1;
368            if next_offset >= end_offset {
369                return Ok(());
370            }
371
372            // Decode unknown envelopes for gaps in ordinals.
373            while _next_ordinal_to_read < 2 {
374                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
375                _next_ordinal_to_read += 1;
376                next_offset += envelope_size;
377            }
378
379            let next_out_of_line = decoder.next_out_of_line();
380            let handles_before = decoder.remaining_handles();
381            if let Some((inlined, num_bytes, num_handles)) =
382                fidl::encoding::decode_envelope_header(decoder, next_offset)?
383            {
384                let member_inline_size =
385                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
386                if inlined != (member_inline_size <= 4) {
387                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
388                }
389                let inner_offset;
390                let mut inner_depth = depth.clone();
391                if inlined {
392                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
393                    inner_offset = next_offset;
394                } else {
395                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
396                    inner_depth.increment()?;
397                }
398                let val_ref = self.size.get_or_insert_with(|| fidl::new_empty!(u64, D));
399                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
400                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
401                {
402                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
403                }
404                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
405                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
406                }
407            }
408
409            next_offset += envelope_size;
410            _next_ordinal_to_read += 1;
411            if next_offset >= end_offset {
412                return Ok(());
413            }
414
415            // Decode unknown envelopes for gaps in ordinals.
416            while _next_ordinal_to_read < 3 {
417                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
418                _next_ordinal_to_read += 1;
419                next_offset += envelope_size;
420            }
421
422            let next_out_of_line = decoder.next_out_of_line();
423            let handles_before = decoder.remaining_handles();
424            if let Some((inlined, num_bytes, num_handles)) =
425                fidl::encoding::decode_envelope_header(decoder, next_offset)?
426            {
427                let member_inline_size =
428                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
429                if inlined != (member_inline_size <= 4) {
430                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
431                }
432                let inner_offset;
433                let mut inner_depth = depth.clone();
434                if inlined {
435                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
436                    inner_offset = next_offset;
437                } else {
438                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
439                    inner_depth.increment()?;
440                }
441                let val_ref = self.relative_address.get_or_insert_with(|| fidl::new_empty!(u64, D));
442                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
443                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
444                {
445                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
446                }
447                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
448                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
449                }
450            }
451
452            next_offset += envelope_size;
453
454            // Decode the remaining unknown envelopes.
455            while next_offset < end_offset {
456                _next_ordinal_to_read += 1;
457                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
458                next_offset += envelope_size;
459            }
460
461            Ok(())
462        }
463    }
464
465    impl ModuleMap {
466        #[inline(always)]
467        fn max_ordinal_present(&self) -> u64 {
468            if let Some(_) = self.executable_segments {
469                return 2;
470            }
471            if let Some(_) = self.build_id {
472                return 1;
473            }
474            0
475        }
476    }
477
478    impl fidl::encoding::ValueTypeMarker for ModuleMap {
479        type Borrowed<'a> = &'a Self;
480        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
481            value
482        }
483    }
484
485    unsafe impl fidl::encoding::TypeMarker for ModuleMap {
486        type Owned = Self;
487
488        #[inline(always)]
489        fn inline_align(_context: fidl::encoding::Context) -> usize {
490            8
491        }
492
493        #[inline(always)]
494        fn inline_size(_context: fidl::encoding::Context) -> usize {
495            16
496        }
497    }
498
499    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ModuleMap, D>
500        for &ModuleMap
501    {
502        unsafe fn encode(
503            self,
504            encoder: &mut fidl::encoding::Encoder<'_, D>,
505            offset: usize,
506            mut depth: fidl::encoding::Depth,
507        ) -> fidl::Result<()> {
508            encoder.debug_check_bounds::<ModuleMap>(offset);
509            // Vector header
510            let max_ordinal: u64 = self.max_ordinal_present();
511            encoder.write_num(max_ordinal, offset);
512            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
513            // Calling encoder.out_of_line_offset(0) is not allowed.
514            if max_ordinal == 0 {
515                return Ok(());
516            }
517            depth.increment()?;
518            let envelope_size = 8;
519            let bytes_len = max_ordinal as usize * envelope_size;
520            #[allow(unused_variables)]
521            let offset = encoder.out_of_line_offset(bytes_len);
522            let mut _prev_end_offset: usize = 0;
523            if 1 > max_ordinal {
524                return Ok(());
525            }
526
527            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
528            // are envelope_size bytes.
529            let cur_offset: usize = (1 - 1) * envelope_size;
530
531            // Zero reserved fields.
532            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
533
534            // Safety:
535            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
536            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
537            //   envelope_size bytes, there is always sufficient room.
538            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 20>, D>(
539                self.build_id.as_ref().map(
540                    <fidl::encoding::Vector<u8, 20> as fidl::encoding::ValueTypeMarker>::borrow,
541                ),
542                encoder,
543                offset + cur_offset,
544                depth,
545            )?;
546
547            _prev_end_offset = cur_offset + envelope_size;
548            if 2 > max_ordinal {
549                return Ok(());
550            }
551
552            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
553            // are envelope_size bytes.
554            let cur_offset: usize = (2 - 1) * envelope_size;
555
556            // Zero reserved fields.
557            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
558
559            // Safety:
560            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
561            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
562            //   envelope_size bytes, there is always sufficient room.
563            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ExecutableSegment>, D>(
564            self.executable_segments.as_ref().map(<fidl::encoding::UnboundedVector<ExecutableSegment> as fidl::encoding::ValueTypeMarker>::borrow),
565            encoder, offset + cur_offset, depth
566        )?;
567
568            _prev_end_offset = cur_offset + envelope_size;
569
570            Ok(())
571        }
572    }
573
574    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ModuleMap {
575        #[inline(always)]
576        fn new_empty() -> Self {
577            Self::default()
578        }
579
580        unsafe fn decode(
581            &mut self,
582            decoder: &mut fidl::encoding::Decoder<'_, D>,
583            offset: usize,
584            mut depth: fidl::encoding::Depth,
585        ) -> fidl::Result<()> {
586            decoder.debug_check_bounds::<Self>(offset);
587            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
588                None => return Err(fidl::Error::NotNullable),
589                Some(len) => len,
590            };
591            // Calling decoder.out_of_line_offset(0) is not allowed.
592            if len == 0 {
593                return Ok(());
594            };
595            depth.increment()?;
596            let envelope_size = 8;
597            let bytes_len = len * envelope_size;
598            let offset = decoder.out_of_line_offset(bytes_len)?;
599            // Decode the envelope for each type.
600            let mut _next_ordinal_to_read = 0;
601            let mut next_offset = offset;
602            let end_offset = offset + bytes_len;
603            _next_ordinal_to_read += 1;
604            if next_offset >= end_offset {
605                return Ok(());
606            }
607
608            // Decode unknown envelopes for gaps in ordinals.
609            while _next_ordinal_to_read < 1 {
610                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
611                _next_ordinal_to_read += 1;
612                next_offset += envelope_size;
613            }
614
615            let next_out_of_line = decoder.next_out_of_line();
616            let handles_before = decoder.remaining_handles();
617            if let Some((inlined, num_bytes, num_handles)) =
618                fidl::encoding::decode_envelope_header(decoder, next_offset)?
619            {
620                let member_inline_size =
621                    <fidl::encoding::Vector<u8, 20> as fidl::encoding::TypeMarker>::inline_size(
622                        decoder.context,
623                    );
624                if inlined != (member_inline_size <= 4) {
625                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
626                }
627                let inner_offset;
628                let mut inner_depth = depth.clone();
629                if inlined {
630                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
631                    inner_offset = next_offset;
632                } else {
633                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
634                    inner_depth.increment()?;
635                }
636                let val_ref = self
637                    .build_id
638                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 20>, D));
639                fidl::decode!(fidl::encoding::Vector<u8, 20>, D, val_ref, decoder, inner_offset, inner_depth)?;
640                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
641                {
642                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
643                }
644                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
645                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
646                }
647            }
648
649            next_offset += envelope_size;
650            _next_ordinal_to_read += 1;
651            if next_offset >= end_offset {
652                return Ok(());
653            }
654
655            // Decode unknown envelopes for gaps in ordinals.
656            while _next_ordinal_to_read < 2 {
657                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
658                _next_ordinal_to_read += 1;
659                next_offset += envelope_size;
660            }
661
662            let next_out_of_line = decoder.next_out_of_line();
663            let handles_before = decoder.remaining_handles();
664            if let Some((inlined, num_bytes, num_handles)) =
665                fidl::encoding::decode_envelope_header(decoder, next_offset)?
666            {
667                let member_inline_size = <fidl::encoding::UnboundedVector<ExecutableSegment> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
668                if inlined != (member_inline_size <= 4) {
669                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
670                }
671                let inner_offset;
672                let mut inner_depth = depth.clone();
673                if inlined {
674                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
675                    inner_offset = next_offset;
676                } else {
677                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
678                    inner_depth.increment()?;
679                }
680                let val_ref = self.executable_segments.get_or_insert_with(|| {
681                    fidl::new_empty!(fidl::encoding::UnboundedVector<ExecutableSegment>, D)
682                });
683                fidl::decode!(
684                    fidl::encoding::UnboundedVector<ExecutableSegment>,
685                    D,
686                    val_ref,
687                    decoder,
688                    inner_offset,
689                    inner_depth
690                )?;
691                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
692                {
693                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
694                }
695                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
696                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
697                }
698            }
699
700            next_offset += envelope_size;
701
702            // Decode the remaining unknown envelopes.
703            while next_offset < end_offset {
704                _next_ordinal_to_read += 1;
705                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
706                next_offset += envelope_size;
707            }
708
709            Ok(())
710        }
711    }
712
713    impl RecordAllocationEvent {
714        #[inline(always)]
715        fn max_ordinal_present(&self) -> u64 {
716            if let Some(_) = self.sampling_interval_bytes {
717                return 4;
718            }
719            if let Some(_) = self.size {
720                return 3;
721            }
722            if let Some(_) = self.stack_trace {
723                return 2;
724            }
725            if let Some(_) = self.address {
726                return 1;
727            }
728            0
729        }
730    }
731
732    impl fidl::encoding::ValueTypeMarker for RecordAllocationEvent {
733        type Borrowed<'a> = &'a Self;
734        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
735            value
736        }
737    }
738
739    unsafe impl fidl::encoding::TypeMarker for RecordAllocationEvent {
740        type Owned = Self;
741
742        #[inline(always)]
743        fn inline_align(_context: fidl::encoding::Context) -> usize {
744            8
745        }
746
747        #[inline(always)]
748        fn inline_size(_context: fidl::encoding::Context) -> usize {
749            16
750        }
751    }
752
753    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<RecordAllocationEvent, D>
754        for &RecordAllocationEvent
755    {
756        unsafe fn encode(
757            self,
758            encoder: &mut fidl::encoding::Encoder<'_, D>,
759            offset: usize,
760            mut depth: fidl::encoding::Depth,
761        ) -> fidl::Result<()> {
762            encoder.debug_check_bounds::<RecordAllocationEvent>(offset);
763            // Vector header
764            let max_ordinal: u64 = self.max_ordinal_present();
765            encoder.write_num(max_ordinal, offset);
766            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
767            // Calling encoder.out_of_line_offset(0) is not allowed.
768            if max_ordinal == 0 {
769                return Ok(());
770            }
771            depth.increment()?;
772            let envelope_size = 8;
773            let bytes_len = max_ordinal as usize * envelope_size;
774            #[allow(unused_variables)]
775            let offset = encoder.out_of_line_offset(bytes_len);
776            let mut _prev_end_offset: usize = 0;
777            if 1 > max_ordinal {
778                return Ok(());
779            }
780
781            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
782            // are envelope_size bytes.
783            let cur_offset: usize = (1 - 1) * envelope_size;
784
785            // Zero reserved fields.
786            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
787
788            // Safety:
789            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
790            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
791            //   envelope_size bytes, there is always sufficient room.
792            fidl::encoding::encode_in_envelope_optional::<u64, D>(
793                self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
794                encoder,
795                offset + cur_offset,
796                depth,
797            )?;
798
799            _prev_end_offset = cur_offset + envelope_size;
800            if 2 > max_ordinal {
801                return Ok(());
802            }
803
804            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
805            // are envelope_size bytes.
806            let cur_offset: usize = (2 - 1) * envelope_size;
807
808            // Zero reserved fields.
809            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
810
811            // Safety:
812            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
813            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
814            //   envelope_size bytes, there is always sufficient room.
815            fidl::encoding::encode_in_envelope_optional::<StackTrace, D>(
816                self.stack_trace
817                    .as_ref()
818                    .map(<StackTrace as fidl::encoding::ValueTypeMarker>::borrow),
819                encoder,
820                offset + cur_offset,
821                depth,
822            )?;
823
824            _prev_end_offset = cur_offset + envelope_size;
825            if 3 > max_ordinal {
826                return Ok(());
827            }
828
829            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
830            // are envelope_size bytes.
831            let cur_offset: usize = (3 - 1) * envelope_size;
832
833            // Zero reserved fields.
834            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
835
836            // Safety:
837            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
838            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
839            //   envelope_size bytes, there is always sufficient room.
840            fidl::encoding::encode_in_envelope_optional::<u64, D>(
841                self.size.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
842                encoder,
843                offset + cur_offset,
844                depth,
845            )?;
846
847            _prev_end_offset = cur_offset + envelope_size;
848            if 4 > max_ordinal {
849                return Ok(());
850            }
851
852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
853            // are envelope_size bytes.
854            let cur_offset: usize = (4 - 1) * envelope_size;
855
856            // Zero reserved fields.
857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
858
859            // Safety:
860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
862            //   envelope_size bytes, there is always sufficient room.
863            fidl::encoding::encode_in_envelope_optional::<u64, D>(
864                self.sampling_interval_bytes
865                    .as_ref()
866                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
867                encoder,
868                offset + cur_offset,
869                depth,
870            )?;
871
872            _prev_end_offset = cur_offset + envelope_size;
873
874            Ok(())
875        }
876    }
877
878    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RecordAllocationEvent {
879        #[inline(always)]
880        fn new_empty() -> Self {
881            Self::default()
882        }
883
884        unsafe fn decode(
885            &mut self,
886            decoder: &mut fidl::encoding::Decoder<'_, D>,
887            offset: usize,
888            mut depth: fidl::encoding::Depth,
889        ) -> fidl::Result<()> {
890            decoder.debug_check_bounds::<Self>(offset);
891            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
892                None => return Err(fidl::Error::NotNullable),
893                Some(len) => len,
894            };
895            // Calling decoder.out_of_line_offset(0) is not allowed.
896            if len == 0 {
897                return Ok(());
898            };
899            depth.increment()?;
900            let envelope_size = 8;
901            let bytes_len = len * envelope_size;
902            let offset = decoder.out_of_line_offset(bytes_len)?;
903            // Decode the envelope for each type.
904            let mut _next_ordinal_to_read = 0;
905            let mut next_offset = offset;
906            let end_offset = offset + bytes_len;
907            _next_ordinal_to_read += 1;
908            if next_offset >= end_offset {
909                return Ok(());
910            }
911
912            // Decode unknown envelopes for gaps in ordinals.
913            while _next_ordinal_to_read < 1 {
914                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
915                _next_ordinal_to_read += 1;
916                next_offset += envelope_size;
917            }
918
919            let next_out_of_line = decoder.next_out_of_line();
920            let handles_before = decoder.remaining_handles();
921            if let Some((inlined, num_bytes, num_handles)) =
922                fidl::encoding::decode_envelope_header(decoder, next_offset)?
923            {
924                let member_inline_size =
925                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
926                if inlined != (member_inline_size <= 4) {
927                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
928                }
929                let inner_offset;
930                let mut inner_depth = depth.clone();
931                if inlined {
932                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
933                    inner_offset = next_offset;
934                } else {
935                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
936                    inner_depth.increment()?;
937                }
938                let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
939                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
940                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
941                {
942                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
943                }
944                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
945                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
946                }
947            }
948
949            next_offset += envelope_size;
950            _next_ordinal_to_read += 1;
951            if next_offset >= end_offset {
952                return Ok(());
953            }
954
955            // Decode unknown envelopes for gaps in ordinals.
956            while _next_ordinal_to_read < 2 {
957                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
958                _next_ordinal_to_read += 1;
959                next_offset += envelope_size;
960            }
961
962            let next_out_of_line = decoder.next_out_of_line();
963            let handles_before = decoder.remaining_handles();
964            if let Some((inlined, num_bytes, num_handles)) =
965                fidl::encoding::decode_envelope_header(decoder, next_offset)?
966            {
967                let member_inline_size =
968                    <StackTrace as fidl::encoding::TypeMarker>::inline_size(decoder.context);
969                if inlined != (member_inline_size <= 4) {
970                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
971                }
972                let inner_offset;
973                let mut inner_depth = depth.clone();
974                if inlined {
975                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
976                    inner_offset = next_offset;
977                } else {
978                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
979                    inner_depth.increment()?;
980                }
981                let val_ref =
982                    self.stack_trace.get_or_insert_with(|| fidl::new_empty!(StackTrace, D));
983                fidl::decode!(StackTrace, D, val_ref, decoder, inner_offset, inner_depth)?;
984                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
985                {
986                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
987                }
988                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
989                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
990                }
991            }
992
993            next_offset += envelope_size;
994            _next_ordinal_to_read += 1;
995            if next_offset >= end_offset {
996                return Ok(());
997            }
998
999            // Decode unknown envelopes for gaps in ordinals.
1000            while _next_ordinal_to_read < 3 {
1001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1002                _next_ordinal_to_read += 1;
1003                next_offset += envelope_size;
1004            }
1005
1006            let next_out_of_line = decoder.next_out_of_line();
1007            let handles_before = decoder.remaining_handles();
1008            if let Some((inlined, num_bytes, num_handles)) =
1009                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1010            {
1011                let member_inline_size =
1012                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1013                if inlined != (member_inline_size <= 4) {
1014                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1015                }
1016                let inner_offset;
1017                let mut inner_depth = depth.clone();
1018                if inlined {
1019                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1020                    inner_offset = next_offset;
1021                } else {
1022                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1023                    inner_depth.increment()?;
1024                }
1025                let val_ref = self.size.get_or_insert_with(|| fidl::new_empty!(u64, D));
1026                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1027                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1028                {
1029                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1030                }
1031                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1032                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1033                }
1034            }
1035
1036            next_offset += envelope_size;
1037            _next_ordinal_to_read += 1;
1038            if next_offset >= end_offset {
1039                return Ok(());
1040            }
1041
1042            // Decode unknown envelopes for gaps in ordinals.
1043            while _next_ordinal_to_read < 4 {
1044                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1045                _next_ordinal_to_read += 1;
1046                next_offset += envelope_size;
1047            }
1048
1049            let next_out_of_line = decoder.next_out_of_line();
1050            let handles_before = decoder.remaining_handles();
1051            if let Some((inlined, num_bytes, num_handles)) =
1052                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1053            {
1054                let member_inline_size =
1055                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1056                if inlined != (member_inline_size <= 4) {
1057                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1058                }
1059                let inner_offset;
1060                let mut inner_depth = depth.clone();
1061                if inlined {
1062                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1063                    inner_offset = next_offset;
1064                } else {
1065                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1066                    inner_depth.increment()?;
1067                }
1068                let val_ref =
1069                    self.sampling_interval_bytes.get_or_insert_with(|| fidl::new_empty!(u64, D));
1070                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1071                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1072                {
1073                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1074                }
1075                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1076                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1077                }
1078            }
1079
1080            next_offset += envelope_size;
1081
1082            // Decode the remaining unknown envelopes.
1083            while next_offset < end_offset {
1084                _next_ordinal_to_read += 1;
1085                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1086                next_offset += envelope_size;
1087            }
1088
1089            Ok(())
1090        }
1091    }
1092
1093    impl RecordDeallocationEvent {
1094        #[inline(always)]
1095        fn max_ordinal_present(&self) -> u64 {
1096            if let Some(_) = self.stack_trace {
1097                return 2;
1098            }
1099            if let Some(_) = self.address {
1100                return 1;
1101            }
1102            0
1103        }
1104    }
1105
1106    impl fidl::encoding::ValueTypeMarker for RecordDeallocationEvent {
1107        type Borrowed<'a> = &'a Self;
1108        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1109            value
1110        }
1111    }
1112
1113    unsafe impl fidl::encoding::TypeMarker for RecordDeallocationEvent {
1114        type Owned = Self;
1115
1116        #[inline(always)]
1117        fn inline_align(_context: fidl::encoding::Context) -> usize {
1118            8
1119        }
1120
1121        #[inline(always)]
1122        fn inline_size(_context: fidl::encoding::Context) -> usize {
1123            16
1124        }
1125    }
1126
1127    unsafe impl<D: fidl::encoding::ResourceDialect>
1128        fidl::encoding::Encode<RecordDeallocationEvent, D> for &RecordDeallocationEvent
1129    {
1130        unsafe fn encode(
1131            self,
1132            encoder: &mut fidl::encoding::Encoder<'_, D>,
1133            offset: usize,
1134            mut depth: fidl::encoding::Depth,
1135        ) -> fidl::Result<()> {
1136            encoder.debug_check_bounds::<RecordDeallocationEvent>(offset);
1137            // Vector header
1138            let max_ordinal: u64 = self.max_ordinal_present();
1139            encoder.write_num(max_ordinal, offset);
1140            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1141            // Calling encoder.out_of_line_offset(0) is not allowed.
1142            if max_ordinal == 0 {
1143                return Ok(());
1144            }
1145            depth.increment()?;
1146            let envelope_size = 8;
1147            let bytes_len = max_ordinal as usize * envelope_size;
1148            #[allow(unused_variables)]
1149            let offset = encoder.out_of_line_offset(bytes_len);
1150            let mut _prev_end_offset: usize = 0;
1151            if 1 > max_ordinal {
1152                return Ok(());
1153            }
1154
1155            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1156            // are envelope_size bytes.
1157            let cur_offset: usize = (1 - 1) * envelope_size;
1158
1159            // Zero reserved fields.
1160            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1161
1162            // Safety:
1163            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1164            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1165            //   envelope_size bytes, there is always sufficient room.
1166            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1167                self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1168                encoder,
1169                offset + cur_offset,
1170                depth,
1171            )?;
1172
1173            _prev_end_offset = cur_offset + envelope_size;
1174            if 2 > max_ordinal {
1175                return Ok(());
1176            }
1177
1178            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1179            // are envelope_size bytes.
1180            let cur_offset: usize = (2 - 1) * envelope_size;
1181
1182            // Zero reserved fields.
1183            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1184
1185            // Safety:
1186            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1187            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1188            //   envelope_size bytes, there is always sufficient room.
1189            fidl::encoding::encode_in_envelope_optional::<StackTrace, D>(
1190                self.stack_trace
1191                    .as_ref()
1192                    .map(<StackTrace as fidl::encoding::ValueTypeMarker>::borrow),
1193                encoder,
1194                offset + cur_offset,
1195                depth,
1196            )?;
1197
1198            _prev_end_offset = cur_offset + envelope_size;
1199
1200            Ok(())
1201        }
1202    }
1203
1204    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1205        for RecordDeallocationEvent
1206    {
1207        #[inline(always)]
1208        fn new_empty() -> Self {
1209            Self::default()
1210        }
1211
1212        unsafe fn decode(
1213            &mut self,
1214            decoder: &mut fidl::encoding::Decoder<'_, D>,
1215            offset: usize,
1216            mut depth: fidl::encoding::Depth,
1217        ) -> fidl::Result<()> {
1218            decoder.debug_check_bounds::<Self>(offset);
1219            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1220                None => return Err(fidl::Error::NotNullable),
1221                Some(len) => len,
1222            };
1223            // Calling decoder.out_of_line_offset(0) is not allowed.
1224            if len == 0 {
1225                return Ok(());
1226            };
1227            depth.increment()?;
1228            let envelope_size = 8;
1229            let bytes_len = len * envelope_size;
1230            let offset = decoder.out_of_line_offset(bytes_len)?;
1231            // Decode the envelope for each type.
1232            let mut _next_ordinal_to_read = 0;
1233            let mut next_offset = offset;
1234            let end_offset = offset + bytes_len;
1235            _next_ordinal_to_read += 1;
1236            if next_offset >= end_offset {
1237                return Ok(());
1238            }
1239
1240            // Decode unknown envelopes for gaps in ordinals.
1241            while _next_ordinal_to_read < 1 {
1242                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1243                _next_ordinal_to_read += 1;
1244                next_offset += envelope_size;
1245            }
1246
1247            let next_out_of_line = decoder.next_out_of_line();
1248            let handles_before = decoder.remaining_handles();
1249            if let Some((inlined, num_bytes, num_handles)) =
1250                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1251            {
1252                let member_inline_size =
1253                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1254                if inlined != (member_inline_size <= 4) {
1255                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1256                }
1257                let inner_offset;
1258                let mut inner_depth = depth.clone();
1259                if inlined {
1260                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1261                    inner_offset = next_offset;
1262                } else {
1263                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1264                    inner_depth.increment()?;
1265                }
1266                let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
1267                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1268                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1269                {
1270                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1271                }
1272                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1273                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1274                }
1275            }
1276
1277            next_offset += envelope_size;
1278            _next_ordinal_to_read += 1;
1279            if next_offset >= end_offset {
1280                return Ok(());
1281            }
1282
1283            // Decode unknown envelopes for gaps in ordinals.
1284            while _next_ordinal_to_read < 2 {
1285                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1286                _next_ordinal_to_read += 1;
1287                next_offset += envelope_size;
1288            }
1289
1290            let next_out_of_line = decoder.next_out_of_line();
1291            let handles_before = decoder.remaining_handles();
1292            if let Some((inlined, num_bytes, num_handles)) =
1293                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1294            {
1295                let member_inline_size =
1296                    <StackTrace as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1297                if inlined != (member_inline_size <= 4) {
1298                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1299                }
1300                let inner_offset;
1301                let mut inner_depth = depth.clone();
1302                if inlined {
1303                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1304                    inner_offset = next_offset;
1305                } else {
1306                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1307                    inner_depth.increment()?;
1308                }
1309                let val_ref =
1310                    self.stack_trace.get_or_insert_with(|| fidl::new_empty!(StackTrace, D));
1311                fidl::decode!(StackTrace, D, val_ref, decoder, inner_offset, inner_depth)?;
1312                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1313                {
1314                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1315                }
1316                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1317                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1318                }
1319            }
1320
1321            next_offset += envelope_size;
1322
1323            // Decode the remaining unknown envelopes.
1324            while next_offset < end_offset {
1325                _next_ordinal_to_read += 1;
1326                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1327                next_offset += envelope_size;
1328            }
1329
1330            Ok(())
1331        }
1332    }
1333
1334    impl SamplerSetProcessInfoRequest {
1335        #[inline(always)]
1336        fn max_ordinal_present(&self) -> u64 {
1337            if let Some(_) = self.module_map {
1338                return 2;
1339            }
1340            if let Some(_) = self.process_name {
1341                return 1;
1342            }
1343            0
1344        }
1345    }
1346
1347    impl fidl::encoding::ValueTypeMarker for SamplerSetProcessInfoRequest {
1348        type Borrowed<'a> = &'a Self;
1349        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1350            value
1351        }
1352    }
1353
1354    unsafe impl fidl::encoding::TypeMarker for SamplerSetProcessInfoRequest {
1355        type Owned = Self;
1356
1357        #[inline(always)]
1358        fn inline_align(_context: fidl::encoding::Context) -> usize {
1359            8
1360        }
1361
1362        #[inline(always)]
1363        fn inline_size(_context: fidl::encoding::Context) -> usize {
1364            16
1365        }
1366    }
1367
1368    unsafe impl<D: fidl::encoding::ResourceDialect>
1369        fidl::encoding::Encode<SamplerSetProcessInfoRequest, D> for &SamplerSetProcessInfoRequest
1370    {
1371        unsafe fn encode(
1372            self,
1373            encoder: &mut fidl::encoding::Encoder<'_, D>,
1374            offset: usize,
1375            mut depth: fidl::encoding::Depth,
1376        ) -> fidl::Result<()> {
1377            encoder.debug_check_bounds::<SamplerSetProcessInfoRequest>(offset);
1378            // Vector header
1379            let max_ordinal: u64 = self.max_ordinal_present();
1380            encoder.write_num(max_ordinal, offset);
1381            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1382            // Calling encoder.out_of_line_offset(0) is not allowed.
1383            if max_ordinal == 0 {
1384                return Ok(());
1385            }
1386            depth.increment()?;
1387            let envelope_size = 8;
1388            let bytes_len = max_ordinal as usize * envelope_size;
1389            #[allow(unused_variables)]
1390            let offset = encoder.out_of_line_offset(bytes_len);
1391            let mut _prev_end_offset: usize = 0;
1392            if 1 > max_ordinal {
1393                return Ok(());
1394            }
1395
1396            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1397            // are envelope_size bytes.
1398            let cur_offset: usize = (1 - 1) * envelope_size;
1399
1400            // Zero reserved fields.
1401            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1402
1403            // Safety:
1404            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1405            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1406            //   envelope_size bytes, there is always sufficient room.
1407            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<32>, D>(
1408                self.process_name.as_ref().map(
1409                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow,
1410                ),
1411                encoder,
1412                offset + cur_offset,
1413                depth,
1414            )?;
1415
1416            _prev_end_offset = cur_offset + envelope_size;
1417            if 2 > max_ordinal {
1418                return Ok(());
1419            }
1420
1421            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1422            // are envelope_size bytes.
1423            let cur_offset: usize = (2 - 1) * envelope_size;
1424
1425            // Zero reserved fields.
1426            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1427
1428            // Safety:
1429            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1430            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1431            //   envelope_size bytes, there is always sufficient room.
1432            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ModuleMap>, D>(
1433            self.module_map.as_ref().map(<fidl::encoding::UnboundedVector<ModuleMap> as fidl::encoding::ValueTypeMarker>::borrow),
1434            encoder, offset + cur_offset, depth
1435        )?;
1436
1437            _prev_end_offset = cur_offset + envelope_size;
1438
1439            Ok(())
1440        }
1441    }
1442
1443    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1444        for SamplerSetProcessInfoRequest
1445    {
1446        #[inline(always)]
1447        fn new_empty() -> Self {
1448            Self::default()
1449        }
1450
1451        unsafe fn decode(
1452            &mut self,
1453            decoder: &mut fidl::encoding::Decoder<'_, D>,
1454            offset: usize,
1455            mut depth: fidl::encoding::Depth,
1456        ) -> fidl::Result<()> {
1457            decoder.debug_check_bounds::<Self>(offset);
1458            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1459                None => return Err(fidl::Error::NotNullable),
1460                Some(len) => len,
1461            };
1462            // Calling decoder.out_of_line_offset(0) is not allowed.
1463            if len == 0 {
1464                return Ok(());
1465            };
1466            depth.increment()?;
1467            let envelope_size = 8;
1468            let bytes_len = len * envelope_size;
1469            let offset = decoder.out_of_line_offset(bytes_len)?;
1470            // Decode the envelope for each type.
1471            let mut _next_ordinal_to_read = 0;
1472            let mut next_offset = offset;
1473            let end_offset = offset + bytes_len;
1474            _next_ordinal_to_read += 1;
1475            if next_offset >= end_offset {
1476                return Ok(());
1477            }
1478
1479            // Decode unknown envelopes for gaps in ordinals.
1480            while _next_ordinal_to_read < 1 {
1481                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1482                _next_ordinal_to_read += 1;
1483                next_offset += envelope_size;
1484            }
1485
1486            let next_out_of_line = decoder.next_out_of_line();
1487            let handles_before = decoder.remaining_handles();
1488            if let Some((inlined, num_bytes, num_handles)) =
1489                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1490            {
1491                let member_inline_size =
1492                    <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(
1493                        decoder.context,
1494                    );
1495                if inlined != (member_inline_size <= 4) {
1496                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1497                }
1498                let inner_offset;
1499                let mut inner_depth = depth.clone();
1500                if inlined {
1501                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1502                    inner_offset = next_offset;
1503                } else {
1504                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1505                    inner_depth.increment()?;
1506                }
1507                let val_ref = self
1508                    .process_name
1509                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<32>, D));
1510                fidl::decode!(
1511                    fidl::encoding::BoundedString<32>,
1512                    D,
1513                    val_ref,
1514                    decoder,
1515                    inner_offset,
1516                    inner_depth
1517                )?;
1518                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1519                {
1520                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1521                }
1522                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1523                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1524                }
1525            }
1526
1527            next_offset += envelope_size;
1528            _next_ordinal_to_read += 1;
1529            if next_offset >= end_offset {
1530                return Ok(());
1531            }
1532
1533            // Decode unknown envelopes for gaps in ordinals.
1534            while _next_ordinal_to_read < 2 {
1535                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1536                _next_ordinal_to_read += 1;
1537                next_offset += envelope_size;
1538            }
1539
1540            let next_out_of_line = decoder.next_out_of_line();
1541            let handles_before = decoder.remaining_handles();
1542            if let Some((inlined, num_bytes, num_handles)) =
1543                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1544            {
1545                let member_inline_size = <fidl::encoding::UnboundedVector<ModuleMap> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1546                if inlined != (member_inline_size <= 4) {
1547                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1548                }
1549                let inner_offset;
1550                let mut inner_depth = depth.clone();
1551                if inlined {
1552                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1553                    inner_offset = next_offset;
1554                } else {
1555                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1556                    inner_depth.increment()?;
1557                }
1558                let val_ref = self.module_map.get_or_insert_with(|| {
1559                    fidl::new_empty!(fidl::encoding::UnboundedVector<ModuleMap>, D)
1560                });
1561                fidl::decode!(
1562                    fidl::encoding::UnboundedVector<ModuleMap>,
1563                    D,
1564                    val_ref,
1565                    decoder,
1566                    inner_offset,
1567                    inner_depth
1568                )?;
1569                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1570                {
1571                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1572                }
1573                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1574                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1575                }
1576            }
1577
1578            next_offset += envelope_size;
1579
1580            // Decode the remaining unknown envelopes.
1581            while next_offset < end_offset {
1582                _next_ordinal_to_read += 1;
1583                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1584                next_offset += envelope_size;
1585            }
1586
1587            Ok(())
1588        }
1589    }
1590
1591    impl StackTrace {
1592        #[inline(always)]
1593        fn max_ordinal_present(&self) -> u64 {
1594            if let Some(_) = self.stack_frames {
1595                return 1;
1596            }
1597            0
1598        }
1599    }
1600
1601    impl fidl::encoding::ValueTypeMarker for StackTrace {
1602        type Borrowed<'a> = &'a Self;
1603        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1604            value
1605        }
1606    }
1607
1608    unsafe impl fidl::encoding::TypeMarker for StackTrace {
1609        type Owned = Self;
1610
1611        #[inline(always)]
1612        fn inline_align(_context: fidl::encoding::Context) -> usize {
1613            8
1614        }
1615
1616        #[inline(always)]
1617        fn inline_size(_context: fidl::encoding::Context) -> usize {
1618            16
1619        }
1620    }
1621
1622    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<StackTrace, D>
1623        for &StackTrace
1624    {
1625        unsafe fn encode(
1626            self,
1627            encoder: &mut fidl::encoding::Encoder<'_, D>,
1628            offset: usize,
1629            mut depth: fidl::encoding::Depth,
1630        ) -> fidl::Result<()> {
1631            encoder.debug_check_bounds::<StackTrace>(offset);
1632            // Vector header
1633            let max_ordinal: u64 = self.max_ordinal_present();
1634            encoder.write_num(max_ordinal, offset);
1635            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1636            // Calling encoder.out_of_line_offset(0) is not allowed.
1637            if max_ordinal == 0 {
1638                return Ok(());
1639            }
1640            depth.increment()?;
1641            let envelope_size = 8;
1642            let bytes_len = max_ordinal as usize * envelope_size;
1643            #[allow(unused_variables)]
1644            let offset = encoder.out_of_line_offset(bytes_len);
1645            let mut _prev_end_offset: usize = 0;
1646            if 1 > max_ordinal {
1647                return Ok(());
1648            }
1649
1650            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1651            // are envelope_size bytes.
1652            let cur_offset: usize = (1 - 1) * envelope_size;
1653
1654            // Zero reserved fields.
1655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1656
1657            // Safety:
1658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1660            //   envelope_size bytes, there is always sufficient room.
1661            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
1662            self.stack_frames.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
1663            encoder, offset + cur_offset, depth
1664        )?;
1665
1666            _prev_end_offset = cur_offset + envelope_size;
1667
1668            Ok(())
1669        }
1670    }
1671
1672    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for StackTrace {
1673        #[inline(always)]
1674        fn new_empty() -> Self {
1675            Self::default()
1676        }
1677
1678        unsafe fn decode(
1679            &mut self,
1680            decoder: &mut fidl::encoding::Decoder<'_, D>,
1681            offset: usize,
1682            mut depth: fidl::encoding::Depth,
1683        ) -> fidl::Result<()> {
1684            decoder.debug_check_bounds::<Self>(offset);
1685            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1686                None => return Err(fidl::Error::NotNullable),
1687                Some(len) => len,
1688            };
1689            // Calling decoder.out_of_line_offset(0) is not allowed.
1690            if len == 0 {
1691                return Ok(());
1692            };
1693            depth.increment()?;
1694            let envelope_size = 8;
1695            let bytes_len = len * envelope_size;
1696            let offset = decoder.out_of_line_offset(bytes_len)?;
1697            // Decode the envelope for each type.
1698            let mut _next_ordinal_to_read = 0;
1699            let mut next_offset = offset;
1700            let end_offset = offset + bytes_len;
1701            _next_ordinal_to_read += 1;
1702            if next_offset >= end_offset {
1703                return Ok(());
1704            }
1705
1706            // Decode unknown envelopes for gaps in ordinals.
1707            while _next_ordinal_to_read < 1 {
1708                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1709                _next_ordinal_to_read += 1;
1710                next_offset += envelope_size;
1711            }
1712
1713            let next_out_of_line = decoder.next_out_of_line();
1714            let handles_before = decoder.remaining_handles();
1715            if let Some((inlined, num_bytes, num_handles)) =
1716                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1717            {
1718                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1719                if inlined != (member_inline_size <= 4) {
1720                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1721                }
1722                let inner_offset;
1723                let mut inner_depth = depth.clone();
1724                if inlined {
1725                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1726                    inner_offset = next_offset;
1727                } else {
1728                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1729                    inner_depth.increment()?;
1730                }
1731                let val_ref = self.stack_frames.get_or_insert_with(|| {
1732                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
1733                });
1734                fidl::decode!(
1735                    fidl::encoding::UnboundedVector<u64>,
1736                    D,
1737                    val_ref,
1738                    decoder,
1739                    inner_offset,
1740                    inner_depth
1741                )?;
1742                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1743                {
1744                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1745                }
1746                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1747                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1748                }
1749            }
1750
1751            next_offset += envelope_size;
1752
1753            // Decode the remaining unknown envelopes.
1754            while next_offset < end_offset {
1755                _next_ordinal_to_read += 1;
1756                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1757                next_offset += envelope_size;
1758            }
1759
1760            Ok(())
1761        }
1762    }
1763
1764    impl fidl::encoding::ValueTypeMarker for SamplerDatagram {
1765        type Borrowed<'a> = &'a Self;
1766        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1767            value
1768        }
1769    }
1770
1771    unsafe impl fidl::encoding::TypeMarker for SamplerDatagram {
1772        type Owned = Self;
1773
1774        #[inline(always)]
1775        fn inline_align(_context: fidl::encoding::Context) -> usize {
1776            8
1777        }
1778
1779        #[inline(always)]
1780        fn inline_size(_context: fidl::encoding::Context) -> usize {
1781            16
1782        }
1783    }
1784
1785    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<SamplerDatagram, D>
1786        for &SamplerDatagram
1787    {
1788        #[inline]
1789        unsafe fn encode(
1790            self,
1791            encoder: &mut fidl::encoding::Encoder<'_, D>,
1792            offset: usize,
1793            _depth: fidl::encoding::Depth,
1794        ) -> fidl::Result<()> {
1795            encoder.debug_check_bounds::<SamplerDatagram>(offset);
1796            encoder.write_num::<u64>(self.ordinal(), offset);
1797            match self {
1798                SamplerDatagram::RecordAllocation(ref val) => {
1799                    fidl::encoding::encode_in_envelope::<RecordAllocationEvent, D>(
1800                        <RecordAllocationEvent as fidl::encoding::ValueTypeMarker>::borrow(val),
1801                        encoder,
1802                        offset + 8,
1803                        _depth,
1804                    )
1805                }
1806                SamplerDatagram::RecordDeallocation(ref val) => {
1807                    fidl::encoding::encode_in_envelope::<RecordDeallocationEvent, D>(
1808                        <RecordDeallocationEvent as fidl::encoding::ValueTypeMarker>::borrow(val),
1809                        encoder,
1810                        offset + 8,
1811                        _depth,
1812                    )
1813                }
1814                SamplerDatagram::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
1815            }
1816        }
1817    }
1818
1819    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for SamplerDatagram {
1820        #[inline(always)]
1821        fn new_empty() -> Self {
1822            Self::__SourceBreaking { unknown_ordinal: 0 }
1823        }
1824
1825        #[inline]
1826        unsafe fn decode(
1827            &mut self,
1828            decoder: &mut fidl::encoding::Decoder<'_, D>,
1829            offset: usize,
1830            mut depth: fidl::encoding::Depth,
1831        ) -> fidl::Result<()> {
1832            decoder.debug_check_bounds::<Self>(offset);
1833            #[allow(unused_variables)]
1834            let next_out_of_line = decoder.next_out_of_line();
1835            let handles_before = decoder.remaining_handles();
1836            let (ordinal, inlined, num_bytes, num_handles) =
1837                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
1838
1839            let member_inline_size = match ordinal {
1840                1 => <RecordAllocationEvent as fidl::encoding::TypeMarker>::inline_size(
1841                    decoder.context,
1842                ),
1843                2 => <RecordDeallocationEvent as fidl::encoding::TypeMarker>::inline_size(
1844                    decoder.context,
1845                ),
1846                0 => return Err(fidl::Error::UnknownUnionTag),
1847                _ => num_bytes as usize,
1848            };
1849
1850            if inlined != (member_inline_size <= 4) {
1851                return Err(fidl::Error::InvalidInlineBitInEnvelope);
1852            }
1853            let _inner_offset;
1854            if inlined {
1855                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
1856                _inner_offset = offset + 8;
1857            } else {
1858                depth.increment()?;
1859                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1860            }
1861            match ordinal {
1862                1 => {
1863                    #[allow(irrefutable_let_patterns)]
1864                    if let SamplerDatagram::RecordAllocation(_) = self {
1865                        // Do nothing, read the value into the object
1866                    } else {
1867                        // Initialize `self` to the right variant
1868                        *self = SamplerDatagram::RecordAllocation(fidl::new_empty!(
1869                            RecordAllocationEvent,
1870                            D
1871                        ));
1872                    }
1873                    #[allow(irrefutable_let_patterns)]
1874                    if let SamplerDatagram::RecordAllocation(ref mut val) = self {
1875                        fidl::decode!(
1876                            RecordAllocationEvent,
1877                            D,
1878                            val,
1879                            decoder,
1880                            _inner_offset,
1881                            depth
1882                        )?;
1883                    } else {
1884                        unreachable!()
1885                    }
1886                }
1887                2 => {
1888                    #[allow(irrefutable_let_patterns)]
1889                    if let SamplerDatagram::RecordDeallocation(_) = self {
1890                        // Do nothing, read the value into the object
1891                    } else {
1892                        // Initialize `self` to the right variant
1893                        *self = SamplerDatagram::RecordDeallocation(fidl::new_empty!(
1894                            RecordDeallocationEvent,
1895                            D
1896                        ));
1897                    }
1898                    #[allow(irrefutable_let_patterns)]
1899                    if let SamplerDatagram::RecordDeallocation(ref mut val) = self {
1900                        fidl::decode!(
1901                            RecordDeallocationEvent,
1902                            D,
1903                            val,
1904                            decoder,
1905                            _inner_offset,
1906                            depth
1907                        )?;
1908                    } else {
1909                        unreachable!()
1910                    }
1911                }
1912                #[allow(deprecated)]
1913                ordinal => {
1914                    for _ in 0..num_handles {
1915                        decoder.drop_next_handle()?;
1916                    }
1917                    *self = SamplerDatagram::__SourceBreaking { unknown_ordinal: ordinal };
1918                }
1919            }
1920            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
1921                return Err(fidl::Error::InvalidNumBytesInEnvelope);
1922            }
1923            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1924                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1925            }
1926            Ok(())
1927        }
1928    }
1929}