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
11#[derive(Clone, Debug, PartialEq)]
12pub struct ControllerGenerateAggregatedObservationsRequest {
13 pub day_index: u32,
14 pub report_specs: Vec<ReportSpec>,
15}
16
17impl fidl::Persistable for ControllerGenerateAggregatedObservationsRequest {}
18
19#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
20pub struct ControllerGenerateAggregatedObservationsResponse {
21 pub num_obs: Vec<u64>,
22}
23
24impl fidl::Persistable for ControllerGenerateAggregatedObservationsResponse {}
25
26#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
27pub struct ControllerRequestSendSoonResponse {
28 pub success: bool,
29}
30
31impl fidl::Persistable for ControllerRequestSendSoonResponse {}
32
33#[derive(Clone, Debug, Default, PartialEq)]
35pub struct ReportSpec {
36 pub customer_id: Option<u32>,
38 pub project_id: Option<u32>,
40 pub metric_id: Option<u32>,
42 pub report_id: Option<u32>,
44 #[doc(hidden)]
45 pub __source_breaking: fidl::marker::SourceBreaking,
46}
47
48impl fidl::Persistable for ReportSpec {}
49
50pub mod aggregate_and_upload_ordinals {
51 pub const AGGREGATE_AND_UPLOAD_METRIC_EVENTS: u64 = 0x48db82fb20a16550;
52}
53
54pub mod controller_ordinals {
55 pub const REQUEST_SEND_SOON: u64 = 0x554e66bab8f72e3d;
56 pub const GENERATE_AGGREGATED_OBSERVATIONS: u64 = 0x79e058c9497f1ab1;
57 pub const LISTEN_FOR_INITIALIZED: u64 = 0x3454fbf05fcf10ef;
58}
59
60mod internal {
61 use super::*;
62
63 impl fidl::encoding::ValueTypeMarker for ControllerGenerateAggregatedObservationsRequest {
64 type Borrowed<'a> = &'a Self;
65 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
66 value
67 }
68 }
69
70 unsafe impl fidl::encoding::TypeMarker for ControllerGenerateAggregatedObservationsRequest {
71 type Owned = Self;
72
73 #[inline(always)]
74 fn inline_align(_context: fidl::encoding::Context) -> usize {
75 8
76 }
77
78 #[inline(always)]
79 fn inline_size(_context: fidl::encoding::Context) -> usize {
80 24
81 }
82 }
83
84 unsafe impl<D: fidl::encoding::ResourceDialect>
85 fidl::encoding::Encode<ControllerGenerateAggregatedObservationsRequest, D>
86 for &ControllerGenerateAggregatedObservationsRequest
87 {
88 #[inline]
89 unsafe fn encode(
90 self,
91 encoder: &mut fidl::encoding::Encoder<'_, D>,
92 offset: usize,
93 _depth: fidl::encoding::Depth,
94 ) -> fidl::Result<()> {
95 encoder.debug_check_bounds::<ControllerGenerateAggregatedObservationsRequest>(offset);
96 fidl::encoding::Encode::<ControllerGenerateAggregatedObservationsRequest, D>::encode(
98 (
99 <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.day_index),
100 <fidl::encoding::UnboundedVector<ReportSpec> as fidl::encoding::ValueTypeMarker>::borrow(&self.report_specs),
101 ),
102 encoder, offset, _depth
103 )
104 }
105 }
106 unsafe impl<
107 D: fidl::encoding::ResourceDialect,
108 T0: fidl::encoding::Encode<u32, D>,
109 T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<ReportSpec>, D>,
110 > fidl::encoding::Encode<ControllerGenerateAggregatedObservationsRequest, D> for (T0, T1)
111 {
112 #[inline]
113 unsafe fn encode(
114 self,
115 encoder: &mut fidl::encoding::Encoder<'_, D>,
116 offset: usize,
117 depth: fidl::encoding::Depth,
118 ) -> fidl::Result<()> {
119 encoder.debug_check_bounds::<ControllerGenerateAggregatedObservationsRequest>(offset);
120 unsafe {
123 let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
124 (ptr as *mut u64).write_unaligned(0);
125 }
126 self.0.encode(encoder, offset + 0, depth)?;
128 self.1.encode(encoder, offset + 8, depth)?;
129 Ok(())
130 }
131 }
132
133 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
134 for ControllerGenerateAggregatedObservationsRequest
135 {
136 #[inline(always)]
137 fn new_empty() -> Self {
138 Self {
139 day_index: fidl::new_empty!(u32, D),
140 report_specs: fidl::new_empty!(fidl::encoding::UnboundedVector<ReportSpec>, D),
141 }
142 }
143
144 #[inline]
145 unsafe fn decode(
146 &mut self,
147 decoder: &mut fidl::encoding::Decoder<'_, D>,
148 offset: usize,
149 _depth: fidl::encoding::Depth,
150 ) -> fidl::Result<()> {
151 decoder.debug_check_bounds::<Self>(offset);
152 let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
154 let padval = unsafe { (ptr as *const u64).read_unaligned() };
155 let mask = 0xffffffff00000000u64;
156 let maskedval = padval & mask;
157 if maskedval != 0 {
158 return Err(fidl::Error::NonZeroPadding {
159 padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
160 });
161 }
162 fidl::decode!(u32, D, &mut self.day_index, decoder, offset + 0, _depth)?;
163 fidl::decode!(
164 fidl::encoding::UnboundedVector<ReportSpec>,
165 D,
166 &mut self.report_specs,
167 decoder,
168 offset + 8,
169 _depth
170 )?;
171 Ok(())
172 }
173 }
174
175 impl fidl::encoding::ValueTypeMarker for ControllerGenerateAggregatedObservationsResponse {
176 type Borrowed<'a> = &'a Self;
177 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
178 value
179 }
180 }
181
182 unsafe impl fidl::encoding::TypeMarker for ControllerGenerateAggregatedObservationsResponse {
183 type Owned = Self;
184
185 #[inline(always)]
186 fn inline_align(_context: fidl::encoding::Context) -> usize {
187 8
188 }
189
190 #[inline(always)]
191 fn inline_size(_context: fidl::encoding::Context) -> usize {
192 16
193 }
194 }
195
196 unsafe impl<D: fidl::encoding::ResourceDialect>
197 fidl::encoding::Encode<ControllerGenerateAggregatedObservationsResponse, D>
198 for &ControllerGenerateAggregatedObservationsResponse
199 {
200 #[inline]
201 unsafe fn encode(
202 self,
203 encoder: &mut fidl::encoding::Encoder<'_, D>,
204 offset: usize,
205 _depth: fidl::encoding::Depth,
206 ) -> fidl::Result<()> {
207 encoder.debug_check_bounds::<ControllerGenerateAggregatedObservationsResponse>(offset);
208 fidl::encoding::Encode::<ControllerGenerateAggregatedObservationsResponse, D>::encode(
210 (
211 <fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow(&self.num_obs),
212 ),
213 encoder, offset, _depth
214 )
215 }
216 }
217 unsafe impl<
218 D: fidl::encoding::ResourceDialect,
219 T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u64>, D>,
220 > fidl::encoding::Encode<ControllerGenerateAggregatedObservationsResponse, D> for (T0,)
221 {
222 #[inline]
223 unsafe fn encode(
224 self,
225 encoder: &mut fidl::encoding::Encoder<'_, D>,
226 offset: usize,
227 depth: fidl::encoding::Depth,
228 ) -> fidl::Result<()> {
229 encoder.debug_check_bounds::<ControllerGenerateAggregatedObservationsResponse>(offset);
230 self.0.encode(encoder, offset + 0, depth)?;
234 Ok(())
235 }
236 }
237
238 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
239 for ControllerGenerateAggregatedObservationsResponse
240 {
241 #[inline(always)]
242 fn new_empty() -> Self {
243 Self { num_obs: fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D) }
244 }
245
246 #[inline]
247 unsafe fn decode(
248 &mut self,
249 decoder: &mut fidl::encoding::Decoder<'_, D>,
250 offset: usize,
251 _depth: fidl::encoding::Depth,
252 ) -> fidl::Result<()> {
253 decoder.debug_check_bounds::<Self>(offset);
254 fidl::decode!(
256 fidl::encoding::UnboundedVector<u64>,
257 D,
258 &mut self.num_obs,
259 decoder,
260 offset + 0,
261 _depth
262 )?;
263 Ok(())
264 }
265 }
266
267 impl fidl::encoding::ValueTypeMarker for ControllerRequestSendSoonResponse {
268 type Borrowed<'a> = &'a Self;
269 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
270 value
271 }
272 }
273
274 unsafe impl fidl::encoding::TypeMarker for ControllerRequestSendSoonResponse {
275 type Owned = Self;
276
277 #[inline(always)]
278 fn inline_align(_context: fidl::encoding::Context) -> usize {
279 1
280 }
281
282 #[inline(always)]
283 fn inline_size(_context: fidl::encoding::Context) -> usize {
284 1
285 }
286 }
287
288 unsafe impl<D: fidl::encoding::ResourceDialect>
289 fidl::encoding::Encode<ControllerRequestSendSoonResponse, D>
290 for &ControllerRequestSendSoonResponse
291 {
292 #[inline]
293 unsafe fn encode(
294 self,
295 encoder: &mut fidl::encoding::Encoder<'_, D>,
296 offset: usize,
297 _depth: fidl::encoding::Depth,
298 ) -> fidl::Result<()> {
299 encoder.debug_check_bounds::<ControllerRequestSendSoonResponse>(offset);
300 fidl::encoding::Encode::<ControllerRequestSendSoonResponse, D>::encode(
302 (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.success),),
303 encoder,
304 offset,
305 _depth,
306 )
307 }
308 }
309 unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
310 fidl::encoding::Encode<ControllerRequestSendSoonResponse, D> for (T0,)
311 {
312 #[inline]
313 unsafe fn encode(
314 self,
315 encoder: &mut fidl::encoding::Encoder<'_, D>,
316 offset: usize,
317 depth: fidl::encoding::Depth,
318 ) -> fidl::Result<()> {
319 encoder.debug_check_bounds::<ControllerRequestSendSoonResponse>(offset);
320 self.0.encode(encoder, offset + 0, depth)?;
324 Ok(())
325 }
326 }
327
328 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
329 for ControllerRequestSendSoonResponse
330 {
331 #[inline(always)]
332 fn new_empty() -> Self {
333 Self { success: fidl::new_empty!(bool, D) }
334 }
335
336 #[inline]
337 unsafe fn decode(
338 &mut self,
339 decoder: &mut fidl::encoding::Decoder<'_, D>,
340 offset: usize,
341 _depth: fidl::encoding::Depth,
342 ) -> fidl::Result<()> {
343 decoder.debug_check_bounds::<Self>(offset);
344 fidl::decode!(bool, D, &mut self.success, decoder, offset + 0, _depth)?;
346 Ok(())
347 }
348 }
349
350 impl ReportSpec {
351 #[inline(always)]
352 fn max_ordinal_present(&self) -> u64 {
353 if let Some(_) = self.report_id {
354 return 4;
355 }
356 if let Some(_) = self.metric_id {
357 return 3;
358 }
359 if let Some(_) = self.project_id {
360 return 2;
361 }
362 if let Some(_) = self.customer_id {
363 return 1;
364 }
365 0
366 }
367 }
368
369 impl fidl::encoding::ValueTypeMarker for ReportSpec {
370 type Borrowed<'a> = &'a Self;
371 fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
372 value
373 }
374 }
375
376 unsafe impl fidl::encoding::TypeMarker for ReportSpec {
377 type Owned = Self;
378
379 #[inline(always)]
380 fn inline_align(_context: fidl::encoding::Context) -> usize {
381 8
382 }
383
384 #[inline(always)]
385 fn inline_size(_context: fidl::encoding::Context) -> usize {
386 16
387 }
388 }
389
390 unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ReportSpec, D>
391 for &ReportSpec
392 {
393 unsafe fn encode(
394 self,
395 encoder: &mut fidl::encoding::Encoder<'_, D>,
396 offset: usize,
397 mut depth: fidl::encoding::Depth,
398 ) -> fidl::Result<()> {
399 encoder.debug_check_bounds::<ReportSpec>(offset);
400 let max_ordinal: u64 = self.max_ordinal_present();
402 encoder.write_num(max_ordinal, offset);
403 encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
404 if max_ordinal == 0 {
406 return Ok(());
407 }
408 depth.increment()?;
409 let envelope_size = 8;
410 let bytes_len = max_ordinal as usize * envelope_size;
411 #[allow(unused_variables)]
412 let offset = encoder.out_of_line_offset(bytes_len);
413 let mut _prev_end_offset: usize = 0;
414 if 1 > max_ordinal {
415 return Ok(());
416 }
417
418 let cur_offset: usize = (1 - 1) * envelope_size;
421
422 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
424
425 fidl::encoding::encode_in_envelope_optional::<u32, D>(
430 self.customer_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
431 encoder,
432 offset + cur_offset,
433 depth,
434 )?;
435
436 _prev_end_offset = cur_offset + envelope_size;
437 if 2 > max_ordinal {
438 return Ok(());
439 }
440
441 let cur_offset: usize = (2 - 1) * envelope_size;
444
445 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
447
448 fidl::encoding::encode_in_envelope_optional::<u32, D>(
453 self.project_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
454 encoder,
455 offset + cur_offset,
456 depth,
457 )?;
458
459 _prev_end_offset = cur_offset + envelope_size;
460 if 3 > max_ordinal {
461 return Ok(());
462 }
463
464 let cur_offset: usize = (3 - 1) * envelope_size;
467
468 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
470
471 fidl::encoding::encode_in_envelope_optional::<u32, D>(
476 self.metric_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
477 encoder,
478 offset + cur_offset,
479 depth,
480 )?;
481
482 _prev_end_offset = cur_offset + envelope_size;
483 if 4 > max_ordinal {
484 return Ok(());
485 }
486
487 let cur_offset: usize = (4 - 1) * envelope_size;
490
491 encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
493
494 fidl::encoding::encode_in_envelope_optional::<u32, D>(
499 self.report_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
500 encoder,
501 offset + cur_offset,
502 depth,
503 )?;
504
505 _prev_end_offset = cur_offset + envelope_size;
506
507 Ok(())
508 }
509 }
510
511 impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ReportSpec {
512 #[inline(always)]
513 fn new_empty() -> Self {
514 Self::default()
515 }
516
517 unsafe fn decode(
518 &mut self,
519 decoder: &mut fidl::encoding::Decoder<'_, D>,
520 offset: usize,
521 mut depth: fidl::encoding::Depth,
522 ) -> fidl::Result<()> {
523 decoder.debug_check_bounds::<Self>(offset);
524 let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
525 None => return Err(fidl::Error::NotNullable),
526 Some(len) => len,
527 };
528 if len == 0 {
530 return Ok(());
531 };
532 depth.increment()?;
533 let envelope_size = 8;
534 let bytes_len = len * envelope_size;
535 let offset = decoder.out_of_line_offset(bytes_len)?;
536 let mut _next_ordinal_to_read = 0;
538 let mut next_offset = offset;
539 let end_offset = offset + bytes_len;
540 _next_ordinal_to_read += 1;
541 if next_offset >= end_offset {
542 return Ok(());
543 }
544
545 while _next_ordinal_to_read < 1 {
547 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
548 _next_ordinal_to_read += 1;
549 next_offset += envelope_size;
550 }
551
552 let next_out_of_line = decoder.next_out_of_line();
553 let handles_before = decoder.remaining_handles();
554 if let Some((inlined, num_bytes, num_handles)) =
555 fidl::encoding::decode_envelope_header(decoder, next_offset)?
556 {
557 let member_inline_size =
558 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
559 if inlined != (member_inline_size <= 4) {
560 return Err(fidl::Error::InvalidInlineBitInEnvelope);
561 }
562 let inner_offset;
563 let mut inner_depth = depth.clone();
564 if inlined {
565 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
566 inner_offset = next_offset;
567 } else {
568 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
569 inner_depth.increment()?;
570 }
571 let val_ref = self.customer_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
572 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
573 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
574 {
575 return Err(fidl::Error::InvalidNumBytesInEnvelope);
576 }
577 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
578 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
579 }
580 }
581
582 next_offset += envelope_size;
583 _next_ordinal_to_read += 1;
584 if next_offset >= end_offset {
585 return Ok(());
586 }
587
588 while _next_ordinal_to_read < 2 {
590 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
591 _next_ordinal_to_read += 1;
592 next_offset += envelope_size;
593 }
594
595 let next_out_of_line = decoder.next_out_of_line();
596 let handles_before = decoder.remaining_handles();
597 if let Some((inlined, num_bytes, num_handles)) =
598 fidl::encoding::decode_envelope_header(decoder, next_offset)?
599 {
600 let member_inline_size =
601 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
602 if inlined != (member_inline_size <= 4) {
603 return Err(fidl::Error::InvalidInlineBitInEnvelope);
604 }
605 let inner_offset;
606 let mut inner_depth = depth.clone();
607 if inlined {
608 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
609 inner_offset = next_offset;
610 } else {
611 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
612 inner_depth.increment()?;
613 }
614 let val_ref = self.project_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
615 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
616 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
617 {
618 return Err(fidl::Error::InvalidNumBytesInEnvelope);
619 }
620 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
621 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
622 }
623 }
624
625 next_offset += envelope_size;
626 _next_ordinal_to_read += 1;
627 if next_offset >= end_offset {
628 return Ok(());
629 }
630
631 while _next_ordinal_to_read < 3 {
633 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
634 _next_ordinal_to_read += 1;
635 next_offset += envelope_size;
636 }
637
638 let next_out_of_line = decoder.next_out_of_line();
639 let handles_before = decoder.remaining_handles();
640 if let Some((inlined, num_bytes, num_handles)) =
641 fidl::encoding::decode_envelope_header(decoder, next_offset)?
642 {
643 let member_inline_size =
644 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
645 if inlined != (member_inline_size <= 4) {
646 return Err(fidl::Error::InvalidInlineBitInEnvelope);
647 }
648 let inner_offset;
649 let mut inner_depth = depth.clone();
650 if inlined {
651 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
652 inner_offset = next_offset;
653 } else {
654 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
655 inner_depth.increment()?;
656 }
657 let val_ref = self.metric_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
658 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
659 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
660 {
661 return Err(fidl::Error::InvalidNumBytesInEnvelope);
662 }
663 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
664 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
665 }
666 }
667
668 next_offset += envelope_size;
669 _next_ordinal_to_read += 1;
670 if next_offset >= end_offset {
671 return Ok(());
672 }
673
674 while _next_ordinal_to_read < 4 {
676 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
677 _next_ordinal_to_read += 1;
678 next_offset += envelope_size;
679 }
680
681 let next_out_of_line = decoder.next_out_of_line();
682 let handles_before = decoder.remaining_handles();
683 if let Some((inlined, num_bytes, num_handles)) =
684 fidl::encoding::decode_envelope_header(decoder, next_offset)?
685 {
686 let member_inline_size =
687 <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
688 if inlined != (member_inline_size <= 4) {
689 return Err(fidl::Error::InvalidInlineBitInEnvelope);
690 }
691 let inner_offset;
692 let mut inner_depth = depth.clone();
693 if inlined {
694 decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
695 inner_offset = next_offset;
696 } else {
697 inner_offset = decoder.out_of_line_offset(member_inline_size)?;
698 inner_depth.increment()?;
699 }
700 let val_ref = self.report_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
701 fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
702 if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
703 {
704 return Err(fidl::Error::InvalidNumBytesInEnvelope);
705 }
706 if handles_before != decoder.remaining_handles() + (num_handles as usize) {
707 return Err(fidl::Error::InvalidNumHandlesInEnvelope);
708 }
709 }
710
711 next_offset += envelope_size;
712
713 while next_offset < end_offset {
715 _next_ordinal_to_read += 1;
716 fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
717 next_offset += envelope_size;
718 }
719
720 Ok(())
721 }
722 }
723}