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::<
152                fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 20524>,
153                fidl::encoding::DefaultFuchsiaResourceDialect,
154            >(
155                self.vmo.as_mut().map(
156                    <fidl::encoding::HandleType<
157                        fidl::Vmo,
158                        { fidl::ObjectType::VMO.into_raw() },
159                        20524,
160                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
161                ),
162                encoder,
163                offset + cur_offset,
164                depth,
165            )?;
166
167            _prev_end_offset = cur_offset + envelope_size;
168
169            Ok(())
170        }
171    }
172
173    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for Map {
174        #[inline(always)]
175        fn new_empty() -> Self {
176            Self::default()
177        }
178
179        unsafe fn decode(
180            &mut self,
181            decoder: &mut fidl::encoding::Decoder<
182                '_,
183                fidl::encoding::DefaultFuchsiaResourceDialect,
184            >,
185            offset: usize,
186            mut depth: fidl::encoding::Depth,
187        ) -> fidl::Result<()> {
188            decoder.debug_check_bounds::<Self>(offset);
189            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
190                None => return Err(fidl::Error::NotNullable),
191                Some(len) => len,
192            };
193            // Calling decoder.out_of_line_offset(0) is not allowed.
194            if len == 0 {
195                return Ok(());
196            };
197            depth.increment()?;
198            let envelope_size = 8;
199            let bytes_len = len * envelope_size;
200            let offset = decoder.out_of_line_offset(bytes_len)?;
201            // Decode the envelope for each type.
202            let mut _next_ordinal_to_read = 0;
203            let mut next_offset = offset;
204            let end_offset = offset + bytes_len;
205            _next_ordinal_to_read += 1;
206            if next_offset >= end_offset {
207                return Ok(());
208            }
209
210            // Decode unknown envelopes for gaps in ordinals.
211            while _next_ordinal_to_read < 1 {
212                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
213                _next_ordinal_to_read += 1;
214                next_offset += envelope_size;
215            }
216
217            let next_out_of_line = decoder.next_out_of_line();
218            let handles_before = decoder.remaining_handles();
219            if let Some((inlined, num_bytes, num_handles)) =
220                fidl::encoding::decode_envelope_header(decoder, next_offset)?
221            {
222                let member_inline_size =
223                    <MapSchema as fidl::encoding::TypeMarker>::inline_size(decoder.context);
224                if inlined != (member_inline_size <= 4) {
225                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
226                }
227                let inner_offset;
228                let mut inner_depth = depth.clone();
229                if inlined {
230                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
231                    inner_offset = next_offset;
232                } else {
233                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
234                    inner_depth.increment()?;
235                }
236                let val_ref = self.schema.get_or_insert_with(|| {
237                    fidl::new_empty!(MapSchema, fidl::encoding::DefaultFuchsiaResourceDialect)
238                });
239                fidl::decode!(
240                    MapSchema,
241                    fidl::encoding::DefaultFuchsiaResourceDialect,
242                    val_ref,
243                    decoder,
244                    inner_offset,
245                    inner_depth
246                )?;
247                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
248                {
249                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
250                }
251                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
252                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
253                }
254            }
255
256            next_offset += envelope_size;
257            _next_ordinal_to_read += 1;
258            if next_offset >= end_offset {
259                return Ok(());
260            }
261
262            // Decode unknown envelopes for gaps in ordinals.
263            while _next_ordinal_to_read < 2 {
264                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
265                _next_ordinal_to_read += 1;
266                next_offset += envelope_size;
267            }
268
269            let next_out_of_line = decoder.next_out_of_line();
270            let handles_before = decoder.remaining_handles();
271            if let Some((inlined, num_bytes, num_handles)) =
272                fidl::encoding::decode_envelope_header(decoder, next_offset)?
273            {
274                let member_inline_size = <fidl::encoding::HandleType<
275                    fidl::Vmo,
276                    { fidl::ObjectType::VMO.into_raw() },
277                    20524,
278                > as fidl::encoding::TypeMarker>::inline_size(
279                    decoder.context
280                );
281                if inlined != (member_inline_size <= 4) {
282                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
283                }
284                let inner_offset;
285                let mut inner_depth = depth.clone();
286                if inlined {
287                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
288                    inner_offset = next_offset;
289                } else {
290                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
291                    inner_depth.increment()?;
292                }
293                let val_ref =
294                self.vmo.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 20524>, fidl::encoding::DefaultFuchsiaResourceDialect));
295                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 20524>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
296                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
297                {
298                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
299                }
300                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
301                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
302                }
303            }
304
305            next_offset += envelope_size;
306
307            // Decode the remaining unknown envelopes.
308            while next_offset < end_offset {
309                _next_ordinal_to_read += 1;
310                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
311                next_offset += envelope_size;
312            }
313
314            Ok(())
315        }
316    }
317
318    impl VerifiedProgram {
319        #[inline(always)]
320        fn max_ordinal_present(&self) -> u64 {
321            if let Some(_) = self.maps {
322                return 3;
323            }
324            if let Some(_) = self.struct_access_instructions {
325                return 2;
326            }
327            if let Some(_) = self.code {
328                return 1;
329            }
330            0
331        }
332    }
333
334    impl fidl::encoding::ResourceTypeMarker for VerifiedProgram {
335        type Borrowed<'a> = &'a mut Self;
336        fn take_or_borrow<'a>(
337            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
338        ) -> Self::Borrowed<'a> {
339            value
340        }
341    }
342
343    unsafe impl fidl::encoding::TypeMarker for VerifiedProgram {
344        type Owned = Self;
345
346        #[inline(always)]
347        fn inline_align(_context: fidl::encoding::Context) -> usize {
348            8
349        }
350
351        #[inline(always)]
352        fn inline_size(_context: fidl::encoding::Context) -> usize {
353            16
354        }
355    }
356
357    unsafe impl
358        fidl::encoding::Encode<VerifiedProgram, fidl::encoding::DefaultFuchsiaResourceDialect>
359        for &mut VerifiedProgram
360    {
361        unsafe fn encode(
362            self,
363            encoder: &mut fidl::encoding::Encoder<
364                '_,
365                fidl::encoding::DefaultFuchsiaResourceDialect,
366            >,
367            offset: usize,
368            mut depth: fidl::encoding::Depth,
369        ) -> fidl::Result<()> {
370            encoder.debug_check_bounds::<VerifiedProgram>(offset);
371            // Vector header
372            let max_ordinal: u64 = self.max_ordinal_present();
373            encoder.write_num(max_ordinal, offset);
374            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
375            // Calling encoder.out_of_line_offset(0) is not allowed.
376            if max_ordinal == 0 {
377                return Ok(());
378            }
379            depth.increment()?;
380            let envelope_size = 8;
381            let bytes_len = max_ordinal as usize * envelope_size;
382            #[allow(unused_variables)]
383            let offset = encoder.out_of_line_offset(bytes_len);
384            let mut _prev_end_offset: usize = 0;
385            if 1 > max_ordinal {
386                return Ok(());
387            }
388
389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
390            // are envelope_size bytes.
391            let cur_offset: usize = (1 - 1) * envelope_size;
392
393            // Zero reserved fields.
394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
395
396            // Safety:
397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
399            //   envelope_size bytes, there is always sufficient room.
400            fidl::encoding::encode_in_envelope_optional::<
401                fidl::encoding::Vector<u64, 4096>,
402                fidl::encoding::DefaultFuchsiaResourceDialect,
403            >(
404                self.code.as_ref().map(
405                    <fidl::encoding::Vector<u64, 4096> as fidl::encoding::ValueTypeMarker>::borrow,
406                ),
407                encoder,
408                offset + cur_offset,
409                depth,
410            )?;
411
412            _prev_end_offset = cur_offset + envelope_size;
413            if 2 > max_ordinal {
414                return Ok(());
415            }
416
417            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
418            // are envelope_size bytes.
419            let cur_offset: usize = (2 - 1) * envelope_size;
420
421            // Zero reserved fields.
422            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
423
424            // Safety:
425            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
426            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
427            //   envelope_size bytes, there is always sufficient room.
428            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<StructAccess, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect>(
429            self.struct_access_instructions.as_ref().map(<fidl::encoding::Vector<StructAccess, 4096> as fidl::encoding::ValueTypeMarker>::borrow),
430            encoder, offset + cur_offset, depth
431        )?;
432
433            _prev_end_offset = cur_offset + envelope_size;
434            if 3 > max_ordinal {
435                return Ok(());
436            }
437
438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
439            // are envelope_size bytes.
440            let cur_offset: usize = (3 - 1) * envelope_size;
441
442            // Zero reserved fields.
443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
444
445            // Safety:
446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
448            //   envelope_size bytes, there is always sufficient room.
449            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Map, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect>(
450            self.maps.as_mut().map(<fidl::encoding::Vector<Map, 4096> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
451            encoder, offset + cur_offset, depth
452        )?;
453
454            _prev_end_offset = cur_offset + envelope_size;
455
456            Ok(())
457        }
458    }
459
460    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
461        for VerifiedProgram
462    {
463        #[inline(always)]
464        fn new_empty() -> Self {
465            Self::default()
466        }
467
468        unsafe fn decode(
469            &mut self,
470            decoder: &mut fidl::encoding::Decoder<
471                '_,
472                fidl::encoding::DefaultFuchsiaResourceDialect,
473            >,
474            offset: usize,
475            mut depth: fidl::encoding::Depth,
476        ) -> fidl::Result<()> {
477            decoder.debug_check_bounds::<Self>(offset);
478            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
479                None => return Err(fidl::Error::NotNullable),
480                Some(len) => len,
481            };
482            // Calling decoder.out_of_line_offset(0) is not allowed.
483            if len == 0 {
484                return Ok(());
485            };
486            depth.increment()?;
487            let envelope_size = 8;
488            let bytes_len = len * envelope_size;
489            let offset = decoder.out_of_line_offset(bytes_len)?;
490            // Decode the envelope for each type.
491            let mut _next_ordinal_to_read = 0;
492            let mut next_offset = offset;
493            let end_offset = offset + bytes_len;
494            _next_ordinal_to_read += 1;
495            if next_offset >= end_offset {
496                return Ok(());
497            }
498
499            // Decode unknown envelopes for gaps in ordinals.
500            while _next_ordinal_to_read < 1 {
501                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
502                _next_ordinal_to_read += 1;
503                next_offset += envelope_size;
504            }
505
506            let next_out_of_line = decoder.next_out_of_line();
507            let handles_before = decoder.remaining_handles();
508            if let Some((inlined, num_bytes, num_handles)) =
509                fidl::encoding::decode_envelope_header(decoder, next_offset)?
510            {
511                let member_inline_size =
512                    <fidl::encoding::Vector<u64, 4096> as fidl::encoding::TypeMarker>::inline_size(
513                        decoder.context,
514                    );
515                if inlined != (member_inline_size <= 4) {
516                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
517                }
518                let inner_offset;
519                let mut inner_depth = depth.clone();
520                if inlined {
521                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
522                    inner_offset = next_offset;
523                } else {
524                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
525                    inner_depth.increment()?;
526                }
527                let val_ref =
528                self.code.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u64, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect));
529                fidl::decode!(fidl::encoding::Vector<u64, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
530                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
531                {
532                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
533                }
534                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
535                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
536                }
537            }
538
539            next_offset += envelope_size;
540            _next_ordinal_to_read += 1;
541            if next_offset >= end_offset {
542                return Ok(());
543            }
544
545            // Decode unknown envelopes for gaps in ordinals.
546            while _next_ordinal_to_read < 2 {
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 = <fidl::encoding::Vector<StructAccess, 4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
558                if inlined != (member_inline_size <= 4) {
559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
560                }
561                let inner_offset;
562                let mut inner_depth = depth.clone();
563                if inlined {
564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
565                    inner_offset = next_offset;
566                } else {
567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
568                    inner_depth.increment()?;
569                }
570                let val_ref =
571                self.struct_access_instructions.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<StructAccess, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect));
572                fidl::decode!(fidl::encoding::Vector<StructAccess, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect, 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            // Decode unknown envelopes for gaps in ordinals.
589            while _next_ordinal_to_read < 3 {
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                    <fidl::encoding::Vector<Map, 4096> as fidl::encoding::TypeMarker>::inline_size(
602                        decoder.context,
603                    );
604                if inlined != (member_inline_size <= 4) {
605                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
606                }
607                let inner_offset;
608                let mut inner_depth = depth.clone();
609                if inlined {
610                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
611                    inner_offset = next_offset;
612                } else {
613                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
614                    inner_depth.increment()?;
615                }
616                let val_ref =
617                self.maps.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<Map, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect));
618                fidl::decode!(fidl::encoding::Vector<Map, 4096>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
619                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
620                {
621                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
622                }
623                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
624                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
625                }
626            }
627
628            next_offset += envelope_size;
629
630            // Decode the remaining unknown envelopes.
631            while next_offset < end_offset {
632                _next_ordinal_to_read += 1;
633                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
634                next_offset += envelope_size;
635            }
636
637            Ok(())
638        }
639    }
640}