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