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