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, PartialEq)]
42pub struct DeviceSetNodesBandwidthResponse {
43    pub aggregated_bandwidth: Vec<AggregatedBandwidth>,
44}
45
46impl fidl::Persistable for DeviceSetNodesBandwidthResponse {}
47
48#[derive(Clone, Debug, Default, PartialEq)]
49pub struct AggregatedBandwidth {
50    /// Unique ID that refers to the node this bandwidth is requested for.
51    pub node_id: Option<u32>,
52    /// The computed aggregate average bandwidth value, derived from requests.
53    pub average_bandwidth_bps: Option<u64>,
54    /// The computed aggregate peak bandwidth value, derived from requests.
55    pub peak_bandwidth_bps: Option<u64>,
56    #[doc(hidden)]
57    pub __source_breaking: fidl::marker::SourceBreaking,
58}
59
60impl fidl::Persistable for AggregatedBandwidth {}
61
62#[derive(Clone, Debug, Default, PartialEq)]
63pub struct BandwidthRequest {
64    pub average_bandwidth_bps: Option<u64>,
65    pub peak_bandwidth_bps: Option<u64>,
66    #[doc(hidden)]
67    pub __source_breaking: fidl::marker::SourceBreaking,
68}
69
70impl fidl::Persistable for BandwidthRequest {}
71
72#[derive(Clone, Debug, Default, PartialEq)]
73pub struct Edge {
74    /// Source where bus traffic may originate.
75    pub src_node_id: Option<u32>,
76    /// Destination where bus traffic may travel to.
77    pub dst_node_id: Option<u32>,
78    /// An optional weight to apply to the edge. Used for calculating the optimal
79    /// path from between two nodes. If there are multiple paths from one node to
80    /// another, the path will be calculated by optimizing for the smallest sum of
81    /// all edge weights along the path. If not provided, the weight is assumed to
82    /// be 1.
83    pub weight: Option<u32>,
84    #[doc(hidden)]
85    pub __source_breaking: fidl::marker::SourceBreaking,
86}
87
88impl fidl::Persistable for Edge {}
89
90#[derive(Clone, Debug, Default, PartialEq)]
91pub struct Metadata {
92    /// Paths need not be between adjacent nodes, but a valid path from source node
93    /// to destination node must exist in the node graph.
94    pub paths: Option<Vec<PathEndpoints>>,
95    #[doc(hidden)]
96    pub __source_breaking: fidl::marker::SourceBreaking,
97}
98
99impl fidl::Persistable for Metadata {}
100impl fidl::Serializable for Metadata {
101    const SERIALIZABLE_NAME: &'static str = "fuchsia.hardware.interconnect.Metadata";
102}
103
104#[derive(Clone, Debug, Default, PartialEq)]
105pub struct Node {
106    /// Unique ID that refers to this node in other structs.
107    pub id: Option<u32>,
108    /// The name of the node.
109    pub name: Option<String>,
110    /// An optional name of the interconnect the node lives on.
111    pub interconnect_name: Option<String>,
112    /// Optional average bandwidth value to start with. If not provided, defaults to 0.
113    pub initial_avg_bandwidth_bps: Option<u64>,
114    /// Optional peak bandwidth value to start with. If not provided, defaults to 0.
115    pub initial_peak_bandwidth_bps: Option<u64>,
116    #[doc(hidden)]
117    pub __source_breaking: fidl::marker::SourceBreaking,
118}
119
120impl fidl::Persistable for Node {}
121
122#[derive(Clone, Debug, Default, PartialEq)]
123pub struct NodeBandwidth {
124    /// Unique ID that refers to the node this bandwidth is requested for.
125    pub node_id: Option<u32>,
126    /// Set of requests for all edges to this node.
127    pub requests: Option<Vec<BandwidthRequest>>,
128    #[doc(hidden)]
129    pub __source_breaking: fidl::marker::SourceBreaking,
130}
131
132impl fidl::Persistable for NodeBandwidth {}
133
134#[derive(Clone, Debug, Default, PartialEq)]
135pub struct PathEndpoints {
136    /// Name for the path which is used for binding.
137    pub name: Option<String>,
138    /// Id for the path which is used for binding.
139    pub id: Option<u32>,
140    /// Source where bus traffic may originate.
141    pub src_node_id: Option<u32>,
142    /// Destination where bus traffic may travel to.
143    pub dst_node_id: Option<u32>,
144    #[doc(hidden)]
145    pub __source_breaking: fidl::marker::SourceBreaking,
146}
147
148impl fidl::Persistable for PathEndpoints {}
149
150pub mod device_ordinals {
151    pub const SET_NODES_BANDWIDTH: u64 = 0x3bb98f59dd645c14;
152    pub const GET_NODE_GRAPH: u64 = 0x2f676c9ef41b8306;
153    pub const GET_PATH_ENDPOINTS: u64 = 0x656ae602a096765b;
154}
155
156pub mod path_ordinals {
157    pub const SET_BANDWIDTH: u64 = 0xd366c6e86f69d1d;
158}
159
160mod internal {
161    use super::*;
162
163    impl fidl::encoding::ValueTypeMarker for DeviceSetNodesBandwidthRequest {
164        type Borrowed<'a> = &'a Self;
165        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
166            value
167        }
168    }
169
170    unsafe impl fidl::encoding::TypeMarker for DeviceSetNodesBandwidthRequest {
171        type Owned = Self;
172
173        #[inline(always)]
174        fn inline_align(_context: fidl::encoding::Context) -> usize {
175            8
176        }
177
178        #[inline(always)]
179        fn inline_size(_context: fidl::encoding::Context) -> usize {
180            16
181        }
182    }
183
184    unsafe impl<D: fidl::encoding::ResourceDialect>
185        fidl::encoding::Encode<DeviceSetNodesBandwidthRequest, D>
186        for &DeviceSetNodesBandwidthRequest
187    {
188        #[inline]
189        unsafe fn encode(
190            self,
191            encoder: &mut fidl::encoding::Encoder<'_, D>,
192            offset: usize,
193            _depth: fidl::encoding::Depth,
194        ) -> fidl::Result<()> {
195            encoder.debug_check_bounds::<DeviceSetNodesBandwidthRequest>(offset);
196            // Delegate to tuple encoding.
197            fidl::encoding::Encode::<DeviceSetNodesBandwidthRequest, D>::encode(
198                (
199                    <fidl::encoding::UnboundedVector<NodeBandwidth> as fidl::encoding::ValueTypeMarker>::borrow(&self.nodes),
200                ),
201                encoder, offset, _depth
202            )
203        }
204    }
205    unsafe impl<
206        D: fidl::encoding::ResourceDialect,
207        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<NodeBandwidth>, D>,
208    > fidl::encoding::Encode<DeviceSetNodesBandwidthRequest, D> for (T0,)
209    {
210        #[inline]
211        unsafe fn encode(
212            self,
213            encoder: &mut fidl::encoding::Encoder<'_, D>,
214            offset: usize,
215            depth: fidl::encoding::Depth,
216        ) -> fidl::Result<()> {
217            encoder.debug_check_bounds::<DeviceSetNodesBandwidthRequest>(offset);
218            // Zero out padding regions. There's no need to apply masks
219            // because the unmasked parts will be overwritten by fields.
220            // Write the fields.
221            self.0.encode(encoder, offset + 0, depth)?;
222            Ok(())
223        }
224    }
225
226    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
227        for DeviceSetNodesBandwidthRequest
228    {
229        #[inline(always)]
230        fn new_empty() -> Self {
231            Self { nodes: fidl::new_empty!(fidl::encoding::UnboundedVector<NodeBandwidth>, D) }
232        }
233
234        #[inline]
235        unsafe fn decode(
236            &mut self,
237            decoder: &mut fidl::encoding::Decoder<'_, D>,
238            offset: usize,
239            _depth: fidl::encoding::Depth,
240        ) -> fidl::Result<()> {
241            decoder.debug_check_bounds::<Self>(offset);
242            // Verify that padding bytes are zero.
243            fidl::decode!(
244                fidl::encoding::UnboundedVector<NodeBandwidth>,
245                D,
246                &mut self.nodes,
247                decoder,
248                offset + 0,
249                _depth
250            )?;
251            Ok(())
252        }
253    }
254
255    impl fidl::encoding::ValueTypeMarker for DeviceGetNodeGraphResponse {
256        type Borrowed<'a> = &'a Self;
257        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
258            value
259        }
260    }
261
262    unsafe impl fidl::encoding::TypeMarker for DeviceGetNodeGraphResponse {
263        type Owned = Self;
264
265        #[inline(always)]
266        fn inline_align(_context: fidl::encoding::Context) -> usize {
267            8
268        }
269
270        #[inline(always)]
271        fn inline_size(_context: fidl::encoding::Context) -> usize {
272            32
273        }
274    }
275
276    unsafe impl<D: fidl::encoding::ResourceDialect>
277        fidl::encoding::Encode<DeviceGetNodeGraphResponse, D> for &DeviceGetNodeGraphResponse
278    {
279        #[inline]
280        unsafe fn encode(
281            self,
282            encoder: &mut fidl::encoding::Encoder<'_, D>,
283            offset: usize,
284            _depth: fidl::encoding::Depth,
285        ) -> fidl::Result<()> {
286            encoder.debug_check_bounds::<DeviceGetNodeGraphResponse>(offset);
287            // Delegate to tuple encoding.
288            fidl::encoding::Encode::<DeviceGetNodeGraphResponse, D>::encode(
289                (
290                    <fidl::encoding::UnboundedVector<Node> as fidl::encoding::ValueTypeMarker>::borrow(&self.nodes),
291                    <fidl::encoding::UnboundedVector<Edge> as fidl::encoding::ValueTypeMarker>::borrow(&self.edges),
292                ),
293                encoder, offset, _depth
294            )
295        }
296    }
297    unsafe impl<
298        D: fidl::encoding::ResourceDialect,
299        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<Node>, D>,
300        T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<Edge>, D>,
301    > fidl::encoding::Encode<DeviceGetNodeGraphResponse, D> for (T0, T1)
302    {
303        #[inline]
304        unsafe fn encode(
305            self,
306            encoder: &mut fidl::encoding::Encoder<'_, D>,
307            offset: usize,
308            depth: fidl::encoding::Depth,
309        ) -> fidl::Result<()> {
310            encoder.debug_check_bounds::<DeviceGetNodeGraphResponse>(offset);
311            // Zero out padding regions. There's no need to apply masks
312            // because the unmasked parts will be overwritten by fields.
313            // Write the fields.
314            self.0.encode(encoder, offset + 0, depth)?;
315            self.1.encode(encoder, offset + 16, depth)?;
316            Ok(())
317        }
318    }
319
320    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
321        for DeviceGetNodeGraphResponse
322    {
323        #[inline(always)]
324        fn new_empty() -> Self {
325            Self {
326                nodes: fidl::new_empty!(fidl::encoding::UnboundedVector<Node>, D),
327                edges: fidl::new_empty!(fidl::encoding::UnboundedVector<Edge>, D),
328            }
329        }
330
331        #[inline]
332        unsafe fn decode(
333            &mut self,
334            decoder: &mut fidl::encoding::Decoder<'_, D>,
335            offset: usize,
336            _depth: fidl::encoding::Depth,
337        ) -> fidl::Result<()> {
338            decoder.debug_check_bounds::<Self>(offset);
339            // Verify that padding bytes are zero.
340            fidl::decode!(
341                fidl::encoding::UnboundedVector<Node>,
342                D,
343                &mut self.nodes,
344                decoder,
345                offset + 0,
346                _depth
347            )?;
348            fidl::decode!(
349                fidl::encoding::UnboundedVector<Edge>,
350                D,
351                &mut self.edges,
352                decoder,
353                offset + 16,
354                _depth
355            )?;
356            Ok(())
357        }
358    }
359
360    impl fidl::encoding::ValueTypeMarker for DeviceGetPathEndpointsResponse {
361        type Borrowed<'a> = &'a Self;
362        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
363            value
364        }
365    }
366
367    unsafe impl fidl::encoding::TypeMarker for DeviceGetPathEndpointsResponse {
368        type Owned = Self;
369
370        #[inline(always)]
371        fn inline_align(_context: fidl::encoding::Context) -> usize {
372            8
373        }
374
375        #[inline(always)]
376        fn inline_size(_context: fidl::encoding::Context) -> usize {
377            16
378        }
379    }
380
381    unsafe impl<D: fidl::encoding::ResourceDialect>
382        fidl::encoding::Encode<DeviceGetPathEndpointsResponse, D>
383        for &DeviceGetPathEndpointsResponse
384    {
385        #[inline]
386        unsafe fn encode(
387            self,
388            encoder: &mut fidl::encoding::Encoder<'_, D>,
389            offset: usize,
390            _depth: fidl::encoding::Depth,
391        ) -> fidl::Result<()> {
392            encoder.debug_check_bounds::<DeviceGetPathEndpointsResponse>(offset);
393            // Delegate to tuple encoding.
394            fidl::encoding::Encode::<DeviceGetPathEndpointsResponse, D>::encode(
395                (
396                    <fidl::encoding::UnboundedVector<PathEndpoints> as fidl::encoding::ValueTypeMarker>::borrow(&self.paths),
397                ),
398                encoder, offset, _depth
399            )
400        }
401    }
402    unsafe impl<
403        D: fidl::encoding::ResourceDialect,
404        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<PathEndpoints>, D>,
405    > fidl::encoding::Encode<DeviceGetPathEndpointsResponse, D> for (T0,)
406    {
407        #[inline]
408        unsafe fn encode(
409            self,
410            encoder: &mut fidl::encoding::Encoder<'_, D>,
411            offset: usize,
412            depth: fidl::encoding::Depth,
413        ) -> fidl::Result<()> {
414            encoder.debug_check_bounds::<DeviceGetPathEndpointsResponse>(offset);
415            // Zero out padding regions. There's no need to apply masks
416            // because the unmasked parts will be overwritten by fields.
417            // Write the fields.
418            self.0.encode(encoder, offset + 0, depth)?;
419            Ok(())
420        }
421    }
422
423    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
424        for DeviceGetPathEndpointsResponse
425    {
426        #[inline(always)]
427        fn new_empty() -> Self {
428            Self { paths: fidl::new_empty!(fidl::encoding::UnboundedVector<PathEndpoints>, D) }
429        }
430
431        #[inline]
432        unsafe fn decode(
433            &mut self,
434            decoder: &mut fidl::encoding::Decoder<'_, D>,
435            offset: usize,
436            _depth: fidl::encoding::Depth,
437        ) -> fidl::Result<()> {
438            decoder.debug_check_bounds::<Self>(offset);
439            // Verify that padding bytes are zero.
440            fidl::decode!(
441                fidl::encoding::UnboundedVector<PathEndpoints>,
442                D,
443                &mut self.paths,
444                decoder,
445                offset + 0,
446                _depth
447            )?;
448            Ok(())
449        }
450    }
451
452    impl fidl::encoding::ValueTypeMarker for DeviceSetNodesBandwidthResponse {
453        type Borrowed<'a> = &'a Self;
454        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
455            value
456        }
457    }
458
459    unsafe impl fidl::encoding::TypeMarker for DeviceSetNodesBandwidthResponse {
460        type Owned = Self;
461
462        #[inline(always)]
463        fn inline_align(_context: fidl::encoding::Context) -> usize {
464            8
465        }
466
467        #[inline(always)]
468        fn inline_size(_context: fidl::encoding::Context) -> usize {
469            16
470        }
471    }
472
473    unsafe impl<D: fidl::encoding::ResourceDialect>
474        fidl::encoding::Encode<DeviceSetNodesBandwidthResponse, D>
475        for &DeviceSetNodesBandwidthResponse
476    {
477        #[inline]
478        unsafe fn encode(
479            self,
480            encoder: &mut fidl::encoding::Encoder<'_, D>,
481            offset: usize,
482            _depth: fidl::encoding::Depth,
483        ) -> fidl::Result<()> {
484            encoder.debug_check_bounds::<DeviceSetNodesBandwidthResponse>(offset);
485            // Delegate to tuple encoding.
486            fidl::encoding::Encode::<DeviceSetNodesBandwidthResponse, D>::encode(
487                (
488                    <fidl::encoding::UnboundedVector<AggregatedBandwidth> as fidl::encoding::ValueTypeMarker>::borrow(&self.aggregated_bandwidth),
489                ),
490                encoder, offset, _depth
491            )
492        }
493    }
494    unsafe impl<
495        D: fidl::encoding::ResourceDialect,
496        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<AggregatedBandwidth>, D>,
497    > fidl::encoding::Encode<DeviceSetNodesBandwidthResponse, D> for (T0,)
498    {
499        #[inline]
500        unsafe fn encode(
501            self,
502            encoder: &mut fidl::encoding::Encoder<'_, D>,
503            offset: usize,
504            depth: fidl::encoding::Depth,
505        ) -> fidl::Result<()> {
506            encoder.debug_check_bounds::<DeviceSetNodesBandwidthResponse>(offset);
507            // Zero out padding regions. There's no need to apply masks
508            // because the unmasked parts will be overwritten by fields.
509            // Write the fields.
510            self.0.encode(encoder, offset + 0, depth)?;
511            Ok(())
512        }
513    }
514
515    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
516        for DeviceSetNodesBandwidthResponse
517    {
518        #[inline(always)]
519        fn new_empty() -> Self {
520            Self {
521                aggregated_bandwidth: fidl::new_empty!(
522                    fidl::encoding::UnboundedVector<AggregatedBandwidth>,
523                    D
524                ),
525            }
526        }
527
528        #[inline]
529        unsafe fn decode(
530            &mut self,
531            decoder: &mut fidl::encoding::Decoder<'_, D>,
532            offset: usize,
533            _depth: fidl::encoding::Depth,
534        ) -> fidl::Result<()> {
535            decoder.debug_check_bounds::<Self>(offset);
536            // Verify that padding bytes are zero.
537            fidl::decode!(
538                fidl::encoding::UnboundedVector<AggregatedBandwidth>,
539                D,
540                &mut self.aggregated_bandwidth,
541                decoder,
542                offset + 0,
543                _depth
544            )?;
545            Ok(())
546        }
547    }
548
549    impl AggregatedBandwidth {
550        #[inline(always)]
551        fn max_ordinal_present(&self) -> u64 {
552            if let Some(_) = self.peak_bandwidth_bps {
553                return 3;
554            }
555            if let Some(_) = self.average_bandwidth_bps {
556                return 2;
557            }
558            if let Some(_) = self.node_id {
559                return 1;
560            }
561            0
562        }
563    }
564
565    impl fidl::encoding::ValueTypeMarker for AggregatedBandwidth {
566        type Borrowed<'a> = &'a Self;
567        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
568            value
569        }
570    }
571
572    unsafe impl fidl::encoding::TypeMarker for AggregatedBandwidth {
573        type Owned = Self;
574
575        #[inline(always)]
576        fn inline_align(_context: fidl::encoding::Context) -> usize {
577            8
578        }
579
580        #[inline(always)]
581        fn inline_size(_context: fidl::encoding::Context) -> usize {
582            16
583        }
584    }
585
586    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<AggregatedBandwidth, D>
587        for &AggregatedBandwidth
588    {
589        unsafe fn encode(
590            self,
591            encoder: &mut fidl::encoding::Encoder<'_, D>,
592            offset: usize,
593            mut depth: fidl::encoding::Depth,
594        ) -> fidl::Result<()> {
595            encoder.debug_check_bounds::<AggregatedBandwidth>(offset);
596            // Vector header
597            let max_ordinal: u64 = self.max_ordinal_present();
598            encoder.write_num(max_ordinal, offset);
599            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
600            // Calling encoder.out_of_line_offset(0) is not allowed.
601            if max_ordinal == 0 {
602                return Ok(());
603            }
604            depth.increment()?;
605            let envelope_size = 8;
606            let bytes_len = max_ordinal as usize * envelope_size;
607            #[allow(unused_variables)]
608            let offset = encoder.out_of_line_offset(bytes_len);
609            let mut _prev_end_offset: usize = 0;
610            if 1 > max_ordinal {
611                return Ok(());
612            }
613
614            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
615            // are envelope_size bytes.
616            let cur_offset: usize = (1 - 1) * envelope_size;
617
618            // Zero reserved fields.
619            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
620
621            // Safety:
622            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
623            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
624            //   envelope_size bytes, there is always sufficient room.
625            fidl::encoding::encode_in_envelope_optional::<u32, D>(
626                self.node_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
627                encoder,
628                offset + cur_offset,
629                depth,
630            )?;
631
632            _prev_end_offset = cur_offset + envelope_size;
633            if 2 > max_ordinal {
634                return Ok(());
635            }
636
637            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
638            // are envelope_size bytes.
639            let cur_offset: usize = (2 - 1) * envelope_size;
640
641            // Zero reserved fields.
642            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
643
644            // Safety:
645            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
646            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
647            //   envelope_size bytes, there is always sufficient room.
648            fidl::encoding::encode_in_envelope_optional::<u64, D>(
649                self.average_bandwidth_bps
650                    .as_ref()
651                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
652                encoder,
653                offset + cur_offset,
654                depth,
655            )?;
656
657            _prev_end_offset = cur_offset + envelope_size;
658            if 3 > max_ordinal {
659                return Ok(());
660            }
661
662            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
663            // are envelope_size bytes.
664            let cur_offset: usize = (3 - 1) * envelope_size;
665
666            // Zero reserved fields.
667            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
668
669            // Safety:
670            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
671            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
672            //   envelope_size bytes, there is always sufficient room.
673            fidl::encoding::encode_in_envelope_optional::<u64, D>(
674                self.peak_bandwidth_bps
675                    .as_ref()
676                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
677                encoder,
678                offset + cur_offset,
679                depth,
680            )?;
681
682            _prev_end_offset = cur_offset + envelope_size;
683
684            Ok(())
685        }
686    }
687
688    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for AggregatedBandwidth {
689        #[inline(always)]
690        fn new_empty() -> Self {
691            Self::default()
692        }
693
694        unsafe fn decode(
695            &mut self,
696            decoder: &mut fidl::encoding::Decoder<'_, D>,
697            offset: usize,
698            mut depth: fidl::encoding::Depth,
699        ) -> fidl::Result<()> {
700            decoder.debug_check_bounds::<Self>(offset);
701            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
702                None => return Err(fidl::Error::NotNullable),
703                Some(len) => len,
704            };
705            // Calling decoder.out_of_line_offset(0) is not allowed.
706            if len == 0 {
707                return Ok(());
708            };
709            depth.increment()?;
710            let envelope_size = 8;
711            let bytes_len = len * envelope_size;
712            let offset = decoder.out_of_line_offset(bytes_len)?;
713            // Decode the envelope for each type.
714            let mut _next_ordinal_to_read = 0;
715            let mut next_offset = offset;
716            let end_offset = offset + bytes_len;
717            _next_ordinal_to_read += 1;
718            if next_offset >= end_offset {
719                return Ok(());
720            }
721
722            // Decode unknown envelopes for gaps in ordinals.
723            while _next_ordinal_to_read < 1 {
724                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
725                _next_ordinal_to_read += 1;
726                next_offset += envelope_size;
727            }
728
729            let next_out_of_line = decoder.next_out_of_line();
730            let handles_before = decoder.remaining_handles();
731            if let Some((inlined, num_bytes, num_handles)) =
732                fidl::encoding::decode_envelope_header(decoder, next_offset)?
733            {
734                let member_inline_size =
735                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
736                if inlined != (member_inline_size <= 4) {
737                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
738                }
739                let inner_offset;
740                let mut inner_depth = depth.clone();
741                if inlined {
742                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
743                    inner_offset = next_offset;
744                } else {
745                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
746                    inner_depth.increment()?;
747                }
748                let val_ref = self.node_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
749                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
750                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
751                {
752                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
753                }
754                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
755                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
756                }
757            }
758
759            next_offset += envelope_size;
760            _next_ordinal_to_read += 1;
761            if next_offset >= end_offset {
762                return Ok(());
763            }
764
765            // Decode unknown envelopes for gaps in ordinals.
766            while _next_ordinal_to_read < 2 {
767                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
768                _next_ordinal_to_read += 1;
769                next_offset += envelope_size;
770            }
771
772            let next_out_of_line = decoder.next_out_of_line();
773            let handles_before = decoder.remaining_handles();
774            if let Some((inlined, num_bytes, num_handles)) =
775                fidl::encoding::decode_envelope_header(decoder, next_offset)?
776            {
777                let member_inline_size =
778                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
779                if inlined != (member_inline_size <= 4) {
780                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
781                }
782                let inner_offset;
783                let mut inner_depth = depth.clone();
784                if inlined {
785                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
786                    inner_offset = next_offset;
787                } else {
788                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
789                    inner_depth.increment()?;
790                }
791                let val_ref =
792                    self.average_bandwidth_bps.get_or_insert_with(|| fidl::new_empty!(u64, D));
793                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
794                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
795                {
796                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
797                }
798                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
799                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
800                }
801            }
802
803            next_offset += envelope_size;
804            _next_ordinal_to_read += 1;
805            if next_offset >= end_offset {
806                return Ok(());
807            }
808
809            // Decode unknown envelopes for gaps in ordinals.
810            while _next_ordinal_to_read < 3 {
811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
812                _next_ordinal_to_read += 1;
813                next_offset += envelope_size;
814            }
815
816            let next_out_of_line = decoder.next_out_of_line();
817            let handles_before = decoder.remaining_handles();
818            if let Some((inlined, num_bytes, num_handles)) =
819                fidl::encoding::decode_envelope_header(decoder, next_offset)?
820            {
821                let member_inline_size =
822                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
823                if inlined != (member_inline_size <= 4) {
824                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
825                }
826                let inner_offset;
827                let mut inner_depth = depth.clone();
828                if inlined {
829                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
830                    inner_offset = next_offset;
831                } else {
832                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
833                    inner_depth.increment()?;
834                }
835                let val_ref =
836                    self.peak_bandwidth_bps.get_or_insert_with(|| fidl::new_empty!(u64, D));
837                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
838                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
839                {
840                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
841                }
842                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
843                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
844                }
845            }
846
847            next_offset += envelope_size;
848
849            // Decode the remaining unknown envelopes.
850            while next_offset < end_offset {
851                _next_ordinal_to_read += 1;
852                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
853                next_offset += envelope_size;
854            }
855
856            Ok(())
857        }
858    }
859
860    impl BandwidthRequest {
861        #[inline(always)]
862        fn max_ordinal_present(&self) -> u64 {
863            if let Some(_) = self.peak_bandwidth_bps {
864                return 2;
865            }
866            if let Some(_) = self.average_bandwidth_bps {
867                return 1;
868            }
869            0
870        }
871    }
872
873    impl fidl::encoding::ValueTypeMarker for BandwidthRequest {
874        type Borrowed<'a> = &'a Self;
875        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
876            value
877        }
878    }
879
880    unsafe impl fidl::encoding::TypeMarker for BandwidthRequest {
881        type Owned = Self;
882
883        #[inline(always)]
884        fn inline_align(_context: fidl::encoding::Context) -> usize {
885            8
886        }
887
888        #[inline(always)]
889        fn inline_size(_context: fidl::encoding::Context) -> usize {
890            16
891        }
892    }
893
894    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BandwidthRequest, D>
895        for &BandwidthRequest
896    {
897        unsafe fn encode(
898            self,
899            encoder: &mut fidl::encoding::Encoder<'_, D>,
900            offset: usize,
901            mut depth: fidl::encoding::Depth,
902        ) -> fidl::Result<()> {
903            encoder.debug_check_bounds::<BandwidthRequest>(offset);
904            // Vector header
905            let max_ordinal: u64 = self.max_ordinal_present();
906            encoder.write_num(max_ordinal, offset);
907            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
908            // Calling encoder.out_of_line_offset(0) is not allowed.
909            if max_ordinal == 0 {
910                return Ok(());
911            }
912            depth.increment()?;
913            let envelope_size = 8;
914            let bytes_len = max_ordinal as usize * envelope_size;
915            #[allow(unused_variables)]
916            let offset = encoder.out_of_line_offset(bytes_len);
917            let mut _prev_end_offset: usize = 0;
918            if 1 > max_ordinal {
919                return Ok(());
920            }
921
922            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
923            // are envelope_size bytes.
924            let cur_offset: usize = (1 - 1) * envelope_size;
925
926            // Zero reserved fields.
927            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
928
929            // Safety:
930            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
931            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
932            //   envelope_size bytes, there is always sufficient room.
933            fidl::encoding::encode_in_envelope_optional::<u64, D>(
934                self.average_bandwidth_bps
935                    .as_ref()
936                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
937                encoder,
938                offset + cur_offset,
939                depth,
940            )?;
941
942            _prev_end_offset = cur_offset + envelope_size;
943            if 2 > max_ordinal {
944                return Ok(());
945            }
946
947            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
948            // are envelope_size bytes.
949            let cur_offset: usize = (2 - 1) * envelope_size;
950
951            // Zero reserved fields.
952            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
953
954            // Safety:
955            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
956            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
957            //   envelope_size bytes, there is always sufficient room.
958            fidl::encoding::encode_in_envelope_optional::<u64, D>(
959                self.peak_bandwidth_bps
960                    .as_ref()
961                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
962                encoder,
963                offset + cur_offset,
964                depth,
965            )?;
966
967            _prev_end_offset = cur_offset + envelope_size;
968
969            Ok(())
970        }
971    }
972
973    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BandwidthRequest {
974        #[inline(always)]
975        fn new_empty() -> Self {
976            Self::default()
977        }
978
979        unsafe fn decode(
980            &mut self,
981            decoder: &mut fidl::encoding::Decoder<'_, D>,
982            offset: usize,
983            mut depth: fidl::encoding::Depth,
984        ) -> fidl::Result<()> {
985            decoder.debug_check_bounds::<Self>(offset);
986            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
987                None => return Err(fidl::Error::NotNullable),
988                Some(len) => len,
989            };
990            // Calling decoder.out_of_line_offset(0) is not allowed.
991            if len == 0 {
992                return Ok(());
993            };
994            depth.increment()?;
995            let envelope_size = 8;
996            let bytes_len = len * envelope_size;
997            let offset = decoder.out_of_line_offset(bytes_len)?;
998            // Decode the envelope for each type.
999            let mut _next_ordinal_to_read = 0;
1000            let mut next_offset = offset;
1001            let end_offset = offset + bytes_len;
1002            _next_ordinal_to_read += 1;
1003            if next_offset >= end_offset {
1004                return Ok(());
1005            }
1006
1007            // Decode unknown envelopes for gaps in ordinals.
1008            while _next_ordinal_to_read < 1 {
1009                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1010                _next_ordinal_to_read += 1;
1011                next_offset += envelope_size;
1012            }
1013
1014            let next_out_of_line = decoder.next_out_of_line();
1015            let handles_before = decoder.remaining_handles();
1016            if let Some((inlined, num_bytes, num_handles)) =
1017                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1018            {
1019                let member_inline_size =
1020                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1021                if inlined != (member_inline_size <= 4) {
1022                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1023                }
1024                let inner_offset;
1025                let mut inner_depth = depth.clone();
1026                if inlined {
1027                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1028                    inner_offset = next_offset;
1029                } else {
1030                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1031                    inner_depth.increment()?;
1032                }
1033                let val_ref =
1034                    self.average_bandwidth_bps.get_or_insert_with(|| fidl::new_empty!(u64, D));
1035                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1036                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1037                {
1038                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1039                }
1040                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1041                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1042                }
1043            }
1044
1045            next_offset += envelope_size;
1046            _next_ordinal_to_read += 1;
1047            if next_offset >= end_offset {
1048                return Ok(());
1049            }
1050
1051            // Decode unknown envelopes for gaps in ordinals.
1052            while _next_ordinal_to_read < 2 {
1053                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1054                _next_ordinal_to_read += 1;
1055                next_offset += envelope_size;
1056            }
1057
1058            let next_out_of_line = decoder.next_out_of_line();
1059            let handles_before = decoder.remaining_handles();
1060            if let Some((inlined, num_bytes, num_handles)) =
1061                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1062            {
1063                let member_inline_size =
1064                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1065                if inlined != (member_inline_size <= 4) {
1066                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1067                }
1068                let inner_offset;
1069                let mut inner_depth = depth.clone();
1070                if inlined {
1071                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1072                    inner_offset = next_offset;
1073                } else {
1074                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1075                    inner_depth.increment()?;
1076                }
1077                let val_ref =
1078                    self.peak_bandwidth_bps.get_or_insert_with(|| fidl::new_empty!(u64, D));
1079                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1080                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1081                {
1082                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1083                }
1084                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1085                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1086                }
1087            }
1088
1089            next_offset += envelope_size;
1090
1091            // Decode the remaining unknown envelopes.
1092            while next_offset < end_offset {
1093                _next_ordinal_to_read += 1;
1094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1095                next_offset += envelope_size;
1096            }
1097
1098            Ok(())
1099        }
1100    }
1101
1102    impl Edge {
1103        #[inline(always)]
1104        fn max_ordinal_present(&self) -> u64 {
1105            if let Some(_) = self.weight {
1106                return 3;
1107            }
1108            if let Some(_) = self.dst_node_id {
1109                return 2;
1110            }
1111            if let Some(_) = self.src_node_id {
1112                return 1;
1113            }
1114            0
1115        }
1116    }
1117
1118    impl fidl::encoding::ValueTypeMarker for Edge {
1119        type Borrowed<'a> = &'a Self;
1120        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1121            value
1122        }
1123    }
1124
1125    unsafe impl fidl::encoding::TypeMarker for Edge {
1126        type Owned = Self;
1127
1128        #[inline(always)]
1129        fn inline_align(_context: fidl::encoding::Context) -> usize {
1130            8
1131        }
1132
1133        #[inline(always)]
1134        fn inline_size(_context: fidl::encoding::Context) -> usize {
1135            16
1136        }
1137    }
1138
1139    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Edge, D> for &Edge {
1140        unsafe fn encode(
1141            self,
1142            encoder: &mut fidl::encoding::Encoder<'_, D>,
1143            offset: usize,
1144            mut depth: fidl::encoding::Depth,
1145        ) -> fidl::Result<()> {
1146            encoder.debug_check_bounds::<Edge>(offset);
1147            // Vector header
1148            let max_ordinal: u64 = self.max_ordinal_present();
1149            encoder.write_num(max_ordinal, offset);
1150            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1151            // Calling encoder.out_of_line_offset(0) is not allowed.
1152            if max_ordinal == 0 {
1153                return Ok(());
1154            }
1155            depth.increment()?;
1156            let envelope_size = 8;
1157            let bytes_len = max_ordinal as usize * envelope_size;
1158            #[allow(unused_variables)]
1159            let offset = encoder.out_of_line_offset(bytes_len);
1160            let mut _prev_end_offset: usize = 0;
1161            if 1 > max_ordinal {
1162                return Ok(());
1163            }
1164
1165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1166            // are envelope_size bytes.
1167            let cur_offset: usize = (1 - 1) * envelope_size;
1168
1169            // Zero reserved fields.
1170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1171
1172            // Safety:
1173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1175            //   envelope_size bytes, there is always sufficient room.
1176            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1177                self.src_node_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1178                encoder,
1179                offset + cur_offset,
1180                depth,
1181            )?;
1182
1183            _prev_end_offset = cur_offset + envelope_size;
1184            if 2 > max_ordinal {
1185                return Ok(());
1186            }
1187
1188            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1189            // are envelope_size bytes.
1190            let cur_offset: usize = (2 - 1) * envelope_size;
1191
1192            // Zero reserved fields.
1193            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1194
1195            // Safety:
1196            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1197            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1198            //   envelope_size bytes, there is always sufficient room.
1199            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1200                self.dst_node_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1201                encoder,
1202                offset + cur_offset,
1203                depth,
1204            )?;
1205
1206            _prev_end_offset = cur_offset + envelope_size;
1207            if 3 > max_ordinal {
1208                return Ok(());
1209            }
1210
1211            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1212            // are envelope_size bytes.
1213            let cur_offset: usize = (3 - 1) * envelope_size;
1214
1215            // Zero reserved fields.
1216            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1217
1218            // Safety:
1219            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1220            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1221            //   envelope_size bytes, there is always sufficient room.
1222            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1223                self.weight.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1224                encoder,
1225                offset + cur_offset,
1226                depth,
1227            )?;
1228
1229            _prev_end_offset = cur_offset + envelope_size;
1230
1231            Ok(())
1232        }
1233    }
1234
1235    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Edge {
1236        #[inline(always)]
1237        fn new_empty() -> Self {
1238            Self::default()
1239        }
1240
1241        unsafe fn decode(
1242            &mut self,
1243            decoder: &mut fidl::encoding::Decoder<'_, D>,
1244            offset: usize,
1245            mut depth: fidl::encoding::Depth,
1246        ) -> fidl::Result<()> {
1247            decoder.debug_check_bounds::<Self>(offset);
1248            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1249                None => return Err(fidl::Error::NotNullable),
1250                Some(len) => len,
1251            };
1252            // Calling decoder.out_of_line_offset(0) is not allowed.
1253            if len == 0 {
1254                return Ok(());
1255            };
1256            depth.increment()?;
1257            let envelope_size = 8;
1258            let bytes_len = len * envelope_size;
1259            let offset = decoder.out_of_line_offset(bytes_len)?;
1260            // Decode the envelope for each type.
1261            let mut _next_ordinal_to_read = 0;
1262            let mut next_offset = offset;
1263            let end_offset = offset + bytes_len;
1264            _next_ordinal_to_read += 1;
1265            if next_offset >= end_offset {
1266                return Ok(());
1267            }
1268
1269            // Decode unknown envelopes for gaps in ordinals.
1270            while _next_ordinal_to_read < 1 {
1271                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1272                _next_ordinal_to_read += 1;
1273                next_offset += envelope_size;
1274            }
1275
1276            let next_out_of_line = decoder.next_out_of_line();
1277            let handles_before = decoder.remaining_handles();
1278            if let Some((inlined, num_bytes, num_handles)) =
1279                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1280            {
1281                let member_inline_size =
1282                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1283                if inlined != (member_inline_size <= 4) {
1284                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1285                }
1286                let inner_offset;
1287                let mut inner_depth = depth.clone();
1288                if inlined {
1289                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1290                    inner_offset = next_offset;
1291                } else {
1292                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1293                    inner_depth.increment()?;
1294                }
1295                let val_ref = self.src_node_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1296                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1297                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1298                {
1299                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1300                }
1301                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1302                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1303                }
1304            }
1305
1306            next_offset += envelope_size;
1307            _next_ordinal_to_read += 1;
1308            if next_offset >= end_offset {
1309                return Ok(());
1310            }
1311
1312            // Decode unknown envelopes for gaps in ordinals.
1313            while _next_ordinal_to_read < 2 {
1314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1315                _next_ordinal_to_read += 1;
1316                next_offset += envelope_size;
1317            }
1318
1319            let next_out_of_line = decoder.next_out_of_line();
1320            let handles_before = decoder.remaining_handles();
1321            if let Some((inlined, num_bytes, num_handles)) =
1322                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1323            {
1324                let member_inline_size =
1325                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1326                if inlined != (member_inline_size <= 4) {
1327                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1328                }
1329                let inner_offset;
1330                let mut inner_depth = depth.clone();
1331                if inlined {
1332                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1333                    inner_offset = next_offset;
1334                } else {
1335                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1336                    inner_depth.increment()?;
1337                }
1338                let val_ref = self.dst_node_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1339                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1340                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1341                {
1342                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1343                }
1344                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1345                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1346                }
1347            }
1348
1349            next_offset += envelope_size;
1350            _next_ordinal_to_read += 1;
1351            if next_offset >= end_offset {
1352                return Ok(());
1353            }
1354
1355            // Decode unknown envelopes for gaps in ordinals.
1356            while _next_ordinal_to_read < 3 {
1357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1358                _next_ordinal_to_read += 1;
1359                next_offset += envelope_size;
1360            }
1361
1362            let next_out_of_line = decoder.next_out_of_line();
1363            let handles_before = decoder.remaining_handles();
1364            if let Some((inlined, num_bytes, num_handles)) =
1365                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1366            {
1367                let member_inline_size =
1368                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1369                if inlined != (member_inline_size <= 4) {
1370                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1371                }
1372                let inner_offset;
1373                let mut inner_depth = depth.clone();
1374                if inlined {
1375                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1376                    inner_offset = next_offset;
1377                } else {
1378                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1379                    inner_depth.increment()?;
1380                }
1381                let val_ref = self.weight.get_or_insert_with(|| fidl::new_empty!(u32, D));
1382                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1383                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1384                {
1385                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1386                }
1387                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1388                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1389                }
1390            }
1391
1392            next_offset += envelope_size;
1393
1394            // Decode the remaining unknown envelopes.
1395            while next_offset < end_offset {
1396                _next_ordinal_to_read += 1;
1397                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1398                next_offset += envelope_size;
1399            }
1400
1401            Ok(())
1402        }
1403    }
1404
1405    impl Metadata {
1406        #[inline(always)]
1407        fn max_ordinal_present(&self) -> u64 {
1408            if let Some(_) = self.paths {
1409                return 1;
1410            }
1411            0
1412        }
1413    }
1414
1415    impl fidl::encoding::ValueTypeMarker for Metadata {
1416        type Borrowed<'a> = &'a Self;
1417        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1418            value
1419        }
1420    }
1421
1422    unsafe impl fidl::encoding::TypeMarker for Metadata {
1423        type Owned = Self;
1424
1425        #[inline(always)]
1426        fn inline_align(_context: fidl::encoding::Context) -> usize {
1427            8
1428        }
1429
1430        #[inline(always)]
1431        fn inline_size(_context: fidl::encoding::Context) -> usize {
1432            16
1433        }
1434    }
1435
1436    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Metadata, D> for &Metadata {
1437        unsafe fn encode(
1438            self,
1439            encoder: &mut fidl::encoding::Encoder<'_, D>,
1440            offset: usize,
1441            mut depth: fidl::encoding::Depth,
1442        ) -> fidl::Result<()> {
1443            encoder.debug_check_bounds::<Metadata>(offset);
1444            // Vector header
1445            let max_ordinal: u64 = self.max_ordinal_present();
1446            encoder.write_num(max_ordinal, offset);
1447            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1448            // Calling encoder.out_of_line_offset(0) is not allowed.
1449            if max_ordinal == 0 {
1450                return Ok(());
1451            }
1452            depth.increment()?;
1453            let envelope_size = 8;
1454            let bytes_len = max_ordinal as usize * envelope_size;
1455            #[allow(unused_variables)]
1456            let offset = encoder.out_of_line_offset(bytes_len);
1457            let mut _prev_end_offset: usize = 0;
1458            if 1 > max_ordinal {
1459                return Ok(());
1460            }
1461
1462            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1463            // are envelope_size bytes.
1464            let cur_offset: usize = (1 - 1) * envelope_size;
1465
1466            // Zero reserved fields.
1467            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1468
1469            // Safety:
1470            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1471            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1472            //   envelope_size bytes, there is always sufficient room.
1473            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<PathEndpoints>, D>(
1474            self.paths.as_ref().map(<fidl::encoding::UnboundedVector<PathEndpoints> as fidl::encoding::ValueTypeMarker>::borrow),
1475            encoder, offset + cur_offset, depth
1476        )?;
1477
1478            _prev_end_offset = cur_offset + envelope_size;
1479
1480            Ok(())
1481        }
1482    }
1483
1484    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Metadata {
1485        #[inline(always)]
1486        fn new_empty() -> Self {
1487            Self::default()
1488        }
1489
1490        unsafe fn decode(
1491            &mut self,
1492            decoder: &mut fidl::encoding::Decoder<'_, D>,
1493            offset: usize,
1494            mut depth: fidl::encoding::Depth,
1495        ) -> fidl::Result<()> {
1496            decoder.debug_check_bounds::<Self>(offset);
1497            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1498                None => return Err(fidl::Error::NotNullable),
1499                Some(len) => len,
1500            };
1501            // Calling decoder.out_of_line_offset(0) is not allowed.
1502            if len == 0 {
1503                return Ok(());
1504            };
1505            depth.increment()?;
1506            let envelope_size = 8;
1507            let bytes_len = len * envelope_size;
1508            let offset = decoder.out_of_line_offset(bytes_len)?;
1509            // Decode the envelope for each type.
1510            let mut _next_ordinal_to_read = 0;
1511            let mut next_offset = offset;
1512            let end_offset = offset + bytes_len;
1513            _next_ordinal_to_read += 1;
1514            if next_offset >= end_offset {
1515                return Ok(());
1516            }
1517
1518            // Decode unknown envelopes for gaps in ordinals.
1519            while _next_ordinal_to_read < 1 {
1520                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1521                _next_ordinal_to_read += 1;
1522                next_offset += envelope_size;
1523            }
1524
1525            let next_out_of_line = decoder.next_out_of_line();
1526            let handles_before = decoder.remaining_handles();
1527            if let Some((inlined, num_bytes, num_handles)) =
1528                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1529            {
1530                let member_inline_size = <fidl::encoding::UnboundedVector<PathEndpoints> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1531                if inlined != (member_inline_size <= 4) {
1532                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1533                }
1534                let inner_offset;
1535                let mut inner_depth = depth.clone();
1536                if inlined {
1537                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1538                    inner_offset = next_offset;
1539                } else {
1540                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1541                    inner_depth.increment()?;
1542                }
1543                let val_ref = self.paths.get_or_insert_with(|| {
1544                    fidl::new_empty!(fidl::encoding::UnboundedVector<PathEndpoints>, D)
1545                });
1546                fidl::decode!(
1547                    fidl::encoding::UnboundedVector<PathEndpoints>,
1548                    D,
1549                    val_ref,
1550                    decoder,
1551                    inner_offset,
1552                    inner_depth
1553                )?;
1554                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1555                {
1556                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1557                }
1558                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1559                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1560                }
1561            }
1562
1563            next_offset += envelope_size;
1564
1565            // Decode the remaining unknown envelopes.
1566            while next_offset < end_offset {
1567                _next_ordinal_to_read += 1;
1568                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1569                next_offset += envelope_size;
1570            }
1571
1572            Ok(())
1573        }
1574    }
1575
1576    impl Node {
1577        #[inline(always)]
1578        fn max_ordinal_present(&self) -> u64 {
1579            if let Some(_) = self.initial_peak_bandwidth_bps {
1580                return 5;
1581            }
1582            if let Some(_) = self.initial_avg_bandwidth_bps {
1583                return 4;
1584            }
1585            if let Some(_) = self.interconnect_name {
1586                return 3;
1587            }
1588            if let Some(_) = self.name {
1589                return 2;
1590            }
1591            if let Some(_) = self.id {
1592                return 1;
1593            }
1594            0
1595        }
1596    }
1597
1598    impl fidl::encoding::ValueTypeMarker for Node {
1599        type Borrowed<'a> = &'a Self;
1600        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1601            value
1602        }
1603    }
1604
1605    unsafe impl fidl::encoding::TypeMarker for Node {
1606        type Owned = Self;
1607
1608        #[inline(always)]
1609        fn inline_align(_context: fidl::encoding::Context) -> usize {
1610            8
1611        }
1612
1613        #[inline(always)]
1614        fn inline_size(_context: fidl::encoding::Context) -> usize {
1615            16
1616        }
1617    }
1618
1619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Node, D> for &Node {
1620        unsafe fn encode(
1621            self,
1622            encoder: &mut fidl::encoding::Encoder<'_, D>,
1623            offset: usize,
1624            mut depth: fidl::encoding::Depth,
1625        ) -> fidl::Result<()> {
1626            encoder.debug_check_bounds::<Node>(offset);
1627            // Vector header
1628            let max_ordinal: u64 = self.max_ordinal_present();
1629            encoder.write_num(max_ordinal, offset);
1630            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1631            // Calling encoder.out_of_line_offset(0) is not allowed.
1632            if max_ordinal == 0 {
1633                return Ok(());
1634            }
1635            depth.increment()?;
1636            let envelope_size = 8;
1637            let bytes_len = max_ordinal as usize * envelope_size;
1638            #[allow(unused_variables)]
1639            let offset = encoder.out_of_line_offset(bytes_len);
1640            let mut _prev_end_offset: usize = 0;
1641            if 1 > max_ordinal {
1642                return Ok(());
1643            }
1644
1645            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1646            // are envelope_size bytes.
1647            let cur_offset: usize = (1 - 1) * envelope_size;
1648
1649            // Zero reserved fields.
1650            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1651
1652            // Safety:
1653            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1654            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1655            //   envelope_size bytes, there is always sufficient room.
1656            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1657                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1658                encoder,
1659                offset + cur_offset,
1660                depth,
1661            )?;
1662
1663            _prev_end_offset = cur_offset + envelope_size;
1664            if 2 > max_ordinal {
1665                return Ok(());
1666            }
1667
1668            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1669            // are envelope_size bytes.
1670            let cur_offset: usize = (2 - 1) * envelope_size;
1671
1672            // Zero reserved fields.
1673            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1674
1675            // Safety:
1676            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1677            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1678            //   envelope_size bytes, there is always sufficient room.
1679            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
1680                self.name.as_ref().map(
1681                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
1682                ),
1683                encoder,
1684                offset + cur_offset,
1685                depth,
1686            )?;
1687
1688            _prev_end_offset = cur_offset + envelope_size;
1689            if 3 > max_ordinal {
1690                return Ok(());
1691            }
1692
1693            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1694            // are envelope_size bytes.
1695            let cur_offset: usize = (3 - 1) * envelope_size;
1696
1697            // Zero reserved fields.
1698            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1699
1700            // Safety:
1701            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1702            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1703            //   envelope_size bytes, there is always sufficient room.
1704            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
1705                self.interconnect_name.as_ref().map(
1706                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
1707                ),
1708                encoder,
1709                offset + cur_offset,
1710                depth,
1711            )?;
1712
1713            _prev_end_offset = cur_offset + envelope_size;
1714            if 4 > max_ordinal {
1715                return Ok(());
1716            }
1717
1718            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1719            // are envelope_size bytes.
1720            let cur_offset: usize = (4 - 1) * envelope_size;
1721
1722            // Zero reserved fields.
1723            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1724
1725            // Safety:
1726            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1727            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1728            //   envelope_size bytes, there is always sufficient room.
1729            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1730                self.initial_avg_bandwidth_bps
1731                    .as_ref()
1732                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1733                encoder,
1734                offset + cur_offset,
1735                depth,
1736            )?;
1737
1738            _prev_end_offset = cur_offset + envelope_size;
1739            if 5 > max_ordinal {
1740                return Ok(());
1741            }
1742
1743            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1744            // are envelope_size bytes.
1745            let cur_offset: usize = (5 - 1) * envelope_size;
1746
1747            // Zero reserved fields.
1748            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1749
1750            // Safety:
1751            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1752            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1753            //   envelope_size bytes, there is always sufficient room.
1754            fidl::encoding::encode_in_envelope_optional::<u64, D>(
1755                self.initial_peak_bandwidth_bps
1756                    .as_ref()
1757                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
1758                encoder,
1759                offset + cur_offset,
1760                depth,
1761            )?;
1762
1763            _prev_end_offset = cur_offset + envelope_size;
1764
1765            Ok(())
1766        }
1767    }
1768
1769    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Node {
1770        #[inline(always)]
1771        fn new_empty() -> Self {
1772            Self::default()
1773        }
1774
1775        unsafe fn decode(
1776            &mut self,
1777            decoder: &mut fidl::encoding::Decoder<'_, D>,
1778            offset: usize,
1779            mut depth: fidl::encoding::Depth,
1780        ) -> fidl::Result<()> {
1781            decoder.debug_check_bounds::<Self>(offset);
1782            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1783                None => return Err(fidl::Error::NotNullable),
1784                Some(len) => len,
1785            };
1786            // Calling decoder.out_of_line_offset(0) is not allowed.
1787            if len == 0 {
1788                return Ok(());
1789            };
1790            depth.increment()?;
1791            let envelope_size = 8;
1792            let bytes_len = len * envelope_size;
1793            let offset = decoder.out_of_line_offset(bytes_len)?;
1794            // Decode the envelope for each type.
1795            let mut _next_ordinal_to_read = 0;
1796            let mut next_offset = offset;
1797            let end_offset = offset + bytes_len;
1798            _next_ordinal_to_read += 1;
1799            if next_offset >= end_offset {
1800                return Ok(());
1801            }
1802
1803            // Decode unknown envelopes for gaps in ordinals.
1804            while _next_ordinal_to_read < 1 {
1805                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1806                _next_ordinal_to_read += 1;
1807                next_offset += envelope_size;
1808            }
1809
1810            let next_out_of_line = decoder.next_out_of_line();
1811            let handles_before = decoder.remaining_handles();
1812            if let Some((inlined, num_bytes, num_handles)) =
1813                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1814            {
1815                let member_inline_size =
1816                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1817                if inlined != (member_inline_size <= 4) {
1818                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1819                }
1820                let inner_offset;
1821                let mut inner_depth = depth.clone();
1822                if inlined {
1823                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1824                    inner_offset = next_offset;
1825                } else {
1826                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1827                    inner_depth.increment()?;
1828                }
1829                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1830                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1832                {
1833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1834                }
1835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1837                }
1838            }
1839
1840            next_offset += envelope_size;
1841            _next_ordinal_to_read += 1;
1842            if next_offset >= end_offset {
1843                return Ok(());
1844            }
1845
1846            // Decode unknown envelopes for gaps in ordinals.
1847            while _next_ordinal_to_read < 2 {
1848                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1849                _next_ordinal_to_read += 1;
1850                next_offset += envelope_size;
1851            }
1852
1853            let next_out_of_line = decoder.next_out_of_line();
1854            let handles_before = decoder.remaining_handles();
1855            if let Some((inlined, num_bytes, num_handles)) =
1856                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1857            {
1858                let member_inline_size =
1859                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
1860                        decoder.context,
1861                    );
1862                if inlined != (member_inline_size <= 4) {
1863                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1864                }
1865                let inner_offset;
1866                let mut inner_depth = depth.clone();
1867                if inlined {
1868                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1869                    inner_offset = next_offset;
1870                } else {
1871                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1872                    inner_depth.increment()?;
1873                }
1874                let val_ref = self
1875                    .name
1876                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
1877                fidl::decode!(
1878                    fidl::encoding::BoundedString<64>,
1879                    D,
1880                    val_ref,
1881                    decoder,
1882                    inner_offset,
1883                    inner_depth
1884                )?;
1885                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1886                {
1887                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1888                }
1889                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1890                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1891                }
1892            }
1893
1894            next_offset += envelope_size;
1895            _next_ordinal_to_read += 1;
1896            if next_offset >= end_offset {
1897                return Ok(());
1898            }
1899
1900            // Decode unknown envelopes for gaps in ordinals.
1901            while _next_ordinal_to_read < 3 {
1902                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1903                _next_ordinal_to_read += 1;
1904                next_offset += envelope_size;
1905            }
1906
1907            let next_out_of_line = decoder.next_out_of_line();
1908            let handles_before = decoder.remaining_handles();
1909            if let Some((inlined, num_bytes, num_handles)) =
1910                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1911            {
1912                let member_inline_size =
1913                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
1914                        decoder.context,
1915                    );
1916                if inlined != (member_inline_size <= 4) {
1917                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1918                }
1919                let inner_offset;
1920                let mut inner_depth = depth.clone();
1921                if inlined {
1922                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1923                    inner_offset = next_offset;
1924                } else {
1925                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1926                    inner_depth.increment()?;
1927                }
1928                let val_ref = self
1929                    .interconnect_name
1930                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
1931                fidl::decode!(
1932                    fidl::encoding::BoundedString<64>,
1933                    D,
1934                    val_ref,
1935                    decoder,
1936                    inner_offset,
1937                    inner_depth
1938                )?;
1939                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1940                {
1941                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1942                }
1943                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1944                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1945                }
1946            }
1947
1948            next_offset += envelope_size;
1949            _next_ordinal_to_read += 1;
1950            if next_offset >= end_offset {
1951                return Ok(());
1952            }
1953
1954            // Decode unknown envelopes for gaps in ordinals.
1955            while _next_ordinal_to_read < 4 {
1956                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1957                _next_ordinal_to_read += 1;
1958                next_offset += envelope_size;
1959            }
1960
1961            let next_out_of_line = decoder.next_out_of_line();
1962            let handles_before = decoder.remaining_handles();
1963            if let Some((inlined, num_bytes, num_handles)) =
1964                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1965            {
1966                let member_inline_size =
1967                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1968                if inlined != (member_inline_size <= 4) {
1969                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1970                }
1971                let inner_offset;
1972                let mut inner_depth = depth.clone();
1973                if inlined {
1974                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1975                    inner_offset = next_offset;
1976                } else {
1977                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1978                    inner_depth.increment()?;
1979                }
1980                let val_ref =
1981                    self.initial_avg_bandwidth_bps.get_or_insert_with(|| fidl::new_empty!(u64, D));
1982                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
1983                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1984                {
1985                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1986                }
1987                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1988                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1989                }
1990            }
1991
1992            next_offset += envelope_size;
1993            _next_ordinal_to_read += 1;
1994            if next_offset >= end_offset {
1995                return Ok(());
1996            }
1997
1998            // Decode unknown envelopes for gaps in ordinals.
1999            while _next_ordinal_to_read < 5 {
2000                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2001                _next_ordinal_to_read += 1;
2002                next_offset += envelope_size;
2003            }
2004
2005            let next_out_of_line = decoder.next_out_of_line();
2006            let handles_before = decoder.remaining_handles();
2007            if let Some((inlined, num_bytes, num_handles)) =
2008                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2009            {
2010                let member_inline_size =
2011                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2012                if inlined != (member_inline_size <= 4) {
2013                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2014                }
2015                let inner_offset;
2016                let mut inner_depth = depth.clone();
2017                if inlined {
2018                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2019                    inner_offset = next_offset;
2020                } else {
2021                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2022                    inner_depth.increment()?;
2023                }
2024                let val_ref =
2025                    self.initial_peak_bandwidth_bps.get_or_insert_with(|| fidl::new_empty!(u64, D));
2026                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2027                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2028                {
2029                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2030                }
2031                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2032                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2033                }
2034            }
2035
2036            next_offset += envelope_size;
2037
2038            // Decode the remaining unknown envelopes.
2039            while next_offset < end_offset {
2040                _next_ordinal_to_read += 1;
2041                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2042                next_offset += envelope_size;
2043            }
2044
2045            Ok(())
2046        }
2047    }
2048
2049    impl NodeBandwidth {
2050        #[inline(always)]
2051        fn max_ordinal_present(&self) -> u64 {
2052            if let Some(_) = self.requests {
2053                return 2;
2054            }
2055            if let Some(_) = self.node_id {
2056                return 1;
2057            }
2058            0
2059        }
2060    }
2061
2062    impl fidl::encoding::ValueTypeMarker for NodeBandwidth {
2063        type Borrowed<'a> = &'a Self;
2064        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2065            value
2066        }
2067    }
2068
2069    unsafe impl fidl::encoding::TypeMarker for NodeBandwidth {
2070        type Owned = Self;
2071
2072        #[inline(always)]
2073        fn inline_align(_context: fidl::encoding::Context) -> usize {
2074            8
2075        }
2076
2077        #[inline(always)]
2078        fn inline_size(_context: fidl::encoding::Context) -> usize {
2079            16
2080        }
2081    }
2082
2083    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeBandwidth, D>
2084        for &NodeBandwidth
2085    {
2086        unsafe fn encode(
2087            self,
2088            encoder: &mut fidl::encoding::Encoder<'_, D>,
2089            offset: usize,
2090            mut depth: fidl::encoding::Depth,
2091        ) -> fidl::Result<()> {
2092            encoder.debug_check_bounds::<NodeBandwidth>(offset);
2093            // Vector header
2094            let max_ordinal: u64 = self.max_ordinal_present();
2095            encoder.write_num(max_ordinal, offset);
2096            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2097            // Calling encoder.out_of_line_offset(0) is not allowed.
2098            if max_ordinal == 0 {
2099                return Ok(());
2100            }
2101            depth.increment()?;
2102            let envelope_size = 8;
2103            let bytes_len = max_ordinal as usize * envelope_size;
2104            #[allow(unused_variables)]
2105            let offset = encoder.out_of_line_offset(bytes_len);
2106            let mut _prev_end_offset: usize = 0;
2107            if 1 > max_ordinal {
2108                return Ok(());
2109            }
2110
2111            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2112            // are envelope_size bytes.
2113            let cur_offset: usize = (1 - 1) * envelope_size;
2114
2115            // Zero reserved fields.
2116            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2117
2118            // Safety:
2119            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2120            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2121            //   envelope_size bytes, there is always sufficient room.
2122            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2123                self.node_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2124                encoder,
2125                offset + cur_offset,
2126                depth,
2127            )?;
2128
2129            _prev_end_offset = cur_offset + envelope_size;
2130            if 2 > max_ordinal {
2131                return Ok(());
2132            }
2133
2134            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2135            // are envelope_size bytes.
2136            let cur_offset: usize = (2 - 1) * envelope_size;
2137
2138            // Zero reserved fields.
2139            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2140
2141            // Safety:
2142            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2143            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2144            //   envelope_size bytes, there is always sufficient room.
2145            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<BandwidthRequest, 64>, D>(
2146            self.requests.as_ref().map(<fidl::encoding::Vector<BandwidthRequest, 64> as fidl::encoding::ValueTypeMarker>::borrow),
2147            encoder, offset + cur_offset, depth
2148        )?;
2149
2150            _prev_end_offset = cur_offset + envelope_size;
2151
2152            Ok(())
2153        }
2154    }
2155
2156    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeBandwidth {
2157        #[inline(always)]
2158        fn new_empty() -> Self {
2159            Self::default()
2160        }
2161
2162        unsafe fn decode(
2163            &mut self,
2164            decoder: &mut fidl::encoding::Decoder<'_, D>,
2165            offset: usize,
2166            mut depth: fidl::encoding::Depth,
2167        ) -> fidl::Result<()> {
2168            decoder.debug_check_bounds::<Self>(offset);
2169            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2170                None => return Err(fidl::Error::NotNullable),
2171                Some(len) => len,
2172            };
2173            // Calling decoder.out_of_line_offset(0) is not allowed.
2174            if len == 0 {
2175                return Ok(());
2176            };
2177            depth.increment()?;
2178            let envelope_size = 8;
2179            let bytes_len = len * envelope_size;
2180            let offset = decoder.out_of_line_offset(bytes_len)?;
2181            // Decode the envelope for each type.
2182            let mut _next_ordinal_to_read = 0;
2183            let mut next_offset = offset;
2184            let end_offset = offset + bytes_len;
2185            _next_ordinal_to_read += 1;
2186            if next_offset >= end_offset {
2187                return Ok(());
2188            }
2189
2190            // Decode unknown envelopes for gaps in ordinals.
2191            while _next_ordinal_to_read < 1 {
2192                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2193                _next_ordinal_to_read += 1;
2194                next_offset += envelope_size;
2195            }
2196
2197            let next_out_of_line = decoder.next_out_of_line();
2198            let handles_before = decoder.remaining_handles();
2199            if let Some((inlined, num_bytes, num_handles)) =
2200                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2201            {
2202                let member_inline_size =
2203                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2204                if inlined != (member_inline_size <= 4) {
2205                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2206                }
2207                let inner_offset;
2208                let mut inner_depth = depth.clone();
2209                if inlined {
2210                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2211                    inner_offset = next_offset;
2212                } else {
2213                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2214                    inner_depth.increment()?;
2215                }
2216                let val_ref = self.node_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2217                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2218                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2219                {
2220                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2221                }
2222                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2223                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2224                }
2225            }
2226
2227            next_offset += envelope_size;
2228            _next_ordinal_to_read += 1;
2229            if next_offset >= end_offset {
2230                return Ok(());
2231            }
2232
2233            // Decode unknown envelopes for gaps in ordinals.
2234            while _next_ordinal_to_read < 2 {
2235                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2236                _next_ordinal_to_read += 1;
2237                next_offset += envelope_size;
2238            }
2239
2240            let next_out_of_line = decoder.next_out_of_line();
2241            let handles_before = decoder.remaining_handles();
2242            if let Some((inlined, num_bytes, num_handles)) =
2243                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2244            {
2245                let member_inline_size = <fidl::encoding::Vector<BandwidthRequest, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2246                if inlined != (member_inline_size <= 4) {
2247                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2248                }
2249                let inner_offset;
2250                let mut inner_depth = depth.clone();
2251                if inlined {
2252                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2253                    inner_offset = next_offset;
2254                } else {
2255                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2256                    inner_depth.increment()?;
2257                }
2258                let val_ref = self.requests.get_or_insert_with(
2259                    || fidl::new_empty!(fidl::encoding::Vector<BandwidthRequest, 64>, D),
2260                );
2261                fidl::decode!(fidl::encoding::Vector<BandwidthRequest, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
2262                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2263                {
2264                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2265                }
2266                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2267                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2268                }
2269            }
2270
2271            next_offset += envelope_size;
2272
2273            // Decode the remaining unknown envelopes.
2274            while next_offset < end_offset {
2275                _next_ordinal_to_read += 1;
2276                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2277                next_offset += envelope_size;
2278            }
2279
2280            Ok(())
2281        }
2282    }
2283
2284    impl PathEndpoints {
2285        #[inline(always)]
2286        fn max_ordinal_present(&self) -> u64 {
2287            if let Some(_) = self.dst_node_id {
2288                return 4;
2289            }
2290            if let Some(_) = self.src_node_id {
2291                return 3;
2292            }
2293            if let Some(_) = self.id {
2294                return 2;
2295            }
2296            if let Some(_) = self.name {
2297                return 1;
2298            }
2299            0
2300        }
2301    }
2302
2303    impl fidl::encoding::ValueTypeMarker for PathEndpoints {
2304        type Borrowed<'a> = &'a Self;
2305        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2306            value
2307        }
2308    }
2309
2310    unsafe impl fidl::encoding::TypeMarker for PathEndpoints {
2311        type Owned = Self;
2312
2313        #[inline(always)]
2314        fn inline_align(_context: fidl::encoding::Context) -> usize {
2315            8
2316        }
2317
2318        #[inline(always)]
2319        fn inline_size(_context: fidl::encoding::Context) -> usize {
2320            16
2321        }
2322    }
2323
2324    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<PathEndpoints, D>
2325        for &PathEndpoints
2326    {
2327        unsafe fn encode(
2328            self,
2329            encoder: &mut fidl::encoding::Encoder<'_, D>,
2330            offset: usize,
2331            mut depth: fidl::encoding::Depth,
2332        ) -> fidl::Result<()> {
2333            encoder.debug_check_bounds::<PathEndpoints>(offset);
2334            // Vector header
2335            let max_ordinal: u64 = self.max_ordinal_present();
2336            encoder.write_num(max_ordinal, offset);
2337            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2338            // Calling encoder.out_of_line_offset(0) is not allowed.
2339            if max_ordinal == 0 {
2340                return Ok(());
2341            }
2342            depth.increment()?;
2343            let envelope_size = 8;
2344            let bytes_len = max_ordinal as usize * envelope_size;
2345            #[allow(unused_variables)]
2346            let offset = encoder.out_of_line_offset(bytes_len);
2347            let mut _prev_end_offset: usize = 0;
2348            if 1 > max_ordinal {
2349                return Ok(());
2350            }
2351
2352            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2353            // are envelope_size bytes.
2354            let cur_offset: usize = (1 - 1) * envelope_size;
2355
2356            // Zero reserved fields.
2357            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2358
2359            // Safety:
2360            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2361            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2362            //   envelope_size bytes, there is always sufficient room.
2363            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<64>, D>(
2364                self.name.as_ref().map(
2365                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow,
2366                ),
2367                encoder,
2368                offset + cur_offset,
2369                depth,
2370            )?;
2371
2372            _prev_end_offset = cur_offset + envelope_size;
2373            if 2 > max_ordinal {
2374                return Ok(());
2375            }
2376
2377            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2378            // are envelope_size bytes.
2379            let cur_offset: usize = (2 - 1) * envelope_size;
2380
2381            // Zero reserved fields.
2382            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2383
2384            // Safety:
2385            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2386            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2387            //   envelope_size bytes, there is always sufficient room.
2388            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2389                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2390                encoder,
2391                offset + cur_offset,
2392                depth,
2393            )?;
2394
2395            _prev_end_offset = cur_offset + envelope_size;
2396            if 3 > max_ordinal {
2397                return Ok(());
2398            }
2399
2400            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2401            // are envelope_size bytes.
2402            let cur_offset: usize = (3 - 1) * envelope_size;
2403
2404            // Zero reserved fields.
2405            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2406
2407            // Safety:
2408            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2409            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2410            //   envelope_size bytes, there is always sufficient room.
2411            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2412                self.src_node_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2413                encoder,
2414                offset + cur_offset,
2415                depth,
2416            )?;
2417
2418            _prev_end_offset = cur_offset + envelope_size;
2419            if 4 > max_ordinal {
2420                return Ok(());
2421            }
2422
2423            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2424            // are envelope_size bytes.
2425            let cur_offset: usize = (4 - 1) * envelope_size;
2426
2427            // Zero reserved fields.
2428            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2429
2430            // Safety:
2431            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2432            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2433            //   envelope_size bytes, there is always sufficient room.
2434            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2435                self.dst_node_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2436                encoder,
2437                offset + cur_offset,
2438                depth,
2439            )?;
2440
2441            _prev_end_offset = cur_offset + envelope_size;
2442
2443            Ok(())
2444        }
2445    }
2446
2447    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PathEndpoints {
2448        #[inline(always)]
2449        fn new_empty() -> Self {
2450            Self::default()
2451        }
2452
2453        unsafe fn decode(
2454            &mut self,
2455            decoder: &mut fidl::encoding::Decoder<'_, D>,
2456            offset: usize,
2457            mut depth: fidl::encoding::Depth,
2458        ) -> fidl::Result<()> {
2459            decoder.debug_check_bounds::<Self>(offset);
2460            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2461                None => return Err(fidl::Error::NotNullable),
2462                Some(len) => len,
2463            };
2464            // Calling decoder.out_of_line_offset(0) is not allowed.
2465            if len == 0 {
2466                return Ok(());
2467            };
2468            depth.increment()?;
2469            let envelope_size = 8;
2470            let bytes_len = len * envelope_size;
2471            let offset = decoder.out_of_line_offset(bytes_len)?;
2472            // Decode the envelope for each type.
2473            let mut _next_ordinal_to_read = 0;
2474            let mut next_offset = offset;
2475            let end_offset = offset + bytes_len;
2476            _next_ordinal_to_read += 1;
2477            if next_offset >= end_offset {
2478                return Ok(());
2479            }
2480
2481            // Decode unknown envelopes for gaps in ordinals.
2482            while _next_ordinal_to_read < 1 {
2483                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2484                _next_ordinal_to_read += 1;
2485                next_offset += envelope_size;
2486            }
2487
2488            let next_out_of_line = decoder.next_out_of_line();
2489            let handles_before = decoder.remaining_handles();
2490            if let Some((inlined, num_bytes, num_handles)) =
2491                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2492            {
2493                let member_inline_size =
2494                    <fidl::encoding::BoundedString<64> as fidl::encoding::TypeMarker>::inline_size(
2495                        decoder.context,
2496                    );
2497                if inlined != (member_inline_size <= 4) {
2498                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2499                }
2500                let inner_offset;
2501                let mut inner_depth = depth.clone();
2502                if inlined {
2503                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2504                    inner_offset = next_offset;
2505                } else {
2506                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2507                    inner_depth.increment()?;
2508                }
2509                let val_ref = self
2510                    .name
2511                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<64>, D));
2512                fidl::decode!(
2513                    fidl::encoding::BoundedString<64>,
2514                    D,
2515                    val_ref,
2516                    decoder,
2517                    inner_offset,
2518                    inner_depth
2519                )?;
2520                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2521                {
2522                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2523                }
2524                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2525                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2526                }
2527            }
2528
2529            next_offset += envelope_size;
2530            _next_ordinal_to_read += 1;
2531            if next_offset >= end_offset {
2532                return Ok(());
2533            }
2534
2535            // Decode unknown envelopes for gaps in ordinals.
2536            while _next_ordinal_to_read < 2 {
2537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2538                _next_ordinal_to_read += 1;
2539                next_offset += envelope_size;
2540            }
2541
2542            let next_out_of_line = decoder.next_out_of_line();
2543            let handles_before = decoder.remaining_handles();
2544            if let Some((inlined, num_bytes, num_handles)) =
2545                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2546            {
2547                let member_inline_size =
2548                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2549                if inlined != (member_inline_size <= 4) {
2550                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2551                }
2552                let inner_offset;
2553                let mut inner_depth = depth.clone();
2554                if inlined {
2555                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2556                    inner_offset = next_offset;
2557                } else {
2558                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2559                    inner_depth.increment()?;
2560                }
2561                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2562                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2563                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2564                {
2565                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2566                }
2567                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2568                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2569                }
2570            }
2571
2572            next_offset += envelope_size;
2573            _next_ordinal_to_read += 1;
2574            if next_offset >= end_offset {
2575                return Ok(());
2576            }
2577
2578            // Decode unknown envelopes for gaps in ordinals.
2579            while _next_ordinal_to_read < 3 {
2580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2581                _next_ordinal_to_read += 1;
2582                next_offset += envelope_size;
2583            }
2584
2585            let next_out_of_line = decoder.next_out_of_line();
2586            let handles_before = decoder.remaining_handles();
2587            if let Some((inlined, num_bytes, num_handles)) =
2588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2589            {
2590                let member_inline_size =
2591                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2592                if inlined != (member_inline_size <= 4) {
2593                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2594                }
2595                let inner_offset;
2596                let mut inner_depth = depth.clone();
2597                if inlined {
2598                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2599                    inner_offset = next_offset;
2600                } else {
2601                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2602                    inner_depth.increment()?;
2603                }
2604                let val_ref = self.src_node_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2605                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2606                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2607                {
2608                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2609                }
2610                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2611                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2612                }
2613            }
2614
2615            next_offset += envelope_size;
2616            _next_ordinal_to_read += 1;
2617            if next_offset >= end_offset {
2618                return Ok(());
2619            }
2620
2621            // Decode unknown envelopes for gaps in ordinals.
2622            while _next_ordinal_to_read < 4 {
2623                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2624                _next_ordinal_to_read += 1;
2625                next_offset += envelope_size;
2626            }
2627
2628            let next_out_of_line = decoder.next_out_of_line();
2629            let handles_before = decoder.remaining_handles();
2630            if let Some((inlined, num_bytes, num_handles)) =
2631                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2632            {
2633                let member_inline_size =
2634                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2635                if inlined != (member_inline_size <= 4) {
2636                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2637                }
2638                let inner_offset;
2639                let mut inner_depth = depth.clone();
2640                if inlined {
2641                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2642                    inner_offset = next_offset;
2643                } else {
2644                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2645                    inner_depth.increment()?;
2646                }
2647                let val_ref = self.dst_node_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2648                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2649                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2650                {
2651                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2652                }
2653                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2654                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2655                }
2656            }
2657
2658            next_offset += envelope_size;
2659
2660            // Decode the remaining unknown envelopes.
2661            while next_offset < end_offset {
2662                _next_ordinal_to_read += 1;
2663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2664                next_offset += envelope_size;
2665            }
2666
2667            Ok(())
2668        }
2669    }
2670}