Skip to main content

fidl_fuchsia_driver_development_common/
fidl_fuchsia_driver_development_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
11pub const BINDING_RESULT_MAX: u8 = 10;
12
13pub const BINDING_RESULT_MAX_2: u32 = 256;
14
15pub const HASH_LENGTH: u8 = 64;
16
17pub const MAX_SEGMENTS: u32 = 20;
18
19pub const NODE_MONIKER_MAX: u32 = 1024;
20
21pub const POWER_TOKEN_OVERRIDES_MAX: u8 = 16;
22
23bitflags! {
24    /// These flags indicate when a |fuchsia.driver.index.DriverIndex::MatchDriver| call should be
25    /// made for a node that is restarting in order to find a new driver, instead of reusing the driver
26    /// that was previously bound to the node.
27    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
28    pub struct RestartRematchFlags: u32 {
29        /// Rematch nodes that are currently bound to the requested driver. The requested driver is
30        /// the driver url that the restart operation was initiated for.
31        const REQUESTED = 1;
32        /// Rematch nodes that are currently bound to a driver other than the requested driver. These
33        /// are nodes that are affected by the restart of the requested driver, for example when
34        /// it is a colocated parent.
35        const NON_REQUESTED = 2;
36        /// Rematch nodes that are created as part of a completed composite spec.
37        const COMPOSITE_SPEC = 8;
38    }
39}
40
41impl RestartRematchFlags {
42    #[inline(always)]
43    pub fn from_bits_allow_unknown(bits: u32) -> Self {
44        Self::from_bits_retain(bits)
45    }
46
47    #[inline(always)]
48    pub fn has_unknown_bits(&self) -> bool {
49        self.get_unknown_bits() != 0
50    }
51
52    #[inline(always)]
53    pub fn get_unknown_bits(&self) -> u32 {
54        self.bits() & !Self::all().bits()
55    }
56}
57
58#[derive(Clone, Debug, PartialEq)]
59pub struct CompositeInfoIteratorGetNextResponse {
60    pub composites: Vec<CompositeNodeInfo>,
61}
62
63impl fidl::Persistable for CompositeInfoIteratorGetNextResponse {}
64
65#[derive(Clone, Debug, PartialEq)]
66pub struct CompositeNodeSpecIteratorGetNextResponse {
67    pub specs: Vec<fidl_fuchsia_driver_framework_common::CompositeInfo>,
68}
69
70impl fidl::Persistable for CompositeNodeSpecIteratorGetNextResponse {}
71
72#[derive(Clone, Debug, PartialEq)]
73pub struct DriverHostInfoIteratorGetNextResponse {
74    pub driver_hosts: Vec<DriverHostInfo>,
75}
76
77impl fidl::Persistable for DriverHostInfoIteratorGetNextResponse {}
78
79#[derive(Clone, Debug, PartialEq)]
80pub struct DriverInfoIteratorGetNextResponse {
81    pub drivers: Vec<fidl_fuchsia_driver_framework_common::DriverInfo>,
82}
83
84impl fidl::Persistable for DriverInfoIteratorGetNextResponse {}
85
86#[derive(Clone, Debug, PartialEq)]
87pub struct ManagerAddTestNodeRequest {
88    pub args: TestNodeAddArgs,
89}
90
91impl fidl::Persistable for ManagerAddTestNodeRequest {}
92
93#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
94pub struct ManagerDisableDriverRequest {
95    pub driver_url: String,
96    pub package_hash: Option<String>,
97}
98
99impl fidl::Persistable for ManagerDisableDriverRequest {}
100
101#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
102pub struct ManagerEnableDriverRequest {
103    pub driver_url: String,
104    pub package_hash: Option<String>,
105}
106
107impl fidl::Persistable for ManagerEnableDriverRequest {}
108
109#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
110pub struct ManagerRebindCompositesWithDriverRequest {
111    pub driver_url: String,
112}
113
114impl fidl::Persistable for ManagerRebindCompositesWithDriverRequest {}
115
116#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
117pub struct ManagerRemoveTestNodeRequest {
118    pub name: String,
119}
120
121impl fidl::Persistable for ManagerRemoveTestNodeRequest {}
122
123#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
124pub struct ManagerRestartDriverHostsRequest {
125    pub driver_url: String,
126    pub rematch_flags: RestartRematchFlags,
127}
128
129impl fidl::Persistable for ManagerRestartDriverHostsRequest {}
130
131#[derive(Clone, Debug, PartialEq)]
132pub struct ManagerBindAllUnboundNodes2Response {
133    /// List of new bindings that happened as a result of this.
134    pub binding_result: Vec<NodeBindingInfo>,
135}
136
137impl fidl::Persistable for ManagerBindAllUnboundNodes2Response {}
138
139#[derive(Clone, Debug, PartialEq)]
140pub struct ManagerBindAllUnboundNodesResponse {
141    /// List of new bindings that happened as a result of this.
142    pub binding_result: Vec<NodeBindingInfo>,
143}
144
145impl fidl::Persistable for ManagerBindAllUnboundNodesResponse {}
146
147#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
148#[repr(C)]
149pub struct ManagerRebindCompositesWithDriverResponse {
150    pub count: u32,
151}
152
153impl fidl::Persistable for ManagerRebindCompositesWithDriverResponse {}
154
155#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
156#[repr(C)]
157pub struct ManagerRestartDriverHostsResponse {
158    pub count: u32,
159}
160
161impl fidl::Persistable for ManagerRestartDriverHostsResponse {}
162
163#[derive(Clone, Debug, PartialEq)]
164pub struct NodeInfoIteratorGetNextResponse {
165    pub nodes: Vec<NodeInfo>,
166}
167
168impl fidl::Persistable for NodeInfoIteratorGetNextResponse {}
169
170/// Contains information for a composite node.
171#[derive(Clone, Debug, Default, PartialEq)]
172pub struct CompositeNodeInfo {
173    /// The topological paths of the parent nodes of this composite, ordered by index.
174    pub parent_topological_paths: Option<Vec<Option<String>>>,
175    /// The topological path of the created composite node. Empty if not created.
176    pub topological_path: Option<String>,
177    pub composite: Option<CompositeInfo>,
178    /// The monikers of the parent nodes of this composite, ordered by index.
179    pub parent_monikers: Option<Vec<Option<String>>>,
180    /// The moniker of the created composite node. Empty if not created.
181    pub moniker: Option<String>,
182    #[doc(hidden)]
183    pub __source_breaking: fidl::marker::SourceBreaking,
184}
185
186impl fidl::Persistable for CompositeNodeInfo {}
187
188/// Contains information for a dispatcher.
189#[derive(Clone, Debug, Default, PartialEq)]
190pub struct DispatcherInfo {
191    /// The driver which created this dispatcher.
192    pub driver: Option<String>,
193    /// The name of the dispatcher.
194    pub name: Option<String>,
195    /// The options the dispatcher was created with.
196    pub options: Option<u32>,
197    /// The scheduler role of the dispatcher.
198    pub scheduler_role: Option<String>,
199    #[doc(hidden)]
200    pub __source_breaking: fidl::marker::SourceBreaking,
201}
202
203impl fidl::Persistable for DispatcherInfo {}
204
205/// Contains information for a driver host.
206#[derive(Clone, Debug, Default, PartialEq)]
207pub struct DriverHostInfo {
208    /// The process KOID of the driver host.
209    pub process_koid: Option<u64>,
210    /// The list of threads of the driver host.
211    pub threads: Option<Vec<ThreadInfo>>,
212    /// List of drivers loaded into this driver host.
213    pub drivers: Option<Vec<String>>,
214    /// List of dispatchers .
215    pub dispatchers: Option<Vec<DispatcherInfo>>,
216    /// Optional name of the driver host.
217    pub name: Option<String>,
218    #[doc(hidden)]
219    pub __source_breaking: fidl::marker::SourceBreaking,
220}
221
222impl fidl::Persistable for DriverHostInfo {}
223
224/// Information about a node binding to either a driver or a composite.
225#[derive(Clone, Debug, Default, PartialEq)]
226pub struct NodeBindingInfo {
227    /// Full topological name of the node.
228    pub node_name: Option<String>,
229    /// This is the component url for the driver that bound to the node.
230    /// If this is present, then |composite_parents| must not be.
231    pub driver_url: Option<String>,
232    /// The composite parents that this node binded to.
233    /// If this is present, then |driver_url| must not be.
234    pub composite_parents: Option<Vec<fidl_fuchsia_driver_framework_common::CompositeParent>>,
235    #[doc(hidden)]
236    pub __source_breaking: fidl::marker::SourceBreaking,
237}
238
239impl fidl::Persistable for NodeBindingInfo {}
240
241#[derive(Clone, Debug, Default, PartialEq)]
242pub struct NodeInfo {
243    /// Unique ID identifying the node.
244    pub id: Option<u64>,
245    /// List of ids representing parents. If more than one, this is a composite node.
246    pub parent_ids: Option<Vec<u64>>,
247    /// List of ids representing children.
248    pub child_ids: Option<Vec<u64>>,
249    /// The process KOID of the driver host the driver resides within.
250    pub driver_host_koid: Option<u64>,
251    /// URL to the driver component manifest
252    pub bound_driver_url: Option<String>,
253    /// The collection-relative moniker of the node.
254    pub moniker: Option<String>,
255    /// Properties of the node.
256    pub node_property_list: Option<Vec<fidl_fuchsia_driver_framework_common::NodeProperty>>,
257    /// Component offers to the node.
258    pub offer_list: Option<Vec<fidl_fuchsia_component_decl_common::Offer>>,
259    /// Whether the node is in a quarantined state. That is, the |bound_driver_url| has failed to
260    /// start, and the node is no longer running its driver instance.
261    pub quarantined: Option<bool>,
262    /// Information about the node's bus topology.
263    pub bus_topology: Option<Vec<fidl_fuchsia_driver_framework_common::BusInfo>>,
264    /// The topological path of the node in devfs.
265    pub topological_path: Option<String>,
266    #[doc(hidden)]
267    pub __source_breaking: fidl::marker::SourceBreaking,
268}
269
270impl fidl::Persistable for NodeInfo {}
271
272#[derive(Clone, Debug, Default, PartialEq)]
273pub struct TestNodeAddArgs {
274    /// Name of the node.
275    pub name: Option<String>,
276    /// Properties of the node.
277    pub properties: Option<Vec<fidl_fuchsia_driver_framework_common::NodeProperty>>,
278    #[doc(hidden)]
279    pub __source_breaking: fidl::marker::SourceBreaking,
280}
281
282impl fidl::Persistable for TestNodeAddArgs {}
283
284/// Contains information for a thread.
285#[derive(Clone, Debug, Default, PartialEq)]
286pub struct ThreadInfo {
287    /// The koid for the thread.
288    pub koid: Option<u64>,
289    /// The name of the thread.
290    pub name: Option<String>,
291    /// The scheduler role of the thread.
292    pub scheduler_role: Option<String>,
293    #[doc(hidden)]
294    pub __source_breaking: fidl::marker::SourceBreaking,
295}
296
297impl fidl::Persistable for ThreadInfo {}
298
299/// Contains information for a composite.
300#[derive(Clone, Debug, PartialEq)]
301pub enum CompositeInfo {
302    Composite(fidl_fuchsia_driver_framework_common::CompositeInfo),
303}
304
305impl CompositeInfo {
306    #[inline]
307    pub fn ordinal(&self) -> u64 {
308        match *self {
309            Self::Composite(_) => 2,
310        }
311    }
312}
313
314impl fidl::Persistable for CompositeInfo {}
315
316pub mod composite_info_iterator_ordinals {
317    pub const GET_NEXT: u64 = 0x50af808a6e34bb96;
318}
319
320pub mod composite_node_spec_iterator_ordinals {
321    pub const GET_NEXT: u64 = 0x32fd110355479f71;
322}
323
324pub mod driver_host_info_iterator_ordinals {
325    pub const GET_NEXT: u64 = 0xbf58e5cd863a86;
326}
327
328pub mod driver_info_iterator_ordinals {
329    pub const GET_NEXT: u64 = 0x2c394711c6784952;
330}
331
332pub mod manager_ordinals {
333    pub const GET_DRIVER_INFO: u64 = 0x34b1541e24e5d587;
334    pub const GET_COMPOSITE_NODE_SPECS: u64 = 0x258540c7ff37328f;
335    pub const GET_NODE_INFO: u64 = 0x7c272c6b7bcb4f9e;
336    pub const GET_COMPOSITE_INFO: u64 = 0x4456da4372a49a36;
337    pub const GET_DRIVER_HOST_INFO: u64 = 0x366b2c4429d44155;
338    pub const RESTART_DRIVER_HOSTS: u64 = 0x64fb09a17a4dd8c7;
339    pub const DISABLE_DRIVER: u64 = 0x3cabde92ba1ac967;
340    pub const ENABLE_DRIVER: u64 = 0x76a7518712965faf;
341    pub const BIND_ALL_UNBOUND_NODES: u64 = 0x2b4343fe1cfb9f21;
342    pub const BIND_ALL_UNBOUND_NODES2: u64 = 0x3e82ce2d6fc998d7;
343    pub const ADD_TEST_NODE: u64 = 0x774836bbb7fbc5b9;
344    pub const REMOVE_TEST_NODE: u64 = 0x1618ec4e5fc4010e;
345    pub const WAIT_FOR_BOOTUP: u64 = 0x52077de068225cdc;
346    pub const RESTART_WITH_DICTIONARY: u64 = 0x5eb620a85359a10e;
347    pub const RESTART_WITH_DICTIONARY_AND_POWER_DEPENDENCIES: u64 = 0x42914549590210;
348    pub const REBIND_COMPOSITES_WITH_DRIVER: u64 = 0x175d492045f61f28;
349}
350
351pub mod node_info_iterator_ordinals {
352    pub const GET_NEXT: u64 = 0x33c7c070412f889f;
353}
354
355mod internal {
356    use super::*;
357    unsafe impl fidl::encoding::TypeMarker for RestartRematchFlags {
358        type Owned = Self;
359
360        #[inline(always)]
361        fn inline_align(_context: fidl::encoding::Context) -> usize {
362            4
363        }
364
365        #[inline(always)]
366        fn inline_size(_context: fidl::encoding::Context) -> usize {
367            4
368        }
369    }
370
371    impl fidl::encoding::ValueTypeMarker for RestartRematchFlags {
372        type Borrowed<'a> = Self;
373        #[inline(always)]
374        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
375            *value
376        }
377    }
378
379    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
380        for RestartRematchFlags
381    {
382        #[inline]
383        unsafe fn encode(
384            self,
385            encoder: &mut fidl::encoding::Encoder<'_, D>,
386            offset: usize,
387            _depth: fidl::encoding::Depth,
388        ) -> fidl::Result<()> {
389            encoder.debug_check_bounds::<Self>(offset);
390            encoder.write_num(self.bits(), offset);
391            Ok(())
392        }
393    }
394
395    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RestartRematchFlags {
396        #[inline(always)]
397        fn new_empty() -> Self {
398            Self::empty()
399        }
400
401        #[inline]
402        unsafe fn decode(
403            &mut self,
404            decoder: &mut fidl::encoding::Decoder<'_, D>,
405            offset: usize,
406            _depth: fidl::encoding::Depth,
407        ) -> fidl::Result<()> {
408            decoder.debug_check_bounds::<Self>(offset);
409            let prim = decoder.read_num::<u32>(offset);
410            *self = Self::from_bits_allow_unknown(prim);
411            Ok(())
412        }
413    }
414
415    impl fidl::encoding::ValueTypeMarker for CompositeInfoIteratorGetNextResponse {
416        type Borrowed<'a> = &'a Self;
417        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
418            value
419        }
420    }
421
422    unsafe impl fidl::encoding::TypeMarker for CompositeInfoIteratorGetNextResponse {
423        type Owned = Self;
424
425        #[inline(always)]
426        fn inline_align(_context: fidl::encoding::Context) -> usize {
427            8
428        }
429
430        #[inline(always)]
431        fn inline_size(_context: fidl::encoding::Context) -> usize {
432            16
433        }
434    }
435
436    unsafe impl<D: fidl::encoding::ResourceDialect>
437        fidl::encoding::Encode<CompositeInfoIteratorGetNextResponse, D>
438        for &CompositeInfoIteratorGetNextResponse
439    {
440        #[inline]
441        unsafe fn encode(
442            self,
443            encoder: &mut fidl::encoding::Encoder<'_, D>,
444            offset: usize,
445            _depth: fidl::encoding::Depth,
446        ) -> fidl::Result<()> {
447            encoder.debug_check_bounds::<CompositeInfoIteratorGetNextResponse>(offset);
448            // Delegate to tuple encoding.
449            fidl::encoding::Encode::<CompositeInfoIteratorGetNextResponse, D>::encode(
450                (
451                    <fidl::encoding::UnboundedVector<CompositeNodeInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.composites),
452                ),
453                encoder, offset, _depth
454            )
455        }
456    }
457    unsafe impl<
458        D: fidl::encoding::ResourceDialect,
459        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<CompositeNodeInfo>, D>,
460    > fidl::encoding::Encode<CompositeInfoIteratorGetNextResponse, D> for (T0,)
461    {
462        #[inline]
463        unsafe fn encode(
464            self,
465            encoder: &mut fidl::encoding::Encoder<'_, D>,
466            offset: usize,
467            depth: fidl::encoding::Depth,
468        ) -> fidl::Result<()> {
469            encoder.debug_check_bounds::<CompositeInfoIteratorGetNextResponse>(offset);
470            // Zero out padding regions. There's no need to apply masks
471            // because the unmasked parts will be overwritten by fields.
472            // Write the fields.
473            self.0.encode(encoder, offset + 0, depth)?;
474            Ok(())
475        }
476    }
477
478    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
479        for CompositeInfoIteratorGetNextResponse
480    {
481        #[inline(always)]
482        fn new_empty() -> Self {
483            Self {
484                composites: fidl::new_empty!(fidl::encoding::UnboundedVector<CompositeNodeInfo>, D),
485            }
486        }
487
488        #[inline]
489        unsafe fn decode(
490            &mut self,
491            decoder: &mut fidl::encoding::Decoder<'_, D>,
492            offset: usize,
493            _depth: fidl::encoding::Depth,
494        ) -> fidl::Result<()> {
495            decoder.debug_check_bounds::<Self>(offset);
496            // Verify that padding bytes are zero.
497            fidl::decode!(
498                fidl::encoding::UnboundedVector<CompositeNodeInfo>,
499                D,
500                &mut self.composites,
501                decoder,
502                offset + 0,
503                _depth
504            )?;
505            Ok(())
506        }
507    }
508
509    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpecIteratorGetNextResponse {
510        type Borrowed<'a> = &'a Self;
511        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
512            value
513        }
514    }
515
516    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpecIteratorGetNextResponse {
517        type Owned = Self;
518
519        #[inline(always)]
520        fn inline_align(_context: fidl::encoding::Context) -> usize {
521            8
522        }
523
524        #[inline(always)]
525        fn inline_size(_context: fidl::encoding::Context) -> usize {
526            16
527        }
528    }
529
530    unsafe impl<D: fidl::encoding::ResourceDialect>
531        fidl::encoding::Encode<CompositeNodeSpecIteratorGetNextResponse, D>
532        for &CompositeNodeSpecIteratorGetNextResponse
533    {
534        #[inline]
535        unsafe fn encode(
536            self,
537            encoder: &mut fidl::encoding::Encoder<'_, D>,
538            offset: usize,
539            _depth: fidl::encoding::Depth,
540        ) -> fidl::Result<()> {
541            encoder.debug_check_bounds::<CompositeNodeSpecIteratorGetNextResponse>(offset);
542            // Delegate to tuple encoding.
543            fidl::encoding::Encode::<CompositeNodeSpecIteratorGetNextResponse, D>::encode(
544                (<fidl::encoding::UnboundedVector<
545                    fidl_fuchsia_driver_framework_common::CompositeInfo,
546                > as fidl::encoding::ValueTypeMarker>::borrow(&self.specs),),
547                encoder,
548                offset,
549                _depth,
550            )
551        }
552    }
553    unsafe impl<
554        D: fidl::encoding::ResourceDialect,
555        T0: fidl::encoding::Encode<
556                fidl::encoding::UnboundedVector<
557                    fidl_fuchsia_driver_framework_common::CompositeInfo,
558                >,
559                D,
560            >,
561    > fidl::encoding::Encode<CompositeNodeSpecIteratorGetNextResponse, D> for (T0,)
562    {
563        #[inline]
564        unsafe fn encode(
565            self,
566            encoder: &mut fidl::encoding::Encoder<'_, D>,
567            offset: usize,
568            depth: fidl::encoding::Depth,
569        ) -> fidl::Result<()> {
570            encoder.debug_check_bounds::<CompositeNodeSpecIteratorGetNextResponse>(offset);
571            // Zero out padding regions. There's no need to apply masks
572            // because the unmasked parts will be overwritten by fields.
573            // Write the fields.
574            self.0.encode(encoder, offset + 0, depth)?;
575            Ok(())
576        }
577    }
578
579    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
580        for CompositeNodeSpecIteratorGetNextResponse
581    {
582        #[inline(always)]
583        fn new_empty() -> Self {
584            Self {
585                specs: fidl::new_empty!(
586                    fidl::encoding::UnboundedVector<
587                        fidl_fuchsia_driver_framework_common::CompositeInfo,
588                    >,
589                    D
590                ),
591            }
592        }
593
594        #[inline]
595        unsafe fn decode(
596            &mut self,
597            decoder: &mut fidl::encoding::Decoder<'_, D>,
598            offset: usize,
599            _depth: fidl::encoding::Depth,
600        ) -> fidl::Result<()> {
601            decoder.debug_check_bounds::<Self>(offset);
602            // Verify that padding bytes are zero.
603            fidl::decode!(
604                fidl::encoding::UnboundedVector<
605                    fidl_fuchsia_driver_framework_common::CompositeInfo,
606                >,
607                D,
608                &mut self.specs,
609                decoder,
610                offset + 0,
611                _depth
612            )?;
613            Ok(())
614        }
615    }
616
617    impl fidl::encoding::ValueTypeMarker for DriverHostInfoIteratorGetNextResponse {
618        type Borrowed<'a> = &'a Self;
619        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
620            value
621        }
622    }
623
624    unsafe impl fidl::encoding::TypeMarker for DriverHostInfoIteratorGetNextResponse {
625        type Owned = Self;
626
627        #[inline(always)]
628        fn inline_align(_context: fidl::encoding::Context) -> usize {
629            8
630        }
631
632        #[inline(always)]
633        fn inline_size(_context: fidl::encoding::Context) -> usize {
634            16
635        }
636    }
637
638    unsafe impl<D: fidl::encoding::ResourceDialect>
639        fidl::encoding::Encode<DriverHostInfoIteratorGetNextResponse, D>
640        for &DriverHostInfoIteratorGetNextResponse
641    {
642        #[inline]
643        unsafe fn encode(
644            self,
645            encoder: &mut fidl::encoding::Encoder<'_, D>,
646            offset: usize,
647            _depth: fidl::encoding::Depth,
648        ) -> fidl::Result<()> {
649            encoder.debug_check_bounds::<DriverHostInfoIteratorGetNextResponse>(offset);
650            // Delegate to tuple encoding.
651            fidl::encoding::Encode::<DriverHostInfoIteratorGetNextResponse, D>::encode(
652                (
653                    <fidl::encoding::UnboundedVector<DriverHostInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_hosts),
654                ),
655                encoder, offset, _depth
656            )
657        }
658    }
659    unsafe impl<
660        D: fidl::encoding::ResourceDialect,
661        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<DriverHostInfo>, D>,
662    > fidl::encoding::Encode<DriverHostInfoIteratorGetNextResponse, D> for (T0,)
663    {
664        #[inline]
665        unsafe fn encode(
666            self,
667            encoder: &mut fidl::encoding::Encoder<'_, D>,
668            offset: usize,
669            depth: fidl::encoding::Depth,
670        ) -> fidl::Result<()> {
671            encoder.debug_check_bounds::<DriverHostInfoIteratorGetNextResponse>(offset);
672            // Zero out padding regions. There's no need to apply masks
673            // because the unmasked parts will be overwritten by fields.
674            // Write the fields.
675            self.0.encode(encoder, offset + 0, depth)?;
676            Ok(())
677        }
678    }
679
680    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
681        for DriverHostInfoIteratorGetNextResponse
682    {
683        #[inline(always)]
684        fn new_empty() -> Self {
685            Self {
686                driver_hosts: fidl::new_empty!(fidl::encoding::UnboundedVector<DriverHostInfo>, D),
687            }
688        }
689
690        #[inline]
691        unsafe fn decode(
692            &mut self,
693            decoder: &mut fidl::encoding::Decoder<'_, D>,
694            offset: usize,
695            _depth: fidl::encoding::Depth,
696        ) -> fidl::Result<()> {
697            decoder.debug_check_bounds::<Self>(offset);
698            // Verify that padding bytes are zero.
699            fidl::decode!(
700                fidl::encoding::UnboundedVector<DriverHostInfo>,
701                D,
702                &mut self.driver_hosts,
703                decoder,
704                offset + 0,
705                _depth
706            )?;
707            Ok(())
708        }
709    }
710
711    impl fidl::encoding::ValueTypeMarker for DriverInfoIteratorGetNextResponse {
712        type Borrowed<'a> = &'a Self;
713        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
714            value
715        }
716    }
717
718    unsafe impl fidl::encoding::TypeMarker for DriverInfoIteratorGetNextResponse {
719        type Owned = Self;
720
721        #[inline(always)]
722        fn inline_align(_context: fidl::encoding::Context) -> usize {
723            8
724        }
725
726        #[inline(always)]
727        fn inline_size(_context: fidl::encoding::Context) -> usize {
728            16
729        }
730    }
731
732    unsafe impl<D: fidl::encoding::ResourceDialect>
733        fidl::encoding::Encode<DriverInfoIteratorGetNextResponse, D>
734        for &DriverInfoIteratorGetNextResponse
735    {
736        #[inline]
737        unsafe fn encode(
738            self,
739            encoder: &mut fidl::encoding::Encoder<'_, D>,
740            offset: usize,
741            _depth: fidl::encoding::Depth,
742        ) -> fidl::Result<()> {
743            encoder.debug_check_bounds::<DriverInfoIteratorGetNextResponse>(offset);
744            // Delegate to tuple encoding.
745            fidl::encoding::Encode::<DriverInfoIteratorGetNextResponse, D>::encode(
746                (
747                    <fidl::encoding::UnboundedVector<
748                        fidl_fuchsia_driver_framework_common::DriverInfo,
749                    > as fidl::encoding::ValueTypeMarker>::borrow(&self.drivers),
750                ),
751                encoder,
752                offset,
753                _depth,
754            )
755        }
756    }
757    unsafe impl<
758        D: fidl::encoding::ResourceDialect,
759        T0: fidl::encoding::Encode<
760                fidl::encoding::UnboundedVector<fidl_fuchsia_driver_framework_common::DriverInfo>,
761                D,
762            >,
763    > fidl::encoding::Encode<DriverInfoIteratorGetNextResponse, D> for (T0,)
764    {
765        #[inline]
766        unsafe fn encode(
767            self,
768            encoder: &mut fidl::encoding::Encoder<'_, D>,
769            offset: usize,
770            depth: fidl::encoding::Depth,
771        ) -> fidl::Result<()> {
772            encoder.debug_check_bounds::<DriverInfoIteratorGetNextResponse>(offset);
773            // Zero out padding regions. There's no need to apply masks
774            // because the unmasked parts will be overwritten by fields.
775            // Write the fields.
776            self.0.encode(encoder, offset + 0, depth)?;
777            Ok(())
778        }
779    }
780
781    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
782        for DriverInfoIteratorGetNextResponse
783    {
784        #[inline(always)]
785        fn new_empty() -> Self {
786            Self {
787                drivers: fidl::new_empty!(
788                    fidl::encoding::UnboundedVector<
789                        fidl_fuchsia_driver_framework_common::DriverInfo,
790                    >,
791                    D
792                ),
793            }
794        }
795
796        #[inline]
797        unsafe fn decode(
798            &mut self,
799            decoder: &mut fidl::encoding::Decoder<'_, D>,
800            offset: usize,
801            _depth: fidl::encoding::Depth,
802        ) -> fidl::Result<()> {
803            decoder.debug_check_bounds::<Self>(offset);
804            // Verify that padding bytes are zero.
805            fidl::decode!(
806                fidl::encoding::UnboundedVector<fidl_fuchsia_driver_framework_common::DriverInfo>,
807                D,
808                &mut self.drivers,
809                decoder,
810                offset + 0,
811                _depth
812            )?;
813            Ok(())
814        }
815    }
816
817    impl fidl::encoding::ValueTypeMarker for ManagerAddTestNodeRequest {
818        type Borrowed<'a> = &'a Self;
819        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
820            value
821        }
822    }
823
824    unsafe impl fidl::encoding::TypeMarker for ManagerAddTestNodeRequest {
825        type Owned = Self;
826
827        #[inline(always)]
828        fn inline_align(_context: fidl::encoding::Context) -> usize {
829            8
830        }
831
832        #[inline(always)]
833        fn inline_size(_context: fidl::encoding::Context) -> usize {
834            16
835        }
836    }
837
838    unsafe impl<D: fidl::encoding::ResourceDialect>
839        fidl::encoding::Encode<ManagerAddTestNodeRequest, D> for &ManagerAddTestNodeRequest
840    {
841        #[inline]
842        unsafe fn encode(
843            self,
844            encoder: &mut fidl::encoding::Encoder<'_, D>,
845            offset: usize,
846            _depth: fidl::encoding::Depth,
847        ) -> fidl::Result<()> {
848            encoder.debug_check_bounds::<ManagerAddTestNodeRequest>(offset);
849            // Delegate to tuple encoding.
850            fidl::encoding::Encode::<ManagerAddTestNodeRequest, D>::encode(
851                (<TestNodeAddArgs as fidl::encoding::ValueTypeMarker>::borrow(&self.args),),
852                encoder,
853                offset,
854                _depth,
855            )
856        }
857    }
858    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<TestNodeAddArgs, D>>
859        fidl::encoding::Encode<ManagerAddTestNodeRequest, D> for (T0,)
860    {
861        #[inline]
862        unsafe fn encode(
863            self,
864            encoder: &mut fidl::encoding::Encoder<'_, D>,
865            offset: usize,
866            depth: fidl::encoding::Depth,
867        ) -> fidl::Result<()> {
868            encoder.debug_check_bounds::<ManagerAddTestNodeRequest>(offset);
869            // Zero out padding regions. There's no need to apply masks
870            // because the unmasked parts will be overwritten by fields.
871            // Write the fields.
872            self.0.encode(encoder, offset + 0, depth)?;
873            Ok(())
874        }
875    }
876
877    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
878        for ManagerAddTestNodeRequest
879    {
880        #[inline(always)]
881        fn new_empty() -> Self {
882            Self { args: fidl::new_empty!(TestNodeAddArgs, D) }
883        }
884
885        #[inline]
886        unsafe fn decode(
887            &mut self,
888            decoder: &mut fidl::encoding::Decoder<'_, D>,
889            offset: usize,
890            _depth: fidl::encoding::Depth,
891        ) -> fidl::Result<()> {
892            decoder.debug_check_bounds::<Self>(offset);
893            // Verify that padding bytes are zero.
894            fidl::decode!(TestNodeAddArgs, D, &mut self.args, decoder, offset + 0, _depth)?;
895            Ok(())
896        }
897    }
898
899    impl fidl::encoding::ValueTypeMarker for ManagerDisableDriverRequest {
900        type Borrowed<'a> = &'a Self;
901        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
902            value
903        }
904    }
905
906    unsafe impl fidl::encoding::TypeMarker for ManagerDisableDriverRequest {
907        type Owned = Self;
908
909        #[inline(always)]
910        fn inline_align(_context: fidl::encoding::Context) -> usize {
911            8
912        }
913
914        #[inline(always)]
915        fn inline_size(_context: fidl::encoding::Context) -> usize {
916            32
917        }
918    }
919
920    unsafe impl<D: fidl::encoding::ResourceDialect>
921        fidl::encoding::Encode<ManagerDisableDriverRequest, D> for &ManagerDisableDriverRequest
922    {
923        #[inline]
924        unsafe fn encode(
925            self,
926            encoder: &mut fidl::encoding::Encoder<'_, D>,
927            offset: usize,
928            _depth: fidl::encoding::Depth,
929        ) -> fidl::Result<()> {
930            encoder.debug_check_bounds::<ManagerDisableDriverRequest>(offset);
931            // Delegate to tuple encoding.
932            fidl::encoding::Encode::<ManagerDisableDriverRequest, D>::encode(
933                (
934                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_url),
935                    <fidl::encoding::Optional<fidl::encoding::BoundedString<64>> as fidl::encoding::ValueTypeMarker>::borrow(&self.package_hash),
936                ),
937                encoder, offset, _depth
938            )
939        }
940    }
941    unsafe impl<
942        D: fidl::encoding::ResourceDialect,
943        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
944        T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<64>>, D>,
945    > fidl::encoding::Encode<ManagerDisableDriverRequest, D> for (T0, T1)
946    {
947        #[inline]
948        unsafe fn encode(
949            self,
950            encoder: &mut fidl::encoding::Encoder<'_, D>,
951            offset: usize,
952            depth: fidl::encoding::Depth,
953        ) -> fidl::Result<()> {
954            encoder.debug_check_bounds::<ManagerDisableDriverRequest>(offset);
955            // Zero out padding regions. There's no need to apply masks
956            // because the unmasked parts will be overwritten by fields.
957            // Write the fields.
958            self.0.encode(encoder, offset + 0, depth)?;
959            self.1.encode(encoder, offset + 16, depth)?;
960            Ok(())
961        }
962    }
963
964    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
965        for ManagerDisableDriverRequest
966    {
967        #[inline(always)]
968        fn new_empty() -> Self {
969            Self {
970                driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
971                package_hash: fidl::new_empty!(
972                    fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
973                    D
974                ),
975            }
976        }
977
978        #[inline]
979        unsafe fn decode(
980            &mut self,
981            decoder: &mut fidl::encoding::Decoder<'_, D>,
982            offset: usize,
983            _depth: fidl::encoding::Depth,
984        ) -> fidl::Result<()> {
985            decoder.debug_check_bounds::<Self>(offset);
986            // Verify that padding bytes are zero.
987            fidl::decode!(
988                fidl::encoding::BoundedString<4096>,
989                D,
990                &mut self.driver_url,
991                decoder,
992                offset + 0,
993                _depth
994            )?;
995            fidl::decode!(
996                fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
997                D,
998                &mut self.package_hash,
999                decoder,
1000                offset + 16,
1001                _depth
1002            )?;
1003            Ok(())
1004        }
1005    }
1006
1007    impl fidl::encoding::ValueTypeMarker for ManagerEnableDriverRequest {
1008        type Borrowed<'a> = &'a Self;
1009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1010            value
1011        }
1012    }
1013
1014    unsafe impl fidl::encoding::TypeMarker for ManagerEnableDriverRequest {
1015        type Owned = Self;
1016
1017        #[inline(always)]
1018        fn inline_align(_context: fidl::encoding::Context) -> usize {
1019            8
1020        }
1021
1022        #[inline(always)]
1023        fn inline_size(_context: fidl::encoding::Context) -> usize {
1024            32
1025        }
1026    }
1027
1028    unsafe impl<D: fidl::encoding::ResourceDialect>
1029        fidl::encoding::Encode<ManagerEnableDriverRequest, D> for &ManagerEnableDriverRequest
1030    {
1031        #[inline]
1032        unsafe fn encode(
1033            self,
1034            encoder: &mut fidl::encoding::Encoder<'_, D>,
1035            offset: usize,
1036            _depth: fidl::encoding::Depth,
1037        ) -> fidl::Result<()> {
1038            encoder.debug_check_bounds::<ManagerEnableDriverRequest>(offset);
1039            // Delegate to tuple encoding.
1040            fidl::encoding::Encode::<ManagerEnableDriverRequest, D>::encode(
1041                (
1042                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_url),
1043                    <fidl::encoding::Optional<fidl::encoding::BoundedString<64>> as fidl::encoding::ValueTypeMarker>::borrow(&self.package_hash),
1044                ),
1045                encoder, offset, _depth
1046            )
1047        }
1048    }
1049    unsafe impl<
1050        D: fidl::encoding::ResourceDialect,
1051        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1052        T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<64>>, D>,
1053    > fidl::encoding::Encode<ManagerEnableDriverRequest, D> for (T0, T1)
1054    {
1055        #[inline]
1056        unsafe fn encode(
1057            self,
1058            encoder: &mut fidl::encoding::Encoder<'_, D>,
1059            offset: usize,
1060            depth: fidl::encoding::Depth,
1061        ) -> fidl::Result<()> {
1062            encoder.debug_check_bounds::<ManagerEnableDriverRequest>(offset);
1063            // Zero out padding regions. There's no need to apply masks
1064            // because the unmasked parts will be overwritten by fields.
1065            // Write the fields.
1066            self.0.encode(encoder, offset + 0, depth)?;
1067            self.1.encode(encoder, offset + 16, depth)?;
1068            Ok(())
1069        }
1070    }
1071
1072    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1073        for ManagerEnableDriverRequest
1074    {
1075        #[inline(always)]
1076        fn new_empty() -> Self {
1077            Self {
1078                driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
1079                package_hash: fidl::new_empty!(
1080                    fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
1081                    D
1082                ),
1083            }
1084        }
1085
1086        #[inline]
1087        unsafe fn decode(
1088            &mut self,
1089            decoder: &mut fidl::encoding::Decoder<'_, D>,
1090            offset: usize,
1091            _depth: fidl::encoding::Depth,
1092        ) -> fidl::Result<()> {
1093            decoder.debug_check_bounds::<Self>(offset);
1094            // Verify that padding bytes are zero.
1095            fidl::decode!(
1096                fidl::encoding::BoundedString<4096>,
1097                D,
1098                &mut self.driver_url,
1099                decoder,
1100                offset + 0,
1101                _depth
1102            )?;
1103            fidl::decode!(
1104                fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
1105                D,
1106                &mut self.package_hash,
1107                decoder,
1108                offset + 16,
1109                _depth
1110            )?;
1111            Ok(())
1112        }
1113    }
1114
1115    impl fidl::encoding::ValueTypeMarker for ManagerRebindCompositesWithDriverRequest {
1116        type Borrowed<'a> = &'a Self;
1117        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1118            value
1119        }
1120    }
1121
1122    unsafe impl fidl::encoding::TypeMarker for ManagerRebindCompositesWithDriverRequest {
1123        type Owned = Self;
1124
1125        #[inline(always)]
1126        fn inline_align(_context: fidl::encoding::Context) -> usize {
1127            8
1128        }
1129
1130        #[inline(always)]
1131        fn inline_size(_context: fidl::encoding::Context) -> usize {
1132            16
1133        }
1134    }
1135
1136    unsafe impl<D: fidl::encoding::ResourceDialect>
1137        fidl::encoding::Encode<ManagerRebindCompositesWithDriverRequest, D>
1138        for &ManagerRebindCompositesWithDriverRequest
1139    {
1140        #[inline]
1141        unsafe fn encode(
1142            self,
1143            encoder: &mut fidl::encoding::Encoder<'_, D>,
1144            offset: usize,
1145            _depth: fidl::encoding::Depth,
1146        ) -> fidl::Result<()> {
1147            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverRequest>(offset);
1148            // Delegate to tuple encoding.
1149            fidl::encoding::Encode::<ManagerRebindCompositesWithDriverRequest, D>::encode(
1150                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1151                    &self.driver_url,
1152                ),),
1153                encoder,
1154                offset,
1155                _depth,
1156            )
1157        }
1158    }
1159    unsafe impl<
1160        D: fidl::encoding::ResourceDialect,
1161        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1162    > fidl::encoding::Encode<ManagerRebindCompositesWithDriverRequest, D> for (T0,)
1163    {
1164        #[inline]
1165        unsafe fn encode(
1166            self,
1167            encoder: &mut fidl::encoding::Encoder<'_, D>,
1168            offset: usize,
1169            depth: fidl::encoding::Depth,
1170        ) -> fidl::Result<()> {
1171            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverRequest>(offset);
1172            // Zero out padding regions. There's no need to apply masks
1173            // because the unmasked parts will be overwritten by fields.
1174            // Write the fields.
1175            self.0.encode(encoder, offset + 0, depth)?;
1176            Ok(())
1177        }
1178    }
1179
1180    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1181        for ManagerRebindCompositesWithDriverRequest
1182    {
1183        #[inline(always)]
1184        fn new_empty() -> Self {
1185            Self { driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1186        }
1187
1188        #[inline]
1189        unsafe fn decode(
1190            &mut self,
1191            decoder: &mut fidl::encoding::Decoder<'_, D>,
1192            offset: usize,
1193            _depth: fidl::encoding::Depth,
1194        ) -> fidl::Result<()> {
1195            decoder.debug_check_bounds::<Self>(offset);
1196            // Verify that padding bytes are zero.
1197            fidl::decode!(
1198                fidl::encoding::BoundedString<4096>,
1199                D,
1200                &mut self.driver_url,
1201                decoder,
1202                offset + 0,
1203                _depth
1204            )?;
1205            Ok(())
1206        }
1207    }
1208
1209    impl fidl::encoding::ValueTypeMarker for ManagerRemoveTestNodeRequest {
1210        type Borrowed<'a> = &'a Self;
1211        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1212            value
1213        }
1214    }
1215
1216    unsafe impl fidl::encoding::TypeMarker for ManagerRemoveTestNodeRequest {
1217        type Owned = Self;
1218
1219        #[inline(always)]
1220        fn inline_align(_context: fidl::encoding::Context) -> usize {
1221            8
1222        }
1223
1224        #[inline(always)]
1225        fn inline_size(_context: fidl::encoding::Context) -> usize {
1226            16
1227        }
1228    }
1229
1230    unsafe impl<D: fidl::encoding::ResourceDialect>
1231        fidl::encoding::Encode<ManagerRemoveTestNodeRequest, D> for &ManagerRemoveTestNodeRequest
1232    {
1233        #[inline]
1234        unsafe fn encode(
1235            self,
1236            encoder: &mut fidl::encoding::Encoder<'_, D>,
1237            offset: usize,
1238            _depth: fidl::encoding::Depth,
1239        ) -> fidl::Result<()> {
1240            encoder.debug_check_bounds::<ManagerRemoveTestNodeRequest>(offset);
1241            // Delegate to tuple encoding.
1242            fidl::encoding::Encode::<ManagerRemoveTestNodeRequest, D>::encode(
1243                (<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow(
1244                    &self.name,
1245                ),),
1246                encoder,
1247                offset,
1248                _depth,
1249            )
1250        }
1251    }
1252    unsafe impl<
1253        D: fidl::encoding::ResourceDialect,
1254        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<1024>, D>,
1255    > fidl::encoding::Encode<ManagerRemoveTestNodeRequest, D> for (T0,)
1256    {
1257        #[inline]
1258        unsafe fn encode(
1259            self,
1260            encoder: &mut fidl::encoding::Encoder<'_, D>,
1261            offset: usize,
1262            depth: fidl::encoding::Depth,
1263        ) -> fidl::Result<()> {
1264            encoder.debug_check_bounds::<ManagerRemoveTestNodeRequest>(offset);
1265            // Zero out padding regions. There's no need to apply masks
1266            // because the unmasked parts will be overwritten by fields.
1267            // Write the fields.
1268            self.0.encode(encoder, offset + 0, depth)?;
1269            Ok(())
1270        }
1271    }
1272
1273    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1274        for ManagerRemoveTestNodeRequest
1275    {
1276        #[inline(always)]
1277        fn new_empty() -> Self {
1278            Self { name: fidl::new_empty!(fidl::encoding::BoundedString<1024>, D) }
1279        }
1280
1281        #[inline]
1282        unsafe fn decode(
1283            &mut self,
1284            decoder: &mut fidl::encoding::Decoder<'_, D>,
1285            offset: usize,
1286            _depth: fidl::encoding::Depth,
1287        ) -> fidl::Result<()> {
1288            decoder.debug_check_bounds::<Self>(offset);
1289            // Verify that padding bytes are zero.
1290            fidl::decode!(
1291                fidl::encoding::BoundedString<1024>,
1292                D,
1293                &mut self.name,
1294                decoder,
1295                offset + 0,
1296                _depth
1297            )?;
1298            Ok(())
1299        }
1300    }
1301
1302    impl fidl::encoding::ValueTypeMarker for ManagerRestartDriverHostsRequest {
1303        type Borrowed<'a> = &'a Self;
1304        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1305            value
1306        }
1307    }
1308
1309    unsafe impl fidl::encoding::TypeMarker for ManagerRestartDriverHostsRequest {
1310        type Owned = Self;
1311
1312        #[inline(always)]
1313        fn inline_align(_context: fidl::encoding::Context) -> usize {
1314            8
1315        }
1316
1317        #[inline(always)]
1318        fn inline_size(_context: fidl::encoding::Context) -> usize {
1319            24
1320        }
1321    }
1322
1323    unsafe impl<D: fidl::encoding::ResourceDialect>
1324        fidl::encoding::Encode<ManagerRestartDriverHostsRequest, D>
1325        for &ManagerRestartDriverHostsRequest
1326    {
1327        #[inline]
1328        unsafe fn encode(
1329            self,
1330            encoder: &mut fidl::encoding::Encoder<'_, D>,
1331            offset: usize,
1332            _depth: fidl::encoding::Depth,
1333        ) -> fidl::Result<()> {
1334            encoder.debug_check_bounds::<ManagerRestartDriverHostsRequest>(offset);
1335            // Delegate to tuple encoding.
1336            fidl::encoding::Encode::<ManagerRestartDriverHostsRequest, D>::encode(
1337                (
1338                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_url),
1339                    <RestartRematchFlags as fidl::encoding::ValueTypeMarker>::borrow(&self.rematch_flags),
1340                ),
1341                encoder, offset, _depth
1342            )
1343        }
1344    }
1345    unsafe impl<
1346        D: fidl::encoding::ResourceDialect,
1347        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1348        T1: fidl::encoding::Encode<RestartRematchFlags, D>,
1349    > fidl::encoding::Encode<ManagerRestartDriverHostsRequest, D> for (T0, T1)
1350    {
1351        #[inline]
1352        unsafe fn encode(
1353            self,
1354            encoder: &mut fidl::encoding::Encoder<'_, D>,
1355            offset: usize,
1356            depth: fidl::encoding::Depth,
1357        ) -> fidl::Result<()> {
1358            encoder.debug_check_bounds::<ManagerRestartDriverHostsRequest>(offset);
1359            // Zero out padding regions. There's no need to apply masks
1360            // because the unmasked parts will be overwritten by fields.
1361            unsafe {
1362                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1363                (ptr as *mut u64).write_unaligned(0);
1364            }
1365            // Write the fields.
1366            self.0.encode(encoder, offset + 0, depth)?;
1367            self.1.encode(encoder, offset + 16, depth)?;
1368            Ok(())
1369        }
1370    }
1371
1372    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1373        for ManagerRestartDriverHostsRequest
1374    {
1375        #[inline(always)]
1376        fn new_empty() -> Self {
1377            Self {
1378                driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
1379                rematch_flags: fidl::new_empty!(RestartRematchFlags, D),
1380            }
1381        }
1382
1383        #[inline]
1384        unsafe fn decode(
1385            &mut self,
1386            decoder: &mut fidl::encoding::Decoder<'_, D>,
1387            offset: usize,
1388            _depth: fidl::encoding::Depth,
1389        ) -> fidl::Result<()> {
1390            decoder.debug_check_bounds::<Self>(offset);
1391            // Verify that padding bytes are zero.
1392            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1393            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1394            let mask = 0xffffffff00000000u64;
1395            let maskedval = padval & mask;
1396            if maskedval != 0 {
1397                return Err(fidl::Error::NonZeroPadding {
1398                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1399                });
1400            }
1401            fidl::decode!(
1402                fidl::encoding::BoundedString<4096>,
1403                D,
1404                &mut self.driver_url,
1405                decoder,
1406                offset + 0,
1407                _depth
1408            )?;
1409            fidl::decode!(
1410                RestartRematchFlags,
1411                D,
1412                &mut self.rematch_flags,
1413                decoder,
1414                offset + 16,
1415                _depth
1416            )?;
1417            Ok(())
1418        }
1419    }
1420
1421    impl fidl::encoding::ValueTypeMarker for ManagerBindAllUnboundNodes2Response {
1422        type Borrowed<'a> = &'a Self;
1423        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1424            value
1425        }
1426    }
1427
1428    unsafe impl fidl::encoding::TypeMarker for ManagerBindAllUnboundNodes2Response {
1429        type Owned = Self;
1430
1431        #[inline(always)]
1432        fn inline_align(_context: fidl::encoding::Context) -> usize {
1433            8
1434        }
1435
1436        #[inline(always)]
1437        fn inline_size(_context: fidl::encoding::Context) -> usize {
1438            16
1439        }
1440    }
1441
1442    unsafe impl<D: fidl::encoding::ResourceDialect>
1443        fidl::encoding::Encode<ManagerBindAllUnboundNodes2Response, D>
1444        for &ManagerBindAllUnboundNodes2Response
1445    {
1446        #[inline]
1447        unsafe fn encode(
1448            self,
1449            encoder: &mut fidl::encoding::Encoder<'_, D>,
1450            offset: usize,
1451            _depth: fidl::encoding::Depth,
1452        ) -> fidl::Result<()> {
1453            encoder.debug_check_bounds::<ManagerBindAllUnboundNodes2Response>(offset);
1454            // Delegate to tuple encoding.
1455            fidl::encoding::Encode::<ManagerBindAllUnboundNodes2Response, D>::encode(
1456                (
1457                    <fidl::encoding::Vector<NodeBindingInfo, 256> as fidl::encoding::ValueTypeMarker>::borrow(&self.binding_result),
1458                ),
1459                encoder, offset, _depth
1460            )
1461        }
1462    }
1463    unsafe impl<
1464        D: fidl::encoding::ResourceDialect,
1465        T0: fidl::encoding::Encode<fidl::encoding::Vector<NodeBindingInfo, 256>, D>,
1466    > fidl::encoding::Encode<ManagerBindAllUnboundNodes2Response, D> for (T0,)
1467    {
1468        #[inline]
1469        unsafe fn encode(
1470            self,
1471            encoder: &mut fidl::encoding::Encoder<'_, D>,
1472            offset: usize,
1473            depth: fidl::encoding::Depth,
1474        ) -> fidl::Result<()> {
1475            encoder.debug_check_bounds::<ManagerBindAllUnboundNodes2Response>(offset);
1476            // Zero out padding regions. There's no need to apply masks
1477            // because the unmasked parts will be overwritten by fields.
1478            // Write the fields.
1479            self.0.encode(encoder, offset + 0, depth)?;
1480            Ok(())
1481        }
1482    }
1483
1484    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1485        for ManagerBindAllUnboundNodes2Response
1486    {
1487        #[inline(always)]
1488        fn new_empty() -> Self {
1489            Self {
1490                binding_result: fidl::new_empty!(fidl::encoding::Vector<NodeBindingInfo, 256>, D),
1491            }
1492        }
1493
1494        #[inline]
1495        unsafe fn decode(
1496            &mut self,
1497            decoder: &mut fidl::encoding::Decoder<'_, D>,
1498            offset: usize,
1499            _depth: fidl::encoding::Depth,
1500        ) -> fidl::Result<()> {
1501            decoder.debug_check_bounds::<Self>(offset);
1502            // Verify that padding bytes are zero.
1503            fidl::decode!(fidl::encoding::Vector<NodeBindingInfo, 256>, D, &mut self.binding_result, decoder, offset + 0, _depth)?;
1504            Ok(())
1505        }
1506    }
1507
1508    impl fidl::encoding::ValueTypeMarker for ManagerBindAllUnboundNodesResponse {
1509        type Borrowed<'a> = &'a Self;
1510        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1511            value
1512        }
1513    }
1514
1515    unsafe impl fidl::encoding::TypeMarker for ManagerBindAllUnboundNodesResponse {
1516        type Owned = Self;
1517
1518        #[inline(always)]
1519        fn inline_align(_context: fidl::encoding::Context) -> usize {
1520            8
1521        }
1522
1523        #[inline(always)]
1524        fn inline_size(_context: fidl::encoding::Context) -> usize {
1525            16
1526        }
1527    }
1528
1529    unsafe impl<D: fidl::encoding::ResourceDialect>
1530        fidl::encoding::Encode<ManagerBindAllUnboundNodesResponse, D>
1531        for &ManagerBindAllUnboundNodesResponse
1532    {
1533        #[inline]
1534        unsafe fn encode(
1535            self,
1536            encoder: &mut fidl::encoding::Encoder<'_, D>,
1537            offset: usize,
1538            _depth: fidl::encoding::Depth,
1539        ) -> fidl::Result<()> {
1540            encoder.debug_check_bounds::<ManagerBindAllUnboundNodesResponse>(offset);
1541            // Delegate to tuple encoding.
1542            fidl::encoding::Encode::<ManagerBindAllUnboundNodesResponse, D>::encode(
1543                (
1544                    <fidl::encoding::Vector<NodeBindingInfo, 10> as fidl::encoding::ValueTypeMarker>::borrow(&self.binding_result),
1545                ),
1546                encoder, offset, _depth
1547            )
1548        }
1549    }
1550    unsafe impl<
1551        D: fidl::encoding::ResourceDialect,
1552        T0: fidl::encoding::Encode<fidl::encoding::Vector<NodeBindingInfo, 10>, D>,
1553    > fidl::encoding::Encode<ManagerBindAllUnboundNodesResponse, D> for (T0,)
1554    {
1555        #[inline]
1556        unsafe fn encode(
1557            self,
1558            encoder: &mut fidl::encoding::Encoder<'_, D>,
1559            offset: usize,
1560            depth: fidl::encoding::Depth,
1561        ) -> fidl::Result<()> {
1562            encoder.debug_check_bounds::<ManagerBindAllUnboundNodesResponse>(offset);
1563            // Zero out padding regions. There's no need to apply masks
1564            // because the unmasked parts will be overwritten by fields.
1565            // Write the fields.
1566            self.0.encode(encoder, offset + 0, depth)?;
1567            Ok(())
1568        }
1569    }
1570
1571    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1572        for ManagerBindAllUnboundNodesResponse
1573    {
1574        #[inline(always)]
1575        fn new_empty() -> Self {
1576            Self {
1577                binding_result: fidl::new_empty!(fidl::encoding::Vector<NodeBindingInfo, 10>, D),
1578            }
1579        }
1580
1581        #[inline]
1582        unsafe fn decode(
1583            &mut self,
1584            decoder: &mut fidl::encoding::Decoder<'_, D>,
1585            offset: usize,
1586            _depth: fidl::encoding::Depth,
1587        ) -> fidl::Result<()> {
1588            decoder.debug_check_bounds::<Self>(offset);
1589            // Verify that padding bytes are zero.
1590            fidl::decode!(fidl::encoding::Vector<NodeBindingInfo, 10>, D, &mut self.binding_result, decoder, offset + 0, _depth)?;
1591            Ok(())
1592        }
1593    }
1594
1595    impl fidl::encoding::ValueTypeMarker for ManagerRebindCompositesWithDriverResponse {
1596        type Borrowed<'a> = &'a Self;
1597        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1598            value
1599        }
1600    }
1601
1602    unsafe impl fidl::encoding::TypeMarker for ManagerRebindCompositesWithDriverResponse {
1603        type Owned = Self;
1604
1605        #[inline(always)]
1606        fn inline_align(_context: fidl::encoding::Context) -> usize {
1607            4
1608        }
1609
1610        #[inline(always)]
1611        fn inline_size(_context: fidl::encoding::Context) -> usize {
1612            4
1613        }
1614        #[inline(always)]
1615        fn encode_is_copy() -> bool {
1616            true
1617        }
1618
1619        #[inline(always)]
1620        fn decode_is_copy() -> bool {
1621            true
1622        }
1623    }
1624
1625    unsafe impl<D: fidl::encoding::ResourceDialect>
1626        fidl::encoding::Encode<ManagerRebindCompositesWithDriverResponse, D>
1627        for &ManagerRebindCompositesWithDriverResponse
1628    {
1629        #[inline]
1630        unsafe fn encode(
1631            self,
1632            encoder: &mut fidl::encoding::Encoder<'_, D>,
1633            offset: usize,
1634            _depth: fidl::encoding::Depth,
1635        ) -> fidl::Result<()> {
1636            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverResponse>(offset);
1637            unsafe {
1638                // Copy the object into the buffer.
1639                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1640                (buf_ptr as *mut ManagerRebindCompositesWithDriverResponse).write_unaligned(
1641                    (self as *const ManagerRebindCompositesWithDriverResponse).read(),
1642                );
1643                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1644                // done second because the memcpy will write garbage to these bytes.
1645            }
1646            Ok(())
1647        }
1648    }
1649    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1650        fidl::encoding::Encode<ManagerRebindCompositesWithDriverResponse, D> for (T0,)
1651    {
1652        #[inline]
1653        unsafe fn encode(
1654            self,
1655            encoder: &mut fidl::encoding::Encoder<'_, D>,
1656            offset: usize,
1657            depth: fidl::encoding::Depth,
1658        ) -> fidl::Result<()> {
1659            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverResponse>(offset);
1660            // Zero out padding regions. There's no need to apply masks
1661            // because the unmasked parts will be overwritten by fields.
1662            // Write the fields.
1663            self.0.encode(encoder, offset + 0, depth)?;
1664            Ok(())
1665        }
1666    }
1667
1668    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1669        for ManagerRebindCompositesWithDriverResponse
1670    {
1671        #[inline(always)]
1672        fn new_empty() -> Self {
1673            Self { count: fidl::new_empty!(u32, D) }
1674        }
1675
1676        #[inline]
1677        unsafe fn decode(
1678            &mut self,
1679            decoder: &mut fidl::encoding::Decoder<'_, D>,
1680            offset: usize,
1681            _depth: fidl::encoding::Depth,
1682        ) -> fidl::Result<()> {
1683            decoder.debug_check_bounds::<Self>(offset);
1684            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1685            // Verify that padding bytes are zero.
1686            // Copy from the buffer into the object.
1687            unsafe {
1688                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1689            }
1690            Ok(())
1691        }
1692    }
1693
1694    impl fidl::encoding::ValueTypeMarker for ManagerRestartDriverHostsResponse {
1695        type Borrowed<'a> = &'a Self;
1696        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1697            value
1698        }
1699    }
1700
1701    unsafe impl fidl::encoding::TypeMarker for ManagerRestartDriverHostsResponse {
1702        type Owned = Self;
1703
1704        #[inline(always)]
1705        fn inline_align(_context: fidl::encoding::Context) -> usize {
1706            4
1707        }
1708
1709        #[inline(always)]
1710        fn inline_size(_context: fidl::encoding::Context) -> usize {
1711            4
1712        }
1713        #[inline(always)]
1714        fn encode_is_copy() -> bool {
1715            true
1716        }
1717
1718        #[inline(always)]
1719        fn decode_is_copy() -> bool {
1720            true
1721        }
1722    }
1723
1724    unsafe impl<D: fidl::encoding::ResourceDialect>
1725        fidl::encoding::Encode<ManagerRestartDriverHostsResponse, D>
1726        for &ManagerRestartDriverHostsResponse
1727    {
1728        #[inline]
1729        unsafe fn encode(
1730            self,
1731            encoder: &mut fidl::encoding::Encoder<'_, D>,
1732            offset: usize,
1733            _depth: fidl::encoding::Depth,
1734        ) -> fidl::Result<()> {
1735            encoder.debug_check_bounds::<ManagerRestartDriverHostsResponse>(offset);
1736            unsafe {
1737                // Copy the object into the buffer.
1738                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1739                (buf_ptr as *mut ManagerRestartDriverHostsResponse)
1740                    .write_unaligned((self as *const ManagerRestartDriverHostsResponse).read());
1741                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1742                // done second because the memcpy will write garbage to these bytes.
1743            }
1744            Ok(())
1745        }
1746    }
1747    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1748        fidl::encoding::Encode<ManagerRestartDriverHostsResponse, D> for (T0,)
1749    {
1750        #[inline]
1751        unsafe fn encode(
1752            self,
1753            encoder: &mut fidl::encoding::Encoder<'_, D>,
1754            offset: usize,
1755            depth: fidl::encoding::Depth,
1756        ) -> fidl::Result<()> {
1757            encoder.debug_check_bounds::<ManagerRestartDriverHostsResponse>(offset);
1758            // Zero out padding regions. There's no need to apply masks
1759            // because the unmasked parts will be overwritten by fields.
1760            // Write the fields.
1761            self.0.encode(encoder, offset + 0, depth)?;
1762            Ok(())
1763        }
1764    }
1765
1766    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1767        for ManagerRestartDriverHostsResponse
1768    {
1769        #[inline(always)]
1770        fn new_empty() -> Self {
1771            Self { count: fidl::new_empty!(u32, D) }
1772        }
1773
1774        #[inline]
1775        unsafe fn decode(
1776            &mut self,
1777            decoder: &mut fidl::encoding::Decoder<'_, D>,
1778            offset: usize,
1779            _depth: fidl::encoding::Depth,
1780        ) -> fidl::Result<()> {
1781            decoder.debug_check_bounds::<Self>(offset);
1782            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1783            // Verify that padding bytes are zero.
1784            // Copy from the buffer into the object.
1785            unsafe {
1786                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1787            }
1788            Ok(())
1789        }
1790    }
1791
1792    impl fidl::encoding::ValueTypeMarker for NodeInfoIteratorGetNextResponse {
1793        type Borrowed<'a> = &'a Self;
1794        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1795            value
1796        }
1797    }
1798
1799    unsafe impl fidl::encoding::TypeMarker for NodeInfoIteratorGetNextResponse {
1800        type Owned = Self;
1801
1802        #[inline(always)]
1803        fn inline_align(_context: fidl::encoding::Context) -> usize {
1804            8
1805        }
1806
1807        #[inline(always)]
1808        fn inline_size(_context: fidl::encoding::Context) -> usize {
1809            16
1810        }
1811    }
1812
1813    unsafe impl<D: fidl::encoding::ResourceDialect>
1814        fidl::encoding::Encode<NodeInfoIteratorGetNextResponse, D>
1815        for &NodeInfoIteratorGetNextResponse
1816    {
1817        #[inline]
1818        unsafe fn encode(
1819            self,
1820            encoder: &mut fidl::encoding::Encoder<'_, D>,
1821            offset: usize,
1822            _depth: fidl::encoding::Depth,
1823        ) -> fidl::Result<()> {
1824            encoder.debug_check_bounds::<NodeInfoIteratorGetNextResponse>(offset);
1825            // Delegate to tuple encoding.
1826            fidl::encoding::Encode::<NodeInfoIteratorGetNextResponse, D>::encode(
1827                (
1828                    <fidl::encoding::UnboundedVector<NodeInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.nodes),
1829                ),
1830                encoder, offset, _depth
1831            )
1832        }
1833    }
1834    unsafe impl<
1835        D: fidl::encoding::ResourceDialect,
1836        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<NodeInfo>, D>,
1837    > fidl::encoding::Encode<NodeInfoIteratorGetNextResponse, D> for (T0,)
1838    {
1839        #[inline]
1840        unsafe fn encode(
1841            self,
1842            encoder: &mut fidl::encoding::Encoder<'_, D>,
1843            offset: usize,
1844            depth: fidl::encoding::Depth,
1845        ) -> fidl::Result<()> {
1846            encoder.debug_check_bounds::<NodeInfoIteratorGetNextResponse>(offset);
1847            // Zero out padding regions. There's no need to apply masks
1848            // because the unmasked parts will be overwritten by fields.
1849            // Write the fields.
1850            self.0.encode(encoder, offset + 0, depth)?;
1851            Ok(())
1852        }
1853    }
1854
1855    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1856        for NodeInfoIteratorGetNextResponse
1857    {
1858        #[inline(always)]
1859        fn new_empty() -> Self {
1860            Self { nodes: fidl::new_empty!(fidl::encoding::UnboundedVector<NodeInfo>, D) }
1861        }
1862
1863        #[inline]
1864        unsafe fn decode(
1865            &mut self,
1866            decoder: &mut fidl::encoding::Decoder<'_, D>,
1867            offset: usize,
1868            _depth: fidl::encoding::Depth,
1869        ) -> fidl::Result<()> {
1870            decoder.debug_check_bounds::<Self>(offset);
1871            // Verify that padding bytes are zero.
1872            fidl::decode!(
1873                fidl::encoding::UnboundedVector<NodeInfo>,
1874                D,
1875                &mut self.nodes,
1876                decoder,
1877                offset + 0,
1878                _depth
1879            )?;
1880            Ok(())
1881        }
1882    }
1883
1884    impl CompositeNodeInfo {
1885        #[inline(always)]
1886        fn max_ordinal_present(&self) -> u64 {
1887            if let Some(_) = self.moniker {
1888                return 5;
1889            }
1890            if let Some(_) = self.parent_monikers {
1891                return 4;
1892            }
1893            if let Some(_) = self.composite {
1894                return 3;
1895            }
1896            if let Some(_) = self.topological_path {
1897                return 2;
1898            }
1899            if let Some(_) = self.parent_topological_paths {
1900                return 1;
1901            }
1902            0
1903        }
1904    }
1905
1906    impl fidl::encoding::ValueTypeMarker for CompositeNodeInfo {
1907        type Borrowed<'a> = &'a Self;
1908        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1909            value
1910        }
1911    }
1912
1913    unsafe impl fidl::encoding::TypeMarker for CompositeNodeInfo {
1914        type Owned = Self;
1915
1916        #[inline(always)]
1917        fn inline_align(_context: fidl::encoding::Context) -> usize {
1918            8
1919        }
1920
1921        #[inline(always)]
1922        fn inline_size(_context: fidl::encoding::Context) -> usize {
1923            16
1924        }
1925    }
1926
1927    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeNodeInfo, D>
1928        for &CompositeNodeInfo
1929    {
1930        unsafe fn encode(
1931            self,
1932            encoder: &mut fidl::encoding::Encoder<'_, D>,
1933            offset: usize,
1934            mut depth: fidl::encoding::Depth,
1935        ) -> fidl::Result<()> {
1936            encoder.debug_check_bounds::<CompositeNodeInfo>(offset);
1937            // Vector header
1938            let max_ordinal: u64 = self.max_ordinal_present();
1939            encoder.write_num(max_ordinal, offset);
1940            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1941            // Calling encoder.out_of_line_offset(0) is not allowed.
1942            if max_ordinal == 0 {
1943                return Ok(());
1944            }
1945            depth.increment()?;
1946            let envelope_size = 8;
1947            let bytes_len = max_ordinal as usize * envelope_size;
1948            #[allow(unused_variables)]
1949            let offset = encoder.out_of_line_offset(bytes_len);
1950            let mut _prev_end_offset: usize = 0;
1951            if 1 > max_ordinal {
1952                return Ok(());
1953            }
1954
1955            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1956            // are envelope_size bytes.
1957            let cur_offset: usize = (1 - 1) * envelope_size;
1958
1959            // Zero reserved fields.
1960            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1961
1962            // Safety:
1963            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1964            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1965            //   envelope_size bytes, there is always sufficient room.
1966            fidl::encoding::encode_in_envelope_optional::<
1967                fidl::encoding::UnboundedVector<
1968                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1969                >,
1970                D,
1971            >(
1972                self.parent_topological_paths.as_ref().map(
1973                    <fidl::encoding::UnboundedVector<
1974                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
1975                    > as fidl::encoding::ValueTypeMarker>::borrow,
1976                ),
1977                encoder,
1978                offset + cur_offset,
1979                depth,
1980            )?;
1981
1982            _prev_end_offset = cur_offset + envelope_size;
1983            if 2 > max_ordinal {
1984                return Ok(());
1985            }
1986
1987            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1988            // are envelope_size bytes.
1989            let cur_offset: usize = (2 - 1) * envelope_size;
1990
1991            // Zero reserved fields.
1992            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1993
1994            // Safety:
1995            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1996            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1997            //   envelope_size bytes, there is always sufficient room.
1998            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
1999                self.topological_path.as_ref().map(
2000                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2001                ),
2002                encoder,
2003                offset + cur_offset,
2004                depth,
2005            )?;
2006
2007            _prev_end_offset = cur_offset + envelope_size;
2008            if 3 > max_ordinal {
2009                return Ok(());
2010            }
2011
2012            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2013            // are envelope_size bytes.
2014            let cur_offset: usize = (3 - 1) * envelope_size;
2015
2016            // Zero reserved fields.
2017            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2018
2019            // Safety:
2020            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2021            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2022            //   envelope_size bytes, there is always sufficient room.
2023            fidl::encoding::encode_in_envelope_optional::<CompositeInfo, D>(
2024                self.composite
2025                    .as_ref()
2026                    .map(<CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow),
2027                encoder,
2028                offset + cur_offset,
2029                depth,
2030            )?;
2031
2032            _prev_end_offset = cur_offset + envelope_size;
2033            if 4 > max_ordinal {
2034                return Ok(());
2035            }
2036
2037            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2038            // are envelope_size bytes.
2039            let cur_offset: usize = (4 - 1) * envelope_size;
2040
2041            // Zero reserved fields.
2042            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2043
2044            // Safety:
2045            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2046            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2047            //   envelope_size bytes, there is always sufficient room.
2048            fidl::encoding::encode_in_envelope_optional::<
2049                fidl::encoding::UnboundedVector<
2050                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2051                >,
2052                D,
2053            >(
2054                self.parent_monikers.as_ref().map(
2055                    <fidl::encoding::UnboundedVector<
2056                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2057                    > as fidl::encoding::ValueTypeMarker>::borrow,
2058                ),
2059                encoder,
2060                offset + cur_offset,
2061                depth,
2062            )?;
2063
2064            _prev_end_offset = cur_offset + envelope_size;
2065            if 5 > max_ordinal {
2066                return Ok(());
2067            }
2068
2069            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2070            // are envelope_size bytes.
2071            let cur_offset: usize = (5 - 1) * envelope_size;
2072
2073            // Zero reserved fields.
2074            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2075
2076            // Safety:
2077            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2078            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2079            //   envelope_size bytes, there is always sufficient room.
2080            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
2081            self.moniker.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
2082            encoder, offset + cur_offset, depth
2083        )?;
2084
2085            _prev_end_offset = cur_offset + envelope_size;
2086
2087            Ok(())
2088        }
2089    }
2090
2091    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeNodeInfo {
2092        #[inline(always)]
2093        fn new_empty() -> Self {
2094            Self::default()
2095        }
2096
2097        unsafe fn decode(
2098            &mut self,
2099            decoder: &mut fidl::encoding::Decoder<'_, D>,
2100            offset: usize,
2101            mut depth: fidl::encoding::Depth,
2102        ) -> fidl::Result<()> {
2103            decoder.debug_check_bounds::<Self>(offset);
2104            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2105                None => return Err(fidl::Error::NotNullable),
2106                Some(len) => len,
2107            };
2108            // Calling decoder.out_of_line_offset(0) is not allowed.
2109            if len == 0 {
2110                return Ok(());
2111            };
2112            depth.increment()?;
2113            let envelope_size = 8;
2114            let bytes_len = len * envelope_size;
2115            let offset = decoder.out_of_line_offset(bytes_len)?;
2116            // Decode the envelope for each type.
2117            let mut _next_ordinal_to_read = 0;
2118            let mut next_offset = offset;
2119            let end_offset = offset + bytes_len;
2120            _next_ordinal_to_read += 1;
2121            if next_offset >= end_offset {
2122                return Ok(());
2123            }
2124
2125            // Decode unknown envelopes for gaps in ordinals.
2126            while _next_ordinal_to_read < 1 {
2127                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2128                _next_ordinal_to_read += 1;
2129                next_offset += envelope_size;
2130            }
2131
2132            let next_out_of_line = decoder.next_out_of_line();
2133            let handles_before = decoder.remaining_handles();
2134            if let Some((inlined, num_bytes, num_handles)) =
2135                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2136            {
2137                let member_inline_size = <fidl::encoding::UnboundedVector<
2138                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2139                > as fidl::encoding::TypeMarker>::inline_size(
2140                    decoder.context
2141                );
2142                if inlined != (member_inline_size <= 4) {
2143                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2144                }
2145                let inner_offset;
2146                let mut inner_depth = depth.clone();
2147                if inlined {
2148                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2149                    inner_offset = next_offset;
2150                } else {
2151                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2152                    inner_depth.increment()?;
2153                }
2154                let val_ref = self.parent_topological_paths.get_or_insert_with(|| {
2155                    fidl::new_empty!(
2156                        fidl::encoding::UnboundedVector<
2157                            fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2158                        >,
2159                        D
2160                    )
2161                });
2162                fidl::decode!(
2163                    fidl::encoding::UnboundedVector<
2164                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2165                    >,
2166                    D,
2167                    val_ref,
2168                    decoder,
2169                    inner_offset,
2170                    inner_depth
2171                )?;
2172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2173                {
2174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2175                }
2176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2178                }
2179            }
2180
2181            next_offset += envelope_size;
2182            _next_ordinal_to_read += 1;
2183            if next_offset >= end_offset {
2184                return Ok(());
2185            }
2186
2187            // Decode unknown envelopes for gaps in ordinals.
2188            while _next_ordinal_to_read < 2 {
2189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2190                _next_ordinal_to_read += 1;
2191                next_offset += envelope_size;
2192            }
2193
2194            let next_out_of_line = decoder.next_out_of_line();
2195            let handles_before = decoder.remaining_handles();
2196            if let Some((inlined, num_bytes, num_handles)) =
2197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2198            {
2199                let member_inline_size =
2200                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2201                        decoder.context,
2202                    );
2203                if inlined != (member_inline_size <= 4) {
2204                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2205                }
2206                let inner_offset;
2207                let mut inner_depth = depth.clone();
2208                if inlined {
2209                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2210                    inner_offset = next_offset;
2211                } else {
2212                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2213                    inner_depth.increment()?;
2214                }
2215                let val_ref = self
2216                    .topological_path
2217                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2218                fidl::decode!(
2219                    fidl::encoding::UnboundedString,
2220                    D,
2221                    val_ref,
2222                    decoder,
2223                    inner_offset,
2224                    inner_depth
2225                )?;
2226                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2227                {
2228                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2229                }
2230                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2231                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2232                }
2233            }
2234
2235            next_offset += envelope_size;
2236            _next_ordinal_to_read += 1;
2237            if next_offset >= end_offset {
2238                return Ok(());
2239            }
2240
2241            // Decode unknown envelopes for gaps in ordinals.
2242            while _next_ordinal_to_read < 3 {
2243                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2244                _next_ordinal_to_read += 1;
2245                next_offset += envelope_size;
2246            }
2247
2248            let next_out_of_line = decoder.next_out_of_line();
2249            let handles_before = decoder.remaining_handles();
2250            if let Some((inlined, num_bytes, num_handles)) =
2251                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2252            {
2253                let member_inline_size =
2254                    <CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2255                if inlined != (member_inline_size <= 4) {
2256                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2257                }
2258                let inner_offset;
2259                let mut inner_depth = depth.clone();
2260                if inlined {
2261                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2262                    inner_offset = next_offset;
2263                } else {
2264                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2265                    inner_depth.increment()?;
2266                }
2267                let val_ref =
2268                    self.composite.get_or_insert_with(|| fidl::new_empty!(CompositeInfo, D));
2269                fidl::decode!(CompositeInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2270                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2271                {
2272                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2273                }
2274                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2275                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2276                }
2277            }
2278
2279            next_offset += envelope_size;
2280            _next_ordinal_to_read += 1;
2281            if next_offset >= end_offset {
2282                return Ok(());
2283            }
2284
2285            // Decode unknown envelopes for gaps in ordinals.
2286            while _next_ordinal_to_read < 4 {
2287                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2288                _next_ordinal_to_read += 1;
2289                next_offset += envelope_size;
2290            }
2291
2292            let next_out_of_line = decoder.next_out_of_line();
2293            let handles_before = decoder.remaining_handles();
2294            if let Some((inlined, num_bytes, num_handles)) =
2295                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2296            {
2297                let member_inline_size = <fidl::encoding::UnboundedVector<
2298                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2299                > as fidl::encoding::TypeMarker>::inline_size(
2300                    decoder.context
2301                );
2302                if inlined != (member_inline_size <= 4) {
2303                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2304                }
2305                let inner_offset;
2306                let mut inner_depth = depth.clone();
2307                if inlined {
2308                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2309                    inner_offset = next_offset;
2310                } else {
2311                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2312                    inner_depth.increment()?;
2313                }
2314                let val_ref = self.parent_monikers.get_or_insert_with(|| {
2315                    fidl::new_empty!(
2316                        fidl::encoding::UnboundedVector<
2317                            fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2318                        >,
2319                        D
2320                    )
2321                });
2322                fidl::decode!(
2323                    fidl::encoding::UnboundedVector<
2324                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2325                    >,
2326                    D,
2327                    val_ref,
2328                    decoder,
2329                    inner_offset,
2330                    inner_depth
2331                )?;
2332                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2333                {
2334                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2335                }
2336                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2337                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2338                }
2339            }
2340
2341            next_offset += envelope_size;
2342            _next_ordinal_to_read += 1;
2343            if next_offset >= end_offset {
2344                return Ok(());
2345            }
2346
2347            // Decode unknown envelopes for gaps in ordinals.
2348            while _next_ordinal_to_read < 5 {
2349                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2350                _next_ordinal_to_read += 1;
2351                next_offset += envelope_size;
2352            }
2353
2354            let next_out_of_line = decoder.next_out_of_line();
2355            let handles_before = decoder.remaining_handles();
2356            if let Some((inlined, num_bytes, num_handles)) =
2357                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2358            {
2359                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2360                if inlined != (member_inline_size <= 4) {
2361                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2362                }
2363                let inner_offset;
2364                let mut inner_depth = depth.clone();
2365                if inlined {
2366                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2367                    inner_offset = next_offset;
2368                } else {
2369                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2370                    inner_depth.increment()?;
2371                }
2372                let val_ref = self.moniker.get_or_insert_with(|| {
2373                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
2374                });
2375                fidl::decode!(
2376                    fidl::encoding::BoundedString<1024>,
2377                    D,
2378                    val_ref,
2379                    decoder,
2380                    inner_offset,
2381                    inner_depth
2382                )?;
2383                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2384                {
2385                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2386                }
2387                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2388                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2389                }
2390            }
2391
2392            next_offset += envelope_size;
2393
2394            // Decode the remaining unknown envelopes.
2395            while next_offset < end_offset {
2396                _next_ordinal_to_read += 1;
2397                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2398                next_offset += envelope_size;
2399            }
2400
2401            Ok(())
2402        }
2403    }
2404
2405    impl DispatcherInfo {
2406        #[inline(always)]
2407        fn max_ordinal_present(&self) -> u64 {
2408            if let Some(_) = self.scheduler_role {
2409                return 4;
2410            }
2411            if let Some(_) = self.options {
2412                return 3;
2413            }
2414            if let Some(_) = self.name {
2415                return 2;
2416            }
2417            if let Some(_) = self.driver {
2418                return 1;
2419            }
2420            0
2421        }
2422    }
2423
2424    impl fidl::encoding::ValueTypeMarker for DispatcherInfo {
2425        type Borrowed<'a> = &'a Self;
2426        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2427            value
2428        }
2429    }
2430
2431    unsafe impl fidl::encoding::TypeMarker for DispatcherInfo {
2432        type Owned = Self;
2433
2434        #[inline(always)]
2435        fn inline_align(_context: fidl::encoding::Context) -> usize {
2436            8
2437        }
2438
2439        #[inline(always)]
2440        fn inline_size(_context: fidl::encoding::Context) -> usize {
2441            16
2442        }
2443    }
2444
2445    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DispatcherInfo, D>
2446        for &DispatcherInfo
2447    {
2448        unsafe fn encode(
2449            self,
2450            encoder: &mut fidl::encoding::Encoder<'_, D>,
2451            offset: usize,
2452            mut depth: fidl::encoding::Depth,
2453        ) -> fidl::Result<()> {
2454            encoder.debug_check_bounds::<DispatcherInfo>(offset);
2455            // Vector header
2456            let max_ordinal: u64 = self.max_ordinal_present();
2457            encoder.write_num(max_ordinal, offset);
2458            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2459            // Calling encoder.out_of_line_offset(0) is not allowed.
2460            if max_ordinal == 0 {
2461                return Ok(());
2462            }
2463            depth.increment()?;
2464            let envelope_size = 8;
2465            let bytes_len = max_ordinal as usize * envelope_size;
2466            #[allow(unused_variables)]
2467            let offset = encoder.out_of_line_offset(bytes_len);
2468            let mut _prev_end_offset: usize = 0;
2469            if 1 > max_ordinal {
2470                return Ok(());
2471            }
2472
2473            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2474            // are envelope_size bytes.
2475            let cur_offset: usize = (1 - 1) * envelope_size;
2476
2477            // Zero reserved fields.
2478            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2479
2480            // Safety:
2481            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2482            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2483            //   envelope_size bytes, there is always sufficient room.
2484            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
2485            self.driver.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
2486            encoder, offset + cur_offset, depth
2487        )?;
2488
2489            _prev_end_offset = cur_offset + envelope_size;
2490            if 2 > max_ordinal {
2491                return Ok(());
2492            }
2493
2494            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2495            // are envelope_size bytes.
2496            let cur_offset: usize = (2 - 1) * envelope_size;
2497
2498            // Zero reserved fields.
2499            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2500
2501            // Safety:
2502            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2503            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2504            //   envelope_size bytes, there is always sufficient room.
2505            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2506                self.name.as_ref().map(
2507                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2508                ),
2509                encoder,
2510                offset + cur_offset,
2511                depth,
2512            )?;
2513
2514            _prev_end_offset = cur_offset + envelope_size;
2515            if 3 > max_ordinal {
2516                return Ok(());
2517            }
2518
2519            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2520            // are envelope_size bytes.
2521            let cur_offset: usize = (3 - 1) * envelope_size;
2522
2523            // Zero reserved fields.
2524            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2525
2526            // Safety:
2527            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2528            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2529            //   envelope_size bytes, there is always sufficient room.
2530            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2531                self.options.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2532                encoder,
2533                offset + cur_offset,
2534                depth,
2535            )?;
2536
2537            _prev_end_offset = cur_offset + envelope_size;
2538            if 4 > max_ordinal {
2539                return Ok(());
2540            }
2541
2542            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2543            // are envelope_size bytes.
2544            let cur_offset: usize = (4 - 1) * envelope_size;
2545
2546            // Zero reserved fields.
2547            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2548
2549            // Safety:
2550            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2551            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2552            //   envelope_size bytes, there is always sufficient room.
2553            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2554                self.scheduler_role.as_ref().map(
2555                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2556                ),
2557                encoder,
2558                offset + cur_offset,
2559                depth,
2560            )?;
2561
2562            _prev_end_offset = cur_offset + envelope_size;
2563
2564            Ok(())
2565        }
2566    }
2567
2568    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DispatcherInfo {
2569        #[inline(always)]
2570        fn new_empty() -> Self {
2571            Self::default()
2572        }
2573
2574        unsafe fn decode(
2575            &mut self,
2576            decoder: &mut fidl::encoding::Decoder<'_, D>,
2577            offset: usize,
2578            mut depth: fidl::encoding::Depth,
2579        ) -> fidl::Result<()> {
2580            decoder.debug_check_bounds::<Self>(offset);
2581            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2582                None => return Err(fidl::Error::NotNullable),
2583                Some(len) => len,
2584            };
2585            // Calling decoder.out_of_line_offset(0) is not allowed.
2586            if len == 0 {
2587                return Ok(());
2588            };
2589            depth.increment()?;
2590            let envelope_size = 8;
2591            let bytes_len = len * envelope_size;
2592            let offset = decoder.out_of_line_offset(bytes_len)?;
2593            // Decode the envelope for each type.
2594            let mut _next_ordinal_to_read = 0;
2595            let mut next_offset = offset;
2596            let end_offset = offset + bytes_len;
2597            _next_ordinal_to_read += 1;
2598            if next_offset >= end_offset {
2599                return Ok(());
2600            }
2601
2602            // Decode unknown envelopes for gaps in ordinals.
2603            while _next_ordinal_to_read < 1 {
2604                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2605                _next_ordinal_to_read += 1;
2606                next_offset += envelope_size;
2607            }
2608
2609            let next_out_of_line = decoder.next_out_of_line();
2610            let handles_before = decoder.remaining_handles();
2611            if let Some((inlined, num_bytes, num_handles)) =
2612                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2613            {
2614                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2615                if inlined != (member_inline_size <= 4) {
2616                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2617                }
2618                let inner_offset;
2619                let mut inner_depth = depth.clone();
2620                if inlined {
2621                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2622                    inner_offset = next_offset;
2623                } else {
2624                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2625                    inner_depth.increment()?;
2626                }
2627                let val_ref = self.driver.get_or_insert_with(|| {
2628                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
2629                });
2630                fidl::decode!(
2631                    fidl::encoding::BoundedString<4096>,
2632                    D,
2633                    val_ref,
2634                    decoder,
2635                    inner_offset,
2636                    inner_depth
2637                )?;
2638                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2639                {
2640                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2641                }
2642                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2643                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2644                }
2645            }
2646
2647            next_offset += envelope_size;
2648            _next_ordinal_to_read += 1;
2649            if next_offset >= end_offset {
2650                return Ok(());
2651            }
2652
2653            // Decode unknown envelopes for gaps in ordinals.
2654            while _next_ordinal_to_read < 2 {
2655                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2656                _next_ordinal_to_read += 1;
2657                next_offset += envelope_size;
2658            }
2659
2660            let next_out_of_line = decoder.next_out_of_line();
2661            let handles_before = decoder.remaining_handles();
2662            if let Some((inlined, num_bytes, num_handles)) =
2663                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2664            {
2665                let member_inline_size =
2666                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2667                        decoder.context,
2668                    );
2669                if inlined != (member_inline_size <= 4) {
2670                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2671                }
2672                let inner_offset;
2673                let mut inner_depth = depth.clone();
2674                if inlined {
2675                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2676                    inner_offset = next_offset;
2677                } else {
2678                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2679                    inner_depth.increment()?;
2680                }
2681                let val_ref = self
2682                    .name
2683                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2684                fidl::decode!(
2685                    fidl::encoding::UnboundedString,
2686                    D,
2687                    val_ref,
2688                    decoder,
2689                    inner_offset,
2690                    inner_depth
2691                )?;
2692                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2693                {
2694                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2695                }
2696                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2697                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2698                }
2699            }
2700
2701            next_offset += envelope_size;
2702            _next_ordinal_to_read += 1;
2703            if next_offset >= end_offset {
2704                return Ok(());
2705            }
2706
2707            // Decode unknown envelopes for gaps in ordinals.
2708            while _next_ordinal_to_read < 3 {
2709                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2710                _next_ordinal_to_read += 1;
2711                next_offset += envelope_size;
2712            }
2713
2714            let next_out_of_line = decoder.next_out_of_line();
2715            let handles_before = decoder.remaining_handles();
2716            if let Some((inlined, num_bytes, num_handles)) =
2717                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2718            {
2719                let member_inline_size =
2720                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2721                if inlined != (member_inline_size <= 4) {
2722                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2723                }
2724                let inner_offset;
2725                let mut inner_depth = depth.clone();
2726                if inlined {
2727                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2728                    inner_offset = next_offset;
2729                } else {
2730                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2731                    inner_depth.increment()?;
2732                }
2733                let val_ref = self.options.get_or_insert_with(|| fidl::new_empty!(u32, D));
2734                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2735                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2736                {
2737                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2738                }
2739                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2740                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2741                }
2742            }
2743
2744            next_offset += envelope_size;
2745            _next_ordinal_to_read += 1;
2746            if next_offset >= end_offset {
2747                return Ok(());
2748            }
2749
2750            // Decode unknown envelopes for gaps in ordinals.
2751            while _next_ordinal_to_read < 4 {
2752                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2753                _next_ordinal_to_read += 1;
2754                next_offset += envelope_size;
2755            }
2756
2757            let next_out_of_line = decoder.next_out_of_line();
2758            let handles_before = decoder.remaining_handles();
2759            if let Some((inlined, num_bytes, num_handles)) =
2760                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2761            {
2762                let member_inline_size =
2763                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2764                        decoder.context,
2765                    );
2766                if inlined != (member_inline_size <= 4) {
2767                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2768                }
2769                let inner_offset;
2770                let mut inner_depth = depth.clone();
2771                if inlined {
2772                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2773                    inner_offset = next_offset;
2774                } else {
2775                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2776                    inner_depth.increment()?;
2777                }
2778                let val_ref = self
2779                    .scheduler_role
2780                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2781                fidl::decode!(
2782                    fidl::encoding::UnboundedString,
2783                    D,
2784                    val_ref,
2785                    decoder,
2786                    inner_offset,
2787                    inner_depth
2788                )?;
2789                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2790                {
2791                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2792                }
2793                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2794                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2795                }
2796            }
2797
2798            next_offset += envelope_size;
2799
2800            // Decode the remaining unknown envelopes.
2801            while next_offset < end_offset {
2802                _next_ordinal_to_read += 1;
2803                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2804                next_offset += envelope_size;
2805            }
2806
2807            Ok(())
2808        }
2809    }
2810
2811    impl DriverHostInfo {
2812        #[inline(always)]
2813        fn max_ordinal_present(&self) -> u64 {
2814            if let Some(_) = self.name {
2815                return 5;
2816            }
2817            if let Some(_) = self.dispatchers {
2818                return 4;
2819            }
2820            if let Some(_) = self.drivers {
2821                return 3;
2822            }
2823            if let Some(_) = self.threads {
2824                return 2;
2825            }
2826            if let Some(_) = self.process_koid {
2827                return 1;
2828            }
2829            0
2830        }
2831    }
2832
2833    impl fidl::encoding::ValueTypeMarker for DriverHostInfo {
2834        type Borrowed<'a> = &'a Self;
2835        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2836            value
2837        }
2838    }
2839
2840    unsafe impl fidl::encoding::TypeMarker for DriverHostInfo {
2841        type Owned = Self;
2842
2843        #[inline(always)]
2844        fn inline_align(_context: fidl::encoding::Context) -> usize {
2845            8
2846        }
2847
2848        #[inline(always)]
2849        fn inline_size(_context: fidl::encoding::Context) -> usize {
2850            16
2851        }
2852    }
2853
2854    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DriverHostInfo, D>
2855        for &DriverHostInfo
2856    {
2857        unsafe fn encode(
2858            self,
2859            encoder: &mut fidl::encoding::Encoder<'_, D>,
2860            offset: usize,
2861            mut depth: fidl::encoding::Depth,
2862        ) -> fidl::Result<()> {
2863            encoder.debug_check_bounds::<DriverHostInfo>(offset);
2864            // Vector header
2865            let max_ordinal: u64 = self.max_ordinal_present();
2866            encoder.write_num(max_ordinal, offset);
2867            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2868            // Calling encoder.out_of_line_offset(0) is not allowed.
2869            if max_ordinal == 0 {
2870                return Ok(());
2871            }
2872            depth.increment()?;
2873            let envelope_size = 8;
2874            let bytes_len = max_ordinal as usize * envelope_size;
2875            #[allow(unused_variables)]
2876            let offset = encoder.out_of_line_offset(bytes_len);
2877            let mut _prev_end_offset: usize = 0;
2878            if 1 > max_ordinal {
2879                return Ok(());
2880            }
2881
2882            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2883            // are envelope_size bytes.
2884            let cur_offset: usize = (1 - 1) * envelope_size;
2885
2886            // Zero reserved fields.
2887            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2888
2889            // Safety:
2890            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2891            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2892            //   envelope_size bytes, there is always sufficient room.
2893            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2894                self.process_koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2895                encoder,
2896                offset + cur_offset,
2897                depth,
2898            )?;
2899
2900            _prev_end_offset = cur_offset + envelope_size;
2901            if 2 > max_ordinal {
2902                return Ok(());
2903            }
2904
2905            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2906            // are envelope_size bytes.
2907            let cur_offset: usize = (2 - 1) * envelope_size;
2908
2909            // Zero reserved fields.
2910            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2911
2912            // Safety:
2913            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2914            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2915            //   envelope_size bytes, there is always sufficient room.
2916            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ThreadInfo>, D>(
2917            self.threads.as_ref().map(<fidl::encoding::UnboundedVector<ThreadInfo> as fidl::encoding::ValueTypeMarker>::borrow),
2918            encoder, offset + cur_offset, depth
2919        )?;
2920
2921            _prev_end_offset = cur_offset + envelope_size;
2922            if 3 > max_ordinal {
2923                return Ok(());
2924            }
2925
2926            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2927            // are envelope_size bytes.
2928            let cur_offset: usize = (3 - 1) * envelope_size;
2929
2930            // Zero reserved fields.
2931            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2932
2933            // Safety:
2934            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2935            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2936            //   envelope_size bytes, there is always sufficient room.
2937            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>>, D>(
2938            self.drivers.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>> as fidl::encoding::ValueTypeMarker>::borrow),
2939            encoder, offset + cur_offset, depth
2940        )?;
2941
2942            _prev_end_offset = cur_offset + envelope_size;
2943            if 4 > max_ordinal {
2944                return Ok(());
2945            }
2946
2947            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2948            // are envelope_size bytes.
2949            let cur_offset: usize = (4 - 1) * envelope_size;
2950
2951            // Zero reserved fields.
2952            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2953
2954            // Safety:
2955            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2956            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2957            //   envelope_size bytes, there is always sufficient room.
2958            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DispatcherInfo>, D>(
2959            self.dispatchers.as_ref().map(<fidl::encoding::UnboundedVector<DispatcherInfo> as fidl::encoding::ValueTypeMarker>::borrow),
2960            encoder, offset + cur_offset, depth
2961        )?;
2962
2963            _prev_end_offset = cur_offset + envelope_size;
2964            if 5 > max_ordinal {
2965                return Ok(());
2966            }
2967
2968            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2969            // are envelope_size bytes.
2970            let cur_offset: usize = (5 - 1) * envelope_size;
2971
2972            // Zero reserved fields.
2973            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2974
2975            // Safety:
2976            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2977            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2978            //   envelope_size bytes, there is always sufficient room.
2979            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2980                self.name.as_ref().map(
2981                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2982                ),
2983                encoder,
2984                offset + cur_offset,
2985                depth,
2986            )?;
2987
2988            _prev_end_offset = cur_offset + envelope_size;
2989
2990            Ok(())
2991        }
2992    }
2993
2994    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverHostInfo {
2995        #[inline(always)]
2996        fn new_empty() -> Self {
2997            Self::default()
2998        }
2999
3000        unsafe fn decode(
3001            &mut self,
3002            decoder: &mut fidl::encoding::Decoder<'_, D>,
3003            offset: usize,
3004            mut depth: fidl::encoding::Depth,
3005        ) -> fidl::Result<()> {
3006            decoder.debug_check_bounds::<Self>(offset);
3007            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3008                None => return Err(fidl::Error::NotNullable),
3009                Some(len) => len,
3010            };
3011            // Calling decoder.out_of_line_offset(0) is not allowed.
3012            if len == 0 {
3013                return Ok(());
3014            };
3015            depth.increment()?;
3016            let envelope_size = 8;
3017            let bytes_len = len * envelope_size;
3018            let offset = decoder.out_of_line_offset(bytes_len)?;
3019            // Decode the envelope for each type.
3020            let mut _next_ordinal_to_read = 0;
3021            let mut next_offset = offset;
3022            let end_offset = offset + bytes_len;
3023            _next_ordinal_to_read += 1;
3024            if next_offset >= end_offset {
3025                return Ok(());
3026            }
3027
3028            // Decode unknown envelopes for gaps in ordinals.
3029            while _next_ordinal_to_read < 1 {
3030                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3031                _next_ordinal_to_read += 1;
3032                next_offset += envelope_size;
3033            }
3034
3035            let next_out_of_line = decoder.next_out_of_line();
3036            let handles_before = decoder.remaining_handles();
3037            if let Some((inlined, num_bytes, num_handles)) =
3038                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3039            {
3040                let member_inline_size =
3041                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3042                if inlined != (member_inline_size <= 4) {
3043                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3044                }
3045                let inner_offset;
3046                let mut inner_depth = depth.clone();
3047                if inlined {
3048                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3049                    inner_offset = next_offset;
3050                } else {
3051                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3052                    inner_depth.increment()?;
3053                }
3054                let val_ref = self.process_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
3055                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3056                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3057                {
3058                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3059                }
3060                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3061                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3062                }
3063            }
3064
3065            next_offset += envelope_size;
3066            _next_ordinal_to_read += 1;
3067            if next_offset >= end_offset {
3068                return Ok(());
3069            }
3070
3071            // Decode unknown envelopes for gaps in ordinals.
3072            while _next_ordinal_to_read < 2 {
3073                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3074                _next_ordinal_to_read += 1;
3075                next_offset += envelope_size;
3076            }
3077
3078            let next_out_of_line = decoder.next_out_of_line();
3079            let handles_before = decoder.remaining_handles();
3080            if let Some((inlined, num_bytes, num_handles)) =
3081                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3082            {
3083                let member_inline_size = <fidl::encoding::UnboundedVector<ThreadInfo> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3084                if inlined != (member_inline_size <= 4) {
3085                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3086                }
3087                let inner_offset;
3088                let mut inner_depth = depth.clone();
3089                if inlined {
3090                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3091                    inner_offset = next_offset;
3092                } else {
3093                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3094                    inner_depth.increment()?;
3095                }
3096                let val_ref = self.threads.get_or_insert_with(|| {
3097                    fidl::new_empty!(fidl::encoding::UnboundedVector<ThreadInfo>, D)
3098                });
3099                fidl::decode!(
3100                    fidl::encoding::UnboundedVector<ThreadInfo>,
3101                    D,
3102                    val_ref,
3103                    decoder,
3104                    inner_offset,
3105                    inner_depth
3106                )?;
3107                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3108                {
3109                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3110                }
3111                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3112                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3113                }
3114            }
3115
3116            next_offset += envelope_size;
3117            _next_ordinal_to_read += 1;
3118            if next_offset >= end_offset {
3119                return Ok(());
3120            }
3121
3122            // Decode unknown envelopes for gaps in ordinals.
3123            while _next_ordinal_to_read < 3 {
3124                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3125                _next_ordinal_to_read += 1;
3126                next_offset += envelope_size;
3127            }
3128
3129            let next_out_of_line = decoder.next_out_of_line();
3130            let handles_before = decoder.remaining_handles();
3131            if let Some((inlined, num_bytes, num_handles)) =
3132                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3133            {
3134                let member_inline_size = <fidl::encoding::UnboundedVector<
3135                    fidl::encoding::BoundedString<4096>,
3136                > as fidl::encoding::TypeMarker>::inline_size(
3137                    decoder.context
3138                );
3139                if inlined != (member_inline_size <= 4) {
3140                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3141                }
3142                let inner_offset;
3143                let mut inner_depth = depth.clone();
3144                if inlined {
3145                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3146                    inner_offset = next_offset;
3147                } else {
3148                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3149                    inner_depth.increment()?;
3150                }
3151                let val_ref = self.drivers.get_or_insert_with(|| {
3152                    fidl::new_empty!(
3153                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>>,
3154                        D
3155                    )
3156                });
3157                fidl::decode!(
3158                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>>,
3159                    D,
3160                    val_ref,
3161                    decoder,
3162                    inner_offset,
3163                    inner_depth
3164                )?;
3165                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3166                {
3167                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3168                }
3169                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3170                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3171                }
3172            }
3173
3174            next_offset += envelope_size;
3175            _next_ordinal_to_read += 1;
3176            if next_offset >= end_offset {
3177                return Ok(());
3178            }
3179
3180            // Decode unknown envelopes for gaps in ordinals.
3181            while _next_ordinal_to_read < 4 {
3182                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3183                _next_ordinal_to_read += 1;
3184                next_offset += envelope_size;
3185            }
3186
3187            let next_out_of_line = decoder.next_out_of_line();
3188            let handles_before = decoder.remaining_handles();
3189            if let Some((inlined, num_bytes, num_handles)) =
3190                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3191            {
3192                let member_inline_size = <fidl::encoding::UnboundedVector<DispatcherInfo> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3193                if inlined != (member_inline_size <= 4) {
3194                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3195                }
3196                let inner_offset;
3197                let mut inner_depth = depth.clone();
3198                if inlined {
3199                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3200                    inner_offset = next_offset;
3201                } else {
3202                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3203                    inner_depth.increment()?;
3204                }
3205                let val_ref = self.dispatchers.get_or_insert_with(|| {
3206                    fidl::new_empty!(fidl::encoding::UnboundedVector<DispatcherInfo>, D)
3207                });
3208                fidl::decode!(
3209                    fidl::encoding::UnboundedVector<DispatcherInfo>,
3210                    D,
3211                    val_ref,
3212                    decoder,
3213                    inner_offset,
3214                    inner_depth
3215                )?;
3216                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3217                {
3218                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3219                }
3220                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3221                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3222                }
3223            }
3224
3225            next_offset += envelope_size;
3226            _next_ordinal_to_read += 1;
3227            if next_offset >= end_offset {
3228                return Ok(());
3229            }
3230
3231            // Decode unknown envelopes for gaps in ordinals.
3232            while _next_ordinal_to_read < 5 {
3233                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3234                _next_ordinal_to_read += 1;
3235                next_offset += envelope_size;
3236            }
3237
3238            let next_out_of_line = decoder.next_out_of_line();
3239            let handles_before = decoder.remaining_handles();
3240            if let Some((inlined, num_bytes, num_handles)) =
3241                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3242            {
3243                let member_inline_size =
3244                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3245                        decoder.context,
3246                    );
3247                if inlined != (member_inline_size <= 4) {
3248                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3249                }
3250                let inner_offset;
3251                let mut inner_depth = depth.clone();
3252                if inlined {
3253                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3254                    inner_offset = next_offset;
3255                } else {
3256                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3257                    inner_depth.increment()?;
3258                }
3259                let val_ref = self
3260                    .name
3261                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3262                fidl::decode!(
3263                    fidl::encoding::UnboundedString,
3264                    D,
3265                    val_ref,
3266                    decoder,
3267                    inner_offset,
3268                    inner_depth
3269                )?;
3270                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3271                {
3272                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3273                }
3274                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3275                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3276                }
3277            }
3278
3279            next_offset += envelope_size;
3280
3281            // Decode the remaining unknown envelopes.
3282            while next_offset < end_offset {
3283                _next_ordinal_to_read += 1;
3284                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3285                next_offset += envelope_size;
3286            }
3287
3288            Ok(())
3289        }
3290    }
3291
3292    impl NodeBindingInfo {
3293        #[inline(always)]
3294        fn max_ordinal_present(&self) -> u64 {
3295            if let Some(_) = self.composite_parents {
3296                return 3;
3297            }
3298            if let Some(_) = self.driver_url {
3299                return 2;
3300            }
3301            if let Some(_) = self.node_name {
3302                return 1;
3303            }
3304            0
3305        }
3306    }
3307
3308    impl fidl::encoding::ValueTypeMarker for NodeBindingInfo {
3309        type Borrowed<'a> = &'a Self;
3310        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3311            value
3312        }
3313    }
3314
3315    unsafe impl fidl::encoding::TypeMarker for NodeBindingInfo {
3316        type Owned = Self;
3317
3318        #[inline(always)]
3319        fn inline_align(_context: fidl::encoding::Context) -> usize {
3320            8
3321        }
3322
3323        #[inline(always)]
3324        fn inline_size(_context: fidl::encoding::Context) -> usize {
3325            16
3326        }
3327    }
3328
3329    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeBindingInfo, D>
3330        for &NodeBindingInfo
3331    {
3332        unsafe fn encode(
3333            self,
3334            encoder: &mut fidl::encoding::Encoder<'_, D>,
3335            offset: usize,
3336            mut depth: fidl::encoding::Depth,
3337        ) -> fidl::Result<()> {
3338            encoder.debug_check_bounds::<NodeBindingInfo>(offset);
3339            // Vector header
3340            let max_ordinal: u64 = self.max_ordinal_present();
3341            encoder.write_num(max_ordinal, offset);
3342            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3343            // Calling encoder.out_of_line_offset(0) is not allowed.
3344            if max_ordinal == 0 {
3345                return Ok(());
3346            }
3347            depth.increment()?;
3348            let envelope_size = 8;
3349            let bytes_len = max_ordinal as usize * envelope_size;
3350            #[allow(unused_variables)]
3351            let offset = encoder.out_of_line_offset(bytes_len);
3352            let mut _prev_end_offset: usize = 0;
3353            if 1 > max_ordinal {
3354                return Ok(());
3355            }
3356
3357            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3358            // are envelope_size bytes.
3359            let cur_offset: usize = (1 - 1) * envelope_size;
3360
3361            // Zero reserved fields.
3362            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3363
3364            // Safety:
3365            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3366            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3367            //   envelope_size bytes, there is always sufficient room.
3368            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
3369            self.node_name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
3370            encoder, offset + cur_offset, depth
3371        )?;
3372
3373            _prev_end_offset = cur_offset + envelope_size;
3374            if 2 > max_ordinal {
3375                return Ok(());
3376            }
3377
3378            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3379            // are envelope_size bytes.
3380            let cur_offset: usize = (2 - 1) * envelope_size;
3381
3382            // Zero reserved fields.
3383            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3384
3385            // Safety:
3386            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3387            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3388            //   envelope_size bytes, there is always sufficient room.
3389            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
3390            self.driver_url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
3391            encoder, offset + cur_offset, depth
3392        )?;
3393
3394            _prev_end_offset = cur_offset + envelope_size;
3395            if 3 > max_ordinal {
3396                return Ok(());
3397            }
3398
3399            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3400            // are envelope_size bytes.
3401            let cur_offset: usize = (3 - 1) * envelope_size;
3402
3403            // Zero reserved fields.
3404            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3405
3406            // Safety:
3407            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3408            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3409            //   envelope_size bytes, there is always sufficient room.
3410            fidl::encoding::encode_in_envelope_optional::<
3411                fidl::encoding::UnboundedVector<
3412                    fidl_fuchsia_driver_framework_common::CompositeParent,
3413                >,
3414                D,
3415            >(
3416                self.composite_parents.as_ref().map(
3417                    <fidl::encoding::UnboundedVector<
3418                        fidl_fuchsia_driver_framework_common::CompositeParent,
3419                    > as fidl::encoding::ValueTypeMarker>::borrow,
3420                ),
3421                encoder,
3422                offset + cur_offset,
3423                depth,
3424            )?;
3425
3426            _prev_end_offset = cur_offset + envelope_size;
3427
3428            Ok(())
3429        }
3430    }
3431
3432    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeBindingInfo {
3433        #[inline(always)]
3434        fn new_empty() -> Self {
3435            Self::default()
3436        }
3437
3438        unsafe fn decode(
3439            &mut self,
3440            decoder: &mut fidl::encoding::Decoder<'_, D>,
3441            offset: usize,
3442            mut depth: fidl::encoding::Depth,
3443        ) -> fidl::Result<()> {
3444            decoder.debug_check_bounds::<Self>(offset);
3445            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3446                None => return Err(fidl::Error::NotNullable),
3447                Some(len) => len,
3448            };
3449            // Calling decoder.out_of_line_offset(0) is not allowed.
3450            if len == 0 {
3451                return Ok(());
3452            };
3453            depth.increment()?;
3454            let envelope_size = 8;
3455            let bytes_len = len * envelope_size;
3456            let offset = decoder.out_of_line_offset(bytes_len)?;
3457            // Decode the envelope for each type.
3458            let mut _next_ordinal_to_read = 0;
3459            let mut next_offset = offset;
3460            let end_offset = offset + bytes_len;
3461            _next_ordinal_to_read += 1;
3462            if next_offset >= end_offset {
3463                return Ok(());
3464            }
3465
3466            // Decode unknown envelopes for gaps in ordinals.
3467            while _next_ordinal_to_read < 1 {
3468                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3469                _next_ordinal_to_read += 1;
3470                next_offset += envelope_size;
3471            }
3472
3473            let next_out_of_line = decoder.next_out_of_line();
3474            let handles_before = decoder.remaining_handles();
3475            if let Some((inlined, num_bytes, num_handles)) =
3476                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3477            {
3478                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3479                if inlined != (member_inline_size <= 4) {
3480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3481                }
3482                let inner_offset;
3483                let mut inner_depth = depth.clone();
3484                if inlined {
3485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3486                    inner_offset = next_offset;
3487                } else {
3488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3489                    inner_depth.increment()?;
3490                }
3491                let val_ref = self.node_name.get_or_insert_with(|| {
3492                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
3493                });
3494                fidl::decode!(
3495                    fidl::encoding::BoundedString<1024>,
3496                    D,
3497                    val_ref,
3498                    decoder,
3499                    inner_offset,
3500                    inner_depth
3501                )?;
3502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3503                {
3504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3505                }
3506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3508                }
3509            }
3510
3511            next_offset += envelope_size;
3512            _next_ordinal_to_read += 1;
3513            if next_offset >= end_offset {
3514                return Ok(());
3515            }
3516
3517            // Decode unknown envelopes for gaps in ordinals.
3518            while _next_ordinal_to_read < 2 {
3519                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3520                _next_ordinal_to_read += 1;
3521                next_offset += envelope_size;
3522            }
3523
3524            let next_out_of_line = decoder.next_out_of_line();
3525            let handles_before = decoder.remaining_handles();
3526            if let Some((inlined, num_bytes, num_handles)) =
3527                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3528            {
3529                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3530                if inlined != (member_inline_size <= 4) {
3531                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3532                }
3533                let inner_offset;
3534                let mut inner_depth = depth.clone();
3535                if inlined {
3536                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3537                    inner_offset = next_offset;
3538                } else {
3539                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3540                    inner_depth.increment()?;
3541                }
3542                let val_ref = self.driver_url.get_or_insert_with(|| {
3543                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
3544                });
3545                fidl::decode!(
3546                    fidl::encoding::BoundedString<4096>,
3547                    D,
3548                    val_ref,
3549                    decoder,
3550                    inner_offset,
3551                    inner_depth
3552                )?;
3553                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3554                {
3555                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3556                }
3557                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3558                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3559                }
3560            }
3561
3562            next_offset += envelope_size;
3563            _next_ordinal_to_read += 1;
3564            if next_offset >= end_offset {
3565                return Ok(());
3566            }
3567
3568            // Decode unknown envelopes for gaps in ordinals.
3569            while _next_ordinal_to_read < 3 {
3570                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3571                _next_ordinal_to_read += 1;
3572                next_offset += envelope_size;
3573            }
3574
3575            let next_out_of_line = decoder.next_out_of_line();
3576            let handles_before = decoder.remaining_handles();
3577            if let Some((inlined, num_bytes, num_handles)) =
3578                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3579            {
3580                let member_inline_size = <fidl::encoding::UnboundedVector<
3581                    fidl_fuchsia_driver_framework_common::CompositeParent,
3582                > as fidl::encoding::TypeMarker>::inline_size(
3583                    decoder.context
3584                );
3585                if inlined != (member_inline_size <= 4) {
3586                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3587                }
3588                let inner_offset;
3589                let mut inner_depth = depth.clone();
3590                if inlined {
3591                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3592                    inner_offset = next_offset;
3593                } else {
3594                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3595                    inner_depth.increment()?;
3596                }
3597                let val_ref = self.composite_parents.get_or_insert_with(|| {
3598                    fidl::new_empty!(
3599                        fidl::encoding::UnboundedVector<
3600                            fidl_fuchsia_driver_framework_common::CompositeParent,
3601                        >,
3602                        D
3603                    )
3604                });
3605                fidl::decode!(
3606                    fidl::encoding::UnboundedVector<
3607                        fidl_fuchsia_driver_framework_common::CompositeParent,
3608                    >,
3609                    D,
3610                    val_ref,
3611                    decoder,
3612                    inner_offset,
3613                    inner_depth
3614                )?;
3615                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3616                {
3617                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3618                }
3619                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3620                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3621                }
3622            }
3623
3624            next_offset += envelope_size;
3625
3626            // Decode the remaining unknown envelopes.
3627            while next_offset < end_offset {
3628                _next_ordinal_to_read += 1;
3629                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3630                next_offset += envelope_size;
3631            }
3632
3633            Ok(())
3634        }
3635    }
3636
3637    impl NodeInfo {
3638        #[inline(always)]
3639        fn max_ordinal_present(&self) -> u64 {
3640            if let Some(_) = self.topological_path {
3641                return 12;
3642            }
3643            if let Some(_) = self.bus_topology {
3644                return 11;
3645            }
3646            if let Some(_) = self.quarantined {
3647                return 10;
3648            }
3649            if let Some(_) = self.offer_list {
3650                return 9;
3651            }
3652            if let Some(_) = self.node_property_list {
3653                return 8;
3654            }
3655            if let Some(_) = self.moniker {
3656                return 7;
3657            }
3658            if let Some(_) = self.bound_driver_url {
3659                return 5;
3660            }
3661            if let Some(_) = self.driver_host_koid {
3662                return 4;
3663            }
3664            if let Some(_) = self.child_ids {
3665                return 3;
3666            }
3667            if let Some(_) = self.parent_ids {
3668                return 2;
3669            }
3670            if let Some(_) = self.id {
3671                return 1;
3672            }
3673            0
3674        }
3675    }
3676
3677    impl fidl::encoding::ValueTypeMarker for NodeInfo {
3678        type Borrowed<'a> = &'a Self;
3679        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3680            value
3681        }
3682    }
3683
3684    unsafe impl fidl::encoding::TypeMarker for NodeInfo {
3685        type Owned = Self;
3686
3687        #[inline(always)]
3688        fn inline_align(_context: fidl::encoding::Context) -> usize {
3689            8
3690        }
3691
3692        #[inline(always)]
3693        fn inline_size(_context: fidl::encoding::Context) -> usize {
3694            16
3695        }
3696    }
3697
3698    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeInfo, D> for &NodeInfo {
3699        unsafe fn encode(
3700            self,
3701            encoder: &mut fidl::encoding::Encoder<'_, D>,
3702            offset: usize,
3703            mut depth: fidl::encoding::Depth,
3704        ) -> fidl::Result<()> {
3705            encoder.debug_check_bounds::<NodeInfo>(offset);
3706            // Vector header
3707            let max_ordinal: u64 = self.max_ordinal_present();
3708            encoder.write_num(max_ordinal, offset);
3709            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3710            // Calling encoder.out_of_line_offset(0) is not allowed.
3711            if max_ordinal == 0 {
3712                return Ok(());
3713            }
3714            depth.increment()?;
3715            let envelope_size = 8;
3716            let bytes_len = max_ordinal as usize * envelope_size;
3717            #[allow(unused_variables)]
3718            let offset = encoder.out_of_line_offset(bytes_len);
3719            let mut _prev_end_offset: usize = 0;
3720            if 1 > max_ordinal {
3721                return Ok(());
3722            }
3723
3724            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3725            // are envelope_size bytes.
3726            let cur_offset: usize = (1 - 1) * envelope_size;
3727
3728            // Zero reserved fields.
3729            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3730
3731            // Safety:
3732            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3733            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3734            //   envelope_size bytes, there is always sufficient room.
3735            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3736                self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3737                encoder,
3738                offset + cur_offset,
3739                depth,
3740            )?;
3741
3742            _prev_end_offset = cur_offset + envelope_size;
3743            if 2 > max_ordinal {
3744                return Ok(());
3745            }
3746
3747            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3748            // are envelope_size bytes.
3749            let cur_offset: usize = (2 - 1) * envelope_size;
3750
3751            // Zero reserved fields.
3752            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3753
3754            // Safety:
3755            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3756            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3757            //   envelope_size bytes, there is always sufficient room.
3758            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
3759            self.parent_ids.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
3760            encoder, offset + cur_offset, depth
3761        )?;
3762
3763            _prev_end_offset = cur_offset + envelope_size;
3764            if 3 > max_ordinal {
3765                return Ok(());
3766            }
3767
3768            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3769            // are envelope_size bytes.
3770            let cur_offset: usize = (3 - 1) * envelope_size;
3771
3772            // Zero reserved fields.
3773            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3774
3775            // Safety:
3776            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3777            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3778            //   envelope_size bytes, there is always sufficient room.
3779            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
3780            self.child_ids.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
3781            encoder, offset + cur_offset, depth
3782        )?;
3783
3784            _prev_end_offset = cur_offset + envelope_size;
3785            if 4 > max_ordinal {
3786                return Ok(());
3787            }
3788
3789            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3790            // are envelope_size bytes.
3791            let cur_offset: usize = (4 - 1) * envelope_size;
3792
3793            // Zero reserved fields.
3794            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3795
3796            // Safety:
3797            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3798            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3799            //   envelope_size bytes, there is always sufficient room.
3800            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3801                self.driver_host_koid
3802                    .as_ref()
3803                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3804                encoder,
3805                offset + cur_offset,
3806                depth,
3807            )?;
3808
3809            _prev_end_offset = cur_offset + envelope_size;
3810            if 5 > max_ordinal {
3811                return Ok(());
3812            }
3813
3814            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3815            // are envelope_size bytes.
3816            let cur_offset: usize = (5 - 1) * envelope_size;
3817
3818            // Zero reserved fields.
3819            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3820
3821            // Safety:
3822            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3823            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3824            //   envelope_size bytes, there is always sufficient room.
3825            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
3826            self.bound_driver_url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
3827            encoder, offset + cur_offset, depth
3828        )?;
3829
3830            _prev_end_offset = cur_offset + envelope_size;
3831            if 7 > max_ordinal {
3832                return Ok(());
3833            }
3834
3835            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3836            // are envelope_size bytes.
3837            let cur_offset: usize = (7 - 1) * envelope_size;
3838
3839            // Zero reserved fields.
3840            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3841
3842            // Safety:
3843            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3844            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3845            //   envelope_size bytes, there is always sufficient room.
3846            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
3847            self.moniker.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
3848            encoder, offset + cur_offset, depth
3849        )?;
3850
3851            _prev_end_offset = cur_offset + envelope_size;
3852            if 8 > max_ordinal {
3853                return Ok(());
3854            }
3855
3856            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3857            // are envelope_size bytes.
3858            let cur_offset: usize = (8 - 1) * envelope_size;
3859
3860            // Zero reserved fields.
3861            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3862
3863            // Safety:
3864            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3865            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3866            //   envelope_size bytes, there is always sufficient room.
3867            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D>(
3868            self.node_property_list.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
3869            encoder, offset + cur_offset, depth
3870        )?;
3871
3872            _prev_end_offset = cur_offset + envelope_size;
3873            if 9 > max_ordinal {
3874                return Ok(());
3875            }
3876
3877            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3878            // are envelope_size bytes.
3879            let cur_offset: usize = (9 - 1) * envelope_size;
3880
3881            // Zero reserved fields.
3882            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3883
3884            // Safety:
3885            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3886            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3887            //   envelope_size bytes, there is always sufficient room.
3888            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer>, D>(
3889            self.offer_list.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer> as fidl::encoding::ValueTypeMarker>::borrow),
3890            encoder, offset + cur_offset, depth
3891        )?;
3892
3893            _prev_end_offset = cur_offset + envelope_size;
3894            if 10 > max_ordinal {
3895                return Ok(());
3896            }
3897
3898            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3899            // are envelope_size bytes.
3900            let cur_offset: usize = (10 - 1) * envelope_size;
3901
3902            // Zero reserved fields.
3903            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3904
3905            // Safety:
3906            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3907            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3908            //   envelope_size bytes, there is always sufficient room.
3909            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3910                self.quarantined.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3911                encoder,
3912                offset + cur_offset,
3913                depth,
3914            )?;
3915
3916            _prev_end_offset = cur_offset + envelope_size;
3917            if 11 > max_ordinal {
3918                return Ok(());
3919            }
3920
3921            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3922            // are envelope_size bytes.
3923            let cur_offset: usize = (11 - 1) * envelope_size;
3924
3925            // Zero reserved fields.
3926            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3927
3928            // Safety:
3929            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3930            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3931            //   envelope_size bytes, there is always sufficient room.
3932            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20>, D>(
3933            self.bus_topology.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20> as fidl::encoding::ValueTypeMarker>::borrow),
3934            encoder, offset + cur_offset, depth
3935        )?;
3936
3937            _prev_end_offset = cur_offset + envelope_size;
3938            if 12 > max_ordinal {
3939                return Ok(());
3940            }
3941
3942            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3943            // are envelope_size bytes.
3944            let cur_offset: usize = (12 - 1) * envelope_size;
3945
3946            // Zero reserved fields.
3947            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3948
3949            // Safety:
3950            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3951            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3952            //   envelope_size bytes, there is always sufficient room.
3953            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
3954            self.topological_path.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
3955            encoder, offset + cur_offset, depth
3956        )?;
3957
3958            _prev_end_offset = cur_offset + envelope_size;
3959
3960            Ok(())
3961        }
3962    }
3963
3964    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeInfo {
3965        #[inline(always)]
3966        fn new_empty() -> Self {
3967            Self::default()
3968        }
3969
3970        unsafe fn decode(
3971            &mut self,
3972            decoder: &mut fidl::encoding::Decoder<'_, D>,
3973            offset: usize,
3974            mut depth: fidl::encoding::Depth,
3975        ) -> fidl::Result<()> {
3976            decoder.debug_check_bounds::<Self>(offset);
3977            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3978                None => return Err(fidl::Error::NotNullable),
3979                Some(len) => len,
3980            };
3981            // Calling decoder.out_of_line_offset(0) is not allowed.
3982            if len == 0 {
3983                return Ok(());
3984            };
3985            depth.increment()?;
3986            let envelope_size = 8;
3987            let bytes_len = len * envelope_size;
3988            let offset = decoder.out_of_line_offset(bytes_len)?;
3989            // Decode the envelope for each type.
3990            let mut _next_ordinal_to_read = 0;
3991            let mut next_offset = offset;
3992            let end_offset = offset + bytes_len;
3993            _next_ordinal_to_read += 1;
3994            if next_offset >= end_offset {
3995                return Ok(());
3996            }
3997
3998            // Decode unknown envelopes for gaps in ordinals.
3999            while _next_ordinal_to_read < 1 {
4000                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4001                _next_ordinal_to_read += 1;
4002                next_offset += envelope_size;
4003            }
4004
4005            let next_out_of_line = decoder.next_out_of_line();
4006            let handles_before = decoder.remaining_handles();
4007            if let Some((inlined, num_bytes, num_handles)) =
4008                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4009            {
4010                let member_inline_size =
4011                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4012                if inlined != (member_inline_size <= 4) {
4013                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4014                }
4015                let inner_offset;
4016                let mut inner_depth = depth.clone();
4017                if inlined {
4018                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4019                    inner_offset = next_offset;
4020                } else {
4021                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4022                    inner_depth.increment()?;
4023                }
4024                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
4025                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4026                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4027                {
4028                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4029                }
4030                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4031                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4032                }
4033            }
4034
4035            next_offset += envelope_size;
4036            _next_ordinal_to_read += 1;
4037            if next_offset >= end_offset {
4038                return Ok(());
4039            }
4040
4041            // Decode unknown envelopes for gaps in ordinals.
4042            while _next_ordinal_to_read < 2 {
4043                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4044                _next_ordinal_to_read += 1;
4045                next_offset += envelope_size;
4046            }
4047
4048            let next_out_of_line = decoder.next_out_of_line();
4049            let handles_before = decoder.remaining_handles();
4050            if let Some((inlined, num_bytes, num_handles)) =
4051                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4052            {
4053                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4054                if inlined != (member_inline_size <= 4) {
4055                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4056                }
4057                let inner_offset;
4058                let mut inner_depth = depth.clone();
4059                if inlined {
4060                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4061                    inner_offset = next_offset;
4062                } else {
4063                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4064                    inner_depth.increment()?;
4065                }
4066                let val_ref = self.parent_ids.get_or_insert_with(|| {
4067                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
4068                });
4069                fidl::decode!(
4070                    fidl::encoding::UnboundedVector<u64>,
4071                    D,
4072                    val_ref,
4073                    decoder,
4074                    inner_offset,
4075                    inner_depth
4076                )?;
4077                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4078                {
4079                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4080                }
4081                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4082                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4083                }
4084            }
4085
4086            next_offset += envelope_size;
4087            _next_ordinal_to_read += 1;
4088            if next_offset >= end_offset {
4089                return Ok(());
4090            }
4091
4092            // Decode unknown envelopes for gaps in ordinals.
4093            while _next_ordinal_to_read < 3 {
4094                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4095                _next_ordinal_to_read += 1;
4096                next_offset += envelope_size;
4097            }
4098
4099            let next_out_of_line = decoder.next_out_of_line();
4100            let handles_before = decoder.remaining_handles();
4101            if let Some((inlined, num_bytes, num_handles)) =
4102                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4103            {
4104                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4105                if inlined != (member_inline_size <= 4) {
4106                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4107                }
4108                let inner_offset;
4109                let mut inner_depth = depth.clone();
4110                if inlined {
4111                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4112                    inner_offset = next_offset;
4113                } else {
4114                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4115                    inner_depth.increment()?;
4116                }
4117                let val_ref = self.child_ids.get_or_insert_with(|| {
4118                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
4119                });
4120                fidl::decode!(
4121                    fidl::encoding::UnboundedVector<u64>,
4122                    D,
4123                    val_ref,
4124                    decoder,
4125                    inner_offset,
4126                    inner_depth
4127                )?;
4128                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4129                {
4130                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4131                }
4132                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4133                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4134                }
4135            }
4136
4137            next_offset += envelope_size;
4138            _next_ordinal_to_read += 1;
4139            if next_offset >= end_offset {
4140                return Ok(());
4141            }
4142
4143            // Decode unknown envelopes for gaps in ordinals.
4144            while _next_ordinal_to_read < 4 {
4145                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4146                _next_ordinal_to_read += 1;
4147                next_offset += envelope_size;
4148            }
4149
4150            let next_out_of_line = decoder.next_out_of_line();
4151            let handles_before = decoder.remaining_handles();
4152            if let Some((inlined, num_bytes, num_handles)) =
4153                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4154            {
4155                let member_inline_size =
4156                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4157                if inlined != (member_inline_size <= 4) {
4158                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4159                }
4160                let inner_offset;
4161                let mut inner_depth = depth.clone();
4162                if inlined {
4163                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4164                    inner_offset = next_offset;
4165                } else {
4166                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4167                    inner_depth.increment()?;
4168                }
4169                let val_ref = self.driver_host_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
4170                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4172                {
4173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4174                }
4175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4177                }
4178            }
4179
4180            next_offset += envelope_size;
4181            _next_ordinal_to_read += 1;
4182            if next_offset >= end_offset {
4183                return Ok(());
4184            }
4185
4186            // Decode unknown envelopes for gaps in ordinals.
4187            while _next_ordinal_to_read < 5 {
4188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4189                _next_ordinal_to_read += 1;
4190                next_offset += envelope_size;
4191            }
4192
4193            let next_out_of_line = decoder.next_out_of_line();
4194            let handles_before = decoder.remaining_handles();
4195            if let Some((inlined, num_bytes, num_handles)) =
4196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4197            {
4198                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4199                if inlined != (member_inline_size <= 4) {
4200                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4201                }
4202                let inner_offset;
4203                let mut inner_depth = depth.clone();
4204                if inlined {
4205                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4206                    inner_offset = next_offset;
4207                } else {
4208                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4209                    inner_depth.increment()?;
4210                }
4211                let val_ref = self.bound_driver_url.get_or_insert_with(|| {
4212                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
4213                });
4214                fidl::decode!(
4215                    fidl::encoding::BoundedString<4096>,
4216                    D,
4217                    val_ref,
4218                    decoder,
4219                    inner_offset,
4220                    inner_depth
4221                )?;
4222                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4223                {
4224                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4225                }
4226                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4227                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4228                }
4229            }
4230
4231            next_offset += envelope_size;
4232            _next_ordinal_to_read += 1;
4233            if next_offset >= end_offset {
4234                return Ok(());
4235            }
4236
4237            // Decode unknown envelopes for gaps in ordinals.
4238            while _next_ordinal_to_read < 7 {
4239                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4240                _next_ordinal_to_read += 1;
4241                next_offset += envelope_size;
4242            }
4243
4244            let next_out_of_line = decoder.next_out_of_line();
4245            let handles_before = decoder.remaining_handles();
4246            if let Some((inlined, num_bytes, num_handles)) =
4247                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4248            {
4249                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4250                if inlined != (member_inline_size <= 4) {
4251                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4252                }
4253                let inner_offset;
4254                let mut inner_depth = depth.clone();
4255                if inlined {
4256                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4257                    inner_offset = next_offset;
4258                } else {
4259                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4260                    inner_depth.increment()?;
4261                }
4262                let val_ref = self.moniker.get_or_insert_with(|| {
4263                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4264                });
4265                fidl::decode!(
4266                    fidl::encoding::BoundedString<1024>,
4267                    D,
4268                    val_ref,
4269                    decoder,
4270                    inner_offset,
4271                    inner_depth
4272                )?;
4273                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4274                {
4275                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4276                }
4277                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4278                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4279                }
4280            }
4281
4282            next_offset += envelope_size;
4283            _next_ordinal_to_read += 1;
4284            if next_offset >= end_offset {
4285                return Ok(());
4286            }
4287
4288            // Decode unknown envelopes for gaps in ordinals.
4289            while _next_ordinal_to_read < 8 {
4290                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4291                _next_ordinal_to_read += 1;
4292                next_offset += envelope_size;
4293            }
4294
4295            let next_out_of_line = decoder.next_out_of_line();
4296            let handles_before = decoder.remaining_handles();
4297            if let Some((inlined, num_bytes, num_handles)) =
4298                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4299            {
4300                let member_inline_size = <fidl::encoding::Vector<
4301                    fidl_fuchsia_driver_framework_common::NodeProperty,
4302                    64,
4303                > as fidl::encoding::TypeMarker>::inline_size(
4304                    decoder.context
4305                );
4306                if inlined != (member_inline_size <= 4) {
4307                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4308                }
4309                let inner_offset;
4310                let mut inner_depth = depth.clone();
4311                if inlined {
4312                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4313                    inner_offset = next_offset;
4314                } else {
4315                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4316                    inner_depth.increment()?;
4317                }
4318                let val_ref =
4319                self.node_property_list.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D));
4320                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
4321                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4322                {
4323                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4324                }
4325                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4326                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4327                }
4328            }
4329
4330            next_offset += envelope_size;
4331            _next_ordinal_to_read += 1;
4332            if next_offset >= end_offset {
4333                return Ok(());
4334            }
4335
4336            // Decode unknown envelopes for gaps in ordinals.
4337            while _next_ordinal_to_read < 9 {
4338                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4339                _next_ordinal_to_read += 1;
4340                next_offset += envelope_size;
4341            }
4342
4343            let next_out_of_line = decoder.next_out_of_line();
4344            let handles_before = decoder.remaining_handles();
4345            if let Some((inlined, num_bytes, num_handles)) =
4346                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4347            {
4348                let member_inline_size = <fidl::encoding::UnboundedVector<
4349                    fidl_fuchsia_component_decl_common::Offer,
4350                > as fidl::encoding::TypeMarker>::inline_size(
4351                    decoder.context
4352                );
4353                if inlined != (member_inline_size <= 4) {
4354                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4355                }
4356                let inner_offset;
4357                let mut inner_depth = depth.clone();
4358                if inlined {
4359                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4360                    inner_offset = next_offset;
4361                } else {
4362                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4363                    inner_depth.increment()?;
4364                }
4365                let val_ref = self.offer_list.get_or_insert_with(|| {
4366                    fidl::new_empty!(
4367                        fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer>,
4368                        D
4369                    )
4370                });
4371                fidl::decode!(
4372                    fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer>,
4373                    D,
4374                    val_ref,
4375                    decoder,
4376                    inner_offset,
4377                    inner_depth
4378                )?;
4379                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4380                {
4381                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4382                }
4383                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4384                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4385                }
4386            }
4387
4388            next_offset += envelope_size;
4389            _next_ordinal_to_read += 1;
4390            if next_offset >= end_offset {
4391                return Ok(());
4392            }
4393
4394            // Decode unknown envelopes for gaps in ordinals.
4395            while _next_ordinal_to_read < 10 {
4396                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4397                _next_ordinal_to_read += 1;
4398                next_offset += envelope_size;
4399            }
4400
4401            let next_out_of_line = decoder.next_out_of_line();
4402            let handles_before = decoder.remaining_handles();
4403            if let Some((inlined, num_bytes, num_handles)) =
4404                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4405            {
4406                let member_inline_size =
4407                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4408                if inlined != (member_inline_size <= 4) {
4409                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4410                }
4411                let inner_offset;
4412                let mut inner_depth = depth.clone();
4413                if inlined {
4414                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4415                    inner_offset = next_offset;
4416                } else {
4417                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4418                    inner_depth.increment()?;
4419                }
4420                let val_ref = self.quarantined.get_or_insert_with(|| fidl::new_empty!(bool, D));
4421                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4422                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4423                {
4424                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4425                }
4426                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4427                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4428                }
4429            }
4430
4431            next_offset += envelope_size;
4432            _next_ordinal_to_read += 1;
4433            if next_offset >= end_offset {
4434                return Ok(());
4435            }
4436
4437            // Decode unknown envelopes for gaps in ordinals.
4438            while _next_ordinal_to_read < 11 {
4439                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4440                _next_ordinal_to_read += 1;
4441                next_offset += envelope_size;
4442            }
4443
4444            let next_out_of_line = decoder.next_out_of_line();
4445            let handles_before = decoder.remaining_handles();
4446            if let Some((inlined, num_bytes, num_handles)) =
4447                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4448            {
4449                let member_inline_size = <fidl::encoding::Vector<
4450                    fidl_fuchsia_driver_framework_common::BusInfo,
4451                    20,
4452                > as fidl::encoding::TypeMarker>::inline_size(
4453                    decoder.context
4454                );
4455                if inlined != (member_inline_size <= 4) {
4456                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4457                }
4458                let inner_offset;
4459                let mut inner_depth = depth.clone();
4460                if inlined {
4461                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4462                    inner_offset = next_offset;
4463                } else {
4464                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4465                    inner_depth.increment()?;
4466                }
4467                let val_ref =
4468                self.bus_topology.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20>, D));
4469                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20>, D, val_ref, decoder, inner_offset, inner_depth)?;
4470                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4471                {
4472                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4473                }
4474                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4475                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4476                }
4477            }
4478
4479            next_offset += envelope_size;
4480            _next_ordinal_to_read += 1;
4481            if next_offset >= end_offset {
4482                return Ok(());
4483            }
4484
4485            // Decode unknown envelopes for gaps in ordinals.
4486            while _next_ordinal_to_read < 12 {
4487                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4488                _next_ordinal_to_read += 1;
4489                next_offset += envelope_size;
4490            }
4491
4492            let next_out_of_line = decoder.next_out_of_line();
4493            let handles_before = decoder.remaining_handles();
4494            if let Some((inlined, num_bytes, num_handles)) =
4495                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4496            {
4497                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4498                if inlined != (member_inline_size <= 4) {
4499                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4500                }
4501                let inner_offset;
4502                let mut inner_depth = depth.clone();
4503                if inlined {
4504                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4505                    inner_offset = next_offset;
4506                } else {
4507                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4508                    inner_depth.increment()?;
4509                }
4510                let val_ref = self.topological_path.get_or_insert_with(|| {
4511                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4512                });
4513                fidl::decode!(
4514                    fidl::encoding::BoundedString<1024>,
4515                    D,
4516                    val_ref,
4517                    decoder,
4518                    inner_offset,
4519                    inner_depth
4520                )?;
4521                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4522                {
4523                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4524                }
4525                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4526                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4527                }
4528            }
4529
4530            next_offset += envelope_size;
4531
4532            // Decode the remaining unknown envelopes.
4533            while next_offset < end_offset {
4534                _next_ordinal_to_read += 1;
4535                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4536                next_offset += envelope_size;
4537            }
4538
4539            Ok(())
4540        }
4541    }
4542
4543    impl TestNodeAddArgs {
4544        #[inline(always)]
4545        fn max_ordinal_present(&self) -> u64 {
4546            if let Some(_) = self.properties {
4547                return 2;
4548            }
4549            if let Some(_) = self.name {
4550                return 1;
4551            }
4552            0
4553        }
4554    }
4555
4556    impl fidl::encoding::ValueTypeMarker for TestNodeAddArgs {
4557        type Borrowed<'a> = &'a Self;
4558        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4559            value
4560        }
4561    }
4562
4563    unsafe impl fidl::encoding::TypeMarker for TestNodeAddArgs {
4564        type Owned = Self;
4565
4566        #[inline(always)]
4567        fn inline_align(_context: fidl::encoding::Context) -> usize {
4568            8
4569        }
4570
4571        #[inline(always)]
4572        fn inline_size(_context: fidl::encoding::Context) -> usize {
4573            16
4574        }
4575    }
4576
4577    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TestNodeAddArgs, D>
4578        for &TestNodeAddArgs
4579    {
4580        unsafe fn encode(
4581            self,
4582            encoder: &mut fidl::encoding::Encoder<'_, D>,
4583            offset: usize,
4584            mut depth: fidl::encoding::Depth,
4585        ) -> fidl::Result<()> {
4586            encoder.debug_check_bounds::<TestNodeAddArgs>(offset);
4587            // Vector header
4588            let max_ordinal: u64 = self.max_ordinal_present();
4589            encoder.write_num(max_ordinal, offset);
4590            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4591            // Calling encoder.out_of_line_offset(0) is not allowed.
4592            if max_ordinal == 0 {
4593                return Ok(());
4594            }
4595            depth.increment()?;
4596            let envelope_size = 8;
4597            let bytes_len = max_ordinal as usize * envelope_size;
4598            #[allow(unused_variables)]
4599            let offset = encoder.out_of_line_offset(bytes_len);
4600            let mut _prev_end_offset: usize = 0;
4601            if 1 > max_ordinal {
4602                return Ok(());
4603            }
4604
4605            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4606            // are envelope_size bytes.
4607            let cur_offset: usize = (1 - 1) * envelope_size;
4608
4609            // Zero reserved fields.
4610            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4611
4612            // Safety:
4613            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4614            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4615            //   envelope_size bytes, there is always sufficient room.
4616            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
4617            self.name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
4618            encoder, offset + cur_offset, depth
4619        )?;
4620
4621            _prev_end_offset = cur_offset + envelope_size;
4622            if 2 > max_ordinal {
4623                return Ok(());
4624            }
4625
4626            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4627            // are envelope_size bytes.
4628            let cur_offset: usize = (2 - 1) * envelope_size;
4629
4630            // Zero reserved fields.
4631            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4632
4633            // Safety:
4634            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4635            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4636            //   envelope_size bytes, there is always sufficient room.
4637            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D>(
4638            self.properties.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
4639            encoder, offset + cur_offset, depth
4640        )?;
4641
4642            _prev_end_offset = cur_offset + envelope_size;
4643
4644            Ok(())
4645        }
4646    }
4647
4648    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TestNodeAddArgs {
4649        #[inline(always)]
4650        fn new_empty() -> Self {
4651            Self::default()
4652        }
4653
4654        unsafe fn decode(
4655            &mut self,
4656            decoder: &mut fidl::encoding::Decoder<'_, D>,
4657            offset: usize,
4658            mut depth: fidl::encoding::Depth,
4659        ) -> fidl::Result<()> {
4660            decoder.debug_check_bounds::<Self>(offset);
4661            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4662                None => return Err(fidl::Error::NotNullable),
4663                Some(len) => len,
4664            };
4665            // Calling decoder.out_of_line_offset(0) is not allowed.
4666            if len == 0 {
4667                return Ok(());
4668            };
4669            depth.increment()?;
4670            let envelope_size = 8;
4671            let bytes_len = len * envelope_size;
4672            let offset = decoder.out_of_line_offset(bytes_len)?;
4673            // Decode the envelope for each type.
4674            let mut _next_ordinal_to_read = 0;
4675            let mut next_offset = offset;
4676            let end_offset = offset + bytes_len;
4677            _next_ordinal_to_read += 1;
4678            if next_offset >= end_offset {
4679                return Ok(());
4680            }
4681
4682            // Decode unknown envelopes for gaps in ordinals.
4683            while _next_ordinal_to_read < 1 {
4684                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4685                _next_ordinal_to_read += 1;
4686                next_offset += envelope_size;
4687            }
4688
4689            let next_out_of_line = decoder.next_out_of_line();
4690            let handles_before = decoder.remaining_handles();
4691            if let Some((inlined, num_bytes, num_handles)) =
4692                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4693            {
4694                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4695                if inlined != (member_inline_size <= 4) {
4696                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4697                }
4698                let inner_offset;
4699                let mut inner_depth = depth.clone();
4700                if inlined {
4701                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4702                    inner_offset = next_offset;
4703                } else {
4704                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4705                    inner_depth.increment()?;
4706                }
4707                let val_ref = self.name.get_or_insert_with(|| {
4708                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4709                });
4710                fidl::decode!(
4711                    fidl::encoding::BoundedString<1024>,
4712                    D,
4713                    val_ref,
4714                    decoder,
4715                    inner_offset,
4716                    inner_depth
4717                )?;
4718                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4719                {
4720                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4721                }
4722                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4723                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4724                }
4725            }
4726
4727            next_offset += envelope_size;
4728            _next_ordinal_to_read += 1;
4729            if next_offset >= end_offset {
4730                return Ok(());
4731            }
4732
4733            // Decode unknown envelopes for gaps in ordinals.
4734            while _next_ordinal_to_read < 2 {
4735                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4736                _next_ordinal_to_read += 1;
4737                next_offset += envelope_size;
4738            }
4739
4740            let next_out_of_line = decoder.next_out_of_line();
4741            let handles_before = decoder.remaining_handles();
4742            if let Some((inlined, num_bytes, num_handles)) =
4743                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4744            {
4745                let member_inline_size = <fidl::encoding::Vector<
4746                    fidl_fuchsia_driver_framework_common::NodeProperty,
4747                    64,
4748                > as fidl::encoding::TypeMarker>::inline_size(
4749                    decoder.context
4750                );
4751                if inlined != (member_inline_size <= 4) {
4752                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4753                }
4754                let inner_offset;
4755                let mut inner_depth = depth.clone();
4756                if inlined {
4757                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4758                    inner_offset = next_offset;
4759                } else {
4760                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4761                    inner_depth.increment()?;
4762                }
4763                let val_ref =
4764                self.properties.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D));
4765                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
4766                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4767                {
4768                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4769                }
4770                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4771                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4772                }
4773            }
4774
4775            next_offset += envelope_size;
4776
4777            // Decode the remaining unknown envelopes.
4778            while next_offset < end_offset {
4779                _next_ordinal_to_read += 1;
4780                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4781                next_offset += envelope_size;
4782            }
4783
4784            Ok(())
4785        }
4786    }
4787
4788    impl ThreadInfo {
4789        #[inline(always)]
4790        fn max_ordinal_present(&self) -> u64 {
4791            if let Some(_) = self.scheduler_role {
4792                return 3;
4793            }
4794            if let Some(_) = self.name {
4795                return 2;
4796            }
4797            if let Some(_) = self.koid {
4798                return 1;
4799            }
4800            0
4801        }
4802    }
4803
4804    impl fidl::encoding::ValueTypeMarker for ThreadInfo {
4805        type Borrowed<'a> = &'a Self;
4806        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4807            value
4808        }
4809    }
4810
4811    unsafe impl fidl::encoding::TypeMarker for ThreadInfo {
4812        type Owned = Self;
4813
4814        #[inline(always)]
4815        fn inline_align(_context: fidl::encoding::Context) -> usize {
4816            8
4817        }
4818
4819        #[inline(always)]
4820        fn inline_size(_context: fidl::encoding::Context) -> usize {
4821            16
4822        }
4823    }
4824
4825    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadInfo, D>
4826        for &ThreadInfo
4827    {
4828        unsafe fn encode(
4829            self,
4830            encoder: &mut fidl::encoding::Encoder<'_, D>,
4831            offset: usize,
4832            mut depth: fidl::encoding::Depth,
4833        ) -> fidl::Result<()> {
4834            encoder.debug_check_bounds::<ThreadInfo>(offset);
4835            // Vector header
4836            let max_ordinal: u64 = self.max_ordinal_present();
4837            encoder.write_num(max_ordinal, offset);
4838            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4839            // Calling encoder.out_of_line_offset(0) is not allowed.
4840            if max_ordinal == 0 {
4841                return Ok(());
4842            }
4843            depth.increment()?;
4844            let envelope_size = 8;
4845            let bytes_len = max_ordinal as usize * envelope_size;
4846            #[allow(unused_variables)]
4847            let offset = encoder.out_of_line_offset(bytes_len);
4848            let mut _prev_end_offset: usize = 0;
4849            if 1 > max_ordinal {
4850                return Ok(());
4851            }
4852
4853            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4854            // are envelope_size bytes.
4855            let cur_offset: usize = (1 - 1) * envelope_size;
4856
4857            // Zero reserved fields.
4858            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4859
4860            // Safety:
4861            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4862            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4863            //   envelope_size bytes, there is always sufficient room.
4864            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4865                self.koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4866                encoder,
4867                offset + cur_offset,
4868                depth,
4869            )?;
4870
4871            _prev_end_offset = cur_offset + envelope_size;
4872            if 2 > max_ordinal {
4873                return Ok(());
4874            }
4875
4876            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4877            // are envelope_size bytes.
4878            let cur_offset: usize = (2 - 1) * envelope_size;
4879
4880            // Zero reserved fields.
4881            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4882
4883            // Safety:
4884            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4885            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4886            //   envelope_size bytes, there is always sufficient room.
4887            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4888                self.name.as_ref().map(
4889                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4890                ),
4891                encoder,
4892                offset + cur_offset,
4893                depth,
4894            )?;
4895
4896            _prev_end_offset = cur_offset + envelope_size;
4897            if 3 > max_ordinal {
4898                return Ok(());
4899            }
4900
4901            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4902            // are envelope_size bytes.
4903            let cur_offset: usize = (3 - 1) * envelope_size;
4904
4905            // Zero reserved fields.
4906            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4907
4908            // Safety:
4909            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4910            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4911            //   envelope_size bytes, there is always sufficient room.
4912            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4913                self.scheduler_role.as_ref().map(
4914                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4915                ),
4916                encoder,
4917                offset + cur_offset,
4918                depth,
4919            )?;
4920
4921            _prev_end_offset = cur_offset + envelope_size;
4922
4923            Ok(())
4924        }
4925    }
4926
4927    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadInfo {
4928        #[inline(always)]
4929        fn new_empty() -> Self {
4930            Self::default()
4931        }
4932
4933        unsafe fn decode(
4934            &mut self,
4935            decoder: &mut fidl::encoding::Decoder<'_, D>,
4936            offset: usize,
4937            mut depth: fidl::encoding::Depth,
4938        ) -> fidl::Result<()> {
4939            decoder.debug_check_bounds::<Self>(offset);
4940            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4941                None => return Err(fidl::Error::NotNullable),
4942                Some(len) => len,
4943            };
4944            // Calling decoder.out_of_line_offset(0) is not allowed.
4945            if len == 0 {
4946                return Ok(());
4947            };
4948            depth.increment()?;
4949            let envelope_size = 8;
4950            let bytes_len = len * envelope_size;
4951            let offset = decoder.out_of_line_offset(bytes_len)?;
4952            // Decode the envelope for each type.
4953            let mut _next_ordinal_to_read = 0;
4954            let mut next_offset = offset;
4955            let end_offset = offset + bytes_len;
4956            _next_ordinal_to_read += 1;
4957            if next_offset >= end_offset {
4958                return Ok(());
4959            }
4960
4961            // Decode unknown envelopes for gaps in ordinals.
4962            while _next_ordinal_to_read < 1 {
4963                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4964                _next_ordinal_to_read += 1;
4965                next_offset += envelope_size;
4966            }
4967
4968            let next_out_of_line = decoder.next_out_of_line();
4969            let handles_before = decoder.remaining_handles();
4970            if let Some((inlined, num_bytes, num_handles)) =
4971                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4972            {
4973                let member_inline_size =
4974                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4975                if inlined != (member_inline_size <= 4) {
4976                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4977                }
4978                let inner_offset;
4979                let mut inner_depth = depth.clone();
4980                if inlined {
4981                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4982                    inner_offset = next_offset;
4983                } else {
4984                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4985                    inner_depth.increment()?;
4986                }
4987                let val_ref = self.koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
4988                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4990                {
4991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4992                }
4993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4995                }
4996            }
4997
4998            next_offset += envelope_size;
4999            _next_ordinal_to_read += 1;
5000            if next_offset >= end_offset {
5001                return Ok(());
5002            }
5003
5004            // Decode unknown envelopes for gaps in ordinals.
5005            while _next_ordinal_to_read < 2 {
5006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5007                _next_ordinal_to_read += 1;
5008                next_offset += envelope_size;
5009            }
5010
5011            let next_out_of_line = decoder.next_out_of_line();
5012            let handles_before = decoder.remaining_handles();
5013            if let Some((inlined, num_bytes, num_handles)) =
5014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5015            {
5016                let member_inline_size =
5017                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
5018                        decoder.context,
5019                    );
5020                if inlined != (member_inline_size <= 4) {
5021                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5022                }
5023                let inner_offset;
5024                let mut inner_depth = depth.clone();
5025                if inlined {
5026                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5027                    inner_offset = next_offset;
5028                } else {
5029                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5030                    inner_depth.increment()?;
5031                }
5032                let val_ref = self
5033                    .name
5034                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
5035                fidl::decode!(
5036                    fidl::encoding::UnboundedString,
5037                    D,
5038                    val_ref,
5039                    decoder,
5040                    inner_offset,
5041                    inner_depth
5042                )?;
5043                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5044                {
5045                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5046                }
5047                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5048                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5049                }
5050            }
5051
5052            next_offset += envelope_size;
5053            _next_ordinal_to_read += 1;
5054            if next_offset >= end_offset {
5055                return Ok(());
5056            }
5057
5058            // Decode unknown envelopes for gaps in ordinals.
5059            while _next_ordinal_to_read < 3 {
5060                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5061                _next_ordinal_to_read += 1;
5062                next_offset += envelope_size;
5063            }
5064
5065            let next_out_of_line = decoder.next_out_of_line();
5066            let handles_before = decoder.remaining_handles();
5067            if let Some((inlined, num_bytes, num_handles)) =
5068                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5069            {
5070                let member_inline_size =
5071                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
5072                        decoder.context,
5073                    );
5074                if inlined != (member_inline_size <= 4) {
5075                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5076                }
5077                let inner_offset;
5078                let mut inner_depth = depth.clone();
5079                if inlined {
5080                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5081                    inner_offset = next_offset;
5082                } else {
5083                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5084                    inner_depth.increment()?;
5085                }
5086                let val_ref = self
5087                    .scheduler_role
5088                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
5089                fidl::decode!(
5090                    fidl::encoding::UnboundedString,
5091                    D,
5092                    val_ref,
5093                    decoder,
5094                    inner_offset,
5095                    inner_depth
5096                )?;
5097                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5098                {
5099                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5100                }
5101                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5102                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5103                }
5104            }
5105
5106            next_offset += envelope_size;
5107
5108            // Decode the remaining unknown envelopes.
5109            while next_offset < end_offset {
5110                _next_ordinal_to_read += 1;
5111                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5112                next_offset += envelope_size;
5113            }
5114
5115            Ok(())
5116        }
5117    }
5118
5119    impl fidl::encoding::ValueTypeMarker for CompositeInfo {
5120        type Borrowed<'a> = &'a Self;
5121        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5122            value
5123        }
5124    }
5125
5126    unsafe impl fidl::encoding::TypeMarker for CompositeInfo {
5127        type Owned = Self;
5128
5129        #[inline(always)]
5130        fn inline_align(_context: fidl::encoding::Context) -> usize {
5131            8
5132        }
5133
5134        #[inline(always)]
5135        fn inline_size(_context: fidl::encoding::Context) -> usize {
5136            16
5137        }
5138    }
5139
5140    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeInfo, D>
5141        for &CompositeInfo
5142    {
5143        #[inline]
5144        unsafe fn encode(
5145            self,
5146            encoder: &mut fidl::encoding::Encoder<'_, D>,
5147            offset: usize,
5148            _depth: fidl::encoding::Depth,
5149        ) -> fidl::Result<()> {
5150            encoder.debug_check_bounds::<CompositeInfo>(offset);
5151            encoder.write_num::<u64>(self.ordinal(), offset);
5152            match self {
5153            CompositeInfo::Composite(ref val) => {
5154                fidl::encoding::encode_in_envelope::<fidl_fuchsia_driver_framework_common::CompositeInfo, D>(
5155                    <fidl_fuchsia_driver_framework_common::CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
5156                    encoder, offset + 8, _depth
5157                )
5158            }
5159        }
5160        }
5161    }
5162
5163    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeInfo {
5164        #[inline(always)]
5165        fn new_empty() -> Self {
5166            Self::Composite(fidl::new_empty!(
5167                fidl_fuchsia_driver_framework_common::CompositeInfo,
5168                D
5169            ))
5170        }
5171
5172        #[inline]
5173        unsafe fn decode(
5174            &mut self,
5175            decoder: &mut fidl::encoding::Decoder<'_, D>,
5176            offset: usize,
5177            mut depth: fidl::encoding::Depth,
5178        ) -> fidl::Result<()> {
5179            decoder.debug_check_bounds::<Self>(offset);
5180            #[allow(unused_variables)]
5181            let next_out_of_line = decoder.next_out_of_line();
5182            let handles_before = decoder.remaining_handles();
5183            let (ordinal, inlined, num_bytes, num_handles) =
5184                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5185
5186            let member_inline_size = match ordinal {
5187            2 => <fidl_fuchsia_driver_framework_common::CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5188            _ => return Err(fidl::Error::UnknownUnionTag),
5189        };
5190
5191            if inlined != (member_inline_size <= 4) {
5192                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5193            }
5194            let _inner_offset;
5195            if inlined {
5196                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5197                _inner_offset = offset + 8;
5198            } else {
5199                depth.increment()?;
5200                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5201            }
5202            match ordinal {
5203                2 => {
5204                    #[allow(irrefutable_let_patterns)]
5205                    if let CompositeInfo::Composite(_) = self {
5206                        // Do nothing, read the value into the object
5207                    } else {
5208                        // Initialize `self` to the right variant
5209                        *self = CompositeInfo::Composite(fidl::new_empty!(
5210                            fidl_fuchsia_driver_framework_common::CompositeInfo,
5211                            D
5212                        ));
5213                    }
5214                    #[allow(irrefutable_let_patterns)]
5215                    if let CompositeInfo::Composite(ref mut val) = self {
5216                        fidl::decode!(
5217                            fidl_fuchsia_driver_framework_common::CompositeInfo,
5218                            D,
5219                            val,
5220                            decoder,
5221                            _inner_offset,
5222                            depth
5223                        )?;
5224                    } else {
5225                        unreachable!()
5226                    }
5227                }
5228                ordinal => panic!("unexpected ordinal {:?}", ordinal),
5229            }
5230            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5231                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5232            }
5233            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5234                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5235            }
5236            Ok(())
5237        }
5238    }
5239}