Skip to main content

fidl_fuchsia_driver_development_common/
fidl_fuchsia_driver_development_common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub const BINDING_RESULT_MAX: u8 = 10;
12
13pub const BINDING_RESULT_MAX_2: u32 = 256;
14
15pub const HASH_LENGTH: u8 = 64;
16
17pub const MAX_SEGMENTS: u32 = 20;
18
19pub const NODE_MONIKER_MAX: u32 = 1024;
20
21pub const POWER_TOKEN_OVERRIDES_MAX: u8 = 16;
22
23bitflags! {
24    /// These flags indicate when a |fuchsia.driver.index.DriverIndex::MatchDriver| call should be
25    /// made for a node that is restarting in order to find a new driver, instead of reusing the driver
26    /// that was previously bound to the node.
27    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
28    pub struct RestartRematchFlags: u32 {
29        /// Rematch nodes that are currently bound to the requested driver. The requested driver is
30        /// the driver url that the restart operation was initiated for.
31        const REQUESTED = 1;
32        /// Rematch nodes that are currently bound to a driver other than the requested driver. These
33        /// are nodes that are affected by the restart of the requested driver, for example when
34        /// it is a colocated parent.
35        const NON_REQUESTED = 2;
36        /// Rematch nodes that are created as part of a completed composite spec.
37        const COMPOSITE_SPEC = 8;
38    }
39}
40
41impl RestartRematchFlags {
42    #[inline(always)]
43    pub fn from_bits_allow_unknown(bits: u32) -> Self {
44        Self::from_bits_retain(bits)
45    }
46
47    #[inline(always)]
48    pub fn has_unknown_bits(&self) -> bool {
49        self.get_unknown_bits() != 0
50    }
51
52    #[inline(always)]
53    pub fn get_unknown_bits(&self) -> u32 {
54        self.bits() & !Self::all().bits()
55    }
56}
57
58/// The lifecycle state of a dispatcher.
59#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
60pub enum DispatcherState {
61    Running,
62    ShuttingDown,
63    Shutdown,
64    Destroyed,
65    #[doc(hidden)]
66    __SourceBreaking {
67        unknown_ordinal: u32,
68    },
69}
70
71/// Pattern that matches an unknown `DispatcherState` member.
72#[macro_export]
73macro_rules! DispatcherStateUnknown {
74    () => {
75        _
76    };
77}
78
79impl DispatcherState {
80    #[inline]
81    pub fn from_primitive(prim: u32) -> Option<Self> {
82        match prim {
83            1 => Some(Self::Running),
84            2 => Some(Self::ShuttingDown),
85            3 => Some(Self::Shutdown),
86            4 => Some(Self::Destroyed),
87            _ => None,
88        }
89    }
90
91    #[inline]
92    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
93        match prim {
94            1 => Self::Running,
95            2 => Self::ShuttingDown,
96            3 => Self::Shutdown,
97            4 => Self::Destroyed,
98            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
99        }
100    }
101
102    #[inline]
103    pub fn unknown() -> Self {
104        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
105    }
106
107    #[inline]
108    pub const fn into_primitive(self) -> u32 {
109        match self {
110            Self::Running => 1,
111            Self::ShuttingDown => 2,
112            Self::Shutdown => 3,
113            Self::Destroyed => 4,
114            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
115        }
116    }
117
118    #[inline]
119    pub fn is_unknown(&self) -> bool {
120        match self {
121            Self::__SourceBreaking { unknown_ordinal: _ } => true,
122            _ => false,
123        }
124    }
125}
126
127#[derive(Clone, Debug, PartialEq)]
128pub struct CompositeInfoIteratorGetNextResponse {
129    pub composites: Vec<CompositeNodeInfo>,
130}
131
132impl fidl::Persistable for CompositeInfoIteratorGetNextResponse {}
133
134#[derive(Clone, Debug, PartialEq)]
135pub struct CompositeNodeSpecIteratorGetNextResponse {
136    pub specs: Vec<fidl_fuchsia_driver_framework_common::CompositeInfo>,
137}
138
139impl fidl::Persistable for CompositeNodeSpecIteratorGetNextResponse {}
140
141#[derive(Clone, Debug, PartialEq)]
142pub struct DriverHostInfoIteratorGetNextResponse {
143    pub driver_hosts: Vec<DriverHostInfo>,
144}
145
146impl fidl::Persistable for DriverHostInfoIteratorGetNextResponse {}
147
148#[derive(Clone, Debug, PartialEq)]
149pub struct DriverInfoIteratorGetNextResponse {
150    pub drivers: Vec<fidl_fuchsia_driver_framework_common::DriverInfo>,
151}
152
153impl fidl::Persistable for DriverInfoIteratorGetNextResponse {}
154
155#[derive(Clone, Debug, PartialEq)]
156pub struct ManagerAddTestNodeRequest {
157    pub args: TestNodeAddArgs,
158}
159
160impl fidl::Persistable for ManagerAddTestNodeRequest {}
161
162#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
163pub struct ManagerDisableDriverRequest {
164    pub driver_url: String,
165    pub package_hash: Option<String>,
166}
167
168impl fidl::Persistable for ManagerDisableDriverRequest {}
169
170#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
171pub struct ManagerEnableDriverRequest {
172    pub driver_url: String,
173    pub package_hash: Option<String>,
174}
175
176impl fidl::Persistable for ManagerEnableDriverRequest {}
177
178#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
179pub struct ManagerRebindCompositesWithDriverRequest {
180    pub driver_url: String,
181}
182
183impl fidl::Persistable for ManagerRebindCompositesWithDriverRequest {}
184
185#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
186pub struct ManagerRemoveTestNodeRequest {
187    pub name: String,
188}
189
190impl fidl::Persistable for ManagerRemoveTestNodeRequest {}
191
192#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
193pub struct ManagerRestartDriverHostsRequest {
194    pub driver_url: String,
195    pub rematch_flags: RestartRematchFlags,
196}
197
198impl fidl::Persistable for ManagerRestartDriverHostsRequest {}
199
200#[derive(Clone, Debug, PartialEq)]
201pub struct ManagerBindAllUnboundNodes2Response {
202    /// List of new bindings that happened as a result of this.
203    pub binding_result: Vec<NodeBindingInfo>,
204}
205
206impl fidl::Persistable for ManagerBindAllUnboundNodes2Response {}
207
208#[derive(Clone, Debug, PartialEq)]
209pub struct ManagerBindAllUnboundNodesResponse {
210    /// List of new bindings that happened as a result of this.
211    pub binding_result: Vec<NodeBindingInfo>,
212}
213
214impl fidl::Persistable for ManagerBindAllUnboundNodesResponse {}
215
216#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
217#[repr(C)]
218pub struct ManagerRebindCompositesWithDriverResponse {
219    pub count: u32,
220}
221
222impl fidl::Persistable for ManagerRebindCompositesWithDriverResponse {}
223
224#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
225#[repr(C)]
226pub struct ManagerRestartDriverHostsResponse {
227    pub count: u32,
228}
229
230impl fidl::Persistable for ManagerRestartDriverHostsResponse {}
231
232#[derive(Clone, Debug, PartialEq)]
233pub struct NodeInfoIteratorGetNextResponse {
234    pub nodes: Vec<NodeInfo>,
235}
236
237impl fidl::Persistable for NodeInfoIteratorGetNextResponse {}
238
239/// Contains information for a composite node.
240#[derive(Clone, Debug, Default, PartialEq)]
241pub struct CompositeNodeInfo {
242    /// The topological paths of the parent nodes of this composite, ordered by index.
243    pub parent_topological_paths: Option<Vec<Option<String>>>,
244    /// The topological path of the created composite node. Empty if not created.
245    pub topological_path: Option<String>,
246    pub composite: Option<CompositeInfo>,
247    /// The monikers of the parent nodes of this composite, ordered by index.
248    pub parent_monikers: Option<Vec<Option<String>>>,
249    /// The moniker of the created composite node. Empty if not created.
250    pub moniker: Option<String>,
251    #[doc(hidden)]
252    pub __source_breaking: fidl::marker::SourceBreaking,
253}
254
255impl fidl::Persistable for CompositeNodeInfo {}
256
257/// Request and inlining statistics for a dispatcher.
258#[derive(Clone, Debug, Default, PartialEq)]
259pub struct DispatcherDebugStats {
260    /// Total number of requests processed by this dispatcher.
261    pub num_total_requests: Option<u64>,
262    /// Number of requests that were inlined.
263    pub num_inlined_requests: Option<u64>,
264    /// Breakdown of reasons why requests were not inlined.
265    pub non_inlined: Option<NonInlinedRequestStats>,
266    #[doc(hidden)]
267    pub __source_breaking: fidl::marker::SourceBreaking,
268}
269
270impl fidl::Persistable for DispatcherDebugStats {}
271
272/// Contains information for a dispatcher.
273#[derive(Clone, Debug, Default, PartialEq)]
274pub struct DispatcherInfo {
275    /// The driver which created this dispatcher.
276    pub driver: Option<String>,
277    /// The name of the dispatcher.
278    pub name: Option<String>,
279    /// The options the dispatcher was created with.
280    pub options: Option<u32>,
281    /// The scheduler role of the dispatcher.
282    pub scheduler_role: Option<String>,
283    /// Address of the dispatcher in the driver host process.
284    pub dispatcher_ptr: Option<u64>,
285    /// Address of the driver owner in the driver host process.
286    pub driver_ptr: Option<u64>,
287    /// Whether the dispatcher is synchronized.
288    pub synchronized: Option<bool>,
289    /// Whether the dispatcher allows blocking synchronous calls.
290    pub allow_sync_calls: Option<bool>,
291    /// Current lifecycle state of the dispatcher.
292    pub state: Option<DispatcherState>,
293    /// Name of the dispatcher that initiated destruction, if `Destroy` was called.
294    pub destroy_context: Option<String>,
295    /// Whether `Destroy` was user-initiated (`true`) or environment-initiated (`false`).
296    pub destroy_user_initiated: Option<bool>,
297    /// Request and inlining statistics for the dispatcher.
298    pub debug_stats: Option<DispatcherDebugStats>,
299    /// Currently queued tasks on the dispatcher.
300    pub queued_tasks: Option<Vec<QueuedTaskInfo>>,
301    /// Total number of queued tasks on the dispatcher prior to any truncation.
302    pub num_queued_tasks: Option<u64>,
303    #[doc(hidden)]
304    pub __source_breaking: fidl::marker::SourceBreaking,
305}
306
307impl fidl::Persistable for DispatcherInfo {}
308
309/// Contains information for a driver host.
310#[derive(Clone, Debug, Default, PartialEq)]
311pub struct DriverHostInfo {
312    /// The process KOID of the driver host.
313    pub process_koid: Option<u64>,
314    /// The list of threads of the driver host.
315    pub threads: Option<Vec<ThreadInfo>>,
316    /// List of drivers loaded into this driver host.
317    pub drivers: Option<Vec<String>>,
318    /// List of dispatchers .
319    pub dispatchers: Option<Vec<DispatcherInfo>>,
320    /// Optional name of the driver host.
321    pub name: Option<String>,
322    #[doc(hidden)]
323    pub __source_breaking: fidl::marker::SourceBreaking,
324}
325
326impl fidl::Persistable for DriverHostInfo {}
327
328/// Information about a node binding to either a driver or a composite.
329#[derive(Clone, Debug, Default, PartialEq)]
330pub struct NodeBindingInfo {
331    /// Full topological name of the node.
332    pub node_name: Option<String>,
333    /// This is the component url for the driver that bound to the node.
334    /// If this is present, then |composite_parents| must not be.
335    pub driver_url: Option<String>,
336    /// The composite parents that this node binded to.
337    /// If this is present, then |driver_url| must not be.
338    pub composite_parents: Option<Vec<fidl_fuchsia_driver_framework_common::CompositeParent>>,
339    #[doc(hidden)]
340    pub __source_breaking: fidl::marker::SourceBreaking,
341}
342
343impl fidl::Persistable for NodeBindingInfo {}
344
345#[derive(Clone, Debug, Default, PartialEq)]
346pub struct NodeInfo {
347    /// Unique ID identifying the node.
348    pub id: Option<u64>,
349    /// List of ids representing parents. If more than one, this is a composite node.
350    pub parent_ids: Option<Vec<u64>>,
351    /// List of ids representing children.
352    pub child_ids: Option<Vec<u64>>,
353    /// The process KOID of the driver host the driver resides within.
354    pub driver_host_koid: Option<u64>,
355    /// URL to the driver component manifest
356    pub bound_driver_url: Option<String>,
357    /// The collection-relative moniker of the node.
358    pub moniker: Option<String>,
359    /// Properties of the node.
360    pub node_property_list: Option<Vec<fidl_fuchsia_driver_framework_common::NodeProperty>>,
361    /// Component offers to the node.
362    pub offer_list: Option<Vec<fidl_fuchsia_component_decl_common::Offer>>,
363    /// Whether the node is in a quarantined state. That is, the |bound_driver_url| has failed to
364    /// start, and the node is no longer running its driver instance.
365    pub quarantined: Option<bool>,
366    /// Information about the node's bus topology.
367    pub bus_topology: Option<Vec<fidl_fuchsia_driver_framework_common::BusInfo>>,
368    /// The topological path of the node in devfs.
369    pub topological_path: Option<String>,
370    #[doc(hidden)]
371    pub __source_breaking: fidl::marker::SourceBreaking,
372}
373
374impl fidl::Persistable for NodeInfo {}
375
376/// Breakdown of reasons why requests were not inlined by the driver runtime.
377#[derive(Clone, Debug, Default, PartialEq)]
378pub struct NonInlinedRequestStats {
379    /// Calling from a non-blocking to a blocking (`ALLOW_SYNC_CALLS`) dispatcher.
380    pub allow_sync_calls: Option<u64>,
381    /// Another thread was already dispatching a request.
382    pub parallel_dispatch: Option<u64>,
383    /// The request was a task.
384    pub task: Option<u64>,
385    /// The request was queued from an unknown thread.
386    pub unknown_thread: Option<u64>,
387    /// The request would have been reentrant.
388    pub reentrant: Option<u64>,
389    /// Channel wait was not yet registered when the message was received.
390    pub channel_wait_not_yet_registered: Option<u64>,
391    /// Called into a dispatcher that wasn't allowed to migrate threads.
392    pub no_thread_migration: Option<u64>,
393    #[doc(hidden)]
394    pub __source_breaking: fidl::marker::SourceBreaking,
395}
396
397impl fidl::Persistable for NonInlinedRequestStats {}
398
399/// Diagnostic information for a task queued on a dispatcher.
400#[derive(Clone, Debug, Default, PartialEq)]
401pub struct QueuedTaskInfo {
402    /// Address of the queued `async_task_t`.
403    pub ptr: Option<u64>,
404    /// Address of the task handler function.
405    pub handler: Option<u64>,
406    /// Address of the dispatcher that queued this task, if queued from a runtime thread.
407    pub initiating_dispatcher: Option<u64>,
408    /// Name of the dispatcher that queued this task, if known.
409    pub initiating_dispatcher_name: Option<String>,
410    /// Address of the driver that queued this task, if queued from a runtime thread.
411    pub initiating_driver: Option<u64>,
412    /// URL of the driver that queued this task, if known.
413    pub initiating_driver_url: Option<String>,
414    #[doc(hidden)]
415    pub __source_breaking: fidl::marker::SourceBreaking,
416}
417
418impl fidl::Persistable for QueuedTaskInfo {}
419
420#[derive(Clone, Debug, Default, PartialEq)]
421pub struct TestNodeAddArgs {
422    /// Name of the node.
423    pub name: Option<String>,
424    /// Properties of the node.
425    pub properties: Option<Vec<fidl_fuchsia_driver_framework_common::NodeProperty>>,
426    #[doc(hidden)]
427    pub __source_breaking: fidl::marker::SourceBreaking,
428}
429
430impl fidl::Persistable for TestNodeAddArgs {}
431
432/// Contains information for a thread.
433#[derive(Clone, Debug, Default, PartialEq)]
434pub struct ThreadInfo {
435    /// The koid for the thread.
436    pub koid: Option<u64>,
437    /// The name of the thread.
438    pub name: Option<String>,
439    /// The scheduler role of the thread.
440    pub scheduler_role: Option<String>,
441    #[doc(hidden)]
442    pub __source_breaking: fidl::marker::SourceBreaking,
443}
444
445impl fidl::Persistable for ThreadInfo {}
446
447/// Contains information for a composite.
448#[derive(Clone, Debug, PartialEq)]
449pub enum CompositeInfo {
450    Composite(fidl_fuchsia_driver_framework_common::CompositeInfo),
451}
452
453impl CompositeInfo {
454    #[inline]
455    pub fn ordinal(&self) -> u64 {
456        match *self {
457            Self::Composite(_) => 2,
458        }
459    }
460}
461
462impl fidl::Persistable for CompositeInfo {}
463
464pub mod composite_info_iterator_ordinals {
465    pub const GET_NEXT: u64 = 0x50af808a6e34bb96;
466}
467
468pub mod composite_node_spec_iterator_ordinals {
469    pub const GET_NEXT: u64 = 0x32fd110355479f71;
470}
471
472pub mod driver_host_info_iterator_ordinals {
473    pub const GET_NEXT: u64 = 0xbf58e5cd863a86;
474}
475
476pub mod driver_info_iterator_ordinals {
477    pub const GET_NEXT: u64 = 0x2c394711c6784952;
478}
479
480pub mod manager_ordinals {
481    pub const GET_DRIVER_INFO: u64 = 0x34b1541e24e5d587;
482    pub const GET_COMPOSITE_NODE_SPECS: u64 = 0x258540c7ff37328f;
483    pub const GET_NODE_INFO: u64 = 0x7c272c6b7bcb4f9e;
484    pub const GET_COMPOSITE_INFO: u64 = 0x4456da4372a49a36;
485    pub const GET_DRIVER_HOST_INFO: u64 = 0x366b2c4429d44155;
486    pub const RESTART_DRIVER_HOSTS: u64 = 0x64fb09a17a4dd8c7;
487    pub const DISABLE_DRIVER: u64 = 0x3cabde92ba1ac967;
488    pub const ENABLE_DRIVER: u64 = 0x76a7518712965faf;
489    pub const BIND_ALL_UNBOUND_NODES: u64 = 0x2b4343fe1cfb9f21;
490    pub const BIND_ALL_UNBOUND_NODES2: u64 = 0x3e82ce2d6fc998d7;
491    pub const ADD_TEST_NODE: u64 = 0x774836bbb7fbc5b9;
492    pub const REMOVE_TEST_NODE: u64 = 0x1618ec4e5fc4010e;
493    pub const WAIT_FOR_BOOTUP: u64 = 0x52077de068225cdc;
494    pub const RESTART_WITH_DICTIONARY: u64 = 0x5eb620a85359a10e;
495    pub const RESTART_WITH_DICTIONARY_AND_POWER_DEPENDENCIES: u64 = 0x42914549590210;
496    pub const REBIND_COMPOSITES_WITH_DRIVER: u64 = 0x175d492045f61f28;
497}
498
499pub mod node_info_iterator_ordinals {
500    pub const GET_NEXT: u64 = 0x33c7c070412f889f;
501}
502
503mod internal {
504    use super::*;
505    unsafe impl fidl::encoding::TypeMarker for RestartRematchFlags {
506        type Owned = Self;
507
508        #[inline(always)]
509        fn inline_align(_context: fidl::encoding::Context) -> usize {
510            4
511        }
512
513        #[inline(always)]
514        fn inline_size(_context: fidl::encoding::Context) -> usize {
515            4
516        }
517    }
518
519    impl fidl::encoding::ValueTypeMarker for RestartRematchFlags {
520        type Borrowed<'a> = Self;
521        #[inline(always)]
522        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
523            *value
524        }
525    }
526
527    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
528        for RestartRematchFlags
529    {
530        #[inline]
531        unsafe fn encode(
532            self,
533            encoder: &mut fidl::encoding::Encoder<'_, D>,
534            offset: usize,
535            _depth: fidl::encoding::Depth,
536        ) -> fidl::Result<()> {
537            encoder.debug_check_bounds::<Self>(offset);
538            encoder.write_num(self.bits(), offset);
539            Ok(())
540        }
541    }
542
543    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for RestartRematchFlags {
544        #[inline(always)]
545        fn new_empty() -> Self {
546            Self::empty()
547        }
548
549        #[inline]
550        unsafe fn decode(
551            &mut self,
552            decoder: &mut fidl::encoding::Decoder<'_, D>,
553            offset: usize,
554            _depth: fidl::encoding::Depth,
555        ) -> fidl::Result<()> {
556            decoder.debug_check_bounds::<Self>(offset);
557            let prim = decoder.read_num::<u32>(offset);
558            *self = Self::from_bits_allow_unknown(prim);
559            Ok(())
560        }
561    }
562    unsafe impl fidl::encoding::TypeMarker for DispatcherState {
563        type Owned = Self;
564
565        #[inline(always)]
566        fn inline_align(_context: fidl::encoding::Context) -> usize {
567            std::mem::align_of::<u32>()
568        }
569
570        #[inline(always)]
571        fn inline_size(_context: fidl::encoding::Context) -> usize {
572            std::mem::size_of::<u32>()
573        }
574
575        #[inline(always)]
576        fn encode_is_copy() -> bool {
577            false
578        }
579
580        #[inline(always)]
581        fn decode_is_copy() -> bool {
582            false
583        }
584    }
585
586    impl fidl::encoding::ValueTypeMarker for DispatcherState {
587        type Borrowed<'a> = Self;
588        #[inline(always)]
589        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
590            *value
591        }
592    }
593
594    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
595        for DispatcherState
596    {
597        #[inline]
598        unsafe fn encode(
599            self,
600            encoder: &mut fidl::encoding::Encoder<'_, D>,
601            offset: usize,
602            _depth: fidl::encoding::Depth,
603        ) -> fidl::Result<()> {
604            encoder.debug_check_bounds::<Self>(offset);
605            encoder.write_num(self.into_primitive(), offset);
606            Ok(())
607        }
608    }
609
610    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DispatcherState {
611        #[inline(always)]
612        fn new_empty() -> Self {
613            Self::unknown()
614        }
615
616        #[inline]
617        unsafe fn decode(
618            &mut self,
619            decoder: &mut fidl::encoding::Decoder<'_, D>,
620            offset: usize,
621            _depth: fidl::encoding::Depth,
622        ) -> fidl::Result<()> {
623            decoder.debug_check_bounds::<Self>(offset);
624            let prim = decoder.read_num::<u32>(offset);
625
626            *self = Self::from_primitive_allow_unknown(prim);
627            Ok(())
628        }
629    }
630
631    impl fidl::encoding::ValueTypeMarker for CompositeInfoIteratorGetNextResponse {
632        type Borrowed<'a> = &'a Self;
633        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
634            value
635        }
636    }
637
638    unsafe impl fidl::encoding::TypeMarker for CompositeInfoIteratorGetNextResponse {
639        type Owned = Self;
640
641        #[inline(always)]
642        fn inline_align(_context: fidl::encoding::Context) -> usize {
643            8
644        }
645
646        #[inline(always)]
647        fn inline_size(_context: fidl::encoding::Context) -> usize {
648            16
649        }
650    }
651
652    unsafe impl<D: fidl::encoding::ResourceDialect>
653        fidl::encoding::Encode<CompositeInfoIteratorGetNextResponse, D>
654        for &CompositeInfoIteratorGetNextResponse
655    {
656        #[inline]
657        unsafe fn encode(
658            self,
659            encoder: &mut fidl::encoding::Encoder<'_, D>,
660            offset: usize,
661            _depth: fidl::encoding::Depth,
662        ) -> fidl::Result<()> {
663            encoder.debug_check_bounds::<CompositeInfoIteratorGetNextResponse>(offset);
664            // Delegate to tuple encoding.
665            fidl::encoding::Encode::<CompositeInfoIteratorGetNextResponse, D>::encode(
666                (
667                    <fidl::encoding::UnboundedVector<CompositeNodeInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.composites),
668                ),
669                encoder, offset, _depth
670            )
671        }
672    }
673    unsafe impl<
674        D: fidl::encoding::ResourceDialect,
675        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<CompositeNodeInfo>, D>,
676    > fidl::encoding::Encode<CompositeInfoIteratorGetNextResponse, D> for (T0,)
677    {
678        #[inline]
679        unsafe fn encode(
680            self,
681            encoder: &mut fidl::encoding::Encoder<'_, D>,
682            offset: usize,
683            depth: fidl::encoding::Depth,
684        ) -> fidl::Result<()> {
685            encoder.debug_check_bounds::<CompositeInfoIteratorGetNextResponse>(offset);
686            // Zero out padding regions. There's no need to apply masks
687            // because the unmasked parts will be overwritten by fields.
688            // Write the fields.
689            self.0.encode(encoder, offset + 0, depth)?;
690            Ok(())
691        }
692    }
693
694    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
695        for CompositeInfoIteratorGetNextResponse
696    {
697        #[inline(always)]
698        fn new_empty() -> Self {
699            Self {
700                composites: fidl::new_empty!(fidl::encoding::UnboundedVector<CompositeNodeInfo>, D),
701            }
702        }
703
704        #[inline]
705        unsafe fn decode(
706            &mut self,
707            decoder: &mut fidl::encoding::Decoder<'_, D>,
708            offset: usize,
709            _depth: fidl::encoding::Depth,
710        ) -> fidl::Result<()> {
711            decoder.debug_check_bounds::<Self>(offset);
712            // Verify that padding bytes are zero.
713            fidl::decode!(
714                fidl::encoding::UnboundedVector<CompositeNodeInfo>,
715                D,
716                &mut self.composites,
717                decoder,
718                offset + 0,
719                _depth
720            )?;
721            Ok(())
722        }
723    }
724
725    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpecIteratorGetNextResponse {
726        type Borrowed<'a> = &'a Self;
727        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
728            value
729        }
730    }
731
732    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpecIteratorGetNextResponse {
733        type Owned = Self;
734
735        #[inline(always)]
736        fn inline_align(_context: fidl::encoding::Context) -> usize {
737            8
738        }
739
740        #[inline(always)]
741        fn inline_size(_context: fidl::encoding::Context) -> usize {
742            16
743        }
744    }
745
746    unsafe impl<D: fidl::encoding::ResourceDialect>
747        fidl::encoding::Encode<CompositeNodeSpecIteratorGetNextResponse, D>
748        for &CompositeNodeSpecIteratorGetNextResponse
749    {
750        #[inline]
751        unsafe fn encode(
752            self,
753            encoder: &mut fidl::encoding::Encoder<'_, D>,
754            offset: usize,
755            _depth: fidl::encoding::Depth,
756        ) -> fidl::Result<()> {
757            encoder.debug_check_bounds::<CompositeNodeSpecIteratorGetNextResponse>(offset);
758            // Delegate to tuple encoding.
759            fidl::encoding::Encode::<CompositeNodeSpecIteratorGetNextResponse, D>::encode(
760                (<fidl::encoding::UnboundedVector<
761                    fidl_fuchsia_driver_framework_common::CompositeInfo,
762                > as fidl::encoding::ValueTypeMarker>::borrow(&self.specs),),
763                encoder,
764                offset,
765                _depth,
766            )
767        }
768    }
769    unsafe impl<
770        D: fidl::encoding::ResourceDialect,
771        T0: fidl::encoding::Encode<
772                fidl::encoding::UnboundedVector<
773                    fidl_fuchsia_driver_framework_common::CompositeInfo,
774                >,
775                D,
776            >,
777    > fidl::encoding::Encode<CompositeNodeSpecIteratorGetNextResponse, D> for (T0,)
778    {
779        #[inline]
780        unsafe fn encode(
781            self,
782            encoder: &mut fidl::encoding::Encoder<'_, D>,
783            offset: usize,
784            depth: fidl::encoding::Depth,
785        ) -> fidl::Result<()> {
786            encoder.debug_check_bounds::<CompositeNodeSpecIteratorGetNextResponse>(offset);
787            // Zero out padding regions. There's no need to apply masks
788            // because the unmasked parts will be overwritten by fields.
789            // Write the fields.
790            self.0.encode(encoder, offset + 0, depth)?;
791            Ok(())
792        }
793    }
794
795    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
796        for CompositeNodeSpecIteratorGetNextResponse
797    {
798        #[inline(always)]
799        fn new_empty() -> Self {
800            Self {
801                specs: fidl::new_empty!(
802                    fidl::encoding::UnboundedVector<
803                        fidl_fuchsia_driver_framework_common::CompositeInfo,
804                    >,
805                    D
806                ),
807            }
808        }
809
810        #[inline]
811        unsafe fn decode(
812            &mut self,
813            decoder: &mut fidl::encoding::Decoder<'_, D>,
814            offset: usize,
815            _depth: fidl::encoding::Depth,
816        ) -> fidl::Result<()> {
817            decoder.debug_check_bounds::<Self>(offset);
818            // Verify that padding bytes are zero.
819            fidl::decode!(
820                fidl::encoding::UnboundedVector<
821                    fidl_fuchsia_driver_framework_common::CompositeInfo,
822                >,
823                D,
824                &mut self.specs,
825                decoder,
826                offset + 0,
827                _depth
828            )?;
829            Ok(())
830        }
831    }
832
833    impl fidl::encoding::ValueTypeMarker for DriverHostInfoIteratorGetNextResponse {
834        type Borrowed<'a> = &'a Self;
835        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
836            value
837        }
838    }
839
840    unsafe impl fidl::encoding::TypeMarker for DriverHostInfoIteratorGetNextResponse {
841        type Owned = Self;
842
843        #[inline(always)]
844        fn inline_align(_context: fidl::encoding::Context) -> usize {
845            8
846        }
847
848        #[inline(always)]
849        fn inline_size(_context: fidl::encoding::Context) -> usize {
850            16
851        }
852    }
853
854    unsafe impl<D: fidl::encoding::ResourceDialect>
855        fidl::encoding::Encode<DriverHostInfoIteratorGetNextResponse, D>
856        for &DriverHostInfoIteratorGetNextResponse
857    {
858        #[inline]
859        unsafe fn encode(
860            self,
861            encoder: &mut fidl::encoding::Encoder<'_, D>,
862            offset: usize,
863            _depth: fidl::encoding::Depth,
864        ) -> fidl::Result<()> {
865            encoder.debug_check_bounds::<DriverHostInfoIteratorGetNextResponse>(offset);
866            // Delegate to tuple encoding.
867            fidl::encoding::Encode::<DriverHostInfoIteratorGetNextResponse, D>::encode(
868                (
869                    <fidl::encoding::UnboundedVector<DriverHostInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_hosts),
870                ),
871                encoder, offset, _depth
872            )
873        }
874    }
875    unsafe impl<
876        D: fidl::encoding::ResourceDialect,
877        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<DriverHostInfo>, D>,
878    > fidl::encoding::Encode<DriverHostInfoIteratorGetNextResponse, D> for (T0,)
879    {
880        #[inline]
881        unsafe fn encode(
882            self,
883            encoder: &mut fidl::encoding::Encoder<'_, D>,
884            offset: usize,
885            depth: fidl::encoding::Depth,
886        ) -> fidl::Result<()> {
887            encoder.debug_check_bounds::<DriverHostInfoIteratorGetNextResponse>(offset);
888            // Zero out padding regions. There's no need to apply masks
889            // because the unmasked parts will be overwritten by fields.
890            // Write the fields.
891            self.0.encode(encoder, offset + 0, depth)?;
892            Ok(())
893        }
894    }
895
896    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
897        for DriverHostInfoIteratorGetNextResponse
898    {
899        #[inline(always)]
900        fn new_empty() -> Self {
901            Self {
902                driver_hosts: fidl::new_empty!(fidl::encoding::UnboundedVector<DriverHostInfo>, D),
903            }
904        }
905
906        #[inline]
907        unsafe fn decode(
908            &mut self,
909            decoder: &mut fidl::encoding::Decoder<'_, D>,
910            offset: usize,
911            _depth: fidl::encoding::Depth,
912        ) -> fidl::Result<()> {
913            decoder.debug_check_bounds::<Self>(offset);
914            // Verify that padding bytes are zero.
915            fidl::decode!(
916                fidl::encoding::UnboundedVector<DriverHostInfo>,
917                D,
918                &mut self.driver_hosts,
919                decoder,
920                offset + 0,
921                _depth
922            )?;
923            Ok(())
924        }
925    }
926
927    impl fidl::encoding::ValueTypeMarker for DriverInfoIteratorGetNextResponse {
928        type Borrowed<'a> = &'a Self;
929        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
930            value
931        }
932    }
933
934    unsafe impl fidl::encoding::TypeMarker for DriverInfoIteratorGetNextResponse {
935        type Owned = Self;
936
937        #[inline(always)]
938        fn inline_align(_context: fidl::encoding::Context) -> usize {
939            8
940        }
941
942        #[inline(always)]
943        fn inline_size(_context: fidl::encoding::Context) -> usize {
944            16
945        }
946    }
947
948    unsafe impl<D: fidl::encoding::ResourceDialect>
949        fidl::encoding::Encode<DriverInfoIteratorGetNextResponse, D>
950        for &DriverInfoIteratorGetNextResponse
951    {
952        #[inline]
953        unsafe fn encode(
954            self,
955            encoder: &mut fidl::encoding::Encoder<'_, D>,
956            offset: usize,
957            _depth: fidl::encoding::Depth,
958        ) -> fidl::Result<()> {
959            encoder.debug_check_bounds::<DriverInfoIteratorGetNextResponse>(offset);
960            // Delegate to tuple encoding.
961            fidl::encoding::Encode::<DriverInfoIteratorGetNextResponse, D>::encode(
962                (
963                    <fidl::encoding::UnboundedVector<
964                        fidl_fuchsia_driver_framework_common::DriverInfo,
965                    > as fidl::encoding::ValueTypeMarker>::borrow(&self.drivers),
966                ),
967                encoder,
968                offset,
969                _depth,
970            )
971        }
972    }
973    unsafe impl<
974        D: fidl::encoding::ResourceDialect,
975        T0: fidl::encoding::Encode<
976                fidl::encoding::UnboundedVector<fidl_fuchsia_driver_framework_common::DriverInfo>,
977                D,
978            >,
979    > fidl::encoding::Encode<DriverInfoIteratorGetNextResponse, D> for (T0,)
980    {
981        #[inline]
982        unsafe fn encode(
983            self,
984            encoder: &mut fidl::encoding::Encoder<'_, D>,
985            offset: usize,
986            depth: fidl::encoding::Depth,
987        ) -> fidl::Result<()> {
988            encoder.debug_check_bounds::<DriverInfoIteratorGetNextResponse>(offset);
989            // Zero out padding regions. There's no need to apply masks
990            // because the unmasked parts will be overwritten by fields.
991            // Write the fields.
992            self.0.encode(encoder, offset + 0, depth)?;
993            Ok(())
994        }
995    }
996
997    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
998        for DriverInfoIteratorGetNextResponse
999    {
1000        #[inline(always)]
1001        fn new_empty() -> Self {
1002            Self {
1003                drivers: fidl::new_empty!(
1004                    fidl::encoding::UnboundedVector<
1005                        fidl_fuchsia_driver_framework_common::DriverInfo,
1006                    >,
1007                    D
1008                ),
1009            }
1010        }
1011
1012        #[inline]
1013        unsafe fn decode(
1014            &mut self,
1015            decoder: &mut fidl::encoding::Decoder<'_, D>,
1016            offset: usize,
1017            _depth: fidl::encoding::Depth,
1018        ) -> fidl::Result<()> {
1019            decoder.debug_check_bounds::<Self>(offset);
1020            // Verify that padding bytes are zero.
1021            fidl::decode!(
1022                fidl::encoding::UnboundedVector<fidl_fuchsia_driver_framework_common::DriverInfo>,
1023                D,
1024                &mut self.drivers,
1025                decoder,
1026                offset + 0,
1027                _depth
1028            )?;
1029            Ok(())
1030        }
1031    }
1032
1033    impl fidl::encoding::ValueTypeMarker for ManagerAddTestNodeRequest {
1034        type Borrowed<'a> = &'a Self;
1035        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1036            value
1037        }
1038    }
1039
1040    unsafe impl fidl::encoding::TypeMarker for ManagerAddTestNodeRequest {
1041        type Owned = Self;
1042
1043        #[inline(always)]
1044        fn inline_align(_context: fidl::encoding::Context) -> usize {
1045            8
1046        }
1047
1048        #[inline(always)]
1049        fn inline_size(_context: fidl::encoding::Context) -> usize {
1050            16
1051        }
1052    }
1053
1054    unsafe impl<D: fidl::encoding::ResourceDialect>
1055        fidl::encoding::Encode<ManagerAddTestNodeRequest, D> for &ManagerAddTestNodeRequest
1056    {
1057        #[inline]
1058        unsafe fn encode(
1059            self,
1060            encoder: &mut fidl::encoding::Encoder<'_, D>,
1061            offset: usize,
1062            _depth: fidl::encoding::Depth,
1063        ) -> fidl::Result<()> {
1064            encoder.debug_check_bounds::<ManagerAddTestNodeRequest>(offset);
1065            // Delegate to tuple encoding.
1066            fidl::encoding::Encode::<ManagerAddTestNodeRequest, D>::encode(
1067                (<TestNodeAddArgs as fidl::encoding::ValueTypeMarker>::borrow(&self.args),),
1068                encoder,
1069                offset,
1070                _depth,
1071            )
1072        }
1073    }
1074    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<TestNodeAddArgs, D>>
1075        fidl::encoding::Encode<ManagerAddTestNodeRequest, D> for (T0,)
1076    {
1077        #[inline]
1078        unsafe fn encode(
1079            self,
1080            encoder: &mut fidl::encoding::Encoder<'_, D>,
1081            offset: usize,
1082            depth: fidl::encoding::Depth,
1083        ) -> fidl::Result<()> {
1084            encoder.debug_check_bounds::<ManagerAddTestNodeRequest>(offset);
1085            // Zero out padding regions. There's no need to apply masks
1086            // because the unmasked parts will be overwritten by fields.
1087            // Write the fields.
1088            self.0.encode(encoder, offset + 0, depth)?;
1089            Ok(())
1090        }
1091    }
1092
1093    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1094        for ManagerAddTestNodeRequest
1095    {
1096        #[inline(always)]
1097        fn new_empty() -> Self {
1098            Self { args: fidl::new_empty!(TestNodeAddArgs, D) }
1099        }
1100
1101        #[inline]
1102        unsafe fn decode(
1103            &mut self,
1104            decoder: &mut fidl::encoding::Decoder<'_, D>,
1105            offset: usize,
1106            _depth: fidl::encoding::Depth,
1107        ) -> fidl::Result<()> {
1108            decoder.debug_check_bounds::<Self>(offset);
1109            // Verify that padding bytes are zero.
1110            fidl::decode!(TestNodeAddArgs, D, &mut self.args, decoder, offset + 0, _depth)?;
1111            Ok(())
1112        }
1113    }
1114
1115    impl fidl::encoding::ValueTypeMarker for ManagerDisableDriverRequest {
1116        type Borrowed<'a> = &'a Self;
1117        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1118            value
1119        }
1120    }
1121
1122    unsafe impl fidl::encoding::TypeMarker for ManagerDisableDriverRequest {
1123        type Owned = Self;
1124
1125        #[inline(always)]
1126        fn inline_align(_context: fidl::encoding::Context) -> usize {
1127            8
1128        }
1129
1130        #[inline(always)]
1131        fn inline_size(_context: fidl::encoding::Context) -> usize {
1132            32
1133        }
1134    }
1135
1136    unsafe impl<D: fidl::encoding::ResourceDialect>
1137        fidl::encoding::Encode<ManagerDisableDriverRequest, D> for &ManagerDisableDriverRequest
1138    {
1139        #[inline]
1140        unsafe fn encode(
1141            self,
1142            encoder: &mut fidl::encoding::Encoder<'_, D>,
1143            offset: usize,
1144            _depth: fidl::encoding::Depth,
1145        ) -> fidl::Result<()> {
1146            encoder.debug_check_bounds::<ManagerDisableDriverRequest>(offset);
1147            // Delegate to tuple encoding.
1148            fidl::encoding::Encode::<ManagerDisableDriverRequest, D>::encode(
1149                (
1150                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_url),
1151                    <fidl::encoding::Optional<fidl::encoding::BoundedString<64>> as fidl::encoding::ValueTypeMarker>::borrow(&self.package_hash),
1152                ),
1153                encoder, offset, _depth
1154            )
1155        }
1156    }
1157    unsafe impl<
1158        D: fidl::encoding::ResourceDialect,
1159        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1160        T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<64>>, D>,
1161    > fidl::encoding::Encode<ManagerDisableDriverRequest, D> for (T0, T1)
1162    {
1163        #[inline]
1164        unsafe fn encode(
1165            self,
1166            encoder: &mut fidl::encoding::Encoder<'_, D>,
1167            offset: usize,
1168            depth: fidl::encoding::Depth,
1169        ) -> fidl::Result<()> {
1170            encoder.debug_check_bounds::<ManagerDisableDriverRequest>(offset);
1171            // Zero out padding regions. There's no need to apply masks
1172            // because the unmasked parts will be overwritten by fields.
1173            // Write the fields.
1174            self.0.encode(encoder, offset + 0, depth)?;
1175            self.1.encode(encoder, offset + 16, depth)?;
1176            Ok(())
1177        }
1178    }
1179
1180    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1181        for ManagerDisableDriverRequest
1182    {
1183        #[inline(always)]
1184        fn new_empty() -> Self {
1185            Self {
1186                driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
1187                package_hash: fidl::new_empty!(
1188                    fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
1189                    D
1190                ),
1191            }
1192        }
1193
1194        #[inline]
1195        unsafe fn decode(
1196            &mut self,
1197            decoder: &mut fidl::encoding::Decoder<'_, D>,
1198            offset: usize,
1199            _depth: fidl::encoding::Depth,
1200        ) -> fidl::Result<()> {
1201            decoder.debug_check_bounds::<Self>(offset);
1202            // Verify that padding bytes are zero.
1203            fidl::decode!(
1204                fidl::encoding::BoundedString<4096>,
1205                D,
1206                &mut self.driver_url,
1207                decoder,
1208                offset + 0,
1209                _depth
1210            )?;
1211            fidl::decode!(
1212                fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
1213                D,
1214                &mut self.package_hash,
1215                decoder,
1216                offset + 16,
1217                _depth
1218            )?;
1219            Ok(())
1220        }
1221    }
1222
1223    impl fidl::encoding::ValueTypeMarker for ManagerEnableDriverRequest {
1224        type Borrowed<'a> = &'a Self;
1225        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1226            value
1227        }
1228    }
1229
1230    unsafe impl fidl::encoding::TypeMarker for ManagerEnableDriverRequest {
1231        type Owned = Self;
1232
1233        #[inline(always)]
1234        fn inline_align(_context: fidl::encoding::Context) -> usize {
1235            8
1236        }
1237
1238        #[inline(always)]
1239        fn inline_size(_context: fidl::encoding::Context) -> usize {
1240            32
1241        }
1242    }
1243
1244    unsafe impl<D: fidl::encoding::ResourceDialect>
1245        fidl::encoding::Encode<ManagerEnableDriverRequest, D> for &ManagerEnableDriverRequest
1246    {
1247        #[inline]
1248        unsafe fn encode(
1249            self,
1250            encoder: &mut fidl::encoding::Encoder<'_, D>,
1251            offset: usize,
1252            _depth: fidl::encoding::Depth,
1253        ) -> fidl::Result<()> {
1254            encoder.debug_check_bounds::<ManagerEnableDriverRequest>(offset);
1255            // Delegate to tuple encoding.
1256            fidl::encoding::Encode::<ManagerEnableDriverRequest, D>::encode(
1257                (
1258                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_url),
1259                    <fidl::encoding::Optional<fidl::encoding::BoundedString<64>> as fidl::encoding::ValueTypeMarker>::borrow(&self.package_hash),
1260                ),
1261                encoder, offset, _depth
1262            )
1263        }
1264    }
1265    unsafe impl<
1266        D: fidl::encoding::ResourceDialect,
1267        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1268        T1: fidl::encoding::Encode<fidl::encoding::Optional<fidl::encoding::BoundedString<64>>, D>,
1269    > fidl::encoding::Encode<ManagerEnableDriverRequest, D> for (T0, T1)
1270    {
1271        #[inline]
1272        unsafe fn encode(
1273            self,
1274            encoder: &mut fidl::encoding::Encoder<'_, D>,
1275            offset: usize,
1276            depth: fidl::encoding::Depth,
1277        ) -> fidl::Result<()> {
1278            encoder.debug_check_bounds::<ManagerEnableDriverRequest>(offset);
1279            // Zero out padding regions. There's no need to apply masks
1280            // because the unmasked parts will be overwritten by fields.
1281            // Write the fields.
1282            self.0.encode(encoder, offset + 0, depth)?;
1283            self.1.encode(encoder, offset + 16, depth)?;
1284            Ok(())
1285        }
1286    }
1287
1288    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1289        for ManagerEnableDriverRequest
1290    {
1291        #[inline(always)]
1292        fn new_empty() -> Self {
1293            Self {
1294                driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
1295                package_hash: fidl::new_empty!(
1296                    fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
1297                    D
1298                ),
1299            }
1300        }
1301
1302        #[inline]
1303        unsafe fn decode(
1304            &mut self,
1305            decoder: &mut fidl::encoding::Decoder<'_, D>,
1306            offset: usize,
1307            _depth: fidl::encoding::Depth,
1308        ) -> fidl::Result<()> {
1309            decoder.debug_check_bounds::<Self>(offset);
1310            // Verify that padding bytes are zero.
1311            fidl::decode!(
1312                fidl::encoding::BoundedString<4096>,
1313                D,
1314                &mut self.driver_url,
1315                decoder,
1316                offset + 0,
1317                _depth
1318            )?;
1319            fidl::decode!(
1320                fidl::encoding::Optional<fidl::encoding::BoundedString<64>>,
1321                D,
1322                &mut self.package_hash,
1323                decoder,
1324                offset + 16,
1325                _depth
1326            )?;
1327            Ok(())
1328        }
1329    }
1330
1331    impl fidl::encoding::ValueTypeMarker for ManagerRebindCompositesWithDriverRequest {
1332        type Borrowed<'a> = &'a Self;
1333        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1334            value
1335        }
1336    }
1337
1338    unsafe impl fidl::encoding::TypeMarker for ManagerRebindCompositesWithDriverRequest {
1339        type Owned = Self;
1340
1341        #[inline(always)]
1342        fn inline_align(_context: fidl::encoding::Context) -> usize {
1343            8
1344        }
1345
1346        #[inline(always)]
1347        fn inline_size(_context: fidl::encoding::Context) -> usize {
1348            16
1349        }
1350    }
1351
1352    unsafe impl<D: fidl::encoding::ResourceDialect>
1353        fidl::encoding::Encode<ManagerRebindCompositesWithDriverRequest, D>
1354        for &ManagerRebindCompositesWithDriverRequest
1355    {
1356        #[inline]
1357        unsafe fn encode(
1358            self,
1359            encoder: &mut fidl::encoding::Encoder<'_, D>,
1360            offset: usize,
1361            _depth: fidl::encoding::Depth,
1362        ) -> fidl::Result<()> {
1363            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverRequest>(offset);
1364            // Delegate to tuple encoding.
1365            fidl::encoding::Encode::<ManagerRebindCompositesWithDriverRequest, D>::encode(
1366                (<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(
1367                    &self.driver_url,
1368                ),),
1369                encoder,
1370                offset,
1371                _depth,
1372            )
1373        }
1374    }
1375    unsafe impl<
1376        D: fidl::encoding::ResourceDialect,
1377        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1378    > fidl::encoding::Encode<ManagerRebindCompositesWithDriverRequest, D> for (T0,)
1379    {
1380        #[inline]
1381        unsafe fn encode(
1382            self,
1383            encoder: &mut fidl::encoding::Encoder<'_, D>,
1384            offset: usize,
1385            depth: fidl::encoding::Depth,
1386        ) -> fidl::Result<()> {
1387            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverRequest>(offset);
1388            // Zero out padding regions. There's no need to apply masks
1389            // because the unmasked parts will be overwritten by fields.
1390            // Write the fields.
1391            self.0.encode(encoder, offset + 0, depth)?;
1392            Ok(())
1393        }
1394    }
1395
1396    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1397        for ManagerRebindCompositesWithDriverRequest
1398    {
1399        #[inline(always)]
1400        fn new_empty() -> Self {
1401            Self { driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D) }
1402        }
1403
1404        #[inline]
1405        unsafe fn decode(
1406            &mut self,
1407            decoder: &mut fidl::encoding::Decoder<'_, D>,
1408            offset: usize,
1409            _depth: fidl::encoding::Depth,
1410        ) -> fidl::Result<()> {
1411            decoder.debug_check_bounds::<Self>(offset);
1412            // Verify that padding bytes are zero.
1413            fidl::decode!(
1414                fidl::encoding::BoundedString<4096>,
1415                D,
1416                &mut self.driver_url,
1417                decoder,
1418                offset + 0,
1419                _depth
1420            )?;
1421            Ok(())
1422        }
1423    }
1424
1425    impl fidl::encoding::ValueTypeMarker for ManagerRemoveTestNodeRequest {
1426        type Borrowed<'a> = &'a Self;
1427        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1428            value
1429        }
1430    }
1431
1432    unsafe impl fidl::encoding::TypeMarker for ManagerRemoveTestNodeRequest {
1433        type Owned = Self;
1434
1435        #[inline(always)]
1436        fn inline_align(_context: fidl::encoding::Context) -> usize {
1437            8
1438        }
1439
1440        #[inline(always)]
1441        fn inline_size(_context: fidl::encoding::Context) -> usize {
1442            16
1443        }
1444    }
1445
1446    unsafe impl<D: fidl::encoding::ResourceDialect>
1447        fidl::encoding::Encode<ManagerRemoveTestNodeRequest, D> for &ManagerRemoveTestNodeRequest
1448    {
1449        #[inline]
1450        unsafe fn encode(
1451            self,
1452            encoder: &mut fidl::encoding::Encoder<'_, D>,
1453            offset: usize,
1454            _depth: fidl::encoding::Depth,
1455        ) -> fidl::Result<()> {
1456            encoder.debug_check_bounds::<ManagerRemoveTestNodeRequest>(offset);
1457            // Delegate to tuple encoding.
1458            fidl::encoding::Encode::<ManagerRemoveTestNodeRequest, D>::encode(
1459                (<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow(
1460                    &self.name,
1461                ),),
1462                encoder,
1463                offset,
1464                _depth,
1465            )
1466        }
1467    }
1468    unsafe impl<
1469        D: fidl::encoding::ResourceDialect,
1470        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<1024>, D>,
1471    > fidl::encoding::Encode<ManagerRemoveTestNodeRequest, D> for (T0,)
1472    {
1473        #[inline]
1474        unsafe fn encode(
1475            self,
1476            encoder: &mut fidl::encoding::Encoder<'_, D>,
1477            offset: usize,
1478            depth: fidl::encoding::Depth,
1479        ) -> fidl::Result<()> {
1480            encoder.debug_check_bounds::<ManagerRemoveTestNodeRequest>(offset);
1481            // Zero out padding regions. There's no need to apply masks
1482            // because the unmasked parts will be overwritten by fields.
1483            // Write the fields.
1484            self.0.encode(encoder, offset + 0, depth)?;
1485            Ok(())
1486        }
1487    }
1488
1489    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1490        for ManagerRemoveTestNodeRequest
1491    {
1492        #[inline(always)]
1493        fn new_empty() -> Self {
1494            Self { name: fidl::new_empty!(fidl::encoding::BoundedString<1024>, D) }
1495        }
1496
1497        #[inline]
1498        unsafe fn decode(
1499            &mut self,
1500            decoder: &mut fidl::encoding::Decoder<'_, D>,
1501            offset: usize,
1502            _depth: fidl::encoding::Depth,
1503        ) -> fidl::Result<()> {
1504            decoder.debug_check_bounds::<Self>(offset);
1505            // Verify that padding bytes are zero.
1506            fidl::decode!(
1507                fidl::encoding::BoundedString<1024>,
1508                D,
1509                &mut self.name,
1510                decoder,
1511                offset + 0,
1512                _depth
1513            )?;
1514            Ok(())
1515        }
1516    }
1517
1518    impl fidl::encoding::ValueTypeMarker for ManagerRestartDriverHostsRequest {
1519        type Borrowed<'a> = &'a Self;
1520        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1521            value
1522        }
1523    }
1524
1525    unsafe impl fidl::encoding::TypeMarker for ManagerRestartDriverHostsRequest {
1526        type Owned = Self;
1527
1528        #[inline(always)]
1529        fn inline_align(_context: fidl::encoding::Context) -> usize {
1530            8
1531        }
1532
1533        #[inline(always)]
1534        fn inline_size(_context: fidl::encoding::Context) -> usize {
1535            24
1536        }
1537    }
1538
1539    unsafe impl<D: fidl::encoding::ResourceDialect>
1540        fidl::encoding::Encode<ManagerRestartDriverHostsRequest, D>
1541        for &ManagerRestartDriverHostsRequest
1542    {
1543        #[inline]
1544        unsafe fn encode(
1545            self,
1546            encoder: &mut fidl::encoding::Encoder<'_, D>,
1547            offset: usize,
1548            _depth: fidl::encoding::Depth,
1549        ) -> fidl::Result<()> {
1550            encoder.debug_check_bounds::<ManagerRestartDriverHostsRequest>(offset);
1551            // Delegate to tuple encoding.
1552            fidl::encoding::Encode::<ManagerRestartDriverHostsRequest, D>::encode(
1553                (
1554                    <fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow(&self.driver_url),
1555                    <RestartRematchFlags as fidl::encoding::ValueTypeMarker>::borrow(&self.rematch_flags),
1556                ),
1557                encoder, offset, _depth
1558            )
1559        }
1560    }
1561    unsafe impl<
1562        D: fidl::encoding::ResourceDialect,
1563        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<4096>, D>,
1564        T1: fidl::encoding::Encode<RestartRematchFlags, D>,
1565    > fidl::encoding::Encode<ManagerRestartDriverHostsRequest, D> for (T0, T1)
1566    {
1567        #[inline]
1568        unsafe fn encode(
1569            self,
1570            encoder: &mut fidl::encoding::Encoder<'_, D>,
1571            offset: usize,
1572            depth: fidl::encoding::Depth,
1573        ) -> fidl::Result<()> {
1574            encoder.debug_check_bounds::<ManagerRestartDriverHostsRequest>(offset);
1575            // Zero out padding regions. There's no need to apply masks
1576            // because the unmasked parts will be overwritten by fields.
1577            unsafe {
1578                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1579                (ptr as *mut u64).write_unaligned(0);
1580            }
1581            // Write the fields.
1582            self.0.encode(encoder, offset + 0, depth)?;
1583            self.1.encode(encoder, offset + 16, depth)?;
1584            Ok(())
1585        }
1586    }
1587
1588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1589        for ManagerRestartDriverHostsRequest
1590    {
1591        #[inline(always)]
1592        fn new_empty() -> Self {
1593            Self {
1594                driver_url: fidl::new_empty!(fidl::encoding::BoundedString<4096>, D),
1595                rematch_flags: fidl::new_empty!(RestartRematchFlags, D),
1596            }
1597        }
1598
1599        #[inline]
1600        unsafe fn decode(
1601            &mut self,
1602            decoder: &mut fidl::encoding::Decoder<'_, D>,
1603            offset: usize,
1604            _depth: fidl::encoding::Depth,
1605        ) -> fidl::Result<()> {
1606            decoder.debug_check_bounds::<Self>(offset);
1607            // Verify that padding bytes are zero.
1608            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1609            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1610            let mask = 0xffffffff00000000u64;
1611            let maskedval = padval & mask;
1612            if maskedval != 0 {
1613                return Err(fidl::Error::NonZeroPadding {
1614                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1615                });
1616            }
1617            fidl::decode!(
1618                fidl::encoding::BoundedString<4096>,
1619                D,
1620                &mut self.driver_url,
1621                decoder,
1622                offset + 0,
1623                _depth
1624            )?;
1625            fidl::decode!(
1626                RestartRematchFlags,
1627                D,
1628                &mut self.rematch_flags,
1629                decoder,
1630                offset + 16,
1631                _depth
1632            )?;
1633            Ok(())
1634        }
1635    }
1636
1637    impl fidl::encoding::ValueTypeMarker for ManagerBindAllUnboundNodes2Response {
1638        type Borrowed<'a> = &'a Self;
1639        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1640            value
1641        }
1642    }
1643
1644    unsafe impl fidl::encoding::TypeMarker for ManagerBindAllUnboundNodes2Response {
1645        type Owned = Self;
1646
1647        #[inline(always)]
1648        fn inline_align(_context: fidl::encoding::Context) -> usize {
1649            8
1650        }
1651
1652        #[inline(always)]
1653        fn inline_size(_context: fidl::encoding::Context) -> usize {
1654            16
1655        }
1656    }
1657
1658    unsafe impl<D: fidl::encoding::ResourceDialect>
1659        fidl::encoding::Encode<ManagerBindAllUnboundNodes2Response, D>
1660        for &ManagerBindAllUnboundNodes2Response
1661    {
1662        #[inline]
1663        unsafe fn encode(
1664            self,
1665            encoder: &mut fidl::encoding::Encoder<'_, D>,
1666            offset: usize,
1667            _depth: fidl::encoding::Depth,
1668        ) -> fidl::Result<()> {
1669            encoder.debug_check_bounds::<ManagerBindAllUnboundNodes2Response>(offset);
1670            // Delegate to tuple encoding.
1671            fidl::encoding::Encode::<ManagerBindAllUnboundNodes2Response, D>::encode(
1672                (
1673                    <fidl::encoding::Vector<NodeBindingInfo, 256> as fidl::encoding::ValueTypeMarker>::borrow(&self.binding_result),
1674                ),
1675                encoder, offset, _depth
1676            )
1677        }
1678    }
1679    unsafe impl<
1680        D: fidl::encoding::ResourceDialect,
1681        T0: fidl::encoding::Encode<fidl::encoding::Vector<NodeBindingInfo, 256>, D>,
1682    > fidl::encoding::Encode<ManagerBindAllUnboundNodes2Response, D> for (T0,)
1683    {
1684        #[inline]
1685        unsafe fn encode(
1686            self,
1687            encoder: &mut fidl::encoding::Encoder<'_, D>,
1688            offset: usize,
1689            depth: fidl::encoding::Depth,
1690        ) -> fidl::Result<()> {
1691            encoder.debug_check_bounds::<ManagerBindAllUnboundNodes2Response>(offset);
1692            // Zero out padding regions. There's no need to apply masks
1693            // because the unmasked parts will be overwritten by fields.
1694            // Write the fields.
1695            self.0.encode(encoder, offset + 0, depth)?;
1696            Ok(())
1697        }
1698    }
1699
1700    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1701        for ManagerBindAllUnboundNodes2Response
1702    {
1703        #[inline(always)]
1704        fn new_empty() -> Self {
1705            Self {
1706                binding_result: fidl::new_empty!(fidl::encoding::Vector<NodeBindingInfo, 256>, D),
1707            }
1708        }
1709
1710        #[inline]
1711        unsafe fn decode(
1712            &mut self,
1713            decoder: &mut fidl::encoding::Decoder<'_, D>,
1714            offset: usize,
1715            _depth: fidl::encoding::Depth,
1716        ) -> fidl::Result<()> {
1717            decoder.debug_check_bounds::<Self>(offset);
1718            // Verify that padding bytes are zero.
1719            fidl::decode!(fidl::encoding::Vector<NodeBindingInfo, 256>, D, &mut self.binding_result, decoder, offset + 0, _depth)?;
1720            Ok(())
1721        }
1722    }
1723
1724    impl fidl::encoding::ValueTypeMarker for ManagerBindAllUnboundNodesResponse {
1725        type Borrowed<'a> = &'a Self;
1726        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1727            value
1728        }
1729    }
1730
1731    unsafe impl fidl::encoding::TypeMarker for ManagerBindAllUnboundNodesResponse {
1732        type Owned = Self;
1733
1734        #[inline(always)]
1735        fn inline_align(_context: fidl::encoding::Context) -> usize {
1736            8
1737        }
1738
1739        #[inline(always)]
1740        fn inline_size(_context: fidl::encoding::Context) -> usize {
1741            16
1742        }
1743    }
1744
1745    unsafe impl<D: fidl::encoding::ResourceDialect>
1746        fidl::encoding::Encode<ManagerBindAllUnboundNodesResponse, D>
1747        for &ManagerBindAllUnboundNodesResponse
1748    {
1749        #[inline]
1750        unsafe fn encode(
1751            self,
1752            encoder: &mut fidl::encoding::Encoder<'_, D>,
1753            offset: usize,
1754            _depth: fidl::encoding::Depth,
1755        ) -> fidl::Result<()> {
1756            encoder.debug_check_bounds::<ManagerBindAllUnboundNodesResponse>(offset);
1757            // Delegate to tuple encoding.
1758            fidl::encoding::Encode::<ManagerBindAllUnboundNodesResponse, D>::encode(
1759                (
1760                    <fidl::encoding::Vector<NodeBindingInfo, 10> as fidl::encoding::ValueTypeMarker>::borrow(&self.binding_result),
1761                ),
1762                encoder, offset, _depth
1763            )
1764        }
1765    }
1766    unsafe impl<
1767        D: fidl::encoding::ResourceDialect,
1768        T0: fidl::encoding::Encode<fidl::encoding::Vector<NodeBindingInfo, 10>, D>,
1769    > fidl::encoding::Encode<ManagerBindAllUnboundNodesResponse, D> for (T0,)
1770    {
1771        #[inline]
1772        unsafe fn encode(
1773            self,
1774            encoder: &mut fidl::encoding::Encoder<'_, D>,
1775            offset: usize,
1776            depth: fidl::encoding::Depth,
1777        ) -> fidl::Result<()> {
1778            encoder.debug_check_bounds::<ManagerBindAllUnboundNodesResponse>(offset);
1779            // Zero out padding regions. There's no need to apply masks
1780            // because the unmasked parts will be overwritten by fields.
1781            // Write the fields.
1782            self.0.encode(encoder, offset + 0, depth)?;
1783            Ok(())
1784        }
1785    }
1786
1787    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1788        for ManagerBindAllUnboundNodesResponse
1789    {
1790        #[inline(always)]
1791        fn new_empty() -> Self {
1792            Self {
1793                binding_result: fidl::new_empty!(fidl::encoding::Vector<NodeBindingInfo, 10>, D),
1794            }
1795        }
1796
1797        #[inline]
1798        unsafe fn decode(
1799            &mut self,
1800            decoder: &mut fidl::encoding::Decoder<'_, D>,
1801            offset: usize,
1802            _depth: fidl::encoding::Depth,
1803        ) -> fidl::Result<()> {
1804            decoder.debug_check_bounds::<Self>(offset);
1805            // Verify that padding bytes are zero.
1806            fidl::decode!(fidl::encoding::Vector<NodeBindingInfo, 10>, D, &mut self.binding_result, decoder, offset + 0, _depth)?;
1807            Ok(())
1808        }
1809    }
1810
1811    impl fidl::encoding::ValueTypeMarker for ManagerRebindCompositesWithDriverResponse {
1812        type Borrowed<'a> = &'a Self;
1813        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1814            value
1815        }
1816    }
1817
1818    unsafe impl fidl::encoding::TypeMarker for ManagerRebindCompositesWithDriverResponse {
1819        type Owned = Self;
1820
1821        #[inline(always)]
1822        fn inline_align(_context: fidl::encoding::Context) -> usize {
1823            4
1824        }
1825
1826        #[inline(always)]
1827        fn inline_size(_context: fidl::encoding::Context) -> usize {
1828            4
1829        }
1830        #[inline(always)]
1831        fn encode_is_copy() -> bool {
1832            true
1833        }
1834
1835        #[inline(always)]
1836        fn decode_is_copy() -> bool {
1837            true
1838        }
1839    }
1840
1841    unsafe impl<D: fidl::encoding::ResourceDialect>
1842        fidl::encoding::Encode<ManagerRebindCompositesWithDriverResponse, D>
1843        for &ManagerRebindCompositesWithDriverResponse
1844    {
1845        #[inline]
1846        unsafe fn encode(
1847            self,
1848            encoder: &mut fidl::encoding::Encoder<'_, D>,
1849            offset: usize,
1850            _depth: fidl::encoding::Depth,
1851        ) -> fidl::Result<()> {
1852            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverResponse>(offset);
1853            unsafe {
1854                // Copy the object into the buffer.
1855                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1856                (buf_ptr as *mut ManagerRebindCompositesWithDriverResponse).write_unaligned(
1857                    (self as *const ManagerRebindCompositesWithDriverResponse).read(),
1858                );
1859                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1860                // done second because the memcpy will write garbage to these bytes.
1861            }
1862            Ok(())
1863        }
1864    }
1865    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1866        fidl::encoding::Encode<ManagerRebindCompositesWithDriverResponse, D> for (T0,)
1867    {
1868        #[inline]
1869        unsafe fn encode(
1870            self,
1871            encoder: &mut fidl::encoding::Encoder<'_, D>,
1872            offset: usize,
1873            depth: fidl::encoding::Depth,
1874        ) -> fidl::Result<()> {
1875            encoder.debug_check_bounds::<ManagerRebindCompositesWithDriverResponse>(offset);
1876            // Zero out padding regions. There's no need to apply masks
1877            // because the unmasked parts will be overwritten by fields.
1878            // Write the fields.
1879            self.0.encode(encoder, offset + 0, depth)?;
1880            Ok(())
1881        }
1882    }
1883
1884    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1885        for ManagerRebindCompositesWithDriverResponse
1886    {
1887        #[inline(always)]
1888        fn new_empty() -> Self {
1889            Self { count: fidl::new_empty!(u32, D) }
1890        }
1891
1892        #[inline]
1893        unsafe fn decode(
1894            &mut self,
1895            decoder: &mut fidl::encoding::Decoder<'_, D>,
1896            offset: usize,
1897            _depth: fidl::encoding::Depth,
1898        ) -> fidl::Result<()> {
1899            decoder.debug_check_bounds::<Self>(offset);
1900            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1901            // Verify that padding bytes are zero.
1902            // Copy from the buffer into the object.
1903            unsafe {
1904                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1905            }
1906            Ok(())
1907        }
1908    }
1909
1910    impl fidl::encoding::ValueTypeMarker for ManagerRestartDriverHostsResponse {
1911        type Borrowed<'a> = &'a Self;
1912        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1913            value
1914        }
1915    }
1916
1917    unsafe impl fidl::encoding::TypeMarker for ManagerRestartDriverHostsResponse {
1918        type Owned = Self;
1919
1920        #[inline(always)]
1921        fn inline_align(_context: fidl::encoding::Context) -> usize {
1922            4
1923        }
1924
1925        #[inline(always)]
1926        fn inline_size(_context: fidl::encoding::Context) -> usize {
1927            4
1928        }
1929        #[inline(always)]
1930        fn encode_is_copy() -> bool {
1931            true
1932        }
1933
1934        #[inline(always)]
1935        fn decode_is_copy() -> bool {
1936            true
1937        }
1938    }
1939
1940    unsafe impl<D: fidl::encoding::ResourceDialect>
1941        fidl::encoding::Encode<ManagerRestartDriverHostsResponse, D>
1942        for &ManagerRestartDriverHostsResponse
1943    {
1944        #[inline]
1945        unsafe fn encode(
1946            self,
1947            encoder: &mut fidl::encoding::Encoder<'_, D>,
1948            offset: usize,
1949            _depth: fidl::encoding::Depth,
1950        ) -> fidl::Result<()> {
1951            encoder.debug_check_bounds::<ManagerRestartDriverHostsResponse>(offset);
1952            unsafe {
1953                // Copy the object into the buffer.
1954                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1955                (buf_ptr as *mut ManagerRestartDriverHostsResponse)
1956                    .write_unaligned((self as *const ManagerRestartDriverHostsResponse).read());
1957                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1958                // done second because the memcpy will write garbage to these bytes.
1959            }
1960            Ok(())
1961        }
1962    }
1963    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1964        fidl::encoding::Encode<ManagerRestartDriverHostsResponse, D> for (T0,)
1965    {
1966        #[inline]
1967        unsafe fn encode(
1968            self,
1969            encoder: &mut fidl::encoding::Encoder<'_, D>,
1970            offset: usize,
1971            depth: fidl::encoding::Depth,
1972        ) -> fidl::Result<()> {
1973            encoder.debug_check_bounds::<ManagerRestartDriverHostsResponse>(offset);
1974            // Zero out padding regions. There's no need to apply masks
1975            // because the unmasked parts will be overwritten by fields.
1976            // Write the fields.
1977            self.0.encode(encoder, offset + 0, depth)?;
1978            Ok(())
1979        }
1980    }
1981
1982    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1983        for ManagerRestartDriverHostsResponse
1984    {
1985        #[inline(always)]
1986        fn new_empty() -> Self {
1987            Self { count: fidl::new_empty!(u32, D) }
1988        }
1989
1990        #[inline]
1991        unsafe fn decode(
1992            &mut self,
1993            decoder: &mut fidl::encoding::Decoder<'_, D>,
1994            offset: usize,
1995            _depth: fidl::encoding::Depth,
1996        ) -> fidl::Result<()> {
1997            decoder.debug_check_bounds::<Self>(offset);
1998            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1999            // Verify that padding bytes are zero.
2000            // Copy from the buffer into the object.
2001            unsafe {
2002                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2003            }
2004            Ok(())
2005        }
2006    }
2007
2008    impl fidl::encoding::ValueTypeMarker for NodeInfoIteratorGetNextResponse {
2009        type Borrowed<'a> = &'a Self;
2010        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2011            value
2012        }
2013    }
2014
2015    unsafe impl fidl::encoding::TypeMarker for NodeInfoIteratorGetNextResponse {
2016        type Owned = Self;
2017
2018        #[inline(always)]
2019        fn inline_align(_context: fidl::encoding::Context) -> usize {
2020            8
2021        }
2022
2023        #[inline(always)]
2024        fn inline_size(_context: fidl::encoding::Context) -> usize {
2025            16
2026        }
2027    }
2028
2029    unsafe impl<D: fidl::encoding::ResourceDialect>
2030        fidl::encoding::Encode<NodeInfoIteratorGetNextResponse, D>
2031        for &NodeInfoIteratorGetNextResponse
2032    {
2033        #[inline]
2034        unsafe fn encode(
2035            self,
2036            encoder: &mut fidl::encoding::Encoder<'_, D>,
2037            offset: usize,
2038            _depth: fidl::encoding::Depth,
2039        ) -> fidl::Result<()> {
2040            encoder.debug_check_bounds::<NodeInfoIteratorGetNextResponse>(offset);
2041            // Delegate to tuple encoding.
2042            fidl::encoding::Encode::<NodeInfoIteratorGetNextResponse, D>::encode(
2043                (
2044                    <fidl::encoding::UnboundedVector<NodeInfo> as fidl::encoding::ValueTypeMarker>::borrow(&self.nodes),
2045                ),
2046                encoder, offset, _depth
2047            )
2048        }
2049    }
2050    unsafe impl<
2051        D: fidl::encoding::ResourceDialect,
2052        T0: fidl::encoding::Encode<fidl::encoding::UnboundedVector<NodeInfo>, D>,
2053    > fidl::encoding::Encode<NodeInfoIteratorGetNextResponse, D> for (T0,)
2054    {
2055        #[inline]
2056        unsafe fn encode(
2057            self,
2058            encoder: &mut fidl::encoding::Encoder<'_, D>,
2059            offset: usize,
2060            depth: fidl::encoding::Depth,
2061        ) -> fidl::Result<()> {
2062            encoder.debug_check_bounds::<NodeInfoIteratorGetNextResponse>(offset);
2063            // Zero out padding regions. There's no need to apply masks
2064            // because the unmasked parts will be overwritten by fields.
2065            // Write the fields.
2066            self.0.encode(encoder, offset + 0, depth)?;
2067            Ok(())
2068        }
2069    }
2070
2071    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2072        for NodeInfoIteratorGetNextResponse
2073    {
2074        #[inline(always)]
2075        fn new_empty() -> Self {
2076            Self { nodes: fidl::new_empty!(fidl::encoding::UnboundedVector<NodeInfo>, D) }
2077        }
2078
2079        #[inline]
2080        unsafe fn decode(
2081            &mut self,
2082            decoder: &mut fidl::encoding::Decoder<'_, D>,
2083            offset: usize,
2084            _depth: fidl::encoding::Depth,
2085        ) -> fidl::Result<()> {
2086            decoder.debug_check_bounds::<Self>(offset);
2087            // Verify that padding bytes are zero.
2088            fidl::decode!(
2089                fidl::encoding::UnboundedVector<NodeInfo>,
2090                D,
2091                &mut self.nodes,
2092                decoder,
2093                offset + 0,
2094                _depth
2095            )?;
2096            Ok(())
2097        }
2098    }
2099
2100    impl CompositeNodeInfo {
2101        #[inline(always)]
2102        fn max_ordinal_present(&self) -> u64 {
2103            if let Some(_) = self.moniker {
2104                return 5;
2105            }
2106            if let Some(_) = self.parent_monikers {
2107                return 4;
2108            }
2109            if let Some(_) = self.composite {
2110                return 3;
2111            }
2112            if let Some(_) = self.topological_path {
2113                return 2;
2114            }
2115            if let Some(_) = self.parent_topological_paths {
2116                return 1;
2117            }
2118            0
2119        }
2120    }
2121
2122    impl fidl::encoding::ValueTypeMarker for CompositeNodeInfo {
2123        type Borrowed<'a> = &'a Self;
2124        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2125            value
2126        }
2127    }
2128
2129    unsafe impl fidl::encoding::TypeMarker for CompositeNodeInfo {
2130        type Owned = Self;
2131
2132        #[inline(always)]
2133        fn inline_align(_context: fidl::encoding::Context) -> usize {
2134            8
2135        }
2136
2137        #[inline(always)]
2138        fn inline_size(_context: fidl::encoding::Context) -> usize {
2139            16
2140        }
2141    }
2142
2143    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeNodeInfo, D>
2144        for &CompositeNodeInfo
2145    {
2146        unsafe fn encode(
2147            self,
2148            encoder: &mut fidl::encoding::Encoder<'_, D>,
2149            offset: usize,
2150            mut depth: fidl::encoding::Depth,
2151        ) -> fidl::Result<()> {
2152            encoder.debug_check_bounds::<CompositeNodeInfo>(offset);
2153            // Vector header
2154            let max_ordinal: u64 = self.max_ordinal_present();
2155            encoder.write_num(max_ordinal, offset);
2156            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2157            // Calling encoder.out_of_line_offset(0) is not allowed.
2158            if max_ordinal == 0 {
2159                return Ok(());
2160            }
2161            depth.increment()?;
2162            let envelope_size = 8;
2163            let bytes_len = max_ordinal as usize * envelope_size;
2164            #[allow(unused_variables)]
2165            let offset = encoder.out_of_line_offset(bytes_len);
2166            let mut _prev_end_offset: usize = 0;
2167            if 1 > max_ordinal {
2168                return Ok(());
2169            }
2170
2171            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2172            // are envelope_size bytes.
2173            let cur_offset: usize = (1 - 1) * envelope_size;
2174
2175            // Zero reserved fields.
2176            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2177
2178            // Safety:
2179            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2180            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2181            //   envelope_size bytes, there is always sufficient room.
2182            fidl::encoding::encode_in_envelope_optional::<
2183                fidl::encoding::UnboundedVector<
2184                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2185                >,
2186                D,
2187            >(
2188                self.parent_topological_paths.as_ref().map(
2189                    <fidl::encoding::UnboundedVector<
2190                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2191                    > as fidl::encoding::ValueTypeMarker>::borrow,
2192                ),
2193                encoder,
2194                offset + cur_offset,
2195                depth,
2196            )?;
2197
2198            _prev_end_offset = cur_offset + envelope_size;
2199            if 2 > max_ordinal {
2200                return Ok(());
2201            }
2202
2203            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2204            // are envelope_size bytes.
2205            let cur_offset: usize = (2 - 1) * envelope_size;
2206
2207            // Zero reserved fields.
2208            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2209
2210            // Safety:
2211            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2212            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2213            //   envelope_size bytes, there is always sufficient room.
2214            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2215                self.topological_path.as_ref().map(
2216                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2217                ),
2218                encoder,
2219                offset + cur_offset,
2220                depth,
2221            )?;
2222
2223            _prev_end_offset = cur_offset + envelope_size;
2224            if 3 > max_ordinal {
2225                return Ok(());
2226            }
2227
2228            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2229            // are envelope_size bytes.
2230            let cur_offset: usize = (3 - 1) * envelope_size;
2231
2232            // Zero reserved fields.
2233            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2234
2235            // Safety:
2236            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2237            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2238            //   envelope_size bytes, there is always sufficient room.
2239            fidl::encoding::encode_in_envelope_optional::<CompositeInfo, D>(
2240                self.composite
2241                    .as_ref()
2242                    .map(<CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow),
2243                encoder,
2244                offset + cur_offset,
2245                depth,
2246            )?;
2247
2248            _prev_end_offset = cur_offset + envelope_size;
2249            if 4 > max_ordinal {
2250                return Ok(());
2251            }
2252
2253            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2254            // are envelope_size bytes.
2255            let cur_offset: usize = (4 - 1) * envelope_size;
2256
2257            // Zero reserved fields.
2258            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2259
2260            // Safety:
2261            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2262            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2263            //   envelope_size bytes, there is always sufficient room.
2264            fidl::encoding::encode_in_envelope_optional::<
2265                fidl::encoding::UnboundedVector<
2266                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2267                >,
2268                D,
2269            >(
2270                self.parent_monikers.as_ref().map(
2271                    <fidl::encoding::UnboundedVector<
2272                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2273                    > as fidl::encoding::ValueTypeMarker>::borrow,
2274                ),
2275                encoder,
2276                offset + cur_offset,
2277                depth,
2278            )?;
2279
2280            _prev_end_offset = cur_offset + envelope_size;
2281            if 5 > max_ordinal {
2282                return Ok(());
2283            }
2284
2285            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2286            // are envelope_size bytes.
2287            let cur_offset: usize = (5 - 1) * envelope_size;
2288
2289            // Zero reserved fields.
2290            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2291
2292            // Safety:
2293            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2294            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2295            //   envelope_size bytes, there is always sufficient room.
2296            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
2297            self.moniker.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
2298            encoder, offset + cur_offset, depth
2299        )?;
2300
2301            _prev_end_offset = cur_offset + envelope_size;
2302
2303            Ok(())
2304        }
2305    }
2306
2307    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeNodeInfo {
2308        #[inline(always)]
2309        fn new_empty() -> Self {
2310            Self::default()
2311        }
2312
2313        unsafe fn decode(
2314            &mut self,
2315            decoder: &mut fidl::encoding::Decoder<'_, D>,
2316            offset: usize,
2317            mut depth: fidl::encoding::Depth,
2318        ) -> fidl::Result<()> {
2319            decoder.debug_check_bounds::<Self>(offset);
2320            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2321                None => return Err(fidl::Error::NotNullable),
2322                Some(len) => len,
2323            };
2324            // Calling decoder.out_of_line_offset(0) is not allowed.
2325            if len == 0 {
2326                return Ok(());
2327            };
2328            depth.increment()?;
2329            let envelope_size = 8;
2330            let bytes_len = len * envelope_size;
2331            let offset = decoder.out_of_line_offset(bytes_len)?;
2332            // Decode the envelope for each type.
2333            let mut _next_ordinal_to_read = 0;
2334            let mut next_offset = offset;
2335            let end_offset = offset + bytes_len;
2336            _next_ordinal_to_read += 1;
2337            if next_offset >= end_offset {
2338                return Ok(());
2339            }
2340
2341            // Decode unknown envelopes for gaps in ordinals.
2342            while _next_ordinal_to_read < 1 {
2343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2344                _next_ordinal_to_read += 1;
2345                next_offset += envelope_size;
2346            }
2347
2348            let next_out_of_line = decoder.next_out_of_line();
2349            let handles_before = decoder.remaining_handles();
2350            if let Some((inlined, num_bytes, num_handles)) =
2351                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2352            {
2353                let member_inline_size = <fidl::encoding::UnboundedVector<
2354                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2355                > as fidl::encoding::TypeMarker>::inline_size(
2356                    decoder.context
2357                );
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.parent_topological_paths.get_or_insert_with(|| {
2371                    fidl::new_empty!(
2372                        fidl::encoding::UnboundedVector<
2373                            fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2374                        >,
2375                        D
2376                    )
2377                });
2378                fidl::decode!(
2379                    fidl::encoding::UnboundedVector<
2380                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2381                    >,
2382                    D,
2383                    val_ref,
2384                    decoder,
2385                    inner_offset,
2386                    inner_depth
2387                )?;
2388                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2389                {
2390                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2391                }
2392                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2393                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2394                }
2395            }
2396
2397            next_offset += envelope_size;
2398            _next_ordinal_to_read += 1;
2399            if next_offset >= end_offset {
2400                return Ok(());
2401            }
2402
2403            // Decode unknown envelopes for gaps in ordinals.
2404            while _next_ordinal_to_read < 2 {
2405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2406                _next_ordinal_to_read += 1;
2407                next_offset += envelope_size;
2408            }
2409
2410            let next_out_of_line = decoder.next_out_of_line();
2411            let handles_before = decoder.remaining_handles();
2412            if let Some((inlined, num_bytes, num_handles)) =
2413                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2414            {
2415                let member_inline_size =
2416                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2417                        decoder.context,
2418                    );
2419                if inlined != (member_inline_size <= 4) {
2420                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2421                }
2422                let inner_offset;
2423                let mut inner_depth = depth.clone();
2424                if inlined {
2425                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2426                    inner_offset = next_offset;
2427                } else {
2428                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2429                    inner_depth.increment()?;
2430                }
2431                let val_ref = self
2432                    .topological_path
2433                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2434                fidl::decode!(
2435                    fidl::encoding::UnboundedString,
2436                    D,
2437                    val_ref,
2438                    decoder,
2439                    inner_offset,
2440                    inner_depth
2441                )?;
2442                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2443                {
2444                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2445                }
2446                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2447                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2448                }
2449            }
2450
2451            next_offset += envelope_size;
2452            _next_ordinal_to_read += 1;
2453            if next_offset >= end_offset {
2454                return Ok(());
2455            }
2456
2457            // Decode unknown envelopes for gaps in ordinals.
2458            while _next_ordinal_to_read < 3 {
2459                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2460                _next_ordinal_to_read += 1;
2461                next_offset += envelope_size;
2462            }
2463
2464            let next_out_of_line = decoder.next_out_of_line();
2465            let handles_before = decoder.remaining_handles();
2466            if let Some((inlined, num_bytes, num_handles)) =
2467                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2468            {
2469                let member_inline_size =
2470                    <CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2471                if inlined != (member_inline_size <= 4) {
2472                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2473                }
2474                let inner_offset;
2475                let mut inner_depth = depth.clone();
2476                if inlined {
2477                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2478                    inner_offset = next_offset;
2479                } else {
2480                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2481                    inner_depth.increment()?;
2482                }
2483                let val_ref =
2484                    self.composite.get_or_insert_with(|| fidl::new_empty!(CompositeInfo, D));
2485                fidl::decode!(CompositeInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2486                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2487                {
2488                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2489                }
2490                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2491                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2492                }
2493            }
2494
2495            next_offset += envelope_size;
2496            _next_ordinal_to_read += 1;
2497            if next_offset >= end_offset {
2498                return Ok(());
2499            }
2500
2501            // Decode unknown envelopes for gaps in ordinals.
2502            while _next_ordinal_to_read < 4 {
2503                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2504                _next_ordinal_to_read += 1;
2505                next_offset += envelope_size;
2506            }
2507
2508            let next_out_of_line = decoder.next_out_of_line();
2509            let handles_before = decoder.remaining_handles();
2510            if let Some((inlined, num_bytes, num_handles)) =
2511                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2512            {
2513                let member_inline_size = <fidl::encoding::UnboundedVector<
2514                    fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2515                > as fidl::encoding::TypeMarker>::inline_size(
2516                    decoder.context
2517                );
2518                if inlined != (member_inline_size <= 4) {
2519                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2520                }
2521                let inner_offset;
2522                let mut inner_depth = depth.clone();
2523                if inlined {
2524                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2525                    inner_offset = next_offset;
2526                } else {
2527                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2528                    inner_depth.increment()?;
2529                }
2530                let val_ref = self.parent_monikers.get_or_insert_with(|| {
2531                    fidl::new_empty!(
2532                        fidl::encoding::UnboundedVector<
2533                            fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2534                        >,
2535                        D
2536                    )
2537                });
2538                fidl::decode!(
2539                    fidl::encoding::UnboundedVector<
2540                        fidl::encoding::Optional<fidl::encoding::UnboundedString>,
2541                    >,
2542                    D,
2543                    val_ref,
2544                    decoder,
2545                    inner_offset,
2546                    inner_depth
2547                )?;
2548                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2549                {
2550                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2551                }
2552                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2553                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2554                }
2555            }
2556
2557            next_offset += envelope_size;
2558            _next_ordinal_to_read += 1;
2559            if next_offset >= end_offset {
2560                return Ok(());
2561            }
2562
2563            // Decode unknown envelopes for gaps in ordinals.
2564            while _next_ordinal_to_read < 5 {
2565                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2566                _next_ordinal_to_read += 1;
2567                next_offset += envelope_size;
2568            }
2569
2570            let next_out_of_line = decoder.next_out_of_line();
2571            let handles_before = decoder.remaining_handles();
2572            if let Some((inlined, num_bytes, num_handles)) =
2573                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2574            {
2575                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2576                if inlined != (member_inline_size <= 4) {
2577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2578                }
2579                let inner_offset;
2580                let mut inner_depth = depth.clone();
2581                if inlined {
2582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2583                    inner_offset = next_offset;
2584                } else {
2585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2586                    inner_depth.increment()?;
2587                }
2588                let val_ref = self.moniker.get_or_insert_with(|| {
2589                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
2590                });
2591                fidl::decode!(
2592                    fidl::encoding::BoundedString<1024>,
2593                    D,
2594                    val_ref,
2595                    decoder,
2596                    inner_offset,
2597                    inner_depth
2598                )?;
2599                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2600                {
2601                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2602                }
2603                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2604                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2605                }
2606            }
2607
2608            next_offset += envelope_size;
2609
2610            // Decode the remaining unknown envelopes.
2611            while next_offset < end_offset {
2612                _next_ordinal_to_read += 1;
2613                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2614                next_offset += envelope_size;
2615            }
2616
2617            Ok(())
2618        }
2619    }
2620
2621    impl DispatcherDebugStats {
2622        #[inline(always)]
2623        fn max_ordinal_present(&self) -> u64 {
2624            if let Some(_) = self.non_inlined {
2625                return 3;
2626            }
2627            if let Some(_) = self.num_inlined_requests {
2628                return 2;
2629            }
2630            if let Some(_) = self.num_total_requests {
2631                return 1;
2632            }
2633            0
2634        }
2635    }
2636
2637    impl fidl::encoding::ValueTypeMarker for DispatcherDebugStats {
2638        type Borrowed<'a> = &'a Self;
2639        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2640            value
2641        }
2642    }
2643
2644    unsafe impl fidl::encoding::TypeMarker for DispatcherDebugStats {
2645        type Owned = Self;
2646
2647        #[inline(always)]
2648        fn inline_align(_context: fidl::encoding::Context) -> usize {
2649            8
2650        }
2651
2652        #[inline(always)]
2653        fn inline_size(_context: fidl::encoding::Context) -> usize {
2654            16
2655        }
2656    }
2657
2658    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DispatcherDebugStats, D>
2659        for &DispatcherDebugStats
2660    {
2661        unsafe fn encode(
2662            self,
2663            encoder: &mut fidl::encoding::Encoder<'_, D>,
2664            offset: usize,
2665            mut depth: fidl::encoding::Depth,
2666        ) -> fidl::Result<()> {
2667            encoder.debug_check_bounds::<DispatcherDebugStats>(offset);
2668            // Vector header
2669            let max_ordinal: u64 = self.max_ordinal_present();
2670            encoder.write_num(max_ordinal, offset);
2671            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2672            // Calling encoder.out_of_line_offset(0) is not allowed.
2673            if max_ordinal == 0 {
2674                return Ok(());
2675            }
2676            depth.increment()?;
2677            let envelope_size = 8;
2678            let bytes_len = max_ordinal as usize * envelope_size;
2679            #[allow(unused_variables)]
2680            let offset = encoder.out_of_line_offset(bytes_len);
2681            let mut _prev_end_offset: usize = 0;
2682            if 1 > max_ordinal {
2683                return Ok(());
2684            }
2685
2686            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2687            // are envelope_size bytes.
2688            let cur_offset: usize = (1 - 1) * envelope_size;
2689
2690            // Zero reserved fields.
2691            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2692
2693            // Safety:
2694            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2695            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2696            //   envelope_size bytes, there is always sufficient room.
2697            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2698                self.num_total_requests
2699                    .as_ref()
2700                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2701                encoder,
2702                offset + cur_offset,
2703                depth,
2704            )?;
2705
2706            _prev_end_offset = cur_offset + envelope_size;
2707            if 2 > max_ordinal {
2708                return Ok(());
2709            }
2710
2711            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2712            // are envelope_size bytes.
2713            let cur_offset: usize = (2 - 1) * envelope_size;
2714
2715            // Zero reserved fields.
2716            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2717
2718            // Safety:
2719            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2720            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2721            //   envelope_size bytes, there is always sufficient room.
2722            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2723                self.num_inlined_requests
2724                    .as_ref()
2725                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2726                encoder,
2727                offset + cur_offset,
2728                depth,
2729            )?;
2730
2731            _prev_end_offset = cur_offset + envelope_size;
2732            if 3 > max_ordinal {
2733                return Ok(());
2734            }
2735
2736            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2737            // are envelope_size bytes.
2738            let cur_offset: usize = (3 - 1) * envelope_size;
2739
2740            // Zero reserved fields.
2741            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2742
2743            // Safety:
2744            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2745            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2746            //   envelope_size bytes, there is always sufficient room.
2747            fidl::encoding::encode_in_envelope_optional::<NonInlinedRequestStats, D>(
2748                self.non_inlined
2749                    .as_ref()
2750                    .map(<NonInlinedRequestStats as fidl::encoding::ValueTypeMarker>::borrow),
2751                encoder,
2752                offset + cur_offset,
2753                depth,
2754            )?;
2755
2756            _prev_end_offset = cur_offset + envelope_size;
2757
2758            Ok(())
2759        }
2760    }
2761
2762    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DispatcherDebugStats {
2763        #[inline(always)]
2764        fn new_empty() -> Self {
2765            Self::default()
2766        }
2767
2768        unsafe fn decode(
2769            &mut self,
2770            decoder: &mut fidl::encoding::Decoder<'_, D>,
2771            offset: usize,
2772            mut depth: fidl::encoding::Depth,
2773        ) -> fidl::Result<()> {
2774            decoder.debug_check_bounds::<Self>(offset);
2775            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2776                None => return Err(fidl::Error::NotNullable),
2777                Some(len) => len,
2778            };
2779            // Calling decoder.out_of_line_offset(0) is not allowed.
2780            if len == 0 {
2781                return Ok(());
2782            };
2783            depth.increment()?;
2784            let envelope_size = 8;
2785            let bytes_len = len * envelope_size;
2786            let offset = decoder.out_of_line_offset(bytes_len)?;
2787            // Decode the envelope for each type.
2788            let mut _next_ordinal_to_read = 0;
2789            let mut next_offset = offset;
2790            let end_offset = offset + bytes_len;
2791            _next_ordinal_to_read += 1;
2792            if next_offset >= end_offset {
2793                return Ok(());
2794            }
2795
2796            // Decode unknown envelopes for gaps in ordinals.
2797            while _next_ordinal_to_read < 1 {
2798                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2799                _next_ordinal_to_read += 1;
2800                next_offset += envelope_size;
2801            }
2802
2803            let next_out_of_line = decoder.next_out_of_line();
2804            let handles_before = decoder.remaining_handles();
2805            if let Some((inlined, num_bytes, num_handles)) =
2806                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2807            {
2808                let member_inline_size =
2809                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2810                if inlined != (member_inline_size <= 4) {
2811                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2812                }
2813                let inner_offset;
2814                let mut inner_depth = depth.clone();
2815                if inlined {
2816                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2817                    inner_offset = next_offset;
2818                } else {
2819                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2820                    inner_depth.increment()?;
2821                }
2822                let val_ref =
2823                    self.num_total_requests.get_or_insert_with(|| fidl::new_empty!(u64, D));
2824                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2825                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2826                {
2827                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2828                }
2829                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2830                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2831                }
2832            }
2833
2834            next_offset += envelope_size;
2835            _next_ordinal_to_read += 1;
2836            if next_offset >= end_offset {
2837                return Ok(());
2838            }
2839
2840            // Decode unknown envelopes for gaps in ordinals.
2841            while _next_ordinal_to_read < 2 {
2842                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2843                _next_ordinal_to_read += 1;
2844                next_offset += envelope_size;
2845            }
2846
2847            let next_out_of_line = decoder.next_out_of_line();
2848            let handles_before = decoder.remaining_handles();
2849            if let Some((inlined, num_bytes, num_handles)) =
2850                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2851            {
2852                let member_inline_size =
2853                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2854                if inlined != (member_inline_size <= 4) {
2855                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2856                }
2857                let inner_offset;
2858                let mut inner_depth = depth.clone();
2859                if inlined {
2860                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2861                    inner_offset = next_offset;
2862                } else {
2863                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2864                    inner_depth.increment()?;
2865                }
2866                let val_ref =
2867                    self.num_inlined_requests.get_or_insert_with(|| fidl::new_empty!(u64, D));
2868                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2869                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2870                {
2871                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2872                }
2873                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2874                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2875                }
2876            }
2877
2878            next_offset += envelope_size;
2879            _next_ordinal_to_read += 1;
2880            if next_offset >= end_offset {
2881                return Ok(());
2882            }
2883
2884            // Decode unknown envelopes for gaps in ordinals.
2885            while _next_ordinal_to_read < 3 {
2886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2887                _next_ordinal_to_read += 1;
2888                next_offset += envelope_size;
2889            }
2890
2891            let next_out_of_line = decoder.next_out_of_line();
2892            let handles_before = decoder.remaining_handles();
2893            if let Some((inlined, num_bytes, num_handles)) =
2894                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2895            {
2896                let member_inline_size =
2897                    <NonInlinedRequestStats as fidl::encoding::TypeMarker>::inline_size(
2898                        decoder.context,
2899                    );
2900                if inlined != (member_inline_size <= 4) {
2901                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2902                }
2903                let inner_offset;
2904                let mut inner_depth = depth.clone();
2905                if inlined {
2906                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2907                    inner_offset = next_offset;
2908                } else {
2909                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2910                    inner_depth.increment()?;
2911                }
2912                let val_ref = self
2913                    .non_inlined
2914                    .get_or_insert_with(|| fidl::new_empty!(NonInlinedRequestStats, D));
2915                fidl::decode!(
2916                    NonInlinedRequestStats,
2917                    D,
2918                    val_ref,
2919                    decoder,
2920                    inner_offset,
2921                    inner_depth
2922                )?;
2923                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2924                {
2925                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2926                }
2927                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2928                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2929                }
2930            }
2931
2932            next_offset += envelope_size;
2933
2934            // Decode the remaining unknown envelopes.
2935            while next_offset < end_offset {
2936                _next_ordinal_to_read += 1;
2937                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2938                next_offset += envelope_size;
2939            }
2940
2941            Ok(())
2942        }
2943    }
2944
2945    impl DispatcherInfo {
2946        #[inline(always)]
2947        fn max_ordinal_present(&self) -> u64 {
2948            if let Some(_) = self.num_queued_tasks {
2949                return 14;
2950            }
2951            if let Some(_) = self.queued_tasks {
2952                return 13;
2953            }
2954            if let Some(_) = self.debug_stats {
2955                return 12;
2956            }
2957            if let Some(_) = self.destroy_user_initiated {
2958                return 11;
2959            }
2960            if let Some(_) = self.destroy_context {
2961                return 10;
2962            }
2963            if let Some(_) = self.state {
2964                return 9;
2965            }
2966            if let Some(_) = self.allow_sync_calls {
2967                return 8;
2968            }
2969            if let Some(_) = self.synchronized {
2970                return 7;
2971            }
2972            if let Some(_) = self.driver_ptr {
2973                return 6;
2974            }
2975            if let Some(_) = self.dispatcher_ptr {
2976                return 5;
2977            }
2978            if let Some(_) = self.scheduler_role {
2979                return 4;
2980            }
2981            if let Some(_) = self.options {
2982                return 3;
2983            }
2984            if let Some(_) = self.name {
2985                return 2;
2986            }
2987            if let Some(_) = self.driver {
2988                return 1;
2989            }
2990            0
2991        }
2992    }
2993
2994    impl fidl::encoding::ValueTypeMarker for DispatcherInfo {
2995        type Borrowed<'a> = &'a Self;
2996        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2997            value
2998        }
2999    }
3000
3001    unsafe impl fidl::encoding::TypeMarker for DispatcherInfo {
3002        type Owned = Self;
3003
3004        #[inline(always)]
3005        fn inline_align(_context: fidl::encoding::Context) -> usize {
3006            8
3007        }
3008
3009        #[inline(always)]
3010        fn inline_size(_context: fidl::encoding::Context) -> usize {
3011            16
3012        }
3013    }
3014
3015    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DispatcherInfo, D>
3016        for &DispatcherInfo
3017    {
3018        unsafe fn encode(
3019            self,
3020            encoder: &mut fidl::encoding::Encoder<'_, D>,
3021            offset: usize,
3022            mut depth: fidl::encoding::Depth,
3023        ) -> fidl::Result<()> {
3024            encoder.debug_check_bounds::<DispatcherInfo>(offset);
3025            // Vector header
3026            let max_ordinal: u64 = self.max_ordinal_present();
3027            encoder.write_num(max_ordinal, offset);
3028            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3029            // Calling encoder.out_of_line_offset(0) is not allowed.
3030            if max_ordinal == 0 {
3031                return Ok(());
3032            }
3033            depth.increment()?;
3034            let envelope_size = 8;
3035            let bytes_len = max_ordinal as usize * envelope_size;
3036            #[allow(unused_variables)]
3037            let offset = encoder.out_of_line_offset(bytes_len);
3038            let mut _prev_end_offset: usize = 0;
3039            if 1 > max_ordinal {
3040                return Ok(());
3041            }
3042
3043            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3044            // are envelope_size bytes.
3045            let cur_offset: usize = (1 - 1) * envelope_size;
3046
3047            // Zero reserved fields.
3048            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3049
3050            // Safety:
3051            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3052            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3053            //   envelope_size bytes, there is always sufficient room.
3054            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
3055            self.driver.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
3056            encoder, offset + cur_offset, depth
3057        )?;
3058
3059            _prev_end_offset = cur_offset + envelope_size;
3060            if 2 > max_ordinal {
3061                return Ok(());
3062            }
3063
3064            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3065            // are envelope_size bytes.
3066            let cur_offset: usize = (2 - 1) * envelope_size;
3067
3068            // Zero reserved fields.
3069            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3070
3071            // Safety:
3072            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3073            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3074            //   envelope_size bytes, there is always sufficient room.
3075            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3076                self.name.as_ref().map(
3077                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3078                ),
3079                encoder,
3080                offset + cur_offset,
3081                depth,
3082            )?;
3083
3084            _prev_end_offset = cur_offset + envelope_size;
3085            if 3 > max_ordinal {
3086                return Ok(());
3087            }
3088
3089            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3090            // are envelope_size bytes.
3091            let cur_offset: usize = (3 - 1) * envelope_size;
3092
3093            // Zero reserved fields.
3094            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3095
3096            // Safety:
3097            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3098            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3099            //   envelope_size bytes, there is always sufficient room.
3100            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3101                self.options.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3102                encoder,
3103                offset + cur_offset,
3104                depth,
3105            )?;
3106
3107            _prev_end_offset = cur_offset + envelope_size;
3108            if 4 > max_ordinal {
3109                return Ok(());
3110            }
3111
3112            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3113            // are envelope_size bytes.
3114            let cur_offset: usize = (4 - 1) * envelope_size;
3115
3116            // Zero reserved fields.
3117            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3118
3119            // Safety:
3120            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3121            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3122            //   envelope_size bytes, there is always sufficient room.
3123            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3124                self.scheduler_role.as_ref().map(
3125                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3126                ),
3127                encoder,
3128                offset + cur_offset,
3129                depth,
3130            )?;
3131
3132            _prev_end_offset = cur_offset + envelope_size;
3133            if 5 > max_ordinal {
3134                return Ok(());
3135            }
3136
3137            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3138            // are envelope_size bytes.
3139            let cur_offset: usize = (5 - 1) * envelope_size;
3140
3141            // Zero reserved fields.
3142            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3143
3144            // Safety:
3145            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3146            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3147            //   envelope_size bytes, there is always sufficient room.
3148            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3149                self.dispatcher_ptr.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3150                encoder,
3151                offset + cur_offset,
3152                depth,
3153            )?;
3154
3155            _prev_end_offset = cur_offset + envelope_size;
3156            if 6 > max_ordinal {
3157                return Ok(());
3158            }
3159
3160            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3161            // are envelope_size bytes.
3162            let cur_offset: usize = (6 - 1) * envelope_size;
3163
3164            // Zero reserved fields.
3165            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3166
3167            // Safety:
3168            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3169            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3170            //   envelope_size bytes, there is always sufficient room.
3171            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3172                self.driver_ptr.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3173                encoder,
3174                offset + cur_offset,
3175                depth,
3176            )?;
3177
3178            _prev_end_offset = cur_offset + envelope_size;
3179            if 7 > max_ordinal {
3180                return Ok(());
3181            }
3182
3183            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3184            // are envelope_size bytes.
3185            let cur_offset: usize = (7 - 1) * envelope_size;
3186
3187            // Zero reserved fields.
3188            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3189
3190            // Safety:
3191            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3192            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3193            //   envelope_size bytes, there is always sufficient room.
3194            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3195                self.synchronized.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3196                encoder,
3197                offset + cur_offset,
3198                depth,
3199            )?;
3200
3201            _prev_end_offset = cur_offset + envelope_size;
3202            if 8 > max_ordinal {
3203                return Ok(());
3204            }
3205
3206            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3207            // are envelope_size bytes.
3208            let cur_offset: usize = (8 - 1) * envelope_size;
3209
3210            // Zero reserved fields.
3211            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3212
3213            // Safety:
3214            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3215            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3216            //   envelope_size bytes, there is always sufficient room.
3217            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3218                self.allow_sync_calls
3219                    .as_ref()
3220                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3221                encoder,
3222                offset + cur_offset,
3223                depth,
3224            )?;
3225
3226            _prev_end_offset = cur_offset + envelope_size;
3227            if 9 > max_ordinal {
3228                return Ok(());
3229            }
3230
3231            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3232            // are envelope_size bytes.
3233            let cur_offset: usize = (9 - 1) * envelope_size;
3234
3235            // Zero reserved fields.
3236            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3237
3238            // Safety:
3239            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3240            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3241            //   envelope_size bytes, there is always sufficient room.
3242            fidl::encoding::encode_in_envelope_optional::<DispatcherState, D>(
3243                self.state
3244                    .as_ref()
3245                    .map(<DispatcherState as fidl::encoding::ValueTypeMarker>::borrow),
3246                encoder,
3247                offset + cur_offset,
3248                depth,
3249            )?;
3250
3251            _prev_end_offset = cur_offset + envelope_size;
3252            if 10 > max_ordinal {
3253                return Ok(());
3254            }
3255
3256            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3257            // are envelope_size bytes.
3258            let cur_offset: usize = (10 - 1) * envelope_size;
3259
3260            // Zero reserved fields.
3261            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3262
3263            // Safety:
3264            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3265            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3266            //   envelope_size bytes, there is always sufficient room.
3267            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3268                self.destroy_context.as_ref().map(
3269                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3270                ),
3271                encoder,
3272                offset + cur_offset,
3273                depth,
3274            )?;
3275
3276            _prev_end_offset = cur_offset + envelope_size;
3277            if 11 > max_ordinal {
3278                return Ok(());
3279            }
3280
3281            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3282            // are envelope_size bytes.
3283            let cur_offset: usize = (11 - 1) * envelope_size;
3284
3285            // Zero reserved fields.
3286            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3287
3288            // Safety:
3289            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3290            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3291            //   envelope_size bytes, there is always sufficient room.
3292            fidl::encoding::encode_in_envelope_optional::<bool, D>(
3293                self.destroy_user_initiated
3294                    .as_ref()
3295                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
3296                encoder,
3297                offset + cur_offset,
3298                depth,
3299            )?;
3300
3301            _prev_end_offset = cur_offset + envelope_size;
3302            if 12 > max_ordinal {
3303                return Ok(());
3304            }
3305
3306            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3307            // are envelope_size bytes.
3308            let cur_offset: usize = (12 - 1) * envelope_size;
3309
3310            // Zero reserved fields.
3311            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3312
3313            // Safety:
3314            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3315            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3316            //   envelope_size bytes, there is always sufficient room.
3317            fidl::encoding::encode_in_envelope_optional::<DispatcherDebugStats, D>(
3318                self.debug_stats
3319                    .as_ref()
3320                    .map(<DispatcherDebugStats as fidl::encoding::ValueTypeMarker>::borrow),
3321                encoder,
3322                offset + cur_offset,
3323                depth,
3324            )?;
3325
3326            _prev_end_offset = cur_offset + envelope_size;
3327            if 13 > max_ordinal {
3328                return Ok(());
3329            }
3330
3331            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3332            // are envelope_size bytes.
3333            let cur_offset: usize = (13 - 1) * envelope_size;
3334
3335            // Zero reserved fields.
3336            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3337
3338            // Safety:
3339            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3340            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3341            //   envelope_size bytes, there is always sufficient room.
3342            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<QueuedTaskInfo>, D>(
3343            self.queued_tasks.as_ref().map(<fidl::encoding::UnboundedVector<QueuedTaskInfo> as fidl::encoding::ValueTypeMarker>::borrow),
3344            encoder, offset + cur_offset, depth
3345        )?;
3346
3347            _prev_end_offset = cur_offset + envelope_size;
3348            if 14 > max_ordinal {
3349                return Ok(());
3350            }
3351
3352            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3353            // are envelope_size bytes.
3354            let cur_offset: usize = (14 - 1) * envelope_size;
3355
3356            // Zero reserved fields.
3357            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3358
3359            // Safety:
3360            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3361            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3362            //   envelope_size bytes, there is always sufficient room.
3363            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3364                self.num_queued_tasks
3365                    .as_ref()
3366                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3367                encoder,
3368                offset + cur_offset,
3369                depth,
3370            )?;
3371
3372            _prev_end_offset = cur_offset + envelope_size;
3373
3374            Ok(())
3375        }
3376    }
3377
3378    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DispatcherInfo {
3379        #[inline(always)]
3380        fn new_empty() -> Self {
3381            Self::default()
3382        }
3383
3384        unsafe fn decode(
3385            &mut self,
3386            decoder: &mut fidl::encoding::Decoder<'_, D>,
3387            offset: usize,
3388            mut depth: fidl::encoding::Depth,
3389        ) -> fidl::Result<()> {
3390            decoder.debug_check_bounds::<Self>(offset);
3391            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3392                None => return Err(fidl::Error::NotNullable),
3393                Some(len) => len,
3394            };
3395            // Calling decoder.out_of_line_offset(0) is not allowed.
3396            if len == 0 {
3397                return Ok(());
3398            };
3399            depth.increment()?;
3400            let envelope_size = 8;
3401            let bytes_len = len * envelope_size;
3402            let offset = decoder.out_of_line_offset(bytes_len)?;
3403            // Decode the envelope for each type.
3404            let mut _next_ordinal_to_read = 0;
3405            let mut next_offset = offset;
3406            let end_offset = offset + bytes_len;
3407            _next_ordinal_to_read += 1;
3408            if next_offset >= end_offset {
3409                return Ok(());
3410            }
3411
3412            // Decode unknown envelopes for gaps in ordinals.
3413            while _next_ordinal_to_read < 1 {
3414                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3415                _next_ordinal_to_read += 1;
3416                next_offset += envelope_size;
3417            }
3418
3419            let next_out_of_line = decoder.next_out_of_line();
3420            let handles_before = decoder.remaining_handles();
3421            if let Some((inlined, num_bytes, num_handles)) =
3422                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3423            {
3424                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3425                if inlined != (member_inline_size <= 4) {
3426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3427                }
3428                let inner_offset;
3429                let mut inner_depth = depth.clone();
3430                if inlined {
3431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3432                    inner_offset = next_offset;
3433                } else {
3434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3435                    inner_depth.increment()?;
3436                }
3437                let val_ref = self.driver.get_or_insert_with(|| {
3438                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
3439                });
3440                fidl::decode!(
3441                    fidl::encoding::BoundedString<4096>,
3442                    D,
3443                    val_ref,
3444                    decoder,
3445                    inner_offset,
3446                    inner_depth
3447                )?;
3448                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3449                {
3450                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3451                }
3452                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3453                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3454                }
3455            }
3456
3457            next_offset += envelope_size;
3458            _next_ordinal_to_read += 1;
3459            if next_offset >= end_offset {
3460                return Ok(());
3461            }
3462
3463            // Decode unknown envelopes for gaps in ordinals.
3464            while _next_ordinal_to_read < 2 {
3465                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3466                _next_ordinal_to_read += 1;
3467                next_offset += envelope_size;
3468            }
3469
3470            let next_out_of_line = decoder.next_out_of_line();
3471            let handles_before = decoder.remaining_handles();
3472            if let Some((inlined, num_bytes, num_handles)) =
3473                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3474            {
3475                let member_inline_size =
3476                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3477                        decoder.context,
3478                    );
3479                if inlined != (member_inline_size <= 4) {
3480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3481                }
3482                let inner_offset;
3483                let mut inner_depth = depth.clone();
3484                if inlined {
3485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3486                    inner_offset = next_offset;
3487                } else {
3488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3489                    inner_depth.increment()?;
3490                }
3491                let val_ref = self
3492                    .name
3493                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3494                fidl::decode!(
3495                    fidl::encoding::UnboundedString,
3496                    D,
3497                    val_ref,
3498                    decoder,
3499                    inner_offset,
3500                    inner_depth
3501                )?;
3502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3503                {
3504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3505                }
3506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3508                }
3509            }
3510
3511            next_offset += envelope_size;
3512            _next_ordinal_to_read += 1;
3513            if next_offset >= end_offset {
3514                return Ok(());
3515            }
3516
3517            // Decode unknown envelopes for gaps in ordinals.
3518            while _next_ordinal_to_read < 3 {
3519                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3520                _next_ordinal_to_read += 1;
3521                next_offset += envelope_size;
3522            }
3523
3524            let next_out_of_line = decoder.next_out_of_line();
3525            let handles_before = decoder.remaining_handles();
3526            if let Some((inlined, num_bytes, num_handles)) =
3527                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3528            {
3529                let member_inline_size =
3530                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3531                if inlined != (member_inline_size <= 4) {
3532                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3533                }
3534                let inner_offset;
3535                let mut inner_depth = depth.clone();
3536                if inlined {
3537                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3538                    inner_offset = next_offset;
3539                } else {
3540                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3541                    inner_depth.increment()?;
3542                }
3543                let val_ref = self.options.get_or_insert_with(|| fidl::new_empty!(u32, D));
3544                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3545                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3546                {
3547                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3548                }
3549                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3550                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3551                }
3552            }
3553
3554            next_offset += envelope_size;
3555            _next_ordinal_to_read += 1;
3556            if next_offset >= end_offset {
3557                return Ok(());
3558            }
3559
3560            // Decode unknown envelopes for gaps in ordinals.
3561            while _next_ordinal_to_read < 4 {
3562                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3563                _next_ordinal_to_read += 1;
3564                next_offset += envelope_size;
3565            }
3566
3567            let next_out_of_line = decoder.next_out_of_line();
3568            let handles_before = decoder.remaining_handles();
3569            if let Some((inlined, num_bytes, num_handles)) =
3570                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3571            {
3572                let member_inline_size =
3573                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3574                        decoder.context,
3575                    );
3576                if inlined != (member_inline_size <= 4) {
3577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3578                }
3579                let inner_offset;
3580                let mut inner_depth = depth.clone();
3581                if inlined {
3582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3583                    inner_offset = next_offset;
3584                } else {
3585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3586                    inner_depth.increment()?;
3587                }
3588                let val_ref = self
3589                    .scheduler_role
3590                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3591                fidl::decode!(
3592                    fidl::encoding::UnboundedString,
3593                    D,
3594                    val_ref,
3595                    decoder,
3596                    inner_offset,
3597                    inner_depth
3598                )?;
3599                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3600                {
3601                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3602                }
3603                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3604                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3605                }
3606            }
3607
3608            next_offset += envelope_size;
3609            _next_ordinal_to_read += 1;
3610            if next_offset >= end_offset {
3611                return Ok(());
3612            }
3613
3614            // Decode unknown envelopes for gaps in ordinals.
3615            while _next_ordinal_to_read < 5 {
3616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3617                _next_ordinal_to_read += 1;
3618                next_offset += envelope_size;
3619            }
3620
3621            let next_out_of_line = decoder.next_out_of_line();
3622            let handles_before = decoder.remaining_handles();
3623            if let Some((inlined, num_bytes, num_handles)) =
3624                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3625            {
3626                let member_inline_size =
3627                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3628                if inlined != (member_inline_size <= 4) {
3629                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3630                }
3631                let inner_offset;
3632                let mut inner_depth = depth.clone();
3633                if inlined {
3634                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3635                    inner_offset = next_offset;
3636                } else {
3637                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3638                    inner_depth.increment()?;
3639                }
3640                let val_ref = self.dispatcher_ptr.get_or_insert_with(|| fidl::new_empty!(u64, D));
3641                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3642                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3643                {
3644                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3645                }
3646                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3647                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3648                }
3649            }
3650
3651            next_offset += envelope_size;
3652            _next_ordinal_to_read += 1;
3653            if next_offset >= end_offset {
3654                return Ok(());
3655            }
3656
3657            // Decode unknown envelopes for gaps in ordinals.
3658            while _next_ordinal_to_read < 6 {
3659                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3660                _next_ordinal_to_read += 1;
3661                next_offset += envelope_size;
3662            }
3663
3664            let next_out_of_line = decoder.next_out_of_line();
3665            let handles_before = decoder.remaining_handles();
3666            if let Some((inlined, num_bytes, num_handles)) =
3667                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3668            {
3669                let member_inline_size =
3670                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3671                if inlined != (member_inline_size <= 4) {
3672                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3673                }
3674                let inner_offset;
3675                let mut inner_depth = depth.clone();
3676                if inlined {
3677                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3678                    inner_offset = next_offset;
3679                } else {
3680                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3681                    inner_depth.increment()?;
3682                }
3683                let val_ref = self.driver_ptr.get_or_insert_with(|| fidl::new_empty!(u64, D));
3684                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3685                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3686                {
3687                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3688                }
3689                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3690                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3691                }
3692            }
3693
3694            next_offset += envelope_size;
3695            _next_ordinal_to_read += 1;
3696            if next_offset >= end_offset {
3697                return Ok(());
3698            }
3699
3700            // Decode unknown envelopes for gaps in ordinals.
3701            while _next_ordinal_to_read < 7 {
3702                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3703                _next_ordinal_to_read += 1;
3704                next_offset += envelope_size;
3705            }
3706
3707            let next_out_of_line = decoder.next_out_of_line();
3708            let handles_before = decoder.remaining_handles();
3709            if let Some((inlined, num_bytes, num_handles)) =
3710                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3711            {
3712                let member_inline_size =
3713                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3714                if inlined != (member_inline_size <= 4) {
3715                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3716                }
3717                let inner_offset;
3718                let mut inner_depth = depth.clone();
3719                if inlined {
3720                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3721                    inner_offset = next_offset;
3722                } else {
3723                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3724                    inner_depth.increment()?;
3725                }
3726                let val_ref = self.synchronized.get_or_insert_with(|| fidl::new_empty!(bool, D));
3727                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3728                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3729                {
3730                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3731                }
3732                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3733                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3734                }
3735            }
3736
3737            next_offset += envelope_size;
3738            _next_ordinal_to_read += 1;
3739            if next_offset >= end_offset {
3740                return Ok(());
3741            }
3742
3743            // Decode unknown envelopes for gaps in ordinals.
3744            while _next_ordinal_to_read < 8 {
3745                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3746                _next_ordinal_to_read += 1;
3747                next_offset += envelope_size;
3748            }
3749
3750            let next_out_of_line = decoder.next_out_of_line();
3751            let handles_before = decoder.remaining_handles();
3752            if let Some((inlined, num_bytes, num_handles)) =
3753                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3754            {
3755                let member_inline_size =
3756                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3757                if inlined != (member_inline_size <= 4) {
3758                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3759                }
3760                let inner_offset;
3761                let mut inner_depth = depth.clone();
3762                if inlined {
3763                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3764                    inner_offset = next_offset;
3765                } else {
3766                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3767                    inner_depth.increment()?;
3768                }
3769                let val_ref =
3770                    self.allow_sync_calls.get_or_insert_with(|| fidl::new_empty!(bool, D));
3771                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3772                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3773                {
3774                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3775                }
3776                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3777                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3778                }
3779            }
3780
3781            next_offset += envelope_size;
3782            _next_ordinal_to_read += 1;
3783            if next_offset >= end_offset {
3784                return Ok(());
3785            }
3786
3787            // Decode unknown envelopes for gaps in ordinals.
3788            while _next_ordinal_to_read < 9 {
3789                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3790                _next_ordinal_to_read += 1;
3791                next_offset += envelope_size;
3792            }
3793
3794            let next_out_of_line = decoder.next_out_of_line();
3795            let handles_before = decoder.remaining_handles();
3796            if let Some((inlined, num_bytes, num_handles)) =
3797                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3798            {
3799                let member_inline_size =
3800                    <DispatcherState as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3801                if inlined != (member_inline_size <= 4) {
3802                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3803                }
3804                let inner_offset;
3805                let mut inner_depth = depth.clone();
3806                if inlined {
3807                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3808                    inner_offset = next_offset;
3809                } else {
3810                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3811                    inner_depth.increment()?;
3812                }
3813                let val_ref =
3814                    self.state.get_or_insert_with(|| fidl::new_empty!(DispatcherState, D));
3815                fidl::decode!(DispatcherState, D, val_ref, decoder, inner_offset, inner_depth)?;
3816                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3817                {
3818                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3819                }
3820                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3821                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3822                }
3823            }
3824
3825            next_offset += envelope_size;
3826            _next_ordinal_to_read += 1;
3827            if next_offset >= end_offset {
3828                return Ok(());
3829            }
3830
3831            // Decode unknown envelopes for gaps in ordinals.
3832            while _next_ordinal_to_read < 10 {
3833                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3834                _next_ordinal_to_read += 1;
3835                next_offset += envelope_size;
3836            }
3837
3838            let next_out_of_line = decoder.next_out_of_line();
3839            let handles_before = decoder.remaining_handles();
3840            if let Some((inlined, num_bytes, num_handles)) =
3841                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3842            {
3843                let member_inline_size =
3844                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3845                        decoder.context,
3846                    );
3847                if inlined != (member_inline_size <= 4) {
3848                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3849                }
3850                let inner_offset;
3851                let mut inner_depth = depth.clone();
3852                if inlined {
3853                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3854                    inner_offset = next_offset;
3855                } else {
3856                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3857                    inner_depth.increment()?;
3858                }
3859                let val_ref = self
3860                    .destroy_context
3861                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3862                fidl::decode!(
3863                    fidl::encoding::UnboundedString,
3864                    D,
3865                    val_ref,
3866                    decoder,
3867                    inner_offset,
3868                    inner_depth
3869                )?;
3870                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3871                {
3872                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3873                }
3874                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3875                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3876                }
3877            }
3878
3879            next_offset += envelope_size;
3880            _next_ordinal_to_read += 1;
3881            if next_offset >= end_offset {
3882                return Ok(());
3883            }
3884
3885            // Decode unknown envelopes for gaps in ordinals.
3886            while _next_ordinal_to_read < 11 {
3887                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3888                _next_ordinal_to_read += 1;
3889                next_offset += envelope_size;
3890            }
3891
3892            let next_out_of_line = decoder.next_out_of_line();
3893            let handles_before = decoder.remaining_handles();
3894            if let Some((inlined, num_bytes, num_handles)) =
3895                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3896            {
3897                let member_inline_size =
3898                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3899                if inlined != (member_inline_size <= 4) {
3900                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3901                }
3902                let inner_offset;
3903                let mut inner_depth = depth.clone();
3904                if inlined {
3905                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3906                    inner_offset = next_offset;
3907                } else {
3908                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3909                    inner_depth.increment()?;
3910                }
3911                let val_ref =
3912                    self.destroy_user_initiated.get_or_insert_with(|| fidl::new_empty!(bool, D));
3913                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
3914                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3915                {
3916                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3917                }
3918                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3919                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3920                }
3921            }
3922
3923            next_offset += envelope_size;
3924            _next_ordinal_to_read += 1;
3925            if next_offset >= end_offset {
3926                return Ok(());
3927            }
3928
3929            // Decode unknown envelopes for gaps in ordinals.
3930            while _next_ordinal_to_read < 12 {
3931                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3932                _next_ordinal_to_read += 1;
3933                next_offset += envelope_size;
3934            }
3935
3936            let next_out_of_line = decoder.next_out_of_line();
3937            let handles_before = decoder.remaining_handles();
3938            if let Some((inlined, num_bytes, num_handles)) =
3939                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3940            {
3941                let member_inline_size =
3942                    <DispatcherDebugStats as fidl::encoding::TypeMarker>::inline_size(
3943                        decoder.context,
3944                    );
3945                if inlined != (member_inline_size <= 4) {
3946                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3947                }
3948                let inner_offset;
3949                let mut inner_depth = depth.clone();
3950                if inlined {
3951                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3952                    inner_offset = next_offset;
3953                } else {
3954                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3955                    inner_depth.increment()?;
3956                }
3957                let val_ref = self
3958                    .debug_stats
3959                    .get_or_insert_with(|| fidl::new_empty!(DispatcherDebugStats, D));
3960                fidl::decode!(
3961                    DispatcherDebugStats,
3962                    D,
3963                    val_ref,
3964                    decoder,
3965                    inner_offset,
3966                    inner_depth
3967                )?;
3968                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3969                {
3970                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3971                }
3972                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3973                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3974                }
3975            }
3976
3977            next_offset += envelope_size;
3978            _next_ordinal_to_read += 1;
3979            if next_offset >= end_offset {
3980                return Ok(());
3981            }
3982
3983            // Decode unknown envelopes for gaps in ordinals.
3984            while _next_ordinal_to_read < 13 {
3985                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3986                _next_ordinal_to_read += 1;
3987                next_offset += envelope_size;
3988            }
3989
3990            let next_out_of_line = decoder.next_out_of_line();
3991            let handles_before = decoder.remaining_handles();
3992            if let Some((inlined, num_bytes, num_handles)) =
3993                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3994            {
3995                let member_inline_size = <fidl::encoding::UnboundedVector<QueuedTaskInfo> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3996                if inlined != (member_inline_size <= 4) {
3997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3998                }
3999                let inner_offset;
4000                let mut inner_depth = depth.clone();
4001                if inlined {
4002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4003                    inner_offset = next_offset;
4004                } else {
4005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4006                    inner_depth.increment()?;
4007                }
4008                let val_ref = self.queued_tasks.get_or_insert_with(|| {
4009                    fidl::new_empty!(fidl::encoding::UnboundedVector<QueuedTaskInfo>, D)
4010                });
4011                fidl::decode!(
4012                    fidl::encoding::UnboundedVector<QueuedTaskInfo>,
4013                    D,
4014                    val_ref,
4015                    decoder,
4016                    inner_offset,
4017                    inner_depth
4018                )?;
4019                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4020                {
4021                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4022                }
4023                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4024                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4025                }
4026            }
4027
4028            next_offset += envelope_size;
4029            _next_ordinal_to_read += 1;
4030            if next_offset >= end_offset {
4031                return Ok(());
4032            }
4033
4034            // Decode unknown envelopes for gaps in ordinals.
4035            while _next_ordinal_to_read < 14 {
4036                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4037                _next_ordinal_to_read += 1;
4038                next_offset += envelope_size;
4039            }
4040
4041            let next_out_of_line = decoder.next_out_of_line();
4042            let handles_before = decoder.remaining_handles();
4043            if let Some((inlined, num_bytes, num_handles)) =
4044                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4045            {
4046                let member_inline_size =
4047                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4048                if inlined != (member_inline_size <= 4) {
4049                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4050                }
4051                let inner_offset;
4052                let mut inner_depth = depth.clone();
4053                if inlined {
4054                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4055                    inner_offset = next_offset;
4056                } else {
4057                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4058                    inner_depth.increment()?;
4059                }
4060                let val_ref = self.num_queued_tasks.get_or_insert_with(|| fidl::new_empty!(u64, D));
4061                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4062                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4063                {
4064                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4065                }
4066                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4067                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4068                }
4069            }
4070
4071            next_offset += envelope_size;
4072
4073            // Decode the remaining unknown envelopes.
4074            while next_offset < end_offset {
4075                _next_ordinal_to_read += 1;
4076                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4077                next_offset += envelope_size;
4078            }
4079
4080            Ok(())
4081        }
4082    }
4083
4084    impl DriverHostInfo {
4085        #[inline(always)]
4086        fn max_ordinal_present(&self) -> u64 {
4087            if let Some(_) = self.name {
4088                return 5;
4089            }
4090            if let Some(_) = self.dispatchers {
4091                return 4;
4092            }
4093            if let Some(_) = self.drivers {
4094                return 3;
4095            }
4096            if let Some(_) = self.threads {
4097                return 2;
4098            }
4099            if let Some(_) = self.process_koid {
4100                return 1;
4101            }
4102            0
4103        }
4104    }
4105
4106    impl fidl::encoding::ValueTypeMarker for DriverHostInfo {
4107        type Borrowed<'a> = &'a Self;
4108        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4109            value
4110        }
4111    }
4112
4113    unsafe impl fidl::encoding::TypeMarker for DriverHostInfo {
4114        type Owned = Self;
4115
4116        #[inline(always)]
4117        fn inline_align(_context: fidl::encoding::Context) -> usize {
4118            8
4119        }
4120
4121        #[inline(always)]
4122        fn inline_size(_context: fidl::encoding::Context) -> usize {
4123            16
4124        }
4125    }
4126
4127    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DriverHostInfo, D>
4128        for &DriverHostInfo
4129    {
4130        unsafe fn encode(
4131            self,
4132            encoder: &mut fidl::encoding::Encoder<'_, D>,
4133            offset: usize,
4134            mut depth: fidl::encoding::Depth,
4135        ) -> fidl::Result<()> {
4136            encoder.debug_check_bounds::<DriverHostInfo>(offset);
4137            // Vector header
4138            let max_ordinal: u64 = self.max_ordinal_present();
4139            encoder.write_num(max_ordinal, offset);
4140            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4141            // Calling encoder.out_of_line_offset(0) is not allowed.
4142            if max_ordinal == 0 {
4143                return Ok(());
4144            }
4145            depth.increment()?;
4146            let envelope_size = 8;
4147            let bytes_len = max_ordinal as usize * envelope_size;
4148            #[allow(unused_variables)]
4149            let offset = encoder.out_of_line_offset(bytes_len);
4150            let mut _prev_end_offset: usize = 0;
4151            if 1 > max_ordinal {
4152                return Ok(());
4153            }
4154
4155            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4156            // are envelope_size bytes.
4157            let cur_offset: usize = (1 - 1) * envelope_size;
4158
4159            // Zero reserved fields.
4160            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4161
4162            // Safety:
4163            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4164            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4165            //   envelope_size bytes, there is always sufficient room.
4166            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4167                self.process_koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4168                encoder,
4169                offset + cur_offset,
4170                depth,
4171            )?;
4172
4173            _prev_end_offset = cur_offset + envelope_size;
4174            if 2 > max_ordinal {
4175                return Ok(());
4176            }
4177
4178            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4179            // are envelope_size bytes.
4180            let cur_offset: usize = (2 - 1) * envelope_size;
4181
4182            // Zero reserved fields.
4183            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4184
4185            // Safety:
4186            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4187            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4188            //   envelope_size bytes, there is always sufficient room.
4189            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ThreadInfo>, D>(
4190            self.threads.as_ref().map(<fidl::encoding::UnboundedVector<ThreadInfo> as fidl::encoding::ValueTypeMarker>::borrow),
4191            encoder, offset + cur_offset, depth
4192        )?;
4193
4194            _prev_end_offset = cur_offset + envelope_size;
4195            if 3 > max_ordinal {
4196                return Ok(());
4197            }
4198
4199            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4200            // are envelope_size bytes.
4201            let cur_offset: usize = (3 - 1) * envelope_size;
4202
4203            // Zero reserved fields.
4204            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4205
4206            // Safety:
4207            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4208            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4209            //   envelope_size bytes, there is always sufficient room.
4210            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>>, D>(
4211            self.drivers.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>> as fidl::encoding::ValueTypeMarker>::borrow),
4212            encoder, offset + cur_offset, depth
4213        )?;
4214
4215            _prev_end_offset = cur_offset + envelope_size;
4216            if 4 > max_ordinal {
4217                return Ok(());
4218            }
4219
4220            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4221            // are envelope_size bytes.
4222            let cur_offset: usize = (4 - 1) * envelope_size;
4223
4224            // Zero reserved fields.
4225            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4226
4227            // Safety:
4228            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4229            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4230            //   envelope_size bytes, there is always sufficient room.
4231            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DispatcherInfo>, D>(
4232            self.dispatchers.as_ref().map(<fidl::encoding::UnboundedVector<DispatcherInfo> as fidl::encoding::ValueTypeMarker>::borrow),
4233            encoder, offset + cur_offset, depth
4234        )?;
4235
4236            _prev_end_offset = cur_offset + envelope_size;
4237            if 5 > max_ordinal {
4238                return Ok(());
4239            }
4240
4241            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4242            // are envelope_size bytes.
4243            let cur_offset: usize = (5 - 1) * envelope_size;
4244
4245            // Zero reserved fields.
4246            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4247
4248            // Safety:
4249            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4250            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4251            //   envelope_size bytes, there is always sufficient room.
4252            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4253                self.name.as_ref().map(
4254                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4255                ),
4256                encoder,
4257                offset + cur_offset,
4258                depth,
4259            )?;
4260
4261            _prev_end_offset = cur_offset + envelope_size;
4262
4263            Ok(())
4264        }
4265    }
4266
4267    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverHostInfo {
4268        #[inline(always)]
4269        fn new_empty() -> Self {
4270            Self::default()
4271        }
4272
4273        unsafe fn decode(
4274            &mut self,
4275            decoder: &mut fidl::encoding::Decoder<'_, D>,
4276            offset: usize,
4277            mut depth: fidl::encoding::Depth,
4278        ) -> fidl::Result<()> {
4279            decoder.debug_check_bounds::<Self>(offset);
4280            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4281                None => return Err(fidl::Error::NotNullable),
4282                Some(len) => len,
4283            };
4284            // Calling decoder.out_of_line_offset(0) is not allowed.
4285            if len == 0 {
4286                return Ok(());
4287            };
4288            depth.increment()?;
4289            let envelope_size = 8;
4290            let bytes_len = len * envelope_size;
4291            let offset = decoder.out_of_line_offset(bytes_len)?;
4292            // Decode the envelope for each type.
4293            let mut _next_ordinal_to_read = 0;
4294            let mut next_offset = offset;
4295            let end_offset = offset + bytes_len;
4296            _next_ordinal_to_read += 1;
4297            if next_offset >= end_offset {
4298                return Ok(());
4299            }
4300
4301            // Decode unknown envelopes for gaps in ordinals.
4302            while _next_ordinal_to_read < 1 {
4303                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4304                _next_ordinal_to_read += 1;
4305                next_offset += envelope_size;
4306            }
4307
4308            let next_out_of_line = decoder.next_out_of_line();
4309            let handles_before = decoder.remaining_handles();
4310            if let Some((inlined, num_bytes, num_handles)) =
4311                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4312            {
4313                let member_inline_size =
4314                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4315                if inlined != (member_inline_size <= 4) {
4316                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4317                }
4318                let inner_offset;
4319                let mut inner_depth = depth.clone();
4320                if inlined {
4321                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4322                    inner_offset = next_offset;
4323                } else {
4324                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4325                    inner_depth.increment()?;
4326                }
4327                let val_ref = self.process_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
4328                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4330                {
4331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4332                }
4333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4335                }
4336            }
4337
4338            next_offset += envelope_size;
4339            _next_ordinal_to_read += 1;
4340            if next_offset >= end_offset {
4341                return Ok(());
4342            }
4343
4344            // Decode unknown envelopes for gaps in ordinals.
4345            while _next_ordinal_to_read < 2 {
4346                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4347                _next_ordinal_to_read += 1;
4348                next_offset += envelope_size;
4349            }
4350
4351            let next_out_of_line = decoder.next_out_of_line();
4352            let handles_before = decoder.remaining_handles();
4353            if let Some((inlined, num_bytes, num_handles)) =
4354                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4355            {
4356                let member_inline_size = <fidl::encoding::UnboundedVector<ThreadInfo> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4357                if inlined != (member_inline_size <= 4) {
4358                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4359                }
4360                let inner_offset;
4361                let mut inner_depth = depth.clone();
4362                if inlined {
4363                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4364                    inner_offset = next_offset;
4365                } else {
4366                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4367                    inner_depth.increment()?;
4368                }
4369                let val_ref = self.threads.get_or_insert_with(|| {
4370                    fidl::new_empty!(fidl::encoding::UnboundedVector<ThreadInfo>, D)
4371                });
4372                fidl::decode!(
4373                    fidl::encoding::UnboundedVector<ThreadInfo>,
4374                    D,
4375                    val_ref,
4376                    decoder,
4377                    inner_offset,
4378                    inner_depth
4379                )?;
4380                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4381                {
4382                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4383                }
4384                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4385                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4386                }
4387            }
4388
4389            next_offset += envelope_size;
4390            _next_ordinal_to_read += 1;
4391            if next_offset >= end_offset {
4392                return Ok(());
4393            }
4394
4395            // Decode unknown envelopes for gaps in ordinals.
4396            while _next_ordinal_to_read < 3 {
4397                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4398                _next_ordinal_to_read += 1;
4399                next_offset += envelope_size;
4400            }
4401
4402            let next_out_of_line = decoder.next_out_of_line();
4403            let handles_before = decoder.remaining_handles();
4404            if let Some((inlined, num_bytes, num_handles)) =
4405                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4406            {
4407                let member_inline_size = <fidl::encoding::UnboundedVector<
4408                    fidl::encoding::BoundedString<4096>,
4409                > as fidl::encoding::TypeMarker>::inline_size(
4410                    decoder.context
4411                );
4412                if inlined != (member_inline_size <= 4) {
4413                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4414                }
4415                let inner_offset;
4416                let mut inner_depth = depth.clone();
4417                if inlined {
4418                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4419                    inner_offset = next_offset;
4420                } else {
4421                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4422                    inner_depth.increment()?;
4423                }
4424                let val_ref = self.drivers.get_or_insert_with(|| {
4425                    fidl::new_empty!(
4426                        fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>>,
4427                        D
4428                    )
4429                });
4430                fidl::decode!(
4431                    fidl::encoding::UnboundedVector<fidl::encoding::BoundedString<4096>>,
4432                    D,
4433                    val_ref,
4434                    decoder,
4435                    inner_offset,
4436                    inner_depth
4437                )?;
4438                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4439                {
4440                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4441                }
4442                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4443                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4444                }
4445            }
4446
4447            next_offset += envelope_size;
4448            _next_ordinal_to_read += 1;
4449            if next_offset >= end_offset {
4450                return Ok(());
4451            }
4452
4453            // Decode unknown envelopes for gaps in ordinals.
4454            while _next_ordinal_to_read < 4 {
4455                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4456                _next_ordinal_to_read += 1;
4457                next_offset += envelope_size;
4458            }
4459
4460            let next_out_of_line = decoder.next_out_of_line();
4461            let handles_before = decoder.remaining_handles();
4462            if let Some((inlined, num_bytes, num_handles)) =
4463                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4464            {
4465                let member_inline_size = <fidl::encoding::UnboundedVector<DispatcherInfo> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4466                if inlined != (member_inline_size <= 4) {
4467                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4468                }
4469                let inner_offset;
4470                let mut inner_depth = depth.clone();
4471                if inlined {
4472                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4473                    inner_offset = next_offset;
4474                } else {
4475                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4476                    inner_depth.increment()?;
4477                }
4478                let val_ref = self.dispatchers.get_or_insert_with(|| {
4479                    fidl::new_empty!(fidl::encoding::UnboundedVector<DispatcherInfo>, D)
4480                });
4481                fidl::decode!(
4482                    fidl::encoding::UnboundedVector<DispatcherInfo>,
4483                    D,
4484                    val_ref,
4485                    decoder,
4486                    inner_offset,
4487                    inner_depth
4488                )?;
4489                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4490                {
4491                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4492                }
4493                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4494                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4495                }
4496            }
4497
4498            next_offset += envelope_size;
4499            _next_ordinal_to_read += 1;
4500            if next_offset >= end_offset {
4501                return Ok(());
4502            }
4503
4504            // Decode unknown envelopes for gaps in ordinals.
4505            while _next_ordinal_to_read < 5 {
4506                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4507                _next_ordinal_to_read += 1;
4508                next_offset += envelope_size;
4509            }
4510
4511            let next_out_of_line = decoder.next_out_of_line();
4512            let handles_before = decoder.remaining_handles();
4513            if let Some((inlined, num_bytes, num_handles)) =
4514                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4515            {
4516                let member_inline_size =
4517                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4518                        decoder.context,
4519                    );
4520                if inlined != (member_inline_size <= 4) {
4521                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4522                }
4523                let inner_offset;
4524                let mut inner_depth = depth.clone();
4525                if inlined {
4526                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4527                    inner_offset = next_offset;
4528                } else {
4529                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4530                    inner_depth.increment()?;
4531                }
4532                let val_ref = self
4533                    .name
4534                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4535                fidl::decode!(
4536                    fidl::encoding::UnboundedString,
4537                    D,
4538                    val_ref,
4539                    decoder,
4540                    inner_offset,
4541                    inner_depth
4542                )?;
4543                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4544                {
4545                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4546                }
4547                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4548                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4549                }
4550            }
4551
4552            next_offset += envelope_size;
4553
4554            // Decode the remaining unknown envelopes.
4555            while next_offset < end_offset {
4556                _next_ordinal_to_read += 1;
4557                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4558                next_offset += envelope_size;
4559            }
4560
4561            Ok(())
4562        }
4563    }
4564
4565    impl NodeBindingInfo {
4566        #[inline(always)]
4567        fn max_ordinal_present(&self) -> u64 {
4568            if let Some(_) = self.composite_parents {
4569                return 3;
4570            }
4571            if let Some(_) = self.driver_url {
4572                return 2;
4573            }
4574            if let Some(_) = self.node_name {
4575                return 1;
4576            }
4577            0
4578        }
4579    }
4580
4581    impl fidl::encoding::ValueTypeMarker for NodeBindingInfo {
4582        type Borrowed<'a> = &'a Self;
4583        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4584            value
4585        }
4586    }
4587
4588    unsafe impl fidl::encoding::TypeMarker for NodeBindingInfo {
4589        type Owned = Self;
4590
4591        #[inline(always)]
4592        fn inline_align(_context: fidl::encoding::Context) -> usize {
4593            8
4594        }
4595
4596        #[inline(always)]
4597        fn inline_size(_context: fidl::encoding::Context) -> usize {
4598            16
4599        }
4600    }
4601
4602    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeBindingInfo, D>
4603        for &NodeBindingInfo
4604    {
4605        unsafe fn encode(
4606            self,
4607            encoder: &mut fidl::encoding::Encoder<'_, D>,
4608            offset: usize,
4609            mut depth: fidl::encoding::Depth,
4610        ) -> fidl::Result<()> {
4611            encoder.debug_check_bounds::<NodeBindingInfo>(offset);
4612            // Vector header
4613            let max_ordinal: u64 = self.max_ordinal_present();
4614            encoder.write_num(max_ordinal, offset);
4615            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4616            // Calling encoder.out_of_line_offset(0) is not allowed.
4617            if max_ordinal == 0 {
4618                return Ok(());
4619            }
4620            depth.increment()?;
4621            let envelope_size = 8;
4622            let bytes_len = max_ordinal as usize * envelope_size;
4623            #[allow(unused_variables)]
4624            let offset = encoder.out_of_line_offset(bytes_len);
4625            let mut _prev_end_offset: usize = 0;
4626            if 1 > max_ordinal {
4627                return Ok(());
4628            }
4629
4630            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4631            // are envelope_size bytes.
4632            let cur_offset: usize = (1 - 1) * envelope_size;
4633
4634            // Zero reserved fields.
4635            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4636
4637            // Safety:
4638            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4639            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4640            //   envelope_size bytes, there is always sufficient room.
4641            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
4642            self.node_name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
4643            encoder, offset + cur_offset, depth
4644        )?;
4645
4646            _prev_end_offset = cur_offset + envelope_size;
4647            if 2 > max_ordinal {
4648                return Ok(());
4649            }
4650
4651            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4652            // are envelope_size bytes.
4653            let cur_offset: usize = (2 - 1) * envelope_size;
4654
4655            // Zero reserved fields.
4656            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4657
4658            // Safety:
4659            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4660            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4661            //   envelope_size bytes, there is always sufficient room.
4662            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
4663            self.driver_url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
4664            encoder, offset + cur_offset, depth
4665        )?;
4666
4667            _prev_end_offset = cur_offset + envelope_size;
4668            if 3 > max_ordinal {
4669                return Ok(());
4670            }
4671
4672            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4673            // are envelope_size bytes.
4674            let cur_offset: usize = (3 - 1) * envelope_size;
4675
4676            // Zero reserved fields.
4677            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4678
4679            // Safety:
4680            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4681            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4682            //   envelope_size bytes, there is always sufficient room.
4683            fidl::encoding::encode_in_envelope_optional::<
4684                fidl::encoding::UnboundedVector<
4685                    fidl_fuchsia_driver_framework_common::CompositeParent,
4686                >,
4687                D,
4688            >(
4689                self.composite_parents.as_ref().map(
4690                    <fidl::encoding::UnboundedVector<
4691                        fidl_fuchsia_driver_framework_common::CompositeParent,
4692                    > as fidl::encoding::ValueTypeMarker>::borrow,
4693                ),
4694                encoder,
4695                offset + cur_offset,
4696                depth,
4697            )?;
4698
4699            _prev_end_offset = cur_offset + envelope_size;
4700
4701            Ok(())
4702        }
4703    }
4704
4705    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeBindingInfo {
4706        #[inline(always)]
4707        fn new_empty() -> Self {
4708            Self::default()
4709        }
4710
4711        unsafe fn decode(
4712            &mut self,
4713            decoder: &mut fidl::encoding::Decoder<'_, D>,
4714            offset: usize,
4715            mut depth: fidl::encoding::Depth,
4716        ) -> fidl::Result<()> {
4717            decoder.debug_check_bounds::<Self>(offset);
4718            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4719                None => return Err(fidl::Error::NotNullable),
4720                Some(len) => len,
4721            };
4722            // Calling decoder.out_of_line_offset(0) is not allowed.
4723            if len == 0 {
4724                return Ok(());
4725            };
4726            depth.increment()?;
4727            let envelope_size = 8;
4728            let bytes_len = len * envelope_size;
4729            let offset = decoder.out_of_line_offset(bytes_len)?;
4730            // Decode the envelope for each type.
4731            let mut _next_ordinal_to_read = 0;
4732            let mut next_offset = offset;
4733            let end_offset = offset + bytes_len;
4734            _next_ordinal_to_read += 1;
4735            if next_offset >= end_offset {
4736                return Ok(());
4737            }
4738
4739            // Decode unknown envelopes for gaps in ordinals.
4740            while _next_ordinal_to_read < 1 {
4741                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4742                _next_ordinal_to_read += 1;
4743                next_offset += envelope_size;
4744            }
4745
4746            let next_out_of_line = decoder.next_out_of_line();
4747            let handles_before = decoder.remaining_handles();
4748            if let Some((inlined, num_bytes, num_handles)) =
4749                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4750            {
4751                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4752                if inlined != (member_inline_size <= 4) {
4753                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4754                }
4755                let inner_offset;
4756                let mut inner_depth = depth.clone();
4757                if inlined {
4758                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4759                    inner_offset = next_offset;
4760                } else {
4761                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4762                    inner_depth.increment()?;
4763                }
4764                let val_ref = self.node_name.get_or_insert_with(|| {
4765                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
4766                });
4767                fidl::decode!(
4768                    fidl::encoding::BoundedString<1024>,
4769                    D,
4770                    val_ref,
4771                    decoder,
4772                    inner_offset,
4773                    inner_depth
4774                )?;
4775                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4776                {
4777                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4778                }
4779                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4780                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4781                }
4782            }
4783
4784            next_offset += envelope_size;
4785            _next_ordinal_to_read += 1;
4786            if next_offset >= end_offset {
4787                return Ok(());
4788            }
4789
4790            // Decode unknown envelopes for gaps in ordinals.
4791            while _next_ordinal_to_read < 2 {
4792                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4793                _next_ordinal_to_read += 1;
4794                next_offset += envelope_size;
4795            }
4796
4797            let next_out_of_line = decoder.next_out_of_line();
4798            let handles_before = decoder.remaining_handles();
4799            if let Some((inlined, num_bytes, num_handles)) =
4800                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4801            {
4802                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4803                if inlined != (member_inline_size <= 4) {
4804                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4805                }
4806                let inner_offset;
4807                let mut inner_depth = depth.clone();
4808                if inlined {
4809                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4810                    inner_offset = next_offset;
4811                } else {
4812                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4813                    inner_depth.increment()?;
4814                }
4815                let val_ref = self.driver_url.get_or_insert_with(|| {
4816                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
4817                });
4818                fidl::decode!(
4819                    fidl::encoding::BoundedString<4096>,
4820                    D,
4821                    val_ref,
4822                    decoder,
4823                    inner_offset,
4824                    inner_depth
4825                )?;
4826                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4827                {
4828                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4829                }
4830                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4831                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4832                }
4833            }
4834
4835            next_offset += envelope_size;
4836            _next_ordinal_to_read += 1;
4837            if next_offset >= end_offset {
4838                return Ok(());
4839            }
4840
4841            // Decode unknown envelopes for gaps in ordinals.
4842            while _next_ordinal_to_read < 3 {
4843                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4844                _next_ordinal_to_read += 1;
4845                next_offset += envelope_size;
4846            }
4847
4848            let next_out_of_line = decoder.next_out_of_line();
4849            let handles_before = decoder.remaining_handles();
4850            if let Some((inlined, num_bytes, num_handles)) =
4851                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4852            {
4853                let member_inline_size = <fidl::encoding::UnboundedVector<
4854                    fidl_fuchsia_driver_framework_common::CompositeParent,
4855                > as fidl::encoding::TypeMarker>::inline_size(
4856                    decoder.context
4857                );
4858                if inlined != (member_inline_size <= 4) {
4859                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4860                }
4861                let inner_offset;
4862                let mut inner_depth = depth.clone();
4863                if inlined {
4864                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4865                    inner_offset = next_offset;
4866                } else {
4867                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4868                    inner_depth.increment()?;
4869                }
4870                let val_ref = self.composite_parents.get_or_insert_with(|| {
4871                    fidl::new_empty!(
4872                        fidl::encoding::UnboundedVector<
4873                            fidl_fuchsia_driver_framework_common::CompositeParent,
4874                        >,
4875                        D
4876                    )
4877                });
4878                fidl::decode!(
4879                    fidl::encoding::UnboundedVector<
4880                        fidl_fuchsia_driver_framework_common::CompositeParent,
4881                    >,
4882                    D,
4883                    val_ref,
4884                    decoder,
4885                    inner_offset,
4886                    inner_depth
4887                )?;
4888                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4889                {
4890                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4891                }
4892                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4893                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4894                }
4895            }
4896
4897            next_offset += envelope_size;
4898
4899            // Decode the remaining unknown envelopes.
4900            while next_offset < end_offset {
4901                _next_ordinal_to_read += 1;
4902                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4903                next_offset += envelope_size;
4904            }
4905
4906            Ok(())
4907        }
4908    }
4909
4910    impl NodeInfo {
4911        #[inline(always)]
4912        fn max_ordinal_present(&self) -> u64 {
4913            if let Some(_) = self.topological_path {
4914                return 12;
4915            }
4916            if let Some(_) = self.bus_topology {
4917                return 11;
4918            }
4919            if let Some(_) = self.quarantined {
4920                return 10;
4921            }
4922            if let Some(_) = self.offer_list {
4923                return 9;
4924            }
4925            if let Some(_) = self.node_property_list {
4926                return 8;
4927            }
4928            if let Some(_) = self.moniker {
4929                return 7;
4930            }
4931            if let Some(_) = self.bound_driver_url {
4932                return 5;
4933            }
4934            if let Some(_) = self.driver_host_koid {
4935                return 4;
4936            }
4937            if let Some(_) = self.child_ids {
4938                return 3;
4939            }
4940            if let Some(_) = self.parent_ids {
4941                return 2;
4942            }
4943            if let Some(_) = self.id {
4944                return 1;
4945            }
4946            0
4947        }
4948    }
4949
4950    impl fidl::encoding::ValueTypeMarker for NodeInfo {
4951        type Borrowed<'a> = &'a Self;
4952        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4953            value
4954        }
4955    }
4956
4957    unsafe impl fidl::encoding::TypeMarker for NodeInfo {
4958        type Owned = Self;
4959
4960        #[inline(always)]
4961        fn inline_align(_context: fidl::encoding::Context) -> usize {
4962            8
4963        }
4964
4965        #[inline(always)]
4966        fn inline_size(_context: fidl::encoding::Context) -> usize {
4967            16
4968        }
4969    }
4970
4971    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeInfo, D> for &NodeInfo {
4972        unsafe fn encode(
4973            self,
4974            encoder: &mut fidl::encoding::Encoder<'_, D>,
4975            offset: usize,
4976            mut depth: fidl::encoding::Depth,
4977        ) -> fidl::Result<()> {
4978            encoder.debug_check_bounds::<NodeInfo>(offset);
4979            // Vector header
4980            let max_ordinal: u64 = self.max_ordinal_present();
4981            encoder.write_num(max_ordinal, offset);
4982            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4983            // Calling encoder.out_of_line_offset(0) is not allowed.
4984            if max_ordinal == 0 {
4985                return Ok(());
4986            }
4987            depth.increment()?;
4988            let envelope_size = 8;
4989            let bytes_len = max_ordinal as usize * envelope_size;
4990            #[allow(unused_variables)]
4991            let offset = encoder.out_of_line_offset(bytes_len);
4992            let mut _prev_end_offset: usize = 0;
4993            if 1 > max_ordinal {
4994                return Ok(());
4995            }
4996
4997            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4998            // are envelope_size bytes.
4999            let cur_offset: usize = (1 - 1) * envelope_size;
5000
5001            // Zero reserved fields.
5002            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5003
5004            // Safety:
5005            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5006            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5007            //   envelope_size bytes, there is always sufficient room.
5008            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5009                self.id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5010                encoder,
5011                offset + cur_offset,
5012                depth,
5013            )?;
5014
5015            _prev_end_offset = cur_offset + envelope_size;
5016            if 2 > max_ordinal {
5017                return Ok(());
5018            }
5019
5020            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5021            // are envelope_size bytes.
5022            let cur_offset: usize = (2 - 1) * envelope_size;
5023
5024            // Zero reserved fields.
5025            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5026
5027            // Safety:
5028            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5029            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5030            //   envelope_size bytes, there is always sufficient room.
5031            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
5032            self.parent_ids.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
5033            encoder, offset + cur_offset, depth
5034        )?;
5035
5036            _prev_end_offset = cur_offset + envelope_size;
5037            if 3 > max_ordinal {
5038                return Ok(());
5039            }
5040
5041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5042            // are envelope_size bytes.
5043            let cur_offset: usize = (3 - 1) * envelope_size;
5044
5045            // Zero reserved fields.
5046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5047
5048            // Safety:
5049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5051            //   envelope_size bytes, there is always sufficient room.
5052            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
5053            self.child_ids.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
5054            encoder, offset + cur_offset, depth
5055        )?;
5056
5057            _prev_end_offset = cur_offset + envelope_size;
5058            if 4 > max_ordinal {
5059                return Ok(());
5060            }
5061
5062            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5063            // are envelope_size bytes.
5064            let cur_offset: usize = (4 - 1) * envelope_size;
5065
5066            // Zero reserved fields.
5067            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5068
5069            // Safety:
5070            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5071            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5072            //   envelope_size bytes, there is always sufficient room.
5073            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5074                self.driver_host_koid
5075                    .as_ref()
5076                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5077                encoder,
5078                offset + cur_offset,
5079                depth,
5080            )?;
5081
5082            _prev_end_offset = cur_offset + envelope_size;
5083            if 5 > max_ordinal {
5084                return Ok(());
5085            }
5086
5087            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5088            // are envelope_size bytes.
5089            let cur_offset: usize = (5 - 1) * envelope_size;
5090
5091            // Zero reserved fields.
5092            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5093
5094            // Safety:
5095            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5096            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5097            //   envelope_size bytes, there is always sufficient room.
5098            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
5099            self.bound_driver_url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
5100            encoder, offset + cur_offset, depth
5101        )?;
5102
5103            _prev_end_offset = cur_offset + envelope_size;
5104            if 7 > max_ordinal {
5105                return Ok(());
5106            }
5107
5108            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5109            // are envelope_size bytes.
5110            let cur_offset: usize = (7 - 1) * envelope_size;
5111
5112            // Zero reserved fields.
5113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5114
5115            // Safety:
5116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5118            //   envelope_size bytes, there is always sufficient room.
5119            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
5120            self.moniker.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
5121            encoder, offset + cur_offset, depth
5122        )?;
5123
5124            _prev_end_offset = cur_offset + envelope_size;
5125            if 8 > max_ordinal {
5126                return Ok(());
5127            }
5128
5129            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5130            // are envelope_size bytes.
5131            let cur_offset: usize = (8 - 1) * envelope_size;
5132
5133            // Zero reserved fields.
5134            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5135
5136            // Safety:
5137            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5138            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5139            //   envelope_size bytes, there is always sufficient room.
5140            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D>(
5141            self.node_property_list.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
5142            encoder, offset + cur_offset, depth
5143        )?;
5144
5145            _prev_end_offset = cur_offset + envelope_size;
5146            if 9 > max_ordinal {
5147                return Ok(());
5148            }
5149
5150            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5151            // are envelope_size bytes.
5152            let cur_offset: usize = (9 - 1) * envelope_size;
5153
5154            // Zero reserved fields.
5155            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5156
5157            // Safety:
5158            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5159            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5160            //   envelope_size bytes, there is always sufficient room.
5161            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer>, D>(
5162            self.offer_list.as_ref().map(<fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer> as fidl::encoding::ValueTypeMarker>::borrow),
5163            encoder, offset + cur_offset, depth
5164        )?;
5165
5166            _prev_end_offset = cur_offset + envelope_size;
5167            if 10 > max_ordinal {
5168                return Ok(());
5169            }
5170
5171            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5172            // are envelope_size bytes.
5173            let cur_offset: usize = (10 - 1) * envelope_size;
5174
5175            // Zero reserved fields.
5176            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5177
5178            // Safety:
5179            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5180            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5181            //   envelope_size bytes, there is always sufficient room.
5182            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5183                self.quarantined.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5184                encoder,
5185                offset + cur_offset,
5186                depth,
5187            )?;
5188
5189            _prev_end_offset = cur_offset + envelope_size;
5190            if 11 > max_ordinal {
5191                return Ok(());
5192            }
5193
5194            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5195            // are envelope_size bytes.
5196            let cur_offset: usize = (11 - 1) * envelope_size;
5197
5198            // Zero reserved fields.
5199            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5200
5201            // Safety:
5202            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5203            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5204            //   envelope_size bytes, there is always sufficient room.
5205            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20>, D>(
5206            self.bus_topology.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20> as fidl::encoding::ValueTypeMarker>::borrow),
5207            encoder, offset + cur_offset, depth
5208        )?;
5209
5210            _prev_end_offset = cur_offset + envelope_size;
5211            if 12 > max_ordinal {
5212                return Ok(());
5213            }
5214
5215            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5216            // are envelope_size bytes.
5217            let cur_offset: usize = (12 - 1) * envelope_size;
5218
5219            // Zero reserved fields.
5220            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5221
5222            // Safety:
5223            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5224            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5225            //   envelope_size bytes, there is always sufficient room.
5226            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
5227            self.topological_path.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
5228            encoder, offset + cur_offset, depth
5229        )?;
5230
5231            _prev_end_offset = cur_offset + envelope_size;
5232
5233            Ok(())
5234        }
5235    }
5236
5237    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeInfo {
5238        #[inline(always)]
5239        fn new_empty() -> Self {
5240            Self::default()
5241        }
5242
5243        unsafe fn decode(
5244            &mut self,
5245            decoder: &mut fidl::encoding::Decoder<'_, D>,
5246            offset: usize,
5247            mut depth: fidl::encoding::Depth,
5248        ) -> fidl::Result<()> {
5249            decoder.debug_check_bounds::<Self>(offset);
5250            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5251                None => return Err(fidl::Error::NotNullable),
5252                Some(len) => len,
5253            };
5254            // Calling decoder.out_of_line_offset(0) is not allowed.
5255            if len == 0 {
5256                return Ok(());
5257            };
5258            depth.increment()?;
5259            let envelope_size = 8;
5260            let bytes_len = len * envelope_size;
5261            let offset = decoder.out_of_line_offset(bytes_len)?;
5262            // Decode the envelope for each type.
5263            let mut _next_ordinal_to_read = 0;
5264            let mut next_offset = offset;
5265            let end_offset = offset + bytes_len;
5266            _next_ordinal_to_read += 1;
5267            if next_offset >= end_offset {
5268                return Ok(());
5269            }
5270
5271            // Decode unknown envelopes for gaps in ordinals.
5272            while _next_ordinal_to_read < 1 {
5273                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5274                _next_ordinal_to_read += 1;
5275                next_offset += envelope_size;
5276            }
5277
5278            let next_out_of_line = decoder.next_out_of_line();
5279            let handles_before = decoder.remaining_handles();
5280            if let Some((inlined, num_bytes, num_handles)) =
5281                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5282            {
5283                let member_inline_size =
5284                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5285                if inlined != (member_inline_size <= 4) {
5286                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5287                }
5288                let inner_offset;
5289                let mut inner_depth = depth.clone();
5290                if inlined {
5291                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5292                    inner_offset = next_offset;
5293                } else {
5294                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5295                    inner_depth.increment()?;
5296                }
5297                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u64, D));
5298                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5299                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5300                {
5301                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5302                }
5303                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5304                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5305                }
5306            }
5307
5308            next_offset += envelope_size;
5309            _next_ordinal_to_read += 1;
5310            if next_offset >= end_offset {
5311                return Ok(());
5312            }
5313
5314            // Decode unknown envelopes for gaps in ordinals.
5315            while _next_ordinal_to_read < 2 {
5316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5317                _next_ordinal_to_read += 1;
5318                next_offset += envelope_size;
5319            }
5320
5321            let next_out_of_line = decoder.next_out_of_line();
5322            let handles_before = decoder.remaining_handles();
5323            if let Some((inlined, num_bytes, num_handles)) =
5324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5325            {
5326                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5327                if inlined != (member_inline_size <= 4) {
5328                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5329                }
5330                let inner_offset;
5331                let mut inner_depth = depth.clone();
5332                if inlined {
5333                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5334                    inner_offset = next_offset;
5335                } else {
5336                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5337                    inner_depth.increment()?;
5338                }
5339                let val_ref = self.parent_ids.get_or_insert_with(|| {
5340                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
5341                });
5342                fidl::decode!(
5343                    fidl::encoding::UnboundedVector<u64>,
5344                    D,
5345                    val_ref,
5346                    decoder,
5347                    inner_offset,
5348                    inner_depth
5349                )?;
5350                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5351                {
5352                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5353                }
5354                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5355                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5356                }
5357            }
5358
5359            next_offset += envelope_size;
5360            _next_ordinal_to_read += 1;
5361            if next_offset >= end_offset {
5362                return Ok(());
5363            }
5364
5365            // Decode unknown envelopes for gaps in ordinals.
5366            while _next_ordinal_to_read < 3 {
5367                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5368                _next_ordinal_to_read += 1;
5369                next_offset += envelope_size;
5370            }
5371
5372            let next_out_of_line = decoder.next_out_of_line();
5373            let handles_before = decoder.remaining_handles();
5374            if let Some((inlined, num_bytes, num_handles)) =
5375                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5376            {
5377                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5378                if inlined != (member_inline_size <= 4) {
5379                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5380                }
5381                let inner_offset;
5382                let mut inner_depth = depth.clone();
5383                if inlined {
5384                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5385                    inner_offset = next_offset;
5386                } else {
5387                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5388                    inner_depth.increment()?;
5389                }
5390                let val_ref = self.child_ids.get_or_insert_with(|| {
5391                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
5392                });
5393                fidl::decode!(
5394                    fidl::encoding::UnboundedVector<u64>,
5395                    D,
5396                    val_ref,
5397                    decoder,
5398                    inner_offset,
5399                    inner_depth
5400                )?;
5401                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5402                {
5403                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5404                }
5405                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5406                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5407                }
5408            }
5409
5410            next_offset += envelope_size;
5411            _next_ordinal_to_read += 1;
5412            if next_offset >= end_offset {
5413                return Ok(());
5414            }
5415
5416            // Decode unknown envelopes for gaps in ordinals.
5417            while _next_ordinal_to_read < 4 {
5418                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5419                _next_ordinal_to_read += 1;
5420                next_offset += envelope_size;
5421            }
5422
5423            let next_out_of_line = decoder.next_out_of_line();
5424            let handles_before = decoder.remaining_handles();
5425            if let Some((inlined, num_bytes, num_handles)) =
5426                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5427            {
5428                let member_inline_size =
5429                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5430                if inlined != (member_inline_size <= 4) {
5431                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5432                }
5433                let inner_offset;
5434                let mut inner_depth = depth.clone();
5435                if inlined {
5436                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5437                    inner_offset = next_offset;
5438                } else {
5439                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5440                    inner_depth.increment()?;
5441                }
5442                let val_ref = self.driver_host_koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
5443                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5444                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5445                {
5446                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5447                }
5448                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5449                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5450                }
5451            }
5452
5453            next_offset += envelope_size;
5454            _next_ordinal_to_read += 1;
5455            if next_offset >= end_offset {
5456                return Ok(());
5457            }
5458
5459            // Decode unknown envelopes for gaps in ordinals.
5460            while _next_ordinal_to_read < 5 {
5461                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5462                _next_ordinal_to_read += 1;
5463                next_offset += envelope_size;
5464            }
5465
5466            let next_out_of_line = decoder.next_out_of_line();
5467            let handles_before = decoder.remaining_handles();
5468            if let Some((inlined, num_bytes, num_handles)) =
5469                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5470            {
5471                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5472                if inlined != (member_inline_size <= 4) {
5473                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5474                }
5475                let inner_offset;
5476                let mut inner_depth = depth.clone();
5477                if inlined {
5478                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5479                    inner_offset = next_offset;
5480                } else {
5481                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5482                    inner_depth.increment()?;
5483                }
5484                let val_ref = self.bound_driver_url.get_or_insert_with(|| {
5485                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
5486                });
5487                fidl::decode!(
5488                    fidl::encoding::BoundedString<4096>,
5489                    D,
5490                    val_ref,
5491                    decoder,
5492                    inner_offset,
5493                    inner_depth
5494                )?;
5495                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5496                {
5497                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5498                }
5499                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5500                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5501                }
5502            }
5503
5504            next_offset += envelope_size;
5505            _next_ordinal_to_read += 1;
5506            if next_offset >= end_offset {
5507                return Ok(());
5508            }
5509
5510            // Decode unknown envelopes for gaps in ordinals.
5511            while _next_ordinal_to_read < 7 {
5512                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5513                _next_ordinal_to_read += 1;
5514                next_offset += envelope_size;
5515            }
5516
5517            let next_out_of_line = decoder.next_out_of_line();
5518            let handles_before = decoder.remaining_handles();
5519            if let Some((inlined, num_bytes, num_handles)) =
5520                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5521            {
5522                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5523                if inlined != (member_inline_size <= 4) {
5524                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5525                }
5526                let inner_offset;
5527                let mut inner_depth = depth.clone();
5528                if inlined {
5529                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5530                    inner_offset = next_offset;
5531                } else {
5532                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5533                    inner_depth.increment()?;
5534                }
5535                let val_ref = self.moniker.get_or_insert_with(|| {
5536                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
5537                });
5538                fidl::decode!(
5539                    fidl::encoding::BoundedString<1024>,
5540                    D,
5541                    val_ref,
5542                    decoder,
5543                    inner_offset,
5544                    inner_depth
5545                )?;
5546                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5547                {
5548                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5549                }
5550                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5551                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5552                }
5553            }
5554
5555            next_offset += envelope_size;
5556            _next_ordinal_to_read += 1;
5557            if next_offset >= end_offset {
5558                return Ok(());
5559            }
5560
5561            // Decode unknown envelopes for gaps in ordinals.
5562            while _next_ordinal_to_read < 8 {
5563                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5564                _next_ordinal_to_read += 1;
5565                next_offset += envelope_size;
5566            }
5567
5568            let next_out_of_line = decoder.next_out_of_line();
5569            let handles_before = decoder.remaining_handles();
5570            if let Some((inlined, num_bytes, num_handles)) =
5571                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5572            {
5573                let member_inline_size = <fidl::encoding::Vector<
5574                    fidl_fuchsia_driver_framework_common::NodeProperty,
5575                    64,
5576                > as fidl::encoding::TypeMarker>::inline_size(
5577                    decoder.context
5578                );
5579                if inlined != (member_inline_size <= 4) {
5580                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5581                }
5582                let inner_offset;
5583                let mut inner_depth = depth.clone();
5584                if inlined {
5585                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5586                    inner_offset = next_offset;
5587                } else {
5588                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5589                    inner_depth.increment()?;
5590                }
5591                let val_ref =
5592                self.node_property_list.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D));
5593                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
5594                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5595                {
5596                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5597                }
5598                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5599                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5600                }
5601            }
5602
5603            next_offset += envelope_size;
5604            _next_ordinal_to_read += 1;
5605            if next_offset >= end_offset {
5606                return Ok(());
5607            }
5608
5609            // Decode unknown envelopes for gaps in ordinals.
5610            while _next_ordinal_to_read < 9 {
5611                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5612                _next_ordinal_to_read += 1;
5613                next_offset += envelope_size;
5614            }
5615
5616            let next_out_of_line = decoder.next_out_of_line();
5617            let handles_before = decoder.remaining_handles();
5618            if let Some((inlined, num_bytes, num_handles)) =
5619                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5620            {
5621                let member_inline_size = <fidl::encoding::UnboundedVector<
5622                    fidl_fuchsia_component_decl_common::Offer,
5623                > as fidl::encoding::TypeMarker>::inline_size(
5624                    decoder.context
5625                );
5626                if inlined != (member_inline_size <= 4) {
5627                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5628                }
5629                let inner_offset;
5630                let mut inner_depth = depth.clone();
5631                if inlined {
5632                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5633                    inner_offset = next_offset;
5634                } else {
5635                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5636                    inner_depth.increment()?;
5637                }
5638                let val_ref = self.offer_list.get_or_insert_with(|| {
5639                    fidl::new_empty!(
5640                        fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer>,
5641                        D
5642                    )
5643                });
5644                fidl::decode!(
5645                    fidl::encoding::UnboundedVector<fidl_fuchsia_component_decl_common::Offer>,
5646                    D,
5647                    val_ref,
5648                    decoder,
5649                    inner_offset,
5650                    inner_depth
5651                )?;
5652                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5653                {
5654                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5655                }
5656                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5657                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5658                }
5659            }
5660
5661            next_offset += envelope_size;
5662            _next_ordinal_to_read += 1;
5663            if next_offset >= end_offset {
5664                return Ok(());
5665            }
5666
5667            // Decode unknown envelopes for gaps in ordinals.
5668            while _next_ordinal_to_read < 10 {
5669                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5670                _next_ordinal_to_read += 1;
5671                next_offset += envelope_size;
5672            }
5673
5674            let next_out_of_line = decoder.next_out_of_line();
5675            let handles_before = decoder.remaining_handles();
5676            if let Some((inlined, num_bytes, num_handles)) =
5677                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5678            {
5679                let member_inline_size =
5680                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5681                if inlined != (member_inline_size <= 4) {
5682                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5683                }
5684                let inner_offset;
5685                let mut inner_depth = depth.clone();
5686                if inlined {
5687                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5688                    inner_offset = next_offset;
5689                } else {
5690                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5691                    inner_depth.increment()?;
5692                }
5693                let val_ref = self.quarantined.get_or_insert_with(|| fidl::new_empty!(bool, D));
5694                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5695                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5696                {
5697                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5698                }
5699                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5700                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5701                }
5702            }
5703
5704            next_offset += envelope_size;
5705            _next_ordinal_to_read += 1;
5706            if next_offset >= end_offset {
5707                return Ok(());
5708            }
5709
5710            // Decode unknown envelopes for gaps in ordinals.
5711            while _next_ordinal_to_read < 11 {
5712                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5713                _next_ordinal_to_read += 1;
5714                next_offset += envelope_size;
5715            }
5716
5717            let next_out_of_line = decoder.next_out_of_line();
5718            let handles_before = decoder.remaining_handles();
5719            if let Some((inlined, num_bytes, num_handles)) =
5720                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5721            {
5722                let member_inline_size = <fidl::encoding::Vector<
5723                    fidl_fuchsia_driver_framework_common::BusInfo,
5724                    20,
5725                > as fidl::encoding::TypeMarker>::inline_size(
5726                    decoder.context
5727                );
5728                if inlined != (member_inline_size <= 4) {
5729                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5730                }
5731                let inner_offset;
5732                let mut inner_depth = depth.clone();
5733                if inlined {
5734                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5735                    inner_offset = next_offset;
5736                } else {
5737                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5738                    inner_depth.increment()?;
5739                }
5740                let val_ref =
5741                self.bus_topology.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20>, D));
5742                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::BusInfo, 20>, D, val_ref, decoder, inner_offset, inner_depth)?;
5743                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5744                {
5745                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5746                }
5747                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5748                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5749                }
5750            }
5751
5752            next_offset += envelope_size;
5753            _next_ordinal_to_read += 1;
5754            if next_offset >= end_offset {
5755                return Ok(());
5756            }
5757
5758            // Decode unknown envelopes for gaps in ordinals.
5759            while _next_ordinal_to_read < 12 {
5760                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5761                _next_ordinal_to_read += 1;
5762                next_offset += envelope_size;
5763            }
5764
5765            let next_out_of_line = decoder.next_out_of_line();
5766            let handles_before = decoder.remaining_handles();
5767            if let Some((inlined, num_bytes, num_handles)) =
5768                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5769            {
5770                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5771                if inlined != (member_inline_size <= 4) {
5772                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5773                }
5774                let inner_offset;
5775                let mut inner_depth = depth.clone();
5776                if inlined {
5777                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5778                    inner_offset = next_offset;
5779                } else {
5780                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5781                    inner_depth.increment()?;
5782                }
5783                let val_ref = self.topological_path.get_or_insert_with(|| {
5784                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
5785                });
5786                fidl::decode!(
5787                    fidl::encoding::BoundedString<1024>,
5788                    D,
5789                    val_ref,
5790                    decoder,
5791                    inner_offset,
5792                    inner_depth
5793                )?;
5794                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5795                {
5796                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5797                }
5798                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5799                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5800                }
5801            }
5802
5803            next_offset += envelope_size;
5804
5805            // Decode the remaining unknown envelopes.
5806            while next_offset < end_offset {
5807                _next_ordinal_to_read += 1;
5808                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5809                next_offset += envelope_size;
5810            }
5811
5812            Ok(())
5813        }
5814    }
5815
5816    impl NonInlinedRequestStats {
5817        #[inline(always)]
5818        fn max_ordinal_present(&self) -> u64 {
5819            if let Some(_) = self.no_thread_migration {
5820                return 7;
5821            }
5822            if let Some(_) = self.channel_wait_not_yet_registered {
5823                return 6;
5824            }
5825            if let Some(_) = self.reentrant {
5826                return 5;
5827            }
5828            if let Some(_) = self.unknown_thread {
5829                return 4;
5830            }
5831            if let Some(_) = self.task {
5832                return 3;
5833            }
5834            if let Some(_) = self.parallel_dispatch {
5835                return 2;
5836            }
5837            if let Some(_) = self.allow_sync_calls {
5838                return 1;
5839            }
5840            0
5841        }
5842    }
5843
5844    impl fidl::encoding::ValueTypeMarker for NonInlinedRequestStats {
5845        type Borrowed<'a> = &'a Self;
5846        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5847            value
5848        }
5849    }
5850
5851    unsafe impl fidl::encoding::TypeMarker for NonInlinedRequestStats {
5852        type Owned = Self;
5853
5854        #[inline(always)]
5855        fn inline_align(_context: fidl::encoding::Context) -> usize {
5856            8
5857        }
5858
5859        #[inline(always)]
5860        fn inline_size(_context: fidl::encoding::Context) -> usize {
5861            16
5862        }
5863    }
5864
5865    unsafe impl<D: fidl::encoding::ResourceDialect>
5866        fidl::encoding::Encode<NonInlinedRequestStats, D> for &NonInlinedRequestStats
5867    {
5868        unsafe fn encode(
5869            self,
5870            encoder: &mut fidl::encoding::Encoder<'_, D>,
5871            offset: usize,
5872            mut depth: fidl::encoding::Depth,
5873        ) -> fidl::Result<()> {
5874            encoder.debug_check_bounds::<NonInlinedRequestStats>(offset);
5875            // Vector header
5876            let max_ordinal: u64 = self.max_ordinal_present();
5877            encoder.write_num(max_ordinal, offset);
5878            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5879            // Calling encoder.out_of_line_offset(0) is not allowed.
5880            if max_ordinal == 0 {
5881                return Ok(());
5882            }
5883            depth.increment()?;
5884            let envelope_size = 8;
5885            let bytes_len = max_ordinal as usize * envelope_size;
5886            #[allow(unused_variables)]
5887            let offset = encoder.out_of_line_offset(bytes_len);
5888            let mut _prev_end_offset: usize = 0;
5889            if 1 > max_ordinal {
5890                return Ok(());
5891            }
5892
5893            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5894            // are envelope_size bytes.
5895            let cur_offset: usize = (1 - 1) * envelope_size;
5896
5897            // Zero reserved fields.
5898            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5899
5900            // Safety:
5901            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5902            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5903            //   envelope_size bytes, there is always sufficient room.
5904            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5905                self.allow_sync_calls
5906                    .as_ref()
5907                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5908                encoder,
5909                offset + cur_offset,
5910                depth,
5911            )?;
5912
5913            _prev_end_offset = cur_offset + envelope_size;
5914            if 2 > max_ordinal {
5915                return Ok(());
5916            }
5917
5918            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5919            // are envelope_size bytes.
5920            let cur_offset: usize = (2 - 1) * envelope_size;
5921
5922            // Zero reserved fields.
5923            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5924
5925            // Safety:
5926            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5927            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5928            //   envelope_size bytes, there is always sufficient room.
5929            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5930                self.parallel_dispatch
5931                    .as_ref()
5932                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5933                encoder,
5934                offset + cur_offset,
5935                depth,
5936            )?;
5937
5938            _prev_end_offset = cur_offset + envelope_size;
5939            if 3 > max_ordinal {
5940                return Ok(());
5941            }
5942
5943            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5944            // are envelope_size bytes.
5945            let cur_offset: usize = (3 - 1) * envelope_size;
5946
5947            // Zero reserved fields.
5948            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5949
5950            // Safety:
5951            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5952            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5953            //   envelope_size bytes, there is always sufficient room.
5954            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5955                self.task.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5956                encoder,
5957                offset + cur_offset,
5958                depth,
5959            )?;
5960
5961            _prev_end_offset = cur_offset + envelope_size;
5962            if 4 > max_ordinal {
5963                return Ok(());
5964            }
5965
5966            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5967            // are envelope_size bytes.
5968            let cur_offset: usize = (4 - 1) * envelope_size;
5969
5970            // Zero reserved fields.
5971            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5972
5973            // Safety:
5974            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5975            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5976            //   envelope_size bytes, there is always sufficient room.
5977            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5978                self.unknown_thread.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5979                encoder,
5980                offset + cur_offset,
5981                depth,
5982            )?;
5983
5984            _prev_end_offset = cur_offset + envelope_size;
5985            if 5 > max_ordinal {
5986                return Ok(());
5987            }
5988
5989            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5990            // are envelope_size bytes.
5991            let cur_offset: usize = (5 - 1) * envelope_size;
5992
5993            // Zero reserved fields.
5994            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5995
5996            // Safety:
5997            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5998            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5999            //   envelope_size bytes, there is always sufficient room.
6000            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6001                self.reentrant.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6002                encoder,
6003                offset + cur_offset,
6004                depth,
6005            )?;
6006
6007            _prev_end_offset = cur_offset + envelope_size;
6008            if 6 > max_ordinal {
6009                return Ok(());
6010            }
6011
6012            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6013            // are envelope_size bytes.
6014            let cur_offset: usize = (6 - 1) * envelope_size;
6015
6016            // Zero reserved fields.
6017            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6018
6019            // Safety:
6020            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6021            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6022            //   envelope_size bytes, there is always sufficient room.
6023            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6024                self.channel_wait_not_yet_registered
6025                    .as_ref()
6026                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6027                encoder,
6028                offset + cur_offset,
6029                depth,
6030            )?;
6031
6032            _prev_end_offset = cur_offset + envelope_size;
6033            if 7 > max_ordinal {
6034                return Ok(());
6035            }
6036
6037            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6038            // are envelope_size bytes.
6039            let cur_offset: usize = (7 - 1) * envelope_size;
6040
6041            // Zero reserved fields.
6042            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6043
6044            // Safety:
6045            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6046            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6047            //   envelope_size bytes, there is always sufficient room.
6048            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6049                self.no_thread_migration
6050                    .as_ref()
6051                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6052                encoder,
6053                offset + cur_offset,
6054                depth,
6055            )?;
6056
6057            _prev_end_offset = cur_offset + envelope_size;
6058
6059            Ok(())
6060        }
6061    }
6062
6063    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6064        for NonInlinedRequestStats
6065    {
6066        #[inline(always)]
6067        fn new_empty() -> Self {
6068            Self::default()
6069        }
6070
6071        unsafe fn decode(
6072            &mut self,
6073            decoder: &mut fidl::encoding::Decoder<'_, D>,
6074            offset: usize,
6075            mut depth: fidl::encoding::Depth,
6076        ) -> fidl::Result<()> {
6077            decoder.debug_check_bounds::<Self>(offset);
6078            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6079                None => return Err(fidl::Error::NotNullable),
6080                Some(len) => len,
6081            };
6082            // Calling decoder.out_of_line_offset(0) is not allowed.
6083            if len == 0 {
6084                return Ok(());
6085            };
6086            depth.increment()?;
6087            let envelope_size = 8;
6088            let bytes_len = len * envelope_size;
6089            let offset = decoder.out_of_line_offset(bytes_len)?;
6090            // Decode the envelope for each type.
6091            let mut _next_ordinal_to_read = 0;
6092            let mut next_offset = offset;
6093            let end_offset = offset + bytes_len;
6094            _next_ordinal_to_read += 1;
6095            if next_offset >= end_offset {
6096                return Ok(());
6097            }
6098
6099            // Decode unknown envelopes for gaps in ordinals.
6100            while _next_ordinal_to_read < 1 {
6101                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6102                _next_ordinal_to_read += 1;
6103                next_offset += envelope_size;
6104            }
6105
6106            let next_out_of_line = decoder.next_out_of_line();
6107            let handles_before = decoder.remaining_handles();
6108            if let Some((inlined, num_bytes, num_handles)) =
6109                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6110            {
6111                let member_inline_size =
6112                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6113                if inlined != (member_inline_size <= 4) {
6114                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6115                }
6116                let inner_offset;
6117                let mut inner_depth = depth.clone();
6118                if inlined {
6119                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6120                    inner_offset = next_offset;
6121                } else {
6122                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6123                    inner_depth.increment()?;
6124                }
6125                let val_ref = self.allow_sync_calls.get_or_insert_with(|| fidl::new_empty!(u64, D));
6126                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6127                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6128                {
6129                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6130                }
6131                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6132                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6133                }
6134            }
6135
6136            next_offset += envelope_size;
6137            _next_ordinal_to_read += 1;
6138            if next_offset >= end_offset {
6139                return Ok(());
6140            }
6141
6142            // Decode unknown envelopes for gaps in ordinals.
6143            while _next_ordinal_to_read < 2 {
6144                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6145                _next_ordinal_to_read += 1;
6146                next_offset += envelope_size;
6147            }
6148
6149            let next_out_of_line = decoder.next_out_of_line();
6150            let handles_before = decoder.remaining_handles();
6151            if let Some((inlined, num_bytes, num_handles)) =
6152                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6153            {
6154                let member_inline_size =
6155                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6156                if inlined != (member_inline_size <= 4) {
6157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6158                }
6159                let inner_offset;
6160                let mut inner_depth = depth.clone();
6161                if inlined {
6162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6163                    inner_offset = next_offset;
6164                } else {
6165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6166                    inner_depth.increment()?;
6167                }
6168                let val_ref =
6169                    self.parallel_dispatch.get_or_insert_with(|| fidl::new_empty!(u64, D));
6170                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6172                {
6173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6174                }
6175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6177                }
6178            }
6179
6180            next_offset += envelope_size;
6181            _next_ordinal_to_read += 1;
6182            if next_offset >= end_offset {
6183                return Ok(());
6184            }
6185
6186            // Decode unknown envelopes for gaps in ordinals.
6187            while _next_ordinal_to_read < 3 {
6188                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6189                _next_ordinal_to_read += 1;
6190                next_offset += envelope_size;
6191            }
6192
6193            let next_out_of_line = decoder.next_out_of_line();
6194            let handles_before = decoder.remaining_handles();
6195            if let Some((inlined, num_bytes, num_handles)) =
6196                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6197            {
6198                let member_inline_size =
6199                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6200                if inlined != (member_inline_size <= 4) {
6201                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6202                }
6203                let inner_offset;
6204                let mut inner_depth = depth.clone();
6205                if inlined {
6206                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6207                    inner_offset = next_offset;
6208                } else {
6209                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6210                    inner_depth.increment()?;
6211                }
6212                let val_ref = self.task.get_or_insert_with(|| fidl::new_empty!(u64, D));
6213                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6214                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6215                {
6216                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6217                }
6218                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6219                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6220                }
6221            }
6222
6223            next_offset += envelope_size;
6224            _next_ordinal_to_read += 1;
6225            if next_offset >= end_offset {
6226                return Ok(());
6227            }
6228
6229            // Decode unknown envelopes for gaps in ordinals.
6230            while _next_ordinal_to_read < 4 {
6231                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6232                _next_ordinal_to_read += 1;
6233                next_offset += envelope_size;
6234            }
6235
6236            let next_out_of_line = decoder.next_out_of_line();
6237            let handles_before = decoder.remaining_handles();
6238            if let Some((inlined, num_bytes, num_handles)) =
6239                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6240            {
6241                let member_inline_size =
6242                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6243                if inlined != (member_inline_size <= 4) {
6244                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6245                }
6246                let inner_offset;
6247                let mut inner_depth = depth.clone();
6248                if inlined {
6249                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6250                    inner_offset = next_offset;
6251                } else {
6252                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6253                    inner_depth.increment()?;
6254                }
6255                let val_ref = self.unknown_thread.get_or_insert_with(|| fidl::new_empty!(u64, D));
6256                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6257                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6258                {
6259                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6260                }
6261                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6262                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6263                }
6264            }
6265
6266            next_offset += envelope_size;
6267            _next_ordinal_to_read += 1;
6268            if next_offset >= end_offset {
6269                return Ok(());
6270            }
6271
6272            // Decode unknown envelopes for gaps in ordinals.
6273            while _next_ordinal_to_read < 5 {
6274                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6275                _next_ordinal_to_read += 1;
6276                next_offset += envelope_size;
6277            }
6278
6279            let next_out_of_line = decoder.next_out_of_line();
6280            let handles_before = decoder.remaining_handles();
6281            if let Some((inlined, num_bytes, num_handles)) =
6282                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6283            {
6284                let member_inline_size =
6285                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6286                if inlined != (member_inline_size <= 4) {
6287                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6288                }
6289                let inner_offset;
6290                let mut inner_depth = depth.clone();
6291                if inlined {
6292                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6293                    inner_offset = next_offset;
6294                } else {
6295                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6296                    inner_depth.increment()?;
6297                }
6298                let val_ref = self.reentrant.get_or_insert_with(|| fidl::new_empty!(u64, D));
6299                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6300                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6301                {
6302                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6303                }
6304                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6305                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6306                }
6307            }
6308
6309            next_offset += envelope_size;
6310            _next_ordinal_to_read += 1;
6311            if next_offset >= end_offset {
6312                return Ok(());
6313            }
6314
6315            // Decode unknown envelopes for gaps in ordinals.
6316            while _next_ordinal_to_read < 6 {
6317                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6318                _next_ordinal_to_read += 1;
6319                next_offset += envelope_size;
6320            }
6321
6322            let next_out_of_line = decoder.next_out_of_line();
6323            let handles_before = decoder.remaining_handles();
6324            if let Some((inlined, num_bytes, num_handles)) =
6325                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6326            {
6327                let member_inline_size =
6328                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6329                if inlined != (member_inline_size <= 4) {
6330                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6331                }
6332                let inner_offset;
6333                let mut inner_depth = depth.clone();
6334                if inlined {
6335                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6336                    inner_offset = next_offset;
6337                } else {
6338                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6339                    inner_depth.increment()?;
6340                }
6341                let val_ref = self
6342                    .channel_wait_not_yet_registered
6343                    .get_or_insert_with(|| fidl::new_empty!(u64, D));
6344                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6345                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6346                {
6347                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6348                }
6349                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6350                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6351                }
6352            }
6353
6354            next_offset += envelope_size;
6355            _next_ordinal_to_read += 1;
6356            if next_offset >= end_offset {
6357                return Ok(());
6358            }
6359
6360            // Decode unknown envelopes for gaps in ordinals.
6361            while _next_ordinal_to_read < 7 {
6362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6363                _next_ordinal_to_read += 1;
6364                next_offset += envelope_size;
6365            }
6366
6367            let next_out_of_line = decoder.next_out_of_line();
6368            let handles_before = decoder.remaining_handles();
6369            if let Some((inlined, num_bytes, num_handles)) =
6370                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6371            {
6372                let member_inline_size =
6373                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6374                if inlined != (member_inline_size <= 4) {
6375                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6376                }
6377                let inner_offset;
6378                let mut inner_depth = depth.clone();
6379                if inlined {
6380                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6381                    inner_offset = next_offset;
6382                } else {
6383                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6384                    inner_depth.increment()?;
6385                }
6386                let val_ref =
6387                    self.no_thread_migration.get_or_insert_with(|| fidl::new_empty!(u64, D));
6388                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6389                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6390                {
6391                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6392                }
6393                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6394                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6395                }
6396            }
6397
6398            next_offset += envelope_size;
6399
6400            // Decode the remaining unknown envelopes.
6401            while next_offset < end_offset {
6402                _next_ordinal_to_read += 1;
6403                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6404                next_offset += envelope_size;
6405            }
6406
6407            Ok(())
6408        }
6409    }
6410
6411    impl QueuedTaskInfo {
6412        #[inline(always)]
6413        fn max_ordinal_present(&self) -> u64 {
6414            if let Some(_) = self.initiating_driver_url {
6415                return 6;
6416            }
6417            if let Some(_) = self.initiating_driver {
6418                return 5;
6419            }
6420            if let Some(_) = self.initiating_dispatcher_name {
6421                return 4;
6422            }
6423            if let Some(_) = self.initiating_dispatcher {
6424                return 3;
6425            }
6426            if let Some(_) = self.handler {
6427                return 2;
6428            }
6429            if let Some(_) = self.ptr {
6430                return 1;
6431            }
6432            0
6433        }
6434    }
6435
6436    impl fidl::encoding::ValueTypeMarker for QueuedTaskInfo {
6437        type Borrowed<'a> = &'a Self;
6438        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6439            value
6440        }
6441    }
6442
6443    unsafe impl fidl::encoding::TypeMarker for QueuedTaskInfo {
6444        type Owned = Self;
6445
6446        #[inline(always)]
6447        fn inline_align(_context: fidl::encoding::Context) -> usize {
6448            8
6449        }
6450
6451        #[inline(always)]
6452        fn inline_size(_context: fidl::encoding::Context) -> usize {
6453            16
6454        }
6455    }
6456
6457    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<QueuedTaskInfo, D>
6458        for &QueuedTaskInfo
6459    {
6460        unsafe fn encode(
6461            self,
6462            encoder: &mut fidl::encoding::Encoder<'_, D>,
6463            offset: usize,
6464            mut depth: fidl::encoding::Depth,
6465        ) -> fidl::Result<()> {
6466            encoder.debug_check_bounds::<QueuedTaskInfo>(offset);
6467            // Vector header
6468            let max_ordinal: u64 = self.max_ordinal_present();
6469            encoder.write_num(max_ordinal, offset);
6470            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6471            // Calling encoder.out_of_line_offset(0) is not allowed.
6472            if max_ordinal == 0 {
6473                return Ok(());
6474            }
6475            depth.increment()?;
6476            let envelope_size = 8;
6477            let bytes_len = max_ordinal as usize * envelope_size;
6478            #[allow(unused_variables)]
6479            let offset = encoder.out_of_line_offset(bytes_len);
6480            let mut _prev_end_offset: usize = 0;
6481            if 1 > max_ordinal {
6482                return Ok(());
6483            }
6484
6485            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6486            // are envelope_size bytes.
6487            let cur_offset: usize = (1 - 1) * envelope_size;
6488
6489            // Zero reserved fields.
6490            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6491
6492            // Safety:
6493            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6494            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6495            //   envelope_size bytes, there is always sufficient room.
6496            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6497                self.ptr.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6498                encoder,
6499                offset + cur_offset,
6500                depth,
6501            )?;
6502
6503            _prev_end_offset = cur_offset + envelope_size;
6504            if 2 > max_ordinal {
6505                return Ok(());
6506            }
6507
6508            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6509            // are envelope_size bytes.
6510            let cur_offset: usize = (2 - 1) * envelope_size;
6511
6512            // Zero reserved fields.
6513            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6514
6515            // Safety:
6516            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6517            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6518            //   envelope_size bytes, there is always sufficient room.
6519            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6520                self.handler.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6521                encoder,
6522                offset + cur_offset,
6523                depth,
6524            )?;
6525
6526            _prev_end_offset = cur_offset + envelope_size;
6527            if 3 > max_ordinal {
6528                return Ok(());
6529            }
6530
6531            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6532            // are envelope_size bytes.
6533            let cur_offset: usize = (3 - 1) * envelope_size;
6534
6535            // Zero reserved fields.
6536            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6537
6538            // Safety:
6539            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6540            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6541            //   envelope_size bytes, there is always sufficient room.
6542            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6543                self.initiating_dispatcher
6544                    .as_ref()
6545                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6546                encoder,
6547                offset + cur_offset,
6548                depth,
6549            )?;
6550
6551            _prev_end_offset = cur_offset + envelope_size;
6552            if 4 > max_ordinal {
6553                return Ok(());
6554            }
6555
6556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6557            // are envelope_size bytes.
6558            let cur_offset: usize = (4 - 1) * envelope_size;
6559
6560            // Zero reserved fields.
6561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6562
6563            // Safety:
6564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6566            //   envelope_size bytes, there is always sufficient room.
6567            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
6568                self.initiating_dispatcher_name.as_ref().map(
6569                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6570                ),
6571                encoder,
6572                offset + cur_offset,
6573                depth,
6574            )?;
6575
6576            _prev_end_offset = cur_offset + envelope_size;
6577            if 5 > max_ordinal {
6578                return Ok(());
6579            }
6580
6581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6582            // are envelope_size bytes.
6583            let cur_offset: usize = (5 - 1) * envelope_size;
6584
6585            // Zero reserved fields.
6586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6587
6588            // Safety:
6589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6591            //   envelope_size bytes, there is always sufficient room.
6592            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6593                self.initiating_driver
6594                    .as_ref()
6595                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6596                encoder,
6597                offset + cur_offset,
6598                depth,
6599            )?;
6600
6601            _prev_end_offset = cur_offset + envelope_size;
6602            if 6 > max_ordinal {
6603                return Ok(());
6604            }
6605
6606            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6607            // are envelope_size bytes.
6608            let cur_offset: usize = (6 - 1) * envelope_size;
6609
6610            // Zero reserved fields.
6611            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6612
6613            // Safety:
6614            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6615            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6616            //   envelope_size bytes, there is always sufficient room.
6617            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
6618            self.initiating_driver_url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
6619            encoder, offset + cur_offset, depth
6620        )?;
6621
6622            _prev_end_offset = cur_offset + envelope_size;
6623
6624            Ok(())
6625        }
6626    }
6627
6628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for QueuedTaskInfo {
6629        #[inline(always)]
6630        fn new_empty() -> Self {
6631            Self::default()
6632        }
6633
6634        unsafe fn decode(
6635            &mut self,
6636            decoder: &mut fidl::encoding::Decoder<'_, D>,
6637            offset: usize,
6638            mut depth: fidl::encoding::Depth,
6639        ) -> fidl::Result<()> {
6640            decoder.debug_check_bounds::<Self>(offset);
6641            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6642                None => return Err(fidl::Error::NotNullable),
6643                Some(len) => len,
6644            };
6645            // Calling decoder.out_of_line_offset(0) is not allowed.
6646            if len == 0 {
6647                return Ok(());
6648            };
6649            depth.increment()?;
6650            let envelope_size = 8;
6651            let bytes_len = len * envelope_size;
6652            let offset = decoder.out_of_line_offset(bytes_len)?;
6653            // Decode the envelope for each type.
6654            let mut _next_ordinal_to_read = 0;
6655            let mut next_offset = offset;
6656            let end_offset = offset + bytes_len;
6657            _next_ordinal_to_read += 1;
6658            if next_offset >= end_offset {
6659                return Ok(());
6660            }
6661
6662            // Decode unknown envelopes for gaps in ordinals.
6663            while _next_ordinal_to_read < 1 {
6664                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6665                _next_ordinal_to_read += 1;
6666                next_offset += envelope_size;
6667            }
6668
6669            let next_out_of_line = decoder.next_out_of_line();
6670            let handles_before = decoder.remaining_handles();
6671            if let Some((inlined, num_bytes, num_handles)) =
6672                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6673            {
6674                let member_inline_size =
6675                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6676                if inlined != (member_inline_size <= 4) {
6677                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6678                }
6679                let inner_offset;
6680                let mut inner_depth = depth.clone();
6681                if inlined {
6682                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6683                    inner_offset = next_offset;
6684                } else {
6685                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6686                    inner_depth.increment()?;
6687                }
6688                let val_ref = self.ptr.get_or_insert_with(|| fidl::new_empty!(u64, D));
6689                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6690                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6691                {
6692                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6693                }
6694                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6695                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6696                }
6697            }
6698
6699            next_offset += envelope_size;
6700            _next_ordinal_to_read += 1;
6701            if next_offset >= end_offset {
6702                return Ok(());
6703            }
6704
6705            // Decode unknown envelopes for gaps in ordinals.
6706            while _next_ordinal_to_read < 2 {
6707                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6708                _next_ordinal_to_read += 1;
6709                next_offset += envelope_size;
6710            }
6711
6712            let next_out_of_line = decoder.next_out_of_line();
6713            let handles_before = decoder.remaining_handles();
6714            if let Some((inlined, num_bytes, num_handles)) =
6715                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6716            {
6717                let member_inline_size =
6718                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6719                if inlined != (member_inline_size <= 4) {
6720                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6721                }
6722                let inner_offset;
6723                let mut inner_depth = depth.clone();
6724                if inlined {
6725                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6726                    inner_offset = next_offset;
6727                } else {
6728                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6729                    inner_depth.increment()?;
6730                }
6731                let val_ref = self.handler.get_or_insert_with(|| fidl::new_empty!(u64, D));
6732                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6733                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6734                {
6735                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6736                }
6737                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6738                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6739                }
6740            }
6741
6742            next_offset += envelope_size;
6743            _next_ordinal_to_read += 1;
6744            if next_offset >= end_offset {
6745                return Ok(());
6746            }
6747
6748            // Decode unknown envelopes for gaps in ordinals.
6749            while _next_ordinal_to_read < 3 {
6750                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6751                _next_ordinal_to_read += 1;
6752                next_offset += envelope_size;
6753            }
6754
6755            let next_out_of_line = decoder.next_out_of_line();
6756            let handles_before = decoder.remaining_handles();
6757            if let Some((inlined, num_bytes, num_handles)) =
6758                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6759            {
6760                let member_inline_size =
6761                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6762                if inlined != (member_inline_size <= 4) {
6763                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6764                }
6765                let inner_offset;
6766                let mut inner_depth = depth.clone();
6767                if inlined {
6768                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6769                    inner_offset = next_offset;
6770                } else {
6771                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6772                    inner_depth.increment()?;
6773                }
6774                let val_ref =
6775                    self.initiating_dispatcher.get_or_insert_with(|| fidl::new_empty!(u64, D));
6776                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6777                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6778                {
6779                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6780                }
6781                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6782                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6783                }
6784            }
6785
6786            next_offset += envelope_size;
6787            _next_ordinal_to_read += 1;
6788            if next_offset >= end_offset {
6789                return Ok(());
6790            }
6791
6792            // Decode unknown envelopes for gaps in ordinals.
6793            while _next_ordinal_to_read < 4 {
6794                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6795                _next_ordinal_to_read += 1;
6796                next_offset += envelope_size;
6797            }
6798
6799            let next_out_of_line = decoder.next_out_of_line();
6800            let handles_before = decoder.remaining_handles();
6801            if let Some((inlined, num_bytes, num_handles)) =
6802                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6803            {
6804                let member_inline_size =
6805                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
6806                        decoder.context,
6807                    );
6808                if inlined != (member_inline_size <= 4) {
6809                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6810                }
6811                let inner_offset;
6812                let mut inner_depth = depth.clone();
6813                if inlined {
6814                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6815                    inner_offset = next_offset;
6816                } else {
6817                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6818                    inner_depth.increment()?;
6819                }
6820                let val_ref = self
6821                    .initiating_dispatcher_name
6822                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
6823                fidl::decode!(
6824                    fidl::encoding::UnboundedString,
6825                    D,
6826                    val_ref,
6827                    decoder,
6828                    inner_offset,
6829                    inner_depth
6830                )?;
6831                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6832                {
6833                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6834                }
6835                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6836                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6837                }
6838            }
6839
6840            next_offset += envelope_size;
6841            _next_ordinal_to_read += 1;
6842            if next_offset >= end_offset {
6843                return Ok(());
6844            }
6845
6846            // Decode unknown envelopes for gaps in ordinals.
6847            while _next_ordinal_to_read < 5 {
6848                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6849                _next_ordinal_to_read += 1;
6850                next_offset += envelope_size;
6851            }
6852
6853            let next_out_of_line = decoder.next_out_of_line();
6854            let handles_before = decoder.remaining_handles();
6855            if let Some((inlined, num_bytes, num_handles)) =
6856                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6857            {
6858                let member_inline_size =
6859                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6860                if inlined != (member_inline_size <= 4) {
6861                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6862                }
6863                let inner_offset;
6864                let mut inner_depth = depth.clone();
6865                if inlined {
6866                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6867                    inner_offset = next_offset;
6868                } else {
6869                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6870                    inner_depth.increment()?;
6871                }
6872                let val_ref =
6873                    self.initiating_driver.get_or_insert_with(|| fidl::new_empty!(u64, D));
6874                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6875                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6876                {
6877                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6878                }
6879                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6880                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6881                }
6882            }
6883
6884            next_offset += envelope_size;
6885            _next_ordinal_to_read += 1;
6886            if next_offset >= end_offset {
6887                return Ok(());
6888            }
6889
6890            // Decode unknown envelopes for gaps in ordinals.
6891            while _next_ordinal_to_read < 6 {
6892                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6893                _next_ordinal_to_read += 1;
6894                next_offset += envelope_size;
6895            }
6896
6897            let next_out_of_line = decoder.next_out_of_line();
6898            let handles_before = decoder.remaining_handles();
6899            if let Some((inlined, num_bytes, num_handles)) =
6900                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6901            {
6902                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6903                if inlined != (member_inline_size <= 4) {
6904                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6905                }
6906                let inner_offset;
6907                let mut inner_depth = depth.clone();
6908                if inlined {
6909                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6910                    inner_offset = next_offset;
6911                } else {
6912                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6913                    inner_depth.increment()?;
6914                }
6915                let val_ref = self.initiating_driver_url.get_or_insert_with(|| {
6916                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
6917                });
6918                fidl::decode!(
6919                    fidl::encoding::BoundedString<4096>,
6920                    D,
6921                    val_ref,
6922                    decoder,
6923                    inner_offset,
6924                    inner_depth
6925                )?;
6926                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6927                {
6928                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6929                }
6930                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6931                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6932                }
6933            }
6934
6935            next_offset += envelope_size;
6936
6937            // Decode the remaining unknown envelopes.
6938            while next_offset < end_offset {
6939                _next_ordinal_to_read += 1;
6940                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6941                next_offset += envelope_size;
6942            }
6943
6944            Ok(())
6945        }
6946    }
6947
6948    impl TestNodeAddArgs {
6949        #[inline(always)]
6950        fn max_ordinal_present(&self) -> u64 {
6951            if let Some(_) = self.properties {
6952                return 2;
6953            }
6954            if let Some(_) = self.name {
6955                return 1;
6956            }
6957            0
6958        }
6959    }
6960
6961    impl fidl::encoding::ValueTypeMarker for TestNodeAddArgs {
6962        type Borrowed<'a> = &'a Self;
6963        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6964            value
6965        }
6966    }
6967
6968    unsafe impl fidl::encoding::TypeMarker for TestNodeAddArgs {
6969        type Owned = Self;
6970
6971        #[inline(always)]
6972        fn inline_align(_context: fidl::encoding::Context) -> usize {
6973            8
6974        }
6975
6976        #[inline(always)]
6977        fn inline_size(_context: fidl::encoding::Context) -> usize {
6978            16
6979        }
6980    }
6981
6982    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TestNodeAddArgs, D>
6983        for &TestNodeAddArgs
6984    {
6985        unsafe fn encode(
6986            self,
6987            encoder: &mut fidl::encoding::Encoder<'_, D>,
6988            offset: usize,
6989            mut depth: fidl::encoding::Depth,
6990        ) -> fidl::Result<()> {
6991            encoder.debug_check_bounds::<TestNodeAddArgs>(offset);
6992            // Vector header
6993            let max_ordinal: u64 = self.max_ordinal_present();
6994            encoder.write_num(max_ordinal, offset);
6995            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6996            // Calling encoder.out_of_line_offset(0) is not allowed.
6997            if max_ordinal == 0 {
6998                return Ok(());
6999            }
7000            depth.increment()?;
7001            let envelope_size = 8;
7002            let bytes_len = max_ordinal as usize * envelope_size;
7003            #[allow(unused_variables)]
7004            let offset = encoder.out_of_line_offset(bytes_len);
7005            let mut _prev_end_offset: usize = 0;
7006            if 1 > max_ordinal {
7007                return Ok(());
7008            }
7009
7010            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7011            // are envelope_size bytes.
7012            let cur_offset: usize = (1 - 1) * envelope_size;
7013
7014            // Zero reserved fields.
7015            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7016
7017            // Safety:
7018            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7019            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7020            //   envelope_size bytes, there is always sufficient room.
7021            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
7022            self.name.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
7023            encoder, offset + cur_offset, depth
7024        )?;
7025
7026            _prev_end_offset = cur_offset + envelope_size;
7027            if 2 > max_ordinal {
7028                return Ok(());
7029            }
7030
7031            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7032            // are envelope_size bytes.
7033            let cur_offset: usize = (2 - 1) * envelope_size;
7034
7035            // Zero reserved fields.
7036            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7037
7038            // Safety:
7039            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7040            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7041            //   envelope_size bytes, there is always sufficient room.
7042            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D>(
7043            self.properties.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
7044            encoder, offset + cur_offset, depth
7045        )?;
7046
7047            _prev_end_offset = cur_offset + envelope_size;
7048
7049            Ok(())
7050        }
7051    }
7052
7053    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TestNodeAddArgs {
7054        #[inline(always)]
7055        fn new_empty() -> Self {
7056            Self::default()
7057        }
7058
7059        unsafe fn decode(
7060            &mut self,
7061            decoder: &mut fidl::encoding::Decoder<'_, D>,
7062            offset: usize,
7063            mut depth: fidl::encoding::Depth,
7064        ) -> fidl::Result<()> {
7065            decoder.debug_check_bounds::<Self>(offset);
7066            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7067                None => return Err(fidl::Error::NotNullable),
7068                Some(len) => len,
7069            };
7070            // Calling decoder.out_of_line_offset(0) is not allowed.
7071            if len == 0 {
7072                return Ok(());
7073            };
7074            depth.increment()?;
7075            let envelope_size = 8;
7076            let bytes_len = len * envelope_size;
7077            let offset = decoder.out_of_line_offset(bytes_len)?;
7078            // Decode the envelope for each type.
7079            let mut _next_ordinal_to_read = 0;
7080            let mut next_offset = offset;
7081            let end_offset = offset + bytes_len;
7082            _next_ordinal_to_read += 1;
7083            if next_offset >= end_offset {
7084                return Ok(());
7085            }
7086
7087            // Decode unknown envelopes for gaps in ordinals.
7088            while _next_ordinal_to_read < 1 {
7089                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7090                _next_ordinal_to_read += 1;
7091                next_offset += envelope_size;
7092            }
7093
7094            let next_out_of_line = decoder.next_out_of_line();
7095            let handles_before = decoder.remaining_handles();
7096            if let Some((inlined, num_bytes, num_handles)) =
7097                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7098            {
7099                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7100                if inlined != (member_inline_size <= 4) {
7101                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7102                }
7103                let inner_offset;
7104                let mut inner_depth = depth.clone();
7105                if inlined {
7106                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7107                    inner_offset = next_offset;
7108                } else {
7109                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7110                    inner_depth.increment()?;
7111                }
7112                let val_ref = self.name.get_or_insert_with(|| {
7113                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
7114                });
7115                fidl::decode!(
7116                    fidl::encoding::BoundedString<1024>,
7117                    D,
7118                    val_ref,
7119                    decoder,
7120                    inner_offset,
7121                    inner_depth
7122                )?;
7123                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7124                {
7125                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7126                }
7127                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7128                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7129                }
7130            }
7131
7132            next_offset += envelope_size;
7133            _next_ordinal_to_read += 1;
7134            if next_offset >= end_offset {
7135                return Ok(());
7136            }
7137
7138            // Decode unknown envelopes for gaps in ordinals.
7139            while _next_ordinal_to_read < 2 {
7140                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7141                _next_ordinal_to_read += 1;
7142                next_offset += envelope_size;
7143            }
7144
7145            let next_out_of_line = decoder.next_out_of_line();
7146            let handles_before = decoder.remaining_handles();
7147            if let Some((inlined, num_bytes, num_handles)) =
7148                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7149            {
7150                let member_inline_size = <fidl::encoding::Vector<
7151                    fidl_fuchsia_driver_framework_common::NodeProperty,
7152                    64,
7153                > as fidl::encoding::TypeMarker>::inline_size(
7154                    decoder.context
7155                );
7156                if inlined != (member_inline_size <= 4) {
7157                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7158                }
7159                let inner_offset;
7160                let mut inner_depth = depth.clone();
7161                if inlined {
7162                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7163                    inner_offset = next_offset;
7164                } else {
7165                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7166                    inner_depth.increment()?;
7167                }
7168                let val_ref =
7169                self.properties.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D));
7170                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_driver_framework_common::NodeProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
7171                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7172                {
7173                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7174                }
7175                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7176                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7177                }
7178            }
7179
7180            next_offset += envelope_size;
7181
7182            // Decode the remaining unknown envelopes.
7183            while next_offset < end_offset {
7184                _next_ordinal_to_read += 1;
7185                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7186                next_offset += envelope_size;
7187            }
7188
7189            Ok(())
7190        }
7191    }
7192
7193    impl ThreadInfo {
7194        #[inline(always)]
7195        fn max_ordinal_present(&self) -> u64 {
7196            if let Some(_) = self.scheduler_role {
7197                return 3;
7198            }
7199            if let Some(_) = self.name {
7200                return 2;
7201            }
7202            if let Some(_) = self.koid {
7203                return 1;
7204            }
7205            0
7206        }
7207    }
7208
7209    impl fidl::encoding::ValueTypeMarker for ThreadInfo {
7210        type Borrowed<'a> = &'a Self;
7211        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7212            value
7213        }
7214    }
7215
7216    unsafe impl fidl::encoding::TypeMarker for ThreadInfo {
7217        type Owned = Self;
7218
7219        #[inline(always)]
7220        fn inline_align(_context: fidl::encoding::Context) -> usize {
7221            8
7222        }
7223
7224        #[inline(always)]
7225        fn inline_size(_context: fidl::encoding::Context) -> usize {
7226            16
7227        }
7228    }
7229
7230    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ThreadInfo, D>
7231        for &ThreadInfo
7232    {
7233        unsafe fn encode(
7234            self,
7235            encoder: &mut fidl::encoding::Encoder<'_, D>,
7236            offset: usize,
7237            mut depth: fidl::encoding::Depth,
7238        ) -> fidl::Result<()> {
7239            encoder.debug_check_bounds::<ThreadInfo>(offset);
7240            // Vector header
7241            let max_ordinal: u64 = self.max_ordinal_present();
7242            encoder.write_num(max_ordinal, offset);
7243            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7244            // Calling encoder.out_of_line_offset(0) is not allowed.
7245            if max_ordinal == 0 {
7246                return Ok(());
7247            }
7248            depth.increment()?;
7249            let envelope_size = 8;
7250            let bytes_len = max_ordinal as usize * envelope_size;
7251            #[allow(unused_variables)]
7252            let offset = encoder.out_of_line_offset(bytes_len);
7253            let mut _prev_end_offset: usize = 0;
7254            if 1 > max_ordinal {
7255                return Ok(());
7256            }
7257
7258            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7259            // are envelope_size bytes.
7260            let cur_offset: usize = (1 - 1) * envelope_size;
7261
7262            // Zero reserved fields.
7263            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7264
7265            // Safety:
7266            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7267            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7268            //   envelope_size bytes, there is always sufficient room.
7269            fidl::encoding::encode_in_envelope_optional::<u64, D>(
7270                self.koid.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
7271                encoder,
7272                offset + cur_offset,
7273                depth,
7274            )?;
7275
7276            _prev_end_offset = cur_offset + envelope_size;
7277            if 2 > max_ordinal {
7278                return Ok(());
7279            }
7280
7281            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7282            // are envelope_size bytes.
7283            let cur_offset: usize = (2 - 1) * envelope_size;
7284
7285            // Zero reserved fields.
7286            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7287
7288            // Safety:
7289            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7290            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7291            //   envelope_size bytes, there is always sufficient room.
7292            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
7293                self.name.as_ref().map(
7294                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
7295                ),
7296                encoder,
7297                offset + cur_offset,
7298                depth,
7299            )?;
7300
7301            _prev_end_offset = cur_offset + envelope_size;
7302            if 3 > max_ordinal {
7303                return Ok(());
7304            }
7305
7306            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7307            // are envelope_size bytes.
7308            let cur_offset: usize = (3 - 1) * envelope_size;
7309
7310            // Zero reserved fields.
7311            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7312
7313            // Safety:
7314            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7315            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7316            //   envelope_size bytes, there is always sufficient room.
7317            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
7318                self.scheduler_role.as_ref().map(
7319                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
7320                ),
7321                encoder,
7322                offset + cur_offset,
7323                depth,
7324            )?;
7325
7326            _prev_end_offset = cur_offset + envelope_size;
7327
7328            Ok(())
7329        }
7330    }
7331
7332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ThreadInfo {
7333        #[inline(always)]
7334        fn new_empty() -> Self {
7335            Self::default()
7336        }
7337
7338        unsafe fn decode(
7339            &mut self,
7340            decoder: &mut fidl::encoding::Decoder<'_, D>,
7341            offset: usize,
7342            mut depth: fidl::encoding::Depth,
7343        ) -> fidl::Result<()> {
7344            decoder.debug_check_bounds::<Self>(offset);
7345            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7346                None => return Err(fidl::Error::NotNullable),
7347                Some(len) => len,
7348            };
7349            // Calling decoder.out_of_line_offset(0) is not allowed.
7350            if len == 0 {
7351                return Ok(());
7352            };
7353            depth.increment()?;
7354            let envelope_size = 8;
7355            let bytes_len = len * envelope_size;
7356            let offset = decoder.out_of_line_offset(bytes_len)?;
7357            // Decode the envelope for each type.
7358            let mut _next_ordinal_to_read = 0;
7359            let mut next_offset = offset;
7360            let end_offset = offset + bytes_len;
7361            _next_ordinal_to_read += 1;
7362            if next_offset >= end_offset {
7363                return Ok(());
7364            }
7365
7366            // Decode unknown envelopes for gaps in ordinals.
7367            while _next_ordinal_to_read < 1 {
7368                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7369                _next_ordinal_to_read += 1;
7370                next_offset += envelope_size;
7371            }
7372
7373            let next_out_of_line = decoder.next_out_of_line();
7374            let handles_before = decoder.remaining_handles();
7375            if let Some((inlined, num_bytes, num_handles)) =
7376                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7377            {
7378                let member_inline_size =
7379                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7380                if inlined != (member_inline_size <= 4) {
7381                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7382                }
7383                let inner_offset;
7384                let mut inner_depth = depth.clone();
7385                if inlined {
7386                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7387                    inner_offset = next_offset;
7388                } else {
7389                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7390                    inner_depth.increment()?;
7391                }
7392                let val_ref = self.koid.get_or_insert_with(|| fidl::new_empty!(u64, D));
7393                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7394                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7395                {
7396                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7397                }
7398                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7399                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7400                }
7401            }
7402
7403            next_offset += envelope_size;
7404            _next_ordinal_to_read += 1;
7405            if next_offset >= end_offset {
7406                return Ok(());
7407            }
7408
7409            // Decode unknown envelopes for gaps in ordinals.
7410            while _next_ordinal_to_read < 2 {
7411                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7412                _next_ordinal_to_read += 1;
7413                next_offset += envelope_size;
7414            }
7415
7416            let next_out_of_line = decoder.next_out_of_line();
7417            let handles_before = decoder.remaining_handles();
7418            if let Some((inlined, num_bytes, num_handles)) =
7419                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7420            {
7421                let member_inline_size =
7422                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
7423                        decoder.context,
7424                    );
7425                if inlined != (member_inline_size <= 4) {
7426                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7427                }
7428                let inner_offset;
7429                let mut inner_depth = depth.clone();
7430                if inlined {
7431                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7432                    inner_offset = next_offset;
7433                } else {
7434                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7435                    inner_depth.increment()?;
7436                }
7437                let val_ref = self
7438                    .name
7439                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
7440                fidl::decode!(
7441                    fidl::encoding::UnboundedString,
7442                    D,
7443                    val_ref,
7444                    decoder,
7445                    inner_offset,
7446                    inner_depth
7447                )?;
7448                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7449                {
7450                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7451                }
7452                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7453                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7454                }
7455            }
7456
7457            next_offset += envelope_size;
7458            _next_ordinal_to_read += 1;
7459            if next_offset >= end_offset {
7460                return Ok(());
7461            }
7462
7463            // Decode unknown envelopes for gaps in ordinals.
7464            while _next_ordinal_to_read < 3 {
7465                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7466                _next_ordinal_to_read += 1;
7467                next_offset += envelope_size;
7468            }
7469
7470            let next_out_of_line = decoder.next_out_of_line();
7471            let handles_before = decoder.remaining_handles();
7472            if let Some((inlined, num_bytes, num_handles)) =
7473                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7474            {
7475                let member_inline_size =
7476                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
7477                        decoder.context,
7478                    );
7479                if inlined != (member_inline_size <= 4) {
7480                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7481                }
7482                let inner_offset;
7483                let mut inner_depth = depth.clone();
7484                if inlined {
7485                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7486                    inner_offset = next_offset;
7487                } else {
7488                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7489                    inner_depth.increment()?;
7490                }
7491                let val_ref = self
7492                    .scheduler_role
7493                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
7494                fidl::decode!(
7495                    fidl::encoding::UnboundedString,
7496                    D,
7497                    val_ref,
7498                    decoder,
7499                    inner_offset,
7500                    inner_depth
7501                )?;
7502                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7503                {
7504                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7505                }
7506                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7507                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7508                }
7509            }
7510
7511            next_offset += envelope_size;
7512
7513            // Decode the remaining unknown envelopes.
7514            while next_offset < end_offset {
7515                _next_ordinal_to_read += 1;
7516                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7517                next_offset += envelope_size;
7518            }
7519
7520            Ok(())
7521        }
7522    }
7523
7524    impl fidl::encoding::ValueTypeMarker for CompositeInfo {
7525        type Borrowed<'a> = &'a Self;
7526        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7527            value
7528        }
7529    }
7530
7531    unsafe impl fidl::encoding::TypeMarker for CompositeInfo {
7532        type Owned = Self;
7533
7534        #[inline(always)]
7535        fn inline_align(_context: fidl::encoding::Context) -> usize {
7536            8
7537        }
7538
7539        #[inline(always)]
7540        fn inline_size(_context: fidl::encoding::Context) -> usize {
7541            16
7542        }
7543    }
7544
7545    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeInfo, D>
7546        for &CompositeInfo
7547    {
7548        #[inline]
7549        unsafe fn encode(
7550            self,
7551            encoder: &mut fidl::encoding::Encoder<'_, D>,
7552            offset: usize,
7553            _depth: fidl::encoding::Depth,
7554        ) -> fidl::Result<()> {
7555            encoder.debug_check_bounds::<CompositeInfo>(offset);
7556            encoder.write_num::<u64>(self.ordinal(), offset);
7557            match self {
7558            CompositeInfo::Composite(ref val) => {
7559                fidl::encoding::encode_in_envelope::<fidl_fuchsia_driver_framework_common::CompositeInfo, D>(
7560                    <fidl_fuchsia_driver_framework_common::CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow(val),
7561                    encoder, offset + 8, _depth
7562                )
7563            }
7564        }
7565        }
7566    }
7567
7568    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeInfo {
7569        #[inline(always)]
7570        fn new_empty() -> Self {
7571            Self::Composite(fidl::new_empty!(
7572                fidl_fuchsia_driver_framework_common::CompositeInfo,
7573                D
7574            ))
7575        }
7576
7577        #[inline]
7578        unsafe fn decode(
7579            &mut self,
7580            decoder: &mut fidl::encoding::Decoder<'_, D>,
7581            offset: usize,
7582            mut depth: fidl::encoding::Depth,
7583        ) -> fidl::Result<()> {
7584            decoder.debug_check_bounds::<Self>(offset);
7585            #[allow(unused_variables)]
7586            let next_out_of_line = decoder.next_out_of_line();
7587            let handles_before = decoder.remaining_handles();
7588            let (ordinal, inlined, num_bytes, num_handles) =
7589                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7590
7591            let member_inline_size = match ordinal {
7592            2 => <fidl_fuchsia_driver_framework_common::CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7593            _ => return Err(fidl::Error::UnknownUnionTag),
7594        };
7595
7596            if inlined != (member_inline_size <= 4) {
7597                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7598            }
7599            let _inner_offset;
7600            if inlined {
7601                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7602                _inner_offset = offset + 8;
7603            } else {
7604                depth.increment()?;
7605                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7606            }
7607            match ordinal {
7608                2 => {
7609                    #[allow(irrefutable_let_patterns)]
7610                    if let CompositeInfo::Composite(_) = self {
7611                        // Do nothing, read the value into the object
7612                    } else {
7613                        // Initialize `self` to the right variant
7614                        *self = CompositeInfo::Composite(fidl::new_empty!(
7615                            fidl_fuchsia_driver_framework_common::CompositeInfo,
7616                            D
7617                        ));
7618                    }
7619                    #[allow(irrefutable_let_patterns)]
7620                    if let CompositeInfo::Composite(ref mut val) = self {
7621                        fidl::decode!(
7622                            fidl_fuchsia_driver_framework_common::CompositeInfo,
7623                            D,
7624                            val,
7625                            decoder,
7626                            _inner_offset,
7627                            depth
7628                        )?;
7629                    } else {
7630                        unreachable!()
7631                    }
7632                }
7633                ordinal => panic!("unexpected ordinal {:?}", ordinal),
7634            }
7635            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
7636                return Err(fidl::Error::InvalidNumBytesInEnvelope);
7637            }
7638            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7639                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7640            }
7641            Ok(())
7642        }
7643    }
7644}