fidl_fuchsia_driver_framework/
fidl_fuchsia_driver_framework.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::client::QueryResponseFut;
8use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
9use fidl::endpoints::{ControlHandle as _, Responder as _};
10use futures::future::{self, MaybeDone, TryFutureExt};
11use zx_status;
12
13pub type NodeName = String;
14
15pub type NodeOffersVector = Vec<Offer>;
16
17pub type NodeProperties = Vec<NodeProperty2>;
18
19pub type NodePropertyDictionary = Vec<NodePropertyEntry>;
20
21pub type NodePropertyDictionary2 = Vec<NodePropertyEntry2>;
22
23pub type NodePropertyKeyString = String;
24
25pub type NodePropertyKeyUint = u32;
26
27pub type NodePropertyValueBool = bool;
28
29pub type NodePropertyValueEnum = String;
30
31pub type NodePropertyValueString = String;
32
33pub type NodePropertyValueUint = u32;
34
35pub type NodePropertyVector = Vec<NodeProperty>;
36
37pub const MAX_DEVICE_ADDRESS_ARRAY_LEN: u32 = 10;
38
39pub const MAX_DEVICE_ADDRESS_STR_LEN: u32 = 32;
40
41pub const MAX_MODULE_NAME_LENGTH: u8 = 128;
42
43pub const MAX_NAMESPACE_COUNT: u32 = fidl_fuchsia_component_runner::MAX_NAMESPACE_COUNT as u32;
44
45pub const MAX_NODE_NAME_LENGTH: u8 = 128;
46
47pub const MAX_OFFER_COUNT: u32 = fidl_fuchsia_component::MAX_DYNAMIC_OFFER_COUNT as u32;
48
49pub const MAX_PROPERTY_COUNT: u8 = 64;
50
51pub const MAX_RESOURCE_NAME_LENGTH: u8 = 128;
52
53pub const MAX_SYMBOL_COUNT: u8 = 64;
54
55pub const MAX_SYMBOL_NAME_LENGTH: u8 = 128;
56
57#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
58pub enum BusType {
59    Platform,
60    Acpi,
61    DeviceTree,
62    Pci,
63    Usb,
64    Gpio,
65    I2C,
66    Spi,
67    Sdio,
68    Uart,
69    Spmi,
70    #[doc(hidden)]
71    __SourceBreaking {
72        unknown_ordinal: u32,
73    },
74}
75
76/// Pattern that matches an unknown `BusType` member.
77#[macro_export]
78macro_rules! BusTypeUnknown {
79    () => {
80        _
81    };
82}
83
84impl BusType {
85    #[inline]
86    pub fn from_primitive(prim: u32) -> Option<Self> {
87        match prim {
88            1 => Some(Self::Platform),
89            2 => Some(Self::Acpi),
90            3 => Some(Self::DeviceTree),
91            4 => Some(Self::Pci),
92            5 => Some(Self::Usb),
93            6 => Some(Self::Gpio),
94            7 => Some(Self::I2C),
95            8 => Some(Self::Spi),
96            9 => Some(Self::Sdio),
97            10 => Some(Self::Uart),
98            11 => Some(Self::Spmi),
99            _ => None,
100        }
101    }
102
103    #[inline]
104    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
105        match prim {
106            1 => Self::Platform,
107            2 => Self::Acpi,
108            3 => Self::DeviceTree,
109            4 => Self::Pci,
110            5 => Self::Usb,
111            6 => Self::Gpio,
112            7 => Self::I2C,
113            8 => Self::Spi,
114            9 => Self::Sdio,
115            10 => Self::Uart,
116            11 => Self::Spmi,
117            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
118        }
119    }
120
121    #[inline]
122    pub fn unknown() -> Self {
123        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
124    }
125
126    #[inline]
127    pub const fn into_primitive(self) -> u32 {
128        match self {
129            Self::Platform => 1,
130            Self::Acpi => 2,
131            Self::DeviceTree => 3,
132            Self::Pci => 4,
133            Self::Usb => 5,
134            Self::Gpio => 6,
135            Self::I2C => 7,
136            Self::Spi => 8,
137            Self::Sdio => 9,
138            Self::Uart => 10,
139            Self::Spmi => 11,
140            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
141        }
142    }
143
144    #[inline]
145    pub fn is_unknown(&self) -> bool {
146        match self {
147            Self::__SourceBreaking { unknown_ordinal: _ } => true,
148            _ => false,
149        }
150    }
151}
152
153/// Error codes for the CompositeNodeManager protocol.
154#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
155pub enum CompositeNodeSpecError {
156    /// An argument of the composite node spec was not provided.
157    MissingArgs,
158    /// The given composite node spec's `nodes` is empty.
159    EmptyNodes,
160    /// The `name` in the given composite node spec is a duplicate of an already
161    /// created composite node spec.
162    AlreadyExists,
163    /// The spec failed to be added to the driver index.
164    DriverIndexFailure,
165    #[doc(hidden)]
166    __SourceBreaking { unknown_ordinal: u32 },
167}
168
169/// Pattern that matches an unknown `CompositeNodeSpecError` member.
170#[macro_export]
171macro_rules! CompositeNodeSpecErrorUnknown {
172    () => {
173        _
174    };
175}
176
177impl CompositeNodeSpecError {
178    #[inline]
179    pub fn from_primitive(prim: u32) -> Option<Self> {
180        match prim {
181            1 => Some(Self::MissingArgs),
182            2 => Some(Self::EmptyNodes),
183            3 => Some(Self::AlreadyExists),
184            4 => Some(Self::DriverIndexFailure),
185            _ => None,
186        }
187    }
188
189    #[inline]
190    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
191        match prim {
192            1 => Self::MissingArgs,
193            2 => Self::EmptyNodes,
194            3 => Self::AlreadyExists,
195            4 => Self::DriverIndexFailure,
196            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
197        }
198    }
199
200    #[inline]
201    pub fn unknown() -> Self {
202        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
203    }
204
205    #[inline]
206    pub const fn into_primitive(self) -> u32 {
207        match self {
208            Self::MissingArgs => 1,
209            Self::EmptyNodes => 2,
210            Self::AlreadyExists => 3,
211            Self::DriverIndexFailure => 4,
212            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
213        }
214    }
215
216    #[inline]
217    pub fn is_unknown(&self) -> bool {
218        match self {
219            Self::__SourceBreaking { unknown_ordinal: _ } => true,
220            _ => false,
221        }
222    }
223}
224
225/// Represents a bind rule condition.
226#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
227#[repr(u32)]
228pub enum Condition {
229    Unknown = 0,
230    Accept = 1,
231    Reject = 2,
232}
233
234impl Condition {
235    #[inline]
236    pub fn from_primitive(prim: u32) -> Option<Self> {
237        match prim {
238            0 => Some(Self::Unknown),
239            1 => Some(Self::Accept),
240            2 => Some(Self::Reject),
241            _ => None,
242        }
243    }
244
245    #[inline]
246    pub const fn into_primitive(self) -> u32 {
247        self as u32
248    }
249
250    #[deprecated = "Strict enums should not use `is_unknown`"]
251    #[inline]
252    pub fn is_unknown(&self) -> bool {
253        false
254    }
255}
256
257#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
258pub enum DeviceAddressStability {
259    /// When the driver is restarted, the device address may change.
260    UnstableBetweenDriverRestart,
261    /// When the system is restarted, the device address may change.
262    UnstableBetweenBoot,
263    /// When the system is updated, the device address may change.
264    UnstableBetweenSoftwareUpdate,
265    /// The device address on the bus is guaranteed stable for the lifetime of the system.
266    Stable,
267    #[doc(hidden)]
268    __SourceBreaking { unknown_ordinal: u32 },
269}
270
271/// Pattern that matches an unknown `DeviceAddressStability` member.
272#[macro_export]
273macro_rules! DeviceAddressStabilityUnknown {
274    () => {
275        _
276    };
277}
278
279impl DeviceAddressStability {
280    #[inline]
281    pub fn from_primitive(prim: u32) -> Option<Self> {
282        match prim {
283            0 => Some(Self::UnstableBetweenDriverRestart),
284            1 => Some(Self::UnstableBetweenBoot),
285            2 => Some(Self::UnstableBetweenSoftwareUpdate),
286            3 => Some(Self::Stable),
287            _ => None,
288        }
289    }
290
291    #[inline]
292    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
293        match prim {
294            0 => Self::UnstableBetweenDriverRestart,
295            1 => Self::UnstableBetweenBoot,
296            2 => Self::UnstableBetweenSoftwareUpdate,
297            3 => Self::Stable,
298            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
299        }
300    }
301
302    #[inline]
303    pub fn unknown() -> Self {
304        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
305    }
306
307    #[inline]
308    pub const fn into_primitive(self) -> u32 {
309        match self {
310            Self::UnstableBetweenDriverRestart => 0,
311            Self::UnstableBetweenBoot => 1,
312            Self::UnstableBetweenSoftwareUpdate => 2,
313            Self::Stable => 3,
314            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
315        }
316    }
317
318    #[inline]
319    pub fn is_unknown(&self) -> bool {
320        match self {
321            Self::__SourceBreaking { unknown_ordinal: _ } => true,
322            _ => false,
323        }
324    }
325}
326
327/// The type of Fuchsia package that a driver component is inside of.
328/// More details about the various package categories are available at:
329/// https://fuchsia.dev/fuchsia-src/concepts/packages/package#types_of_packages
330#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
331pub enum DriverPackageType {
332    /// BOOT packages are inside the Zircon boot image.
333    Boot,
334    /// BASE packages are included in the Fuchsia build as static local packages.
335    Base,
336    /// CACHED packages are BASE packages that can be updated during a resolve if a full package
337    /// resolver is available.
338    Cached,
339    /// UNIVERSE packages get onto the device only when resolved by the full package resolver.
340    Universe,
341    #[doc(hidden)]
342    __SourceBreaking { unknown_ordinal: u8 },
343}
344
345/// Pattern that matches an unknown `DriverPackageType` member.
346#[macro_export]
347macro_rules! DriverPackageTypeUnknown {
348    () => {
349        _
350    };
351}
352
353impl DriverPackageType {
354    #[inline]
355    pub fn from_primitive(prim: u8) -> Option<Self> {
356        match prim {
357            0 => Some(Self::Boot),
358            1 => Some(Self::Base),
359            2 => Some(Self::Cached),
360            3 => Some(Self::Universe),
361            _ => None,
362        }
363    }
364
365    #[inline]
366    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
367        match prim {
368            0 => Self::Boot,
369            1 => Self::Base,
370            2 => Self::Cached,
371            3 => Self::Universe,
372            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
373        }
374    }
375
376    #[inline]
377    pub fn unknown() -> Self {
378        Self::__SourceBreaking { unknown_ordinal: 0xff }
379    }
380
381    #[inline]
382    pub const fn into_primitive(self) -> u8 {
383        match self {
384            Self::Boot => 0,
385            Self::Base => 1,
386            Self::Cached => 2,
387            Self::Universe => 3,
388            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
389        }
390    }
391
392    #[inline]
393    pub fn is_unknown(&self) -> bool {
394        match self {
395            Self::__SourceBreaking { unknown_ordinal: _ } => true,
396            _ => false,
397        }
398    }
399}
400
401/// Error codes for the Node protocol.
402#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
403pub enum NodeError {
404    Internal,
405    NodeRemoved,
406    NameMissing,
407    /// The Node's name is invalid. Specifically, it must not contain a period
408    /// in its name.
409    NameInvalid,
410    /// A sibling Node exists with the same name.
411    NameAlreadyExists,
412    /// An offer for this Node is missing a source name.
413    OfferSourceNameMissing,
414    /// An offer for this Node should not have a source or target.
415    OfferRefExists,
416    /// A symbol for this Node is missing a name.
417    SymbolNameMissing,
418    /// A symbol for this Node is missing an address.
419    SymbolAddressMissing,
420    /// There is another symbol for this Node with the same name.
421    SymbolAlreadyExists,
422    /// The node is in the process of unbinding all of its children.
423    UnbindChildrenInProgress,
424    /// The Node contains unsupported arguments, such as deprecated property keys or offers.
425    UnsupportedArgs,
426    #[doc(hidden)]
427    __SourceBreaking {
428        unknown_ordinal: u32,
429    },
430}
431
432/// Pattern that matches an unknown `NodeError` member.
433#[macro_export]
434macro_rules! NodeErrorUnknown {
435    () => {
436        _
437    };
438}
439
440impl NodeError {
441    #[inline]
442    pub fn from_primitive(prim: u32) -> Option<Self> {
443        match prim {
444            1 => Some(Self::Internal),
445            2 => Some(Self::NodeRemoved),
446            3 => Some(Self::NameMissing),
447            4 => Some(Self::NameInvalid),
448            5 => Some(Self::NameAlreadyExists),
449            6 => Some(Self::OfferSourceNameMissing),
450            7 => Some(Self::OfferRefExists),
451            8 => Some(Self::SymbolNameMissing),
452            9 => Some(Self::SymbolAddressMissing),
453            10 => Some(Self::SymbolAlreadyExists),
454            11 => Some(Self::UnbindChildrenInProgress),
455            12 => Some(Self::UnsupportedArgs),
456            _ => None,
457        }
458    }
459
460    #[inline]
461    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
462        match prim {
463            1 => Self::Internal,
464            2 => Self::NodeRemoved,
465            3 => Self::NameMissing,
466            4 => Self::NameInvalid,
467            5 => Self::NameAlreadyExists,
468            6 => Self::OfferSourceNameMissing,
469            7 => Self::OfferRefExists,
470            8 => Self::SymbolNameMissing,
471            9 => Self::SymbolAddressMissing,
472            10 => Self::SymbolAlreadyExists,
473            11 => Self::UnbindChildrenInProgress,
474            12 => Self::UnsupportedArgs,
475            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
476        }
477    }
478
479    #[inline]
480    pub fn unknown() -> Self {
481        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
482    }
483
484    #[inline]
485    pub const fn into_primitive(self) -> u32 {
486        match self {
487            Self::Internal => 1,
488            Self::NodeRemoved => 2,
489            Self::NameMissing => 3,
490            Self::NameInvalid => 4,
491            Self::NameAlreadyExists => 5,
492            Self::OfferSourceNameMissing => 6,
493            Self::OfferRefExists => 7,
494            Self::SymbolNameMissing => 8,
495            Self::SymbolAddressMissing => 9,
496            Self::SymbolAlreadyExists => 10,
497            Self::UnbindChildrenInProgress => 11,
498            Self::UnsupportedArgs => 12,
499            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
500        }
501    }
502
503    #[inline]
504    pub fn is_unknown(&self) -> bool {
505        match self {
506            Self::__SourceBreaking { unknown_ordinal: _ } => true,
507            _ => false,
508        }
509    }
510}
511
512/// Represents a bind rule in a parent specification.
513#[derive(Clone, Debug, PartialEq)]
514pub struct BindRule {
515    /// Property key. Only string-based keys are supported.
516    pub key: NodePropertyKey,
517    /// Condition for evaluating the property values in
518    /// the matching process. The values must be ACCEPT
519    /// or REJECT.
520    pub condition: Condition,
521    /// A list of property values. Must not be empty. The property
522    /// values must be the same type.
523    pub values: Vec<NodePropertyValue>,
524}
525
526impl fidl::Persistable for BindRule {}
527
528#[derive(Debug, PartialEq)]
529pub struct DriverStartRequest {
530    pub start_args: DriverStartArgs,
531}
532
533impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for DriverStartRequest {}
534
535#[derive(Debug, PartialEq)]
536pub struct NodeAddChildRequest {
537    pub args: NodeAddArgs,
538    pub controller: fidl::endpoints::ServerEnd<NodeControllerMarker>,
539    pub node: Option<fidl::endpoints::ServerEnd<NodeMarker>>,
540}
541
542impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for NodeAddChildRequest {}
543
544/// Definition of a property for a node. A property is commonly used to match a
545/// node to a driver for driver binding.
546#[derive(Clone, Debug, PartialEq)]
547pub struct NodeProperty {
548    /// Key for the property. Integer-based keys are no longer supported. The NodePropertyKey
549    /// must be a string value.
550    pub key: NodePropertyKey,
551    /// Value for the property.
552    pub value: NodePropertyValue,
553}
554
555impl fidl::Persistable for NodeProperty {}
556
557#[derive(Clone, Debug, PartialEq)]
558pub struct NodeProperty2 {
559    /// Property key.
560    pub key: String,
561    /// Property value.
562    pub value: NodePropertyValue,
563}
564
565impl fidl::Persistable for NodeProperty2 {}
566
567/// Contains the node properties that belong to a node.
568#[derive(Clone, Debug, PartialEq)]
569pub struct NodePropertyEntry {
570    /// Name of the node that has |node_properties|.
571    pub name: String,
572    /// Node properties that belong to the node whose name is |node_name|. If
573    /// the node is a composite then |properties| is empty and does not contain
574    /// its parents' properties.
575    pub properties: Vec<NodeProperty>,
576}
577
578impl fidl::Persistable for NodePropertyEntry {}
579
580/// Contains the node properties that belong to a node.
581#[derive(Clone, Debug, PartialEq)]
582pub struct NodePropertyEntry2 {
583    /// Name of the node that has |node_properties|.
584    pub name: String,
585    /// Node properties that belong to the node whose name is |node_name|. If
586    /// the node is a composite then |properties| is empty and does not contain
587    /// its parents' properties.
588    pub properties: Vec<NodeProperty2>,
589}
590
591impl fidl::Persistable for NodePropertyEntry2 {}
592
593/// Specification for a node that parents the composite node created from the
594/// composite node specification.
595#[derive(Clone, Debug, PartialEq)]
596pub struct ParentSpec {
597    /// Parent's bind rules. Property keys must be unique. Must not be empty.
598    pub bind_rules: Vec<BindRule>,
599    /// Properties for matching against a composite driver's bind rules.
600    /// Keys must be unique and string-based.
601    pub properties: Vec<NodeProperty>,
602}
603
604impl fidl::Persistable for ParentSpec {}
605
606#[derive(Clone, Debug, Default, PartialEq)]
607pub struct BusInfo {
608    /// The type of bus this node sits on.
609    pub bus: Option<BusType>,
610    /// A unique identifier that describes the identity of this device on the given bus.
611    pub address: Option<DeviceAddress>,
612    /// How stable the address.
613    pub address_stability: Option<DeviceAddressStability>,
614    #[doc(hidden)]
615    pub __source_breaking: fidl::marker::SourceBreaking,
616}
617
618impl fidl::Persistable for BusInfo {}
619
620/// Information for a composite driver.
621#[derive(Clone, Debug, Default, PartialEq)]
622pub struct CompositeDriverInfo {
623    /// The name of the composite as specified in the driver's composite bind rules.
624    pub composite_name: Option<String>,
625    /// General information for the driver.
626    pub driver_info: Option<DriverInfo>,
627    #[doc(hidden)]
628    pub __source_breaking: fidl::marker::SourceBreaking,
629}
630
631impl fidl::Persistable for CompositeDriverInfo {}
632
633/// Information for a composite driver that has matched with a composite.
634#[derive(Clone, Debug, Default, PartialEq)]
635pub struct CompositeDriverMatch {
636    /// Information for the composite driver that has matched.
637    pub composite_driver: Option<CompositeDriverInfo>,
638    /// A list of all the parent names, ordered by index.
639    /// These names come from the node definitions in the driver's composite bind rules.
640    pub parent_names: Option<Vec<String>>,
641    /// The primary node index. Identified by the primary node in the driver's
642    /// composite bind rules.
643    pub primary_parent_index: Option<u32>,
644    #[doc(hidden)]
645    pub __source_breaking: fidl::marker::SourceBreaking,
646}
647
648impl fidl::Persistable for CompositeDriverMatch {}
649
650/// Information for a composite that is defined by a composite node spec.
651#[derive(Clone, Debug, Default, PartialEq)]
652pub struct CompositeInfo {
653    /// The spec information that this composite node spec was created with.
654    pub spec: Option<CompositeNodeSpec>,
655    /// Information for the node spec that is available only when a driver
656    /// has matched to the properties in this spec's parents.
657    pub matched_driver: Option<CompositeDriverMatch>,
658    #[doc(hidden)]
659    pub __source_breaking: fidl::marker::SourceBreaking,
660}
661
662impl fidl::Persistable for CompositeInfo {}
663
664/// Struct that represents a composite node specification.
665#[derive(Clone, Debug, Default, PartialEq)]
666pub struct CompositeNodeSpec {
667    /// The composite node spec's name.
668    pub name: Option<String>,
669    /// The nodes in the composite node spec. Must not be empty. The first node is
670    /// the primary node.
671    pub parents: Option<Vec<ParentSpec>>,
672    #[doc(hidden)]
673    pub __source_breaking: fidl::marker::SourceBreaking,
674}
675
676impl fidl::Persistable for CompositeNodeSpec {}
677
678/// A parent to a composite that is defined by a composite node spec.
679#[derive(Clone, Debug, Default, PartialEq)]
680pub struct CompositeParent {
681    /// Information about the composite that this is a parent of.
682    pub composite: Option<CompositeInfo>,
683    /// The index of this parent in the spec's parents.
684    pub index: Option<u32>,
685    #[doc(hidden)]
686    pub __source_breaking: fidl::marker::SourceBreaking,
687}
688
689impl fidl::Persistable for CompositeParent {}
690
691#[derive(Debug, Default, PartialEq)]
692pub struct DevfsAddArgs {
693    /// This is the connector to be installed in devfs.
694    /// `Connect()` will be called when a client connects to this node in the filesystem.
695    /// Optional: If this is not provided then an empty node will appear in devfs.
696    pub connector: Option<fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>>,
697    /// This is the class name for installing this node in devfs.
698    /// The node will be placed within /dev/class/{class_name}.
699    /// If `class_name` does not exist under /dev/class/ it will be created.
700    /// Optional: If this is not provided then the node will only be added via topological path.
701    pub class_name: Option<String>,
702    /// This is a vmo of inspect data that will be installed in devfs.
703    /// Optional: If this is not provided then the devfs's inspect data will be empty.
704    pub inspect: Option<fidl::Vmo>,
705    /// The connection types that are supported by the |connector| given.
706    /// The driver framework should handle connection types that are not supported by the
707    /// connector.
708    /// If not provided, only the device type is assumed as supported by the connector.
709    pub connector_supports: Option<fidl_fuchsia_device_fs::ConnectionType>,
710    /// This is the controller connector to be installed in devfs.
711    /// `Connect()` will be called when a client connects to the device_controller connection
712    /// for this node in the filesystem.
713    /// Optional: If this is not provided then the Node will handle the connection natively.
714    /// This option should only be used by the compat shim or in tests
715    pub controller_connector:
716        Option<fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>>,
717    #[doc(hidden)]
718    pub __source_breaking: fidl::marker::SourceBreaking,
719}
720
721impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for DevfsAddArgs {}
722
723/// Device categories as provided in the driver's component manifest.
724#[derive(Clone, Debug, Default, PartialEq)]
725pub struct DeviceCategory {
726    pub category: Option<String>,
727    pub subcategory: Option<String>,
728    #[doc(hidden)]
729    pub __source_breaking: fidl::marker::SourceBreaking,
730}
731
732impl fidl::Persistable for DeviceCategory {}
733
734/// General information for a driver, used with both composite and normal drivers.
735#[derive(Clone, Debug, Default, PartialEq)]
736pub struct DriverInfo {
737    /// URL of the driver component.
738    pub url: Option<String>,
739    /// Name of the driver, taken from the first field of the `ZIRCON_DRIVER`
740    /// macro in the driver.
741    pub name: Option<String>,
742    /// If this is true then the driver should be colocated in its parent's DriverHost.
743    pub colocate: Option<bool>,
744    /// The type of package this driver is in.
745    pub package_type: Option<DriverPackageType>,
746    /// If this is true then the driver is a fallback driver. Fallback drivers have a
747    /// lesser priority for binding, so they will only be chosen for binding if there
748    /// is no non-fallback driver that has matched.
749    pub is_fallback: Option<bool>,
750    /// Device categories
751    pub device_categories: Option<Vec<DeviceCategory>>,
752    /// Bind rules which declare set of constraints to evaluate in order to
753    /// determine whether the driver indexer should bind this driver to a
754    /// device.
755    pub bind_rules_bytecode: Option<Vec<u8>>,
756    /// The version of the driver framework that this driver is using.
757    /// Supported values are 1 (DFv1) and 2 (DFv2).
758    /// If not provided, 1 is the assumed version.
759    pub driver_framework_version: Option<u8>,
760    /// Whether the driver is disabled. If true, this driver is not chosen to bind to nodes.
761    pub is_disabled: Option<bool>,
762    #[doc(hidden)]
763    pub __source_breaking: fidl::marker::SourceBreaking,
764}
765
766impl fidl::Persistable for DriverInfo {}
767
768/// Arguments for starting a driver.
769#[derive(Debug, Default, PartialEq)]
770pub struct DriverStartArgs {
771    /// Node that the driver is bound to.
772    pub node: Option<fidl::endpoints::ClientEnd<NodeMarker>>,
773    /// Symbols provided to the driver, for |node|. These come from the driver
774    /// that added |node|, and are filtered to the symbols requested in the bind
775    /// program.
776    pub symbols: Option<Vec<NodeSymbol>>,
777    /// URL of the package containing the driver. This is purely informational,
778    /// used only to provide data for inspect.
779    pub url: Option<String>,
780    /// Information about the driver to start. Currently, we support the
781    /// following entries:
782    ///   1. "binary": a string containing the package-relative path to the
783    ///      driver binary.
784    ///   2. "colocate" (optional): a string containing "true" or "false"
785    ///      specifying whether the driver should be colocated in the same
786    ///      driver host as the driver that added |node|. If not specified, the
787    ///      driver will be launched in a new driver host.
788    ///   3. "default_dispatcher_opts" (optional): an array of strings specifying
789    ///      the options for creating the default dispatcher. A string can be one
790    ///      of the following:
791    ///      * `allow_sync_calls`: allows synchronous calls to be done on the
792    ///      default dispatcher's thread.
793    ///   4. "default_dispatcher_scheduler_role" (optional): the scheduler role to
794    ///      set for the default dispatcher created for the driver.
795    pub program: Option<fidl_fuchsia_data::Dictionary>,
796    /// Incoming namespace provided to the driver.
797    pub incoming: Option<Vec<fidl_fuchsia_component_runner::ComponentNamespaceEntry>>,
798    /// Outgoing directory served by the driver.
799    pub outgoing_dir: Option<fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>>,
800    /// Configuration passed to the driver.
801    pub config: Option<fidl::Vmo>,
802    /// The name of the node the driver is bound to.
803    pub node_name: Option<String>,
804    /// Node properties of the node the driver is bound to.
805    /// If the node is non-composite then the "default" entry will contain the
806    /// node's own properties.
807    /// If the node is a composite then there is an entry for each of its parents
808    /// and the "default" entry will reference the primary composite parent
809    /// node's properties. The composite parent node's properties are those that
810    /// were provided in the composite node specification and not the original
811    /// properties of the parent.
812    pub node_properties: Option<Vec<NodePropertyEntry>>,
813    /// Node offers of the node the driver is bound to.
814    pub node_offers: Option<Vec<Offer>>,
815    /// Provides a token representing this node which can be exchanged with the
816    /// driver framework to discern additional information about this node.
817    pub node_token: Option<fidl::Event>,
818    pub node_properties_2: Option<Vec<NodePropertyEntry2>>,
819    #[doc(hidden)]
820    pub __source_breaking: fidl::marker::SourceBreaking,
821}
822
823impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for DriverStartArgs {}
824
825/// Arguments for adding a node.
826#[derive(Debug, Default, PartialEq)]
827pub struct NodeAddArgs {
828    /// Name of the node.
829    pub name: Option<String>,
830    /// Capabilities to offer to the driver that is bound to this node.
831    /// The driver must ensure these capabilities are added to its outgoing directory
832    /// before adding the child node.
833    pub offers: Option<Vec<fidl_fuchsia_component_decl::Offer>>,
834    /// Functions to provide to the driver that is bound to this node.
835    pub symbols: Option<Vec<NodeSymbol>>,
836    /// Properties of the node. Deprecated: all new usages should set properties2 and leave
837    /// this field blank.
838    pub properties: Option<Vec<NodeProperty>>,
839    /// The arguments for how this node should be added to devfs.
840    pub devfs_args: Option<DevfsAddArgs>,
841    /// Capabilities to offer to the driver that is bound to this node.
842    /// The driver must ensure these capabilities are added to its outgoing directory
843    /// before adding the child node.
844    pub offers2: Option<Vec<Offer>>,
845    /// Information that feeds into a structured bus topology for the device. It should
846    /// only be specified by bus drivers, ideally those which are included by default.
847    pub bus_info: Option<BusInfo>,
848    /// Properties of the node. If set, the `properties` field must be blank. Otherwise,
849    /// adding the node will return an error.
850    pub properties2: Option<Vec<NodeProperty2>>,
851    #[doc(hidden)]
852    pub __source_breaking: fidl::marker::SourceBreaking,
853}
854
855impl fidl::Standalone<fidl::encoding::DefaultFuchsiaResourceDialect> for NodeAddArgs {}
856
857#[derive(Clone, Debug, Default, PartialEq)]
858pub struct NodeControllerRequestBindRequest {
859    /// If this is true, then the node unbinds from its matched driver before it attempts to
860    /// bind through the normal bind process.
861    pub force_rebind: Option<bool>,
862    /// If this is set, then only drivers matching this URL suffix will be considered in
863    /// binding.
864    /// E.g: "gpt.cm", "meta/gpt.cm", "fuchsia-boot:///#meta/gpt.cm".
865    pub driver_url_suffix: Option<String>,
866    #[doc(hidden)]
867    pub __source_breaking: fidl::marker::SourceBreaking,
868}
869
870impl fidl::Persistable for NodeControllerRequestBindRequest {}
871
872/// Definition of a symbol provided by a driver for a node. A symbol is local to
873/// a driver host.
874#[derive(Clone, Debug, Default, PartialEq)]
875pub struct NodeSymbol {
876    /// Name of the symbol.
877    pub name: Option<String>,
878    /// Virtual address of the symbol, within a driver host's process.
879    pub address: Option<u64>,
880    /// Module name that provided the symbol.
881    /// Will not be provided when the symbol originates from the primary parent.
882    pub module_name: Option<String>,
883    #[doc(hidden)]
884    pub __source_breaking: fidl::marker::SourceBreaking,
885}
886
887impl fidl::Persistable for NodeSymbol {}
888
889#[derive(Clone, Debug)]
890pub enum DeviceAddress {
891    /// A fixed integer id, eg a spi bus address
892    IntValue(u8),
893    /// An array of integers, eg a PCI BDF.
894    ArrayIntValue(Vec<u8>),
895    /// A uint32 value that can be interpretted as a 4 character sequence.
896    CharIntValue(String),
897    /// An array of character sequences, eg a ACPI node path.
898    ArrayCharIntValue(Vec<String>),
899    /// A generic string, eg the device tree node path.
900    StringValue(String),
901    #[doc(hidden)]
902    __SourceBreaking { unknown_ordinal: u64 },
903}
904
905/// Pattern that matches an unknown `DeviceAddress` member.
906#[macro_export]
907macro_rules! DeviceAddressUnknown {
908    () => {
909        _
910    };
911}
912
913// Custom PartialEq so that unknown variants are not equal to themselves.
914impl PartialEq for DeviceAddress {
915    fn eq(&self, other: &Self) -> bool {
916        match (self, other) {
917            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
918            (Self::ArrayIntValue(x), Self::ArrayIntValue(y)) => *x == *y,
919            (Self::CharIntValue(x), Self::CharIntValue(y)) => *x == *y,
920            (Self::ArrayCharIntValue(x), Self::ArrayCharIntValue(y)) => *x == *y,
921            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
922            _ => false,
923        }
924    }
925}
926
927impl DeviceAddress {
928    #[inline]
929    pub fn ordinal(&self) -> u64 {
930        match *self {
931            Self::IntValue(_) => 1,
932            Self::ArrayIntValue(_) => 2,
933            Self::CharIntValue(_) => 3,
934            Self::ArrayCharIntValue(_) => 4,
935            Self::StringValue(_) => 5,
936            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
937        }
938    }
939
940    #[inline]
941    pub fn unknown_variant_for_testing() -> Self {
942        Self::__SourceBreaking { unknown_ordinal: 0 }
943    }
944
945    #[inline]
946    pub fn is_unknown(&self) -> bool {
947        match self {
948            Self::__SourceBreaking { .. } => true,
949            _ => false,
950        }
951    }
952}
953
954impl fidl::Persistable for DeviceAddress {}
955
956#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
957pub enum NodePropertyKey {
958    /// Integer-based keys are no longer supported. Use |string_value| instead.
959    IntValue(u32),
960    StringValue(String),
961}
962
963impl NodePropertyKey {
964    #[inline]
965    pub fn ordinal(&self) -> u64 {
966        match *self {
967            Self::IntValue(_) => 1,
968            Self::StringValue(_) => 2,
969        }
970    }
971
972    #[deprecated = "Strict unions should not use `is_unknown`"]
973    #[inline]
974    pub fn is_unknown(&self) -> bool {
975        false
976    }
977}
978
979impl fidl::Persistable for NodePropertyKey {}
980
981#[derive(Clone, Debug)]
982pub enum NodePropertyValue {
983    IntValue(u32),
984    StringValue(String),
985    BoolValue(bool),
986    EnumValue(String),
987    #[doc(hidden)]
988    __SourceBreaking {
989        unknown_ordinal: u64,
990    },
991}
992
993/// Pattern that matches an unknown `NodePropertyValue` member.
994#[macro_export]
995macro_rules! NodePropertyValueUnknown {
996    () => {
997        _
998    };
999}
1000
1001// Custom PartialEq so that unknown variants are not equal to themselves.
1002impl PartialEq for NodePropertyValue {
1003    fn eq(&self, other: &Self) -> bool {
1004        match (self, other) {
1005            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
1006            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
1007            (Self::BoolValue(x), Self::BoolValue(y)) => *x == *y,
1008            (Self::EnumValue(x), Self::EnumValue(y)) => *x == *y,
1009            _ => false,
1010        }
1011    }
1012}
1013
1014impl NodePropertyValue {
1015    #[inline]
1016    pub fn ordinal(&self) -> u64 {
1017        match *self {
1018            Self::IntValue(_) => 1,
1019            Self::StringValue(_) => 2,
1020            Self::BoolValue(_) => 3,
1021            Self::EnumValue(_) => 4,
1022            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1023        }
1024    }
1025
1026    #[inline]
1027    pub fn unknown_variant_for_testing() -> Self {
1028        Self::__SourceBreaking { unknown_ordinal: 0 }
1029    }
1030
1031    #[inline]
1032    pub fn is_unknown(&self) -> bool {
1033        match self {
1034            Self::__SourceBreaking { .. } => true,
1035            _ => false,
1036        }
1037    }
1038}
1039
1040impl fidl::Persistable for NodePropertyValue {}
1041
1042#[derive(Clone, Debug)]
1043pub enum Offer {
1044    ZirconTransport(fidl_fuchsia_component_decl::Offer),
1045    DriverTransport(fidl_fuchsia_component_decl::Offer),
1046    #[doc(hidden)]
1047    __SourceBreaking {
1048        unknown_ordinal: u64,
1049    },
1050}
1051
1052/// Pattern that matches an unknown `Offer` member.
1053#[macro_export]
1054macro_rules! OfferUnknown {
1055    () => {
1056        _
1057    };
1058}
1059
1060// Custom PartialEq so that unknown variants are not equal to themselves.
1061impl PartialEq for Offer {
1062    fn eq(&self, other: &Self) -> bool {
1063        match (self, other) {
1064            (Self::ZirconTransport(x), Self::ZirconTransport(y)) => *x == *y,
1065            (Self::DriverTransport(x), Self::DriverTransport(y)) => *x == *y,
1066            _ => false,
1067        }
1068    }
1069}
1070
1071impl Offer {
1072    #[inline]
1073    pub fn ordinal(&self) -> u64 {
1074        match *self {
1075            Self::ZirconTransport(_) => 1,
1076            Self::DriverTransport(_) => 2,
1077            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1078        }
1079    }
1080
1081    #[inline]
1082    pub fn unknown_variant_for_testing() -> Self {
1083        Self::__SourceBreaking { unknown_ordinal: 0 }
1084    }
1085
1086    #[inline]
1087    pub fn is_unknown(&self) -> bool {
1088        match self {
1089            Self::__SourceBreaking { .. } => true,
1090            _ => false,
1091        }
1092    }
1093}
1094
1095impl fidl::Persistable for Offer {}
1096
1097#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1098pub struct CompositeNodeManagerMarker;
1099
1100impl fidl::endpoints::ProtocolMarker for CompositeNodeManagerMarker {
1101    type Proxy = CompositeNodeManagerProxy;
1102    type RequestStream = CompositeNodeManagerRequestStream;
1103    #[cfg(target_os = "fuchsia")]
1104    type SynchronousProxy = CompositeNodeManagerSynchronousProxy;
1105
1106    const DEBUG_NAME: &'static str = "fuchsia.driver.framework.CompositeNodeManager";
1107}
1108impl fidl::endpoints::DiscoverableProtocolMarker for CompositeNodeManagerMarker {}
1109pub type CompositeNodeManagerAddSpecResult = Result<(), CompositeNodeSpecError>;
1110
1111pub trait CompositeNodeManagerProxyInterface: Send + Sync {
1112    type AddSpecResponseFut: std::future::Future<Output = Result<CompositeNodeManagerAddSpecResult, fidl::Error>>
1113        + Send;
1114    fn r#add_spec(&self, payload: &CompositeNodeSpec) -> Self::AddSpecResponseFut;
1115}
1116#[derive(Debug)]
1117#[cfg(target_os = "fuchsia")]
1118pub struct CompositeNodeManagerSynchronousProxy {
1119    client: fidl::client::sync::Client,
1120}
1121
1122#[cfg(target_os = "fuchsia")]
1123impl fidl::endpoints::SynchronousProxy for CompositeNodeManagerSynchronousProxy {
1124    type Proxy = CompositeNodeManagerProxy;
1125    type Protocol = CompositeNodeManagerMarker;
1126
1127    fn from_channel(inner: fidl::Channel) -> Self {
1128        Self::new(inner)
1129    }
1130
1131    fn into_channel(self) -> fidl::Channel {
1132        self.client.into_channel()
1133    }
1134
1135    fn as_channel(&self) -> &fidl::Channel {
1136        self.client.as_channel()
1137    }
1138}
1139
1140#[cfg(target_os = "fuchsia")]
1141impl CompositeNodeManagerSynchronousProxy {
1142    pub fn new(channel: fidl::Channel) -> Self {
1143        let protocol_name =
1144            <CompositeNodeManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1145        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1146    }
1147
1148    pub fn into_channel(self) -> fidl::Channel {
1149        self.client.into_channel()
1150    }
1151
1152    /// Waits until an event arrives and returns it. It is safe for other
1153    /// threads to make concurrent requests while waiting for an event.
1154    pub fn wait_for_event(
1155        &self,
1156        deadline: zx::MonotonicInstant,
1157    ) -> Result<CompositeNodeManagerEvent, fidl::Error> {
1158        CompositeNodeManagerEvent::decode(self.client.wait_for_event(deadline)?)
1159    }
1160
1161    /// Adds the given composite node specification to the driver framework.
1162    pub fn r#add_spec(
1163        &self,
1164        mut payload: &CompositeNodeSpec,
1165        ___deadline: zx::MonotonicInstant,
1166    ) -> Result<CompositeNodeManagerAddSpecResult, fidl::Error> {
1167        let _response =
1168            self.client
1169                .send_query::<CompositeNodeSpec, fidl::encoding::FlexibleResultType<
1170                    fidl::encoding::EmptyStruct,
1171                    CompositeNodeSpecError,
1172                >>(
1173                    payload,
1174                    0x524e353c8130cc74,
1175                    fidl::encoding::DynamicFlags::FLEXIBLE,
1176                    ___deadline,
1177                )?
1178                .into_result::<CompositeNodeManagerMarker>("add_spec")?;
1179        Ok(_response.map(|x| x))
1180    }
1181}
1182
1183#[derive(Debug, Clone)]
1184pub struct CompositeNodeManagerProxy {
1185    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1186}
1187
1188impl fidl::endpoints::Proxy for CompositeNodeManagerProxy {
1189    type Protocol = CompositeNodeManagerMarker;
1190
1191    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1192        Self::new(inner)
1193    }
1194
1195    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1196        self.client.into_channel().map_err(|client| Self { client })
1197    }
1198
1199    fn as_channel(&self) -> &::fidl::AsyncChannel {
1200        self.client.as_channel()
1201    }
1202}
1203
1204impl CompositeNodeManagerProxy {
1205    /// Create a new Proxy for fuchsia.driver.framework/CompositeNodeManager.
1206    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1207        let protocol_name =
1208            <CompositeNodeManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1209        Self { client: fidl::client::Client::new(channel, protocol_name) }
1210    }
1211
1212    /// Get a Stream of events from the remote end of the protocol.
1213    ///
1214    /// # Panics
1215    ///
1216    /// Panics if the event stream was already taken.
1217    pub fn take_event_stream(&self) -> CompositeNodeManagerEventStream {
1218        CompositeNodeManagerEventStream { event_receiver: self.client.take_event_receiver() }
1219    }
1220
1221    /// Adds the given composite node specification to the driver framework.
1222    pub fn r#add_spec(
1223        &self,
1224        mut payload: &CompositeNodeSpec,
1225    ) -> fidl::client::QueryResponseFut<
1226        CompositeNodeManagerAddSpecResult,
1227        fidl::encoding::DefaultFuchsiaResourceDialect,
1228    > {
1229        CompositeNodeManagerProxyInterface::r#add_spec(self, payload)
1230    }
1231}
1232
1233impl CompositeNodeManagerProxyInterface for CompositeNodeManagerProxy {
1234    type AddSpecResponseFut = fidl::client::QueryResponseFut<
1235        CompositeNodeManagerAddSpecResult,
1236        fidl::encoding::DefaultFuchsiaResourceDialect,
1237    >;
1238    fn r#add_spec(&self, mut payload: &CompositeNodeSpec) -> Self::AddSpecResponseFut {
1239        fn _decode(
1240            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
1241        ) -> Result<CompositeNodeManagerAddSpecResult, fidl::Error> {
1242            let _response = fidl::client::decode_transaction_body::<
1243                fidl::encoding::FlexibleResultType<
1244                    fidl::encoding::EmptyStruct,
1245                    CompositeNodeSpecError,
1246                >,
1247                fidl::encoding::DefaultFuchsiaResourceDialect,
1248                0x524e353c8130cc74,
1249            >(_buf?)?
1250            .into_result::<CompositeNodeManagerMarker>("add_spec")?;
1251            Ok(_response.map(|x| x))
1252        }
1253        self.client.send_query_and_decode::<CompositeNodeSpec, CompositeNodeManagerAddSpecResult>(
1254            payload,
1255            0x524e353c8130cc74,
1256            fidl::encoding::DynamicFlags::FLEXIBLE,
1257            _decode,
1258        )
1259    }
1260}
1261
1262pub struct CompositeNodeManagerEventStream {
1263    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
1264}
1265
1266impl std::marker::Unpin for CompositeNodeManagerEventStream {}
1267
1268impl futures::stream::FusedStream for CompositeNodeManagerEventStream {
1269    fn is_terminated(&self) -> bool {
1270        self.event_receiver.is_terminated()
1271    }
1272}
1273
1274impl futures::Stream for CompositeNodeManagerEventStream {
1275    type Item = Result<CompositeNodeManagerEvent, fidl::Error>;
1276
1277    fn poll_next(
1278        mut self: std::pin::Pin<&mut Self>,
1279        cx: &mut std::task::Context<'_>,
1280    ) -> std::task::Poll<Option<Self::Item>> {
1281        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
1282            &mut self.event_receiver,
1283            cx
1284        )?) {
1285            Some(buf) => std::task::Poll::Ready(Some(CompositeNodeManagerEvent::decode(buf))),
1286            None => std::task::Poll::Ready(None),
1287        }
1288    }
1289}
1290
1291#[derive(Debug)]
1292pub enum CompositeNodeManagerEvent {
1293    #[non_exhaustive]
1294    _UnknownEvent {
1295        /// Ordinal of the event that was sent.
1296        ordinal: u64,
1297    },
1298}
1299
1300impl CompositeNodeManagerEvent {
1301    /// Decodes a message buffer as a [`CompositeNodeManagerEvent`].
1302    fn decode(
1303        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
1304    ) -> Result<CompositeNodeManagerEvent, fidl::Error> {
1305        let (bytes, _handles) = buf.split_mut();
1306        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1307        debug_assert_eq!(tx_header.tx_id, 0);
1308        match tx_header.ordinal {
1309            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1310                Ok(CompositeNodeManagerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
1311            }
1312            _ => Err(fidl::Error::UnknownOrdinal {
1313                ordinal: tx_header.ordinal,
1314                protocol_name:
1315                    <CompositeNodeManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1316            }),
1317        }
1318    }
1319}
1320
1321/// A Stream of incoming requests for fuchsia.driver.framework/CompositeNodeManager.
1322pub struct CompositeNodeManagerRequestStream {
1323    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1324    is_terminated: bool,
1325}
1326
1327impl std::marker::Unpin for CompositeNodeManagerRequestStream {}
1328
1329impl futures::stream::FusedStream for CompositeNodeManagerRequestStream {
1330    fn is_terminated(&self) -> bool {
1331        self.is_terminated
1332    }
1333}
1334
1335impl fidl::endpoints::RequestStream for CompositeNodeManagerRequestStream {
1336    type Protocol = CompositeNodeManagerMarker;
1337    type ControlHandle = CompositeNodeManagerControlHandle;
1338
1339    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
1340        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
1341    }
1342
1343    fn control_handle(&self) -> Self::ControlHandle {
1344        CompositeNodeManagerControlHandle { inner: self.inner.clone() }
1345    }
1346
1347    fn into_inner(
1348        self,
1349    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
1350    {
1351        (self.inner, self.is_terminated)
1352    }
1353
1354    fn from_inner(
1355        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1356        is_terminated: bool,
1357    ) -> Self {
1358        Self { inner, is_terminated }
1359    }
1360}
1361
1362impl futures::Stream for CompositeNodeManagerRequestStream {
1363    type Item = Result<CompositeNodeManagerRequest, fidl::Error>;
1364
1365    fn poll_next(
1366        mut self: std::pin::Pin<&mut Self>,
1367        cx: &mut std::task::Context<'_>,
1368    ) -> std::task::Poll<Option<Self::Item>> {
1369        let this = &mut *self;
1370        if this.inner.check_shutdown(cx) {
1371            this.is_terminated = true;
1372            return std::task::Poll::Ready(None);
1373        }
1374        if this.is_terminated {
1375            panic!("polled CompositeNodeManagerRequestStream after completion");
1376        }
1377        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
1378            |bytes, handles| {
1379                match this.inner.channel().read_etc(cx, bytes, handles) {
1380                    std::task::Poll::Ready(Ok(())) => {}
1381                    std::task::Poll::Pending => return std::task::Poll::Pending,
1382                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
1383                        this.is_terminated = true;
1384                        return std::task::Poll::Ready(None);
1385                    }
1386                    std::task::Poll::Ready(Err(e)) => {
1387                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
1388                            e.into(),
1389                        ))))
1390                    }
1391                }
1392
1393                // A message has been received from the channel
1394                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1395
1396                std::task::Poll::Ready(Some(match header.ordinal {
1397                0x524e353c8130cc74 => {
1398                    header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1399                    let mut req = fidl::new_empty!(CompositeNodeSpec, fidl::encoding::DefaultFuchsiaResourceDialect);
1400                    fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<CompositeNodeSpec>(&header, _body_bytes, handles, &mut req)?;
1401                    let control_handle = CompositeNodeManagerControlHandle {
1402                        inner: this.inner.clone(),
1403                    };
1404                    Ok(CompositeNodeManagerRequest::AddSpec {payload: req,
1405                        responder: CompositeNodeManagerAddSpecResponder {
1406                            control_handle: std::mem::ManuallyDrop::new(control_handle),
1407                            tx_id: header.tx_id,
1408                        },
1409                    })
1410                }
1411                _ if header.tx_id == 0 && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1412                    Ok(CompositeNodeManagerRequest::_UnknownMethod {
1413                        ordinal: header.ordinal,
1414                        control_handle: CompositeNodeManagerControlHandle { inner: this.inner.clone() },
1415                        method_type: fidl::MethodType::OneWay,
1416                    })
1417                }
1418                _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1419                    this.inner.send_framework_err(
1420                        fidl::encoding::FrameworkErr::UnknownMethod,
1421                        header.tx_id,
1422                        header.ordinal,
1423                        header.dynamic_flags(),
1424                        (bytes, handles),
1425                    )?;
1426                    Ok(CompositeNodeManagerRequest::_UnknownMethod {
1427                        ordinal: header.ordinal,
1428                        control_handle: CompositeNodeManagerControlHandle { inner: this.inner.clone() },
1429                        method_type: fidl::MethodType::TwoWay,
1430                    })
1431                }
1432                _ => Err(fidl::Error::UnknownOrdinal {
1433                    ordinal: header.ordinal,
1434                    protocol_name: <CompositeNodeManagerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
1435                }),
1436            }))
1437            },
1438        )
1439    }
1440}
1441
1442/// Protocol through which board drivers can create composite node specs.
1443///
1444/// Composite node specs are created at runtime to dynamically bridge the
1445/// static bind rules of a composite driver with the dynamic bind properties
1446/// of nodes in the system so that the driver bind rules are more generic and reusable.
1447#[derive(Debug)]
1448pub enum CompositeNodeManagerRequest {
1449    /// Adds the given composite node specification to the driver framework.
1450    AddSpec { payload: CompositeNodeSpec, responder: CompositeNodeManagerAddSpecResponder },
1451    /// An interaction was received which does not match any known method.
1452    #[non_exhaustive]
1453    _UnknownMethod {
1454        /// Ordinal of the method that was called.
1455        ordinal: u64,
1456        control_handle: CompositeNodeManagerControlHandle,
1457        method_type: fidl::MethodType,
1458    },
1459}
1460
1461impl CompositeNodeManagerRequest {
1462    #[allow(irrefutable_let_patterns)]
1463    pub fn into_add_spec(
1464        self,
1465    ) -> Option<(CompositeNodeSpec, CompositeNodeManagerAddSpecResponder)> {
1466        if let CompositeNodeManagerRequest::AddSpec { payload, responder } = self {
1467            Some((payload, responder))
1468        } else {
1469            None
1470        }
1471    }
1472
1473    /// Name of the method defined in FIDL
1474    pub fn method_name(&self) -> &'static str {
1475        match *self {
1476            CompositeNodeManagerRequest::AddSpec { .. } => "add_spec",
1477            CompositeNodeManagerRequest::_UnknownMethod {
1478                method_type: fidl::MethodType::OneWay,
1479                ..
1480            } => "unknown one-way method",
1481            CompositeNodeManagerRequest::_UnknownMethod {
1482                method_type: fidl::MethodType::TwoWay,
1483                ..
1484            } => "unknown two-way method",
1485        }
1486    }
1487}
1488
1489#[derive(Debug, Clone)]
1490pub struct CompositeNodeManagerControlHandle {
1491    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
1492}
1493
1494impl fidl::endpoints::ControlHandle for CompositeNodeManagerControlHandle {
1495    fn shutdown(&self) {
1496        self.inner.shutdown()
1497    }
1498    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
1499        self.inner.shutdown_with_epitaph(status)
1500    }
1501
1502    fn is_closed(&self) -> bool {
1503        self.inner.channel().is_closed()
1504    }
1505    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
1506        self.inner.channel().on_closed()
1507    }
1508
1509    #[cfg(target_os = "fuchsia")]
1510    fn signal_peer(
1511        &self,
1512        clear_mask: zx::Signals,
1513        set_mask: zx::Signals,
1514    ) -> Result<(), zx_status::Status> {
1515        use fidl::Peered;
1516        self.inner.channel().signal_peer(clear_mask, set_mask)
1517    }
1518}
1519
1520impl CompositeNodeManagerControlHandle {}
1521
1522#[must_use = "FIDL methods require a response to be sent"]
1523#[derive(Debug)]
1524pub struct CompositeNodeManagerAddSpecResponder {
1525    control_handle: std::mem::ManuallyDrop<CompositeNodeManagerControlHandle>,
1526    tx_id: u32,
1527}
1528
1529/// Set the the channel to be shutdown (see [`CompositeNodeManagerControlHandle::shutdown`])
1530/// if the responder is dropped without sending a response, so that the client
1531/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
1532impl std::ops::Drop for CompositeNodeManagerAddSpecResponder {
1533    fn drop(&mut self) {
1534        self.control_handle.shutdown();
1535        // Safety: drops once, never accessed again
1536        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1537    }
1538}
1539
1540impl fidl::endpoints::Responder for CompositeNodeManagerAddSpecResponder {
1541    type ControlHandle = CompositeNodeManagerControlHandle;
1542
1543    fn control_handle(&self) -> &CompositeNodeManagerControlHandle {
1544        &self.control_handle
1545    }
1546
1547    fn drop_without_shutdown(mut self) {
1548        // Safety: drops once, never accessed again due to mem::forget
1549        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
1550        // Prevent Drop from running (which would shut down the channel)
1551        std::mem::forget(self);
1552    }
1553}
1554
1555impl CompositeNodeManagerAddSpecResponder {
1556    /// Sends a response to the FIDL transaction.
1557    ///
1558    /// Sets the channel to shutdown if an error occurs.
1559    pub fn send(self, mut result: Result<(), CompositeNodeSpecError>) -> Result<(), fidl::Error> {
1560        let _result = self.send_raw(result);
1561        if _result.is_err() {
1562            self.control_handle.shutdown();
1563        }
1564        self.drop_without_shutdown();
1565        _result
1566    }
1567
1568    /// Similar to "send" but does not shutdown the channel if an error occurs.
1569    pub fn send_no_shutdown_on_err(
1570        self,
1571        mut result: Result<(), CompositeNodeSpecError>,
1572    ) -> Result<(), fidl::Error> {
1573        let _result = self.send_raw(result);
1574        self.drop_without_shutdown();
1575        _result
1576    }
1577
1578    fn send_raw(&self, mut result: Result<(), CompositeNodeSpecError>) -> Result<(), fidl::Error> {
1579        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
1580            fidl::encoding::EmptyStruct,
1581            CompositeNodeSpecError,
1582        >>(
1583            fidl::encoding::FlexibleResult::new(result),
1584            self.tx_id,
1585            0x524e353c8130cc74,
1586            fidl::encoding::DynamicFlags::FLEXIBLE,
1587        )
1588    }
1589}
1590
1591#[cfg(feature = "driver")]
1592#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1593pub struct DriverMarker;
1594
1595#[cfg(feature = "driver")]
1596impl fidl_driver::endpoints::DriverProtocolMarker for DriverMarker {
1597    const DEBUG_NAME: &'static str = "(anonymous) Driver";
1598}
1599pub type DriverStartResult = Result<(), i32>;
1600
1601/// This protocol is used by the Driver Framework's Driver Host to communicate various messages and
1602/// lifecycle hooks to the driver. The connection for this protocol is established through the
1603/// |DriverRegistration| defined in the `driver_symbols` library.
1604///
1605/// Once the driver has closed its server end, the Driver Framework will initiate the shutdown
1606/// of all dispatchers belonging to this driver.
1607
1608#[cfg(feature = "driver")]
1609#[derive(Debug)]
1610pub enum DriverRequest {
1611    /// Starts the driver with the given |start_args|.
1612    ///
1613    /// Drivers should finish their initial setup and enumeration before returning from |Start|.
1614    /// In particular they should enumerate all currently available nodes by utilizing
1615    /// `fuchsia.driver.framework/Node.AddChild` and waiting for all calls to be completed.
1616    ///
1617    /// The Framework will not consider the driver to be started until this call has returned
1618    /// successfully. Therefore a driver will not have |Stop| called on it until after it has
1619    /// replied to |Start| successfully.
1620    ///
1621    /// If a driver returns an error, it will not have |Stop| called on it before the
1622    /// Driver Framework initiates shutdown of the driver's dispatchers. Therefore it should have
1623    /// performed all necessary cleanup before returning an error.
1624    Start { start_args: DriverStartArgs, responder: DriverStartResponder },
1625    /// Stops the driver. To stop, the driver should teardown any resources it set up in or after
1626    /// |Start|. This is a one-way FIDL method. When the driver has completed stopping, it should
1627    /// close its server end. Asynchronous operations should fully complete before closing
1628    /// the server end.
1629    Stop {},
1630    /// An interaction was received which does not match any known method.
1631    #[non_exhaustive]
1632    _UnknownMethod {
1633        /// Ordinal of the method that was called.
1634        ordinal: u64,
1635        method_type: fidl::MethodType,
1636    },
1637}
1638
1639#[cfg(feature = "driver")]
1640impl DriverRequest {
1641    #[allow(irrefutable_let_patterns)]
1642    pub fn into_start(self) -> Option<(DriverStartArgs, DriverStartResponder)> {
1643        if let DriverRequest::Start { start_args, responder } = self {
1644            Some((start_args, responder))
1645        } else {
1646            None
1647        }
1648    }
1649
1650    #[allow(irrefutable_let_patterns)]
1651    pub fn into_stop(self) -> Option<()> {
1652        if let DriverRequest::Stop {} = self {
1653            Some(())
1654        } else {
1655            None
1656        }
1657    }
1658
1659    pub fn new_start(self, start_args: DriverStartArgs, tx_id: u32) -> Self {
1660        Self::Start { start_args, responder: DriverStartResponder { tx_id } }
1661    }
1662
1663    pub fn new_stop(self) -> Self {
1664        Self::Stop {}
1665    }
1666
1667    pub fn r#start_as_message(
1668        arena: fdf::Arena,
1669        mut start_args: DriverStartArgs,
1670        tx_id: u32,
1671    ) -> Result<fdf::Message<[u8]>, fidl::Error> {
1672        let ordinal = 0x27be00ae42aa60c2;
1673        let dynamic_flags = fidl::encoding::DynamicFlags::FLEXIBLE;
1674        let body = (&mut start_args,);
1675        let msg = fidl::encoding::TransactionMessage {
1676            header: fidl::encoding::TransactionHeader::new(tx_id, ordinal, dynamic_flags),
1677            body,
1678        };
1679        fidl::encoding::with_tls_encoded::<
1680            fidl::encoding::TransactionMessageType<DriverStartRequest>,
1681            fidl::encoding::DefaultFuchsiaResourceDialect,
1682            fdf::Message<[u8]>,
1683        >(msg, |bytes, mut handles| {
1684            let handles = arena.insert_from_iter(
1685                std::mem::take(handles)
1686                    .into_iter()
1687                    .map(fidl_driver::encoding::mixed_from_handle_disposition),
1688            );
1689            Ok(fdf::Message::new(&arena, Some(arena.insert_slice(bytes)), Some(handles)))
1690        })
1691    }
1692
1693    pub fn r#stop_as_message(arena: fdf::Arena) -> Result<fdf::Message<[u8]>, fidl::Error> {
1694        let tx_id = 0;
1695        let ordinal = 0x4b96c67e29b3843d;
1696        let dynamic_flags = fidl::encoding::DynamicFlags::FLEXIBLE;
1697        let body = ();
1698        let msg = fidl::encoding::TransactionMessage {
1699            header: fidl::encoding::TransactionHeader::new(tx_id, ordinal, dynamic_flags),
1700            body,
1701        };
1702        fidl::encoding::with_tls_encoded::<
1703            fidl::encoding::TransactionMessageType<fidl::encoding::EmptyPayload>,
1704            fidl::encoding::DefaultFuchsiaResourceDialect,
1705            fdf::Message<[u8]>,
1706        >(msg, |bytes, mut handles| {
1707            let handles = arena.insert_from_iter(
1708                std::mem::take(handles)
1709                    .into_iter()
1710                    .map(fidl_driver::encoding::mixed_from_handle_disposition),
1711            );
1712            Ok(fdf::Message::new(&arena, Some(arena.insert_slice(bytes)), Some(handles)))
1713        })
1714    }
1715
1716    #[allow(irrefutable_let_patterns)]
1717    pub fn read_from(bytes: &[u8], _handles: &mut [zx::HandleInfo]) -> Result<Self, fidl::Error> {
1718        let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
1719
1720        match header.ordinal {
1721            0x27be00ae42aa60c2 => {
1722                header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
1723                let mut req = fidl::new_empty!(
1724                    DriverStartRequest,
1725                    fidl::encoding::DefaultFuchsiaResourceDialect
1726                );
1727                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<DriverStartRequest>(&header, _body_bytes, _handles, &mut req)?;
1728                Ok(DriverRequest::Start {
1729                    start_args: req.start_args,
1730
1731                    responder: DriverStartResponder { tx_id: header.tx_id },
1732                })
1733            }
1734            0x4b96c67e29b3843d => {
1735                header.validate_request_tx_id(fidl::MethodType::OneWay)?;
1736                let mut req = fidl::new_empty!(
1737                    fidl::encoding::EmptyPayload,
1738                    fidl::encoding::DefaultFuchsiaResourceDialect
1739                );
1740                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, _handles, &mut req)?;
1741                Ok(DriverRequest::Stop {})
1742            }
1743            _ if header.tx_id == 0
1744                && header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
1745            {
1746                Ok(DriverRequest::_UnknownMethod {
1747                    ordinal: header.ordinal,
1748                    method_type: fidl::MethodType::OneWay,
1749                })
1750            }
1751            _ if header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
1752                Ok(DriverRequest::_UnknownMethod {
1753                    ordinal: header.ordinal,
1754                    method_type: fidl::MethodType::TwoWay,
1755                })
1756            }
1757            _ => Err(fidl::Error::UnknownOrdinal {
1758                ordinal: header.ordinal,
1759                protocol_name:
1760                    <DriverMarker as fidl_driver::endpoints::DriverProtocolMarker>::DEBUG_NAME,
1761            }),
1762        }
1763    }
1764
1765    pub fn read_from_message(
1766        mut message: fdf::Message<[u8]>,
1767    ) -> Result<(fdf::Arena, Self), fidl::Error> {
1768        let (arena, Some(body), Some(handles)) = message.take_arena_boxes() else {
1769            return Err(fidl::Error::Invalid);
1770        };
1771        let mut handles = arena.try_insert_from_iter(
1772            handles
1773                .into_iter()
1774                .map(|handle| unsafe { fidl_driver::encoding::mixed_into_handle_info(handle) }),
1775        );
1776        let res = match handles {
1777            Ok(ref mut handles) => Self::read_from(&*body, handles)?,
1778            Err(_) => return Err(fidl::Error::Invalid),
1779        };
1780        std::mem::drop((body, handles));
1781        Ok((message.take_arena(), res))
1782    }
1783
1784    /// Name of the method defined in FIDL
1785    pub fn method_name(&self) -> &'static str {
1786        match *self {
1787            DriverRequest::Start { .. } => "start",
1788            DriverRequest::Stop { .. } => "stop",
1789            DriverRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
1790                "unknown one-way method"
1791            }
1792            DriverRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
1793                "unknown two-way method"
1794            }
1795        }
1796    }
1797}
1798
1799/// Like [`DriverRequest::read_from_message`] except it drops the [`Arena`].
1800#[cfg(feature = "driver")]
1801impl std::convert::TryFrom<fdf::Message<[u8]>> for DriverRequest {
1802    type Error = fidl::Error;
1803    fn try_from(msg: fdf::Message<[u8]>) -> Result<DriverRequest, fidl::Error> {
1804        Ok(DriverRequest::read_from_message(msg)?.1)
1805    }
1806}
1807
1808#[must_use = "FIDL methods require a response to be sent"]
1809#[cfg(feature = "driver")]
1810#[derive(Debug)]
1811pub struct DriverStartResponder {
1812    tx_id: u32,
1813}
1814
1815#[cfg(feature = "driver")]
1816impl DriverStartResponder {
1817    pub fn send_response(
1818        &self,
1819        server_handle: &fdf::Channel<[u8]>,
1820        mut result: Result<(), i32>,
1821    ) -> Result<(), fidl::Error> {
1822        let msg = fidl::encoding::TransactionMessage {
1823            header: fidl::encoding::TransactionHeader::new(
1824                self.tx_id,
1825                0x27be00ae42aa60c2,
1826                fidl::encoding::DynamicFlags::FLEXIBLE,
1827            ),
1828            body: fidl::encoding::FlexibleResult::new(result),
1829        };
1830        fidl::encoding::with_tls_encoded::<
1831            fidl::encoding::TransactionMessageType<
1832                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, i32>,
1833            >,
1834            fidl::encoding::DefaultFuchsiaResourceDialect,
1835            (),
1836        >(msg, |body, _handles| {
1837            server_handle
1838                .write_with_data(fdf::Arena::new(), |arena| arena.insert_slice(&body))
1839                .unwrap();
1840            Ok(())
1841        })
1842    }
1843}
1844
1845#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
1846pub struct NodeMarker;
1847
1848impl fidl::endpoints::ProtocolMarker for NodeMarker {
1849    type Proxy = NodeProxy;
1850    type RequestStream = NodeRequestStream;
1851    #[cfg(target_os = "fuchsia")]
1852    type SynchronousProxy = NodeSynchronousProxy;
1853
1854    const DEBUG_NAME: &'static str = "(anonymous) Node";
1855}
1856pub type NodeAddChildResult = Result<(), NodeError>;
1857
1858pub trait NodeProxyInterface: Send + Sync {
1859    type AddChildResponseFut: std::future::Future<Output = Result<NodeAddChildResult, fidl::Error>>
1860        + Send;
1861    fn r#add_child(
1862        &self,
1863        args: NodeAddArgs,
1864        controller: fidl::endpoints::ServerEnd<NodeControllerMarker>,
1865        node: Option<fidl::endpoints::ServerEnd<NodeMarker>>,
1866    ) -> Self::AddChildResponseFut;
1867}
1868#[derive(Debug)]
1869#[cfg(target_os = "fuchsia")]
1870pub struct NodeSynchronousProxy {
1871    client: fidl::client::sync::Client,
1872}
1873
1874#[cfg(target_os = "fuchsia")]
1875impl fidl::endpoints::SynchronousProxy for NodeSynchronousProxy {
1876    type Proxy = NodeProxy;
1877    type Protocol = NodeMarker;
1878
1879    fn from_channel(inner: fidl::Channel) -> Self {
1880        Self::new(inner)
1881    }
1882
1883    fn into_channel(self) -> fidl::Channel {
1884        self.client.into_channel()
1885    }
1886
1887    fn as_channel(&self) -> &fidl::Channel {
1888        self.client.as_channel()
1889    }
1890}
1891
1892#[cfg(target_os = "fuchsia")]
1893impl NodeSynchronousProxy {
1894    pub fn new(channel: fidl::Channel) -> Self {
1895        let protocol_name = <NodeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1896        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
1897    }
1898
1899    pub fn into_channel(self) -> fidl::Channel {
1900        self.client.into_channel()
1901    }
1902
1903    /// Waits until an event arrives and returns it. It is safe for other
1904    /// threads to make concurrent requests while waiting for an event.
1905    pub fn wait_for_event(&self, deadline: zx::MonotonicInstant) -> Result<NodeEvent, fidl::Error> {
1906        NodeEvent::decode(self.client.wait_for_event(deadline)?)
1907    }
1908
1909    /// Adds a child node to this node.
1910    ///
1911    /// If `node` is present, this driver takes responsibility for binding to
1912    /// the newly created child. Otherwise, the driver framework will locate an
1913    /// appropriate driver to bind the child to.
1914    pub fn r#add_child(
1915        &self,
1916        mut args: NodeAddArgs,
1917        mut controller: fidl::endpoints::ServerEnd<NodeControllerMarker>,
1918        mut node: Option<fidl::endpoints::ServerEnd<NodeMarker>>,
1919        ___deadline: zx::MonotonicInstant,
1920    ) -> Result<NodeAddChildResult, fidl::Error> {
1921        let _response = self.client.send_query::<
1922            NodeAddChildRequest,
1923            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, NodeError>,
1924        >(
1925            (&mut args, controller, node,),
1926            0x77d10dff3c1ea129,
1927            fidl::encoding::DynamicFlags::FLEXIBLE,
1928            ___deadline,
1929        )?
1930        .into_result::<NodeMarker>("add_child")?;
1931        Ok(_response.map(|x| x))
1932    }
1933}
1934
1935#[derive(Debug, Clone)]
1936pub struct NodeProxy {
1937    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
1938}
1939
1940impl fidl::endpoints::Proxy for NodeProxy {
1941    type Protocol = NodeMarker;
1942
1943    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
1944        Self::new(inner)
1945    }
1946
1947    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
1948        self.client.into_channel().map_err(|client| Self { client })
1949    }
1950
1951    fn as_channel(&self) -> &::fidl::AsyncChannel {
1952        self.client.as_channel()
1953    }
1954}
1955
1956impl NodeProxy {
1957    /// Create a new Proxy for fuchsia.driver.framework/Node.
1958    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
1959        let protocol_name = <NodeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
1960        Self { client: fidl::client::Client::new(channel, protocol_name) }
1961    }
1962
1963    /// Get a Stream of events from the remote end of the protocol.
1964    ///
1965    /// # Panics
1966    ///
1967    /// Panics if the event stream was already taken.
1968    pub fn take_event_stream(&self) -> NodeEventStream {
1969        NodeEventStream { event_receiver: self.client.take_event_receiver() }
1970    }
1971
1972    /// Adds a child node to this node.
1973    ///
1974    /// If `node` is present, this driver takes responsibility for binding to
1975    /// the newly created child. Otherwise, the driver framework will locate an
1976    /// appropriate driver to bind the child to.
1977    pub fn r#add_child(
1978        &self,
1979        mut args: NodeAddArgs,
1980        mut controller: fidl::endpoints::ServerEnd<NodeControllerMarker>,
1981        mut node: Option<fidl::endpoints::ServerEnd<NodeMarker>>,
1982    ) -> fidl::client::QueryResponseFut<
1983        NodeAddChildResult,
1984        fidl::encoding::DefaultFuchsiaResourceDialect,
1985    > {
1986        NodeProxyInterface::r#add_child(self, args, controller, node)
1987    }
1988}
1989
1990impl NodeProxyInterface for NodeProxy {
1991    type AddChildResponseFut = fidl::client::QueryResponseFut<
1992        NodeAddChildResult,
1993        fidl::encoding::DefaultFuchsiaResourceDialect,
1994    >;
1995    fn r#add_child(
1996        &self,
1997        mut args: NodeAddArgs,
1998        mut controller: fidl::endpoints::ServerEnd<NodeControllerMarker>,
1999        mut node: Option<fidl::endpoints::ServerEnd<NodeMarker>>,
2000    ) -> Self::AddChildResponseFut {
2001        fn _decode(
2002            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2003        ) -> Result<NodeAddChildResult, fidl::Error> {
2004            let _response = fidl::client::decode_transaction_body::<
2005                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, NodeError>,
2006                fidl::encoding::DefaultFuchsiaResourceDialect,
2007                0x77d10dff3c1ea129,
2008            >(_buf?)?
2009            .into_result::<NodeMarker>("add_child")?;
2010            Ok(_response.map(|x| x))
2011        }
2012        self.client.send_query_and_decode::<NodeAddChildRequest, NodeAddChildResult>(
2013            (&mut args, controller, node),
2014            0x77d10dff3c1ea129,
2015            fidl::encoding::DynamicFlags::FLEXIBLE,
2016            _decode,
2017        )
2018    }
2019}
2020
2021pub struct NodeEventStream {
2022    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2023}
2024
2025impl std::marker::Unpin for NodeEventStream {}
2026
2027impl futures::stream::FusedStream for NodeEventStream {
2028    fn is_terminated(&self) -> bool {
2029        self.event_receiver.is_terminated()
2030    }
2031}
2032
2033impl futures::Stream for NodeEventStream {
2034    type Item = Result<NodeEvent, fidl::Error>;
2035
2036    fn poll_next(
2037        mut self: std::pin::Pin<&mut Self>,
2038        cx: &mut std::task::Context<'_>,
2039    ) -> std::task::Poll<Option<Self::Item>> {
2040        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2041            &mut self.event_receiver,
2042            cx
2043        )?) {
2044            Some(buf) => std::task::Poll::Ready(Some(NodeEvent::decode(buf))),
2045            None => std::task::Poll::Ready(None),
2046        }
2047    }
2048}
2049
2050#[derive(Debug)]
2051pub enum NodeEvent {
2052    #[non_exhaustive]
2053    _UnknownEvent {
2054        /// Ordinal of the event that was sent.
2055        ordinal: u64,
2056    },
2057}
2058
2059impl NodeEvent {
2060    /// Decodes a message buffer as a [`NodeEvent`].
2061    fn decode(
2062        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2063    ) -> Result<NodeEvent, fidl::Error> {
2064        let (bytes, _handles) = buf.split_mut();
2065        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2066        debug_assert_eq!(tx_header.tx_id, 0);
2067        match tx_header.ordinal {
2068            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2069                Ok(NodeEvent::_UnknownEvent { ordinal: tx_header.ordinal })
2070            }
2071            _ => Err(fidl::Error::UnknownOrdinal {
2072                ordinal: tx_header.ordinal,
2073                protocol_name: <NodeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2074            }),
2075        }
2076    }
2077}
2078
2079/// A Stream of incoming requests for fuchsia.driver.framework/Node.
2080pub struct NodeRequestStream {
2081    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2082    is_terminated: bool,
2083}
2084
2085impl std::marker::Unpin for NodeRequestStream {}
2086
2087impl futures::stream::FusedStream for NodeRequestStream {
2088    fn is_terminated(&self) -> bool {
2089        self.is_terminated
2090    }
2091}
2092
2093impl fidl::endpoints::RequestStream for NodeRequestStream {
2094    type Protocol = NodeMarker;
2095    type ControlHandle = NodeControlHandle;
2096
2097    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2098        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2099    }
2100
2101    fn control_handle(&self) -> Self::ControlHandle {
2102        NodeControlHandle { inner: self.inner.clone() }
2103    }
2104
2105    fn into_inner(
2106        self,
2107    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2108    {
2109        (self.inner, self.is_terminated)
2110    }
2111
2112    fn from_inner(
2113        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2114        is_terminated: bool,
2115    ) -> Self {
2116        Self { inner, is_terminated }
2117    }
2118}
2119
2120impl futures::Stream for NodeRequestStream {
2121    type Item = Result<NodeRequest, fidl::Error>;
2122
2123    fn poll_next(
2124        mut self: std::pin::Pin<&mut Self>,
2125        cx: &mut std::task::Context<'_>,
2126    ) -> std::task::Poll<Option<Self::Item>> {
2127        let this = &mut *self;
2128        if this.inner.check_shutdown(cx) {
2129            this.is_terminated = true;
2130            return std::task::Poll::Ready(None);
2131        }
2132        if this.is_terminated {
2133            panic!("polled NodeRequestStream after completion");
2134        }
2135        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2136            |bytes, handles| {
2137                match this.inner.channel().read_etc(cx, bytes, handles) {
2138                    std::task::Poll::Ready(Ok(())) => {}
2139                    std::task::Poll::Pending => return std::task::Poll::Pending,
2140                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2141                        this.is_terminated = true;
2142                        return std::task::Poll::Ready(None);
2143                    }
2144                    std::task::Poll::Ready(Err(e)) => {
2145                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2146                            e.into(),
2147                        ))))
2148                    }
2149                }
2150
2151                // A message has been received from the channel
2152                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2153
2154                std::task::Poll::Ready(Some(match header.ordinal {
2155                    0x77d10dff3c1ea129 => {
2156                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2157                        let mut req = fidl::new_empty!(
2158                            NodeAddChildRequest,
2159                            fidl::encoding::DefaultFuchsiaResourceDialect
2160                        );
2161                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NodeAddChildRequest>(&header, _body_bytes, handles, &mut req)?;
2162                        let control_handle = NodeControlHandle { inner: this.inner.clone() };
2163                        Ok(NodeRequest::AddChild {
2164                            args: req.args,
2165                            controller: req.controller,
2166                            node: req.node,
2167
2168                            responder: NodeAddChildResponder {
2169                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2170                                tx_id: header.tx_id,
2171                            },
2172                        })
2173                    }
2174                    _ if header.tx_id == 0
2175                        && header
2176                            .dynamic_flags()
2177                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2178                    {
2179                        Ok(NodeRequest::_UnknownMethod {
2180                            ordinal: header.ordinal,
2181                            control_handle: NodeControlHandle { inner: this.inner.clone() },
2182                            method_type: fidl::MethodType::OneWay,
2183                        })
2184                    }
2185                    _ if header
2186                        .dynamic_flags()
2187                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2188                    {
2189                        this.inner.send_framework_err(
2190                            fidl::encoding::FrameworkErr::UnknownMethod,
2191                            header.tx_id,
2192                            header.ordinal,
2193                            header.dynamic_flags(),
2194                            (bytes, handles),
2195                        )?;
2196                        Ok(NodeRequest::_UnknownMethod {
2197                            ordinal: header.ordinal,
2198                            control_handle: NodeControlHandle { inner: this.inner.clone() },
2199                            method_type: fidl::MethodType::TwoWay,
2200                        })
2201                    }
2202                    _ => Err(fidl::Error::UnknownOrdinal {
2203                        ordinal: header.ordinal,
2204                        protocol_name: <NodeMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2205                    }),
2206                }))
2207            },
2208        )
2209    }
2210}
2211
2212/// Protocol through which a driver manages a node that it is bound to.
2213/// Drivers should maintain their client connection to the node. Dropping
2214/// the client connection while the driver is running will cause the
2215/// driver framework to remove the driver and node from the topology.
2216/// If the driver has set `host_restart_on_crash` to "true" in their
2217/// component manifest, dropping the connection will initiate a restart of
2218/// the driver host and driver.
2219#[derive(Debug)]
2220pub enum NodeRequest {
2221    /// Adds a child node to this node.
2222    ///
2223    /// If `node` is present, this driver takes responsibility for binding to
2224    /// the newly created child. Otherwise, the driver framework will locate an
2225    /// appropriate driver to bind the child to.
2226    AddChild {
2227        args: NodeAddArgs,
2228        controller: fidl::endpoints::ServerEnd<NodeControllerMarker>,
2229        node: Option<fidl::endpoints::ServerEnd<NodeMarker>>,
2230        responder: NodeAddChildResponder,
2231    },
2232    /// An interaction was received which does not match any known method.
2233    #[non_exhaustive]
2234    _UnknownMethod {
2235        /// Ordinal of the method that was called.
2236        ordinal: u64,
2237        control_handle: NodeControlHandle,
2238        method_type: fidl::MethodType,
2239    },
2240}
2241
2242impl NodeRequest {
2243    #[allow(irrefutable_let_patterns)]
2244    pub fn into_add_child(
2245        self,
2246    ) -> Option<(
2247        NodeAddArgs,
2248        fidl::endpoints::ServerEnd<NodeControllerMarker>,
2249        Option<fidl::endpoints::ServerEnd<NodeMarker>>,
2250        NodeAddChildResponder,
2251    )> {
2252        if let NodeRequest::AddChild { args, controller, node, responder } = self {
2253            Some((args, controller, node, responder))
2254        } else {
2255            None
2256        }
2257    }
2258
2259    /// Name of the method defined in FIDL
2260    pub fn method_name(&self) -> &'static str {
2261        match *self {
2262            NodeRequest::AddChild { .. } => "add_child",
2263            NodeRequest::_UnknownMethod { method_type: fidl::MethodType::OneWay, .. } => {
2264                "unknown one-way method"
2265            }
2266            NodeRequest::_UnknownMethod { method_type: fidl::MethodType::TwoWay, .. } => {
2267                "unknown two-way method"
2268            }
2269        }
2270    }
2271}
2272
2273#[derive(Debug, Clone)]
2274pub struct NodeControlHandle {
2275    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2276}
2277
2278impl fidl::endpoints::ControlHandle for NodeControlHandle {
2279    fn shutdown(&self) {
2280        self.inner.shutdown()
2281    }
2282    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2283        self.inner.shutdown_with_epitaph(status)
2284    }
2285
2286    fn is_closed(&self) -> bool {
2287        self.inner.channel().is_closed()
2288    }
2289    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2290        self.inner.channel().on_closed()
2291    }
2292
2293    #[cfg(target_os = "fuchsia")]
2294    fn signal_peer(
2295        &self,
2296        clear_mask: zx::Signals,
2297        set_mask: zx::Signals,
2298    ) -> Result<(), zx_status::Status> {
2299        use fidl::Peered;
2300        self.inner.channel().signal_peer(clear_mask, set_mask)
2301    }
2302}
2303
2304impl NodeControlHandle {}
2305
2306#[must_use = "FIDL methods require a response to be sent"]
2307#[derive(Debug)]
2308pub struct NodeAddChildResponder {
2309    control_handle: std::mem::ManuallyDrop<NodeControlHandle>,
2310    tx_id: u32,
2311}
2312
2313/// Set the the channel to be shutdown (see [`NodeControlHandle::shutdown`])
2314/// if the responder is dropped without sending a response, so that the client
2315/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2316impl std::ops::Drop for NodeAddChildResponder {
2317    fn drop(&mut self) {
2318        self.control_handle.shutdown();
2319        // Safety: drops once, never accessed again
2320        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2321    }
2322}
2323
2324impl fidl::endpoints::Responder for NodeAddChildResponder {
2325    type ControlHandle = NodeControlHandle;
2326
2327    fn control_handle(&self) -> &NodeControlHandle {
2328        &self.control_handle
2329    }
2330
2331    fn drop_without_shutdown(mut self) {
2332        // Safety: drops once, never accessed again due to mem::forget
2333        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2334        // Prevent Drop from running (which would shut down the channel)
2335        std::mem::forget(self);
2336    }
2337}
2338
2339impl NodeAddChildResponder {
2340    /// Sends a response to the FIDL transaction.
2341    ///
2342    /// Sets the channel to shutdown if an error occurs.
2343    pub fn send(self, mut result: Result<(), NodeError>) -> Result<(), fidl::Error> {
2344        let _result = self.send_raw(result);
2345        if _result.is_err() {
2346            self.control_handle.shutdown();
2347        }
2348        self.drop_without_shutdown();
2349        _result
2350    }
2351
2352    /// Similar to "send" but does not shutdown the channel if an error occurs.
2353    pub fn send_no_shutdown_on_err(
2354        self,
2355        mut result: Result<(), NodeError>,
2356    ) -> Result<(), fidl::Error> {
2357        let _result = self.send_raw(result);
2358        self.drop_without_shutdown();
2359        _result
2360    }
2361
2362    fn send_raw(&self, mut result: Result<(), NodeError>) -> Result<(), fidl::Error> {
2363        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2364            fidl::encoding::EmptyStruct,
2365            NodeError,
2366        >>(
2367            fidl::encoding::FlexibleResult::new(result),
2368            self.tx_id,
2369            0x77d10dff3c1ea129,
2370            fidl::encoding::DynamicFlags::FLEXIBLE,
2371        )
2372    }
2373}
2374
2375#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
2376pub struct NodeControllerMarker;
2377
2378impl fidl::endpoints::ProtocolMarker for NodeControllerMarker {
2379    type Proxy = NodeControllerProxy;
2380    type RequestStream = NodeControllerRequestStream;
2381    #[cfg(target_os = "fuchsia")]
2382    type SynchronousProxy = NodeControllerSynchronousProxy;
2383
2384    const DEBUG_NAME: &'static str = "(anonymous) NodeController";
2385}
2386pub type NodeControllerRequestBindResult = Result<(), i32>;
2387
2388pub trait NodeControllerProxyInterface: Send + Sync {
2389    fn r#remove(&self) -> Result<(), fidl::Error>;
2390    type RequestBindResponseFut: std::future::Future<Output = Result<NodeControllerRequestBindResult, fidl::Error>>
2391        + Send;
2392    fn r#request_bind(
2393        &self,
2394        payload: &NodeControllerRequestBindRequest,
2395    ) -> Self::RequestBindResponseFut;
2396}
2397#[derive(Debug)]
2398#[cfg(target_os = "fuchsia")]
2399pub struct NodeControllerSynchronousProxy {
2400    client: fidl::client::sync::Client,
2401}
2402
2403#[cfg(target_os = "fuchsia")]
2404impl fidl::endpoints::SynchronousProxy for NodeControllerSynchronousProxy {
2405    type Proxy = NodeControllerProxy;
2406    type Protocol = NodeControllerMarker;
2407
2408    fn from_channel(inner: fidl::Channel) -> Self {
2409        Self::new(inner)
2410    }
2411
2412    fn into_channel(self) -> fidl::Channel {
2413        self.client.into_channel()
2414    }
2415
2416    fn as_channel(&self) -> &fidl::Channel {
2417        self.client.as_channel()
2418    }
2419}
2420
2421#[cfg(target_os = "fuchsia")]
2422impl NodeControllerSynchronousProxy {
2423    pub fn new(channel: fidl::Channel) -> Self {
2424        let protocol_name = <NodeControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2425        Self { client: fidl::client::sync::Client::new(channel, protocol_name) }
2426    }
2427
2428    pub fn into_channel(self) -> fidl::Channel {
2429        self.client.into_channel()
2430    }
2431
2432    /// Waits until an event arrives and returns it. It is safe for other
2433    /// threads to make concurrent requests while waiting for an event.
2434    pub fn wait_for_event(
2435        &self,
2436        deadline: zx::MonotonicInstant,
2437    ) -> Result<NodeControllerEvent, fidl::Error> {
2438        NodeControllerEvent::decode(self.client.wait_for_event(deadline)?)
2439    }
2440
2441    /// Removes the node and all of its children.
2442    pub fn r#remove(&self) -> Result<(), fidl::Error> {
2443        self.client.send::<fidl::encoding::EmptyPayload>(
2444            (),
2445            0x54fa8b3dfe7bb341,
2446            fidl::encoding::DynamicFlags::FLEXIBLE,
2447        )
2448    }
2449
2450    /// Request that the framework attempts to bind a driver to this node.
2451    /// This is an *additional* request for binding as the framework attempts to bind a node once
2452    /// when the node is created.
2453    /// * error `ZX_ERR_ALREADY_BOUND` if the node is already bound and `force_rebind` is false.
2454    /// * error `ZX_ERR_ALREADY_EXISTS` if the node has an outstanding |RequestBind| call which has
2455    /// not completed.
2456    pub fn r#request_bind(
2457        &self,
2458        mut payload: &NodeControllerRequestBindRequest,
2459        ___deadline: zx::MonotonicInstant,
2460    ) -> Result<NodeControllerRequestBindResult, fidl::Error> {
2461        let _response = self.client.send_query::<
2462            NodeControllerRequestBindRequest,
2463            fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, i32>,
2464        >(
2465            payload,
2466            0x41b954726b13508f,
2467            fidl::encoding::DynamicFlags::FLEXIBLE,
2468            ___deadline,
2469        )?
2470        .into_result::<NodeControllerMarker>("request_bind")?;
2471        Ok(_response.map(|x| x))
2472    }
2473}
2474
2475#[derive(Debug, Clone)]
2476pub struct NodeControllerProxy {
2477    client: fidl::client::Client<fidl::encoding::DefaultFuchsiaResourceDialect>,
2478}
2479
2480impl fidl::endpoints::Proxy for NodeControllerProxy {
2481    type Protocol = NodeControllerMarker;
2482
2483    fn from_channel(inner: ::fidl::AsyncChannel) -> Self {
2484        Self::new(inner)
2485    }
2486
2487    fn into_channel(self) -> Result<::fidl::AsyncChannel, Self> {
2488        self.client.into_channel().map_err(|client| Self { client })
2489    }
2490
2491    fn as_channel(&self) -> &::fidl::AsyncChannel {
2492        self.client.as_channel()
2493    }
2494}
2495
2496impl NodeControllerProxy {
2497    /// Create a new Proxy for fuchsia.driver.framework/NodeController.
2498    pub fn new(channel: ::fidl::AsyncChannel) -> Self {
2499        let protocol_name = <NodeControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME;
2500        Self { client: fidl::client::Client::new(channel, protocol_name) }
2501    }
2502
2503    /// Get a Stream of events from the remote end of the protocol.
2504    ///
2505    /// # Panics
2506    ///
2507    /// Panics if the event stream was already taken.
2508    pub fn take_event_stream(&self) -> NodeControllerEventStream {
2509        NodeControllerEventStream { event_receiver: self.client.take_event_receiver() }
2510    }
2511
2512    /// Removes the node and all of its children.
2513    pub fn r#remove(&self) -> Result<(), fidl::Error> {
2514        NodeControllerProxyInterface::r#remove(self)
2515    }
2516
2517    /// Request that the framework attempts to bind a driver to this node.
2518    /// This is an *additional* request for binding as the framework attempts to bind a node once
2519    /// when the node is created.
2520    /// * error `ZX_ERR_ALREADY_BOUND` if the node is already bound and `force_rebind` is false.
2521    /// * error `ZX_ERR_ALREADY_EXISTS` if the node has an outstanding |RequestBind| call which has
2522    /// not completed.
2523    pub fn r#request_bind(
2524        &self,
2525        mut payload: &NodeControllerRequestBindRequest,
2526    ) -> fidl::client::QueryResponseFut<
2527        NodeControllerRequestBindResult,
2528        fidl::encoding::DefaultFuchsiaResourceDialect,
2529    > {
2530        NodeControllerProxyInterface::r#request_bind(self, payload)
2531    }
2532}
2533
2534impl NodeControllerProxyInterface for NodeControllerProxy {
2535    fn r#remove(&self) -> Result<(), fidl::Error> {
2536        self.client.send::<fidl::encoding::EmptyPayload>(
2537            (),
2538            0x54fa8b3dfe7bb341,
2539            fidl::encoding::DynamicFlags::FLEXIBLE,
2540        )
2541    }
2542
2543    type RequestBindResponseFut = fidl::client::QueryResponseFut<
2544        NodeControllerRequestBindResult,
2545        fidl::encoding::DefaultFuchsiaResourceDialect,
2546    >;
2547    fn r#request_bind(
2548        &self,
2549        mut payload: &NodeControllerRequestBindRequest,
2550    ) -> Self::RequestBindResponseFut {
2551        fn _decode(
2552            mut _buf: Result<<fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc, fidl::Error>,
2553        ) -> Result<NodeControllerRequestBindResult, fidl::Error> {
2554            let _response = fidl::client::decode_transaction_body::<
2555                fidl::encoding::FlexibleResultType<fidl::encoding::EmptyStruct, i32>,
2556                fidl::encoding::DefaultFuchsiaResourceDialect,
2557                0x41b954726b13508f,
2558            >(_buf?)?
2559            .into_result::<NodeControllerMarker>("request_bind")?;
2560            Ok(_response.map(|x| x))
2561        }
2562        self.client.send_query_and_decode::<
2563            NodeControllerRequestBindRequest,
2564            NodeControllerRequestBindResult,
2565        >(
2566            payload,
2567            0x41b954726b13508f,
2568            fidl::encoding::DynamicFlags::FLEXIBLE,
2569            _decode,
2570        )
2571    }
2572}
2573
2574pub struct NodeControllerEventStream {
2575    event_receiver: fidl::client::EventReceiver<fidl::encoding::DefaultFuchsiaResourceDialect>,
2576}
2577
2578impl std::marker::Unpin for NodeControllerEventStream {}
2579
2580impl futures::stream::FusedStream for NodeControllerEventStream {
2581    fn is_terminated(&self) -> bool {
2582        self.event_receiver.is_terminated()
2583    }
2584}
2585
2586impl futures::Stream for NodeControllerEventStream {
2587    type Item = Result<NodeControllerEvent, fidl::Error>;
2588
2589    fn poll_next(
2590        mut self: std::pin::Pin<&mut Self>,
2591        cx: &mut std::task::Context<'_>,
2592    ) -> std::task::Poll<Option<Self::Item>> {
2593        match futures::ready!(futures::stream::StreamExt::poll_next_unpin(
2594            &mut self.event_receiver,
2595            cx
2596        )?) {
2597            Some(buf) => std::task::Poll::Ready(Some(NodeControllerEvent::decode(buf))),
2598            None => std::task::Poll::Ready(None),
2599        }
2600    }
2601}
2602
2603#[derive(Debug)]
2604pub enum NodeControllerEvent {
2605    OnBind {},
2606    #[non_exhaustive]
2607    _UnknownEvent {
2608        /// Ordinal of the event that was sent.
2609        ordinal: u64,
2610    },
2611}
2612
2613impl NodeControllerEvent {
2614    #[allow(irrefutable_let_patterns)]
2615    pub fn into_on_bind(self) -> Option<()> {
2616        if let NodeControllerEvent::OnBind {} = self {
2617            Some(())
2618        } else {
2619            None
2620        }
2621    }
2622
2623    /// Decodes a message buffer as a [`NodeControllerEvent`].
2624    fn decode(
2625        mut buf: <fidl::encoding::DefaultFuchsiaResourceDialect as fidl::encoding::ResourceDialect>::MessageBufEtc,
2626    ) -> Result<NodeControllerEvent, fidl::Error> {
2627        let (bytes, _handles) = buf.split_mut();
2628        let (tx_header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2629        debug_assert_eq!(tx_header.tx_id, 0);
2630        match tx_header.ordinal {
2631            0x51f4165bc5ea202a => {
2632                let mut out = fidl::new_empty!(
2633                    fidl::encoding::EmptyPayload,
2634                    fidl::encoding::DefaultFuchsiaResourceDialect
2635                );
2636                fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&tx_header, _body_bytes, _handles, &mut out)?;
2637                Ok((NodeControllerEvent::OnBind {}))
2638            }
2639            _ if tx_header.dynamic_flags().contains(fidl::encoding::DynamicFlags::FLEXIBLE) => {
2640                Ok(NodeControllerEvent::_UnknownEvent { ordinal: tx_header.ordinal })
2641            }
2642            _ => Err(fidl::Error::UnknownOrdinal {
2643                ordinal: tx_header.ordinal,
2644                protocol_name:
2645                    <NodeControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2646            }),
2647        }
2648    }
2649}
2650
2651/// A Stream of incoming requests for fuchsia.driver.framework/NodeController.
2652pub struct NodeControllerRequestStream {
2653    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2654    is_terminated: bool,
2655}
2656
2657impl std::marker::Unpin for NodeControllerRequestStream {}
2658
2659impl futures::stream::FusedStream for NodeControllerRequestStream {
2660    fn is_terminated(&self) -> bool {
2661        self.is_terminated
2662    }
2663}
2664
2665impl fidl::endpoints::RequestStream for NodeControllerRequestStream {
2666    type Protocol = NodeControllerMarker;
2667    type ControlHandle = NodeControllerControlHandle;
2668
2669    fn from_channel(channel: ::fidl::AsyncChannel) -> Self {
2670        Self { inner: std::sync::Arc::new(fidl::ServeInner::new(channel)), is_terminated: false }
2671    }
2672
2673    fn control_handle(&self) -> Self::ControlHandle {
2674        NodeControllerControlHandle { inner: self.inner.clone() }
2675    }
2676
2677    fn into_inner(
2678        self,
2679    ) -> (::std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>, bool)
2680    {
2681        (self.inner, self.is_terminated)
2682    }
2683
2684    fn from_inner(
2685        inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2686        is_terminated: bool,
2687    ) -> Self {
2688        Self { inner, is_terminated }
2689    }
2690}
2691
2692impl futures::Stream for NodeControllerRequestStream {
2693    type Item = Result<NodeControllerRequest, fidl::Error>;
2694
2695    fn poll_next(
2696        mut self: std::pin::Pin<&mut Self>,
2697        cx: &mut std::task::Context<'_>,
2698    ) -> std::task::Poll<Option<Self::Item>> {
2699        let this = &mut *self;
2700        if this.inner.check_shutdown(cx) {
2701            this.is_terminated = true;
2702            return std::task::Poll::Ready(None);
2703        }
2704        if this.is_terminated {
2705            panic!("polled NodeControllerRequestStream after completion");
2706        }
2707        fidl::encoding::with_tls_decode_buf::<_, fidl::encoding::DefaultFuchsiaResourceDialect>(
2708            |bytes, handles| {
2709                match this.inner.channel().read_etc(cx, bytes, handles) {
2710                    std::task::Poll::Ready(Ok(())) => {}
2711                    std::task::Poll::Pending => return std::task::Poll::Pending,
2712                    std::task::Poll::Ready(Err(zx_status::Status::PEER_CLOSED)) => {
2713                        this.is_terminated = true;
2714                        return std::task::Poll::Ready(None);
2715                    }
2716                    std::task::Poll::Ready(Err(e)) => {
2717                        return std::task::Poll::Ready(Some(Err(fidl::Error::ServerRequestRead(
2718                            e.into(),
2719                        ))))
2720                    }
2721                }
2722
2723                // A message has been received from the channel
2724                let (header, _body_bytes) = fidl::encoding::decode_transaction_header(bytes)?;
2725
2726                std::task::Poll::Ready(Some(match header.ordinal {
2727                    0x54fa8b3dfe7bb341 => {
2728                        header.validate_request_tx_id(fidl::MethodType::OneWay)?;
2729                        let mut req = fidl::new_empty!(
2730                            fidl::encoding::EmptyPayload,
2731                            fidl::encoding::DefaultFuchsiaResourceDialect
2732                        );
2733                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<fidl::encoding::EmptyPayload>(&header, _body_bytes, handles, &mut req)?;
2734                        let control_handle =
2735                            NodeControllerControlHandle { inner: this.inner.clone() };
2736                        Ok(NodeControllerRequest::Remove { control_handle })
2737                    }
2738                    0x41b954726b13508f => {
2739                        header.validate_request_tx_id(fidl::MethodType::TwoWay)?;
2740                        let mut req = fidl::new_empty!(
2741                            NodeControllerRequestBindRequest,
2742                            fidl::encoding::DefaultFuchsiaResourceDialect
2743                        );
2744                        fidl::encoding::Decoder::<fidl::encoding::DefaultFuchsiaResourceDialect>::decode_into::<NodeControllerRequestBindRequest>(&header, _body_bytes, handles, &mut req)?;
2745                        let control_handle =
2746                            NodeControllerControlHandle { inner: this.inner.clone() };
2747                        Ok(NodeControllerRequest::RequestBind {
2748                            payload: req,
2749                            responder: NodeControllerRequestBindResponder {
2750                                control_handle: std::mem::ManuallyDrop::new(control_handle),
2751                                tx_id: header.tx_id,
2752                            },
2753                        })
2754                    }
2755                    _ if header.tx_id == 0
2756                        && header
2757                            .dynamic_flags()
2758                            .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2759                    {
2760                        Ok(NodeControllerRequest::_UnknownMethod {
2761                            ordinal: header.ordinal,
2762                            control_handle: NodeControllerControlHandle {
2763                                inner: this.inner.clone(),
2764                            },
2765                            method_type: fidl::MethodType::OneWay,
2766                        })
2767                    }
2768                    _ if header
2769                        .dynamic_flags()
2770                        .contains(fidl::encoding::DynamicFlags::FLEXIBLE) =>
2771                    {
2772                        this.inner.send_framework_err(
2773                            fidl::encoding::FrameworkErr::UnknownMethod,
2774                            header.tx_id,
2775                            header.ordinal,
2776                            header.dynamic_flags(),
2777                            (bytes, handles),
2778                        )?;
2779                        Ok(NodeControllerRequest::_UnknownMethod {
2780                            ordinal: header.ordinal,
2781                            control_handle: NodeControllerControlHandle {
2782                                inner: this.inner.clone(),
2783                            },
2784                            method_type: fidl::MethodType::TwoWay,
2785                        })
2786                    }
2787                    _ => Err(fidl::Error::UnknownOrdinal {
2788                        ordinal: header.ordinal,
2789                        protocol_name:
2790                            <NodeControllerMarker as fidl::endpoints::ProtocolMarker>::DEBUG_NAME,
2791                    }),
2792                }))
2793            },
2794        )
2795    }
2796}
2797
2798/// Protocol through which a parent node controls one of its children.
2799#[derive(Debug)]
2800pub enum NodeControllerRequest {
2801    /// Removes the node and all of its children.
2802    Remove { control_handle: NodeControllerControlHandle },
2803    /// Request that the framework attempts to bind a driver to this node.
2804    /// This is an *additional* request for binding as the framework attempts to bind a node once
2805    /// when the node is created.
2806    /// * error `ZX_ERR_ALREADY_BOUND` if the node is already bound and `force_rebind` is false.
2807    /// * error `ZX_ERR_ALREADY_EXISTS` if the node has an outstanding |RequestBind| call which has
2808    /// not completed.
2809    RequestBind {
2810        payload: NodeControllerRequestBindRequest,
2811        responder: NodeControllerRequestBindResponder,
2812    },
2813    /// An interaction was received which does not match any known method.
2814    #[non_exhaustive]
2815    _UnknownMethod {
2816        /// Ordinal of the method that was called.
2817        ordinal: u64,
2818        control_handle: NodeControllerControlHandle,
2819        method_type: fidl::MethodType,
2820    },
2821}
2822
2823impl NodeControllerRequest {
2824    #[allow(irrefutable_let_patterns)]
2825    pub fn into_remove(self) -> Option<(NodeControllerControlHandle)> {
2826        if let NodeControllerRequest::Remove { control_handle } = self {
2827            Some((control_handle))
2828        } else {
2829            None
2830        }
2831    }
2832
2833    #[allow(irrefutable_let_patterns)]
2834    pub fn into_request_bind(
2835        self,
2836    ) -> Option<(NodeControllerRequestBindRequest, NodeControllerRequestBindResponder)> {
2837        if let NodeControllerRequest::RequestBind { payload, responder } = self {
2838            Some((payload, responder))
2839        } else {
2840            None
2841        }
2842    }
2843
2844    /// Name of the method defined in FIDL
2845    pub fn method_name(&self) -> &'static str {
2846        match *self {
2847            NodeControllerRequest::Remove { .. } => "remove",
2848            NodeControllerRequest::RequestBind { .. } => "request_bind",
2849            NodeControllerRequest::_UnknownMethod {
2850                method_type: fidl::MethodType::OneWay, ..
2851            } => "unknown one-way method",
2852            NodeControllerRequest::_UnknownMethod {
2853                method_type: fidl::MethodType::TwoWay, ..
2854            } => "unknown two-way method",
2855        }
2856    }
2857}
2858
2859#[derive(Debug, Clone)]
2860pub struct NodeControllerControlHandle {
2861    inner: std::sync::Arc<fidl::ServeInner<fidl::encoding::DefaultFuchsiaResourceDialect>>,
2862}
2863
2864impl fidl::endpoints::ControlHandle for NodeControllerControlHandle {
2865    fn shutdown(&self) {
2866        self.inner.shutdown()
2867    }
2868    fn shutdown_with_epitaph(&self, status: zx_status::Status) {
2869        self.inner.shutdown_with_epitaph(status)
2870    }
2871
2872    fn is_closed(&self) -> bool {
2873        self.inner.channel().is_closed()
2874    }
2875    fn on_closed(&self) -> fidl::OnSignalsRef<'_> {
2876        self.inner.channel().on_closed()
2877    }
2878
2879    #[cfg(target_os = "fuchsia")]
2880    fn signal_peer(
2881        &self,
2882        clear_mask: zx::Signals,
2883        set_mask: zx::Signals,
2884    ) -> Result<(), zx_status::Status> {
2885        use fidl::Peered;
2886        self.inner.channel().signal_peer(clear_mask, set_mask)
2887    }
2888}
2889
2890impl NodeControllerControlHandle {
2891    pub fn send_on_bind(&self) -> Result<(), fidl::Error> {
2892        self.inner.send::<fidl::encoding::EmptyPayload>(
2893            (),
2894            0,
2895            0x51f4165bc5ea202a,
2896            fidl::encoding::DynamicFlags::FLEXIBLE,
2897        )
2898    }
2899}
2900
2901#[must_use = "FIDL methods require a response to be sent"]
2902#[derive(Debug)]
2903pub struct NodeControllerRequestBindResponder {
2904    control_handle: std::mem::ManuallyDrop<NodeControllerControlHandle>,
2905    tx_id: u32,
2906}
2907
2908/// Set the the channel to be shutdown (see [`NodeControllerControlHandle::shutdown`])
2909/// if the responder is dropped without sending a response, so that the client
2910/// doesn't hang. To prevent this behavior, call `drop_without_shutdown`.
2911impl std::ops::Drop for NodeControllerRequestBindResponder {
2912    fn drop(&mut self) {
2913        self.control_handle.shutdown();
2914        // Safety: drops once, never accessed again
2915        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2916    }
2917}
2918
2919impl fidl::endpoints::Responder for NodeControllerRequestBindResponder {
2920    type ControlHandle = NodeControllerControlHandle;
2921
2922    fn control_handle(&self) -> &NodeControllerControlHandle {
2923        &self.control_handle
2924    }
2925
2926    fn drop_without_shutdown(mut self) {
2927        // Safety: drops once, never accessed again due to mem::forget
2928        unsafe { std::mem::ManuallyDrop::drop(&mut self.control_handle) };
2929        // Prevent Drop from running (which would shut down the channel)
2930        std::mem::forget(self);
2931    }
2932}
2933
2934impl NodeControllerRequestBindResponder {
2935    /// Sends a response to the FIDL transaction.
2936    ///
2937    /// Sets the channel to shutdown if an error occurs.
2938    pub fn send(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2939        let _result = self.send_raw(result);
2940        if _result.is_err() {
2941            self.control_handle.shutdown();
2942        }
2943        self.drop_without_shutdown();
2944        _result
2945    }
2946
2947    /// Similar to "send" but does not shutdown the channel if an error occurs.
2948    pub fn send_no_shutdown_on_err(self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2949        let _result = self.send_raw(result);
2950        self.drop_without_shutdown();
2951        _result
2952    }
2953
2954    fn send_raw(&self, mut result: Result<(), i32>) -> Result<(), fidl::Error> {
2955        self.control_handle.inner.send::<fidl::encoding::FlexibleResultType<
2956            fidl::encoding::EmptyStruct,
2957            i32,
2958        >>(
2959            fidl::encoding::FlexibleResult::new(result),
2960            self.tx_id,
2961            0x41b954726b13508f,
2962            fidl::encoding::DynamicFlags::FLEXIBLE,
2963        )
2964    }
2965}
2966
2967mod internal {
2968    use super::*;
2969    unsafe impl fidl::encoding::TypeMarker for BusType {
2970        type Owned = Self;
2971
2972        #[inline(always)]
2973        fn inline_align(_context: fidl::encoding::Context) -> usize {
2974            std::mem::align_of::<u32>()
2975        }
2976
2977        #[inline(always)]
2978        fn inline_size(_context: fidl::encoding::Context) -> usize {
2979            std::mem::size_of::<u32>()
2980        }
2981
2982        #[inline(always)]
2983        fn encode_is_copy() -> bool {
2984            false
2985        }
2986
2987        #[inline(always)]
2988        fn decode_is_copy() -> bool {
2989            false
2990        }
2991    }
2992
2993    impl fidl::encoding::ValueTypeMarker for BusType {
2994        type Borrowed<'a> = Self;
2995        #[inline(always)]
2996        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2997            *value
2998        }
2999    }
3000
3001    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BusType {
3002        #[inline]
3003        unsafe fn encode(
3004            self,
3005            encoder: &mut fidl::encoding::Encoder<'_, D>,
3006            offset: usize,
3007            _depth: fidl::encoding::Depth,
3008        ) -> fidl::Result<()> {
3009            encoder.debug_check_bounds::<Self>(offset);
3010            encoder.write_num(self.into_primitive(), offset);
3011            Ok(())
3012        }
3013    }
3014
3015    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BusType {
3016        #[inline(always)]
3017        fn new_empty() -> Self {
3018            Self::unknown()
3019        }
3020
3021        #[inline]
3022        unsafe fn decode(
3023            &mut self,
3024            decoder: &mut fidl::encoding::Decoder<'_, D>,
3025            offset: usize,
3026            _depth: fidl::encoding::Depth,
3027        ) -> fidl::Result<()> {
3028            decoder.debug_check_bounds::<Self>(offset);
3029            let prim = decoder.read_num::<u32>(offset);
3030
3031            *self = Self::from_primitive_allow_unknown(prim);
3032            Ok(())
3033        }
3034    }
3035    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpecError {
3036        type Owned = Self;
3037
3038        #[inline(always)]
3039        fn inline_align(_context: fidl::encoding::Context) -> usize {
3040            std::mem::align_of::<u32>()
3041        }
3042
3043        #[inline(always)]
3044        fn inline_size(_context: fidl::encoding::Context) -> usize {
3045            std::mem::size_of::<u32>()
3046        }
3047
3048        #[inline(always)]
3049        fn encode_is_copy() -> bool {
3050            false
3051        }
3052
3053        #[inline(always)]
3054        fn decode_is_copy() -> bool {
3055            false
3056        }
3057    }
3058
3059    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpecError {
3060        type Borrowed<'a> = Self;
3061        #[inline(always)]
3062        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3063            *value
3064        }
3065    }
3066
3067    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3068        for CompositeNodeSpecError
3069    {
3070        #[inline]
3071        unsafe fn encode(
3072            self,
3073            encoder: &mut fidl::encoding::Encoder<'_, D>,
3074            offset: usize,
3075            _depth: fidl::encoding::Depth,
3076        ) -> fidl::Result<()> {
3077            encoder.debug_check_bounds::<Self>(offset);
3078            encoder.write_num(self.into_primitive(), offset);
3079            Ok(())
3080        }
3081    }
3082
3083    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3084        for CompositeNodeSpecError
3085    {
3086        #[inline(always)]
3087        fn new_empty() -> Self {
3088            Self::unknown()
3089        }
3090
3091        #[inline]
3092        unsafe fn decode(
3093            &mut self,
3094            decoder: &mut fidl::encoding::Decoder<'_, D>,
3095            offset: usize,
3096            _depth: fidl::encoding::Depth,
3097        ) -> fidl::Result<()> {
3098            decoder.debug_check_bounds::<Self>(offset);
3099            let prim = decoder.read_num::<u32>(offset);
3100
3101            *self = Self::from_primitive_allow_unknown(prim);
3102            Ok(())
3103        }
3104    }
3105    unsafe impl fidl::encoding::TypeMarker for Condition {
3106        type Owned = Self;
3107
3108        #[inline(always)]
3109        fn inline_align(_context: fidl::encoding::Context) -> usize {
3110            std::mem::align_of::<u32>()
3111        }
3112
3113        #[inline(always)]
3114        fn inline_size(_context: fidl::encoding::Context) -> usize {
3115            std::mem::size_of::<u32>()
3116        }
3117
3118        #[inline(always)]
3119        fn encode_is_copy() -> bool {
3120            true
3121        }
3122
3123        #[inline(always)]
3124        fn decode_is_copy() -> bool {
3125            false
3126        }
3127    }
3128
3129    impl fidl::encoding::ValueTypeMarker for Condition {
3130        type Borrowed<'a> = Self;
3131        #[inline(always)]
3132        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3133            *value
3134        }
3135    }
3136
3137    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Condition {
3138        #[inline]
3139        unsafe fn encode(
3140            self,
3141            encoder: &mut fidl::encoding::Encoder<'_, D>,
3142            offset: usize,
3143            _depth: fidl::encoding::Depth,
3144        ) -> fidl::Result<()> {
3145            encoder.debug_check_bounds::<Self>(offset);
3146            encoder.write_num(self.into_primitive(), offset);
3147            Ok(())
3148        }
3149    }
3150
3151    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Condition {
3152        #[inline(always)]
3153        fn new_empty() -> Self {
3154            Self::Unknown
3155        }
3156
3157        #[inline]
3158        unsafe fn decode(
3159            &mut self,
3160            decoder: &mut fidl::encoding::Decoder<'_, D>,
3161            offset: usize,
3162            _depth: fidl::encoding::Depth,
3163        ) -> fidl::Result<()> {
3164            decoder.debug_check_bounds::<Self>(offset);
3165            let prim = decoder.read_num::<u32>(offset);
3166
3167            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
3168            Ok(())
3169        }
3170    }
3171    unsafe impl fidl::encoding::TypeMarker for DeviceAddressStability {
3172        type Owned = Self;
3173
3174        #[inline(always)]
3175        fn inline_align(_context: fidl::encoding::Context) -> usize {
3176            std::mem::align_of::<u32>()
3177        }
3178
3179        #[inline(always)]
3180        fn inline_size(_context: fidl::encoding::Context) -> usize {
3181            std::mem::size_of::<u32>()
3182        }
3183
3184        #[inline(always)]
3185        fn encode_is_copy() -> bool {
3186            false
3187        }
3188
3189        #[inline(always)]
3190        fn decode_is_copy() -> bool {
3191            false
3192        }
3193    }
3194
3195    impl fidl::encoding::ValueTypeMarker for DeviceAddressStability {
3196        type Borrowed<'a> = Self;
3197        #[inline(always)]
3198        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3199            *value
3200        }
3201    }
3202
3203    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3204        for DeviceAddressStability
3205    {
3206        #[inline]
3207        unsafe fn encode(
3208            self,
3209            encoder: &mut fidl::encoding::Encoder<'_, D>,
3210            offset: usize,
3211            _depth: fidl::encoding::Depth,
3212        ) -> fidl::Result<()> {
3213            encoder.debug_check_bounds::<Self>(offset);
3214            encoder.write_num(self.into_primitive(), offset);
3215            Ok(())
3216        }
3217    }
3218
3219    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3220        for DeviceAddressStability
3221    {
3222        #[inline(always)]
3223        fn new_empty() -> Self {
3224            Self::unknown()
3225        }
3226
3227        #[inline]
3228        unsafe fn decode(
3229            &mut self,
3230            decoder: &mut fidl::encoding::Decoder<'_, D>,
3231            offset: usize,
3232            _depth: fidl::encoding::Depth,
3233        ) -> fidl::Result<()> {
3234            decoder.debug_check_bounds::<Self>(offset);
3235            let prim = decoder.read_num::<u32>(offset);
3236
3237            *self = Self::from_primitive_allow_unknown(prim);
3238            Ok(())
3239        }
3240    }
3241    unsafe impl fidl::encoding::TypeMarker for DriverPackageType {
3242        type Owned = Self;
3243
3244        #[inline(always)]
3245        fn inline_align(_context: fidl::encoding::Context) -> usize {
3246            std::mem::align_of::<u8>()
3247        }
3248
3249        #[inline(always)]
3250        fn inline_size(_context: fidl::encoding::Context) -> usize {
3251            std::mem::size_of::<u8>()
3252        }
3253
3254        #[inline(always)]
3255        fn encode_is_copy() -> bool {
3256            false
3257        }
3258
3259        #[inline(always)]
3260        fn decode_is_copy() -> bool {
3261            false
3262        }
3263    }
3264
3265    impl fidl::encoding::ValueTypeMarker for DriverPackageType {
3266        type Borrowed<'a> = Self;
3267        #[inline(always)]
3268        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3269            *value
3270        }
3271    }
3272
3273    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
3274        for DriverPackageType
3275    {
3276        #[inline]
3277        unsafe fn encode(
3278            self,
3279            encoder: &mut fidl::encoding::Encoder<'_, D>,
3280            offset: usize,
3281            _depth: fidl::encoding::Depth,
3282        ) -> fidl::Result<()> {
3283            encoder.debug_check_bounds::<Self>(offset);
3284            encoder.write_num(self.into_primitive(), offset);
3285            Ok(())
3286        }
3287    }
3288
3289    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverPackageType {
3290        #[inline(always)]
3291        fn new_empty() -> Self {
3292            Self::unknown()
3293        }
3294
3295        #[inline]
3296        unsafe fn decode(
3297            &mut self,
3298            decoder: &mut fidl::encoding::Decoder<'_, D>,
3299            offset: usize,
3300            _depth: fidl::encoding::Depth,
3301        ) -> fidl::Result<()> {
3302            decoder.debug_check_bounds::<Self>(offset);
3303            let prim = decoder.read_num::<u8>(offset);
3304
3305            *self = Self::from_primitive_allow_unknown(prim);
3306            Ok(())
3307        }
3308    }
3309    unsafe impl fidl::encoding::TypeMarker for NodeError {
3310        type Owned = Self;
3311
3312        #[inline(always)]
3313        fn inline_align(_context: fidl::encoding::Context) -> usize {
3314            std::mem::align_of::<u32>()
3315        }
3316
3317        #[inline(always)]
3318        fn inline_size(_context: fidl::encoding::Context) -> usize {
3319            std::mem::size_of::<u32>()
3320        }
3321
3322        #[inline(always)]
3323        fn encode_is_copy() -> bool {
3324            false
3325        }
3326
3327        #[inline(always)]
3328        fn decode_is_copy() -> bool {
3329            false
3330        }
3331    }
3332
3333    impl fidl::encoding::ValueTypeMarker for NodeError {
3334        type Borrowed<'a> = Self;
3335        #[inline(always)]
3336        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3337            *value
3338        }
3339    }
3340
3341    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for NodeError {
3342        #[inline]
3343        unsafe fn encode(
3344            self,
3345            encoder: &mut fidl::encoding::Encoder<'_, D>,
3346            offset: usize,
3347            _depth: fidl::encoding::Depth,
3348        ) -> fidl::Result<()> {
3349            encoder.debug_check_bounds::<Self>(offset);
3350            encoder.write_num(self.into_primitive(), offset);
3351            Ok(())
3352        }
3353    }
3354
3355    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeError {
3356        #[inline(always)]
3357        fn new_empty() -> Self {
3358            Self::unknown()
3359        }
3360
3361        #[inline]
3362        unsafe fn decode(
3363            &mut self,
3364            decoder: &mut fidl::encoding::Decoder<'_, D>,
3365            offset: usize,
3366            _depth: fidl::encoding::Depth,
3367        ) -> fidl::Result<()> {
3368            decoder.debug_check_bounds::<Self>(offset);
3369            let prim = decoder.read_num::<u32>(offset);
3370
3371            *self = Self::from_primitive_allow_unknown(prim);
3372            Ok(())
3373        }
3374    }
3375
3376    impl fidl::encoding::ValueTypeMarker for BindRule {
3377        type Borrowed<'a> = &'a Self;
3378        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3379            value
3380        }
3381    }
3382
3383    unsafe impl fidl::encoding::TypeMarker for BindRule {
3384        type Owned = Self;
3385
3386        #[inline(always)]
3387        fn inline_align(_context: fidl::encoding::Context) -> usize {
3388            8
3389        }
3390
3391        #[inline(always)]
3392        fn inline_size(_context: fidl::encoding::Context) -> usize {
3393            40
3394        }
3395    }
3396
3397    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BindRule, D> for &BindRule {
3398        #[inline]
3399        unsafe fn encode(
3400            self,
3401            encoder: &mut fidl::encoding::Encoder<'_, D>,
3402            offset: usize,
3403            _depth: fidl::encoding::Depth,
3404        ) -> fidl::Result<()> {
3405            encoder.debug_check_bounds::<BindRule>(offset);
3406            // Delegate to tuple encoding.
3407            fidl::encoding::Encode::<BindRule, D>::encode(
3408                (
3409                    <NodePropertyKey as fidl::encoding::ValueTypeMarker>::borrow(&self.key),
3410                    <Condition as fidl::encoding::ValueTypeMarker>::borrow(&self.condition),
3411                    <fidl::encoding::Vector<NodePropertyValue, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.values),
3412                ),
3413                encoder, offset, _depth
3414            )
3415        }
3416    }
3417    unsafe impl<
3418            D: fidl::encoding::ResourceDialect,
3419            T0: fidl::encoding::Encode<NodePropertyKey, D>,
3420            T1: fidl::encoding::Encode<Condition, D>,
3421            T2: fidl::encoding::Encode<fidl::encoding::Vector<NodePropertyValue, 64>, D>,
3422        > fidl::encoding::Encode<BindRule, D> for (T0, T1, T2)
3423    {
3424        #[inline]
3425        unsafe fn encode(
3426            self,
3427            encoder: &mut fidl::encoding::Encoder<'_, D>,
3428            offset: usize,
3429            depth: fidl::encoding::Depth,
3430        ) -> fidl::Result<()> {
3431            encoder.debug_check_bounds::<BindRule>(offset);
3432            // Zero out padding regions. There's no need to apply masks
3433            // because the unmasked parts will be overwritten by fields.
3434            unsafe {
3435                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
3436                (ptr as *mut u64).write_unaligned(0);
3437            }
3438            // Write the fields.
3439            self.0.encode(encoder, offset + 0, depth)?;
3440            self.1.encode(encoder, offset + 16, depth)?;
3441            self.2.encode(encoder, offset + 24, depth)?;
3442            Ok(())
3443        }
3444    }
3445
3446    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BindRule {
3447        #[inline(always)]
3448        fn new_empty() -> Self {
3449            Self {
3450                key: fidl::new_empty!(NodePropertyKey, D),
3451                condition: fidl::new_empty!(Condition, D),
3452                values: fidl::new_empty!(fidl::encoding::Vector<NodePropertyValue, 64>, D),
3453            }
3454        }
3455
3456        #[inline]
3457        unsafe fn decode(
3458            &mut self,
3459            decoder: &mut fidl::encoding::Decoder<'_, D>,
3460            offset: usize,
3461            _depth: fidl::encoding::Depth,
3462        ) -> fidl::Result<()> {
3463            decoder.debug_check_bounds::<Self>(offset);
3464            // Verify that padding bytes are zero.
3465            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
3466            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3467            let mask = 0xffffffff00000000u64;
3468            let maskedval = padval & mask;
3469            if maskedval != 0 {
3470                return Err(fidl::Error::NonZeroPadding {
3471                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
3472                });
3473            }
3474            fidl::decode!(NodePropertyKey, D, &mut self.key, decoder, offset + 0, _depth)?;
3475            fidl::decode!(Condition, D, &mut self.condition, decoder, offset + 16, _depth)?;
3476            fidl::decode!(fidl::encoding::Vector<NodePropertyValue, 64>, D, &mut self.values, decoder, offset + 24, _depth)?;
3477            Ok(())
3478        }
3479    }
3480
3481    impl fidl::encoding::ResourceTypeMarker for DriverStartRequest {
3482        type Borrowed<'a> = &'a mut Self;
3483        fn take_or_borrow<'a>(
3484            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3485        ) -> Self::Borrowed<'a> {
3486            value
3487        }
3488    }
3489
3490    unsafe impl fidl::encoding::TypeMarker for DriverStartRequest {
3491        type Owned = Self;
3492
3493        #[inline(always)]
3494        fn inline_align(_context: fidl::encoding::Context) -> usize {
3495            8
3496        }
3497
3498        #[inline(always)]
3499        fn inline_size(_context: fidl::encoding::Context) -> usize {
3500            16
3501        }
3502    }
3503
3504    unsafe impl
3505        fidl::encoding::Encode<DriverStartRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
3506        for &mut DriverStartRequest
3507    {
3508        #[inline]
3509        unsafe fn encode(
3510            self,
3511            encoder: &mut fidl::encoding::Encoder<
3512                '_,
3513                fidl::encoding::DefaultFuchsiaResourceDialect,
3514            >,
3515            offset: usize,
3516            _depth: fidl::encoding::Depth,
3517        ) -> fidl::Result<()> {
3518            encoder.debug_check_bounds::<DriverStartRequest>(offset);
3519            // Delegate to tuple encoding.
3520            fidl::encoding::Encode::<
3521                DriverStartRequest,
3522                fidl::encoding::DefaultFuchsiaResourceDialect,
3523            >::encode(
3524                (<DriverStartArgs as fidl::encoding::ResourceTypeMarker>::take_or_borrow(
3525                    &mut self.start_args,
3526                ),),
3527                encoder,
3528                offset,
3529                _depth,
3530            )
3531        }
3532    }
3533    unsafe impl<
3534            T0: fidl::encoding::Encode<DriverStartArgs, fidl::encoding::DefaultFuchsiaResourceDialect>,
3535        >
3536        fidl::encoding::Encode<DriverStartRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
3537        for (T0,)
3538    {
3539        #[inline]
3540        unsafe fn encode(
3541            self,
3542            encoder: &mut fidl::encoding::Encoder<
3543                '_,
3544                fidl::encoding::DefaultFuchsiaResourceDialect,
3545            >,
3546            offset: usize,
3547            depth: fidl::encoding::Depth,
3548        ) -> fidl::Result<()> {
3549            encoder.debug_check_bounds::<DriverStartRequest>(offset);
3550            // Zero out padding regions. There's no need to apply masks
3551            // because the unmasked parts will be overwritten by fields.
3552            // Write the fields.
3553            self.0.encode(encoder, offset + 0, depth)?;
3554            Ok(())
3555        }
3556    }
3557
3558    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3559        for DriverStartRequest
3560    {
3561        #[inline(always)]
3562        fn new_empty() -> Self {
3563            Self {
3564                start_args: fidl::new_empty!(
3565                    DriverStartArgs,
3566                    fidl::encoding::DefaultFuchsiaResourceDialect
3567                ),
3568            }
3569        }
3570
3571        #[inline]
3572        unsafe fn decode(
3573            &mut self,
3574            decoder: &mut fidl::encoding::Decoder<
3575                '_,
3576                fidl::encoding::DefaultFuchsiaResourceDialect,
3577            >,
3578            offset: usize,
3579            _depth: fidl::encoding::Depth,
3580        ) -> fidl::Result<()> {
3581            decoder.debug_check_bounds::<Self>(offset);
3582            // Verify that padding bytes are zero.
3583            fidl::decode!(
3584                DriverStartArgs,
3585                fidl::encoding::DefaultFuchsiaResourceDialect,
3586                &mut self.start_args,
3587                decoder,
3588                offset + 0,
3589                _depth
3590            )?;
3591            Ok(())
3592        }
3593    }
3594
3595    impl fidl::encoding::ResourceTypeMarker for NodeAddChildRequest {
3596        type Borrowed<'a> = &'a mut Self;
3597        fn take_or_borrow<'a>(
3598            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
3599        ) -> Self::Borrowed<'a> {
3600            value
3601        }
3602    }
3603
3604    unsafe impl fidl::encoding::TypeMarker for NodeAddChildRequest {
3605        type Owned = Self;
3606
3607        #[inline(always)]
3608        fn inline_align(_context: fidl::encoding::Context) -> usize {
3609            8
3610        }
3611
3612        #[inline(always)]
3613        fn inline_size(_context: fidl::encoding::Context) -> usize {
3614            24
3615        }
3616    }
3617
3618    unsafe impl
3619        fidl::encoding::Encode<NodeAddChildRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
3620        for &mut NodeAddChildRequest
3621    {
3622        #[inline]
3623        unsafe fn encode(
3624            self,
3625            encoder: &mut fidl::encoding::Encoder<
3626                '_,
3627                fidl::encoding::DefaultFuchsiaResourceDialect,
3628            >,
3629            offset: usize,
3630            _depth: fidl::encoding::Depth,
3631        ) -> fidl::Result<()> {
3632            encoder.debug_check_bounds::<NodeAddChildRequest>(offset);
3633            // Delegate to tuple encoding.
3634            fidl::encoding::Encode::<NodeAddChildRequest, fidl::encoding::DefaultFuchsiaResourceDialect>::encode(
3635                (
3636                    <NodeAddArgs as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.args),
3637                    <fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeControllerMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.controller),
3638                    <fidl::encoding::Optional<fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeMarker>>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow(&mut self.node),
3639                ),
3640                encoder, offset, _depth
3641            )
3642        }
3643    }
3644    unsafe impl<
3645            T0: fidl::encoding::Encode<NodeAddArgs, fidl::encoding::DefaultFuchsiaResourceDialect>,
3646            T1: fidl::encoding::Encode<
3647                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeControllerMarker>>,
3648                fidl::encoding::DefaultFuchsiaResourceDialect,
3649            >,
3650            T2: fidl::encoding::Encode<
3651                fidl::encoding::Optional<
3652                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeMarker>>,
3653                >,
3654                fidl::encoding::DefaultFuchsiaResourceDialect,
3655            >,
3656        >
3657        fidl::encoding::Encode<NodeAddChildRequest, fidl::encoding::DefaultFuchsiaResourceDialect>
3658        for (T0, T1, T2)
3659    {
3660        #[inline]
3661        unsafe fn encode(
3662            self,
3663            encoder: &mut fidl::encoding::Encoder<
3664                '_,
3665                fidl::encoding::DefaultFuchsiaResourceDialect,
3666            >,
3667            offset: usize,
3668            depth: fidl::encoding::Depth,
3669        ) -> fidl::Result<()> {
3670            encoder.debug_check_bounds::<NodeAddChildRequest>(offset);
3671            // Zero out padding regions. There's no need to apply masks
3672            // because the unmasked parts will be overwritten by fields.
3673            // Write the fields.
3674            self.0.encode(encoder, offset + 0, depth)?;
3675            self.1.encode(encoder, offset + 16, depth)?;
3676            self.2.encode(encoder, offset + 20, depth)?;
3677            Ok(())
3678        }
3679    }
3680
3681    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
3682        for NodeAddChildRequest
3683    {
3684        #[inline(always)]
3685        fn new_empty() -> Self {
3686            Self {
3687                args: fidl::new_empty!(NodeAddArgs, fidl::encoding::DefaultFuchsiaResourceDialect),
3688                controller: fidl::new_empty!(
3689                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeControllerMarker>>,
3690                    fidl::encoding::DefaultFuchsiaResourceDialect
3691                ),
3692                node: fidl::new_empty!(
3693                    fidl::encoding::Optional<
3694                        fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeMarker>>,
3695                    >,
3696                    fidl::encoding::DefaultFuchsiaResourceDialect
3697                ),
3698            }
3699        }
3700
3701        #[inline]
3702        unsafe fn decode(
3703            &mut self,
3704            decoder: &mut fidl::encoding::Decoder<
3705                '_,
3706                fidl::encoding::DefaultFuchsiaResourceDialect,
3707            >,
3708            offset: usize,
3709            _depth: fidl::encoding::Depth,
3710        ) -> fidl::Result<()> {
3711            decoder.debug_check_bounds::<Self>(offset);
3712            // Verify that padding bytes are zero.
3713            fidl::decode!(
3714                NodeAddArgs,
3715                fidl::encoding::DefaultFuchsiaResourceDialect,
3716                &mut self.args,
3717                decoder,
3718                offset + 0,
3719                _depth
3720            )?;
3721            fidl::decode!(
3722                fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeControllerMarker>>,
3723                fidl::encoding::DefaultFuchsiaResourceDialect,
3724                &mut self.controller,
3725                decoder,
3726                offset + 16,
3727                _depth
3728            )?;
3729            fidl::decode!(
3730                fidl::encoding::Optional<
3731                    fidl::encoding::Endpoint<fidl::endpoints::ServerEnd<NodeMarker>>,
3732                >,
3733                fidl::encoding::DefaultFuchsiaResourceDialect,
3734                &mut self.node,
3735                decoder,
3736                offset + 20,
3737                _depth
3738            )?;
3739            Ok(())
3740        }
3741    }
3742
3743    impl fidl::encoding::ValueTypeMarker for NodeProperty {
3744        type Borrowed<'a> = &'a Self;
3745        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3746            value
3747        }
3748    }
3749
3750    unsafe impl fidl::encoding::TypeMarker for NodeProperty {
3751        type Owned = Self;
3752
3753        #[inline(always)]
3754        fn inline_align(_context: fidl::encoding::Context) -> usize {
3755            8
3756        }
3757
3758        #[inline(always)]
3759        fn inline_size(_context: fidl::encoding::Context) -> usize {
3760            32
3761        }
3762    }
3763
3764    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeProperty, D>
3765        for &NodeProperty
3766    {
3767        #[inline]
3768        unsafe fn encode(
3769            self,
3770            encoder: &mut fidl::encoding::Encoder<'_, D>,
3771            offset: usize,
3772            _depth: fidl::encoding::Depth,
3773        ) -> fidl::Result<()> {
3774            encoder.debug_check_bounds::<NodeProperty>(offset);
3775            // Delegate to tuple encoding.
3776            fidl::encoding::Encode::<NodeProperty, D>::encode(
3777                (
3778                    <NodePropertyKey as fidl::encoding::ValueTypeMarker>::borrow(&self.key),
3779                    <NodePropertyValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
3780                ),
3781                encoder,
3782                offset,
3783                _depth,
3784            )
3785        }
3786    }
3787    unsafe impl<
3788            D: fidl::encoding::ResourceDialect,
3789            T0: fidl::encoding::Encode<NodePropertyKey, D>,
3790            T1: fidl::encoding::Encode<NodePropertyValue, D>,
3791        > fidl::encoding::Encode<NodeProperty, D> for (T0, T1)
3792    {
3793        #[inline]
3794        unsafe fn encode(
3795            self,
3796            encoder: &mut fidl::encoding::Encoder<'_, D>,
3797            offset: usize,
3798            depth: fidl::encoding::Depth,
3799        ) -> fidl::Result<()> {
3800            encoder.debug_check_bounds::<NodeProperty>(offset);
3801            // Zero out padding regions. There's no need to apply masks
3802            // because the unmasked parts will be overwritten by fields.
3803            // Write the fields.
3804            self.0.encode(encoder, offset + 0, depth)?;
3805            self.1.encode(encoder, offset + 16, depth)?;
3806            Ok(())
3807        }
3808    }
3809
3810    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeProperty {
3811        #[inline(always)]
3812        fn new_empty() -> Self {
3813            Self {
3814                key: fidl::new_empty!(NodePropertyKey, D),
3815                value: fidl::new_empty!(NodePropertyValue, D),
3816            }
3817        }
3818
3819        #[inline]
3820        unsafe fn decode(
3821            &mut self,
3822            decoder: &mut fidl::encoding::Decoder<'_, D>,
3823            offset: usize,
3824            _depth: fidl::encoding::Depth,
3825        ) -> fidl::Result<()> {
3826            decoder.debug_check_bounds::<Self>(offset);
3827            // Verify that padding bytes are zero.
3828            fidl::decode!(NodePropertyKey, D, &mut self.key, decoder, offset + 0, _depth)?;
3829            fidl::decode!(NodePropertyValue, D, &mut self.value, decoder, offset + 16, _depth)?;
3830            Ok(())
3831        }
3832    }
3833
3834    impl fidl::encoding::ValueTypeMarker for NodeProperty2 {
3835        type Borrowed<'a> = &'a Self;
3836        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3837            value
3838        }
3839    }
3840
3841    unsafe impl fidl::encoding::TypeMarker for NodeProperty2 {
3842        type Owned = Self;
3843
3844        #[inline(always)]
3845        fn inline_align(_context: fidl::encoding::Context) -> usize {
3846            8
3847        }
3848
3849        #[inline(always)]
3850        fn inline_size(_context: fidl::encoding::Context) -> usize {
3851            32
3852        }
3853    }
3854
3855    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeProperty2, D>
3856        for &NodeProperty2
3857    {
3858        #[inline]
3859        unsafe fn encode(
3860            self,
3861            encoder: &mut fidl::encoding::Encoder<'_, D>,
3862            offset: usize,
3863            _depth: fidl::encoding::Depth,
3864        ) -> fidl::Result<()> {
3865            encoder.debug_check_bounds::<NodeProperty2>(offset);
3866            // Delegate to tuple encoding.
3867            fidl::encoding::Encode::<NodeProperty2, D>::encode(
3868                (
3869                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
3870                        &self.key,
3871                    ),
3872                    <NodePropertyValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
3873                ),
3874                encoder,
3875                offset,
3876                _depth,
3877            )
3878        }
3879    }
3880    unsafe impl<
3881            D: fidl::encoding::ResourceDialect,
3882            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
3883            T1: fidl::encoding::Encode<NodePropertyValue, D>,
3884        > fidl::encoding::Encode<NodeProperty2, D> for (T0, T1)
3885    {
3886        #[inline]
3887        unsafe fn encode(
3888            self,
3889            encoder: &mut fidl::encoding::Encoder<'_, D>,
3890            offset: usize,
3891            depth: fidl::encoding::Depth,
3892        ) -> fidl::Result<()> {
3893            encoder.debug_check_bounds::<NodeProperty2>(offset);
3894            // Zero out padding regions. There's no need to apply masks
3895            // because the unmasked parts will be overwritten by fields.
3896            // Write the fields.
3897            self.0.encode(encoder, offset + 0, depth)?;
3898            self.1.encode(encoder, offset + 16, depth)?;
3899            Ok(())
3900        }
3901    }
3902
3903    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeProperty2 {
3904        #[inline(always)]
3905        fn new_empty() -> Self {
3906            Self {
3907                key: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
3908                value: fidl::new_empty!(NodePropertyValue, D),
3909            }
3910        }
3911
3912        #[inline]
3913        unsafe fn decode(
3914            &mut self,
3915            decoder: &mut fidl::encoding::Decoder<'_, D>,
3916            offset: usize,
3917            _depth: fidl::encoding::Depth,
3918        ) -> fidl::Result<()> {
3919            decoder.debug_check_bounds::<Self>(offset);
3920            // Verify that padding bytes are zero.
3921            fidl::decode!(
3922                fidl::encoding::BoundedString<256>,
3923                D,
3924                &mut self.key,
3925                decoder,
3926                offset + 0,
3927                _depth
3928            )?;
3929            fidl::decode!(NodePropertyValue, D, &mut self.value, decoder, offset + 16, _depth)?;
3930            Ok(())
3931        }
3932    }
3933
3934    impl fidl::encoding::ValueTypeMarker for NodePropertyEntry {
3935        type Borrowed<'a> = &'a Self;
3936        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3937            value
3938        }
3939    }
3940
3941    unsafe impl fidl::encoding::TypeMarker for NodePropertyEntry {
3942        type Owned = Self;
3943
3944        #[inline(always)]
3945        fn inline_align(_context: fidl::encoding::Context) -> usize {
3946            8
3947        }
3948
3949        #[inline(always)]
3950        fn inline_size(_context: fidl::encoding::Context) -> usize {
3951            32
3952        }
3953    }
3954
3955    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyEntry, D>
3956        for &NodePropertyEntry
3957    {
3958        #[inline]
3959        unsafe fn encode(
3960            self,
3961            encoder: &mut fidl::encoding::Encoder<'_, D>,
3962            offset: usize,
3963            _depth: fidl::encoding::Depth,
3964        ) -> fidl::Result<()> {
3965            encoder.debug_check_bounds::<NodePropertyEntry>(offset);
3966            // Delegate to tuple encoding.
3967            fidl::encoding::Encode::<NodePropertyEntry, D>::encode(
3968                (
3969                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
3970                    <fidl::encoding::Vector<NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
3971                ),
3972                encoder, offset, _depth
3973            )
3974        }
3975    }
3976    unsafe impl<
3977            D: fidl::encoding::ResourceDialect,
3978            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
3979            T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty, 64>, D>,
3980        > fidl::encoding::Encode<NodePropertyEntry, D> for (T0, T1)
3981    {
3982        #[inline]
3983        unsafe fn encode(
3984            self,
3985            encoder: &mut fidl::encoding::Encoder<'_, D>,
3986            offset: usize,
3987            depth: fidl::encoding::Depth,
3988        ) -> fidl::Result<()> {
3989            encoder.debug_check_bounds::<NodePropertyEntry>(offset);
3990            // Zero out padding regions. There's no need to apply masks
3991            // because the unmasked parts will be overwritten by fields.
3992            // Write the fields.
3993            self.0.encode(encoder, offset + 0, depth)?;
3994            self.1.encode(encoder, offset + 16, depth)?;
3995            Ok(())
3996        }
3997    }
3998
3999    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyEntry {
4000        #[inline(always)]
4001        fn new_empty() -> Self {
4002            Self {
4003                name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
4004                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty, 64>, D),
4005            }
4006        }
4007
4008        #[inline]
4009        unsafe fn decode(
4010            &mut self,
4011            decoder: &mut fidl::encoding::Decoder<'_, D>,
4012            offset: usize,
4013            _depth: fidl::encoding::Depth,
4014        ) -> fidl::Result<()> {
4015            decoder.debug_check_bounds::<Self>(offset);
4016            // Verify that padding bytes are zero.
4017            fidl::decode!(
4018                fidl::encoding::BoundedString<128>,
4019                D,
4020                &mut self.name,
4021                decoder,
4022                offset + 0,
4023                _depth
4024            )?;
4025            fidl::decode!(fidl::encoding::Vector<NodeProperty, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
4026            Ok(())
4027        }
4028    }
4029
4030    impl fidl::encoding::ValueTypeMarker for NodePropertyEntry2 {
4031        type Borrowed<'a> = &'a Self;
4032        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4033            value
4034        }
4035    }
4036
4037    unsafe impl fidl::encoding::TypeMarker for NodePropertyEntry2 {
4038        type Owned = Self;
4039
4040        #[inline(always)]
4041        fn inline_align(_context: fidl::encoding::Context) -> usize {
4042            8
4043        }
4044
4045        #[inline(always)]
4046        fn inline_size(_context: fidl::encoding::Context) -> usize {
4047            32
4048        }
4049    }
4050
4051    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyEntry2, D>
4052        for &NodePropertyEntry2
4053    {
4054        #[inline]
4055        unsafe fn encode(
4056            self,
4057            encoder: &mut fidl::encoding::Encoder<'_, D>,
4058            offset: usize,
4059            _depth: fidl::encoding::Depth,
4060        ) -> fidl::Result<()> {
4061            encoder.debug_check_bounds::<NodePropertyEntry2>(offset);
4062            // Delegate to tuple encoding.
4063            fidl::encoding::Encode::<NodePropertyEntry2, D>::encode(
4064                (
4065                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
4066                    <fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
4067                ),
4068                encoder, offset, _depth
4069            )
4070        }
4071    }
4072    unsafe impl<
4073            D: fidl::encoding::ResourceDialect,
4074            T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
4075            T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty2, 64>, D>,
4076        > fidl::encoding::Encode<NodePropertyEntry2, D> for (T0, T1)
4077    {
4078        #[inline]
4079        unsafe fn encode(
4080            self,
4081            encoder: &mut fidl::encoding::Encoder<'_, D>,
4082            offset: usize,
4083            depth: fidl::encoding::Depth,
4084        ) -> fidl::Result<()> {
4085            encoder.debug_check_bounds::<NodePropertyEntry2>(offset);
4086            // Zero out padding regions. There's no need to apply masks
4087            // because the unmasked parts will be overwritten by fields.
4088            // Write the fields.
4089            self.0.encode(encoder, offset + 0, depth)?;
4090            self.1.encode(encoder, offset + 16, depth)?;
4091            Ok(())
4092        }
4093    }
4094
4095    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyEntry2 {
4096        #[inline(always)]
4097        fn new_empty() -> Self {
4098            Self {
4099                name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
4100                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty2, 64>, D),
4101            }
4102        }
4103
4104        #[inline]
4105        unsafe fn decode(
4106            &mut self,
4107            decoder: &mut fidl::encoding::Decoder<'_, D>,
4108            offset: usize,
4109            _depth: fidl::encoding::Depth,
4110        ) -> fidl::Result<()> {
4111            decoder.debug_check_bounds::<Self>(offset);
4112            // Verify that padding bytes are zero.
4113            fidl::decode!(
4114                fidl::encoding::BoundedString<128>,
4115                D,
4116                &mut self.name,
4117                decoder,
4118                offset + 0,
4119                _depth
4120            )?;
4121            fidl::decode!(fidl::encoding::Vector<NodeProperty2, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
4122            Ok(())
4123        }
4124    }
4125
4126    impl fidl::encoding::ValueTypeMarker for ParentSpec {
4127        type Borrowed<'a> = &'a Self;
4128        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4129            value
4130        }
4131    }
4132
4133    unsafe impl fidl::encoding::TypeMarker for ParentSpec {
4134        type Owned = Self;
4135
4136        #[inline(always)]
4137        fn inline_align(_context: fidl::encoding::Context) -> usize {
4138            8
4139        }
4140
4141        #[inline(always)]
4142        fn inline_size(_context: fidl::encoding::Context) -> usize {
4143            32
4144        }
4145    }
4146
4147    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ParentSpec, D>
4148        for &ParentSpec
4149    {
4150        #[inline]
4151        unsafe fn encode(
4152            self,
4153            encoder: &mut fidl::encoding::Encoder<'_, D>,
4154            offset: usize,
4155            _depth: fidl::encoding::Depth,
4156        ) -> fidl::Result<()> {
4157            encoder.debug_check_bounds::<ParentSpec>(offset);
4158            // Delegate to tuple encoding.
4159            fidl::encoding::Encode::<ParentSpec, D>::encode(
4160                (
4161                    <fidl::encoding::Vector<BindRule, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.bind_rules),
4162                    <fidl::encoding::Vector<NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
4163                ),
4164                encoder, offset, _depth
4165            )
4166        }
4167    }
4168    unsafe impl<
4169            D: fidl::encoding::ResourceDialect,
4170            T0: fidl::encoding::Encode<fidl::encoding::Vector<BindRule, 64>, D>,
4171            T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty, 64>, D>,
4172        > fidl::encoding::Encode<ParentSpec, D> for (T0, T1)
4173    {
4174        #[inline]
4175        unsafe fn encode(
4176            self,
4177            encoder: &mut fidl::encoding::Encoder<'_, D>,
4178            offset: usize,
4179            depth: fidl::encoding::Depth,
4180        ) -> fidl::Result<()> {
4181            encoder.debug_check_bounds::<ParentSpec>(offset);
4182            // Zero out padding regions. There's no need to apply masks
4183            // because the unmasked parts will be overwritten by fields.
4184            // Write the fields.
4185            self.0.encode(encoder, offset + 0, depth)?;
4186            self.1.encode(encoder, offset + 16, depth)?;
4187            Ok(())
4188        }
4189    }
4190
4191    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ParentSpec {
4192        #[inline(always)]
4193        fn new_empty() -> Self {
4194            Self {
4195                bind_rules: fidl::new_empty!(fidl::encoding::Vector<BindRule, 64>, D),
4196                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty, 64>, D),
4197            }
4198        }
4199
4200        #[inline]
4201        unsafe fn decode(
4202            &mut self,
4203            decoder: &mut fidl::encoding::Decoder<'_, D>,
4204            offset: usize,
4205            _depth: fidl::encoding::Depth,
4206        ) -> fidl::Result<()> {
4207            decoder.debug_check_bounds::<Self>(offset);
4208            // Verify that padding bytes are zero.
4209            fidl::decode!(fidl::encoding::Vector<BindRule, 64>, D, &mut self.bind_rules, decoder, offset + 0, _depth)?;
4210            fidl::decode!(fidl::encoding::Vector<NodeProperty, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
4211            Ok(())
4212        }
4213    }
4214
4215    impl BusInfo {
4216        #[inline(always)]
4217        fn max_ordinal_present(&self) -> u64 {
4218            if let Some(_) = self.address_stability {
4219                return 3;
4220            }
4221            if let Some(_) = self.address {
4222                return 2;
4223            }
4224            if let Some(_) = self.bus {
4225                return 1;
4226            }
4227            0
4228        }
4229    }
4230
4231    impl fidl::encoding::ValueTypeMarker for BusInfo {
4232        type Borrowed<'a> = &'a Self;
4233        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4234            value
4235        }
4236    }
4237
4238    unsafe impl fidl::encoding::TypeMarker for BusInfo {
4239        type Owned = Self;
4240
4241        #[inline(always)]
4242        fn inline_align(_context: fidl::encoding::Context) -> usize {
4243            8
4244        }
4245
4246        #[inline(always)]
4247        fn inline_size(_context: fidl::encoding::Context) -> usize {
4248            16
4249        }
4250    }
4251
4252    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BusInfo, D> for &BusInfo {
4253        unsafe fn encode(
4254            self,
4255            encoder: &mut fidl::encoding::Encoder<'_, D>,
4256            offset: usize,
4257            mut depth: fidl::encoding::Depth,
4258        ) -> fidl::Result<()> {
4259            encoder.debug_check_bounds::<BusInfo>(offset);
4260            // Vector header
4261            let max_ordinal: u64 = self.max_ordinal_present();
4262            encoder.write_num(max_ordinal, offset);
4263            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4264            // Calling encoder.out_of_line_offset(0) is not allowed.
4265            if max_ordinal == 0 {
4266                return Ok(());
4267            }
4268            depth.increment()?;
4269            let envelope_size = 8;
4270            let bytes_len = max_ordinal as usize * envelope_size;
4271            #[allow(unused_variables)]
4272            let offset = encoder.out_of_line_offset(bytes_len);
4273            let mut _prev_end_offset: usize = 0;
4274            if 1 > max_ordinal {
4275                return Ok(());
4276            }
4277
4278            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4279            // are envelope_size bytes.
4280            let cur_offset: usize = (1 - 1) * envelope_size;
4281
4282            // Zero reserved fields.
4283            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4284
4285            // Safety:
4286            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4287            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4288            //   envelope_size bytes, there is always sufficient room.
4289            fidl::encoding::encode_in_envelope_optional::<BusType, D>(
4290                self.bus.as_ref().map(<BusType as fidl::encoding::ValueTypeMarker>::borrow),
4291                encoder,
4292                offset + cur_offset,
4293                depth,
4294            )?;
4295
4296            _prev_end_offset = cur_offset + envelope_size;
4297            if 2 > max_ordinal {
4298                return Ok(());
4299            }
4300
4301            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4302            // are envelope_size bytes.
4303            let cur_offset: usize = (2 - 1) * envelope_size;
4304
4305            // Zero reserved fields.
4306            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4307
4308            // Safety:
4309            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4310            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4311            //   envelope_size bytes, there is always sufficient room.
4312            fidl::encoding::encode_in_envelope_optional::<DeviceAddress, D>(
4313                self.address
4314                    .as_ref()
4315                    .map(<DeviceAddress as fidl::encoding::ValueTypeMarker>::borrow),
4316                encoder,
4317                offset + cur_offset,
4318                depth,
4319            )?;
4320
4321            _prev_end_offset = cur_offset + envelope_size;
4322            if 3 > max_ordinal {
4323                return Ok(());
4324            }
4325
4326            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4327            // are envelope_size bytes.
4328            let cur_offset: usize = (3 - 1) * envelope_size;
4329
4330            // Zero reserved fields.
4331            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4332
4333            // Safety:
4334            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4335            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4336            //   envelope_size bytes, there is always sufficient room.
4337            fidl::encoding::encode_in_envelope_optional::<DeviceAddressStability, D>(
4338                self.address_stability
4339                    .as_ref()
4340                    .map(<DeviceAddressStability as fidl::encoding::ValueTypeMarker>::borrow),
4341                encoder,
4342                offset + cur_offset,
4343                depth,
4344            )?;
4345
4346            _prev_end_offset = cur_offset + envelope_size;
4347
4348            Ok(())
4349        }
4350    }
4351
4352    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BusInfo {
4353        #[inline(always)]
4354        fn new_empty() -> Self {
4355            Self::default()
4356        }
4357
4358        unsafe fn decode(
4359            &mut self,
4360            decoder: &mut fidl::encoding::Decoder<'_, D>,
4361            offset: usize,
4362            mut depth: fidl::encoding::Depth,
4363        ) -> fidl::Result<()> {
4364            decoder.debug_check_bounds::<Self>(offset);
4365            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4366                None => return Err(fidl::Error::NotNullable),
4367                Some(len) => len,
4368            };
4369            // Calling decoder.out_of_line_offset(0) is not allowed.
4370            if len == 0 {
4371                return Ok(());
4372            };
4373            depth.increment()?;
4374            let envelope_size = 8;
4375            let bytes_len = len * envelope_size;
4376            let offset = decoder.out_of_line_offset(bytes_len)?;
4377            // Decode the envelope for each type.
4378            let mut _next_ordinal_to_read = 0;
4379            let mut next_offset = offset;
4380            let end_offset = offset + bytes_len;
4381            _next_ordinal_to_read += 1;
4382            if next_offset >= end_offset {
4383                return Ok(());
4384            }
4385
4386            // Decode unknown envelopes for gaps in ordinals.
4387            while _next_ordinal_to_read < 1 {
4388                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4389                _next_ordinal_to_read += 1;
4390                next_offset += envelope_size;
4391            }
4392
4393            let next_out_of_line = decoder.next_out_of_line();
4394            let handles_before = decoder.remaining_handles();
4395            if let Some((inlined, num_bytes, num_handles)) =
4396                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4397            {
4398                let member_inline_size =
4399                    <BusType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4400                if inlined != (member_inline_size <= 4) {
4401                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4402                }
4403                let inner_offset;
4404                let mut inner_depth = depth.clone();
4405                if inlined {
4406                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4407                    inner_offset = next_offset;
4408                } else {
4409                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4410                    inner_depth.increment()?;
4411                }
4412                let val_ref = self.bus.get_or_insert_with(|| fidl::new_empty!(BusType, D));
4413                fidl::decode!(BusType, D, val_ref, decoder, inner_offset, inner_depth)?;
4414                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4415                {
4416                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4417                }
4418                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4419                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4420                }
4421            }
4422
4423            next_offset += envelope_size;
4424            _next_ordinal_to_read += 1;
4425            if next_offset >= end_offset {
4426                return Ok(());
4427            }
4428
4429            // Decode unknown envelopes for gaps in ordinals.
4430            while _next_ordinal_to_read < 2 {
4431                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4432                _next_ordinal_to_read += 1;
4433                next_offset += envelope_size;
4434            }
4435
4436            let next_out_of_line = decoder.next_out_of_line();
4437            let handles_before = decoder.remaining_handles();
4438            if let Some((inlined, num_bytes, num_handles)) =
4439                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4440            {
4441                let member_inline_size =
4442                    <DeviceAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4443                if inlined != (member_inline_size <= 4) {
4444                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4445                }
4446                let inner_offset;
4447                let mut inner_depth = depth.clone();
4448                if inlined {
4449                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4450                    inner_offset = next_offset;
4451                } else {
4452                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4453                    inner_depth.increment()?;
4454                }
4455                let val_ref =
4456                    self.address.get_or_insert_with(|| fidl::new_empty!(DeviceAddress, D));
4457                fidl::decode!(DeviceAddress, D, val_ref, decoder, inner_offset, inner_depth)?;
4458                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4459                {
4460                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4461                }
4462                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4463                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4464                }
4465            }
4466
4467            next_offset += envelope_size;
4468            _next_ordinal_to_read += 1;
4469            if next_offset >= end_offset {
4470                return Ok(());
4471            }
4472
4473            // Decode unknown envelopes for gaps in ordinals.
4474            while _next_ordinal_to_read < 3 {
4475                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4476                _next_ordinal_to_read += 1;
4477                next_offset += envelope_size;
4478            }
4479
4480            let next_out_of_line = decoder.next_out_of_line();
4481            let handles_before = decoder.remaining_handles();
4482            if let Some((inlined, num_bytes, num_handles)) =
4483                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4484            {
4485                let member_inline_size =
4486                    <DeviceAddressStability as fidl::encoding::TypeMarker>::inline_size(
4487                        decoder.context,
4488                    );
4489                if inlined != (member_inline_size <= 4) {
4490                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4491                }
4492                let inner_offset;
4493                let mut inner_depth = depth.clone();
4494                if inlined {
4495                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4496                    inner_offset = next_offset;
4497                } else {
4498                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4499                    inner_depth.increment()?;
4500                }
4501                let val_ref = self
4502                    .address_stability
4503                    .get_or_insert_with(|| fidl::new_empty!(DeviceAddressStability, D));
4504                fidl::decode!(
4505                    DeviceAddressStability,
4506                    D,
4507                    val_ref,
4508                    decoder,
4509                    inner_offset,
4510                    inner_depth
4511                )?;
4512                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4513                {
4514                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4515                }
4516                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4517                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4518                }
4519            }
4520
4521            next_offset += envelope_size;
4522
4523            // Decode the remaining unknown envelopes.
4524            while next_offset < end_offset {
4525                _next_ordinal_to_read += 1;
4526                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4527                next_offset += envelope_size;
4528            }
4529
4530            Ok(())
4531        }
4532    }
4533
4534    impl CompositeDriverInfo {
4535        #[inline(always)]
4536        fn max_ordinal_present(&self) -> u64 {
4537            if let Some(_) = self.driver_info {
4538                return 2;
4539            }
4540            if let Some(_) = self.composite_name {
4541                return 1;
4542            }
4543            0
4544        }
4545    }
4546
4547    impl fidl::encoding::ValueTypeMarker for CompositeDriverInfo {
4548        type Borrowed<'a> = &'a Self;
4549        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4550            value
4551        }
4552    }
4553
4554    unsafe impl fidl::encoding::TypeMarker for CompositeDriverInfo {
4555        type Owned = Self;
4556
4557        #[inline(always)]
4558        fn inline_align(_context: fidl::encoding::Context) -> usize {
4559            8
4560        }
4561
4562        #[inline(always)]
4563        fn inline_size(_context: fidl::encoding::Context) -> usize {
4564            16
4565        }
4566    }
4567
4568    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeDriverInfo, D>
4569        for &CompositeDriverInfo
4570    {
4571        unsafe fn encode(
4572            self,
4573            encoder: &mut fidl::encoding::Encoder<'_, D>,
4574            offset: usize,
4575            mut depth: fidl::encoding::Depth,
4576        ) -> fidl::Result<()> {
4577            encoder.debug_check_bounds::<CompositeDriverInfo>(offset);
4578            // Vector header
4579            let max_ordinal: u64 = self.max_ordinal_present();
4580            encoder.write_num(max_ordinal, offset);
4581            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4582            // Calling encoder.out_of_line_offset(0) is not allowed.
4583            if max_ordinal == 0 {
4584                return Ok(());
4585            }
4586            depth.increment()?;
4587            let envelope_size = 8;
4588            let bytes_len = max_ordinal as usize * envelope_size;
4589            #[allow(unused_variables)]
4590            let offset = encoder.out_of_line_offset(bytes_len);
4591            let mut _prev_end_offset: usize = 0;
4592            if 1 > max_ordinal {
4593                return Ok(());
4594            }
4595
4596            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4597            // are envelope_size bytes.
4598            let cur_offset: usize = (1 - 1) * envelope_size;
4599
4600            // Zero reserved fields.
4601            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4602
4603            // Safety:
4604            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4605            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4606            //   envelope_size bytes, there is always sufficient room.
4607            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4608                self.composite_name.as_ref().map(
4609                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4610                ),
4611                encoder,
4612                offset + cur_offset,
4613                depth,
4614            )?;
4615
4616            _prev_end_offset = cur_offset + envelope_size;
4617            if 2 > max_ordinal {
4618                return Ok(());
4619            }
4620
4621            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4622            // are envelope_size bytes.
4623            let cur_offset: usize = (2 - 1) * envelope_size;
4624
4625            // Zero reserved fields.
4626            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4627
4628            // Safety:
4629            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4630            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4631            //   envelope_size bytes, there is always sufficient room.
4632            fidl::encoding::encode_in_envelope_optional::<DriverInfo, D>(
4633                self.driver_info
4634                    .as_ref()
4635                    .map(<DriverInfo as fidl::encoding::ValueTypeMarker>::borrow),
4636                encoder,
4637                offset + cur_offset,
4638                depth,
4639            )?;
4640
4641            _prev_end_offset = cur_offset + envelope_size;
4642
4643            Ok(())
4644        }
4645    }
4646
4647    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeDriverInfo {
4648        #[inline(always)]
4649        fn new_empty() -> Self {
4650            Self::default()
4651        }
4652
4653        unsafe fn decode(
4654            &mut self,
4655            decoder: &mut fidl::encoding::Decoder<'_, D>,
4656            offset: usize,
4657            mut depth: fidl::encoding::Depth,
4658        ) -> fidl::Result<()> {
4659            decoder.debug_check_bounds::<Self>(offset);
4660            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4661                None => return Err(fidl::Error::NotNullable),
4662                Some(len) => len,
4663            };
4664            // Calling decoder.out_of_line_offset(0) is not allowed.
4665            if len == 0 {
4666                return Ok(());
4667            };
4668            depth.increment()?;
4669            let envelope_size = 8;
4670            let bytes_len = len * envelope_size;
4671            let offset = decoder.out_of_line_offset(bytes_len)?;
4672            // Decode the envelope for each type.
4673            let mut _next_ordinal_to_read = 0;
4674            let mut next_offset = offset;
4675            let end_offset = offset + bytes_len;
4676            _next_ordinal_to_read += 1;
4677            if next_offset >= end_offset {
4678                return Ok(());
4679            }
4680
4681            // Decode unknown envelopes for gaps in ordinals.
4682            while _next_ordinal_to_read < 1 {
4683                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4684                _next_ordinal_to_read += 1;
4685                next_offset += envelope_size;
4686            }
4687
4688            let next_out_of_line = decoder.next_out_of_line();
4689            let handles_before = decoder.remaining_handles();
4690            if let Some((inlined, num_bytes, num_handles)) =
4691                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4692            {
4693                let member_inline_size =
4694                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4695                        decoder.context,
4696                    );
4697                if inlined != (member_inline_size <= 4) {
4698                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4699                }
4700                let inner_offset;
4701                let mut inner_depth = depth.clone();
4702                if inlined {
4703                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4704                    inner_offset = next_offset;
4705                } else {
4706                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4707                    inner_depth.increment()?;
4708                }
4709                let val_ref = self
4710                    .composite_name
4711                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4712                fidl::decode!(
4713                    fidl::encoding::UnboundedString,
4714                    D,
4715                    val_ref,
4716                    decoder,
4717                    inner_offset,
4718                    inner_depth
4719                )?;
4720                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4721                {
4722                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4723                }
4724                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4725                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4726                }
4727            }
4728
4729            next_offset += envelope_size;
4730            _next_ordinal_to_read += 1;
4731            if next_offset >= end_offset {
4732                return Ok(());
4733            }
4734
4735            // Decode unknown envelopes for gaps in ordinals.
4736            while _next_ordinal_to_read < 2 {
4737                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4738                _next_ordinal_to_read += 1;
4739                next_offset += envelope_size;
4740            }
4741
4742            let next_out_of_line = decoder.next_out_of_line();
4743            let handles_before = decoder.remaining_handles();
4744            if let Some((inlined, num_bytes, num_handles)) =
4745                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4746            {
4747                let member_inline_size =
4748                    <DriverInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4749                if inlined != (member_inline_size <= 4) {
4750                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4751                }
4752                let inner_offset;
4753                let mut inner_depth = depth.clone();
4754                if inlined {
4755                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4756                    inner_offset = next_offset;
4757                } else {
4758                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4759                    inner_depth.increment()?;
4760                }
4761                let val_ref =
4762                    self.driver_info.get_or_insert_with(|| fidl::new_empty!(DriverInfo, D));
4763                fidl::decode!(DriverInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
4764                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4765                {
4766                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4767                }
4768                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4769                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4770                }
4771            }
4772
4773            next_offset += envelope_size;
4774
4775            // Decode the remaining unknown envelopes.
4776            while next_offset < end_offset {
4777                _next_ordinal_to_read += 1;
4778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4779                next_offset += envelope_size;
4780            }
4781
4782            Ok(())
4783        }
4784    }
4785
4786    impl CompositeDriverMatch {
4787        #[inline(always)]
4788        fn max_ordinal_present(&self) -> u64 {
4789            if let Some(_) = self.primary_parent_index {
4790                return 3;
4791            }
4792            if let Some(_) = self.parent_names {
4793                return 2;
4794            }
4795            if let Some(_) = self.composite_driver {
4796                return 1;
4797            }
4798            0
4799        }
4800    }
4801
4802    impl fidl::encoding::ValueTypeMarker for CompositeDriverMatch {
4803        type Borrowed<'a> = &'a Self;
4804        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4805            value
4806        }
4807    }
4808
4809    unsafe impl fidl::encoding::TypeMarker for CompositeDriverMatch {
4810        type Owned = Self;
4811
4812        #[inline(always)]
4813        fn inline_align(_context: fidl::encoding::Context) -> usize {
4814            8
4815        }
4816
4817        #[inline(always)]
4818        fn inline_size(_context: fidl::encoding::Context) -> usize {
4819            16
4820        }
4821    }
4822
4823    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeDriverMatch, D>
4824        for &CompositeDriverMatch
4825    {
4826        unsafe fn encode(
4827            self,
4828            encoder: &mut fidl::encoding::Encoder<'_, D>,
4829            offset: usize,
4830            mut depth: fidl::encoding::Depth,
4831        ) -> fidl::Result<()> {
4832            encoder.debug_check_bounds::<CompositeDriverMatch>(offset);
4833            // Vector header
4834            let max_ordinal: u64 = self.max_ordinal_present();
4835            encoder.write_num(max_ordinal, offset);
4836            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4837            // Calling encoder.out_of_line_offset(0) is not allowed.
4838            if max_ordinal == 0 {
4839                return Ok(());
4840            }
4841            depth.increment()?;
4842            let envelope_size = 8;
4843            let bytes_len = max_ordinal as usize * envelope_size;
4844            #[allow(unused_variables)]
4845            let offset = encoder.out_of_line_offset(bytes_len);
4846            let mut _prev_end_offset: usize = 0;
4847            if 1 > max_ordinal {
4848                return Ok(());
4849            }
4850
4851            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4852            // are envelope_size bytes.
4853            let cur_offset: usize = (1 - 1) * envelope_size;
4854
4855            // Zero reserved fields.
4856            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4857
4858            // Safety:
4859            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4860            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4861            //   envelope_size bytes, there is always sufficient room.
4862            fidl::encoding::encode_in_envelope_optional::<CompositeDriverInfo, D>(
4863                self.composite_driver
4864                    .as_ref()
4865                    .map(<CompositeDriverInfo as fidl::encoding::ValueTypeMarker>::borrow),
4866                encoder,
4867                offset + cur_offset,
4868                depth,
4869            )?;
4870
4871            _prev_end_offset = cur_offset + envelope_size;
4872            if 2 > max_ordinal {
4873                return Ok(());
4874            }
4875
4876            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4877            // are envelope_size bytes.
4878            let cur_offset: usize = (2 - 1) * envelope_size;
4879
4880            // Zero reserved fields.
4881            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4882
4883            // Safety:
4884            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4885            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4886            //   envelope_size bytes, there is always sufficient room.
4887            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>, D>(
4888            self.parent_names.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow),
4889            encoder, offset + cur_offset, depth
4890        )?;
4891
4892            _prev_end_offset = cur_offset + envelope_size;
4893            if 3 > max_ordinal {
4894                return Ok(());
4895            }
4896
4897            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4898            // are envelope_size bytes.
4899            let cur_offset: usize = (3 - 1) * envelope_size;
4900
4901            // Zero reserved fields.
4902            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4903
4904            // Safety:
4905            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4906            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4907            //   envelope_size bytes, there is always sufficient room.
4908            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4909                self.primary_parent_index
4910                    .as_ref()
4911                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4912                encoder,
4913                offset + cur_offset,
4914                depth,
4915            )?;
4916
4917            _prev_end_offset = cur_offset + envelope_size;
4918
4919            Ok(())
4920        }
4921    }
4922
4923    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeDriverMatch {
4924        #[inline(always)]
4925        fn new_empty() -> Self {
4926            Self::default()
4927        }
4928
4929        unsafe fn decode(
4930            &mut self,
4931            decoder: &mut fidl::encoding::Decoder<'_, D>,
4932            offset: usize,
4933            mut depth: fidl::encoding::Depth,
4934        ) -> fidl::Result<()> {
4935            decoder.debug_check_bounds::<Self>(offset);
4936            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4937                None => return Err(fidl::Error::NotNullable),
4938                Some(len) => len,
4939            };
4940            // Calling decoder.out_of_line_offset(0) is not allowed.
4941            if len == 0 {
4942                return Ok(());
4943            };
4944            depth.increment()?;
4945            let envelope_size = 8;
4946            let bytes_len = len * envelope_size;
4947            let offset = decoder.out_of_line_offset(bytes_len)?;
4948            // Decode the envelope for each type.
4949            let mut _next_ordinal_to_read = 0;
4950            let mut next_offset = offset;
4951            let end_offset = offset + bytes_len;
4952            _next_ordinal_to_read += 1;
4953            if next_offset >= end_offset {
4954                return Ok(());
4955            }
4956
4957            // Decode unknown envelopes for gaps in ordinals.
4958            while _next_ordinal_to_read < 1 {
4959                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4960                _next_ordinal_to_read += 1;
4961                next_offset += envelope_size;
4962            }
4963
4964            let next_out_of_line = decoder.next_out_of_line();
4965            let handles_before = decoder.remaining_handles();
4966            if let Some((inlined, num_bytes, num_handles)) =
4967                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4968            {
4969                let member_inline_size =
4970                    <CompositeDriverInfo as fidl::encoding::TypeMarker>::inline_size(
4971                        decoder.context,
4972                    );
4973                if inlined != (member_inline_size <= 4) {
4974                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4975                }
4976                let inner_offset;
4977                let mut inner_depth = depth.clone();
4978                if inlined {
4979                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4980                    inner_offset = next_offset;
4981                } else {
4982                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4983                    inner_depth.increment()?;
4984                }
4985                let val_ref = self
4986                    .composite_driver
4987                    .get_or_insert_with(|| fidl::new_empty!(CompositeDriverInfo, D));
4988                fidl::decode!(CompositeDriverInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
4989                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4990                {
4991                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4992                }
4993                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4994                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4995                }
4996            }
4997
4998            next_offset += envelope_size;
4999            _next_ordinal_to_read += 1;
5000            if next_offset >= end_offset {
5001                return Ok(());
5002            }
5003
5004            // Decode unknown envelopes for gaps in ordinals.
5005            while _next_ordinal_to_read < 2 {
5006                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5007                _next_ordinal_to_read += 1;
5008                next_offset += envelope_size;
5009            }
5010
5011            let next_out_of_line = decoder.next_out_of_line();
5012            let handles_before = decoder.remaining_handles();
5013            if let Some((inlined, num_bytes, num_handles)) =
5014                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5015            {
5016                let member_inline_size = <fidl::encoding::UnboundedVector<
5017                    fidl::encoding::UnboundedString,
5018                > as fidl::encoding::TypeMarker>::inline_size(
5019                    decoder.context
5020                );
5021                if inlined != (member_inline_size <= 4) {
5022                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5023                }
5024                let inner_offset;
5025                let mut inner_depth = depth.clone();
5026                if inlined {
5027                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5028                    inner_offset = next_offset;
5029                } else {
5030                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5031                    inner_depth.increment()?;
5032                }
5033                let val_ref = self.parent_names.get_or_insert_with(|| {
5034                    fidl::new_empty!(
5035                        fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
5036                        D
5037                    )
5038                });
5039                fidl::decode!(
5040                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
5041                    D,
5042                    val_ref,
5043                    decoder,
5044                    inner_offset,
5045                    inner_depth
5046                )?;
5047                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5048                {
5049                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5050                }
5051                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5052                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5053                }
5054            }
5055
5056            next_offset += envelope_size;
5057            _next_ordinal_to_read += 1;
5058            if next_offset >= end_offset {
5059                return Ok(());
5060            }
5061
5062            // Decode unknown envelopes for gaps in ordinals.
5063            while _next_ordinal_to_read < 3 {
5064                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5065                _next_ordinal_to_read += 1;
5066                next_offset += envelope_size;
5067            }
5068
5069            let next_out_of_line = decoder.next_out_of_line();
5070            let handles_before = decoder.remaining_handles();
5071            if let Some((inlined, num_bytes, num_handles)) =
5072                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5073            {
5074                let member_inline_size =
5075                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5076                if inlined != (member_inline_size <= 4) {
5077                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5078                }
5079                let inner_offset;
5080                let mut inner_depth = depth.clone();
5081                if inlined {
5082                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5083                    inner_offset = next_offset;
5084                } else {
5085                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5086                    inner_depth.increment()?;
5087                }
5088                let val_ref =
5089                    self.primary_parent_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
5090                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5091                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5092                {
5093                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5094                }
5095                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5096                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5097                }
5098            }
5099
5100            next_offset += envelope_size;
5101
5102            // Decode the remaining unknown envelopes.
5103            while next_offset < end_offset {
5104                _next_ordinal_to_read += 1;
5105                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5106                next_offset += envelope_size;
5107            }
5108
5109            Ok(())
5110        }
5111    }
5112
5113    impl CompositeInfo {
5114        #[inline(always)]
5115        fn max_ordinal_present(&self) -> u64 {
5116            if let Some(_) = self.matched_driver {
5117                return 2;
5118            }
5119            if let Some(_) = self.spec {
5120                return 1;
5121            }
5122            0
5123        }
5124    }
5125
5126    impl fidl::encoding::ValueTypeMarker for CompositeInfo {
5127        type Borrowed<'a> = &'a Self;
5128        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5129            value
5130        }
5131    }
5132
5133    unsafe impl fidl::encoding::TypeMarker for CompositeInfo {
5134        type Owned = Self;
5135
5136        #[inline(always)]
5137        fn inline_align(_context: fidl::encoding::Context) -> usize {
5138            8
5139        }
5140
5141        #[inline(always)]
5142        fn inline_size(_context: fidl::encoding::Context) -> usize {
5143            16
5144        }
5145    }
5146
5147    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeInfo, D>
5148        for &CompositeInfo
5149    {
5150        unsafe fn encode(
5151            self,
5152            encoder: &mut fidl::encoding::Encoder<'_, D>,
5153            offset: usize,
5154            mut depth: fidl::encoding::Depth,
5155        ) -> fidl::Result<()> {
5156            encoder.debug_check_bounds::<CompositeInfo>(offset);
5157            // Vector header
5158            let max_ordinal: u64 = self.max_ordinal_present();
5159            encoder.write_num(max_ordinal, offset);
5160            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5161            // Calling encoder.out_of_line_offset(0) is not allowed.
5162            if max_ordinal == 0 {
5163                return Ok(());
5164            }
5165            depth.increment()?;
5166            let envelope_size = 8;
5167            let bytes_len = max_ordinal as usize * envelope_size;
5168            #[allow(unused_variables)]
5169            let offset = encoder.out_of_line_offset(bytes_len);
5170            let mut _prev_end_offset: usize = 0;
5171            if 1 > max_ordinal {
5172                return Ok(());
5173            }
5174
5175            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5176            // are envelope_size bytes.
5177            let cur_offset: usize = (1 - 1) * envelope_size;
5178
5179            // Zero reserved fields.
5180            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5181
5182            // Safety:
5183            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5184            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5185            //   envelope_size bytes, there is always sufficient room.
5186            fidl::encoding::encode_in_envelope_optional::<CompositeNodeSpec, D>(
5187                self.spec
5188                    .as_ref()
5189                    .map(<CompositeNodeSpec as fidl::encoding::ValueTypeMarker>::borrow),
5190                encoder,
5191                offset + cur_offset,
5192                depth,
5193            )?;
5194
5195            _prev_end_offset = cur_offset + envelope_size;
5196            if 2 > max_ordinal {
5197                return Ok(());
5198            }
5199
5200            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5201            // are envelope_size bytes.
5202            let cur_offset: usize = (2 - 1) * envelope_size;
5203
5204            // Zero reserved fields.
5205            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5206
5207            // Safety:
5208            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5209            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5210            //   envelope_size bytes, there is always sufficient room.
5211            fidl::encoding::encode_in_envelope_optional::<CompositeDriverMatch, D>(
5212                self.matched_driver
5213                    .as_ref()
5214                    .map(<CompositeDriverMatch as fidl::encoding::ValueTypeMarker>::borrow),
5215                encoder,
5216                offset + cur_offset,
5217                depth,
5218            )?;
5219
5220            _prev_end_offset = cur_offset + envelope_size;
5221
5222            Ok(())
5223        }
5224    }
5225
5226    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeInfo {
5227        #[inline(always)]
5228        fn new_empty() -> Self {
5229            Self::default()
5230        }
5231
5232        unsafe fn decode(
5233            &mut self,
5234            decoder: &mut fidl::encoding::Decoder<'_, D>,
5235            offset: usize,
5236            mut depth: fidl::encoding::Depth,
5237        ) -> fidl::Result<()> {
5238            decoder.debug_check_bounds::<Self>(offset);
5239            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5240                None => return Err(fidl::Error::NotNullable),
5241                Some(len) => len,
5242            };
5243            // Calling decoder.out_of_line_offset(0) is not allowed.
5244            if len == 0 {
5245                return Ok(());
5246            };
5247            depth.increment()?;
5248            let envelope_size = 8;
5249            let bytes_len = len * envelope_size;
5250            let offset = decoder.out_of_line_offset(bytes_len)?;
5251            // Decode the envelope for each type.
5252            let mut _next_ordinal_to_read = 0;
5253            let mut next_offset = offset;
5254            let end_offset = offset + bytes_len;
5255            _next_ordinal_to_read += 1;
5256            if next_offset >= end_offset {
5257                return Ok(());
5258            }
5259
5260            // Decode unknown envelopes for gaps in ordinals.
5261            while _next_ordinal_to_read < 1 {
5262                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5263                _next_ordinal_to_read += 1;
5264                next_offset += envelope_size;
5265            }
5266
5267            let next_out_of_line = decoder.next_out_of_line();
5268            let handles_before = decoder.remaining_handles();
5269            if let Some((inlined, num_bytes, num_handles)) =
5270                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5271            {
5272                let member_inline_size =
5273                    <CompositeNodeSpec as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5274                if inlined != (member_inline_size <= 4) {
5275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5276                }
5277                let inner_offset;
5278                let mut inner_depth = depth.clone();
5279                if inlined {
5280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5281                    inner_offset = next_offset;
5282                } else {
5283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5284                    inner_depth.increment()?;
5285                }
5286                let val_ref =
5287                    self.spec.get_or_insert_with(|| fidl::new_empty!(CompositeNodeSpec, D));
5288                fidl::decode!(CompositeNodeSpec, D, val_ref, decoder, inner_offset, inner_depth)?;
5289                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5290                {
5291                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5292                }
5293                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5294                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5295                }
5296            }
5297
5298            next_offset += envelope_size;
5299            _next_ordinal_to_read += 1;
5300            if next_offset >= end_offset {
5301                return Ok(());
5302            }
5303
5304            // Decode unknown envelopes for gaps in ordinals.
5305            while _next_ordinal_to_read < 2 {
5306                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5307                _next_ordinal_to_read += 1;
5308                next_offset += envelope_size;
5309            }
5310
5311            let next_out_of_line = decoder.next_out_of_line();
5312            let handles_before = decoder.remaining_handles();
5313            if let Some((inlined, num_bytes, num_handles)) =
5314                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5315            {
5316                let member_inline_size =
5317                    <CompositeDriverMatch as fidl::encoding::TypeMarker>::inline_size(
5318                        decoder.context,
5319                    );
5320                if inlined != (member_inline_size <= 4) {
5321                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5322                }
5323                let inner_offset;
5324                let mut inner_depth = depth.clone();
5325                if inlined {
5326                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5327                    inner_offset = next_offset;
5328                } else {
5329                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5330                    inner_depth.increment()?;
5331                }
5332                let val_ref = self
5333                    .matched_driver
5334                    .get_or_insert_with(|| fidl::new_empty!(CompositeDriverMatch, D));
5335                fidl::decode!(
5336                    CompositeDriverMatch,
5337                    D,
5338                    val_ref,
5339                    decoder,
5340                    inner_offset,
5341                    inner_depth
5342                )?;
5343                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5344                {
5345                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5346                }
5347                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5348                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5349                }
5350            }
5351
5352            next_offset += envelope_size;
5353
5354            // Decode the remaining unknown envelopes.
5355            while next_offset < end_offset {
5356                _next_ordinal_to_read += 1;
5357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5358                next_offset += envelope_size;
5359            }
5360
5361            Ok(())
5362        }
5363    }
5364
5365    impl CompositeNodeSpec {
5366        #[inline(always)]
5367        fn max_ordinal_present(&self) -> u64 {
5368            if let Some(_) = self.parents {
5369                return 2;
5370            }
5371            if let Some(_) = self.name {
5372                return 1;
5373            }
5374            0
5375        }
5376    }
5377
5378    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpec {
5379        type Borrowed<'a> = &'a Self;
5380        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5381            value
5382        }
5383    }
5384
5385    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpec {
5386        type Owned = Self;
5387
5388        #[inline(always)]
5389        fn inline_align(_context: fidl::encoding::Context) -> usize {
5390            8
5391        }
5392
5393        #[inline(always)]
5394        fn inline_size(_context: fidl::encoding::Context) -> usize {
5395            16
5396        }
5397    }
5398
5399    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeNodeSpec, D>
5400        for &CompositeNodeSpec
5401    {
5402        unsafe fn encode(
5403            self,
5404            encoder: &mut fidl::encoding::Encoder<'_, D>,
5405            offset: usize,
5406            mut depth: fidl::encoding::Depth,
5407        ) -> fidl::Result<()> {
5408            encoder.debug_check_bounds::<CompositeNodeSpec>(offset);
5409            // Vector header
5410            let max_ordinal: u64 = self.max_ordinal_present();
5411            encoder.write_num(max_ordinal, offset);
5412            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5413            // Calling encoder.out_of_line_offset(0) is not allowed.
5414            if max_ordinal == 0 {
5415                return Ok(());
5416            }
5417            depth.increment()?;
5418            let envelope_size = 8;
5419            let bytes_len = max_ordinal as usize * envelope_size;
5420            #[allow(unused_variables)]
5421            let offset = encoder.out_of_line_offset(bytes_len);
5422            let mut _prev_end_offset: usize = 0;
5423            if 1 > max_ordinal {
5424                return Ok(());
5425            }
5426
5427            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5428            // are envelope_size bytes.
5429            let cur_offset: usize = (1 - 1) * envelope_size;
5430
5431            // Zero reserved fields.
5432            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5433
5434            // Safety:
5435            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5436            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5437            //   envelope_size bytes, there is always sufficient room.
5438            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
5439                self.name.as_ref().map(
5440                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
5441                ),
5442                encoder,
5443                offset + cur_offset,
5444                depth,
5445            )?;
5446
5447            _prev_end_offset = cur_offset + envelope_size;
5448            if 2 > max_ordinal {
5449                return Ok(());
5450            }
5451
5452            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5453            // are envelope_size bytes.
5454            let cur_offset: usize = (2 - 1) * envelope_size;
5455
5456            // Zero reserved fields.
5457            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5458
5459            // Safety:
5460            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5461            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5462            //   envelope_size bytes, there is always sufficient room.
5463            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ParentSpec>, D>(
5464            self.parents.as_ref().map(<fidl::encoding::UnboundedVector<ParentSpec> as fidl::encoding::ValueTypeMarker>::borrow),
5465            encoder, offset + cur_offset, depth
5466        )?;
5467
5468            _prev_end_offset = cur_offset + envelope_size;
5469
5470            Ok(())
5471        }
5472    }
5473
5474    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeNodeSpec {
5475        #[inline(always)]
5476        fn new_empty() -> Self {
5477            Self::default()
5478        }
5479
5480        unsafe fn decode(
5481            &mut self,
5482            decoder: &mut fidl::encoding::Decoder<'_, D>,
5483            offset: usize,
5484            mut depth: fidl::encoding::Depth,
5485        ) -> fidl::Result<()> {
5486            decoder.debug_check_bounds::<Self>(offset);
5487            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5488                None => return Err(fidl::Error::NotNullable),
5489                Some(len) => len,
5490            };
5491            // Calling decoder.out_of_line_offset(0) is not allowed.
5492            if len == 0 {
5493                return Ok(());
5494            };
5495            depth.increment()?;
5496            let envelope_size = 8;
5497            let bytes_len = len * envelope_size;
5498            let offset = decoder.out_of_line_offset(bytes_len)?;
5499            // Decode the envelope for each type.
5500            let mut _next_ordinal_to_read = 0;
5501            let mut next_offset = offset;
5502            let end_offset = offset + bytes_len;
5503            _next_ordinal_to_read += 1;
5504            if next_offset >= end_offset {
5505                return Ok(());
5506            }
5507
5508            // Decode unknown envelopes for gaps in ordinals.
5509            while _next_ordinal_to_read < 1 {
5510                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5511                _next_ordinal_to_read += 1;
5512                next_offset += envelope_size;
5513            }
5514
5515            let next_out_of_line = decoder.next_out_of_line();
5516            let handles_before = decoder.remaining_handles();
5517            if let Some((inlined, num_bytes, num_handles)) =
5518                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5519            {
5520                let member_inline_size =
5521                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
5522                        decoder.context,
5523                    );
5524                if inlined != (member_inline_size <= 4) {
5525                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5526                }
5527                let inner_offset;
5528                let mut inner_depth = depth.clone();
5529                if inlined {
5530                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5531                    inner_offset = next_offset;
5532                } else {
5533                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5534                    inner_depth.increment()?;
5535                }
5536                let val_ref = self
5537                    .name
5538                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
5539                fidl::decode!(
5540                    fidl::encoding::UnboundedString,
5541                    D,
5542                    val_ref,
5543                    decoder,
5544                    inner_offset,
5545                    inner_depth
5546                )?;
5547                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5548                {
5549                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5550                }
5551                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5552                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5553                }
5554            }
5555
5556            next_offset += envelope_size;
5557            _next_ordinal_to_read += 1;
5558            if next_offset >= end_offset {
5559                return Ok(());
5560            }
5561
5562            // Decode unknown envelopes for gaps in ordinals.
5563            while _next_ordinal_to_read < 2 {
5564                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5565                _next_ordinal_to_read += 1;
5566                next_offset += envelope_size;
5567            }
5568
5569            let next_out_of_line = decoder.next_out_of_line();
5570            let handles_before = decoder.remaining_handles();
5571            if let Some((inlined, num_bytes, num_handles)) =
5572                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5573            {
5574                let member_inline_size = <fidl::encoding::UnboundedVector<ParentSpec> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5575                if inlined != (member_inline_size <= 4) {
5576                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5577                }
5578                let inner_offset;
5579                let mut inner_depth = depth.clone();
5580                if inlined {
5581                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5582                    inner_offset = next_offset;
5583                } else {
5584                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5585                    inner_depth.increment()?;
5586                }
5587                let val_ref = self.parents.get_or_insert_with(|| {
5588                    fidl::new_empty!(fidl::encoding::UnboundedVector<ParentSpec>, D)
5589                });
5590                fidl::decode!(
5591                    fidl::encoding::UnboundedVector<ParentSpec>,
5592                    D,
5593                    val_ref,
5594                    decoder,
5595                    inner_offset,
5596                    inner_depth
5597                )?;
5598                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5599                {
5600                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5601                }
5602                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5603                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5604                }
5605            }
5606
5607            next_offset += envelope_size;
5608
5609            // Decode the remaining unknown envelopes.
5610            while next_offset < end_offset {
5611                _next_ordinal_to_read += 1;
5612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5613                next_offset += envelope_size;
5614            }
5615
5616            Ok(())
5617        }
5618    }
5619
5620    impl CompositeParent {
5621        #[inline(always)]
5622        fn max_ordinal_present(&self) -> u64 {
5623            if let Some(_) = self.index {
5624                return 2;
5625            }
5626            if let Some(_) = self.composite {
5627                return 1;
5628            }
5629            0
5630        }
5631    }
5632
5633    impl fidl::encoding::ValueTypeMarker for CompositeParent {
5634        type Borrowed<'a> = &'a Self;
5635        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5636            value
5637        }
5638    }
5639
5640    unsafe impl fidl::encoding::TypeMarker for CompositeParent {
5641        type Owned = Self;
5642
5643        #[inline(always)]
5644        fn inline_align(_context: fidl::encoding::Context) -> usize {
5645            8
5646        }
5647
5648        #[inline(always)]
5649        fn inline_size(_context: fidl::encoding::Context) -> usize {
5650            16
5651        }
5652    }
5653
5654    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeParent, D>
5655        for &CompositeParent
5656    {
5657        unsafe fn encode(
5658            self,
5659            encoder: &mut fidl::encoding::Encoder<'_, D>,
5660            offset: usize,
5661            mut depth: fidl::encoding::Depth,
5662        ) -> fidl::Result<()> {
5663            encoder.debug_check_bounds::<CompositeParent>(offset);
5664            // Vector header
5665            let max_ordinal: u64 = self.max_ordinal_present();
5666            encoder.write_num(max_ordinal, offset);
5667            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5668            // Calling encoder.out_of_line_offset(0) is not allowed.
5669            if max_ordinal == 0 {
5670                return Ok(());
5671            }
5672            depth.increment()?;
5673            let envelope_size = 8;
5674            let bytes_len = max_ordinal as usize * envelope_size;
5675            #[allow(unused_variables)]
5676            let offset = encoder.out_of_line_offset(bytes_len);
5677            let mut _prev_end_offset: usize = 0;
5678            if 1 > max_ordinal {
5679                return Ok(());
5680            }
5681
5682            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5683            // are envelope_size bytes.
5684            let cur_offset: usize = (1 - 1) * envelope_size;
5685
5686            // Zero reserved fields.
5687            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5688
5689            // Safety:
5690            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5691            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5692            //   envelope_size bytes, there is always sufficient room.
5693            fidl::encoding::encode_in_envelope_optional::<CompositeInfo, D>(
5694                self.composite
5695                    .as_ref()
5696                    .map(<CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow),
5697                encoder,
5698                offset + cur_offset,
5699                depth,
5700            )?;
5701
5702            _prev_end_offset = cur_offset + envelope_size;
5703            if 2 > max_ordinal {
5704                return Ok(());
5705            }
5706
5707            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5708            // are envelope_size bytes.
5709            let cur_offset: usize = (2 - 1) * envelope_size;
5710
5711            // Zero reserved fields.
5712            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5713
5714            // Safety:
5715            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5716            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5717            //   envelope_size bytes, there is always sufficient room.
5718            fidl::encoding::encode_in_envelope_optional::<u32, D>(
5719                self.index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
5720                encoder,
5721                offset + cur_offset,
5722                depth,
5723            )?;
5724
5725            _prev_end_offset = cur_offset + envelope_size;
5726
5727            Ok(())
5728        }
5729    }
5730
5731    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeParent {
5732        #[inline(always)]
5733        fn new_empty() -> Self {
5734            Self::default()
5735        }
5736
5737        unsafe fn decode(
5738            &mut self,
5739            decoder: &mut fidl::encoding::Decoder<'_, D>,
5740            offset: usize,
5741            mut depth: fidl::encoding::Depth,
5742        ) -> fidl::Result<()> {
5743            decoder.debug_check_bounds::<Self>(offset);
5744            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5745                None => return Err(fidl::Error::NotNullable),
5746                Some(len) => len,
5747            };
5748            // Calling decoder.out_of_line_offset(0) is not allowed.
5749            if len == 0 {
5750                return Ok(());
5751            };
5752            depth.increment()?;
5753            let envelope_size = 8;
5754            let bytes_len = len * envelope_size;
5755            let offset = decoder.out_of_line_offset(bytes_len)?;
5756            // Decode the envelope for each type.
5757            let mut _next_ordinal_to_read = 0;
5758            let mut next_offset = offset;
5759            let end_offset = offset + bytes_len;
5760            _next_ordinal_to_read += 1;
5761            if next_offset >= end_offset {
5762                return Ok(());
5763            }
5764
5765            // Decode unknown envelopes for gaps in ordinals.
5766            while _next_ordinal_to_read < 1 {
5767                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5768                _next_ordinal_to_read += 1;
5769                next_offset += envelope_size;
5770            }
5771
5772            let next_out_of_line = decoder.next_out_of_line();
5773            let handles_before = decoder.remaining_handles();
5774            if let Some((inlined, num_bytes, num_handles)) =
5775                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5776            {
5777                let member_inline_size =
5778                    <CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5779                if inlined != (member_inline_size <= 4) {
5780                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5781                }
5782                let inner_offset;
5783                let mut inner_depth = depth.clone();
5784                if inlined {
5785                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5786                    inner_offset = next_offset;
5787                } else {
5788                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5789                    inner_depth.increment()?;
5790                }
5791                let val_ref =
5792                    self.composite.get_or_insert_with(|| fidl::new_empty!(CompositeInfo, D));
5793                fidl::decode!(CompositeInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
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            _next_ordinal_to_read += 1;
5805            if next_offset >= end_offset {
5806                return Ok(());
5807            }
5808
5809            // Decode unknown envelopes for gaps in ordinals.
5810            while _next_ordinal_to_read < 2 {
5811                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5812                _next_ordinal_to_read += 1;
5813                next_offset += envelope_size;
5814            }
5815
5816            let next_out_of_line = decoder.next_out_of_line();
5817            let handles_before = decoder.remaining_handles();
5818            if let Some((inlined, num_bytes, num_handles)) =
5819                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5820            {
5821                let member_inline_size =
5822                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5823                if inlined != (member_inline_size <= 4) {
5824                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5825                }
5826                let inner_offset;
5827                let mut inner_depth = depth.clone();
5828                if inlined {
5829                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5830                    inner_offset = next_offset;
5831                } else {
5832                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5833                    inner_depth.increment()?;
5834                }
5835                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u32, D));
5836                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
5837                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5838                {
5839                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5840                }
5841                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5842                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5843                }
5844            }
5845
5846            next_offset += envelope_size;
5847
5848            // Decode the remaining unknown envelopes.
5849            while next_offset < end_offset {
5850                _next_ordinal_to_read += 1;
5851                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5852                next_offset += envelope_size;
5853            }
5854
5855            Ok(())
5856        }
5857    }
5858
5859    impl DevfsAddArgs {
5860        #[inline(always)]
5861        fn max_ordinal_present(&self) -> u64 {
5862            if let Some(_) = self.controller_connector {
5863                return 5;
5864            }
5865            if let Some(_) = self.connector_supports {
5866                return 4;
5867            }
5868            if let Some(_) = self.inspect {
5869                return 3;
5870            }
5871            if let Some(_) = self.class_name {
5872                return 2;
5873            }
5874            if let Some(_) = self.connector {
5875                return 1;
5876            }
5877            0
5878        }
5879    }
5880
5881    impl fidl::encoding::ResourceTypeMarker for DevfsAddArgs {
5882        type Borrowed<'a> = &'a mut Self;
5883        fn take_or_borrow<'a>(
5884            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
5885        ) -> Self::Borrowed<'a> {
5886            value
5887        }
5888    }
5889
5890    unsafe impl fidl::encoding::TypeMarker for DevfsAddArgs {
5891        type Owned = Self;
5892
5893        #[inline(always)]
5894        fn inline_align(_context: fidl::encoding::Context) -> usize {
5895            8
5896        }
5897
5898        #[inline(always)]
5899        fn inline_size(_context: fidl::encoding::Context) -> usize {
5900            16
5901        }
5902    }
5903
5904    unsafe impl fidl::encoding::Encode<DevfsAddArgs, fidl::encoding::DefaultFuchsiaResourceDialect>
5905        for &mut DevfsAddArgs
5906    {
5907        unsafe fn encode(
5908            self,
5909            encoder: &mut fidl::encoding::Encoder<
5910                '_,
5911                fidl::encoding::DefaultFuchsiaResourceDialect,
5912            >,
5913            offset: usize,
5914            mut depth: fidl::encoding::Depth,
5915        ) -> fidl::Result<()> {
5916            encoder.debug_check_bounds::<DevfsAddArgs>(offset);
5917            // Vector header
5918            let max_ordinal: u64 = self.max_ordinal_present();
5919            encoder.write_num(max_ordinal, offset);
5920            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5921            // Calling encoder.out_of_line_offset(0) is not allowed.
5922            if max_ordinal == 0 {
5923                return Ok(());
5924            }
5925            depth.increment()?;
5926            let envelope_size = 8;
5927            let bytes_len = max_ordinal as usize * envelope_size;
5928            #[allow(unused_variables)]
5929            let offset = encoder.out_of_line_offset(bytes_len);
5930            let mut _prev_end_offset: usize = 0;
5931            if 1 > max_ordinal {
5932                return Ok(());
5933            }
5934
5935            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5936            // are envelope_size bytes.
5937            let cur_offset: usize = (1 - 1) * envelope_size;
5938
5939            // Zero reserved fields.
5940            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5941
5942            // Safety:
5943            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5944            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5945            //   envelope_size bytes, there is always sufficient room.
5946            fidl::encoding::encode_in_envelope_optional::<
5947                fidl::encoding::Endpoint<
5948                    fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
5949                >,
5950                fidl::encoding::DefaultFuchsiaResourceDialect,
5951            >(
5952                self.connector.as_mut().map(
5953                    <fidl::encoding::Endpoint<
5954                        fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
5955                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
5956                ),
5957                encoder,
5958                offset + cur_offset,
5959                depth,
5960            )?;
5961
5962            _prev_end_offset = cur_offset + envelope_size;
5963            if 2 > max_ordinal {
5964                return Ok(());
5965            }
5966
5967            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5968            // are envelope_size bytes.
5969            let cur_offset: usize = (2 - 1) * envelope_size;
5970
5971            // Zero reserved fields.
5972            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5973
5974            // Safety:
5975            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5976            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5977            //   envelope_size bytes, there is always sufficient room.
5978            fidl::encoding::encode_in_envelope_optional::<
5979                fidl::encoding::BoundedString<255>,
5980                fidl::encoding::DefaultFuchsiaResourceDialect,
5981            >(
5982                self.class_name.as_ref().map(
5983                    <fidl::encoding::BoundedString<255> as fidl::encoding::ValueTypeMarker>::borrow,
5984                ),
5985                encoder,
5986                offset + cur_offset,
5987                depth,
5988            )?;
5989
5990            _prev_end_offset = cur_offset + envelope_size;
5991            if 3 > max_ordinal {
5992                return Ok(());
5993            }
5994
5995            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5996            // are envelope_size bytes.
5997            let cur_offset: usize = (3 - 1) * envelope_size;
5998
5999            // Zero reserved fields.
6000            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6001
6002            // Safety:
6003            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6004            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6005            //   envelope_size bytes, there is always sufficient room.
6006            fidl::encoding::encode_in_envelope_optional::<
6007                fidl::encoding::HandleType<
6008                    fidl::Vmo,
6009                    { fidl::ObjectType::VMO.into_raw() },
6010                    2147483648,
6011                >,
6012                fidl::encoding::DefaultFuchsiaResourceDialect,
6013            >(
6014                self.inspect.as_mut().map(
6015                    <fidl::encoding::HandleType<
6016                        fidl::Vmo,
6017                        { fidl::ObjectType::VMO.into_raw() },
6018                        2147483648,
6019                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
6020                ),
6021                encoder,
6022                offset + cur_offset,
6023                depth,
6024            )?;
6025
6026            _prev_end_offset = cur_offset + envelope_size;
6027            if 4 > max_ordinal {
6028                return Ok(());
6029            }
6030
6031            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6032            // are envelope_size bytes.
6033            let cur_offset: usize = (4 - 1) * envelope_size;
6034
6035            // Zero reserved fields.
6036            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6037
6038            // Safety:
6039            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6040            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6041            //   envelope_size bytes, there is always sufficient room.
6042            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_device_fs::ConnectionType, fidl::encoding::DefaultFuchsiaResourceDialect>(
6043            self.connector_supports.as_ref().map(<fidl_fuchsia_device_fs::ConnectionType as fidl::encoding::ValueTypeMarker>::borrow),
6044            encoder, offset + cur_offset, depth
6045        )?;
6046
6047            _prev_end_offset = cur_offset + envelope_size;
6048            if 5 > max_ordinal {
6049                return Ok(());
6050            }
6051
6052            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6053            // are envelope_size bytes.
6054            let cur_offset: usize = (5 - 1) * envelope_size;
6055
6056            // Zero reserved fields.
6057            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6058
6059            // Safety:
6060            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6061            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6062            //   envelope_size bytes, there is always sufficient room.
6063            fidl::encoding::encode_in_envelope_optional::<
6064                fidl::encoding::Endpoint<
6065                    fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6066                >,
6067                fidl::encoding::DefaultFuchsiaResourceDialect,
6068            >(
6069                self.controller_connector.as_mut().map(
6070                    <fidl::encoding::Endpoint<
6071                        fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6072                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
6073                ),
6074                encoder,
6075                offset + cur_offset,
6076                depth,
6077            )?;
6078
6079            _prev_end_offset = cur_offset + envelope_size;
6080
6081            Ok(())
6082        }
6083    }
6084
6085    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for DevfsAddArgs {
6086        #[inline(always)]
6087        fn new_empty() -> Self {
6088            Self::default()
6089        }
6090
6091        unsafe fn decode(
6092            &mut self,
6093            decoder: &mut fidl::encoding::Decoder<
6094                '_,
6095                fidl::encoding::DefaultFuchsiaResourceDialect,
6096            >,
6097            offset: usize,
6098            mut depth: fidl::encoding::Depth,
6099        ) -> fidl::Result<()> {
6100            decoder.debug_check_bounds::<Self>(offset);
6101            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6102                None => return Err(fidl::Error::NotNullable),
6103                Some(len) => len,
6104            };
6105            // Calling decoder.out_of_line_offset(0) is not allowed.
6106            if len == 0 {
6107                return Ok(());
6108            };
6109            depth.increment()?;
6110            let envelope_size = 8;
6111            let bytes_len = len * envelope_size;
6112            let offset = decoder.out_of_line_offset(bytes_len)?;
6113            // Decode the envelope for each type.
6114            let mut _next_ordinal_to_read = 0;
6115            let mut next_offset = offset;
6116            let end_offset = offset + bytes_len;
6117            _next_ordinal_to_read += 1;
6118            if next_offset >= end_offset {
6119                return Ok(());
6120            }
6121
6122            // Decode unknown envelopes for gaps in ordinals.
6123            while _next_ordinal_to_read < 1 {
6124                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6125                _next_ordinal_to_read += 1;
6126                next_offset += envelope_size;
6127            }
6128
6129            let next_out_of_line = decoder.next_out_of_line();
6130            let handles_before = decoder.remaining_handles();
6131            if let Some((inlined, num_bytes, num_handles)) =
6132                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6133            {
6134                let member_inline_size = <fidl::encoding::Endpoint<
6135                    fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6136                > as fidl::encoding::TypeMarker>::inline_size(
6137                    decoder.context
6138                );
6139                if inlined != (member_inline_size <= 4) {
6140                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6141                }
6142                let inner_offset;
6143                let mut inner_depth = depth.clone();
6144                if inlined {
6145                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6146                    inner_offset = next_offset;
6147                } else {
6148                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6149                    inner_depth.increment()?;
6150                }
6151                let val_ref = self.connector.get_or_insert_with(|| {
6152                    fidl::new_empty!(
6153                        fidl::encoding::Endpoint<
6154                            fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6155                        >,
6156                        fidl::encoding::DefaultFuchsiaResourceDialect
6157                    )
6158                });
6159                fidl::decode!(
6160                    fidl::encoding::Endpoint<
6161                        fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6162                    >,
6163                    fidl::encoding::DefaultFuchsiaResourceDialect,
6164                    val_ref,
6165                    decoder,
6166                    inner_offset,
6167                    inner_depth
6168                )?;
6169                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6170                {
6171                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6172                }
6173                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6174                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6175                }
6176            }
6177
6178            next_offset += envelope_size;
6179            _next_ordinal_to_read += 1;
6180            if next_offset >= end_offset {
6181                return Ok(());
6182            }
6183
6184            // Decode unknown envelopes for gaps in ordinals.
6185            while _next_ordinal_to_read < 2 {
6186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6187                _next_ordinal_to_read += 1;
6188                next_offset += envelope_size;
6189            }
6190
6191            let next_out_of_line = decoder.next_out_of_line();
6192            let handles_before = decoder.remaining_handles();
6193            if let Some((inlined, num_bytes, num_handles)) =
6194                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6195            {
6196                let member_inline_size =
6197                    <fidl::encoding::BoundedString<255> as fidl::encoding::TypeMarker>::inline_size(
6198                        decoder.context,
6199                    );
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.class_name.get_or_insert_with(|| {
6213                    fidl::new_empty!(
6214                        fidl::encoding::BoundedString<255>,
6215                        fidl::encoding::DefaultFuchsiaResourceDialect
6216                    )
6217                });
6218                fidl::decode!(
6219                    fidl::encoding::BoundedString<255>,
6220                    fidl::encoding::DefaultFuchsiaResourceDialect,
6221                    val_ref,
6222                    decoder,
6223                    inner_offset,
6224                    inner_depth
6225                )?;
6226                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6227                {
6228                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6229                }
6230                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6231                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6232                }
6233            }
6234
6235            next_offset += envelope_size;
6236            _next_ordinal_to_read += 1;
6237            if next_offset >= end_offset {
6238                return Ok(());
6239            }
6240
6241            // Decode unknown envelopes for gaps in ordinals.
6242            while _next_ordinal_to_read < 3 {
6243                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6244                _next_ordinal_to_read += 1;
6245                next_offset += envelope_size;
6246            }
6247
6248            let next_out_of_line = decoder.next_out_of_line();
6249            let handles_before = decoder.remaining_handles();
6250            if let Some((inlined, num_bytes, num_handles)) =
6251                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6252            {
6253                let member_inline_size = <fidl::encoding::HandleType<
6254                    fidl::Vmo,
6255                    { fidl::ObjectType::VMO.into_raw() },
6256                    2147483648,
6257                > as fidl::encoding::TypeMarker>::inline_size(
6258                    decoder.context
6259                );
6260                if inlined != (member_inline_size <= 4) {
6261                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6262                }
6263                let inner_offset;
6264                let mut inner_depth = depth.clone();
6265                if inlined {
6266                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6267                    inner_offset = next_offset;
6268                } else {
6269                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6270                    inner_depth.increment()?;
6271                }
6272                let val_ref =
6273                self.inspect.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
6274                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
6275                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6276                {
6277                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6278                }
6279                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6280                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6281                }
6282            }
6283
6284            next_offset += envelope_size;
6285            _next_ordinal_to_read += 1;
6286            if next_offset >= end_offset {
6287                return Ok(());
6288            }
6289
6290            // Decode unknown envelopes for gaps in ordinals.
6291            while _next_ordinal_to_read < 4 {
6292                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6293                _next_ordinal_to_read += 1;
6294                next_offset += envelope_size;
6295            }
6296
6297            let next_out_of_line = decoder.next_out_of_line();
6298            let handles_before = decoder.remaining_handles();
6299            if let Some((inlined, num_bytes, num_handles)) =
6300                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6301            {
6302                let member_inline_size = <fidl_fuchsia_device_fs::ConnectionType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6303                if inlined != (member_inline_size <= 4) {
6304                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6305                }
6306                let inner_offset;
6307                let mut inner_depth = depth.clone();
6308                if inlined {
6309                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6310                    inner_offset = next_offset;
6311                } else {
6312                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6313                    inner_depth.increment()?;
6314                }
6315                let val_ref = self.connector_supports.get_or_insert_with(|| {
6316                    fidl::new_empty!(
6317                        fidl_fuchsia_device_fs::ConnectionType,
6318                        fidl::encoding::DefaultFuchsiaResourceDialect
6319                    )
6320                });
6321                fidl::decode!(
6322                    fidl_fuchsia_device_fs::ConnectionType,
6323                    fidl::encoding::DefaultFuchsiaResourceDialect,
6324                    val_ref,
6325                    decoder,
6326                    inner_offset,
6327                    inner_depth
6328                )?;
6329                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6330                {
6331                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6332                }
6333                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6334                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6335                }
6336            }
6337
6338            next_offset += envelope_size;
6339            _next_ordinal_to_read += 1;
6340            if next_offset >= end_offset {
6341                return Ok(());
6342            }
6343
6344            // Decode unknown envelopes for gaps in ordinals.
6345            while _next_ordinal_to_read < 5 {
6346                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6347                _next_ordinal_to_read += 1;
6348                next_offset += envelope_size;
6349            }
6350
6351            let next_out_of_line = decoder.next_out_of_line();
6352            let handles_before = decoder.remaining_handles();
6353            if let Some((inlined, num_bytes, num_handles)) =
6354                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6355            {
6356                let member_inline_size = <fidl::encoding::Endpoint<
6357                    fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6358                > as fidl::encoding::TypeMarker>::inline_size(
6359                    decoder.context
6360                );
6361                if inlined != (member_inline_size <= 4) {
6362                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6363                }
6364                let inner_offset;
6365                let mut inner_depth = depth.clone();
6366                if inlined {
6367                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6368                    inner_offset = next_offset;
6369                } else {
6370                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6371                    inner_depth.increment()?;
6372                }
6373                let val_ref = self.controller_connector.get_or_insert_with(|| {
6374                    fidl::new_empty!(
6375                        fidl::encoding::Endpoint<
6376                            fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6377                        >,
6378                        fidl::encoding::DefaultFuchsiaResourceDialect
6379                    )
6380                });
6381                fidl::decode!(
6382                    fidl::encoding::Endpoint<
6383                        fidl::endpoints::ClientEnd<fidl_fuchsia_device_fs::ConnectorMarker>,
6384                    >,
6385                    fidl::encoding::DefaultFuchsiaResourceDialect,
6386                    val_ref,
6387                    decoder,
6388                    inner_offset,
6389                    inner_depth
6390                )?;
6391                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6392                {
6393                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6394                }
6395                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6396                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6397                }
6398            }
6399
6400            next_offset += envelope_size;
6401
6402            // Decode the remaining unknown envelopes.
6403            while next_offset < end_offset {
6404                _next_ordinal_to_read += 1;
6405                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6406                next_offset += envelope_size;
6407            }
6408
6409            Ok(())
6410        }
6411    }
6412
6413    impl DeviceCategory {
6414        #[inline(always)]
6415        fn max_ordinal_present(&self) -> u64 {
6416            if let Some(_) = self.subcategory {
6417                return 2;
6418            }
6419            if let Some(_) = self.category {
6420                return 1;
6421            }
6422            0
6423        }
6424    }
6425
6426    impl fidl::encoding::ValueTypeMarker for DeviceCategory {
6427        type Borrowed<'a> = &'a Self;
6428        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6429            value
6430        }
6431    }
6432
6433    unsafe impl fidl::encoding::TypeMarker for DeviceCategory {
6434        type Owned = Self;
6435
6436        #[inline(always)]
6437        fn inline_align(_context: fidl::encoding::Context) -> usize {
6438            8
6439        }
6440
6441        #[inline(always)]
6442        fn inline_size(_context: fidl::encoding::Context) -> usize {
6443            16
6444        }
6445    }
6446
6447    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceCategory, D>
6448        for &DeviceCategory
6449    {
6450        unsafe fn encode(
6451            self,
6452            encoder: &mut fidl::encoding::Encoder<'_, D>,
6453            offset: usize,
6454            mut depth: fidl::encoding::Depth,
6455        ) -> fidl::Result<()> {
6456            encoder.debug_check_bounds::<DeviceCategory>(offset);
6457            // Vector header
6458            let max_ordinal: u64 = self.max_ordinal_present();
6459            encoder.write_num(max_ordinal, offset);
6460            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6461            // Calling encoder.out_of_line_offset(0) is not allowed.
6462            if max_ordinal == 0 {
6463                return Ok(());
6464            }
6465            depth.increment()?;
6466            let envelope_size = 8;
6467            let bytes_len = max_ordinal as usize * envelope_size;
6468            #[allow(unused_variables)]
6469            let offset = encoder.out_of_line_offset(bytes_len);
6470            let mut _prev_end_offset: usize = 0;
6471            if 1 > max_ordinal {
6472                return Ok(());
6473            }
6474
6475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6476            // are envelope_size bytes.
6477            let cur_offset: usize = (1 - 1) * envelope_size;
6478
6479            // Zero reserved fields.
6480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6481
6482            // Safety:
6483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6485            //   envelope_size bytes, there is always sufficient room.
6486            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
6487                self.category.as_ref().map(
6488                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6489                ),
6490                encoder,
6491                offset + cur_offset,
6492                depth,
6493            )?;
6494
6495            _prev_end_offset = cur_offset + envelope_size;
6496            if 2 > max_ordinal {
6497                return Ok(());
6498            }
6499
6500            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6501            // are envelope_size bytes.
6502            let cur_offset: usize = (2 - 1) * envelope_size;
6503
6504            // Zero reserved fields.
6505            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6506
6507            // Safety:
6508            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6509            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6510            //   envelope_size bytes, there is always sufficient room.
6511            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
6512                self.subcategory.as_ref().map(
6513                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6514                ),
6515                encoder,
6516                offset + cur_offset,
6517                depth,
6518            )?;
6519
6520            _prev_end_offset = cur_offset + envelope_size;
6521
6522            Ok(())
6523        }
6524    }
6525
6526    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceCategory {
6527        #[inline(always)]
6528        fn new_empty() -> Self {
6529            Self::default()
6530        }
6531
6532        unsafe fn decode(
6533            &mut self,
6534            decoder: &mut fidl::encoding::Decoder<'_, D>,
6535            offset: usize,
6536            mut depth: fidl::encoding::Depth,
6537        ) -> fidl::Result<()> {
6538            decoder.debug_check_bounds::<Self>(offset);
6539            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6540                None => return Err(fidl::Error::NotNullable),
6541                Some(len) => len,
6542            };
6543            // Calling decoder.out_of_line_offset(0) is not allowed.
6544            if len == 0 {
6545                return Ok(());
6546            };
6547            depth.increment()?;
6548            let envelope_size = 8;
6549            let bytes_len = len * envelope_size;
6550            let offset = decoder.out_of_line_offset(bytes_len)?;
6551            // Decode the envelope for each type.
6552            let mut _next_ordinal_to_read = 0;
6553            let mut next_offset = offset;
6554            let end_offset = offset + bytes_len;
6555            _next_ordinal_to_read += 1;
6556            if next_offset >= end_offset {
6557                return Ok(());
6558            }
6559
6560            // Decode unknown envelopes for gaps in ordinals.
6561            while _next_ordinal_to_read < 1 {
6562                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6563                _next_ordinal_to_read += 1;
6564                next_offset += envelope_size;
6565            }
6566
6567            let next_out_of_line = decoder.next_out_of_line();
6568            let handles_before = decoder.remaining_handles();
6569            if let Some((inlined, num_bytes, num_handles)) =
6570                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6571            {
6572                let member_inline_size =
6573                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
6574                        decoder.context,
6575                    );
6576                if inlined != (member_inline_size <= 4) {
6577                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6578                }
6579                let inner_offset;
6580                let mut inner_depth = depth.clone();
6581                if inlined {
6582                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6583                    inner_offset = next_offset;
6584                } else {
6585                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6586                    inner_depth.increment()?;
6587                }
6588                let val_ref = self
6589                    .category
6590                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
6591                fidl::decode!(
6592                    fidl::encoding::UnboundedString,
6593                    D,
6594                    val_ref,
6595                    decoder,
6596                    inner_offset,
6597                    inner_depth
6598                )?;
6599                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6600                {
6601                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6602                }
6603                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6604                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6605                }
6606            }
6607
6608            next_offset += envelope_size;
6609            _next_ordinal_to_read += 1;
6610            if next_offset >= end_offset {
6611                return Ok(());
6612            }
6613
6614            // Decode unknown envelopes for gaps in ordinals.
6615            while _next_ordinal_to_read < 2 {
6616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6617                _next_ordinal_to_read += 1;
6618                next_offset += envelope_size;
6619            }
6620
6621            let next_out_of_line = decoder.next_out_of_line();
6622            let handles_before = decoder.remaining_handles();
6623            if let Some((inlined, num_bytes, num_handles)) =
6624                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6625            {
6626                let member_inline_size =
6627                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
6628                        decoder.context,
6629                    );
6630                if inlined != (member_inline_size <= 4) {
6631                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6632                }
6633                let inner_offset;
6634                let mut inner_depth = depth.clone();
6635                if inlined {
6636                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6637                    inner_offset = next_offset;
6638                } else {
6639                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6640                    inner_depth.increment()?;
6641                }
6642                let val_ref = self
6643                    .subcategory
6644                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
6645                fidl::decode!(
6646                    fidl::encoding::UnboundedString,
6647                    D,
6648                    val_ref,
6649                    decoder,
6650                    inner_offset,
6651                    inner_depth
6652                )?;
6653                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6654                {
6655                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6656                }
6657                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6658                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6659                }
6660            }
6661
6662            next_offset += envelope_size;
6663
6664            // Decode the remaining unknown envelopes.
6665            while next_offset < end_offset {
6666                _next_ordinal_to_read += 1;
6667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6668                next_offset += envelope_size;
6669            }
6670
6671            Ok(())
6672        }
6673    }
6674
6675    impl DriverInfo {
6676        #[inline(always)]
6677        fn max_ordinal_present(&self) -> u64 {
6678            if let Some(_) = self.is_disabled {
6679                return 9;
6680            }
6681            if let Some(_) = self.driver_framework_version {
6682                return 8;
6683            }
6684            if let Some(_) = self.bind_rules_bytecode {
6685                return 7;
6686            }
6687            if let Some(_) = self.device_categories {
6688                return 6;
6689            }
6690            if let Some(_) = self.is_fallback {
6691                return 5;
6692            }
6693            if let Some(_) = self.package_type {
6694                return 4;
6695            }
6696            if let Some(_) = self.colocate {
6697                return 3;
6698            }
6699            if let Some(_) = self.name {
6700                return 2;
6701            }
6702            if let Some(_) = self.url {
6703                return 1;
6704            }
6705            0
6706        }
6707    }
6708
6709    impl fidl::encoding::ValueTypeMarker for DriverInfo {
6710        type Borrowed<'a> = &'a Self;
6711        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6712            value
6713        }
6714    }
6715
6716    unsafe impl fidl::encoding::TypeMarker for DriverInfo {
6717        type Owned = Self;
6718
6719        #[inline(always)]
6720        fn inline_align(_context: fidl::encoding::Context) -> usize {
6721            8
6722        }
6723
6724        #[inline(always)]
6725        fn inline_size(_context: fidl::encoding::Context) -> usize {
6726            16
6727        }
6728    }
6729
6730    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DriverInfo, D>
6731        for &DriverInfo
6732    {
6733        unsafe fn encode(
6734            self,
6735            encoder: &mut fidl::encoding::Encoder<'_, D>,
6736            offset: usize,
6737            mut depth: fidl::encoding::Depth,
6738        ) -> fidl::Result<()> {
6739            encoder.debug_check_bounds::<DriverInfo>(offset);
6740            // Vector header
6741            let max_ordinal: u64 = self.max_ordinal_present();
6742            encoder.write_num(max_ordinal, offset);
6743            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6744            // Calling encoder.out_of_line_offset(0) is not allowed.
6745            if max_ordinal == 0 {
6746                return Ok(());
6747            }
6748            depth.increment()?;
6749            let envelope_size = 8;
6750            let bytes_len = max_ordinal as usize * envelope_size;
6751            #[allow(unused_variables)]
6752            let offset = encoder.out_of_line_offset(bytes_len);
6753            let mut _prev_end_offset: usize = 0;
6754            if 1 > max_ordinal {
6755                return Ok(());
6756            }
6757
6758            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6759            // are envelope_size bytes.
6760            let cur_offset: usize = (1 - 1) * envelope_size;
6761
6762            // Zero reserved fields.
6763            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6764
6765            // Safety:
6766            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6767            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6768            //   envelope_size bytes, there is always sufficient room.
6769            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
6770            self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
6771            encoder, offset + cur_offset, depth
6772        )?;
6773
6774            _prev_end_offset = cur_offset + envelope_size;
6775            if 2 > max_ordinal {
6776                return Ok(());
6777            }
6778
6779            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6780            // are envelope_size bytes.
6781            let cur_offset: usize = (2 - 1) * envelope_size;
6782
6783            // Zero reserved fields.
6784            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6785
6786            // Safety:
6787            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6788            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6789            //   envelope_size bytes, there is always sufficient room.
6790            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
6791                self.name.as_ref().map(
6792                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6793                ),
6794                encoder,
6795                offset + cur_offset,
6796                depth,
6797            )?;
6798
6799            _prev_end_offset = cur_offset + envelope_size;
6800            if 3 > max_ordinal {
6801                return Ok(());
6802            }
6803
6804            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6805            // are envelope_size bytes.
6806            let cur_offset: usize = (3 - 1) * envelope_size;
6807
6808            // Zero reserved fields.
6809            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6810
6811            // Safety:
6812            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6813            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6814            //   envelope_size bytes, there is always sufficient room.
6815            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6816                self.colocate.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6817                encoder,
6818                offset + cur_offset,
6819                depth,
6820            )?;
6821
6822            _prev_end_offset = cur_offset + envelope_size;
6823            if 4 > max_ordinal {
6824                return Ok(());
6825            }
6826
6827            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6828            // are envelope_size bytes.
6829            let cur_offset: usize = (4 - 1) * envelope_size;
6830
6831            // Zero reserved fields.
6832            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6833
6834            // Safety:
6835            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6836            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6837            //   envelope_size bytes, there is always sufficient room.
6838            fidl::encoding::encode_in_envelope_optional::<DriverPackageType, D>(
6839                self.package_type
6840                    .as_ref()
6841                    .map(<DriverPackageType as fidl::encoding::ValueTypeMarker>::borrow),
6842                encoder,
6843                offset + cur_offset,
6844                depth,
6845            )?;
6846
6847            _prev_end_offset = cur_offset + envelope_size;
6848            if 5 > max_ordinal {
6849                return Ok(());
6850            }
6851
6852            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6853            // are envelope_size bytes.
6854            let cur_offset: usize = (5 - 1) * envelope_size;
6855
6856            // Zero reserved fields.
6857            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6858
6859            // Safety:
6860            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6861            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6862            //   envelope_size bytes, there is always sufficient room.
6863            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6864                self.is_fallback.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6865                encoder,
6866                offset + cur_offset,
6867                depth,
6868            )?;
6869
6870            _prev_end_offset = cur_offset + envelope_size;
6871            if 6 > max_ordinal {
6872                return Ok(());
6873            }
6874
6875            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6876            // are envelope_size bytes.
6877            let cur_offset: usize = (6 - 1) * envelope_size;
6878
6879            // Zero reserved fields.
6880            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6881
6882            // Safety:
6883            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6884            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6885            //   envelope_size bytes, there is always sufficient room.
6886            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DeviceCategory>, D>(
6887            self.device_categories.as_ref().map(<fidl::encoding::UnboundedVector<DeviceCategory> as fidl::encoding::ValueTypeMarker>::borrow),
6888            encoder, offset + cur_offset, depth
6889        )?;
6890
6891            _prev_end_offset = cur_offset + envelope_size;
6892            if 7 > max_ordinal {
6893                return Ok(());
6894            }
6895
6896            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6897            // are envelope_size bytes.
6898            let cur_offset: usize = (7 - 1) * envelope_size;
6899
6900            // Zero reserved fields.
6901            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6902
6903            // Safety:
6904            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6905            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6906            //   envelope_size bytes, there is always sufficient room.
6907            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
6908            self.bind_rules_bytecode.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
6909            encoder, offset + cur_offset, depth
6910        )?;
6911
6912            _prev_end_offset = cur_offset + envelope_size;
6913            if 8 > max_ordinal {
6914                return Ok(());
6915            }
6916
6917            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6918            // are envelope_size bytes.
6919            let cur_offset: usize = (8 - 1) * envelope_size;
6920
6921            // Zero reserved fields.
6922            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6923
6924            // Safety:
6925            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6926            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6927            //   envelope_size bytes, there is always sufficient room.
6928            fidl::encoding::encode_in_envelope_optional::<u8, D>(
6929                self.driver_framework_version
6930                    .as_ref()
6931                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
6932                encoder,
6933                offset + cur_offset,
6934                depth,
6935            )?;
6936
6937            _prev_end_offset = cur_offset + envelope_size;
6938            if 9 > max_ordinal {
6939                return Ok(());
6940            }
6941
6942            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6943            // are envelope_size bytes.
6944            let cur_offset: usize = (9 - 1) * envelope_size;
6945
6946            // Zero reserved fields.
6947            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6948
6949            // Safety:
6950            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6951            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6952            //   envelope_size bytes, there is always sufficient room.
6953            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6954                self.is_disabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6955                encoder,
6956                offset + cur_offset,
6957                depth,
6958            )?;
6959
6960            _prev_end_offset = cur_offset + envelope_size;
6961
6962            Ok(())
6963        }
6964    }
6965
6966    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverInfo {
6967        #[inline(always)]
6968        fn new_empty() -> Self {
6969            Self::default()
6970        }
6971
6972        unsafe fn decode(
6973            &mut self,
6974            decoder: &mut fidl::encoding::Decoder<'_, D>,
6975            offset: usize,
6976            mut depth: fidl::encoding::Depth,
6977        ) -> fidl::Result<()> {
6978            decoder.debug_check_bounds::<Self>(offset);
6979            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6980                None => return Err(fidl::Error::NotNullable),
6981                Some(len) => len,
6982            };
6983            // Calling decoder.out_of_line_offset(0) is not allowed.
6984            if len == 0 {
6985                return Ok(());
6986            };
6987            depth.increment()?;
6988            let envelope_size = 8;
6989            let bytes_len = len * envelope_size;
6990            let offset = decoder.out_of_line_offset(bytes_len)?;
6991            // Decode the envelope for each type.
6992            let mut _next_ordinal_to_read = 0;
6993            let mut next_offset = offset;
6994            let end_offset = offset + bytes_len;
6995            _next_ordinal_to_read += 1;
6996            if next_offset >= end_offset {
6997                return Ok(());
6998            }
6999
7000            // Decode unknown envelopes for gaps in ordinals.
7001            while _next_ordinal_to_read < 1 {
7002                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7003                _next_ordinal_to_read += 1;
7004                next_offset += envelope_size;
7005            }
7006
7007            let next_out_of_line = decoder.next_out_of_line();
7008            let handles_before = decoder.remaining_handles();
7009            if let Some((inlined, num_bytes, num_handles)) =
7010                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7011            {
7012                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7013                if inlined != (member_inline_size <= 4) {
7014                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7015                }
7016                let inner_offset;
7017                let mut inner_depth = depth.clone();
7018                if inlined {
7019                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7020                    inner_offset = next_offset;
7021                } else {
7022                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7023                    inner_depth.increment()?;
7024                }
7025                let val_ref = self.url.get_or_insert_with(|| {
7026                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
7027                });
7028                fidl::decode!(
7029                    fidl::encoding::BoundedString<4096>,
7030                    D,
7031                    val_ref,
7032                    decoder,
7033                    inner_offset,
7034                    inner_depth
7035                )?;
7036                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7037                {
7038                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7039                }
7040                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7041                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7042                }
7043            }
7044
7045            next_offset += envelope_size;
7046            _next_ordinal_to_read += 1;
7047            if next_offset >= end_offset {
7048                return Ok(());
7049            }
7050
7051            // Decode unknown envelopes for gaps in ordinals.
7052            while _next_ordinal_to_read < 2 {
7053                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7054                _next_ordinal_to_read += 1;
7055                next_offset += envelope_size;
7056            }
7057
7058            let next_out_of_line = decoder.next_out_of_line();
7059            let handles_before = decoder.remaining_handles();
7060            if let Some((inlined, num_bytes, num_handles)) =
7061                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7062            {
7063                let member_inline_size =
7064                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
7065                        decoder.context,
7066                    );
7067                if inlined != (member_inline_size <= 4) {
7068                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7069                }
7070                let inner_offset;
7071                let mut inner_depth = depth.clone();
7072                if inlined {
7073                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7074                    inner_offset = next_offset;
7075                } else {
7076                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7077                    inner_depth.increment()?;
7078                }
7079                let val_ref = self
7080                    .name
7081                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
7082                fidl::decode!(
7083                    fidl::encoding::UnboundedString,
7084                    D,
7085                    val_ref,
7086                    decoder,
7087                    inner_offset,
7088                    inner_depth
7089                )?;
7090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7091                {
7092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7093                }
7094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7096                }
7097            }
7098
7099            next_offset += envelope_size;
7100            _next_ordinal_to_read += 1;
7101            if next_offset >= end_offset {
7102                return Ok(());
7103            }
7104
7105            // Decode unknown envelopes for gaps in ordinals.
7106            while _next_ordinal_to_read < 3 {
7107                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7108                _next_ordinal_to_read += 1;
7109                next_offset += envelope_size;
7110            }
7111
7112            let next_out_of_line = decoder.next_out_of_line();
7113            let handles_before = decoder.remaining_handles();
7114            if let Some((inlined, num_bytes, num_handles)) =
7115                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7116            {
7117                let member_inline_size =
7118                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7119                if inlined != (member_inline_size <= 4) {
7120                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7121                }
7122                let inner_offset;
7123                let mut inner_depth = depth.clone();
7124                if inlined {
7125                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7126                    inner_offset = next_offset;
7127                } else {
7128                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7129                    inner_depth.increment()?;
7130                }
7131                let val_ref = self.colocate.get_or_insert_with(|| fidl::new_empty!(bool, D));
7132                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7133                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7134                {
7135                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7136                }
7137                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7138                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7139                }
7140            }
7141
7142            next_offset += envelope_size;
7143            _next_ordinal_to_read += 1;
7144            if next_offset >= end_offset {
7145                return Ok(());
7146            }
7147
7148            // Decode unknown envelopes for gaps in ordinals.
7149            while _next_ordinal_to_read < 4 {
7150                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7151                _next_ordinal_to_read += 1;
7152                next_offset += envelope_size;
7153            }
7154
7155            let next_out_of_line = decoder.next_out_of_line();
7156            let handles_before = decoder.remaining_handles();
7157            if let Some((inlined, num_bytes, num_handles)) =
7158                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7159            {
7160                let member_inline_size =
7161                    <DriverPackageType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7162                if inlined != (member_inline_size <= 4) {
7163                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7164                }
7165                let inner_offset;
7166                let mut inner_depth = depth.clone();
7167                if inlined {
7168                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7169                    inner_offset = next_offset;
7170                } else {
7171                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7172                    inner_depth.increment()?;
7173                }
7174                let val_ref =
7175                    self.package_type.get_or_insert_with(|| fidl::new_empty!(DriverPackageType, D));
7176                fidl::decode!(DriverPackageType, D, val_ref, decoder, inner_offset, inner_depth)?;
7177                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7178                {
7179                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7180                }
7181                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7182                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7183                }
7184            }
7185
7186            next_offset += envelope_size;
7187            _next_ordinal_to_read += 1;
7188            if next_offset >= end_offset {
7189                return Ok(());
7190            }
7191
7192            // Decode unknown envelopes for gaps in ordinals.
7193            while _next_ordinal_to_read < 5 {
7194                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7195                _next_ordinal_to_read += 1;
7196                next_offset += envelope_size;
7197            }
7198
7199            let next_out_of_line = decoder.next_out_of_line();
7200            let handles_before = decoder.remaining_handles();
7201            if let Some((inlined, num_bytes, num_handles)) =
7202                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7203            {
7204                let member_inline_size =
7205                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7206                if inlined != (member_inline_size <= 4) {
7207                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7208                }
7209                let inner_offset;
7210                let mut inner_depth = depth.clone();
7211                if inlined {
7212                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7213                    inner_offset = next_offset;
7214                } else {
7215                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7216                    inner_depth.increment()?;
7217                }
7218                let val_ref = self.is_fallback.get_or_insert_with(|| fidl::new_empty!(bool, D));
7219                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7220                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7221                {
7222                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7223                }
7224                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7225                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7226                }
7227            }
7228
7229            next_offset += envelope_size;
7230            _next_ordinal_to_read += 1;
7231            if next_offset >= end_offset {
7232                return Ok(());
7233            }
7234
7235            // Decode unknown envelopes for gaps in ordinals.
7236            while _next_ordinal_to_read < 6 {
7237                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7238                _next_ordinal_to_read += 1;
7239                next_offset += envelope_size;
7240            }
7241
7242            let next_out_of_line = decoder.next_out_of_line();
7243            let handles_before = decoder.remaining_handles();
7244            if let Some((inlined, num_bytes, num_handles)) =
7245                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7246            {
7247                let member_inline_size = <fidl::encoding::UnboundedVector<DeviceCategory> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7248                if inlined != (member_inline_size <= 4) {
7249                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7250                }
7251                let inner_offset;
7252                let mut inner_depth = depth.clone();
7253                if inlined {
7254                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7255                    inner_offset = next_offset;
7256                } else {
7257                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7258                    inner_depth.increment()?;
7259                }
7260                let val_ref = self.device_categories.get_or_insert_with(|| {
7261                    fidl::new_empty!(fidl::encoding::UnboundedVector<DeviceCategory>, D)
7262                });
7263                fidl::decode!(
7264                    fidl::encoding::UnboundedVector<DeviceCategory>,
7265                    D,
7266                    val_ref,
7267                    decoder,
7268                    inner_offset,
7269                    inner_depth
7270                )?;
7271                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7272                {
7273                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7274                }
7275                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7276                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7277                }
7278            }
7279
7280            next_offset += envelope_size;
7281            _next_ordinal_to_read += 1;
7282            if next_offset >= end_offset {
7283                return Ok(());
7284            }
7285
7286            // Decode unknown envelopes for gaps in ordinals.
7287            while _next_ordinal_to_read < 7 {
7288                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7289                _next_ordinal_to_read += 1;
7290                next_offset += envelope_size;
7291            }
7292
7293            let next_out_of_line = decoder.next_out_of_line();
7294            let handles_before = decoder.remaining_handles();
7295            if let Some((inlined, num_bytes, num_handles)) =
7296                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7297            {
7298                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7299                if inlined != (member_inline_size <= 4) {
7300                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7301                }
7302                let inner_offset;
7303                let mut inner_depth = depth.clone();
7304                if inlined {
7305                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7306                    inner_offset = next_offset;
7307                } else {
7308                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7309                    inner_depth.increment()?;
7310                }
7311                let val_ref = self.bind_rules_bytecode.get_or_insert_with(|| {
7312                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
7313                });
7314                fidl::decode!(
7315                    fidl::encoding::UnboundedVector<u8>,
7316                    D,
7317                    val_ref,
7318                    decoder,
7319                    inner_offset,
7320                    inner_depth
7321                )?;
7322                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7323                {
7324                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7325                }
7326                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7327                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7328                }
7329            }
7330
7331            next_offset += envelope_size;
7332            _next_ordinal_to_read += 1;
7333            if next_offset >= end_offset {
7334                return Ok(());
7335            }
7336
7337            // Decode unknown envelopes for gaps in ordinals.
7338            while _next_ordinal_to_read < 8 {
7339                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7340                _next_ordinal_to_read += 1;
7341                next_offset += envelope_size;
7342            }
7343
7344            let next_out_of_line = decoder.next_out_of_line();
7345            let handles_before = decoder.remaining_handles();
7346            if let Some((inlined, num_bytes, num_handles)) =
7347                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7348            {
7349                let member_inline_size =
7350                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7351                if inlined != (member_inline_size <= 4) {
7352                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7353                }
7354                let inner_offset;
7355                let mut inner_depth = depth.clone();
7356                if inlined {
7357                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7358                    inner_offset = next_offset;
7359                } else {
7360                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7361                    inner_depth.increment()?;
7362                }
7363                let val_ref =
7364                    self.driver_framework_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
7365                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
7366                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7367                {
7368                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7369                }
7370                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7371                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7372                }
7373            }
7374
7375            next_offset += envelope_size;
7376            _next_ordinal_to_read += 1;
7377            if next_offset >= end_offset {
7378                return Ok(());
7379            }
7380
7381            // Decode unknown envelopes for gaps in ordinals.
7382            while _next_ordinal_to_read < 9 {
7383                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7384                _next_ordinal_to_read += 1;
7385                next_offset += envelope_size;
7386            }
7387
7388            let next_out_of_line = decoder.next_out_of_line();
7389            let handles_before = decoder.remaining_handles();
7390            if let Some((inlined, num_bytes, num_handles)) =
7391                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7392            {
7393                let member_inline_size =
7394                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7395                if inlined != (member_inline_size <= 4) {
7396                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7397                }
7398                let inner_offset;
7399                let mut inner_depth = depth.clone();
7400                if inlined {
7401                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7402                    inner_offset = next_offset;
7403                } else {
7404                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7405                    inner_depth.increment()?;
7406                }
7407                let val_ref = self.is_disabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
7408                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
7409                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7410                {
7411                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7412                }
7413                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7414                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7415                }
7416            }
7417
7418            next_offset += envelope_size;
7419
7420            // Decode the remaining unknown envelopes.
7421            while next_offset < end_offset {
7422                _next_ordinal_to_read += 1;
7423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7424                next_offset += envelope_size;
7425            }
7426
7427            Ok(())
7428        }
7429    }
7430
7431    impl DriverStartArgs {
7432        #[inline(always)]
7433        fn max_ordinal_present(&self) -> u64 {
7434            if let Some(_) = self.node_properties_2 {
7435                return 12;
7436            }
7437            if let Some(_) = self.node_token {
7438                return 11;
7439            }
7440            if let Some(_) = self.node_offers {
7441                return 10;
7442            }
7443            if let Some(_) = self.node_properties {
7444                return 9;
7445            }
7446            if let Some(_) = self.node_name {
7447                return 8;
7448            }
7449            if let Some(_) = self.config {
7450                return 7;
7451            }
7452            if let Some(_) = self.outgoing_dir {
7453                return 6;
7454            }
7455            if let Some(_) = self.incoming {
7456                return 5;
7457            }
7458            if let Some(_) = self.program {
7459                return 4;
7460            }
7461            if let Some(_) = self.url {
7462                return 3;
7463            }
7464            if let Some(_) = self.symbols {
7465                return 2;
7466            }
7467            if let Some(_) = self.node {
7468                return 1;
7469            }
7470            0
7471        }
7472    }
7473
7474    impl fidl::encoding::ResourceTypeMarker for DriverStartArgs {
7475        type Borrowed<'a> = &'a mut Self;
7476        fn take_or_borrow<'a>(
7477            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
7478        ) -> Self::Borrowed<'a> {
7479            value
7480        }
7481    }
7482
7483    unsafe impl fidl::encoding::TypeMarker for DriverStartArgs {
7484        type Owned = Self;
7485
7486        #[inline(always)]
7487        fn inline_align(_context: fidl::encoding::Context) -> usize {
7488            8
7489        }
7490
7491        #[inline(always)]
7492        fn inline_size(_context: fidl::encoding::Context) -> usize {
7493            16
7494        }
7495    }
7496
7497    unsafe impl
7498        fidl::encoding::Encode<DriverStartArgs, fidl::encoding::DefaultFuchsiaResourceDialect>
7499        for &mut DriverStartArgs
7500    {
7501        unsafe fn encode(
7502            self,
7503            encoder: &mut fidl::encoding::Encoder<
7504                '_,
7505                fidl::encoding::DefaultFuchsiaResourceDialect,
7506            >,
7507            offset: usize,
7508            mut depth: fidl::encoding::Depth,
7509        ) -> fidl::Result<()> {
7510            encoder.debug_check_bounds::<DriverStartArgs>(offset);
7511            // Vector header
7512            let max_ordinal: u64 = self.max_ordinal_present();
7513            encoder.write_num(max_ordinal, offset);
7514            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7515            // Calling encoder.out_of_line_offset(0) is not allowed.
7516            if max_ordinal == 0 {
7517                return Ok(());
7518            }
7519            depth.increment()?;
7520            let envelope_size = 8;
7521            let bytes_len = max_ordinal as usize * envelope_size;
7522            #[allow(unused_variables)]
7523            let offset = encoder.out_of_line_offset(bytes_len);
7524            let mut _prev_end_offset: usize = 0;
7525            if 1 > max_ordinal {
7526                return Ok(());
7527            }
7528
7529            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7530            // are envelope_size bytes.
7531            let cur_offset: usize = (1 - 1) * envelope_size;
7532
7533            // Zero reserved fields.
7534            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7535
7536            // Safety:
7537            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7538            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7539            //   envelope_size bytes, there is always sufficient room.
7540            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NodeMarker>>, fidl::encoding::DefaultFuchsiaResourceDialect>(
7541            self.node.as_mut().map(<fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NodeMarker>> as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
7542            encoder, offset + cur_offset, depth
7543        )?;
7544
7545            _prev_end_offset = cur_offset + envelope_size;
7546            if 2 > max_ordinal {
7547                return Ok(());
7548            }
7549
7550            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7551            // are envelope_size bytes.
7552            let cur_offset: usize = (2 - 1) * envelope_size;
7553
7554            // Zero reserved fields.
7555            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7556
7557            // Safety:
7558            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7559            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7560            //   envelope_size bytes, there is always sufficient room.
7561            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NodeSymbol, 64>, fidl::encoding::DefaultFuchsiaResourceDialect>(
7562            self.symbols.as_ref().map(<fidl::encoding::Vector<NodeSymbol, 64> as fidl::encoding::ValueTypeMarker>::borrow),
7563            encoder, offset + cur_offset, depth
7564        )?;
7565
7566            _prev_end_offset = cur_offset + envelope_size;
7567            if 3 > max_ordinal {
7568                return Ok(());
7569            }
7570
7571            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7572            // are envelope_size bytes.
7573            let cur_offset: usize = (3 - 1) * envelope_size;
7574
7575            // Zero reserved fields.
7576            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7577
7578            // Safety:
7579            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7580            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7581            //   envelope_size bytes, there is always sufficient room.
7582            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, fidl::encoding::DefaultFuchsiaResourceDialect>(
7583            self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
7584            encoder, offset + cur_offset, depth
7585        )?;
7586
7587            _prev_end_offset = cur_offset + envelope_size;
7588            if 4 > max_ordinal {
7589                return Ok(());
7590            }
7591
7592            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7593            // are envelope_size bytes.
7594            let cur_offset: usize = (4 - 1) * envelope_size;
7595
7596            // Zero reserved fields.
7597            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7598
7599            // Safety:
7600            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7601            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7602            //   envelope_size bytes, there is always sufficient room.
7603            fidl::encoding::encode_in_envelope_optional::<
7604                fidl_fuchsia_data::Dictionary,
7605                fidl::encoding::DefaultFuchsiaResourceDialect,
7606            >(
7607                self.program.as_ref().map(
7608                    <fidl_fuchsia_data::Dictionary as fidl::encoding::ValueTypeMarker>::borrow,
7609                ),
7610                encoder,
7611                offset + cur_offset,
7612                depth,
7613            )?;
7614
7615            _prev_end_offset = cur_offset + envelope_size;
7616            if 5 > max_ordinal {
7617                return Ok(());
7618            }
7619
7620            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7621            // are envelope_size bytes.
7622            let cur_offset: usize = (5 - 1) * envelope_size;
7623
7624            // Zero reserved fields.
7625            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7626
7627            // Safety:
7628            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7629            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7630            //   envelope_size bytes, there is always sufficient room.
7631            fidl::encoding::encode_in_envelope_optional::<
7632                fidl::encoding::Vector<fidl_fuchsia_component_runner::ComponentNamespaceEntry, 32>,
7633                fidl::encoding::DefaultFuchsiaResourceDialect,
7634            >(
7635                self.incoming.as_mut().map(
7636                    <fidl::encoding::Vector<
7637                        fidl_fuchsia_component_runner::ComponentNamespaceEntry,
7638                        32,
7639                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
7640                ),
7641                encoder,
7642                offset + cur_offset,
7643                depth,
7644            )?;
7645
7646            _prev_end_offset = cur_offset + envelope_size;
7647            if 6 > max_ordinal {
7648                return Ok(());
7649            }
7650
7651            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7652            // are envelope_size bytes.
7653            let cur_offset: usize = (6 - 1) * envelope_size;
7654
7655            // Zero reserved fields.
7656            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7657
7658            // Safety:
7659            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7660            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7661            //   envelope_size bytes, there is always sufficient room.
7662            fidl::encoding::encode_in_envelope_optional::<
7663                fidl::encoding::Endpoint<
7664                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
7665                >,
7666                fidl::encoding::DefaultFuchsiaResourceDialect,
7667            >(
7668                self.outgoing_dir.as_mut().map(
7669                    <fidl::encoding::Endpoint<
7670                        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
7671                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
7672                ),
7673                encoder,
7674                offset + cur_offset,
7675                depth,
7676            )?;
7677
7678            _prev_end_offset = cur_offset + envelope_size;
7679            if 7 > max_ordinal {
7680                return Ok(());
7681            }
7682
7683            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7684            // are envelope_size bytes.
7685            let cur_offset: usize = (7 - 1) * envelope_size;
7686
7687            // Zero reserved fields.
7688            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7689
7690            // Safety:
7691            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7692            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7693            //   envelope_size bytes, there is always sufficient room.
7694            fidl::encoding::encode_in_envelope_optional::<
7695                fidl::encoding::HandleType<
7696                    fidl::Vmo,
7697                    { fidl::ObjectType::VMO.into_raw() },
7698                    2147483648,
7699                >,
7700                fidl::encoding::DefaultFuchsiaResourceDialect,
7701            >(
7702                self.config.as_mut().map(
7703                    <fidl::encoding::HandleType<
7704                        fidl::Vmo,
7705                        { fidl::ObjectType::VMO.into_raw() },
7706                        2147483648,
7707                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
7708                ),
7709                encoder,
7710                offset + cur_offset,
7711                depth,
7712            )?;
7713
7714            _prev_end_offset = cur_offset + envelope_size;
7715            if 8 > max_ordinal {
7716                return Ok(());
7717            }
7718
7719            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7720            // are envelope_size bytes.
7721            let cur_offset: usize = (8 - 1) * envelope_size;
7722
7723            // Zero reserved fields.
7724            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7725
7726            // Safety:
7727            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7728            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7729            //   envelope_size bytes, there is always sufficient room.
7730            fidl::encoding::encode_in_envelope_optional::<
7731                fidl::encoding::UnboundedString,
7732                fidl::encoding::DefaultFuchsiaResourceDialect,
7733            >(
7734                self.node_name.as_ref().map(
7735                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
7736                ),
7737                encoder,
7738                offset + cur_offset,
7739                depth,
7740            )?;
7741
7742            _prev_end_offset = cur_offset + envelope_size;
7743            if 9 > max_ordinal {
7744                return Ok(());
7745            }
7746
7747            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7748            // are envelope_size bytes.
7749            let cur_offset: usize = (9 - 1) * envelope_size;
7750
7751            // Zero reserved fields.
7752            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7753
7754            // Safety:
7755            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7756            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7757            //   envelope_size bytes, there is always sufficient room.
7758            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<NodePropertyEntry>, fidl::encoding::DefaultFuchsiaResourceDialect>(
7759            self.node_properties.as_ref().map(<fidl::encoding::UnboundedVector<NodePropertyEntry> as fidl::encoding::ValueTypeMarker>::borrow),
7760            encoder, offset + cur_offset, depth
7761        )?;
7762
7763            _prev_end_offset = cur_offset + envelope_size;
7764            if 10 > max_ordinal {
7765                return Ok(());
7766            }
7767
7768            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7769            // are envelope_size bytes.
7770            let cur_offset: usize = (10 - 1) * envelope_size;
7771
7772            // Zero reserved fields.
7773            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7774
7775            // Safety:
7776            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7777            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7778            //   envelope_size bytes, there is always sufficient room.
7779            fidl::encoding::encode_in_envelope_optional::<
7780                fidl::encoding::Vector<Offer, 128>,
7781                fidl::encoding::DefaultFuchsiaResourceDialect,
7782            >(
7783                self.node_offers.as_ref().map(
7784                    <fidl::encoding::Vector<Offer, 128> as fidl::encoding::ValueTypeMarker>::borrow,
7785                ),
7786                encoder,
7787                offset + cur_offset,
7788                depth,
7789            )?;
7790
7791            _prev_end_offset = cur_offset + envelope_size;
7792            if 11 > max_ordinal {
7793                return Ok(());
7794            }
7795
7796            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7797            // are envelope_size bytes.
7798            let cur_offset: usize = (11 - 1) * envelope_size;
7799
7800            // Zero reserved fields.
7801            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7802
7803            // Safety:
7804            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7805            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7806            //   envelope_size bytes, there is always sufficient room.
7807            fidl::encoding::encode_in_envelope_optional::<
7808                fidl::encoding::HandleType<
7809                    fidl::Event,
7810                    { fidl::ObjectType::EVENT.into_raw() },
7811                    2147483648,
7812                >,
7813                fidl::encoding::DefaultFuchsiaResourceDialect,
7814            >(
7815                self.node_token.as_mut().map(
7816                    <fidl::encoding::HandleType<
7817                        fidl::Event,
7818                        { fidl::ObjectType::EVENT.into_raw() },
7819                        2147483648,
7820                    > as fidl::encoding::ResourceTypeMarker>::take_or_borrow,
7821                ),
7822                encoder,
7823                offset + cur_offset,
7824                depth,
7825            )?;
7826
7827            _prev_end_offset = cur_offset + envelope_size;
7828            if 12 > max_ordinal {
7829                return Ok(());
7830            }
7831
7832            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7833            // are envelope_size bytes.
7834            let cur_offset: usize = (12 - 1) * envelope_size;
7835
7836            // Zero reserved fields.
7837            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7838
7839            // Safety:
7840            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7841            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7842            //   envelope_size bytes, there is always sufficient room.
7843            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<NodePropertyEntry2>, fidl::encoding::DefaultFuchsiaResourceDialect>(
7844            self.node_properties_2.as_ref().map(<fidl::encoding::UnboundedVector<NodePropertyEntry2> as fidl::encoding::ValueTypeMarker>::borrow),
7845            encoder, offset + cur_offset, depth
7846        )?;
7847
7848            _prev_end_offset = cur_offset + envelope_size;
7849
7850            Ok(())
7851        }
7852    }
7853
7854    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect>
7855        for DriverStartArgs
7856    {
7857        #[inline(always)]
7858        fn new_empty() -> Self {
7859            Self::default()
7860        }
7861
7862        unsafe fn decode(
7863            &mut self,
7864            decoder: &mut fidl::encoding::Decoder<
7865                '_,
7866                fidl::encoding::DefaultFuchsiaResourceDialect,
7867            >,
7868            offset: usize,
7869            mut depth: fidl::encoding::Depth,
7870        ) -> fidl::Result<()> {
7871            decoder.debug_check_bounds::<Self>(offset);
7872            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7873                None => return Err(fidl::Error::NotNullable),
7874                Some(len) => len,
7875            };
7876            // Calling decoder.out_of_line_offset(0) is not allowed.
7877            if len == 0 {
7878                return Ok(());
7879            };
7880            depth.increment()?;
7881            let envelope_size = 8;
7882            let bytes_len = len * envelope_size;
7883            let offset = decoder.out_of_line_offset(bytes_len)?;
7884            // Decode the envelope for each type.
7885            let mut _next_ordinal_to_read = 0;
7886            let mut next_offset = offset;
7887            let end_offset = offset + bytes_len;
7888            _next_ordinal_to_read += 1;
7889            if next_offset >= end_offset {
7890                return Ok(());
7891            }
7892
7893            // Decode unknown envelopes for gaps in ordinals.
7894            while _next_ordinal_to_read < 1 {
7895                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7896                _next_ordinal_to_read += 1;
7897                next_offset += envelope_size;
7898            }
7899
7900            let next_out_of_line = decoder.next_out_of_line();
7901            let handles_before = decoder.remaining_handles();
7902            if let Some((inlined, num_bytes, num_handles)) =
7903                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7904            {
7905                let member_inline_size = <fidl::encoding::Endpoint<
7906                    fidl::endpoints::ClientEnd<NodeMarker>,
7907                > as fidl::encoding::TypeMarker>::inline_size(
7908                    decoder.context
7909                );
7910                if inlined != (member_inline_size <= 4) {
7911                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7912                }
7913                let inner_offset;
7914                let mut inner_depth = depth.clone();
7915                if inlined {
7916                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7917                    inner_offset = next_offset;
7918                } else {
7919                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7920                    inner_depth.increment()?;
7921                }
7922                let val_ref = self.node.get_or_insert_with(|| {
7923                    fidl::new_empty!(
7924                        fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NodeMarker>>,
7925                        fidl::encoding::DefaultFuchsiaResourceDialect
7926                    )
7927                });
7928                fidl::decode!(
7929                    fidl::encoding::Endpoint<fidl::endpoints::ClientEnd<NodeMarker>>,
7930                    fidl::encoding::DefaultFuchsiaResourceDialect,
7931                    val_ref,
7932                    decoder,
7933                    inner_offset,
7934                    inner_depth
7935                )?;
7936                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7937                {
7938                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7939                }
7940                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7941                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7942                }
7943            }
7944
7945            next_offset += envelope_size;
7946            _next_ordinal_to_read += 1;
7947            if next_offset >= end_offset {
7948                return Ok(());
7949            }
7950
7951            // Decode unknown envelopes for gaps in ordinals.
7952            while _next_ordinal_to_read < 2 {
7953                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7954                _next_ordinal_to_read += 1;
7955                next_offset += envelope_size;
7956            }
7957
7958            let next_out_of_line = decoder.next_out_of_line();
7959            let handles_before = decoder.remaining_handles();
7960            if let Some((inlined, num_bytes, num_handles)) =
7961                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7962            {
7963                let member_inline_size = <fidl::encoding::Vector<NodeSymbol, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7964                if inlined != (member_inline_size <= 4) {
7965                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7966                }
7967                let inner_offset;
7968                let mut inner_depth = depth.clone();
7969                if inlined {
7970                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7971                    inner_offset = next_offset;
7972                } else {
7973                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7974                    inner_depth.increment()?;
7975                }
7976                let val_ref =
7977                self.symbols.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<NodeSymbol, 64>, fidl::encoding::DefaultFuchsiaResourceDialect));
7978                fidl::decode!(fidl::encoding::Vector<NodeSymbol, 64>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
7979                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7980                {
7981                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7982                }
7983                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7984                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7985                }
7986            }
7987
7988            next_offset += envelope_size;
7989            _next_ordinal_to_read += 1;
7990            if next_offset >= end_offset {
7991                return Ok(());
7992            }
7993
7994            // Decode unknown envelopes for gaps in ordinals.
7995            while _next_ordinal_to_read < 3 {
7996                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7997                _next_ordinal_to_read += 1;
7998                next_offset += envelope_size;
7999            }
8000
8001            let next_out_of_line = decoder.next_out_of_line();
8002            let handles_before = decoder.remaining_handles();
8003            if let Some((inlined, num_bytes, num_handles)) =
8004                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8005            {
8006                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8007                if inlined != (member_inline_size <= 4) {
8008                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8009                }
8010                let inner_offset;
8011                let mut inner_depth = depth.clone();
8012                if inlined {
8013                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8014                    inner_offset = next_offset;
8015                } else {
8016                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8017                    inner_depth.increment()?;
8018                }
8019                let val_ref = self.url.get_or_insert_with(|| {
8020                    fidl::new_empty!(
8021                        fidl::encoding::BoundedString<4096>,
8022                        fidl::encoding::DefaultFuchsiaResourceDialect
8023                    )
8024                });
8025                fidl::decode!(
8026                    fidl::encoding::BoundedString<4096>,
8027                    fidl::encoding::DefaultFuchsiaResourceDialect,
8028                    val_ref,
8029                    decoder,
8030                    inner_offset,
8031                    inner_depth
8032                )?;
8033                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8034                {
8035                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8036                }
8037                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8038                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8039                }
8040            }
8041
8042            next_offset += envelope_size;
8043            _next_ordinal_to_read += 1;
8044            if next_offset >= end_offset {
8045                return Ok(());
8046            }
8047
8048            // Decode unknown envelopes for gaps in ordinals.
8049            while _next_ordinal_to_read < 4 {
8050                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8051                _next_ordinal_to_read += 1;
8052                next_offset += envelope_size;
8053            }
8054
8055            let next_out_of_line = decoder.next_out_of_line();
8056            let handles_before = decoder.remaining_handles();
8057            if let Some((inlined, num_bytes, num_handles)) =
8058                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8059            {
8060                let member_inline_size =
8061                    <fidl_fuchsia_data::Dictionary as fidl::encoding::TypeMarker>::inline_size(
8062                        decoder.context,
8063                    );
8064                if inlined != (member_inline_size <= 4) {
8065                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8066                }
8067                let inner_offset;
8068                let mut inner_depth = depth.clone();
8069                if inlined {
8070                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8071                    inner_offset = next_offset;
8072                } else {
8073                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8074                    inner_depth.increment()?;
8075                }
8076                let val_ref = self.program.get_or_insert_with(|| {
8077                    fidl::new_empty!(
8078                        fidl_fuchsia_data::Dictionary,
8079                        fidl::encoding::DefaultFuchsiaResourceDialect
8080                    )
8081                });
8082                fidl::decode!(
8083                    fidl_fuchsia_data::Dictionary,
8084                    fidl::encoding::DefaultFuchsiaResourceDialect,
8085                    val_ref,
8086                    decoder,
8087                    inner_offset,
8088                    inner_depth
8089                )?;
8090                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8091                {
8092                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8093                }
8094                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8095                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8096                }
8097            }
8098
8099            next_offset += envelope_size;
8100            _next_ordinal_to_read += 1;
8101            if next_offset >= end_offset {
8102                return Ok(());
8103            }
8104
8105            // Decode unknown envelopes for gaps in ordinals.
8106            while _next_ordinal_to_read < 5 {
8107                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8108                _next_ordinal_to_read += 1;
8109                next_offset += envelope_size;
8110            }
8111
8112            let next_out_of_line = decoder.next_out_of_line();
8113            let handles_before = decoder.remaining_handles();
8114            if let Some((inlined, num_bytes, num_handles)) =
8115                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8116            {
8117                let member_inline_size = <fidl::encoding::Vector<
8118                    fidl_fuchsia_component_runner::ComponentNamespaceEntry,
8119                    32,
8120                > as fidl::encoding::TypeMarker>::inline_size(
8121                    decoder.context
8122                );
8123                if inlined != (member_inline_size <= 4) {
8124                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8125                }
8126                let inner_offset;
8127                let mut inner_depth = depth.clone();
8128                if inlined {
8129                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8130                    inner_offset = next_offset;
8131                } else {
8132                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8133                    inner_depth.increment()?;
8134                }
8135                let val_ref =
8136                self.incoming.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_component_runner::ComponentNamespaceEntry, 32>, fidl::encoding::DefaultFuchsiaResourceDialect));
8137                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_component_runner::ComponentNamespaceEntry, 32>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
8138                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8139                {
8140                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8141                }
8142                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8143                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8144                }
8145            }
8146
8147            next_offset += envelope_size;
8148            _next_ordinal_to_read += 1;
8149            if next_offset >= end_offset {
8150                return Ok(());
8151            }
8152
8153            // Decode unknown envelopes for gaps in ordinals.
8154            while _next_ordinal_to_read < 6 {
8155                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8156                _next_ordinal_to_read += 1;
8157                next_offset += envelope_size;
8158            }
8159
8160            let next_out_of_line = decoder.next_out_of_line();
8161            let handles_before = decoder.remaining_handles();
8162            if let Some((inlined, num_bytes, num_handles)) =
8163                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8164            {
8165                let member_inline_size = <fidl::encoding::Endpoint<
8166                    fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
8167                > as fidl::encoding::TypeMarker>::inline_size(
8168                    decoder.context
8169                );
8170                if inlined != (member_inline_size <= 4) {
8171                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8172                }
8173                let inner_offset;
8174                let mut inner_depth = depth.clone();
8175                if inlined {
8176                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8177                    inner_offset = next_offset;
8178                } else {
8179                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8180                    inner_depth.increment()?;
8181                }
8182                let val_ref = self.outgoing_dir.get_or_insert_with(|| {
8183                    fidl::new_empty!(
8184                        fidl::encoding::Endpoint<
8185                            fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
8186                        >,
8187                        fidl::encoding::DefaultFuchsiaResourceDialect
8188                    )
8189                });
8190                fidl::decode!(
8191                    fidl::encoding::Endpoint<
8192                        fidl::endpoints::ServerEnd<fidl_fuchsia_io::DirectoryMarker>,
8193                    >,
8194                    fidl::encoding::DefaultFuchsiaResourceDialect,
8195                    val_ref,
8196                    decoder,
8197                    inner_offset,
8198                    inner_depth
8199                )?;
8200                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8201                {
8202                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8203                }
8204                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8205                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8206                }
8207            }
8208
8209            next_offset += envelope_size;
8210            _next_ordinal_to_read += 1;
8211            if next_offset >= end_offset {
8212                return Ok(());
8213            }
8214
8215            // Decode unknown envelopes for gaps in ordinals.
8216            while _next_ordinal_to_read < 7 {
8217                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8218                _next_ordinal_to_read += 1;
8219                next_offset += envelope_size;
8220            }
8221
8222            let next_out_of_line = decoder.next_out_of_line();
8223            let handles_before = decoder.remaining_handles();
8224            if let Some((inlined, num_bytes, num_handles)) =
8225                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8226            {
8227                let member_inline_size = <fidl::encoding::HandleType<
8228                    fidl::Vmo,
8229                    { fidl::ObjectType::VMO.into_raw() },
8230                    2147483648,
8231                > as fidl::encoding::TypeMarker>::inline_size(
8232                    decoder.context
8233                );
8234                if inlined != (member_inline_size <= 4) {
8235                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8236                }
8237                let inner_offset;
8238                let mut inner_depth = depth.clone();
8239                if inlined {
8240                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8241                    inner_offset = next_offset;
8242                } else {
8243                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8244                    inner_depth.increment()?;
8245                }
8246                let val_ref =
8247                self.config.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
8248                fidl::decode!(fidl::encoding::HandleType<fidl::Vmo, { fidl::ObjectType::VMO.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
8249                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8250                {
8251                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8252                }
8253                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8254                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8255                }
8256            }
8257
8258            next_offset += envelope_size;
8259            _next_ordinal_to_read += 1;
8260            if next_offset >= end_offset {
8261                return Ok(());
8262            }
8263
8264            // Decode unknown envelopes for gaps in ordinals.
8265            while _next_ordinal_to_read < 8 {
8266                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8267                _next_ordinal_to_read += 1;
8268                next_offset += envelope_size;
8269            }
8270
8271            let next_out_of_line = decoder.next_out_of_line();
8272            let handles_before = decoder.remaining_handles();
8273            if let Some((inlined, num_bytes, num_handles)) =
8274                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8275            {
8276                let member_inline_size =
8277                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
8278                        decoder.context,
8279                    );
8280                if inlined != (member_inline_size <= 4) {
8281                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8282                }
8283                let inner_offset;
8284                let mut inner_depth = depth.clone();
8285                if inlined {
8286                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8287                    inner_offset = next_offset;
8288                } else {
8289                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8290                    inner_depth.increment()?;
8291                }
8292                let val_ref = self.node_name.get_or_insert_with(|| {
8293                    fidl::new_empty!(
8294                        fidl::encoding::UnboundedString,
8295                        fidl::encoding::DefaultFuchsiaResourceDialect
8296                    )
8297                });
8298                fidl::decode!(
8299                    fidl::encoding::UnboundedString,
8300                    fidl::encoding::DefaultFuchsiaResourceDialect,
8301                    val_ref,
8302                    decoder,
8303                    inner_offset,
8304                    inner_depth
8305                )?;
8306                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8307                {
8308                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8309                }
8310                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8311                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8312                }
8313            }
8314
8315            next_offset += envelope_size;
8316            _next_ordinal_to_read += 1;
8317            if next_offset >= end_offset {
8318                return Ok(());
8319            }
8320
8321            // Decode unknown envelopes for gaps in ordinals.
8322            while _next_ordinal_to_read < 9 {
8323                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8324                _next_ordinal_to_read += 1;
8325                next_offset += envelope_size;
8326            }
8327
8328            let next_out_of_line = decoder.next_out_of_line();
8329            let handles_before = decoder.remaining_handles();
8330            if let Some((inlined, num_bytes, num_handles)) =
8331                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8332            {
8333                let member_inline_size = <fidl::encoding::UnboundedVector<NodePropertyEntry> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8334                if inlined != (member_inline_size <= 4) {
8335                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8336                }
8337                let inner_offset;
8338                let mut inner_depth = depth.clone();
8339                if inlined {
8340                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8341                    inner_offset = next_offset;
8342                } else {
8343                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8344                    inner_depth.increment()?;
8345                }
8346                let val_ref = self.node_properties.get_or_insert_with(|| {
8347                    fidl::new_empty!(
8348                        fidl::encoding::UnboundedVector<NodePropertyEntry>,
8349                        fidl::encoding::DefaultFuchsiaResourceDialect
8350                    )
8351                });
8352                fidl::decode!(
8353                    fidl::encoding::UnboundedVector<NodePropertyEntry>,
8354                    fidl::encoding::DefaultFuchsiaResourceDialect,
8355                    val_ref,
8356                    decoder,
8357                    inner_offset,
8358                    inner_depth
8359                )?;
8360                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8361                {
8362                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8363                }
8364                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8365                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8366                }
8367            }
8368
8369            next_offset += envelope_size;
8370            _next_ordinal_to_read += 1;
8371            if next_offset >= end_offset {
8372                return Ok(());
8373            }
8374
8375            // Decode unknown envelopes for gaps in ordinals.
8376            while _next_ordinal_to_read < 10 {
8377                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8378                _next_ordinal_to_read += 1;
8379                next_offset += envelope_size;
8380            }
8381
8382            let next_out_of_line = decoder.next_out_of_line();
8383            let handles_before = decoder.remaining_handles();
8384            if let Some((inlined, num_bytes, num_handles)) =
8385                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8386            {
8387                let member_inline_size =
8388                    <fidl::encoding::Vector<Offer, 128> as fidl::encoding::TypeMarker>::inline_size(
8389                        decoder.context,
8390                    );
8391                if inlined != (member_inline_size <= 4) {
8392                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8393                }
8394                let inner_offset;
8395                let mut inner_depth = depth.clone();
8396                if inlined {
8397                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8398                    inner_offset = next_offset;
8399                } else {
8400                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8401                    inner_depth.increment()?;
8402                }
8403                let val_ref =
8404                self.node_offers.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect));
8405                fidl::decode!(fidl::encoding::Vector<Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
8406                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8407                {
8408                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8409                }
8410                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8411                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8412                }
8413            }
8414
8415            next_offset += envelope_size;
8416            _next_ordinal_to_read += 1;
8417            if next_offset >= end_offset {
8418                return Ok(());
8419            }
8420
8421            // Decode unknown envelopes for gaps in ordinals.
8422            while _next_ordinal_to_read < 11 {
8423                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8424                _next_ordinal_to_read += 1;
8425                next_offset += envelope_size;
8426            }
8427
8428            let next_out_of_line = decoder.next_out_of_line();
8429            let handles_before = decoder.remaining_handles();
8430            if let Some((inlined, num_bytes, num_handles)) =
8431                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8432            {
8433                let member_inline_size = <fidl::encoding::HandleType<
8434                    fidl::Event,
8435                    { fidl::ObjectType::EVENT.into_raw() },
8436                    2147483648,
8437                > as fidl::encoding::TypeMarker>::inline_size(
8438                    decoder.context
8439                );
8440                if inlined != (member_inline_size <= 4) {
8441                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8442                }
8443                let inner_offset;
8444                let mut inner_depth = depth.clone();
8445                if inlined {
8446                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8447                    inner_offset = next_offset;
8448                } else {
8449                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8450                    inner_depth.increment()?;
8451                }
8452                let val_ref =
8453                self.node_token.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect));
8454                fidl::decode!(fidl::encoding::HandleType<fidl::Event, { fidl::ObjectType::EVENT.into_raw() }, 2147483648>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
8455                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8456                {
8457                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8458                }
8459                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8460                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8461                }
8462            }
8463
8464            next_offset += envelope_size;
8465            _next_ordinal_to_read += 1;
8466            if next_offset >= end_offset {
8467                return Ok(());
8468            }
8469
8470            // Decode unknown envelopes for gaps in ordinals.
8471            while _next_ordinal_to_read < 12 {
8472                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8473                _next_ordinal_to_read += 1;
8474                next_offset += envelope_size;
8475            }
8476
8477            let next_out_of_line = decoder.next_out_of_line();
8478            let handles_before = decoder.remaining_handles();
8479            if let Some((inlined, num_bytes, num_handles)) =
8480                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8481            {
8482                let member_inline_size = <fidl::encoding::UnboundedVector<NodePropertyEntry2> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8483                if inlined != (member_inline_size <= 4) {
8484                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8485                }
8486                let inner_offset;
8487                let mut inner_depth = depth.clone();
8488                if inlined {
8489                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8490                    inner_offset = next_offset;
8491                } else {
8492                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8493                    inner_depth.increment()?;
8494                }
8495                let val_ref = self.node_properties_2.get_or_insert_with(|| {
8496                    fidl::new_empty!(
8497                        fidl::encoding::UnboundedVector<NodePropertyEntry2>,
8498                        fidl::encoding::DefaultFuchsiaResourceDialect
8499                    )
8500                });
8501                fidl::decode!(
8502                    fidl::encoding::UnboundedVector<NodePropertyEntry2>,
8503                    fidl::encoding::DefaultFuchsiaResourceDialect,
8504                    val_ref,
8505                    decoder,
8506                    inner_offset,
8507                    inner_depth
8508                )?;
8509                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8510                {
8511                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8512                }
8513                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8514                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8515                }
8516            }
8517
8518            next_offset += envelope_size;
8519
8520            // Decode the remaining unknown envelopes.
8521            while next_offset < end_offset {
8522                _next_ordinal_to_read += 1;
8523                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8524                next_offset += envelope_size;
8525            }
8526
8527            Ok(())
8528        }
8529    }
8530
8531    impl NodeAddArgs {
8532        #[inline(always)]
8533        fn max_ordinal_present(&self) -> u64 {
8534            if let Some(_) = self.properties2 {
8535                return 8;
8536            }
8537            if let Some(_) = self.bus_info {
8538                return 7;
8539            }
8540            if let Some(_) = self.offers2 {
8541                return 6;
8542            }
8543            if let Some(_) = self.devfs_args {
8544                return 5;
8545            }
8546            if let Some(_) = self.properties {
8547                return 4;
8548            }
8549            if let Some(_) = self.symbols {
8550                return 3;
8551            }
8552            if let Some(_) = self.offers {
8553                return 2;
8554            }
8555            if let Some(_) = self.name {
8556                return 1;
8557            }
8558            0
8559        }
8560    }
8561
8562    impl fidl::encoding::ResourceTypeMarker for NodeAddArgs {
8563        type Borrowed<'a> = &'a mut Self;
8564        fn take_or_borrow<'a>(
8565            value: &'a mut <Self as fidl::encoding::TypeMarker>::Owned,
8566        ) -> Self::Borrowed<'a> {
8567            value
8568        }
8569    }
8570
8571    unsafe impl fidl::encoding::TypeMarker for NodeAddArgs {
8572        type Owned = Self;
8573
8574        #[inline(always)]
8575        fn inline_align(_context: fidl::encoding::Context) -> usize {
8576            8
8577        }
8578
8579        #[inline(always)]
8580        fn inline_size(_context: fidl::encoding::Context) -> usize {
8581            16
8582        }
8583    }
8584
8585    unsafe impl fidl::encoding::Encode<NodeAddArgs, fidl::encoding::DefaultFuchsiaResourceDialect>
8586        for &mut NodeAddArgs
8587    {
8588        unsafe fn encode(
8589            self,
8590            encoder: &mut fidl::encoding::Encoder<
8591                '_,
8592                fidl::encoding::DefaultFuchsiaResourceDialect,
8593            >,
8594            offset: usize,
8595            mut depth: fidl::encoding::Depth,
8596        ) -> fidl::Result<()> {
8597            encoder.debug_check_bounds::<NodeAddArgs>(offset);
8598            // Vector header
8599            let max_ordinal: u64 = self.max_ordinal_present();
8600            encoder.write_num(max_ordinal, offset);
8601            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
8602            // Calling encoder.out_of_line_offset(0) is not allowed.
8603            if max_ordinal == 0 {
8604                return Ok(());
8605            }
8606            depth.increment()?;
8607            let envelope_size = 8;
8608            let bytes_len = max_ordinal as usize * envelope_size;
8609            #[allow(unused_variables)]
8610            let offset = encoder.out_of_line_offset(bytes_len);
8611            let mut _prev_end_offset: usize = 0;
8612            if 1 > max_ordinal {
8613                return Ok(());
8614            }
8615
8616            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8617            // are envelope_size bytes.
8618            let cur_offset: usize = (1 - 1) * envelope_size;
8619
8620            // Zero reserved fields.
8621            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8622
8623            // Safety:
8624            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8625            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8626            //   envelope_size bytes, there is always sufficient room.
8627            fidl::encoding::encode_in_envelope_optional::<
8628                fidl::encoding::BoundedString<128>,
8629                fidl::encoding::DefaultFuchsiaResourceDialect,
8630            >(
8631                self.name.as_ref().map(
8632                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
8633                ),
8634                encoder,
8635                offset + cur_offset,
8636                depth,
8637            )?;
8638
8639            _prev_end_offset = cur_offset + envelope_size;
8640            if 2 > max_ordinal {
8641                return Ok(());
8642            }
8643
8644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8645            // are envelope_size bytes.
8646            let cur_offset: usize = (2 - 1) * envelope_size;
8647
8648            // Zero reserved fields.
8649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8650
8651            // Safety:
8652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8654            //   envelope_size bytes, there is always sufficient room.
8655            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl_fuchsia_component_decl::Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect>(
8656            self.offers.as_ref().map(<fidl::encoding::Vector<fidl_fuchsia_component_decl::Offer, 128> as fidl::encoding::ValueTypeMarker>::borrow),
8657            encoder, offset + cur_offset, depth
8658        )?;
8659
8660            _prev_end_offset = cur_offset + envelope_size;
8661            if 3 > max_ordinal {
8662                return Ok(());
8663            }
8664
8665            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8666            // are envelope_size bytes.
8667            let cur_offset: usize = (3 - 1) * envelope_size;
8668
8669            // Zero reserved fields.
8670            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8671
8672            // Safety:
8673            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8674            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8675            //   envelope_size bytes, there is always sufficient room.
8676            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NodeSymbol, 64>, fidl::encoding::DefaultFuchsiaResourceDialect>(
8677            self.symbols.as_ref().map(<fidl::encoding::Vector<NodeSymbol, 64> as fidl::encoding::ValueTypeMarker>::borrow),
8678            encoder, offset + cur_offset, depth
8679        )?;
8680
8681            _prev_end_offset = cur_offset + envelope_size;
8682            if 4 > max_ordinal {
8683                return Ok(());
8684            }
8685
8686            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8687            // are envelope_size bytes.
8688            let cur_offset: usize = (4 - 1) * envelope_size;
8689
8690            // Zero reserved fields.
8691            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8692
8693            // Safety:
8694            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8695            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8696            //   envelope_size bytes, there is always sufficient room.
8697            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NodeProperty, 64>, fidl::encoding::DefaultFuchsiaResourceDialect>(
8698            self.properties.as_ref().map(<fidl::encoding::Vector<NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
8699            encoder, offset + cur_offset, depth
8700        )?;
8701
8702            _prev_end_offset = cur_offset + envelope_size;
8703            if 5 > max_ordinal {
8704                return Ok(());
8705            }
8706
8707            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8708            // are envelope_size bytes.
8709            let cur_offset: usize = (5 - 1) * envelope_size;
8710
8711            // Zero reserved fields.
8712            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8713
8714            // Safety:
8715            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8716            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8717            //   envelope_size bytes, there is always sufficient room.
8718            fidl::encoding::encode_in_envelope_optional::<
8719                DevfsAddArgs,
8720                fidl::encoding::DefaultFuchsiaResourceDialect,
8721            >(
8722                self.devfs_args
8723                    .as_mut()
8724                    .map(<DevfsAddArgs as fidl::encoding::ResourceTypeMarker>::take_or_borrow),
8725                encoder,
8726                offset + cur_offset,
8727                depth,
8728            )?;
8729
8730            _prev_end_offset = cur_offset + envelope_size;
8731            if 6 > max_ordinal {
8732                return Ok(());
8733            }
8734
8735            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8736            // are envelope_size bytes.
8737            let cur_offset: usize = (6 - 1) * envelope_size;
8738
8739            // Zero reserved fields.
8740            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8741
8742            // Safety:
8743            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8744            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8745            //   envelope_size bytes, there is always sufficient room.
8746            fidl::encoding::encode_in_envelope_optional::<
8747                fidl::encoding::Vector<Offer, 128>,
8748                fidl::encoding::DefaultFuchsiaResourceDialect,
8749            >(
8750                self.offers2.as_ref().map(
8751                    <fidl::encoding::Vector<Offer, 128> as fidl::encoding::ValueTypeMarker>::borrow,
8752                ),
8753                encoder,
8754                offset + cur_offset,
8755                depth,
8756            )?;
8757
8758            _prev_end_offset = cur_offset + envelope_size;
8759            if 7 > max_ordinal {
8760                return Ok(());
8761            }
8762
8763            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8764            // are envelope_size bytes.
8765            let cur_offset: usize = (7 - 1) * envelope_size;
8766
8767            // Zero reserved fields.
8768            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8769
8770            // Safety:
8771            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8772            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8773            //   envelope_size bytes, there is always sufficient room.
8774            fidl::encoding::encode_in_envelope_optional::<
8775                BusInfo,
8776                fidl::encoding::DefaultFuchsiaResourceDialect,
8777            >(
8778                self.bus_info.as_ref().map(<BusInfo as fidl::encoding::ValueTypeMarker>::borrow),
8779                encoder,
8780                offset + cur_offset,
8781                depth,
8782            )?;
8783
8784            _prev_end_offset = cur_offset + envelope_size;
8785            if 8 > max_ordinal {
8786                return Ok(());
8787            }
8788
8789            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
8790            // are envelope_size bytes.
8791            let cur_offset: usize = (8 - 1) * envelope_size;
8792
8793            // Zero reserved fields.
8794            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
8795
8796            // Safety:
8797            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
8798            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
8799            //   envelope_size bytes, there is always sufficient room.
8800            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NodeProperty2, 64>, fidl::encoding::DefaultFuchsiaResourceDialect>(
8801            self.properties2.as_ref().map(<fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::ValueTypeMarker>::borrow),
8802            encoder, offset + cur_offset, depth
8803        )?;
8804
8805            _prev_end_offset = cur_offset + envelope_size;
8806
8807            Ok(())
8808        }
8809    }
8810
8811    impl fidl::encoding::Decode<Self, fidl::encoding::DefaultFuchsiaResourceDialect> for NodeAddArgs {
8812        #[inline(always)]
8813        fn new_empty() -> Self {
8814            Self::default()
8815        }
8816
8817        unsafe fn decode(
8818            &mut self,
8819            decoder: &mut fidl::encoding::Decoder<
8820                '_,
8821                fidl::encoding::DefaultFuchsiaResourceDialect,
8822            >,
8823            offset: usize,
8824            mut depth: fidl::encoding::Depth,
8825        ) -> fidl::Result<()> {
8826            decoder.debug_check_bounds::<Self>(offset);
8827            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
8828                None => return Err(fidl::Error::NotNullable),
8829                Some(len) => len,
8830            };
8831            // Calling decoder.out_of_line_offset(0) is not allowed.
8832            if len == 0 {
8833                return Ok(());
8834            };
8835            depth.increment()?;
8836            let envelope_size = 8;
8837            let bytes_len = len * envelope_size;
8838            let offset = decoder.out_of_line_offset(bytes_len)?;
8839            // Decode the envelope for each type.
8840            let mut _next_ordinal_to_read = 0;
8841            let mut next_offset = offset;
8842            let end_offset = offset + bytes_len;
8843            _next_ordinal_to_read += 1;
8844            if next_offset >= end_offset {
8845                return Ok(());
8846            }
8847
8848            // Decode unknown envelopes for gaps in ordinals.
8849            while _next_ordinal_to_read < 1 {
8850                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8851                _next_ordinal_to_read += 1;
8852                next_offset += envelope_size;
8853            }
8854
8855            let next_out_of_line = decoder.next_out_of_line();
8856            let handles_before = decoder.remaining_handles();
8857            if let Some((inlined, num_bytes, num_handles)) =
8858                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8859            {
8860                let member_inline_size =
8861                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
8862                        decoder.context,
8863                    );
8864                if inlined != (member_inline_size <= 4) {
8865                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8866                }
8867                let inner_offset;
8868                let mut inner_depth = depth.clone();
8869                if inlined {
8870                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8871                    inner_offset = next_offset;
8872                } else {
8873                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8874                    inner_depth.increment()?;
8875                }
8876                let val_ref = self.name.get_or_insert_with(|| {
8877                    fidl::new_empty!(
8878                        fidl::encoding::BoundedString<128>,
8879                        fidl::encoding::DefaultFuchsiaResourceDialect
8880                    )
8881                });
8882                fidl::decode!(
8883                    fidl::encoding::BoundedString<128>,
8884                    fidl::encoding::DefaultFuchsiaResourceDialect,
8885                    val_ref,
8886                    decoder,
8887                    inner_offset,
8888                    inner_depth
8889                )?;
8890                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8891                {
8892                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8893                }
8894                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8895                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8896                }
8897            }
8898
8899            next_offset += envelope_size;
8900            _next_ordinal_to_read += 1;
8901            if next_offset >= end_offset {
8902                return Ok(());
8903            }
8904
8905            // Decode unknown envelopes for gaps in ordinals.
8906            while _next_ordinal_to_read < 2 {
8907                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8908                _next_ordinal_to_read += 1;
8909                next_offset += envelope_size;
8910            }
8911
8912            let next_out_of_line = decoder.next_out_of_line();
8913            let handles_before = decoder.remaining_handles();
8914            if let Some((inlined, num_bytes, num_handles)) =
8915                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8916            {
8917                let member_inline_size = <fidl::encoding::Vector<
8918                    fidl_fuchsia_component_decl::Offer,
8919                    128,
8920                > as fidl::encoding::TypeMarker>::inline_size(
8921                    decoder.context
8922                );
8923                if inlined != (member_inline_size <= 4) {
8924                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8925                }
8926                let inner_offset;
8927                let mut inner_depth = depth.clone();
8928                if inlined {
8929                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8930                    inner_offset = next_offset;
8931                } else {
8932                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8933                    inner_depth.increment()?;
8934                }
8935                let val_ref =
8936                self.offers.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_component_decl::Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect));
8937                fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_component_decl::Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
8938                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8939                {
8940                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8941                }
8942                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8943                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8944                }
8945            }
8946
8947            next_offset += envelope_size;
8948            _next_ordinal_to_read += 1;
8949            if next_offset >= end_offset {
8950                return Ok(());
8951            }
8952
8953            // Decode unknown envelopes for gaps in ordinals.
8954            while _next_ordinal_to_read < 3 {
8955                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8956                _next_ordinal_to_read += 1;
8957                next_offset += envelope_size;
8958            }
8959
8960            let next_out_of_line = decoder.next_out_of_line();
8961            let handles_before = decoder.remaining_handles();
8962            if let Some((inlined, num_bytes, num_handles)) =
8963                fidl::encoding::decode_envelope_header(decoder, next_offset)?
8964            {
8965                let member_inline_size = <fidl::encoding::Vector<NodeSymbol, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
8966                if inlined != (member_inline_size <= 4) {
8967                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
8968                }
8969                let inner_offset;
8970                let mut inner_depth = depth.clone();
8971                if inlined {
8972                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
8973                    inner_offset = next_offset;
8974                } else {
8975                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8976                    inner_depth.increment()?;
8977                }
8978                let val_ref =
8979                self.symbols.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<NodeSymbol, 64>, fidl::encoding::DefaultFuchsiaResourceDialect));
8980                fidl::decode!(fidl::encoding::Vector<NodeSymbol, 64>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
8981                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
8982                {
8983                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
8984                }
8985                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8986                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8987                }
8988            }
8989
8990            next_offset += envelope_size;
8991            _next_ordinal_to_read += 1;
8992            if next_offset >= end_offset {
8993                return Ok(());
8994            }
8995
8996            // Decode unknown envelopes for gaps in ordinals.
8997            while _next_ordinal_to_read < 4 {
8998                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
8999                _next_ordinal_to_read += 1;
9000                next_offset += envelope_size;
9001            }
9002
9003            let next_out_of_line = decoder.next_out_of_line();
9004            let handles_before = decoder.remaining_handles();
9005            if let Some((inlined, num_bytes, num_handles)) =
9006                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9007            {
9008                let member_inline_size = <fidl::encoding::Vector<NodeProperty, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9009                if inlined != (member_inline_size <= 4) {
9010                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9011                }
9012                let inner_offset;
9013                let mut inner_depth = depth.clone();
9014                if inlined {
9015                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9016                    inner_offset = next_offset;
9017                } else {
9018                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9019                    inner_depth.increment()?;
9020                }
9021                let val_ref =
9022                self.properties.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<NodeProperty, 64>, fidl::encoding::DefaultFuchsiaResourceDialect));
9023                fidl::decode!(fidl::encoding::Vector<NodeProperty, 64>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
9024                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9025                {
9026                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9027                }
9028                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9029                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9030                }
9031            }
9032
9033            next_offset += envelope_size;
9034            _next_ordinal_to_read += 1;
9035            if next_offset >= end_offset {
9036                return Ok(());
9037            }
9038
9039            // Decode unknown envelopes for gaps in ordinals.
9040            while _next_ordinal_to_read < 5 {
9041                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9042                _next_ordinal_to_read += 1;
9043                next_offset += envelope_size;
9044            }
9045
9046            let next_out_of_line = decoder.next_out_of_line();
9047            let handles_before = decoder.remaining_handles();
9048            if let Some((inlined, num_bytes, num_handles)) =
9049                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9050            {
9051                let member_inline_size =
9052                    <DevfsAddArgs as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9053                if inlined != (member_inline_size <= 4) {
9054                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9055                }
9056                let inner_offset;
9057                let mut inner_depth = depth.clone();
9058                if inlined {
9059                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9060                    inner_offset = next_offset;
9061                } else {
9062                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9063                    inner_depth.increment()?;
9064                }
9065                let val_ref = self.devfs_args.get_or_insert_with(|| {
9066                    fidl::new_empty!(DevfsAddArgs, fidl::encoding::DefaultFuchsiaResourceDialect)
9067                });
9068                fidl::decode!(
9069                    DevfsAddArgs,
9070                    fidl::encoding::DefaultFuchsiaResourceDialect,
9071                    val_ref,
9072                    decoder,
9073                    inner_offset,
9074                    inner_depth
9075                )?;
9076                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9077                {
9078                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9079                }
9080                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9081                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9082                }
9083            }
9084
9085            next_offset += envelope_size;
9086            _next_ordinal_to_read += 1;
9087            if next_offset >= end_offset {
9088                return Ok(());
9089            }
9090
9091            // Decode unknown envelopes for gaps in ordinals.
9092            while _next_ordinal_to_read < 6 {
9093                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9094                _next_ordinal_to_read += 1;
9095                next_offset += envelope_size;
9096            }
9097
9098            let next_out_of_line = decoder.next_out_of_line();
9099            let handles_before = decoder.remaining_handles();
9100            if let Some((inlined, num_bytes, num_handles)) =
9101                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9102            {
9103                let member_inline_size =
9104                    <fidl::encoding::Vector<Offer, 128> as fidl::encoding::TypeMarker>::inline_size(
9105                        decoder.context,
9106                    );
9107                if inlined != (member_inline_size <= 4) {
9108                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9109                }
9110                let inner_offset;
9111                let mut inner_depth = depth.clone();
9112                if inlined {
9113                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9114                    inner_offset = next_offset;
9115                } else {
9116                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9117                    inner_depth.increment()?;
9118                }
9119                let val_ref =
9120                self.offers2.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect));
9121                fidl::decode!(fidl::encoding::Vector<Offer, 128>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
9122                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9123                {
9124                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9125                }
9126                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9127                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9128                }
9129            }
9130
9131            next_offset += envelope_size;
9132            _next_ordinal_to_read += 1;
9133            if next_offset >= end_offset {
9134                return Ok(());
9135            }
9136
9137            // Decode unknown envelopes for gaps in ordinals.
9138            while _next_ordinal_to_read < 7 {
9139                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9140                _next_ordinal_to_read += 1;
9141                next_offset += envelope_size;
9142            }
9143
9144            let next_out_of_line = decoder.next_out_of_line();
9145            let handles_before = decoder.remaining_handles();
9146            if let Some((inlined, num_bytes, num_handles)) =
9147                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9148            {
9149                let member_inline_size =
9150                    <BusInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9151                if inlined != (member_inline_size <= 4) {
9152                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9153                }
9154                let inner_offset;
9155                let mut inner_depth = depth.clone();
9156                if inlined {
9157                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9158                    inner_offset = next_offset;
9159                } else {
9160                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9161                    inner_depth.increment()?;
9162                }
9163                let val_ref = self.bus_info.get_or_insert_with(|| {
9164                    fidl::new_empty!(BusInfo, fidl::encoding::DefaultFuchsiaResourceDialect)
9165                });
9166                fidl::decode!(
9167                    BusInfo,
9168                    fidl::encoding::DefaultFuchsiaResourceDialect,
9169                    val_ref,
9170                    decoder,
9171                    inner_offset,
9172                    inner_depth
9173                )?;
9174                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9175                {
9176                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9177                }
9178                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9179                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9180                }
9181            }
9182
9183            next_offset += envelope_size;
9184            _next_ordinal_to_read += 1;
9185            if next_offset >= end_offset {
9186                return Ok(());
9187            }
9188
9189            // Decode unknown envelopes for gaps in ordinals.
9190            while _next_ordinal_to_read < 8 {
9191                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9192                _next_ordinal_to_read += 1;
9193                next_offset += envelope_size;
9194            }
9195
9196            let next_out_of_line = decoder.next_out_of_line();
9197            let handles_before = decoder.remaining_handles();
9198            if let Some((inlined, num_bytes, num_handles)) =
9199                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9200            {
9201                let member_inline_size = <fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9202                if inlined != (member_inline_size <= 4) {
9203                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9204                }
9205                let inner_offset;
9206                let mut inner_depth = depth.clone();
9207                if inlined {
9208                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9209                    inner_offset = next_offset;
9210                } else {
9211                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9212                    inner_depth.increment()?;
9213                }
9214                let val_ref =
9215                self.properties2.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<NodeProperty2, 64>, fidl::encoding::DefaultFuchsiaResourceDialect));
9216                fidl::decode!(fidl::encoding::Vector<NodeProperty2, 64>, fidl::encoding::DefaultFuchsiaResourceDialect, val_ref, decoder, inner_offset, inner_depth)?;
9217                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9218                {
9219                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9220                }
9221                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9222                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9223                }
9224            }
9225
9226            next_offset += envelope_size;
9227
9228            // Decode the remaining unknown envelopes.
9229            while next_offset < end_offset {
9230                _next_ordinal_to_read += 1;
9231                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9232                next_offset += envelope_size;
9233            }
9234
9235            Ok(())
9236        }
9237    }
9238
9239    impl NodeControllerRequestBindRequest {
9240        #[inline(always)]
9241        fn max_ordinal_present(&self) -> u64 {
9242            if let Some(_) = self.driver_url_suffix {
9243                return 2;
9244            }
9245            if let Some(_) = self.force_rebind {
9246                return 1;
9247            }
9248            0
9249        }
9250    }
9251
9252    impl fidl::encoding::ValueTypeMarker for NodeControllerRequestBindRequest {
9253        type Borrowed<'a> = &'a Self;
9254        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9255            value
9256        }
9257    }
9258
9259    unsafe impl fidl::encoding::TypeMarker for NodeControllerRequestBindRequest {
9260        type Owned = Self;
9261
9262        #[inline(always)]
9263        fn inline_align(_context: fidl::encoding::Context) -> usize {
9264            8
9265        }
9266
9267        #[inline(always)]
9268        fn inline_size(_context: fidl::encoding::Context) -> usize {
9269            16
9270        }
9271    }
9272
9273    unsafe impl<D: fidl::encoding::ResourceDialect>
9274        fidl::encoding::Encode<NodeControllerRequestBindRequest, D>
9275        for &NodeControllerRequestBindRequest
9276    {
9277        unsafe fn encode(
9278            self,
9279            encoder: &mut fidl::encoding::Encoder<'_, D>,
9280            offset: usize,
9281            mut depth: fidl::encoding::Depth,
9282        ) -> fidl::Result<()> {
9283            encoder.debug_check_bounds::<NodeControllerRequestBindRequest>(offset);
9284            // Vector header
9285            let max_ordinal: u64 = self.max_ordinal_present();
9286            encoder.write_num(max_ordinal, offset);
9287            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9288            // Calling encoder.out_of_line_offset(0) is not allowed.
9289            if max_ordinal == 0 {
9290                return Ok(());
9291            }
9292            depth.increment()?;
9293            let envelope_size = 8;
9294            let bytes_len = max_ordinal as usize * envelope_size;
9295            #[allow(unused_variables)]
9296            let offset = encoder.out_of_line_offset(bytes_len);
9297            let mut _prev_end_offset: usize = 0;
9298            if 1 > max_ordinal {
9299                return Ok(());
9300            }
9301
9302            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9303            // are envelope_size bytes.
9304            let cur_offset: usize = (1 - 1) * envelope_size;
9305
9306            // Zero reserved fields.
9307            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9308
9309            // Safety:
9310            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9311            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9312            //   envelope_size bytes, there is always sufficient room.
9313            fidl::encoding::encode_in_envelope_optional::<bool, D>(
9314                self.force_rebind.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
9315                encoder,
9316                offset + cur_offset,
9317                depth,
9318            )?;
9319
9320            _prev_end_offset = cur_offset + envelope_size;
9321            if 2 > max_ordinal {
9322                return Ok(());
9323            }
9324
9325            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9326            // are envelope_size bytes.
9327            let cur_offset: usize = (2 - 1) * envelope_size;
9328
9329            // Zero reserved fields.
9330            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9331
9332            // Safety:
9333            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9334            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9335            //   envelope_size bytes, there is always sufficient room.
9336            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
9337                self.driver_url_suffix.as_ref().map(
9338                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
9339                ),
9340                encoder,
9341                offset + cur_offset,
9342                depth,
9343            )?;
9344
9345            _prev_end_offset = cur_offset + envelope_size;
9346
9347            Ok(())
9348        }
9349    }
9350
9351    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
9352        for NodeControllerRequestBindRequest
9353    {
9354        #[inline(always)]
9355        fn new_empty() -> Self {
9356            Self::default()
9357        }
9358
9359        unsafe fn decode(
9360            &mut self,
9361            decoder: &mut fidl::encoding::Decoder<'_, D>,
9362            offset: usize,
9363            mut depth: fidl::encoding::Depth,
9364        ) -> fidl::Result<()> {
9365            decoder.debug_check_bounds::<Self>(offset);
9366            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9367                None => return Err(fidl::Error::NotNullable),
9368                Some(len) => len,
9369            };
9370            // Calling decoder.out_of_line_offset(0) is not allowed.
9371            if len == 0 {
9372                return Ok(());
9373            };
9374            depth.increment()?;
9375            let envelope_size = 8;
9376            let bytes_len = len * envelope_size;
9377            let offset = decoder.out_of_line_offset(bytes_len)?;
9378            // Decode the envelope for each type.
9379            let mut _next_ordinal_to_read = 0;
9380            let mut next_offset = offset;
9381            let end_offset = offset + bytes_len;
9382            _next_ordinal_to_read += 1;
9383            if next_offset >= end_offset {
9384                return Ok(());
9385            }
9386
9387            // Decode unknown envelopes for gaps in ordinals.
9388            while _next_ordinal_to_read < 1 {
9389                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9390                _next_ordinal_to_read += 1;
9391                next_offset += envelope_size;
9392            }
9393
9394            let next_out_of_line = decoder.next_out_of_line();
9395            let handles_before = decoder.remaining_handles();
9396            if let Some((inlined, num_bytes, num_handles)) =
9397                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9398            {
9399                let member_inline_size =
9400                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9401                if inlined != (member_inline_size <= 4) {
9402                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9403                }
9404                let inner_offset;
9405                let mut inner_depth = depth.clone();
9406                if inlined {
9407                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9408                    inner_offset = next_offset;
9409                } else {
9410                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9411                    inner_depth.increment()?;
9412                }
9413                let val_ref = self.force_rebind.get_or_insert_with(|| fidl::new_empty!(bool, D));
9414                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
9415                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9416                {
9417                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9418                }
9419                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9420                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9421                }
9422            }
9423
9424            next_offset += envelope_size;
9425            _next_ordinal_to_read += 1;
9426            if next_offset >= end_offset {
9427                return Ok(());
9428            }
9429
9430            // Decode unknown envelopes for gaps in ordinals.
9431            while _next_ordinal_to_read < 2 {
9432                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9433                _next_ordinal_to_read += 1;
9434                next_offset += envelope_size;
9435            }
9436
9437            let next_out_of_line = decoder.next_out_of_line();
9438            let handles_before = decoder.remaining_handles();
9439            if let Some((inlined, num_bytes, num_handles)) =
9440                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9441            {
9442                let member_inline_size =
9443                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
9444                        decoder.context,
9445                    );
9446                if inlined != (member_inline_size <= 4) {
9447                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9448                }
9449                let inner_offset;
9450                let mut inner_depth = depth.clone();
9451                if inlined {
9452                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9453                    inner_offset = next_offset;
9454                } else {
9455                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9456                    inner_depth.increment()?;
9457                }
9458                let val_ref = self
9459                    .driver_url_suffix
9460                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
9461                fidl::decode!(
9462                    fidl::encoding::UnboundedString,
9463                    D,
9464                    val_ref,
9465                    decoder,
9466                    inner_offset,
9467                    inner_depth
9468                )?;
9469                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9470                {
9471                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9472                }
9473                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9474                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9475                }
9476            }
9477
9478            next_offset += envelope_size;
9479
9480            // Decode the remaining unknown envelopes.
9481            while next_offset < end_offset {
9482                _next_ordinal_to_read += 1;
9483                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9484                next_offset += envelope_size;
9485            }
9486
9487            Ok(())
9488        }
9489    }
9490
9491    impl NodeSymbol {
9492        #[inline(always)]
9493        fn max_ordinal_present(&self) -> u64 {
9494            if let Some(_) = self.module_name {
9495                return 3;
9496            }
9497            if let Some(_) = self.address {
9498                return 2;
9499            }
9500            if let Some(_) = self.name {
9501                return 1;
9502            }
9503            0
9504        }
9505    }
9506
9507    impl fidl::encoding::ValueTypeMarker for NodeSymbol {
9508        type Borrowed<'a> = &'a Self;
9509        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9510            value
9511        }
9512    }
9513
9514    unsafe impl fidl::encoding::TypeMarker for NodeSymbol {
9515        type Owned = Self;
9516
9517        #[inline(always)]
9518        fn inline_align(_context: fidl::encoding::Context) -> usize {
9519            8
9520        }
9521
9522        #[inline(always)]
9523        fn inline_size(_context: fidl::encoding::Context) -> usize {
9524            16
9525        }
9526    }
9527
9528    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeSymbol, D>
9529        for &NodeSymbol
9530    {
9531        unsafe fn encode(
9532            self,
9533            encoder: &mut fidl::encoding::Encoder<'_, D>,
9534            offset: usize,
9535            mut depth: fidl::encoding::Depth,
9536        ) -> fidl::Result<()> {
9537            encoder.debug_check_bounds::<NodeSymbol>(offset);
9538            // Vector header
9539            let max_ordinal: u64 = self.max_ordinal_present();
9540            encoder.write_num(max_ordinal, offset);
9541            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
9542            // Calling encoder.out_of_line_offset(0) is not allowed.
9543            if max_ordinal == 0 {
9544                return Ok(());
9545            }
9546            depth.increment()?;
9547            let envelope_size = 8;
9548            let bytes_len = max_ordinal as usize * envelope_size;
9549            #[allow(unused_variables)]
9550            let offset = encoder.out_of_line_offset(bytes_len);
9551            let mut _prev_end_offset: usize = 0;
9552            if 1 > max_ordinal {
9553                return Ok(());
9554            }
9555
9556            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9557            // are envelope_size bytes.
9558            let cur_offset: usize = (1 - 1) * envelope_size;
9559
9560            // Zero reserved fields.
9561            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9562
9563            // Safety:
9564            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9565            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9566            //   envelope_size bytes, there is always sufficient room.
9567            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
9568                self.name.as_ref().map(
9569                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
9570                ),
9571                encoder,
9572                offset + cur_offset,
9573                depth,
9574            )?;
9575
9576            _prev_end_offset = cur_offset + envelope_size;
9577            if 2 > max_ordinal {
9578                return Ok(());
9579            }
9580
9581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9582            // are envelope_size bytes.
9583            let cur_offset: usize = (2 - 1) * envelope_size;
9584
9585            // Zero reserved fields.
9586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9587
9588            // Safety:
9589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9591            //   envelope_size bytes, there is always sufficient room.
9592            fidl::encoding::encode_in_envelope_optional::<u64, D>(
9593                self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
9594                encoder,
9595                offset + cur_offset,
9596                depth,
9597            )?;
9598
9599            _prev_end_offset = cur_offset + envelope_size;
9600            if 3 > max_ordinal {
9601                return Ok(());
9602            }
9603
9604            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
9605            // are envelope_size bytes.
9606            let cur_offset: usize = (3 - 1) * envelope_size;
9607
9608            // Zero reserved fields.
9609            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
9610
9611            // Safety:
9612            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
9613            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
9614            //   envelope_size bytes, there is always sufficient room.
9615            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
9616                self.module_name.as_ref().map(
9617                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
9618                ),
9619                encoder,
9620                offset + cur_offset,
9621                depth,
9622            )?;
9623
9624            _prev_end_offset = cur_offset + envelope_size;
9625
9626            Ok(())
9627        }
9628    }
9629
9630    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeSymbol {
9631        #[inline(always)]
9632        fn new_empty() -> Self {
9633            Self::default()
9634        }
9635
9636        unsafe fn decode(
9637            &mut self,
9638            decoder: &mut fidl::encoding::Decoder<'_, D>,
9639            offset: usize,
9640            mut depth: fidl::encoding::Depth,
9641        ) -> fidl::Result<()> {
9642            decoder.debug_check_bounds::<Self>(offset);
9643            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
9644                None => return Err(fidl::Error::NotNullable),
9645                Some(len) => len,
9646            };
9647            // Calling decoder.out_of_line_offset(0) is not allowed.
9648            if len == 0 {
9649                return Ok(());
9650            };
9651            depth.increment()?;
9652            let envelope_size = 8;
9653            let bytes_len = len * envelope_size;
9654            let offset = decoder.out_of_line_offset(bytes_len)?;
9655            // Decode the envelope for each type.
9656            let mut _next_ordinal_to_read = 0;
9657            let mut next_offset = offset;
9658            let end_offset = offset + bytes_len;
9659            _next_ordinal_to_read += 1;
9660            if next_offset >= end_offset {
9661                return Ok(());
9662            }
9663
9664            // Decode unknown envelopes for gaps in ordinals.
9665            while _next_ordinal_to_read < 1 {
9666                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9667                _next_ordinal_to_read += 1;
9668                next_offset += envelope_size;
9669            }
9670
9671            let next_out_of_line = decoder.next_out_of_line();
9672            let handles_before = decoder.remaining_handles();
9673            if let Some((inlined, num_bytes, num_handles)) =
9674                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9675            {
9676                let member_inline_size =
9677                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
9678                        decoder.context,
9679                    );
9680                if inlined != (member_inline_size <= 4) {
9681                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9682                }
9683                let inner_offset;
9684                let mut inner_depth = depth.clone();
9685                if inlined {
9686                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9687                    inner_offset = next_offset;
9688                } else {
9689                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9690                    inner_depth.increment()?;
9691                }
9692                let val_ref = self
9693                    .name
9694                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
9695                fidl::decode!(
9696                    fidl::encoding::BoundedString<128>,
9697                    D,
9698                    val_ref,
9699                    decoder,
9700                    inner_offset,
9701                    inner_depth
9702                )?;
9703                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9704                {
9705                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9706                }
9707                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9708                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9709                }
9710            }
9711
9712            next_offset += envelope_size;
9713            _next_ordinal_to_read += 1;
9714            if next_offset >= end_offset {
9715                return Ok(());
9716            }
9717
9718            // Decode unknown envelopes for gaps in ordinals.
9719            while _next_ordinal_to_read < 2 {
9720                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9721                _next_ordinal_to_read += 1;
9722                next_offset += envelope_size;
9723            }
9724
9725            let next_out_of_line = decoder.next_out_of_line();
9726            let handles_before = decoder.remaining_handles();
9727            if let Some((inlined, num_bytes, num_handles)) =
9728                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9729            {
9730                let member_inline_size =
9731                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
9732                if inlined != (member_inline_size <= 4) {
9733                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9734                }
9735                let inner_offset;
9736                let mut inner_depth = depth.clone();
9737                if inlined {
9738                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9739                    inner_offset = next_offset;
9740                } else {
9741                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9742                    inner_depth.increment()?;
9743                }
9744                let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
9745                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
9746                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9747                {
9748                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9749                }
9750                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9751                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9752                }
9753            }
9754
9755            next_offset += envelope_size;
9756            _next_ordinal_to_read += 1;
9757            if next_offset >= end_offset {
9758                return Ok(());
9759            }
9760
9761            // Decode unknown envelopes for gaps in ordinals.
9762            while _next_ordinal_to_read < 3 {
9763                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9764                _next_ordinal_to_read += 1;
9765                next_offset += envelope_size;
9766            }
9767
9768            let next_out_of_line = decoder.next_out_of_line();
9769            let handles_before = decoder.remaining_handles();
9770            if let Some((inlined, num_bytes, num_handles)) =
9771                fidl::encoding::decode_envelope_header(decoder, next_offset)?
9772            {
9773                let member_inline_size =
9774                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
9775                        decoder.context,
9776                    );
9777                if inlined != (member_inline_size <= 4) {
9778                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
9779                }
9780                let inner_offset;
9781                let mut inner_depth = depth.clone();
9782                if inlined {
9783                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
9784                    inner_offset = next_offset;
9785                } else {
9786                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9787                    inner_depth.increment()?;
9788                }
9789                let val_ref = self
9790                    .module_name
9791                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
9792                fidl::decode!(
9793                    fidl::encoding::BoundedString<128>,
9794                    D,
9795                    val_ref,
9796                    decoder,
9797                    inner_offset,
9798                    inner_depth
9799                )?;
9800                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
9801                {
9802                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
9803                }
9804                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
9805                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
9806                }
9807            }
9808
9809            next_offset += envelope_size;
9810
9811            // Decode the remaining unknown envelopes.
9812            while next_offset < end_offset {
9813                _next_ordinal_to_read += 1;
9814                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
9815                next_offset += envelope_size;
9816            }
9817
9818            Ok(())
9819        }
9820    }
9821
9822    impl fidl::encoding::ValueTypeMarker for DeviceAddress {
9823        type Borrowed<'a> = &'a Self;
9824        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
9825            value
9826        }
9827    }
9828
9829    unsafe impl fidl::encoding::TypeMarker for DeviceAddress {
9830        type Owned = Self;
9831
9832        #[inline(always)]
9833        fn inline_align(_context: fidl::encoding::Context) -> usize {
9834            8
9835        }
9836
9837        #[inline(always)]
9838        fn inline_size(_context: fidl::encoding::Context) -> usize {
9839            16
9840        }
9841    }
9842
9843    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceAddress, D>
9844        for &DeviceAddress
9845    {
9846        #[inline]
9847        unsafe fn encode(
9848            self,
9849            encoder: &mut fidl::encoding::Encoder<'_, D>,
9850            offset: usize,
9851            _depth: fidl::encoding::Depth,
9852        ) -> fidl::Result<()> {
9853            encoder.debug_check_bounds::<DeviceAddress>(offset);
9854            encoder.write_num::<u64>(self.ordinal(), offset);
9855            match self {
9856            DeviceAddress::IntValue(ref val) => {
9857                fidl::encoding::encode_in_envelope::<u8, D>(
9858                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(val),
9859                    encoder, offset + 8, _depth
9860                )
9861            }
9862            DeviceAddress::ArrayIntValue(ref val) => {
9863                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<u8, 10>, D>(
9864                    <fidl::encoding::Vector<u8, 10> as fidl::encoding::ValueTypeMarker>::borrow(val),
9865                    encoder, offset + 8, _depth
9866                )
9867            }
9868            DeviceAddress::CharIntValue(ref val) => {
9869                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4>, D>(
9870                    <fidl::encoding::BoundedString<4> as fidl::encoding::ValueTypeMarker>::borrow(val),
9871                    encoder, offset + 8, _depth
9872                )
9873            }
9874            DeviceAddress::ArrayCharIntValue(ref val) => {
9875                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>, D>(
9876                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10> as fidl::encoding::ValueTypeMarker>::borrow(val),
9877                    encoder, offset + 8, _depth
9878                )
9879            }
9880            DeviceAddress::StringValue(ref val) => {
9881                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<32>, D>(
9882                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(val),
9883                    encoder, offset + 8, _depth
9884                )
9885            }
9886            DeviceAddress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
9887        }
9888        }
9889    }
9890
9891    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceAddress {
9892        #[inline(always)]
9893        fn new_empty() -> Self {
9894            Self::__SourceBreaking { unknown_ordinal: 0 }
9895        }
9896
9897        #[inline]
9898        unsafe fn decode(
9899            &mut self,
9900            decoder: &mut fidl::encoding::Decoder<'_, D>,
9901            offset: usize,
9902            mut depth: fidl::encoding::Depth,
9903        ) -> fidl::Result<()> {
9904            decoder.debug_check_bounds::<Self>(offset);
9905            #[allow(unused_variables)]
9906            let next_out_of_line = decoder.next_out_of_line();
9907            let handles_before = decoder.remaining_handles();
9908            let (ordinal, inlined, num_bytes, num_handles) =
9909                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
9910
9911            let member_inline_size = match ordinal {
9912            1 => <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
9913            2 => <fidl::encoding::Vector<u8, 10> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
9914            3 => <fidl::encoding::BoundedString<4> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
9915            4 => <fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
9916            5 => <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
9917            0 => return Err(fidl::Error::UnknownUnionTag),
9918            _ => num_bytes as usize,
9919        };
9920
9921            if inlined != (member_inline_size <= 4) {
9922                return Err(fidl::Error::InvalidInlineBitInEnvelope);
9923            }
9924            let _inner_offset;
9925            if inlined {
9926                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
9927                _inner_offset = offset + 8;
9928            } else {
9929                depth.increment()?;
9930                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
9931            }
9932            match ordinal {
9933                1 => {
9934                    #[allow(irrefutable_let_patterns)]
9935                    if let DeviceAddress::IntValue(_) = self {
9936                        // Do nothing, read the value into the object
9937                    } else {
9938                        // Initialize `self` to the right variant
9939                        *self = DeviceAddress::IntValue(fidl::new_empty!(u8, D));
9940                    }
9941                    #[allow(irrefutable_let_patterns)]
9942                    if let DeviceAddress::IntValue(ref mut val) = self {
9943                        fidl::decode!(u8, D, val, decoder, _inner_offset, depth)?;
9944                    } else {
9945                        unreachable!()
9946                    }
9947                }
9948                2 => {
9949                    #[allow(irrefutable_let_patterns)]
9950                    if let DeviceAddress::ArrayIntValue(_) = self {
9951                        // Do nothing, read the value into the object
9952                    } else {
9953                        // Initialize `self` to the right variant
9954                        *self = DeviceAddress::ArrayIntValue(
9955                            fidl::new_empty!(fidl::encoding::Vector<u8, 10>, D),
9956                        );
9957                    }
9958                    #[allow(irrefutable_let_patterns)]
9959                    if let DeviceAddress::ArrayIntValue(ref mut val) = self {
9960                        fidl::decode!(fidl::encoding::Vector<u8, 10>, D, val, decoder, _inner_offset, depth)?;
9961                    } else {
9962                        unreachable!()
9963                    }
9964                }
9965                3 => {
9966                    #[allow(irrefutable_let_patterns)]
9967                    if let DeviceAddress::CharIntValue(_) = self {
9968                        // Do nothing, read the value into the object
9969                    } else {
9970                        // Initialize `self` to the right variant
9971                        *self = DeviceAddress::CharIntValue(fidl::new_empty!(
9972                            fidl::encoding::BoundedString<4>,
9973                            D
9974                        ));
9975                    }
9976                    #[allow(irrefutable_let_patterns)]
9977                    if let DeviceAddress::CharIntValue(ref mut val) = self {
9978                        fidl::decode!(
9979                            fidl::encoding::BoundedString<4>,
9980                            D,
9981                            val,
9982                            decoder,
9983                            _inner_offset,
9984                            depth
9985                        )?;
9986                    } else {
9987                        unreachable!()
9988                    }
9989                }
9990                4 => {
9991                    #[allow(irrefutable_let_patterns)]
9992                    if let DeviceAddress::ArrayCharIntValue(_) = self {
9993                        // Do nothing, read the value into the object
9994                    } else {
9995                        // Initialize `self` to the right variant
9996                        *self = DeviceAddress::ArrayCharIntValue(fidl::new_empty!(
9997                            fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>,
9998                            D
9999                        ));
10000                    }
10001                    #[allow(irrefutable_let_patterns)]
10002                    if let DeviceAddress::ArrayCharIntValue(ref mut val) = self {
10003                        fidl::decode!(
10004                            fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>,
10005                            D,
10006                            val,
10007                            decoder,
10008                            _inner_offset,
10009                            depth
10010                        )?;
10011                    } else {
10012                        unreachable!()
10013                    }
10014                }
10015                5 => {
10016                    #[allow(irrefutable_let_patterns)]
10017                    if let DeviceAddress::StringValue(_) = self {
10018                        // Do nothing, read the value into the object
10019                    } else {
10020                        // Initialize `self` to the right variant
10021                        *self = DeviceAddress::StringValue(fidl::new_empty!(
10022                            fidl::encoding::BoundedString<32>,
10023                            D
10024                        ));
10025                    }
10026                    #[allow(irrefutable_let_patterns)]
10027                    if let DeviceAddress::StringValue(ref mut val) = self {
10028                        fidl::decode!(
10029                            fidl::encoding::BoundedString<32>,
10030                            D,
10031                            val,
10032                            decoder,
10033                            _inner_offset,
10034                            depth
10035                        )?;
10036                    } else {
10037                        unreachable!()
10038                    }
10039                }
10040                #[allow(deprecated)]
10041                ordinal => {
10042                    for _ in 0..num_handles {
10043                        decoder.drop_next_handle()?;
10044                    }
10045                    *self = DeviceAddress::__SourceBreaking { unknown_ordinal: ordinal };
10046                }
10047            }
10048            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
10049                return Err(fidl::Error::InvalidNumBytesInEnvelope);
10050            }
10051            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10052                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10053            }
10054            Ok(())
10055        }
10056    }
10057
10058    impl fidl::encoding::ValueTypeMarker for NodePropertyKey {
10059        type Borrowed<'a> = &'a Self;
10060        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10061            value
10062        }
10063    }
10064
10065    unsafe impl fidl::encoding::TypeMarker for NodePropertyKey {
10066        type Owned = Self;
10067
10068        #[inline(always)]
10069        fn inline_align(_context: fidl::encoding::Context) -> usize {
10070            8
10071        }
10072
10073        #[inline(always)]
10074        fn inline_size(_context: fidl::encoding::Context) -> usize {
10075            16
10076        }
10077    }
10078
10079    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyKey, D>
10080        for &NodePropertyKey
10081    {
10082        #[inline]
10083        unsafe fn encode(
10084            self,
10085            encoder: &mut fidl::encoding::Encoder<'_, D>,
10086            offset: usize,
10087            _depth: fidl::encoding::Depth,
10088        ) -> fidl::Result<()> {
10089            encoder.debug_check_bounds::<NodePropertyKey>(offset);
10090            encoder.write_num::<u64>(self.ordinal(), offset);
10091            match self {
10092                NodePropertyKey::IntValue(ref val) => fidl::encoding::encode_in_envelope::<u32, D>(
10093                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
10094                    encoder,
10095                    offset + 8,
10096                    _depth,
10097                ),
10098                NodePropertyKey::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
10099                    fidl::encoding::BoundedString<256>,
10100                    D,
10101                >(
10102                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
10103                        val,
10104                    ),
10105                    encoder,
10106                    offset + 8,
10107                    _depth,
10108                ),
10109            }
10110        }
10111    }
10112
10113    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyKey {
10114        #[inline(always)]
10115        fn new_empty() -> Self {
10116            Self::IntValue(fidl::new_empty!(u32, D))
10117        }
10118
10119        #[inline]
10120        unsafe fn decode(
10121            &mut self,
10122            decoder: &mut fidl::encoding::Decoder<'_, D>,
10123            offset: usize,
10124            mut depth: fidl::encoding::Depth,
10125        ) -> fidl::Result<()> {
10126            decoder.debug_check_bounds::<Self>(offset);
10127            #[allow(unused_variables)]
10128            let next_out_of_line = decoder.next_out_of_line();
10129            let handles_before = decoder.remaining_handles();
10130            let (ordinal, inlined, num_bytes, num_handles) =
10131                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
10132
10133            let member_inline_size = match ordinal {
10134                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
10135                2 => {
10136                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
10137                        decoder.context,
10138                    )
10139                }
10140                _ => return Err(fidl::Error::UnknownUnionTag),
10141            };
10142
10143            if inlined != (member_inline_size <= 4) {
10144                return Err(fidl::Error::InvalidInlineBitInEnvelope);
10145            }
10146            let _inner_offset;
10147            if inlined {
10148                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
10149                _inner_offset = offset + 8;
10150            } else {
10151                depth.increment()?;
10152                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10153            }
10154            match ordinal {
10155                1 => {
10156                    #[allow(irrefutable_let_patterns)]
10157                    if let NodePropertyKey::IntValue(_) = self {
10158                        // Do nothing, read the value into the object
10159                    } else {
10160                        // Initialize `self` to the right variant
10161                        *self = NodePropertyKey::IntValue(fidl::new_empty!(u32, D));
10162                    }
10163                    #[allow(irrefutable_let_patterns)]
10164                    if let NodePropertyKey::IntValue(ref mut val) = self {
10165                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
10166                    } else {
10167                        unreachable!()
10168                    }
10169                }
10170                2 => {
10171                    #[allow(irrefutable_let_patterns)]
10172                    if let NodePropertyKey::StringValue(_) = self {
10173                        // Do nothing, read the value into the object
10174                    } else {
10175                        // Initialize `self` to the right variant
10176                        *self = NodePropertyKey::StringValue(fidl::new_empty!(
10177                            fidl::encoding::BoundedString<256>,
10178                            D
10179                        ));
10180                    }
10181                    #[allow(irrefutable_let_patterns)]
10182                    if let NodePropertyKey::StringValue(ref mut val) = self {
10183                        fidl::decode!(
10184                            fidl::encoding::BoundedString<256>,
10185                            D,
10186                            val,
10187                            decoder,
10188                            _inner_offset,
10189                            depth
10190                        )?;
10191                    } else {
10192                        unreachable!()
10193                    }
10194                }
10195                ordinal => panic!("unexpected ordinal {:?}", ordinal),
10196            }
10197            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
10198                return Err(fidl::Error::InvalidNumBytesInEnvelope);
10199            }
10200            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10201                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10202            }
10203            Ok(())
10204        }
10205    }
10206
10207    impl fidl::encoding::ValueTypeMarker for NodePropertyValue {
10208        type Borrowed<'a> = &'a Self;
10209        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10210            value
10211        }
10212    }
10213
10214    unsafe impl fidl::encoding::TypeMarker for NodePropertyValue {
10215        type Owned = Self;
10216
10217        #[inline(always)]
10218        fn inline_align(_context: fidl::encoding::Context) -> usize {
10219            8
10220        }
10221
10222        #[inline(always)]
10223        fn inline_size(_context: fidl::encoding::Context) -> usize {
10224            16
10225        }
10226    }
10227
10228    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyValue, D>
10229        for &NodePropertyValue
10230    {
10231        #[inline]
10232        unsafe fn encode(
10233            self,
10234            encoder: &mut fidl::encoding::Encoder<'_, D>,
10235            offset: usize,
10236            _depth: fidl::encoding::Depth,
10237        ) -> fidl::Result<()> {
10238            encoder.debug_check_bounds::<NodePropertyValue>(offset);
10239            encoder.write_num::<u64>(self.ordinal(), offset);
10240            match self {
10241                NodePropertyValue::IntValue(ref val) => {
10242                    fidl::encoding::encode_in_envelope::<u32, D>(
10243                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
10244                        encoder,
10245                        offset + 8,
10246                        _depth,
10247                    )
10248                }
10249                NodePropertyValue::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
10250                    fidl::encoding::BoundedString<256>,
10251                    D,
10252                >(
10253                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
10254                        val,
10255                    ),
10256                    encoder,
10257                    offset + 8,
10258                    _depth,
10259                ),
10260                NodePropertyValue::BoolValue(ref val) => {
10261                    fidl::encoding::encode_in_envelope::<bool, D>(
10262                        <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
10263                        encoder,
10264                        offset + 8,
10265                        _depth,
10266                    )
10267                }
10268                NodePropertyValue::EnumValue(ref val) => fidl::encoding::encode_in_envelope::<
10269                    fidl::encoding::BoundedString<256>,
10270                    D,
10271                >(
10272                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
10273                        val,
10274                    ),
10275                    encoder,
10276                    offset + 8,
10277                    _depth,
10278                ),
10279                NodePropertyValue::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
10280            }
10281        }
10282    }
10283
10284    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyValue {
10285        #[inline(always)]
10286        fn new_empty() -> Self {
10287            Self::__SourceBreaking { unknown_ordinal: 0 }
10288        }
10289
10290        #[inline]
10291        unsafe fn decode(
10292            &mut self,
10293            decoder: &mut fidl::encoding::Decoder<'_, D>,
10294            offset: usize,
10295            mut depth: fidl::encoding::Depth,
10296        ) -> fidl::Result<()> {
10297            decoder.debug_check_bounds::<Self>(offset);
10298            #[allow(unused_variables)]
10299            let next_out_of_line = decoder.next_out_of_line();
10300            let handles_before = decoder.remaining_handles();
10301            let (ordinal, inlined, num_bytes, num_handles) =
10302                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
10303
10304            let member_inline_size = match ordinal {
10305                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
10306                2 => {
10307                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
10308                        decoder.context,
10309                    )
10310                }
10311                3 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
10312                4 => {
10313                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
10314                        decoder.context,
10315                    )
10316                }
10317                0 => return Err(fidl::Error::UnknownUnionTag),
10318                _ => num_bytes as usize,
10319            };
10320
10321            if inlined != (member_inline_size <= 4) {
10322                return Err(fidl::Error::InvalidInlineBitInEnvelope);
10323            }
10324            let _inner_offset;
10325            if inlined {
10326                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
10327                _inner_offset = offset + 8;
10328            } else {
10329                depth.increment()?;
10330                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10331            }
10332            match ordinal {
10333                1 => {
10334                    #[allow(irrefutable_let_patterns)]
10335                    if let NodePropertyValue::IntValue(_) = self {
10336                        // Do nothing, read the value into the object
10337                    } else {
10338                        // Initialize `self` to the right variant
10339                        *self = NodePropertyValue::IntValue(fidl::new_empty!(u32, D));
10340                    }
10341                    #[allow(irrefutable_let_patterns)]
10342                    if let NodePropertyValue::IntValue(ref mut val) = self {
10343                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
10344                    } else {
10345                        unreachable!()
10346                    }
10347                }
10348                2 => {
10349                    #[allow(irrefutable_let_patterns)]
10350                    if let NodePropertyValue::StringValue(_) = self {
10351                        // Do nothing, read the value into the object
10352                    } else {
10353                        // Initialize `self` to the right variant
10354                        *self = NodePropertyValue::StringValue(fidl::new_empty!(
10355                            fidl::encoding::BoundedString<256>,
10356                            D
10357                        ));
10358                    }
10359                    #[allow(irrefutable_let_patterns)]
10360                    if let NodePropertyValue::StringValue(ref mut val) = self {
10361                        fidl::decode!(
10362                            fidl::encoding::BoundedString<256>,
10363                            D,
10364                            val,
10365                            decoder,
10366                            _inner_offset,
10367                            depth
10368                        )?;
10369                    } else {
10370                        unreachable!()
10371                    }
10372                }
10373                3 => {
10374                    #[allow(irrefutable_let_patterns)]
10375                    if let NodePropertyValue::BoolValue(_) = self {
10376                        // Do nothing, read the value into the object
10377                    } else {
10378                        // Initialize `self` to the right variant
10379                        *self = NodePropertyValue::BoolValue(fidl::new_empty!(bool, D));
10380                    }
10381                    #[allow(irrefutable_let_patterns)]
10382                    if let NodePropertyValue::BoolValue(ref mut val) = self {
10383                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
10384                    } else {
10385                        unreachable!()
10386                    }
10387                }
10388                4 => {
10389                    #[allow(irrefutable_let_patterns)]
10390                    if let NodePropertyValue::EnumValue(_) = self {
10391                        // Do nothing, read the value into the object
10392                    } else {
10393                        // Initialize `self` to the right variant
10394                        *self = NodePropertyValue::EnumValue(fidl::new_empty!(
10395                            fidl::encoding::BoundedString<256>,
10396                            D
10397                        ));
10398                    }
10399                    #[allow(irrefutable_let_patterns)]
10400                    if let NodePropertyValue::EnumValue(ref mut val) = self {
10401                        fidl::decode!(
10402                            fidl::encoding::BoundedString<256>,
10403                            D,
10404                            val,
10405                            decoder,
10406                            _inner_offset,
10407                            depth
10408                        )?;
10409                    } else {
10410                        unreachable!()
10411                    }
10412                }
10413                #[allow(deprecated)]
10414                ordinal => {
10415                    for _ in 0..num_handles {
10416                        decoder.drop_next_handle()?;
10417                    }
10418                    *self = NodePropertyValue::__SourceBreaking { unknown_ordinal: ordinal };
10419                }
10420            }
10421            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
10422                return Err(fidl::Error::InvalidNumBytesInEnvelope);
10423            }
10424            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10425                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10426            }
10427            Ok(())
10428        }
10429    }
10430
10431    impl fidl::encoding::ValueTypeMarker for Offer {
10432        type Borrowed<'a> = &'a Self;
10433        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
10434            value
10435        }
10436    }
10437
10438    unsafe impl fidl::encoding::TypeMarker for Offer {
10439        type Owned = Self;
10440
10441        #[inline(always)]
10442        fn inline_align(_context: fidl::encoding::Context) -> usize {
10443            8
10444        }
10445
10446        #[inline(always)]
10447        fn inline_size(_context: fidl::encoding::Context) -> usize {
10448            16
10449        }
10450    }
10451
10452    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Offer, D> for &Offer {
10453        #[inline]
10454        unsafe fn encode(
10455            self,
10456            encoder: &mut fidl::encoding::Encoder<'_, D>,
10457            offset: usize,
10458            _depth: fidl::encoding::Depth,
10459        ) -> fidl::Result<()> {
10460            encoder.debug_check_bounds::<Offer>(offset);
10461            encoder.write_num::<u64>(self.ordinal(), offset);
10462            match self {
10463                Offer::ZirconTransport(ref val) => fidl::encoding::encode_in_envelope::<
10464                    fidl_fuchsia_component_decl::Offer,
10465                    D,
10466                >(
10467                    <fidl_fuchsia_component_decl::Offer as fidl::encoding::ValueTypeMarker>::borrow(
10468                        val,
10469                    ),
10470                    encoder,
10471                    offset + 8,
10472                    _depth,
10473                ),
10474                Offer::DriverTransport(ref val) => fidl::encoding::encode_in_envelope::<
10475                    fidl_fuchsia_component_decl::Offer,
10476                    D,
10477                >(
10478                    <fidl_fuchsia_component_decl::Offer as fidl::encoding::ValueTypeMarker>::borrow(
10479                        val,
10480                    ),
10481                    encoder,
10482                    offset + 8,
10483                    _depth,
10484                ),
10485                Offer::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
10486            }
10487        }
10488    }
10489
10490    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Offer {
10491        #[inline(always)]
10492        fn new_empty() -> Self {
10493            Self::__SourceBreaking { unknown_ordinal: 0 }
10494        }
10495
10496        #[inline]
10497        unsafe fn decode(
10498            &mut self,
10499            decoder: &mut fidl::encoding::Decoder<'_, D>,
10500            offset: usize,
10501            mut depth: fidl::encoding::Depth,
10502        ) -> fidl::Result<()> {
10503            decoder.debug_check_bounds::<Self>(offset);
10504            #[allow(unused_variables)]
10505            let next_out_of_line = decoder.next_out_of_line();
10506            let handles_before = decoder.remaining_handles();
10507            let (ordinal, inlined, num_bytes, num_handles) =
10508                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
10509
10510            let member_inline_size = match ordinal {
10511                1 => {
10512                    <fidl_fuchsia_component_decl::Offer as fidl::encoding::TypeMarker>::inline_size(
10513                        decoder.context,
10514                    )
10515                }
10516                2 => {
10517                    <fidl_fuchsia_component_decl::Offer as fidl::encoding::TypeMarker>::inline_size(
10518                        decoder.context,
10519                    )
10520                }
10521                0 => return Err(fidl::Error::UnknownUnionTag),
10522                _ => num_bytes as usize,
10523            };
10524
10525            if inlined != (member_inline_size <= 4) {
10526                return Err(fidl::Error::InvalidInlineBitInEnvelope);
10527            }
10528            let _inner_offset;
10529            if inlined {
10530                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
10531                _inner_offset = offset + 8;
10532            } else {
10533                depth.increment()?;
10534                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
10535            }
10536            match ordinal {
10537                1 => {
10538                    #[allow(irrefutable_let_patterns)]
10539                    if let Offer::ZirconTransport(_) = self {
10540                        // Do nothing, read the value into the object
10541                    } else {
10542                        // Initialize `self` to the right variant
10543                        *self = Offer::ZirconTransport(fidl::new_empty!(
10544                            fidl_fuchsia_component_decl::Offer,
10545                            D
10546                        ));
10547                    }
10548                    #[allow(irrefutable_let_patterns)]
10549                    if let Offer::ZirconTransport(ref mut val) = self {
10550                        fidl::decode!(
10551                            fidl_fuchsia_component_decl::Offer,
10552                            D,
10553                            val,
10554                            decoder,
10555                            _inner_offset,
10556                            depth
10557                        )?;
10558                    } else {
10559                        unreachable!()
10560                    }
10561                }
10562                2 => {
10563                    #[allow(irrefutable_let_patterns)]
10564                    if let Offer::DriverTransport(_) = self {
10565                        // Do nothing, read the value into the object
10566                    } else {
10567                        // Initialize `self` to the right variant
10568                        *self = Offer::DriverTransport(fidl::new_empty!(
10569                            fidl_fuchsia_component_decl::Offer,
10570                            D
10571                        ));
10572                    }
10573                    #[allow(irrefutable_let_patterns)]
10574                    if let Offer::DriverTransport(ref mut val) = self {
10575                        fidl::decode!(
10576                            fidl_fuchsia_component_decl::Offer,
10577                            D,
10578                            val,
10579                            decoder,
10580                            _inner_offset,
10581                            depth
10582                        )?;
10583                    } else {
10584                        unreachable!()
10585                    }
10586                }
10587                #[allow(deprecated)]
10588                ordinal => {
10589                    for _ in 0..num_handles {
10590                        decoder.drop_next_handle()?;
10591                    }
10592                    *self = Offer::__SourceBreaking { unknown_ordinal: ordinal };
10593                }
10594            }
10595            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
10596                return Err(fidl::Error::InvalidNumBytesInEnvelope);
10597            }
10598            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
10599                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
10600            }
10601            Ok(())
10602        }
10603    }
10604}