fidl_fuchsia_hardware_interconnect__common/
fidl_fuchsia_hardware_interconnect__common.rs

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