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