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