fidl_fuchsia_ebpf/
fidl_fuchsia_ebpf.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::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10pub use fidl_fuchsia_ebpf_common::*;
11use futures::future::{self, MaybeDone, TryFutureExt};
12use zx_status;
13
14/// A representation of eBPF map that can be shared between processes.
15#[derive(Debug, Default, PartialEq)]
16pub struct Map {
17    /// Map schema.
18    pub schema: Option<MapSchema>,
19    /// VMO used to store the map data. The layout of the data stored in the
20    /// VMO depends on the `schema` as defined in the `ebpf_api` create.
21    pub vmo: Option<fidl::Vmo>,
22    #[doc(hidden)]
23    pub __source_breaking: fidl::marker::SourceBreaking,
24}
25
26impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for Map {}
27
28/// A verified eBPF program.
29#[derive(Debug, Default, PartialEq)]
30pub struct VerifiedProgram {
31    /// Program instructions.
32    pub code: Option<Vec<u64>>,
33    /// List of instructions accessing struct fields.
34    pub struct_access_instructions: Option<Vec<StructAccess>>,
35    /// List of the maps used by the program. `code` may reference these maps
36    /// by their index in this array.
37    pub maps: Option<Vec<Map>>,
38    #[doc(hidden)]
39    pub __source_breaking: fidl::marker::SourceBreaking,
40}
41
42impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for VerifiedProgram {}
43
44mod internal {
45    use super::*;
46
47    impl Map {
48        #[inline(always)]
49        fn max_ordinal_present(&self) -> u64 {
50            if let Some(_) = self.vmo {
51                return 2;
52            }
53            if let Some(_) = self.schema {
54                return 1;
55            }
56            0
57        }
58    }
59
60    impl fidl::encoding::ResourceTypeMarker for Map {
61        type Borrowed<'a> = &'a mut Self;
62        fn take_or_borrow<'a>(
63            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
64        ) -> Self::Borrowed<'a> {
65            value
66        }
67    }
68
69    unsafe impl fidl::encoding::TypeMarker for Map {
70        type Owned = Self;
71
72        #[inline(always)]
73        fn inline_align(_context: fidl::encoding::Context) -> usize {
74            8
75        }
76
77        #[inline(always)]
78        fn inline_size(_context: fidl::encoding::Context) -> usize {
79            16
80        }
81    }
82
83    unsafe impl fidl::encoding::Encode<Map, fidl::encoding::DefaultFuchsiaResourceDialect>
84        for &mut Map
85    {
86        unsafe fn encode(
87            self,
88            encoder: &mut fidl::encoding::Encoder<
89                '_,
90                fidl::encoding::DefaultFuchsiaResourceDialect,
91            >,
92            offset: usize,
93            mut depth: fidl::encoding::Depth,
94        ) -> fidl::Result<()> {
95            encoder.debug_check_bounds::<Map>(offset);
96            // Vector header
97            let max_ordinal: u64 = self.max_ordinal_present();
98            encoder.write_num(max_ordinal, offset);
99            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
100            // Calling encoder.out_of_line_offset(0) is not allowed.
101            if max_ordinal == 0 {
102                return Ok(());
103            }
104            depth.increment()?;
105            let envelope_size = 8;
106            let bytes_len = max_ordinal as usize * envelope_size;
107            #[allow(unused_variables)]
108            let offset = encoder.out_of_line_offset(bytes_len);
109            let mut _prev_end_offset: usize = 0;
110            if 1 > max_ordinal {
111                return Ok(());
112            }
113
114            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
115            // are envelope_size bytes.
116            let cur_offset: usize = (1 - 1) * envelope_size;
117
118            // Zero reserved fields.
119            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
120
121            // Safety:
122            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
123            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
124            //   envelope_size bytes, there is always sufficient room.
125            fidl::encoding::encode_in_envelope_optional::<
126                MapSchema,
127                fidl::encoding::DefaultFuchsiaResourceDialect,
128            >(
129                self.schema.as_ref().map(<MapSchema as fidl::encoding::ValueTypeMarker>::borrow),
130                encoder,
131                offset + cur_offset,
132                depth,
133            )?;
134
135            _prev_end_offset = cur_offset + envelope_size;
136            if 2 > max_ordinal {
137                return Ok(());
138            }
139
140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
141            // are envelope_size bytes.
142            let cur_offset: usize = (2 - 1) * envelope_size;
143
144            // Zero reserved fields.
145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
146
147            // Safety:
148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
150            //   envelope_size bytes, there is always sufficient room.
151            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 44>, fidl::encoding::DefaultFuchsiaResourceDialect>(
152            self.vmo.as_mut().map(<fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 44> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
153            encoder, offset + cur_offset, depth
154        )?;
155
156            _prev_end_offset = cur_offset + envelope_size;
157
158            Ok(())
159        }
160    }
161
162    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Map {
163        #[inline(always)]
164        fn new_empty() -> Self {
165            Self::default()
166        }
167
168        unsafe fn decode(
169            &mut self,
170            decoder: &mut fidl::encoding::Decoder<
171                '_,
172                fidl::encoding::DefaultFuchsiaResourceDialect,
173            >,
174            offset: usize,
175            mut depth: fidl::encoding::Depth,
176        ) -> fidl::Result<()> {
177            decoder.debug_check_bounds::<Self>(offset);
178            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
179                None => return Err(fidl::Error::NotNullable),
180                Some(len) => len,
181            };
182            // Calling decoder.out_of_line_offset(0) is not allowed.
183            if len == 0 {
184                return Ok(());
185            };
186            depth.increment()?;
187            let envelope_size = 8;
188            let bytes_len = len * envelope_size;
189            let offset = decoder.out_of_line_offset(bytes_len)?;
190            // Decode the envelope for each type.
191            let mut _next_ordinal_to_read = 0;
192            let mut next_offset = offset;
193            let end_offset = offset + bytes_len;
194            _next_ordinal_to_read += 1;
195            if next_offset >= end_offset {
196                return Ok(());
197            }
198
199            // Decode unknown envelopes for gaps in ordinals.
200            while _next_ordinal_to_read < 1 {
201                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
202                _next_ordinal_to_read += 1;
203                next_offset += envelope_size;
204            }
205
206            let next_out_of_line = decoder.next_out_of_line();
207            let handles_before = decoder.remaining_handles();
208            if let Some((inlined, num_bytes, num_handles)) =
209                fidl::encoding::decode_envelope_header(decoder, next_offset)?
210            {
211                let member_inline_size =
212                    <MapSchema as fidl::encoding::TypeMarker>::inline_size(decoder.context);
213                if inlined != (member_inline_size <= 4) {
214                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
215                }
216                let inner_offset;
217                let mut inner_depth = depth.clone();
218                if inlined {
219                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
220                    inner_offset = next_offset;
221                } else {
222                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
223                    inner_depth.increment()?;
224                }
225                let val_ref = self.schema.get_or_insert_with(|| {
226                    fidl::new_empty!(MapSchema, fidl::encoding::DefaultFuchsiaResourceDialect)
227                });
228                fidl::decode!(
229                    MapSchema,
230                    fidl::encoding::DefaultFuchsiaResourceDialect,
231                    val_ref,
232                    decoder,
233                    inner_offset,
234                    inner_depth
235                )?;
236                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
237                {
238                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
239                }
240                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
241                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
242                }
243            }
244
245            next_offset += envelope_size;
246            _next_ordinal_to_read += 1;
247            if next_offset >= end_offset {
248                return Ok(());
249            }
250
251            // Decode unknown envelopes for gaps in ordinals.
252            while _next_ordinal_to_read < 2 {
253                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
254                _next_ordinal_to_read += 1;
255                next_offset += envelope_size;
256            }
257
258            let next_out_of_line = decoder.next_out_of_line();
259            let handles_before = decoder.remaining_handles();
260            if let Some((inlined, num_bytes, num_handles)) =
261                fidl::encoding::decode_envelope_header(decoder, next_offset)?
262            {
263                let member_inline_size = <fidl::encoding::HandleType<
264                    fidl::Vmo,
265                    { fidl::ObjectType::VMO.into_raw() },
266                    44,
267                > as fidl::encoding::TypeMarker>::inline_size(
268                    decoder.context
269                );
270                if inlined != (member_inline_size <= 4) {
271                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
272                }
273                let inner_offset;
274                let mut inner_depth = depth.clone();
275                if inlined {
276                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
277                    inner_offset = next_offset;
278                } else {
279                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
280                    inner_depth.increment()?;
281                }
282                let val_ref =
283                self.vmo.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 44>, fidl::encoding::DefaultFuchsiaResourceDialect));
284                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 44>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
285                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
286                {
287                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
288                }
289                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
290                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
291                }
292            }
293
294            next_offset += envelope_size;
295
296            // Decode the remaining unknown envelopes.
297            while next_offset < end_offset {
298                _next_ordinal_to_read += 1;
299                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
300                next_offset += envelope_size;
301            }
302
303            Ok(())
304        }
305    }
306
307    impl VerifiedProgram {
308        #[inline(always)]
309        fn max_ordinal_present(&self) -> u64 {
310            if let Some(_) = self.maps {
311                return 3;
312            }
313            if let Some(_) = self.struct_access_instructions {
314                return 2;
315            }
316            if let Some(_) = self.code {
317                return 1;
318            }
319            0
320        }
321    }
322
323    impl fidl::encoding::ResourceTypeMarker for VerifiedProgram {
324        type Borrowed<'a> = &'a mut Self;
325        fn take_or_borrow<'a>(
326            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
327        ) -> Self::Borrowed<'a> {
328            value
329        }
330    }
331
332    unsafe impl fidl::encoding::TypeMarker for VerifiedProgram {
333        type Owned = Self;
334
335        #[inline(always)]
336        fn inline_align(_context: fidl::encoding::Context) -> usize {
337            8
338        }
339
340        #[inline(always)]
341        fn inline_size(_context: fidl::encoding::Context) -> usize {
342            16
343        }
344    }
345
346    unsafe impl
347        fidl::encoding::Encode<VerifiedProgram, fidl::encoding::DefaultFuchsiaResourceDialect>
348        for &mut VerifiedProgram
349    {
350        unsafe fn encode(
351            self,
352            encoder: &mut fidl::encoding::Encoder<
353                '_,
354                fidl::encoding::DefaultFuchsiaResourceDialect,
355            >,
356            offset: usize,
357            mut depth: fidl::encoding::Depth,
358        ) -> fidl::Result<()> {
359            encoder.debug_check_bounds::<VerifiedProgram>(offset);
360            // Vector header
361            let max_ordinal: u64 = self.max_ordinal_present();
362            encoder.write_num(max_ordinal, offset);
363            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
364            // Calling encoder.out_of_line_offset(0) is not allowed.
365            if max_ordinal == 0 {
366                return Ok(());
367            }
368            depth.increment()?;
369            let envelope_size = 8;
370            let bytes_len = max_ordinal as usize * envelope_size;
371            #[allow(unused_variables)]
372            let offset = encoder.out_of_line_offset(bytes_len);
373            let mut _prev_end_offset: usize = 0;
374            if 1 > max_ordinal {
375                return Ok(());
376            }
377
378            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
379            // are envelope_size bytes.
380            let cur_offset: usize = (1 - 1) * envelope_size;
381
382            // Zero reserved fields.
383            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
384
385            // Safety:
386            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
387            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
388            //   envelope_size bytes, there is always sufficient room.
389            fidl::encoding::encode_in_envelope_optional::<
390                fidl::encoding::Vector<u64, 4096>,
391                fidl::encoding::DefaultFuchsiaResourceDialect,
392            >(
393                self.code.as_ref().map(
394                    <fidl::encoding::Vector<u64, 4096> as fidl::encoding::ValueTypeMarker>::borrow,
395                ),
396                encoder,
397                offset + cur_offset,
398                depth,
399            )?;
400
401            _prev_end_offset = cur_offset + envelope_size;
402            if 2 > max_ordinal {
403                return Ok(());
404            }
405
406            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
407            // are envelope_size bytes.
408            let cur_offset: usize = (2 - 1) * envelope_size;
409
410            // Zero reserved fields.
411            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
412
413            // Safety:
414            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
415            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
416            //   envelope_size bytes, there is always sufficient room.
417            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<StructAccess, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect>(
418            self.struct_access_instructions.as_ref().map(<fidl::encoding::Vector<StructAccess, 4096> as fidl::encoding::ValueTypeMarker>::borrow),
419            encoder, offset + cur_offset, depth
420        )?;
421
422            _prev_end_offset = cur_offset + envelope_size;
423            if 3 > max_ordinal {
424                return Ok(());
425            }
426
427            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
428            // are envelope_size bytes.
429            let cur_offset: usize = (3 - 1) * envelope_size;
430
431            // Zero reserved fields.
432            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
433
434            // Safety:
435            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
436            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
437            //   envelope_size bytes, there is always sufficient room.
438            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Map, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect>(
439            self.maps.as_mut().map(<fidl::encoding::Vector<Map, 4096> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
440            encoder, offset + cur_offset, depth
441        )?;
442
443            _prev_end_offset = cur_offset + envelope_size;
444
445            Ok(())
446        }
447    }
448
449    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
450        for VerifiedProgram
451    {
452        #[inline(always)]
453        fn new_empty() -> Self {
454            Self::default()
455        }
456
457        unsafe fn decode(
458            &mut self,
459            decoder: &mut fidl::encoding::Decoder<
460                '_,
461                fidl::encoding::DefaultFuchsiaResourceDialect,
462            >,
463            offset: usize,
464            mut depth: fidl::encoding::Depth,
465        ) -> fidl::Result<()> {
466            decoder.debug_check_bounds::<Self>(offset);
467            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
468                None => return Err(fidl::Error::NotNullable),
469                Some(len) => len,
470            };
471            // Calling decoder.out_of_line_offset(0) is not allowed.
472            if len == 0 {
473                return Ok(());
474            };
475            depth.increment()?;
476            let envelope_size = 8;
477            let bytes_len = len * envelope_size;
478            let offset = decoder.out_of_line_offset(bytes_len)?;
479            // Decode the envelope for each type.
480            let mut _next_ordinal_to_read = 0;
481            let mut next_offset = offset;
482            let end_offset = offset + bytes_len;
483            _next_ordinal_to_read += 1;
484            if next_offset >= end_offset {
485                return Ok(());
486            }
487
488            // Decode unknown envelopes for gaps in ordinals.
489            while _next_ordinal_to_read < 1 {
490                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
491                _next_ordinal_to_read += 1;
492                next_offset += envelope_size;
493            }
494
495            let next_out_of_line = decoder.next_out_of_line();
496            let handles_before = decoder.remaining_handles();
497            if let Some((inlined, num_bytes, num_handles)) =
498                fidl::encoding::decode_envelope_header(decoder, next_offset)?
499            {
500                let member_inline_size =
501                    <fidl::encoding::Vector<u64, 4096> as fidl::encoding::TypeMarker>::inline_size(
502                        decoder.context,
503                    );
504                if inlined != (member_inline_size <= 4) {
505                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
506                }
507                let inner_offset;
508                let mut inner_depth = depth.clone();
509                if inlined {
510                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
511                    inner_offset = next_offset;
512                } else {
513                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
514                    inner_depth.increment()?;
515                }
516                let val_ref =
517                self.code.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u64, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect));
518                fidl::decode!(fidl::encoding::Vector<u64, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
519                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
520                {
521                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
522                }
523                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
524                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
525                }
526            }
527
528            next_offset += envelope_size;
529            _next_ordinal_to_read += 1;
530            if next_offset >= end_offset {
531                return Ok(());
532            }
533
534            // Decode unknown envelopes for gaps in ordinals.
535            while _next_ordinal_to_read < 2 {
536                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
537                _next_ordinal_to_read += 1;
538                next_offset += envelope_size;
539            }
540
541            let next_out_of_line = decoder.next_out_of_line();
542            let handles_before = decoder.remaining_handles();
543            if let Some((inlined, num_bytes, num_handles)) =
544                fidl::encoding::decode_envelope_header(decoder, next_offset)?
545            {
546                let member_inline_size = <fidl::encoding::Vector<StructAccess, 4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
547                if inlined != (member_inline_size <= 4) {
548                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
549                }
550                let inner_offset;
551                let mut inner_depth = depth.clone();
552                if inlined {
553                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
554                    inner_offset = next_offset;
555                } else {
556                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
557                    inner_depth.increment()?;
558                }
559                let val_ref =
560                self.struct_access_instructions.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<StructAccess, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect));
561                fidl::decode!(fidl::encoding::Vector<StructAccess, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
562                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
563                {
564                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
565                }
566                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
567                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
568                }
569            }
570
571            next_offset += envelope_size;
572            _next_ordinal_to_read += 1;
573            if next_offset >= end_offset {
574                return Ok(());
575            }
576
577            // Decode unknown envelopes for gaps in ordinals.
578            while _next_ordinal_to_read < 3 {
579                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
580                _next_ordinal_to_read += 1;
581                next_offset += envelope_size;
582            }
583
584            let next_out_of_line = decoder.next_out_of_line();
585            let handles_before = decoder.remaining_handles();
586            if let Some((inlined, num_bytes, num_handles)) =
587                fidl::encoding::decode_envelope_header(decoder, next_offset)?
588            {
589                let member_inline_size =
590                    <fidl::encoding::Vector<Map, 4096> as fidl::encoding::TypeMarker>::inline_size(
591                        decoder.context,
592                    );
593                if inlined != (member_inline_size <= 4) {
594                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
595                }
596                let inner_offset;
597                let mut inner_depth = depth.clone();
598                if inlined {
599                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
600                    inner_offset = next_offset;
601                } else {
602                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
603                    inner_depth.increment()?;
604                }
605                let val_ref =
606                self.maps.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<Map, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect));
607                fidl::decode!(fidl::encoding::Vector<Map, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
608                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
609                {
610                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
611                }
612                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
613                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
614                }
615            }
616
617            next_offset += envelope_size;
618
619            // Decode the remaining unknown envelopes.
620            while next_offset < end_offset {
621                _next_ordinal_to_read += 1;
622                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
623                next_offset += envelope_size;
624            }
625
626            Ok(())
627        }
628    }
629}