fidl_fuchsia_hardware_interconnect__common/
fidl_fuchsia_hardware_interconnect__common.rs

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