fidl_fuchsia_driver_framework__common/
fidl_fuchsia_driver_framework__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type NodeName = String;
12
13pub type NodeOffersVector = Vec<Offer>;
14
15pub type NodeProperties = Vec<NodeProperty2>;
16
17pub type NodePropertyDictionary = Vec<NodePropertyEntry>;
18
19pub type NodePropertyDictionary2 = Vec<NodePropertyEntry2>;
20
21pub type NodePropertyKeyString = String;
22
23pub type NodePropertyKeyUint = u32;
24
25pub type NodePropertyValueBool = bool;
26
27pub type NodePropertyValueEnum = String;
28
29pub type NodePropertyValueString = String;
30
31pub type NodePropertyValueUint = u32;
32
33pub type NodePropertyVector = Vec<NodeProperty>;
34
35pub const MAX_DEVICE_ADDRESS_ARRAY_LEN: u32 = 10;
36
37pub const MAX_DEVICE_ADDRESS_STR_LEN: u32 = 32;
38
39pub const MAX_DRIVER_HOST_LENGTH: u8 = 128;
40
41pub const MAX_MODULE_NAME_LENGTH: u8 = 128;
42
43pub const MAX_NAMESPACE_COUNT: u32 =
44    fidl_fuchsia_component_runner__common::MAX_NAMESPACE_COUNT as u32;
45
46pub const MAX_NODE_NAME_LENGTH: u8 = 128;
47
48pub const MAX_OFFER_COUNT: u32 = fidl_fuchsia_component__common::MAX_DYNAMIC_OFFER_COUNT as u32;
49
50pub const MAX_PROPERTY_COUNT: u8 = 64;
51
52pub const MAX_RESOURCE_NAME_LENGTH: u8 = 128;
53
54pub const MAX_SYMBOL_COUNT: u8 = 64;
55
56pub const MAX_SYMBOL_NAME_LENGTH: u8 = 128;
57
58#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
59pub enum BusType {
60    Platform,
61    Acpi,
62    DeviceTree,
63    Pci,
64    Usb,
65    Gpio,
66    I2C,
67    Spi,
68    Sdio,
69    Uart,
70    Spmi,
71    #[doc(hidden)]
72    __SourceBreaking {
73        unknown_ordinal: u32,
74    },
75}
76
77/// Pattern that matches an unknown `BusType` member.
78#[macro_export]
79macro_rules! BusTypeUnknown {
80    () => {
81        _
82    };
83}
84
85impl BusType {
86    #[inline]
87    pub fn from_primitive(prim: u32) -> Option<Self> {
88        match prim {
89            1 => Some(Self::Platform),
90            2 => Some(Self::Acpi),
91            3 => Some(Self::DeviceTree),
92            4 => Some(Self::Pci),
93            5 => Some(Self::Usb),
94            6 => Some(Self::Gpio),
95            7 => Some(Self::I2C),
96            8 => Some(Self::Spi),
97            9 => Some(Self::Sdio),
98            10 => Some(Self::Uart),
99            11 => Some(Self::Spmi),
100            _ => None,
101        }
102    }
103
104    #[inline]
105    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
106        match prim {
107            1 => Self::Platform,
108            2 => Self::Acpi,
109            3 => Self::DeviceTree,
110            4 => Self::Pci,
111            5 => Self::Usb,
112            6 => Self::Gpio,
113            7 => Self::I2C,
114            8 => Self::Spi,
115            9 => Self::Sdio,
116            10 => Self::Uart,
117            11 => Self::Spmi,
118            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
119        }
120    }
121
122    #[inline]
123    pub fn unknown() -> Self {
124        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
125    }
126
127    #[inline]
128    pub const fn into_primitive(self) -> u32 {
129        match self {
130            Self::Platform => 1,
131            Self::Acpi => 2,
132            Self::DeviceTree => 3,
133            Self::Pci => 4,
134            Self::Usb => 5,
135            Self::Gpio => 6,
136            Self::I2C => 7,
137            Self::Spi => 8,
138            Self::Sdio => 9,
139            Self::Uart => 10,
140            Self::Spmi => 11,
141            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
142        }
143    }
144
145    #[inline]
146    pub fn is_unknown(&self) -> bool {
147        match self {
148            Self::__SourceBreaking { unknown_ordinal: _ } => true,
149            _ => false,
150        }
151    }
152}
153
154/// Error codes for the CompositeNodeManager protocol.
155#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
156pub enum CompositeNodeSpecError {
157    /// An argument of the composite node spec was not provided.
158    MissingArgs,
159    /// The given composite node spec's `nodes` is empty.
160    EmptyNodes,
161    /// The `name` in the given composite node spec is a duplicate of an already
162    /// created composite node spec.
163    AlreadyExists,
164    /// The spec failed to be added to the driver index.
165    DriverIndexFailure,
166    /// The `parents` and `parents2` fields were both specified.
167    DuplicateParents,
168    #[doc(hidden)]
169    __SourceBreaking { unknown_ordinal: u32 },
170}
171
172/// Pattern that matches an unknown `CompositeNodeSpecError` member.
173#[macro_export]
174macro_rules! CompositeNodeSpecErrorUnknown {
175    () => {
176        _
177    };
178}
179
180impl CompositeNodeSpecError {
181    #[inline]
182    pub fn from_primitive(prim: u32) -> Option<Self> {
183        match prim {
184            1 => Some(Self::MissingArgs),
185            2 => Some(Self::EmptyNodes),
186            3 => Some(Self::AlreadyExists),
187            4 => Some(Self::DriverIndexFailure),
188            5 => Some(Self::DuplicateParents),
189            _ => None,
190        }
191    }
192
193    #[inline]
194    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
195        match prim {
196            1 => Self::MissingArgs,
197            2 => Self::EmptyNodes,
198            3 => Self::AlreadyExists,
199            4 => Self::DriverIndexFailure,
200            5 => Self::DuplicateParents,
201            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
202        }
203    }
204
205    #[inline]
206    pub fn unknown() -> Self {
207        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
208    }
209
210    #[inline]
211    pub const fn into_primitive(self) -> u32 {
212        match self {
213            Self::MissingArgs => 1,
214            Self::EmptyNodes => 2,
215            Self::AlreadyExists => 3,
216            Self::DriverIndexFailure => 4,
217            Self::DuplicateParents => 5,
218            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
219        }
220    }
221
222    #[inline]
223    pub fn is_unknown(&self) -> bool {
224        match self {
225            Self::__SourceBreaking { unknown_ordinal: _ } => true,
226            _ => false,
227        }
228    }
229}
230
231/// Represents a bind rule condition.
232#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
233#[repr(u32)]
234pub enum Condition {
235    Unknown = 0,
236    Accept = 1,
237    Reject = 2,
238}
239
240impl Condition {
241    #[inline]
242    pub fn from_primitive(prim: u32) -> Option<Self> {
243        match prim {
244            0 => Some(Self::Unknown),
245            1 => Some(Self::Accept),
246            2 => Some(Self::Reject),
247            _ => None,
248        }
249    }
250
251    #[inline]
252    pub const fn into_primitive(self) -> u32 {
253        self as u32
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    /// The Node contains multiple properties with the same key.
427    DuplicatePropertyKeys,
428    /// The Node is missing source instance filters,
429    OfferSourceInstanceFilterMissing,
430    /// The Node is missing renamed instances,
431    OfferRenamedInstancesMissing,
432    #[doc(hidden)]
433    __SourceBreaking {
434        unknown_ordinal: u32,
435    },
436}
437
438/// Pattern that matches an unknown `NodeError` member.
439#[macro_export]
440macro_rules! NodeErrorUnknown {
441    () => {
442        _
443    };
444}
445
446impl NodeError {
447    #[inline]
448    pub fn from_primitive(prim: u32) -> Option<Self> {
449        match prim {
450            1 => Some(Self::Internal),
451            2 => Some(Self::NodeRemoved),
452            3 => Some(Self::NameMissing),
453            4 => Some(Self::NameInvalid),
454            5 => Some(Self::NameAlreadyExists),
455            6 => Some(Self::OfferSourceNameMissing),
456            7 => Some(Self::OfferRefExists),
457            8 => Some(Self::SymbolNameMissing),
458            9 => Some(Self::SymbolAddressMissing),
459            10 => Some(Self::SymbolAlreadyExists),
460            11 => Some(Self::UnbindChildrenInProgress),
461            12 => Some(Self::UnsupportedArgs),
462            13 => Some(Self::DuplicatePropertyKeys),
463            14 => Some(Self::OfferSourceInstanceFilterMissing),
464            15 => Some(Self::OfferRenamedInstancesMissing),
465            _ => None,
466        }
467    }
468
469    #[inline]
470    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
471        match prim {
472            1 => Self::Internal,
473            2 => Self::NodeRemoved,
474            3 => Self::NameMissing,
475            4 => Self::NameInvalid,
476            5 => Self::NameAlreadyExists,
477            6 => Self::OfferSourceNameMissing,
478            7 => Self::OfferRefExists,
479            8 => Self::SymbolNameMissing,
480            9 => Self::SymbolAddressMissing,
481            10 => Self::SymbolAlreadyExists,
482            11 => Self::UnbindChildrenInProgress,
483            12 => Self::UnsupportedArgs,
484            13 => Self::DuplicatePropertyKeys,
485            14 => Self::OfferSourceInstanceFilterMissing,
486            15 => Self::OfferRenamedInstancesMissing,
487            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
488        }
489    }
490
491    #[inline]
492    pub fn unknown() -> Self {
493        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
494    }
495
496    #[inline]
497    pub const fn into_primitive(self) -> u32 {
498        match self {
499            Self::Internal => 1,
500            Self::NodeRemoved => 2,
501            Self::NameMissing => 3,
502            Self::NameInvalid => 4,
503            Self::NameAlreadyExists => 5,
504            Self::OfferSourceNameMissing => 6,
505            Self::OfferRefExists => 7,
506            Self::SymbolNameMissing => 8,
507            Self::SymbolAddressMissing => 9,
508            Self::SymbolAlreadyExists => 10,
509            Self::UnbindChildrenInProgress => 11,
510            Self::UnsupportedArgs => 12,
511            Self::DuplicatePropertyKeys => 13,
512            Self::OfferSourceInstanceFilterMissing => 14,
513            Self::OfferRenamedInstancesMissing => 15,
514            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
515        }
516    }
517
518    #[inline]
519    pub fn is_unknown(&self) -> bool {
520        match self {
521            Self::__SourceBreaking { unknown_ordinal: _ } => true,
522            _ => false,
523        }
524    }
525}
526
527/// Represents a bind rule in a parent specification.
528#[derive(Clone, Debug, PartialEq)]
529pub struct BindRule {
530    /// Property key. Only string-based keys are supported.
531    pub key: NodePropertyKey,
532    /// Condition for evaluating the property values in
533    /// the matching process. The values must be ACCEPT
534    /// or REJECT.
535    pub condition: Condition,
536    /// A list of property values. Must not be empty. The property
537    /// values must be the same type.
538    pub values: Vec<NodePropertyValue>,
539}
540
541impl fidl::Persistable for BindRule {}
542
543/// Represents a bind rule in a parent specification.
544#[derive(Clone, Debug, PartialEq)]
545pub struct BindRule2 {
546    /// Property key.
547    pub key: String,
548    /// Condition for evaluating the property values in
549    /// the matching process. The values must be ACCEPT
550    /// or REJECT.
551    pub condition: Condition,
552    /// A list of property values. Must not be empty. The property
553    /// values must be the same type.
554    pub values: Vec<NodePropertyValue>,
555}
556
557impl fidl::Persistable for BindRule2 {}
558
559/// Definition of a property for a node. A property is commonly used to match a
560/// node to a driver for driver binding.
561#[derive(Clone, Debug, PartialEq)]
562pub struct NodeProperty {
563    /// Key for the property. Integer-based keys are no longer supported. The NodePropertyKey
564    /// must be a string value.
565    pub key: NodePropertyKey,
566    /// Value for the property.
567    pub value: NodePropertyValue,
568}
569
570impl fidl::Persistable for NodeProperty {}
571
572#[derive(Clone, Debug, PartialEq)]
573pub struct NodeProperty2 {
574    /// Property key.
575    pub key: String,
576    /// Property value.
577    pub value: NodePropertyValue,
578}
579
580impl fidl::Persistable for NodeProperty2 {}
581
582/// Contains the node properties that belong to a node.
583#[derive(Clone, Debug, PartialEq)]
584pub struct NodePropertyEntry {
585    /// Name of the node that has |node_properties|.
586    pub name: String,
587    /// Node properties that belong to the node whose name is |node_name|. If
588    /// the node is a composite then |properties| is empty and does not contain
589    /// its parents' properties.
590    pub properties: Vec<NodeProperty>,
591}
592
593impl fidl::Persistable for NodePropertyEntry {}
594
595/// Contains the node properties that belong to a node.
596#[derive(Clone, Debug, PartialEq)]
597pub struct NodePropertyEntry2 {
598    /// Name of the node that has |node_properties|.
599    pub name: String,
600    /// Node properties that belong to the node whose name is |node_name|. If
601    /// the node is a composite then |properties| is empty and does not contain
602    /// its parents' properties.
603    pub properties: Vec<NodeProperty2>,
604}
605
606impl fidl::Persistable for NodePropertyEntry2 {}
607
608/// Specification for a node that parents the composite node created from the
609/// composite node specification.
610#[derive(Clone, Debug, PartialEq)]
611pub struct ParentSpec {
612    /// Parent's bind rules. Property keys must be unique. Must not be empty.
613    pub bind_rules: Vec<BindRule>,
614    /// Properties for matching against a composite driver's bind rules.
615    /// Keys must be unique and string-based.
616    pub properties: Vec<NodeProperty>,
617}
618
619impl fidl::Persistable for ParentSpec {}
620
621/// Specification for a node that parents the composite node created from the
622/// composite node specification.
623#[derive(Clone, Debug, PartialEq)]
624pub struct ParentSpec2 {
625    /// Parent's bind rules. Property keys must be unique. Must not be empty.
626    pub bind_rules: Vec<BindRule2>,
627    /// Properties for matching against a composite driver's bind rules.
628    /// Keys must be unique and string-based.
629    pub properties: Vec<NodeProperty2>,
630}
631
632impl fidl::Persistable for ParentSpec2 {}
633
634#[derive(Clone, Debug, Default, PartialEq)]
635pub struct BusInfo {
636    /// The type of bus this node sits on.
637    pub bus: Option<BusType>,
638    /// A unique identifier that describes the identity of this device on the given bus.
639    pub address: Option<DeviceAddress>,
640    /// How stable the address.
641    pub address_stability: Option<DeviceAddressStability>,
642    #[doc(hidden)]
643    pub __source_breaking: fidl::marker::SourceBreaking,
644}
645
646impl fidl::Persistable for BusInfo {}
647
648/// Information for a composite driver.
649#[derive(Clone, Debug, Default, PartialEq)]
650pub struct CompositeDriverInfo {
651    /// The name of the composite as specified in the driver's composite bind rules.
652    pub composite_name: Option<String>,
653    /// General information for the driver.
654    pub driver_info: Option<DriverInfo>,
655    #[doc(hidden)]
656    pub __source_breaking: fidl::marker::SourceBreaking,
657}
658
659impl fidl::Persistable for CompositeDriverInfo {}
660
661/// Information for a composite driver that has matched with a composite.
662#[derive(Clone, Debug, Default, PartialEq)]
663pub struct CompositeDriverMatch {
664    /// Information for the composite driver that has matched.
665    pub composite_driver: Option<CompositeDriverInfo>,
666    /// A list of all the parent names, ordered by index.
667    /// These names come from the node definitions in the driver's composite bind rules.
668    pub parent_names: Option<Vec<String>>,
669    /// The primary node index. Identified by the primary node in the driver's
670    /// composite bind rules.
671    pub primary_parent_index: Option<u32>,
672    #[doc(hidden)]
673    pub __source_breaking: fidl::marker::SourceBreaking,
674}
675
676impl fidl::Persistable for CompositeDriverMatch {}
677
678/// Information for a composite that is defined by a composite node spec.
679#[derive(Clone, Debug, Default, PartialEq)]
680pub struct CompositeInfo {
681    /// The spec information that this composite node spec was created with.
682    pub spec: Option<CompositeNodeSpec>,
683    /// Information for the node spec that is available only when a driver
684    /// has matched to the properties in this spec's parents.
685    pub matched_driver: Option<CompositeDriverMatch>,
686    #[doc(hidden)]
687    pub __source_breaking: fidl::marker::SourceBreaking,
688}
689
690impl fidl::Persistable for CompositeInfo {}
691
692/// Struct that represents a composite node specification.
693#[derive(Clone, Debug, Default, PartialEq)]
694pub struct CompositeNodeSpec {
695    /// The composite node spec's name.
696    pub name: Option<String>,
697    /// The nodes in the composite node spec. Must not be empty. The first node is
698    /// the primary node.
699    pub parents: Option<Vec<ParentSpec>>,
700    /// The nodes in the composite node spec. Must not be empty. The first node is
701    /// the primary node.
702    pub parents2: Option<Vec<ParentSpec2>>,
703    /// An identifier for the driver host which a driver that binds to this node spec should live
704    /// in. All drivers which specify the same identifier will be colocated into the same driver
705    /// host. If the driver host hasn't been started, it will be started upon the time the node is
706    /// bound to.
707    pub driver_host: Option<String>,
708    #[doc(hidden)]
709    pub __source_breaking: fidl::marker::SourceBreaking,
710}
711
712impl fidl::Persistable for CompositeNodeSpec {}
713
714/// A parent to a composite that is defined by a composite node spec.
715#[derive(Clone, Debug, Default, PartialEq)]
716pub struct CompositeParent {
717    /// Information about the composite that this is a parent of.
718    pub composite: Option<CompositeInfo>,
719    /// The index of this parent in the spec's parents.
720    pub index: Option<u32>,
721    #[doc(hidden)]
722    pub __source_breaking: fidl::marker::SourceBreaking,
723}
724
725impl fidl::Persistable for CompositeParent {}
726
727/// Device categories as provided in the driver's component manifest.
728#[derive(Clone, Debug, Default, PartialEq)]
729pub struct DeviceCategory {
730    pub category: Option<String>,
731    pub subcategory: Option<String>,
732    #[doc(hidden)]
733    pub __source_breaking: fidl::marker::SourceBreaking,
734}
735
736impl fidl::Persistable for DeviceCategory {}
737
738/// General information for a driver, used with both composite and normal drivers.
739#[derive(Clone, Debug, Default, PartialEq)]
740pub struct DriverInfo {
741    /// URL of the driver component.
742    pub url: Option<String>,
743    /// Name of the driver, taken from the first field of the `ZIRCON_DRIVER`
744    /// macro in the driver.
745    pub name: Option<String>,
746    /// If this is true then the driver should be colocated in its parent's DriverHost.
747    pub colocate: Option<bool>,
748    /// The type of package this driver is in.
749    pub package_type: Option<DriverPackageType>,
750    /// If this is true then the driver is a fallback driver. Fallback drivers have a
751    /// lesser priority for binding, so they will only be chosen for binding if there
752    /// is no non-fallback driver that has matched.
753    pub is_fallback: Option<bool>,
754    /// Device categories
755    pub device_categories: Option<Vec<DeviceCategory>>,
756    /// Bind rules which declare set of constraints to evaluate in order to
757    /// determine whether the driver indexer should bind this driver to a
758    /// device.
759    pub bind_rules_bytecode: Option<Vec<u8>>,
760    /// The version of the driver framework that this driver is using.
761    /// Supported values are 1 (DFv1) and 2 (DFv2).
762    /// If not provided, 1 is the assumed version.
763    pub driver_framework_version: Option<u8>,
764    /// Whether the driver is disabled. If true, this driver is not chosen to bind to nodes.
765    pub is_disabled: Option<bool>,
766    #[doc(hidden)]
767    pub __source_breaking: fidl::marker::SourceBreaking,
768}
769
770impl fidl::Persistable for DriverInfo {}
771
772#[derive(Clone, Debug, Default, PartialEq)]
773pub struct NodeControllerRequestBindRequest {
774    /// If this is true, then the node unbinds from its matched driver before it attempts to
775    /// bind through the normal bind process.
776    pub force_rebind: Option<bool>,
777    /// If this is set, then only drivers matching this URL suffix will be considered in
778    /// binding.
779    /// E.g: "gpt.cm", "meta/gpt.cm", "fuchsia-boot:///#meta/gpt.cm".
780    pub driver_url_suffix: Option<String>,
781    #[doc(hidden)]
782    pub __source_breaking: fidl::marker::SourceBreaking,
783}
784
785impl fidl::Persistable for NodeControllerRequestBindRequest {}
786
787/// Definition of a symbol provided by a driver for a node. A symbol is local to
788/// a driver host.
789#[derive(Clone, Debug, Default, PartialEq)]
790pub struct NodeSymbol {
791    /// Name of the symbol.
792    pub name: Option<String>,
793    /// Virtual address of the symbol, within a driver host's process.
794    pub address: Option<u64>,
795    /// Module name that provided the symbol.
796    /// Will not be provided when the symbol originates from the primary parent.
797    pub module_name: Option<String>,
798    #[doc(hidden)]
799    pub __source_breaking: fidl::marker::SourceBreaking,
800}
801
802impl fidl::Persistable for NodeSymbol {}
803
804#[derive(Clone, Debug)]
805pub enum DeviceAddress {
806    /// A fixed integer id, eg a spi bus address
807    IntValue(u8),
808    /// An array of integers, eg a PCI BDF.
809    ArrayIntValue(Vec<u8>),
810    /// A uint32 value that can be interpretted as a 4 character sequence.
811    CharIntValue(String),
812    /// An array of character sequences, eg a ACPI node path.
813    ArrayCharIntValue(Vec<String>),
814    /// A generic string, eg the device tree node path.
815    StringValue(String),
816    #[doc(hidden)]
817    __SourceBreaking { unknown_ordinal: u64 },
818}
819
820/// Pattern that matches an unknown `DeviceAddress` member.
821#[macro_export]
822macro_rules! DeviceAddressUnknown {
823    () => {
824        _
825    };
826}
827
828// Custom PartialEq so that unknown variants are not equal to themselves.
829impl PartialEq for DeviceAddress {
830    fn eq(&self, other: &Self) -> bool {
831        match (self, other) {
832            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
833            (Self::ArrayIntValue(x), Self::ArrayIntValue(y)) => *x == *y,
834            (Self::CharIntValue(x), Self::CharIntValue(y)) => *x == *y,
835            (Self::ArrayCharIntValue(x), Self::ArrayCharIntValue(y)) => *x == *y,
836            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
837            _ => false,
838        }
839    }
840}
841
842impl DeviceAddress {
843    #[inline]
844    pub fn ordinal(&self) -> u64 {
845        match *self {
846            Self::IntValue(_) => 1,
847            Self::ArrayIntValue(_) => 2,
848            Self::CharIntValue(_) => 3,
849            Self::ArrayCharIntValue(_) => 4,
850            Self::StringValue(_) => 5,
851            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
852        }
853    }
854
855    #[inline]
856    pub fn unknown_variant_for_testing() -> Self {
857        Self::__SourceBreaking { unknown_ordinal: 0 }
858    }
859
860    #[inline]
861    pub fn is_unknown(&self) -> bool {
862        match self {
863            Self::__SourceBreaking { .. } => true,
864            _ => false,
865        }
866    }
867}
868
869impl fidl::Persistable for DeviceAddress {}
870
871#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
872pub enum NodePropertyKey {
873    /// Integer-based keys are no longer supported. Use |string_value| instead.
874    IntValue(u32),
875    StringValue(String),
876}
877
878impl NodePropertyKey {
879    #[inline]
880    pub fn ordinal(&self) -> u64 {
881        match *self {
882            Self::IntValue(_) => 1,
883            Self::StringValue(_) => 2,
884        }
885    }
886}
887
888impl fidl::Persistable for NodePropertyKey {}
889
890#[derive(Clone, Debug)]
891pub enum NodePropertyValue {
892    IntValue(u32),
893    StringValue(String),
894    BoolValue(bool),
895    EnumValue(String),
896    #[doc(hidden)]
897    __SourceBreaking {
898        unknown_ordinal: u64,
899    },
900}
901
902/// Pattern that matches an unknown `NodePropertyValue` member.
903#[macro_export]
904macro_rules! NodePropertyValueUnknown {
905    () => {
906        _
907    };
908}
909
910// Custom PartialEq so that unknown variants are not equal to themselves.
911impl PartialEq for NodePropertyValue {
912    fn eq(&self, other: &Self) -> bool {
913        match (self, other) {
914            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
915            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
916            (Self::BoolValue(x), Self::BoolValue(y)) => *x == *y,
917            (Self::EnumValue(x), Self::EnumValue(y)) => *x == *y,
918            _ => false,
919        }
920    }
921}
922
923impl NodePropertyValue {
924    #[inline]
925    pub fn ordinal(&self) -> u64 {
926        match *self {
927            Self::IntValue(_) => 1,
928            Self::StringValue(_) => 2,
929            Self::BoolValue(_) => 3,
930            Self::EnumValue(_) => 4,
931            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
932        }
933    }
934
935    #[inline]
936    pub fn unknown_variant_for_testing() -> Self {
937        Self::__SourceBreaking { unknown_ordinal: 0 }
938    }
939
940    #[inline]
941    pub fn is_unknown(&self) -> bool {
942        match self {
943            Self::__SourceBreaking { .. } => true,
944            _ => false,
945        }
946    }
947}
948
949impl fidl::Persistable for NodePropertyValue {}
950
951#[derive(Clone, Debug)]
952pub enum Offer {
953    ZirconTransport(fidl_fuchsia_component_decl__common::Offer),
954    DriverTransport(fidl_fuchsia_component_decl__common::Offer),
955    /// An offer that lives in the |offers_dictionary|. This is equivalent to a |zircon_transport|
956    /// offer for all other purposes (eg. bind property generation).
957    DictionaryOffer(fidl_fuchsia_component_decl__common::Offer),
958    #[doc(hidden)]
959    __SourceBreaking {
960        unknown_ordinal: u64,
961    },
962}
963
964/// Pattern that matches an unknown `Offer` member.
965#[macro_export]
966macro_rules! OfferUnknown {
967    () => {
968        _
969    };
970}
971
972// Custom PartialEq so that unknown variants are not equal to themselves.
973impl PartialEq for Offer {
974    fn eq(&self, other: &Self) -> bool {
975        match (self, other) {
976            (Self::ZirconTransport(x), Self::ZirconTransport(y)) => *x == *y,
977            (Self::DriverTransport(x), Self::DriverTransport(y)) => *x == *y,
978            (Self::DictionaryOffer(x), Self::DictionaryOffer(y)) => *x == *y,
979            _ => false,
980        }
981    }
982}
983
984impl Offer {
985    #[inline]
986    pub fn ordinal(&self) -> u64 {
987        match *self {
988            Self::ZirconTransport(_) => 1,
989            Self::DriverTransport(_) => 2,
990            Self::DictionaryOffer(_) => 3,
991            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
992        }
993    }
994
995    #[inline]
996    pub fn unknown_variant_for_testing() -> Self {
997        Self::__SourceBreaking { unknown_ordinal: 0 }
998    }
999
1000    #[inline]
1001    pub fn is_unknown(&self) -> bool {
1002        match self {
1003            Self::__SourceBreaking { .. } => true,
1004            _ => false,
1005        }
1006    }
1007}
1008
1009impl fidl::Persistable for Offer {}
1010
1011pub mod composite_node_manager_ordinals {
1012    pub const ADD_SPEC: u64 = 0x524e353c8130cc74;
1013}
1014
1015pub mod driver_ordinals {
1016    pub const START: u64 = 0x27be00ae42aa60c2;
1017    pub const STOP: u64 = 0x4b96c67e29b3843d;
1018}
1019
1020pub mod node_ordinals {
1021    pub const ADD_CHILD: u64 = 0x77d10dff3c1ea129;
1022}
1023
1024pub mod node_controller_ordinals {
1025    pub const REMOVE: u64 = 0x54fa8b3dfe7bb341;
1026    pub const REQUEST_BIND: u64 = 0x41b954726b13508f;
1027    pub const ON_BIND: u64 = 0x51f4165bc5ea202a;
1028    pub const WAIT_FOR_DRIVER: u64 = 0x69f7106e47d81387;
1029}
1030
1031mod internal {
1032    use super::*;
1033    unsafe impl fidl::encoding::TypeMarker for BusType {
1034        type Owned = Self;
1035
1036        #[inline(always)]
1037        fn inline_align(_context: fidl::encoding::Context) -> usize {
1038            std::mem::align_of::<u32>()
1039        }
1040
1041        #[inline(always)]
1042        fn inline_size(_context: fidl::encoding::Context) -> usize {
1043            std::mem::size_of::<u32>()
1044        }
1045
1046        #[inline(always)]
1047        fn encode_is_copy() -> bool {
1048            false
1049        }
1050
1051        #[inline(always)]
1052        fn decode_is_copy() -> bool {
1053            false
1054        }
1055    }
1056
1057    impl fidl::encoding::ValueTypeMarker for BusType {
1058        type Borrowed<'a> = Self;
1059        #[inline(always)]
1060        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1061            *value
1062        }
1063    }
1064
1065    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BusType {
1066        #[inline]
1067        unsafe fn encode(
1068            self,
1069            encoder: &mut fidl::encoding::Encoder<'_, D>,
1070            offset: usize,
1071            _depth: fidl::encoding::Depth,
1072        ) -> fidl::Result<()> {
1073            encoder.debug_check_bounds::<Self>(offset);
1074            encoder.write_num(self.into_primitive(), offset);
1075            Ok(())
1076        }
1077    }
1078
1079    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BusType {
1080        #[inline(always)]
1081        fn new_empty() -> Self {
1082            Self::unknown()
1083        }
1084
1085        #[inline]
1086        unsafe fn decode(
1087            &mut self,
1088            decoder: &mut fidl::encoding::Decoder<'_, D>,
1089            offset: usize,
1090            _depth: fidl::encoding::Depth,
1091        ) -> fidl::Result<()> {
1092            decoder.debug_check_bounds::<Self>(offset);
1093            let prim = decoder.read_num::<u32>(offset);
1094
1095            *self = Self::from_primitive_allow_unknown(prim);
1096            Ok(())
1097        }
1098    }
1099    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpecError {
1100        type Owned = Self;
1101
1102        #[inline(always)]
1103        fn inline_align(_context: fidl::encoding::Context) -> usize {
1104            std::mem::align_of::<u32>()
1105        }
1106
1107        #[inline(always)]
1108        fn inline_size(_context: fidl::encoding::Context) -> usize {
1109            std::mem::size_of::<u32>()
1110        }
1111
1112        #[inline(always)]
1113        fn encode_is_copy() -> bool {
1114            false
1115        }
1116
1117        #[inline(always)]
1118        fn decode_is_copy() -> bool {
1119            false
1120        }
1121    }
1122
1123    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpecError {
1124        type Borrowed<'a> = Self;
1125        #[inline(always)]
1126        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1127            *value
1128        }
1129    }
1130
1131    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1132        for CompositeNodeSpecError
1133    {
1134        #[inline]
1135        unsafe fn encode(
1136            self,
1137            encoder: &mut fidl::encoding::Encoder<'_, D>,
1138            offset: usize,
1139            _depth: fidl::encoding::Depth,
1140        ) -> fidl::Result<()> {
1141            encoder.debug_check_bounds::<Self>(offset);
1142            encoder.write_num(self.into_primitive(), offset);
1143            Ok(())
1144        }
1145    }
1146
1147    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1148        for CompositeNodeSpecError
1149    {
1150        #[inline(always)]
1151        fn new_empty() -> Self {
1152            Self::unknown()
1153        }
1154
1155        #[inline]
1156        unsafe fn decode(
1157            &mut self,
1158            decoder: &mut fidl::encoding::Decoder<'_, D>,
1159            offset: usize,
1160            _depth: fidl::encoding::Depth,
1161        ) -> fidl::Result<()> {
1162            decoder.debug_check_bounds::<Self>(offset);
1163            let prim = decoder.read_num::<u32>(offset);
1164
1165            *self = Self::from_primitive_allow_unknown(prim);
1166            Ok(())
1167        }
1168    }
1169    unsafe impl fidl::encoding::TypeMarker for Condition {
1170        type Owned = Self;
1171
1172        #[inline(always)]
1173        fn inline_align(_context: fidl::encoding::Context) -> usize {
1174            std::mem::align_of::<u32>()
1175        }
1176
1177        #[inline(always)]
1178        fn inline_size(_context: fidl::encoding::Context) -> usize {
1179            std::mem::size_of::<u32>()
1180        }
1181
1182        #[inline(always)]
1183        fn encode_is_copy() -> bool {
1184            true
1185        }
1186
1187        #[inline(always)]
1188        fn decode_is_copy() -> bool {
1189            false
1190        }
1191    }
1192
1193    impl fidl::encoding::ValueTypeMarker for Condition {
1194        type Borrowed<'a> = Self;
1195        #[inline(always)]
1196        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1197            *value
1198        }
1199    }
1200
1201    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Condition {
1202        #[inline]
1203        unsafe fn encode(
1204            self,
1205            encoder: &mut fidl::encoding::Encoder<'_, D>,
1206            offset: usize,
1207            _depth: fidl::encoding::Depth,
1208        ) -> fidl::Result<()> {
1209            encoder.debug_check_bounds::<Self>(offset);
1210            encoder.write_num(self.into_primitive(), offset);
1211            Ok(())
1212        }
1213    }
1214
1215    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Condition {
1216        #[inline(always)]
1217        fn new_empty() -> Self {
1218            Self::Unknown
1219        }
1220
1221        #[inline]
1222        unsafe fn decode(
1223            &mut self,
1224            decoder: &mut fidl::encoding::Decoder<'_, D>,
1225            offset: usize,
1226            _depth: fidl::encoding::Depth,
1227        ) -> fidl::Result<()> {
1228            decoder.debug_check_bounds::<Self>(offset);
1229            let prim = decoder.read_num::<u32>(offset);
1230
1231            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1232            Ok(())
1233        }
1234    }
1235    unsafe impl fidl::encoding::TypeMarker for DeviceAddressStability {
1236        type Owned = Self;
1237
1238        #[inline(always)]
1239        fn inline_align(_context: fidl::encoding::Context) -> usize {
1240            std::mem::align_of::<u32>()
1241        }
1242
1243        #[inline(always)]
1244        fn inline_size(_context: fidl::encoding::Context) -> usize {
1245            std::mem::size_of::<u32>()
1246        }
1247
1248        #[inline(always)]
1249        fn encode_is_copy() -> bool {
1250            false
1251        }
1252
1253        #[inline(always)]
1254        fn decode_is_copy() -> bool {
1255            false
1256        }
1257    }
1258
1259    impl fidl::encoding::ValueTypeMarker for DeviceAddressStability {
1260        type Borrowed<'a> = Self;
1261        #[inline(always)]
1262        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1263            *value
1264        }
1265    }
1266
1267    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1268        for DeviceAddressStability
1269    {
1270        #[inline]
1271        unsafe fn encode(
1272            self,
1273            encoder: &mut fidl::encoding::Encoder<'_, D>,
1274            offset: usize,
1275            _depth: fidl::encoding::Depth,
1276        ) -> fidl::Result<()> {
1277            encoder.debug_check_bounds::<Self>(offset);
1278            encoder.write_num(self.into_primitive(), offset);
1279            Ok(())
1280        }
1281    }
1282
1283    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1284        for DeviceAddressStability
1285    {
1286        #[inline(always)]
1287        fn new_empty() -> Self {
1288            Self::unknown()
1289        }
1290
1291        #[inline]
1292        unsafe fn decode(
1293            &mut self,
1294            decoder: &mut fidl::encoding::Decoder<'_, D>,
1295            offset: usize,
1296            _depth: fidl::encoding::Depth,
1297        ) -> fidl::Result<()> {
1298            decoder.debug_check_bounds::<Self>(offset);
1299            let prim = decoder.read_num::<u32>(offset);
1300
1301            *self = Self::from_primitive_allow_unknown(prim);
1302            Ok(())
1303        }
1304    }
1305    unsafe impl fidl::encoding::TypeMarker for DriverPackageType {
1306        type Owned = Self;
1307
1308        #[inline(always)]
1309        fn inline_align(_context: fidl::encoding::Context) -> usize {
1310            std::mem::align_of::<u8>()
1311        }
1312
1313        #[inline(always)]
1314        fn inline_size(_context: fidl::encoding::Context) -> usize {
1315            std::mem::size_of::<u8>()
1316        }
1317
1318        #[inline(always)]
1319        fn encode_is_copy() -> bool {
1320            false
1321        }
1322
1323        #[inline(always)]
1324        fn decode_is_copy() -> bool {
1325            false
1326        }
1327    }
1328
1329    impl fidl::encoding::ValueTypeMarker for DriverPackageType {
1330        type Borrowed<'a> = Self;
1331        #[inline(always)]
1332        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1333            *value
1334        }
1335    }
1336
1337    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1338        for DriverPackageType
1339    {
1340        #[inline]
1341        unsafe fn encode(
1342            self,
1343            encoder: &mut fidl::encoding::Encoder<'_, D>,
1344            offset: usize,
1345            _depth: fidl::encoding::Depth,
1346        ) -> fidl::Result<()> {
1347            encoder.debug_check_bounds::<Self>(offset);
1348            encoder.write_num(self.into_primitive(), offset);
1349            Ok(())
1350        }
1351    }
1352
1353    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverPackageType {
1354        #[inline(always)]
1355        fn new_empty() -> Self {
1356            Self::unknown()
1357        }
1358
1359        #[inline]
1360        unsafe fn decode(
1361            &mut self,
1362            decoder: &mut fidl::encoding::Decoder<'_, D>,
1363            offset: usize,
1364            _depth: fidl::encoding::Depth,
1365        ) -> fidl::Result<()> {
1366            decoder.debug_check_bounds::<Self>(offset);
1367            let prim = decoder.read_num::<u8>(offset);
1368
1369            *self = Self::from_primitive_allow_unknown(prim);
1370            Ok(())
1371        }
1372    }
1373    unsafe impl fidl::encoding::TypeMarker for NodeError {
1374        type Owned = Self;
1375
1376        #[inline(always)]
1377        fn inline_align(_context: fidl::encoding::Context) -> usize {
1378            std::mem::align_of::<u32>()
1379        }
1380
1381        #[inline(always)]
1382        fn inline_size(_context: fidl::encoding::Context) -> usize {
1383            std::mem::size_of::<u32>()
1384        }
1385
1386        #[inline(always)]
1387        fn encode_is_copy() -> bool {
1388            false
1389        }
1390
1391        #[inline(always)]
1392        fn decode_is_copy() -> bool {
1393            false
1394        }
1395    }
1396
1397    impl fidl::encoding::ValueTypeMarker for NodeError {
1398        type Borrowed<'a> = Self;
1399        #[inline(always)]
1400        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1401            *value
1402        }
1403    }
1404
1405    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for NodeError {
1406        #[inline]
1407        unsafe fn encode(
1408            self,
1409            encoder: &mut fidl::encoding::Encoder<'_, D>,
1410            offset: usize,
1411            _depth: fidl::encoding::Depth,
1412        ) -> fidl::Result<()> {
1413            encoder.debug_check_bounds::<Self>(offset);
1414            encoder.write_num(self.into_primitive(), offset);
1415            Ok(())
1416        }
1417    }
1418
1419    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeError {
1420        #[inline(always)]
1421        fn new_empty() -> Self {
1422            Self::unknown()
1423        }
1424
1425        #[inline]
1426        unsafe fn decode(
1427            &mut self,
1428            decoder: &mut fidl::encoding::Decoder<'_, D>,
1429            offset: usize,
1430            _depth: fidl::encoding::Depth,
1431        ) -> fidl::Result<()> {
1432            decoder.debug_check_bounds::<Self>(offset);
1433            let prim = decoder.read_num::<u32>(offset);
1434
1435            *self = Self::from_primitive_allow_unknown(prim);
1436            Ok(())
1437        }
1438    }
1439
1440    impl fidl::encoding::ValueTypeMarker for BindRule {
1441        type Borrowed<'a> = &'a Self;
1442        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1443            value
1444        }
1445    }
1446
1447    unsafe impl fidl::encoding::TypeMarker for BindRule {
1448        type Owned = Self;
1449
1450        #[inline(always)]
1451        fn inline_align(_context: fidl::encoding::Context) -> usize {
1452            8
1453        }
1454
1455        #[inline(always)]
1456        fn inline_size(_context: fidl::encoding::Context) -> usize {
1457            40
1458        }
1459    }
1460
1461    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BindRule, D> for &BindRule {
1462        #[inline]
1463        unsafe fn encode(
1464            self,
1465            encoder: &mut fidl::encoding::Encoder<'_, D>,
1466            offset: usize,
1467            _depth: fidl::encoding::Depth,
1468        ) -> fidl::Result<()> {
1469            encoder.debug_check_bounds::<BindRule>(offset);
1470            // Delegate to tuple encoding.
1471            fidl::encoding::Encode::<BindRule, D>::encode(
1472                (
1473                    <NodePropertyKey as fidl::encoding::ValueTypeMarker>::borrow(&self.key),
1474                    <Condition as fidl::encoding::ValueTypeMarker>::borrow(&self.condition),
1475                    <fidl::encoding::Vector<NodePropertyValue, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.values),
1476                ),
1477                encoder, offset, _depth
1478            )
1479        }
1480    }
1481    unsafe impl<
1482        D: fidl::encoding::ResourceDialect,
1483        T0: fidl::encoding::Encode<NodePropertyKey, D>,
1484        T1: fidl::encoding::Encode<Condition, D>,
1485        T2: fidl::encoding::Encode<fidl::encoding::Vector<NodePropertyValue, 64>, D>,
1486    > fidl::encoding::Encode<BindRule, D> for (T0, T1, T2)
1487    {
1488        #[inline]
1489        unsafe fn encode(
1490            self,
1491            encoder: &mut fidl::encoding::Encoder<'_, D>,
1492            offset: usize,
1493            depth: fidl::encoding::Depth,
1494        ) -> fidl::Result<()> {
1495            encoder.debug_check_bounds::<BindRule>(offset);
1496            // Zero out padding regions. There's no need to apply masks
1497            // because the unmasked parts will be overwritten by fields.
1498            unsafe {
1499                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1500                (ptr as *mut u64).write_unaligned(0);
1501            }
1502            // Write the fields.
1503            self.0.encode(encoder, offset + 0, depth)?;
1504            self.1.encode(encoder, offset + 16, depth)?;
1505            self.2.encode(encoder, offset + 24, depth)?;
1506            Ok(())
1507        }
1508    }
1509
1510    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BindRule {
1511        #[inline(always)]
1512        fn new_empty() -> Self {
1513            Self {
1514                key: fidl::new_empty!(NodePropertyKey, D),
1515                condition: fidl::new_empty!(Condition, D),
1516                values: fidl::new_empty!(fidl::encoding::Vector<NodePropertyValue, 64>, D),
1517            }
1518        }
1519
1520        #[inline]
1521        unsafe fn decode(
1522            &mut self,
1523            decoder: &mut fidl::encoding::Decoder<'_, D>,
1524            offset: usize,
1525            _depth: fidl::encoding::Depth,
1526        ) -> fidl::Result<()> {
1527            decoder.debug_check_bounds::<Self>(offset);
1528            // Verify that padding bytes are zero.
1529            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1530            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1531            let mask = 0xffffffff00000000u64;
1532            let maskedval = padval & mask;
1533            if maskedval != 0 {
1534                return Err(fidl::Error::NonZeroPadding {
1535                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1536                });
1537            }
1538            fidl::decode!(NodePropertyKey, D, &mut self.key, decoder, offset + 0, _depth)?;
1539            fidl::decode!(Condition, D, &mut self.condition, decoder, offset + 16, _depth)?;
1540            fidl::decode!(fidl::encoding::Vector<NodePropertyValue, 64>, D, &mut self.values, decoder, offset + 24, _depth)?;
1541            Ok(())
1542        }
1543    }
1544
1545    impl fidl::encoding::ValueTypeMarker for BindRule2 {
1546        type Borrowed<'a> = &'a Self;
1547        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1548            value
1549        }
1550    }
1551
1552    unsafe impl fidl::encoding::TypeMarker for BindRule2 {
1553        type Owned = Self;
1554
1555        #[inline(always)]
1556        fn inline_align(_context: fidl::encoding::Context) -> usize {
1557            8
1558        }
1559
1560        #[inline(always)]
1561        fn inline_size(_context: fidl::encoding::Context) -> usize {
1562            40
1563        }
1564    }
1565
1566    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BindRule2, D>
1567        for &BindRule2
1568    {
1569        #[inline]
1570        unsafe fn encode(
1571            self,
1572            encoder: &mut fidl::encoding::Encoder<'_, D>,
1573            offset: usize,
1574            _depth: fidl::encoding::Depth,
1575        ) -> fidl::Result<()> {
1576            encoder.debug_check_bounds::<BindRule2>(offset);
1577            // Delegate to tuple encoding.
1578            fidl::encoding::Encode::<BindRule2, D>::encode(
1579                (
1580                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(&self.key),
1581                    <Condition as fidl::encoding::ValueTypeMarker>::borrow(&self.condition),
1582                    <fidl::encoding::Vector<NodePropertyValue, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.values),
1583                ),
1584                encoder, offset, _depth
1585            )
1586        }
1587    }
1588    unsafe impl<
1589        D: fidl::encoding::ResourceDialect,
1590        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
1591        T1: fidl::encoding::Encode<Condition, D>,
1592        T2: fidl::encoding::Encode<fidl::encoding::Vector<NodePropertyValue, 64>, D>,
1593    > fidl::encoding::Encode<BindRule2, D> for (T0, T1, T2)
1594    {
1595        #[inline]
1596        unsafe fn encode(
1597            self,
1598            encoder: &mut fidl::encoding::Encoder<'_, D>,
1599            offset: usize,
1600            depth: fidl::encoding::Depth,
1601        ) -> fidl::Result<()> {
1602            encoder.debug_check_bounds::<BindRule2>(offset);
1603            // Zero out padding regions. There's no need to apply masks
1604            // because the unmasked parts will be overwritten by fields.
1605            unsafe {
1606                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
1607                (ptr as *mut u64).write_unaligned(0);
1608            }
1609            // Write the fields.
1610            self.0.encode(encoder, offset + 0, depth)?;
1611            self.1.encode(encoder, offset + 16, depth)?;
1612            self.2.encode(encoder, offset + 24, depth)?;
1613            Ok(())
1614        }
1615    }
1616
1617    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BindRule2 {
1618        #[inline(always)]
1619        fn new_empty() -> Self {
1620            Self {
1621                key: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
1622                condition: fidl::new_empty!(Condition, D),
1623                values: fidl::new_empty!(fidl::encoding::Vector<NodePropertyValue, 64>, D),
1624            }
1625        }
1626
1627        #[inline]
1628        unsafe fn decode(
1629            &mut self,
1630            decoder: &mut fidl::encoding::Decoder<'_, D>,
1631            offset: usize,
1632            _depth: fidl::encoding::Depth,
1633        ) -> fidl::Result<()> {
1634            decoder.debug_check_bounds::<Self>(offset);
1635            // Verify that padding bytes are zero.
1636            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
1637            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1638            let mask = 0xffffffff00000000u64;
1639            let maskedval = padval & mask;
1640            if maskedval != 0 {
1641                return Err(fidl::Error::NonZeroPadding {
1642                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
1643                });
1644            }
1645            fidl::decode!(
1646                fidl::encoding::BoundedString<256>,
1647                D,
1648                &mut self.key,
1649                decoder,
1650                offset + 0,
1651                _depth
1652            )?;
1653            fidl::decode!(Condition, D, &mut self.condition, decoder, offset + 16, _depth)?;
1654            fidl::decode!(fidl::encoding::Vector<NodePropertyValue, 64>, D, &mut self.values, decoder, offset + 24, _depth)?;
1655            Ok(())
1656        }
1657    }
1658
1659    impl fidl::encoding::ValueTypeMarker for NodeProperty {
1660        type Borrowed<'a> = &'a Self;
1661        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1662            value
1663        }
1664    }
1665
1666    unsafe impl fidl::encoding::TypeMarker for NodeProperty {
1667        type Owned = Self;
1668
1669        #[inline(always)]
1670        fn inline_align(_context: fidl::encoding::Context) -> usize {
1671            8
1672        }
1673
1674        #[inline(always)]
1675        fn inline_size(_context: fidl::encoding::Context) -> usize {
1676            32
1677        }
1678    }
1679
1680    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeProperty, D>
1681        for &NodeProperty
1682    {
1683        #[inline]
1684        unsafe fn encode(
1685            self,
1686            encoder: &mut fidl::encoding::Encoder<'_, D>,
1687            offset: usize,
1688            _depth: fidl::encoding::Depth,
1689        ) -> fidl::Result<()> {
1690            encoder.debug_check_bounds::<NodeProperty>(offset);
1691            // Delegate to tuple encoding.
1692            fidl::encoding::Encode::<NodeProperty, D>::encode(
1693                (
1694                    <NodePropertyKey as fidl::encoding::ValueTypeMarker>::borrow(&self.key),
1695                    <NodePropertyValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
1696                ),
1697                encoder,
1698                offset,
1699                _depth,
1700            )
1701        }
1702    }
1703    unsafe impl<
1704        D: fidl::encoding::ResourceDialect,
1705        T0: fidl::encoding::Encode<NodePropertyKey, D>,
1706        T1: fidl::encoding::Encode<NodePropertyValue, D>,
1707    > fidl::encoding::Encode<NodeProperty, D> for (T0, T1)
1708    {
1709        #[inline]
1710        unsafe fn encode(
1711            self,
1712            encoder: &mut fidl::encoding::Encoder<'_, D>,
1713            offset: usize,
1714            depth: fidl::encoding::Depth,
1715        ) -> fidl::Result<()> {
1716            encoder.debug_check_bounds::<NodeProperty>(offset);
1717            // Zero out padding regions. There's no need to apply masks
1718            // because the unmasked parts will be overwritten by fields.
1719            // Write the fields.
1720            self.0.encode(encoder, offset + 0, depth)?;
1721            self.1.encode(encoder, offset + 16, depth)?;
1722            Ok(())
1723        }
1724    }
1725
1726    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeProperty {
1727        #[inline(always)]
1728        fn new_empty() -> Self {
1729            Self {
1730                key: fidl::new_empty!(NodePropertyKey, D),
1731                value: fidl::new_empty!(NodePropertyValue, D),
1732            }
1733        }
1734
1735        #[inline]
1736        unsafe fn decode(
1737            &mut self,
1738            decoder: &mut fidl::encoding::Decoder<'_, D>,
1739            offset: usize,
1740            _depth: fidl::encoding::Depth,
1741        ) -> fidl::Result<()> {
1742            decoder.debug_check_bounds::<Self>(offset);
1743            // Verify that padding bytes are zero.
1744            fidl::decode!(NodePropertyKey, D, &mut self.key, decoder, offset + 0, _depth)?;
1745            fidl::decode!(NodePropertyValue, D, &mut self.value, decoder, offset + 16, _depth)?;
1746            Ok(())
1747        }
1748    }
1749
1750    impl fidl::encoding::ValueTypeMarker for NodeProperty2 {
1751        type Borrowed<'a> = &'a Self;
1752        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1753            value
1754        }
1755    }
1756
1757    unsafe impl fidl::encoding::TypeMarker for NodeProperty2 {
1758        type Owned = Self;
1759
1760        #[inline(always)]
1761        fn inline_align(_context: fidl::encoding::Context) -> usize {
1762            8
1763        }
1764
1765        #[inline(always)]
1766        fn inline_size(_context: fidl::encoding::Context) -> usize {
1767            32
1768        }
1769    }
1770
1771    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeProperty2, D>
1772        for &NodeProperty2
1773    {
1774        #[inline]
1775        unsafe fn encode(
1776            self,
1777            encoder: &mut fidl::encoding::Encoder<'_, D>,
1778            offset: usize,
1779            _depth: fidl::encoding::Depth,
1780        ) -> fidl::Result<()> {
1781            encoder.debug_check_bounds::<NodeProperty2>(offset);
1782            // Delegate to tuple encoding.
1783            fidl::encoding::Encode::<NodeProperty2, D>::encode(
1784                (
1785                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
1786                        &self.key,
1787                    ),
1788                    <NodePropertyValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
1789                ),
1790                encoder,
1791                offset,
1792                _depth,
1793            )
1794        }
1795    }
1796    unsafe impl<
1797        D: fidl::encoding::ResourceDialect,
1798        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
1799        T1: fidl::encoding::Encode<NodePropertyValue, D>,
1800    > fidl::encoding::Encode<NodeProperty2, D> for (T0, T1)
1801    {
1802        #[inline]
1803        unsafe fn encode(
1804            self,
1805            encoder: &mut fidl::encoding::Encoder<'_, D>,
1806            offset: usize,
1807            depth: fidl::encoding::Depth,
1808        ) -> fidl::Result<()> {
1809            encoder.debug_check_bounds::<NodeProperty2>(offset);
1810            // Zero out padding regions. There's no need to apply masks
1811            // because the unmasked parts will be overwritten by fields.
1812            // Write the fields.
1813            self.0.encode(encoder, offset + 0, depth)?;
1814            self.1.encode(encoder, offset + 16, depth)?;
1815            Ok(())
1816        }
1817    }
1818
1819    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeProperty2 {
1820        #[inline(always)]
1821        fn new_empty() -> Self {
1822            Self {
1823                key: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
1824                value: fidl::new_empty!(NodePropertyValue, D),
1825            }
1826        }
1827
1828        #[inline]
1829        unsafe fn decode(
1830            &mut self,
1831            decoder: &mut fidl::encoding::Decoder<'_, D>,
1832            offset: usize,
1833            _depth: fidl::encoding::Depth,
1834        ) -> fidl::Result<()> {
1835            decoder.debug_check_bounds::<Self>(offset);
1836            // Verify that padding bytes are zero.
1837            fidl::decode!(
1838                fidl::encoding::BoundedString<256>,
1839                D,
1840                &mut self.key,
1841                decoder,
1842                offset + 0,
1843                _depth
1844            )?;
1845            fidl::decode!(NodePropertyValue, D, &mut self.value, decoder, offset + 16, _depth)?;
1846            Ok(())
1847        }
1848    }
1849
1850    impl fidl::encoding::ValueTypeMarker for NodePropertyEntry {
1851        type Borrowed<'a> = &'a Self;
1852        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1853            value
1854        }
1855    }
1856
1857    unsafe impl fidl::encoding::TypeMarker for NodePropertyEntry {
1858        type Owned = Self;
1859
1860        #[inline(always)]
1861        fn inline_align(_context: fidl::encoding::Context) -> usize {
1862            8
1863        }
1864
1865        #[inline(always)]
1866        fn inline_size(_context: fidl::encoding::Context) -> usize {
1867            32
1868        }
1869    }
1870
1871    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyEntry, D>
1872        for &NodePropertyEntry
1873    {
1874        #[inline]
1875        unsafe fn encode(
1876            self,
1877            encoder: &mut fidl::encoding::Encoder<'_, D>,
1878            offset: usize,
1879            _depth: fidl::encoding::Depth,
1880        ) -> fidl::Result<()> {
1881            encoder.debug_check_bounds::<NodePropertyEntry>(offset);
1882            // Delegate to tuple encoding.
1883            fidl::encoding::Encode::<NodePropertyEntry, D>::encode(
1884                (
1885                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
1886                    <fidl::encoding::Vector<NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
1887                ),
1888                encoder, offset, _depth
1889            )
1890        }
1891    }
1892    unsafe impl<
1893        D: fidl::encoding::ResourceDialect,
1894        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
1895        T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty, 64>, D>,
1896    > fidl::encoding::Encode<NodePropertyEntry, D> for (T0, T1)
1897    {
1898        #[inline]
1899        unsafe fn encode(
1900            self,
1901            encoder: &mut fidl::encoding::Encoder<'_, D>,
1902            offset: usize,
1903            depth: fidl::encoding::Depth,
1904        ) -> fidl::Result<()> {
1905            encoder.debug_check_bounds::<NodePropertyEntry>(offset);
1906            // Zero out padding regions. There's no need to apply masks
1907            // because the unmasked parts will be overwritten by fields.
1908            // Write the fields.
1909            self.0.encode(encoder, offset + 0, depth)?;
1910            self.1.encode(encoder, offset + 16, depth)?;
1911            Ok(())
1912        }
1913    }
1914
1915    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyEntry {
1916        #[inline(always)]
1917        fn new_empty() -> Self {
1918            Self {
1919                name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
1920                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty, 64>, D),
1921            }
1922        }
1923
1924        #[inline]
1925        unsafe fn decode(
1926            &mut self,
1927            decoder: &mut fidl::encoding::Decoder<'_, D>,
1928            offset: usize,
1929            _depth: fidl::encoding::Depth,
1930        ) -> fidl::Result<()> {
1931            decoder.debug_check_bounds::<Self>(offset);
1932            // Verify that padding bytes are zero.
1933            fidl::decode!(
1934                fidl::encoding::BoundedString<128>,
1935                D,
1936                &mut self.name,
1937                decoder,
1938                offset + 0,
1939                _depth
1940            )?;
1941            fidl::decode!(fidl::encoding::Vector<NodeProperty, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
1942            Ok(())
1943        }
1944    }
1945
1946    impl fidl::encoding::ValueTypeMarker for NodePropertyEntry2 {
1947        type Borrowed<'a> = &'a Self;
1948        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1949            value
1950        }
1951    }
1952
1953    unsafe impl fidl::encoding::TypeMarker for NodePropertyEntry2 {
1954        type Owned = Self;
1955
1956        #[inline(always)]
1957        fn inline_align(_context: fidl::encoding::Context) -> usize {
1958            8
1959        }
1960
1961        #[inline(always)]
1962        fn inline_size(_context: fidl::encoding::Context) -> usize {
1963            32
1964        }
1965    }
1966
1967    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyEntry2, D>
1968        for &NodePropertyEntry2
1969    {
1970        #[inline]
1971        unsafe fn encode(
1972            self,
1973            encoder: &mut fidl::encoding::Encoder<'_, D>,
1974            offset: usize,
1975            _depth: fidl::encoding::Depth,
1976        ) -> fidl::Result<()> {
1977            encoder.debug_check_bounds::<NodePropertyEntry2>(offset);
1978            // Delegate to tuple encoding.
1979            fidl::encoding::Encode::<NodePropertyEntry2, D>::encode(
1980                (
1981                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
1982                    <fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
1983                ),
1984                encoder, offset, _depth
1985            )
1986        }
1987    }
1988    unsafe impl<
1989        D: fidl::encoding::ResourceDialect,
1990        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
1991        T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty2, 64>, D>,
1992    > fidl::encoding::Encode<NodePropertyEntry2, D> for (T0, T1)
1993    {
1994        #[inline]
1995        unsafe fn encode(
1996            self,
1997            encoder: &mut fidl::encoding::Encoder<'_, D>,
1998            offset: usize,
1999            depth: fidl::encoding::Depth,
2000        ) -> fidl::Result<()> {
2001            encoder.debug_check_bounds::<NodePropertyEntry2>(offset);
2002            // Zero out padding regions. There's no need to apply masks
2003            // because the unmasked parts will be overwritten by fields.
2004            // Write the fields.
2005            self.0.encode(encoder, offset + 0, depth)?;
2006            self.1.encode(encoder, offset + 16, depth)?;
2007            Ok(())
2008        }
2009    }
2010
2011    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyEntry2 {
2012        #[inline(always)]
2013        fn new_empty() -> Self {
2014            Self {
2015                name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
2016                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty2, 64>, D),
2017            }
2018        }
2019
2020        #[inline]
2021        unsafe fn decode(
2022            &mut self,
2023            decoder: &mut fidl::encoding::Decoder<'_, D>,
2024            offset: usize,
2025            _depth: fidl::encoding::Depth,
2026        ) -> fidl::Result<()> {
2027            decoder.debug_check_bounds::<Self>(offset);
2028            // Verify that padding bytes are zero.
2029            fidl::decode!(
2030                fidl::encoding::BoundedString<128>,
2031                D,
2032                &mut self.name,
2033                decoder,
2034                offset + 0,
2035                _depth
2036            )?;
2037            fidl::decode!(fidl::encoding::Vector<NodeProperty2, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
2038            Ok(())
2039        }
2040    }
2041
2042    impl fidl::encoding::ValueTypeMarker for ParentSpec {
2043        type Borrowed<'a> = &'a Self;
2044        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2045            value
2046        }
2047    }
2048
2049    unsafe impl fidl::encoding::TypeMarker for ParentSpec {
2050        type Owned = Self;
2051
2052        #[inline(always)]
2053        fn inline_align(_context: fidl::encoding::Context) -> usize {
2054            8
2055        }
2056
2057        #[inline(always)]
2058        fn inline_size(_context: fidl::encoding::Context) -> usize {
2059            32
2060        }
2061    }
2062
2063    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ParentSpec, D>
2064        for &ParentSpec
2065    {
2066        #[inline]
2067        unsafe fn encode(
2068            self,
2069            encoder: &mut fidl::encoding::Encoder<'_, D>,
2070            offset: usize,
2071            _depth: fidl::encoding::Depth,
2072        ) -> fidl::Result<()> {
2073            encoder.debug_check_bounds::<ParentSpec>(offset);
2074            // Delegate to tuple encoding.
2075            fidl::encoding::Encode::<ParentSpec, D>::encode(
2076                (
2077                    <fidl::encoding::Vector<BindRule, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.bind_rules),
2078                    <fidl::encoding::Vector<NodeProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
2079                ),
2080                encoder, offset, _depth
2081            )
2082        }
2083    }
2084    unsafe impl<
2085        D: fidl::encoding::ResourceDialect,
2086        T0: fidl::encoding::Encode<fidl::encoding::Vector<BindRule, 64>, D>,
2087        T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty, 64>, D>,
2088    > fidl::encoding::Encode<ParentSpec, D> for (T0, T1)
2089    {
2090        #[inline]
2091        unsafe fn encode(
2092            self,
2093            encoder: &mut fidl::encoding::Encoder<'_, D>,
2094            offset: usize,
2095            depth: fidl::encoding::Depth,
2096        ) -> fidl::Result<()> {
2097            encoder.debug_check_bounds::<ParentSpec>(offset);
2098            // Zero out padding regions. There's no need to apply masks
2099            // because the unmasked parts will be overwritten by fields.
2100            // Write the fields.
2101            self.0.encode(encoder, offset + 0, depth)?;
2102            self.1.encode(encoder, offset + 16, depth)?;
2103            Ok(())
2104        }
2105    }
2106
2107    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ParentSpec {
2108        #[inline(always)]
2109        fn new_empty() -> Self {
2110            Self {
2111                bind_rules: fidl::new_empty!(fidl::encoding::Vector<BindRule, 64>, D),
2112                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty, 64>, D),
2113            }
2114        }
2115
2116        #[inline]
2117        unsafe fn decode(
2118            &mut self,
2119            decoder: &mut fidl::encoding::Decoder<'_, D>,
2120            offset: usize,
2121            _depth: fidl::encoding::Depth,
2122        ) -> fidl::Result<()> {
2123            decoder.debug_check_bounds::<Self>(offset);
2124            // Verify that padding bytes are zero.
2125            fidl::decode!(fidl::encoding::Vector<BindRule, 64>, D, &mut self.bind_rules, decoder, offset + 0, _depth)?;
2126            fidl::decode!(fidl::encoding::Vector<NodeProperty, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
2127            Ok(())
2128        }
2129    }
2130
2131    impl fidl::encoding::ValueTypeMarker for ParentSpec2 {
2132        type Borrowed<'a> = &'a Self;
2133        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2134            value
2135        }
2136    }
2137
2138    unsafe impl fidl::encoding::TypeMarker for ParentSpec2 {
2139        type Owned = Self;
2140
2141        #[inline(always)]
2142        fn inline_align(_context: fidl::encoding::Context) -> usize {
2143            8
2144        }
2145
2146        #[inline(always)]
2147        fn inline_size(_context: fidl::encoding::Context) -> usize {
2148            32
2149        }
2150    }
2151
2152    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ParentSpec2, D>
2153        for &ParentSpec2
2154    {
2155        #[inline]
2156        unsafe fn encode(
2157            self,
2158            encoder: &mut fidl::encoding::Encoder<'_, D>,
2159            offset: usize,
2160            _depth: fidl::encoding::Depth,
2161        ) -> fidl::Result<()> {
2162            encoder.debug_check_bounds::<ParentSpec2>(offset);
2163            // Delegate to tuple encoding.
2164            fidl::encoding::Encode::<ParentSpec2, D>::encode(
2165                (
2166                    <fidl::encoding::Vector<BindRule2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.bind_rules),
2167                    <fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
2168                ),
2169                encoder, offset, _depth
2170            )
2171        }
2172    }
2173    unsafe impl<
2174        D: fidl::encoding::ResourceDialect,
2175        T0: fidl::encoding::Encode<fidl::encoding::Vector<BindRule2, 64>, D>,
2176        T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty2, 64>, D>,
2177    > fidl::encoding::Encode<ParentSpec2, D> for (T0, T1)
2178    {
2179        #[inline]
2180        unsafe fn encode(
2181            self,
2182            encoder: &mut fidl::encoding::Encoder<'_, D>,
2183            offset: usize,
2184            depth: fidl::encoding::Depth,
2185        ) -> fidl::Result<()> {
2186            encoder.debug_check_bounds::<ParentSpec2>(offset);
2187            // Zero out padding regions. There's no need to apply masks
2188            // because the unmasked parts will be overwritten by fields.
2189            // Write the fields.
2190            self.0.encode(encoder, offset + 0, depth)?;
2191            self.1.encode(encoder, offset + 16, depth)?;
2192            Ok(())
2193        }
2194    }
2195
2196    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ParentSpec2 {
2197        #[inline(always)]
2198        fn new_empty() -> Self {
2199            Self {
2200                bind_rules: fidl::new_empty!(fidl::encoding::Vector<BindRule2, 64>, D),
2201                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty2, 64>, D),
2202            }
2203        }
2204
2205        #[inline]
2206        unsafe fn decode(
2207            &mut self,
2208            decoder: &mut fidl::encoding::Decoder<'_, D>,
2209            offset: usize,
2210            _depth: fidl::encoding::Depth,
2211        ) -> fidl::Result<()> {
2212            decoder.debug_check_bounds::<Self>(offset);
2213            // Verify that padding bytes are zero.
2214            fidl::decode!(fidl::encoding::Vector<BindRule2, 64>, D, &mut self.bind_rules, decoder, offset + 0, _depth)?;
2215            fidl::decode!(fidl::encoding::Vector<NodeProperty2, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
2216            Ok(())
2217        }
2218    }
2219
2220    impl BusInfo {
2221        #[inline(always)]
2222        fn max_ordinal_present(&self) -> u64 {
2223            if let Some(_) = self.address_stability {
2224                return 3;
2225            }
2226            if let Some(_) = self.address {
2227                return 2;
2228            }
2229            if let Some(_) = self.bus {
2230                return 1;
2231            }
2232            0
2233        }
2234    }
2235
2236    impl fidl::encoding::ValueTypeMarker for BusInfo {
2237        type Borrowed<'a> = &'a Self;
2238        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2239            value
2240        }
2241    }
2242
2243    unsafe impl fidl::encoding::TypeMarker for BusInfo {
2244        type Owned = Self;
2245
2246        #[inline(always)]
2247        fn inline_align(_context: fidl::encoding::Context) -> usize {
2248            8
2249        }
2250
2251        #[inline(always)]
2252        fn inline_size(_context: fidl::encoding::Context) -> usize {
2253            16
2254        }
2255    }
2256
2257    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BusInfo, D> for &BusInfo {
2258        unsafe fn encode(
2259            self,
2260            encoder: &mut fidl::encoding::Encoder<'_, D>,
2261            offset: usize,
2262            mut depth: fidl::encoding::Depth,
2263        ) -> fidl::Result<()> {
2264            encoder.debug_check_bounds::<BusInfo>(offset);
2265            // Vector header
2266            let max_ordinal: u64 = self.max_ordinal_present();
2267            encoder.write_num(max_ordinal, offset);
2268            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2269            // Calling encoder.out_of_line_offset(0) is not allowed.
2270            if max_ordinal == 0 {
2271                return Ok(());
2272            }
2273            depth.increment()?;
2274            let envelope_size = 8;
2275            let bytes_len = max_ordinal as usize * envelope_size;
2276            #[allow(unused_variables)]
2277            let offset = encoder.out_of_line_offset(bytes_len);
2278            let mut _prev_end_offset: usize = 0;
2279            if 1 > max_ordinal {
2280                return Ok(());
2281            }
2282
2283            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2284            // are envelope_size bytes.
2285            let cur_offset: usize = (1 - 1) * envelope_size;
2286
2287            // Zero reserved fields.
2288            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2289
2290            // Safety:
2291            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2292            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2293            //   envelope_size bytes, there is always sufficient room.
2294            fidl::encoding::encode_in_envelope_optional::<BusType, D>(
2295                self.bus.as_ref().map(<BusType as fidl::encoding::ValueTypeMarker>::borrow),
2296                encoder,
2297                offset + cur_offset,
2298                depth,
2299            )?;
2300
2301            _prev_end_offset = cur_offset + envelope_size;
2302            if 2 > max_ordinal {
2303                return Ok(());
2304            }
2305
2306            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2307            // are envelope_size bytes.
2308            let cur_offset: usize = (2 - 1) * envelope_size;
2309
2310            // Zero reserved fields.
2311            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2312
2313            // Safety:
2314            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2315            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2316            //   envelope_size bytes, there is always sufficient room.
2317            fidl::encoding::encode_in_envelope_optional::<DeviceAddress, D>(
2318                self.address
2319                    .as_ref()
2320                    .map(<DeviceAddress as fidl::encoding::ValueTypeMarker>::borrow),
2321                encoder,
2322                offset + cur_offset,
2323                depth,
2324            )?;
2325
2326            _prev_end_offset = cur_offset + envelope_size;
2327            if 3 > max_ordinal {
2328                return Ok(());
2329            }
2330
2331            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2332            // are envelope_size bytes.
2333            let cur_offset: usize = (3 - 1) * envelope_size;
2334
2335            // Zero reserved fields.
2336            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2337
2338            // Safety:
2339            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2340            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2341            //   envelope_size bytes, there is always sufficient room.
2342            fidl::encoding::encode_in_envelope_optional::<DeviceAddressStability, D>(
2343                self.address_stability
2344                    .as_ref()
2345                    .map(<DeviceAddressStability as fidl::encoding::ValueTypeMarker>::borrow),
2346                encoder,
2347                offset + cur_offset,
2348                depth,
2349            )?;
2350
2351            _prev_end_offset = cur_offset + envelope_size;
2352
2353            Ok(())
2354        }
2355    }
2356
2357    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BusInfo {
2358        #[inline(always)]
2359        fn new_empty() -> Self {
2360            Self::default()
2361        }
2362
2363        unsafe fn decode(
2364            &mut self,
2365            decoder: &mut fidl::encoding::Decoder<'_, D>,
2366            offset: usize,
2367            mut depth: fidl::encoding::Depth,
2368        ) -> fidl::Result<()> {
2369            decoder.debug_check_bounds::<Self>(offset);
2370            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2371                None => return Err(fidl::Error::NotNullable),
2372                Some(len) => len,
2373            };
2374            // Calling decoder.out_of_line_offset(0) is not allowed.
2375            if len == 0 {
2376                return Ok(());
2377            };
2378            depth.increment()?;
2379            let envelope_size = 8;
2380            let bytes_len = len * envelope_size;
2381            let offset = decoder.out_of_line_offset(bytes_len)?;
2382            // Decode the envelope for each type.
2383            let mut _next_ordinal_to_read = 0;
2384            let mut next_offset = offset;
2385            let end_offset = offset + bytes_len;
2386            _next_ordinal_to_read += 1;
2387            if next_offset >= end_offset {
2388                return Ok(());
2389            }
2390
2391            // Decode unknown envelopes for gaps in ordinals.
2392            while _next_ordinal_to_read < 1 {
2393                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2394                _next_ordinal_to_read += 1;
2395                next_offset += envelope_size;
2396            }
2397
2398            let next_out_of_line = decoder.next_out_of_line();
2399            let handles_before = decoder.remaining_handles();
2400            if let Some((inlined, num_bytes, num_handles)) =
2401                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2402            {
2403                let member_inline_size =
2404                    <BusType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2405                if inlined != (member_inline_size <= 4) {
2406                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2407                }
2408                let inner_offset;
2409                let mut inner_depth = depth.clone();
2410                if inlined {
2411                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2412                    inner_offset = next_offset;
2413                } else {
2414                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2415                    inner_depth.increment()?;
2416                }
2417                let val_ref = self.bus.get_or_insert_with(|| fidl::new_empty!(BusType, D));
2418                fidl::decode!(BusType, D, val_ref, decoder, inner_offset, inner_depth)?;
2419                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2420                {
2421                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2422                }
2423                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2424                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2425                }
2426            }
2427
2428            next_offset += envelope_size;
2429            _next_ordinal_to_read += 1;
2430            if next_offset >= end_offset {
2431                return Ok(());
2432            }
2433
2434            // Decode unknown envelopes for gaps in ordinals.
2435            while _next_ordinal_to_read < 2 {
2436                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2437                _next_ordinal_to_read += 1;
2438                next_offset += envelope_size;
2439            }
2440
2441            let next_out_of_line = decoder.next_out_of_line();
2442            let handles_before = decoder.remaining_handles();
2443            if let Some((inlined, num_bytes, num_handles)) =
2444                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2445            {
2446                let member_inline_size =
2447                    <DeviceAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2448                if inlined != (member_inline_size <= 4) {
2449                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2450                }
2451                let inner_offset;
2452                let mut inner_depth = depth.clone();
2453                if inlined {
2454                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2455                    inner_offset = next_offset;
2456                } else {
2457                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2458                    inner_depth.increment()?;
2459                }
2460                let val_ref =
2461                    self.address.get_or_insert_with(|| fidl::new_empty!(DeviceAddress, D));
2462                fidl::decode!(DeviceAddress, D, val_ref, decoder, inner_offset, inner_depth)?;
2463                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2464                {
2465                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2466                }
2467                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2468                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2469                }
2470            }
2471
2472            next_offset += envelope_size;
2473            _next_ordinal_to_read += 1;
2474            if next_offset >= end_offset {
2475                return Ok(());
2476            }
2477
2478            // Decode unknown envelopes for gaps in ordinals.
2479            while _next_ordinal_to_read < 3 {
2480                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2481                _next_ordinal_to_read += 1;
2482                next_offset += envelope_size;
2483            }
2484
2485            let next_out_of_line = decoder.next_out_of_line();
2486            let handles_before = decoder.remaining_handles();
2487            if let Some((inlined, num_bytes, num_handles)) =
2488                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2489            {
2490                let member_inline_size =
2491                    <DeviceAddressStability as fidl::encoding::TypeMarker>::inline_size(
2492                        decoder.context,
2493                    );
2494                if inlined != (member_inline_size <= 4) {
2495                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2496                }
2497                let inner_offset;
2498                let mut inner_depth = depth.clone();
2499                if inlined {
2500                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2501                    inner_offset = next_offset;
2502                } else {
2503                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2504                    inner_depth.increment()?;
2505                }
2506                let val_ref = self
2507                    .address_stability
2508                    .get_or_insert_with(|| fidl::new_empty!(DeviceAddressStability, D));
2509                fidl::decode!(
2510                    DeviceAddressStability,
2511                    D,
2512                    val_ref,
2513                    decoder,
2514                    inner_offset,
2515                    inner_depth
2516                )?;
2517                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2518                {
2519                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2520                }
2521                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2522                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2523                }
2524            }
2525
2526            next_offset += envelope_size;
2527
2528            // Decode the remaining unknown envelopes.
2529            while next_offset < end_offset {
2530                _next_ordinal_to_read += 1;
2531                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2532                next_offset += envelope_size;
2533            }
2534
2535            Ok(())
2536        }
2537    }
2538
2539    impl CompositeDriverInfo {
2540        #[inline(always)]
2541        fn max_ordinal_present(&self) -> u64 {
2542            if let Some(_) = self.driver_info {
2543                return 2;
2544            }
2545            if let Some(_) = self.composite_name {
2546                return 1;
2547            }
2548            0
2549        }
2550    }
2551
2552    impl fidl::encoding::ValueTypeMarker for CompositeDriverInfo {
2553        type Borrowed<'a> = &'a Self;
2554        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2555            value
2556        }
2557    }
2558
2559    unsafe impl fidl::encoding::TypeMarker for CompositeDriverInfo {
2560        type Owned = Self;
2561
2562        #[inline(always)]
2563        fn inline_align(_context: fidl::encoding::Context) -> usize {
2564            8
2565        }
2566
2567        #[inline(always)]
2568        fn inline_size(_context: fidl::encoding::Context) -> usize {
2569            16
2570        }
2571    }
2572
2573    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeDriverInfo, D>
2574        for &CompositeDriverInfo
2575    {
2576        unsafe fn encode(
2577            self,
2578            encoder: &mut fidl::encoding::Encoder<'_, D>,
2579            offset: usize,
2580            mut depth: fidl::encoding::Depth,
2581        ) -> fidl::Result<()> {
2582            encoder.debug_check_bounds::<CompositeDriverInfo>(offset);
2583            // Vector header
2584            let max_ordinal: u64 = self.max_ordinal_present();
2585            encoder.write_num(max_ordinal, offset);
2586            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2587            // Calling encoder.out_of_line_offset(0) is not allowed.
2588            if max_ordinal == 0 {
2589                return Ok(());
2590            }
2591            depth.increment()?;
2592            let envelope_size = 8;
2593            let bytes_len = max_ordinal as usize * envelope_size;
2594            #[allow(unused_variables)]
2595            let offset = encoder.out_of_line_offset(bytes_len);
2596            let mut _prev_end_offset: usize = 0;
2597            if 1 > max_ordinal {
2598                return Ok(());
2599            }
2600
2601            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2602            // are envelope_size bytes.
2603            let cur_offset: usize = (1 - 1) * envelope_size;
2604
2605            // Zero reserved fields.
2606            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2607
2608            // Safety:
2609            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2610            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2611            //   envelope_size bytes, there is always sufficient room.
2612            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
2613                self.composite_name.as_ref().map(
2614                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
2615                ),
2616                encoder,
2617                offset + cur_offset,
2618                depth,
2619            )?;
2620
2621            _prev_end_offset = cur_offset + envelope_size;
2622            if 2 > max_ordinal {
2623                return Ok(());
2624            }
2625
2626            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2627            // are envelope_size bytes.
2628            let cur_offset: usize = (2 - 1) * envelope_size;
2629
2630            // Zero reserved fields.
2631            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2632
2633            // Safety:
2634            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2635            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2636            //   envelope_size bytes, there is always sufficient room.
2637            fidl::encoding::encode_in_envelope_optional::<DriverInfo, D>(
2638                self.driver_info
2639                    .as_ref()
2640                    .map(<DriverInfo as fidl::encoding::ValueTypeMarker>::borrow),
2641                encoder,
2642                offset + cur_offset,
2643                depth,
2644            )?;
2645
2646            _prev_end_offset = cur_offset + envelope_size;
2647
2648            Ok(())
2649        }
2650    }
2651
2652    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeDriverInfo {
2653        #[inline(always)]
2654        fn new_empty() -> Self {
2655            Self::default()
2656        }
2657
2658        unsafe fn decode(
2659            &mut self,
2660            decoder: &mut fidl::encoding::Decoder<'_, D>,
2661            offset: usize,
2662            mut depth: fidl::encoding::Depth,
2663        ) -> fidl::Result<()> {
2664            decoder.debug_check_bounds::<Self>(offset);
2665            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2666                None => return Err(fidl::Error::NotNullable),
2667                Some(len) => len,
2668            };
2669            // Calling decoder.out_of_line_offset(0) is not allowed.
2670            if len == 0 {
2671                return Ok(());
2672            };
2673            depth.increment()?;
2674            let envelope_size = 8;
2675            let bytes_len = len * envelope_size;
2676            let offset = decoder.out_of_line_offset(bytes_len)?;
2677            // Decode the envelope for each type.
2678            let mut _next_ordinal_to_read = 0;
2679            let mut next_offset = offset;
2680            let end_offset = offset + bytes_len;
2681            _next_ordinal_to_read += 1;
2682            if next_offset >= end_offset {
2683                return Ok(());
2684            }
2685
2686            // Decode unknown envelopes for gaps in ordinals.
2687            while _next_ordinal_to_read < 1 {
2688                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2689                _next_ordinal_to_read += 1;
2690                next_offset += envelope_size;
2691            }
2692
2693            let next_out_of_line = decoder.next_out_of_line();
2694            let handles_before = decoder.remaining_handles();
2695            if let Some((inlined, num_bytes, num_handles)) =
2696                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2697            {
2698                let member_inline_size =
2699                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
2700                        decoder.context,
2701                    );
2702                if inlined != (member_inline_size <= 4) {
2703                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2704                }
2705                let inner_offset;
2706                let mut inner_depth = depth.clone();
2707                if inlined {
2708                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2709                    inner_offset = next_offset;
2710                } else {
2711                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2712                    inner_depth.increment()?;
2713                }
2714                let val_ref = self
2715                    .composite_name
2716                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
2717                fidl::decode!(
2718                    fidl::encoding::UnboundedString,
2719                    D,
2720                    val_ref,
2721                    decoder,
2722                    inner_offset,
2723                    inner_depth
2724                )?;
2725                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2726                {
2727                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2728                }
2729                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2730                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2731                }
2732            }
2733
2734            next_offset += envelope_size;
2735            _next_ordinal_to_read += 1;
2736            if next_offset >= end_offset {
2737                return Ok(());
2738            }
2739
2740            // Decode unknown envelopes for gaps in ordinals.
2741            while _next_ordinal_to_read < 2 {
2742                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2743                _next_ordinal_to_read += 1;
2744                next_offset += envelope_size;
2745            }
2746
2747            let next_out_of_line = decoder.next_out_of_line();
2748            let handles_before = decoder.remaining_handles();
2749            if let Some((inlined, num_bytes, num_handles)) =
2750                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2751            {
2752                let member_inline_size =
2753                    <DriverInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2754                if inlined != (member_inline_size <= 4) {
2755                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2756                }
2757                let inner_offset;
2758                let mut inner_depth = depth.clone();
2759                if inlined {
2760                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2761                    inner_offset = next_offset;
2762                } else {
2763                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2764                    inner_depth.increment()?;
2765                }
2766                let val_ref =
2767                    self.driver_info.get_or_insert_with(|| fidl::new_empty!(DriverInfo, D));
2768                fidl::decode!(DriverInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2769                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2770                {
2771                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2772                }
2773                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2774                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2775                }
2776            }
2777
2778            next_offset += envelope_size;
2779
2780            // Decode the remaining unknown envelopes.
2781            while next_offset < end_offset {
2782                _next_ordinal_to_read += 1;
2783                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2784                next_offset += envelope_size;
2785            }
2786
2787            Ok(())
2788        }
2789    }
2790
2791    impl CompositeDriverMatch {
2792        #[inline(always)]
2793        fn max_ordinal_present(&self) -> u64 {
2794            if let Some(_) = self.primary_parent_index {
2795                return 3;
2796            }
2797            if let Some(_) = self.parent_names {
2798                return 2;
2799            }
2800            if let Some(_) = self.composite_driver {
2801                return 1;
2802            }
2803            0
2804        }
2805    }
2806
2807    impl fidl::encoding::ValueTypeMarker for CompositeDriverMatch {
2808        type Borrowed<'a> = &'a Self;
2809        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2810            value
2811        }
2812    }
2813
2814    unsafe impl fidl::encoding::TypeMarker for CompositeDriverMatch {
2815        type Owned = Self;
2816
2817        #[inline(always)]
2818        fn inline_align(_context: fidl::encoding::Context) -> usize {
2819            8
2820        }
2821
2822        #[inline(always)]
2823        fn inline_size(_context: fidl::encoding::Context) -> usize {
2824            16
2825        }
2826    }
2827
2828    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeDriverMatch, D>
2829        for &CompositeDriverMatch
2830    {
2831        unsafe fn encode(
2832            self,
2833            encoder: &mut fidl::encoding::Encoder<'_, D>,
2834            offset: usize,
2835            mut depth: fidl::encoding::Depth,
2836        ) -> fidl::Result<()> {
2837            encoder.debug_check_bounds::<CompositeDriverMatch>(offset);
2838            // Vector header
2839            let max_ordinal: u64 = self.max_ordinal_present();
2840            encoder.write_num(max_ordinal, offset);
2841            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2842            // Calling encoder.out_of_line_offset(0) is not allowed.
2843            if max_ordinal == 0 {
2844                return Ok(());
2845            }
2846            depth.increment()?;
2847            let envelope_size = 8;
2848            let bytes_len = max_ordinal as usize * envelope_size;
2849            #[allow(unused_variables)]
2850            let offset = encoder.out_of_line_offset(bytes_len);
2851            let mut _prev_end_offset: usize = 0;
2852            if 1 > max_ordinal {
2853                return Ok(());
2854            }
2855
2856            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2857            // are envelope_size bytes.
2858            let cur_offset: usize = (1 - 1) * envelope_size;
2859
2860            // Zero reserved fields.
2861            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2862
2863            // Safety:
2864            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2865            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2866            //   envelope_size bytes, there is always sufficient room.
2867            fidl::encoding::encode_in_envelope_optional::<CompositeDriverInfo, D>(
2868                self.composite_driver
2869                    .as_ref()
2870                    .map(<CompositeDriverInfo as fidl::encoding::ValueTypeMarker>::borrow),
2871                encoder,
2872                offset + cur_offset,
2873                depth,
2874            )?;
2875
2876            _prev_end_offset = cur_offset + envelope_size;
2877            if 2 > max_ordinal {
2878                return Ok(());
2879            }
2880
2881            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2882            // are envelope_size bytes.
2883            let cur_offset: usize = (2 - 1) * envelope_size;
2884
2885            // Zero reserved fields.
2886            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2887
2888            // Safety:
2889            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2890            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2891            //   envelope_size bytes, there is always sufficient room.
2892            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>, D>(
2893            self.parent_names.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow),
2894            encoder, offset + cur_offset, depth
2895        )?;
2896
2897            _prev_end_offset = cur_offset + envelope_size;
2898            if 3 > max_ordinal {
2899                return Ok(());
2900            }
2901
2902            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2903            // are envelope_size bytes.
2904            let cur_offset: usize = (3 - 1) * envelope_size;
2905
2906            // Zero reserved fields.
2907            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2908
2909            // Safety:
2910            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2911            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2912            //   envelope_size bytes, there is always sufficient room.
2913            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2914                self.primary_parent_index
2915                    .as_ref()
2916                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2917                encoder,
2918                offset + cur_offset,
2919                depth,
2920            )?;
2921
2922            _prev_end_offset = cur_offset + envelope_size;
2923
2924            Ok(())
2925        }
2926    }
2927
2928    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeDriverMatch {
2929        #[inline(always)]
2930        fn new_empty() -> Self {
2931            Self::default()
2932        }
2933
2934        unsafe fn decode(
2935            &mut self,
2936            decoder: &mut fidl::encoding::Decoder<'_, D>,
2937            offset: usize,
2938            mut depth: fidl::encoding::Depth,
2939        ) -> fidl::Result<()> {
2940            decoder.debug_check_bounds::<Self>(offset);
2941            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2942                None => return Err(fidl::Error::NotNullable),
2943                Some(len) => len,
2944            };
2945            // Calling decoder.out_of_line_offset(0) is not allowed.
2946            if len == 0 {
2947                return Ok(());
2948            };
2949            depth.increment()?;
2950            let envelope_size = 8;
2951            let bytes_len = len * envelope_size;
2952            let offset = decoder.out_of_line_offset(bytes_len)?;
2953            // Decode the envelope for each type.
2954            let mut _next_ordinal_to_read = 0;
2955            let mut next_offset = offset;
2956            let end_offset = offset + bytes_len;
2957            _next_ordinal_to_read += 1;
2958            if next_offset >= end_offset {
2959                return Ok(());
2960            }
2961
2962            // Decode unknown envelopes for gaps in ordinals.
2963            while _next_ordinal_to_read < 1 {
2964                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2965                _next_ordinal_to_read += 1;
2966                next_offset += envelope_size;
2967            }
2968
2969            let next_out_of_line = decoder.next_out_of_line();
2970            let handles_before = decoder.remaining_handles();
2971            if let Some((inlined, num_bytes, num_handles)) =
2972                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2973            {
2974                let member_inline_size =
2975                    <CompositeDriverInfo as fidl::encoding::TypeMarker>::inline_size(
2976                        decoder.context,
2977                    );
2978                if inlined != (member_inline_size <= 4) {
2979                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2980                }
2981                let inner_offset;
2982                let mut inner_depth = depth.clone();
2983                if inlined {
2984                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2985                    inner_offset = next_offset;
2986                } else {
2987                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2988                    inner_depth.increment()?;
2989                }
2990                let val_ref = self
2991                    .composite_driver
2992                    .get_or_insert_with(|| fidl::new_empty!(CompositeDriverInfo, D));
2993                fidl::decode!(CompositeDriverInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
2994                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2995                {
2996                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2997                }
2998                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2999                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3000                }
3001            }
3002
3003            next_offset += envelope_size;
3004            _next_ordinal_to_read += 1;
3005            if next_offset >= end_offset {
3006                return Ok(());
3007            }
3008
3009            // Decode unknown envelopes for gaps in ordinals.
3010            while _next_ordinal_to_read < 2 {
3011                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3012                _next_ordinal_to_read += 1;
3013                next_offset += envelope_size;
3014            }
3015
3016            let next_out_of_line = decoder.next_out_of_line();
3017            let handles_before = decoder.remaining_handles();
3018            if let Some((inlined, num_bytes, num_handles)) =
3019                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3020            {
3021                let member_inline_size = <fidl::encoding::UnboundedVector<
3022                    fidl::encoding::UnboundedString,
3023                > as fidl::encoding::TypeMarker>::inline_size(
3024                    decoder.context
3025                );
3026                if inlined != (member_inline_size <= 4) {
3027                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3028                }
3029                let inner_offset;
3030                let mut inner_depth = depth.clone();
3031                if inlined {
3032                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3033                    inner_offset = next_offset;
3034                } else {
3035                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3036                    inner_depth.increment()?;
3037                }
3038                let val_ref = self.parent_names.get_or_insert_with(|| {
3039                    fidl::new_empty!(
3040                        fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
3041                        D
3042                    )
3043                });
3044                fidl::decode!(
3045                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
3046                    D,
3047                    val_ref,
3048                    decoder,
3049                    inner_offset,
3050                    inner_depth
3051                )?;
3052                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3053                {
3054                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3055                }
3056                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3057                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3058                }
3059            }
3060
3061            next_offset += envelope_size;
3062            _next_ordinal_to_read += 1;
3063            if next_offset >= end_offset {
3064                return Ok(());
3065            }
3066
3067            // Decode unknown envelopes for gaps in ordinals.
3068            while _next_ordinal_to_read < 3 {
3069                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3070                _next_ordinal_to_read += 1;
3071                next_offset += envelope_size;
3072            }
3073
3074            let next_out_of_line = decoder.next_out_of_line();
3075            let handles_before = decoder.remaining_handles();
3076            if let Some((inlined, num_bytes, num_handles)) =
3077                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3078            {
3079                let member_inline_size =
3080                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3081                if inlined != (member_inline_size <= 4) {
3082                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3083                }
3084                let inner_offset;
3085                let mut inner_depth = depth.clone();
3086                if inlined {
3087                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3088                    inner_offset = next_offset;
3089                } else {
3090                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3091                    inner_depth.increment()?;
3092                }
3093                let val_ref =
3094                    self.primary_parent_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
3095                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3096                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3097                {
3098                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3099                }
3100                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3101                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3102                }
3103            }
3104
3105            next_offset += envelope_size;
3106
3107            // Decode the remaining unknown envelopes.
3108            while next_offset < end_offset {
3109                _next_ordinal_to_read += 1;
3110                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3111                next_offset += envelope_size;
3112            }
3113
3114            Ok(())
3115        }
3116    }
3117
3118    impl CompositeInfo {
3119        #[inline(always)]
3120        fn max_ordinal_present(&self) -> u64 {
3121            if let Some(_) = self.matched_driver {
3122                return 2;
3123            }
3124            if let Some(_) = self.spec {
3125                return 1;
3126            }
3127            0
3128        }
3129    }
3130
3131    impl fidl::encoding::ValueTypeMarker for CompositeInfo {
3132        type Borrowed<'a> = &'a Self;
3133        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3134            value
3135        }
3136    }
3137
3138    unsafe impl fidl::encoding::TypeMarker for CompositeInfo {
3139        type Owned = Self;
3140
3141        #[inline(always)]
3142        fn inline_align(_context: fidl::encoding::Context) -> usize {
3143            8
3144        }
3145
3146        #[inline(always)]
3147        fn inline_size(_context: fidl::encoding::Context) -> usize {
3148            16
3149        }
3150    }
3151
3152    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeInfo, D>
3153        for &CompositeInfo
3154    {
3155        unsafe fn encode(
3156            self,
3157            encoder: &mut fidl::encoding::Encoder<'_, D>,
3158            offset: usize,
3159            mut depth: fidl::encoding::Depth,
3160        ) -> fidl::Result<()> {
3161            encoder.debug_check_bounds::<CompositeInfo>(offset);
3162            // Vector header
3163            let max_ordinal: u64 = self.max_ordinal_present();
3164            encoder.write_num(max_ordinal, offset);
3165            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3166            // Calling encoder.out_of_line_offset(0) is not allowed.
3167            if max_ordinal == 0 {
3168                return Ok(());
3169            }
3170            depth.increment()?;
3171            let envelope_size = 8;
3172            let bytes_len = max_ordinal as usize * envelope_size;
3173            #[allow(unused_variables)]
3174            let offset = encoder.out_of_line_offset(bytes_len);
3175            let mut _prev_end_offset: usize = 0;
3176            if 1 > max_ordinal {
3177                return Ok(());
3178            }
3179
3180            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3181            // are envelope_size bytes.
3182            let cur_offset: usize = (1 - 1) * envelope_size;
3183
3184            // Zero reserved fields.
3185            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3186
3187            // Safety:
3188            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3189            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3190            //   envelope_size bytes, there is always sufficient room.
3191            fidl::encoding::encode_in_envelope_optional::<CompositeNodeSpec, D>(
3192                self.spec
3193                    .as_ref()
3194                    .map(<CompositeNodeSpec as fidl::encoding::ValueTypeMarker>::borrow),
3195                encoder,
3196                offset + cur_offset,
3197                depth,
3198            )?;
3199
3200            _prev_end_offset = cur_offset + envelope_size;
3201            if 2 > max_ordinal {
3202                return Ok(());
3203            }
3204
3205            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3206            // are envelope_size bytes.
3207            let cur_offset: usize = (2 - 1) * envelope_size;
3208
3209            // Zero reserved fields.
3210            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3211
3212            // Safety:
3213            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3214            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3215            //   envelope_size bytes, there is always sufficient room.
3216            fidl::encoding::encode_in_envelope_optional::<CompositeDriverMatch, D>(
3217                self.matched_driver
3218                    .as_ref()
3219                    .map(<CompositeDriverMatch as fidl::encoding::ValueTypeMarker>::borrow),
3220                encoder,
3221                offset + cur_offset,
3222                depth,
3223            )?;
3224
3225            _prev_end_offset = cur_offset + envelope_size;
3226
3227            Ok(())
3228        }
3229    }
3230
3231    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeInfo {
3232        #[inline(always)]
3233        fn new_empty() -> Self {
3234            Self::default()
3235        }
3236
3237        unsafe fn decode(
3238            &mut self,
3239            decoder: &mut fidl::encoding::Decoder<'_, D>,
3240            offset: usize,
3241            mut depth: fidl::encoding::Depth,
3242        ) -> fidl::Result<()> {
3243            decoder.debug_check_bounds::<Self>(offset);
3244            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3245                None => return Err(fidl::Error::NotNullable),
3246                Some(len) => len,
3247            };
3248            // Calling decoder.out_of_line_offset(0) is not allowed.
3249            if len == 0 {
3250                return Ok(());
3251            };
3252            depth.increment()?;
3253            let envelope_size = 8;
3254            let bytes_len = len * envelope_size;
3255            let offset = decoder.out_of_line_offset(bytes_len)?;
3256            // Decode the envelope for each type.
3257            let mut _next_ordinal_to_read = 0;
3258            let mut next_offset = offset;
3259            let end_offset = offset + bytes_len;
3260            _next_ordinal_to_read += 1;
3261            if next_offset >= end_offset {
3262                return Ok(());
3263            }
3264
3265            // Decode unknown envelopes for gaps in ordinals.
3266            while _next_ordinal_to_read < 1 {
3267                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3268                _next_ordinal_to_read += 1;
3269                next_offset += envelope_size;
3270            }
3271
3272            let next_out_of_line = decoder.next_out_of_line();
3273            let handles_before = decoder.remaining_handles();
3274            if let Some((inlined, num_bytes, num_handles)) =
3275                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3276            {
3277                let member_inline_size =
3278                    <CompositeNodeSpec as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3279                if inlined != (member_inline_size <= 4) {
3280                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3281                }
3282                let inner_offset;
3283                let mut inner_depth = depth.clone();
3284                if inlined {
3285                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3286                    inner_offset = next_offset;
3287                } else {
3288                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3289                    inner_depth.increment()?;
3290                }
3291                let val_ref =
3292                    self.spec.get_or_insert_with(|| fidl::new_empty!(CompositeNodeSpec, D));
3293                fidl::decode!(CompositeNodeSpec, D, val_ref, decoder, inner_offset, inner_depth)?;
3294                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3295                {
3296                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3297                }
3298                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3299                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3300                }
3301            }
3302
3303            next_offset += envelope_size;
3304            _next_ordinal_to_read += 1;
3305            if next_offset >= end_offset {
3306                return Ok(());
3307            }
3308
3309            // Decode unknown envelopes for gaps in ordinals.
3310            while _next_ordinal_to_read < 2 {
3311                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3312                _next_ordinal_to_read += 1;
3313                next_offset += envelope_size;
3314            }
3315
3316            let next_out_of_line = decoder.next_out_of_line();
3317            let handles_before = decoder.remaining_handles();
3318            if let Some((inlined, num_bytes, num_handles)) =
3319                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3320            {
3321                let member_inline_size =
3322                    <CompositeDriverMatch as fidl::encoding::TypeMarker>::inline_size(
3323                        decoder.context,
3324                    );
3325                if inlined != (member_inline_size <= 4) {
3326                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3327                }
3328                let inner_offset;
3329                let mut inner_depth = depth.clone();
3330                if inlined {
3331                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3332                    inner_offset = next_offset;
3333                } else {
3334                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3335                    inner_depth.increment()?;
3336                }
3337                let val_ref = self
3338                    .matched_driver
3339                    .get_or_insert_with(|| fidl::new_empty!(CompositeDriverMatch, D));
3340                fidl::decode!(
3341                    CompositeDriverMatch,
3342                    D,
3343                    val_ref,
3344                    decoder,
3345                    inner_offset,
3346                    inner_depth
3347                )?;
3348                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3349                {
3350                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3351                }
3352                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3353                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3354                }
3355            }
3356
3357            next_offset += envelope_size;
3358
3359            // Decode the remaining unknown envelopes.
3360            while next_offset < end_offset {
3361                _next_ordinal_to_read += 1;
3362                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3363                next_offset += envelope_size;
3364            }
3365
3366            Ok(())
3367        }
3368    }
3369
3370    impl CompositeNodeSpec {
3371        #[inline(always)]
3372        fn max_ordinal_present(&self) -> u64 {
3373            if let Some(_) = self.driver_host {
3374                return 4;
3375            }
3376            if let Some(_) = self.parents2 {
3377                return 3;
3378            }
3379            if let Some(_) = self.parents {
3380                return 2;
3381            }
3382            if let Some(_) = self.name {
3383                return 1;
3384            }
3385            0
3386        }
3387    }
3388
3389    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpec {
3390        type Borrowed<'a> = &'a Self;
3391        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3392            value
3393        }
3394    }
3395
3396    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpec {
3397        type Owned = Self;
3398
3399        #[inline(always)]
3400        fn inline_align(_context: fidl::encoding::Context) -> usize {
3401            8
3402        }
3403
3404        #[inline(always)]
3405        fn inline_size(_context: fidl::encoding::Context) -> usize {
3406            16
3407        }
3408    }
3409
3410    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeNodeSpec, D>
3411        for &CompositeNodeSpec
3412    {
3413        unsafe fn encode(
3414            self,
3415            encoder: &mut fidl::encoding::Encoder<'_, D>,
3416            offset: usize,
3417            mut depth: fidl::encoding::Depth,
3418        ) -> fidl::Result<()> {
3419            encoder.debug_check_bounds::<CompositeNodeSpec>(offset);
3420            // Vector header
3421            let max_ordinal: u64 = self.max_ordinal_present();
3422            encoder.write_num(max_ordinal, offset);
3423            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3424            // Calling encoder.out_of_line_offset(0) is not allowed.
3425            if max_ordinal == 0 {
3426                return Ok(());
3427            }
3428            depth.increment()?;
3429            let envelope_size = 8;
3430            let bytes_len = max_ordinal as usize * envelope_size;
3431            #[allow(unused_variables)]
3432            let offset = encoder.out_of_line_offset(bytes_len);
3433            let mut _prev_end_offset: usize = 0;
3434            if 1 > max_ordinal {
3435                return Ok(());
3436            }
3437
3438            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3439            // are envelope_size bytes.
3440            let cur_offset: usize = (1 - 1) * envelope_size;
3441
3442            // Zero reserved fields.
3443            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3444
3445            // Safety:
3446            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3447            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3448            //   envelope_size bytes, there is always sufficient room.
3449            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3450                self.name.as_ref().map(
3451                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3452                ),
3453                encoder,
3454                offset + cur_offset,
3455                depth,
3456            )?;
3457
3458            _prev_end_offset = cur_offset + envelope_size;
3459            if 2 > max_ordinal {
3460                return Ok(());
3461            }
3462
3463            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3464            // are envelope_size bytes.
3465            let cur_offset: usize = (2 - 1) * envelope_size;
3466
3467            // Zero reserved fields.
3468            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3469
3470            // Safety:
3471            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3472            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3473            //   envelope_size bytes, there is always sufficient room.
3474            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ParentSpec>, D>(
3475            self.parents.as_ref().map(<fidl::encoding::UnboundedVector<ParentSpec> as fidl::encoding::ValueTypeMarker>::borrow),
3476            encoder, offset + cur_offset, depth
3477        )?;
3478
3479            _prev_end_offset = cur_offset + envelope_size;
3480            if 3 > max_ordinal {
3481                return Ok(());
3482            }
3483
3484            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3485            // are envelope_size bytes.
3486            let cur_offset: usize = (3 - 1) * envelope_size;
3487
3488            // Zero reserved fields.
3489            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3490
3491            // Safety:
3492            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3493            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3494            //   envelope_size bytes, there is always sufficient room.
3495            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ParentSpec2>, D>(
3496            self.parents2.as_ref().map(<fidl::encoding::UnboundedVector<ParentSpec2> as fidl::encoding::ValueTypeMarker>::borrow),
3497            encoder, offset + cur_offset, depth
3498        )?;
3499
3500            _prev_end_offset = cur_offset + envelope_size;
3501            if 4 > max_ordinal {
3502                return Ok(());
3503            }
3504
3505            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3506            // are envelope_size bytes.
3507            let cur_offset: usize = (4 - 1) * envelope_size;
3508
3509            // Zero reserved fields.
3510            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3511
3512            // Safety:
3513            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3514            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3515            //   envelope_size bytes, there is always sufficient room.
3516            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
3517                self.driver_host.as_ref().map(
3518                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
3519                ),
3520                encoder,
3521                offset + cur_offset,
3522                depth,
3523            )?;
3524
3525            _prev_end_offset = cur_offset + envelope_size;
3526
3527            Ok(())
3528        }
3529    }
3530
3531    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeNodeSpec {
3532        #[inline(always)]
3533        fn new_empty() -> Self {
3534            Self::default()
3535        }
3536
3537        unsafe fn decode(
3538            &mut self,
3539            decoder: &mut fidl::encoding::Decoder<'_, D>,
3540            offset: usize,
3541            mut depth: fidl::encoding::Depth,
3542        ) -> fidl::Result<()> {
3543            decoder.debug_check_bounds::<Self>(offset);
3544            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3545                None => return Err(fidl::Error::NotNullable),
3546                Some(len) => len,
3547            };
3548            // Calling decoder.out_of_line_offset(0) is not allowed.
3549            if len == 0 {
3550                return Ok(());
3551            };
3552            depth.increment()?;
3553            let envelope_size = 8;
3554            let bytes_len = len * envelope_size;
3555            let offset = decoder.out_of_line_offset(bytes_len)?;
3556            // Decode the envelope for each type.
3557            let mut _next_ordinal_to_read = 0;
3558            let mut next_offset = offset;
3559            let end_offset = offset + bytes_len;
3560            _next_ordinal_to_read += 1;
3561            if next_offset >= end_offset {
3562                return Ok(());
3563            }
3564
3565            // Decode unknown envelopes for gaps in ordinals.
3566            while _next_ordinal_to_read < 1 {
3567                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3568                _next_ordinal_to_read += 1;
3569                next_offset += envelope_size;
3570            }
3571
3572            let next_out_of_line = decoder.next_out_of_line();
3573            let handles_before = decoder.remaining_handles();
3574            if let Some((inlined, num_bytes, num_handles)) =
3575                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3576            {
3577                let member_inline_size =
3578                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3579                        decoder.context,
3580                    );
3581                if inlined != (member_inline_size <= 4) {
3582                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3583                }
3584                let inner_offset;
3585                let mut inner_depth = depth.clone();
3586                if inlined {
3587                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3588                    inner_offset = next_offset;
3589                } else {
3590                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3591                    inner_depth.increment()?;
3592                }
3593                let val_ref = self
3594                    .name
3595                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3596                fidl::decode!(
3597                    fidl::encoding::UnboundedString,
3598                    D,
3599                    val_ref,
3600                    decoder,
3601                    inner_offset,
3602                    inner_depth
3603                )?;
3604                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3605                {
3606                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3607                }
3608                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3609                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3610                }
3611            }
3612
3613            next_offset += envelope_size;
3614            _next_ordinal_to_read += 1;
3615            if next_offset >= end_offset {
3616                return Ok(());
3617            }
3618
3619            // Decode unknown envelopes for gaps in ordinals.
3620            while _next_ordinal_to_read < 2 {
3621                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3622                _next_ordinal_to_read += 1;
3623                next_offset += envelope_size;
3624            }
3625
3626            let next_out_of_line = decoder.next_out_of_line();
3627            let handles_before = decoder.remaining_handles();
3628            if let Some((inlined, num_bytes, num_handles)) =
3629                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3630            {
3631                let member_inline_size = <fidl::encoding::UnboundedVector<ParentSpec> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3632                if inlined != (member_inline_size <= 4) {
3633                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3634                }
3635                let inner_offset;
3636                let mut inner_depth = depth.clone();
3637                if inlined {
3638                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3639                    inner_offset = next_offset;
3640                } else {
3641                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3642                    inner_depth.increment()?;
3643                }
3644                let val_ref = self.parents.get_or_insert_with(|| {
3645                    fidl::new_empty!(fidl::encoding::UnboundedVector<ParentSpec>, D)
3646                });
3647                fidl::decode!(
3648                    fidl::encoding::UnboundedVector<ParentSpec>,
3649                    D,
3650                    val_ref,
3651                    decoder,
3652                    inner_offset,
3653                    inner_depth
3654                )?;
3655                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3656                {
3657                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3658                }
3659                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3660                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3661                }
3662            }
3663
3664            next_offset += envelope_size;
3665            _next_ordinal_to_read += 1;
3666            if next_offset >= end_offset {
3667                return Ok(());
3668            }
3669
3670            // Decode unknown envelopes for gaps in ordinals.
3671            while _next_ordinal_to_read < 3 {
3672                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3673                _next_ordinal_to_read += 1;
3674                next_offset += envelope_size;
3675            }
3676
3677            let next_out_of_line = decoder.next_out_of_line();
3678            let handles_before = decoder.remaining_handles();
3679            if let Some((inlined, num_bytes, num_handles)) =
3680                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3681            {
3682                let member_inline_size = <fidl::encoding::UnboundedVector<ParentSpec2> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3683                if inlined != (member_inline_size <= 4) {
3684                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3685                }
3686                let inner_offset;
3687                let mut inner_depth = depth.clone();
3688                if inlined {
3689                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3690                    inner_offset = next_offset;
3691                } else {
3692                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3693                    inner_depth.increment()?;
3694                }
3695                let val_ref = self.parents2.get_or_insert_with(|| {
3696                    fidl::new_empty!(fidl::encoding::UnboundedVector<ParentSpec2>, D)
3697                });
3698                fidl::decode!(
3699                    fidl::encoding::UnboundedVector<ParentSpec2>,
3700                    D,
3701                    val_ref,
3702                    decoder,
3703                    inner_offset,
3704                    inner_depth
3705                )?;
3706                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3707                {
3708                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3709                }
3710                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3711                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3712                }
3713            }
3714
3715            next_offset += envelope_size;
3716            _next_ordinal_to_read += 1;
3717            if next_offset >= end_offset {
3718                return Ok(());
3719            }
3720
3721            // Decode unknown envelopes for gaps in ordinals.
3722            while _next_ordinal_to_read < 4 {
3723                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3724                _next_ordinal_to_read += 1;
3725                next_offset += envelope_size;
3726            }
3727
3728            let next_out_of_line = decoder.next_out_of_line();
3729            let handles_before = decoder.remaining_handles();
3730            if let Some((inlined, num_bytes, num_handles)) =
3731                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3732            {
3733                let member_inline_size =
3734                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
3735                        decoder.context,
3736                    );
3737                if inlined != (member_inline_size <= 4) {
3738                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3739                }
3740                let inner_offset;
3741                let mut inner_depth = depth.clone();
3742                if inlined {
3743                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3744                    inner_offset = next_offset;
3745                } else {
3746                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3747                    inner_depth.increment()?;
3748                }
3749                let val_ref = self
3750                    .driver_host
3751                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
3752                fidl::decode!(
3753                    fidl::encoding::BoundedString<128>,
3754                    D,
3755                    val_ref,
3756                    decoder,
3757                    inner_offset,
3758                    inner_depth
3759                )?;
3760                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3761                {
3762                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3763                }
3764                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3765                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3766                }
3767            }
3768
3769            next_offset += envelope_size;
3770
3771            // Decode the remaining unknown envelopes.
3772            while next_offset < end_offset {
3773                _next_ordinal_to_read += 1;
3774                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3775                next_offset += envelope_size;
3776            }
3777
3778            Ok(())
3779        }
3780    }
3781
3782    impl CompositeParent {
3783        #[inline(always)]
3784        fn max_ordinal_present(&self) -> u64 {
3785            if let Some(_) = self.index {
3786                return 2;
3787            }
3788            if let Some(_) = self.composite {
3789                return 1;
3790            }
3791            0
3792        }
3793    }
3794
3795    impl fidl::encoding::ValueTypeMarker for CompositeParent {
3796        type Borrowed<'a> = &'a Self;
3797        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3798            value
3799        }
3800    }
3801
3802    unsafe impl fidl::encoding::TypeMarker for CompositeParent {
3803        type Owned = Self;
3804
3805        #[inline(always)]
3806        fn inline_align(_context: fidl::encoding::Context) -> usize {
3807            8
3808        }
3809
3810        #[inline(always)]
3811        fn inline_size(_context: fidl::encoding::Context) -> usize {
3812            16
3813        }
3814    }
3815
3816    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeParent, D>
3817        for &CompositeParent
3818    {
3819        unsafe fn encode(
3820            self,
3821            encoder: &mut fidl::encoding::Encoder<'_, D>,
3822            offset: usize,
3823            mut depth: fidl::encoding::Depth,
3824        ) -> fidl::Result<()> {
3825            encoder.debug_check_bounds::<CompositeParent>(offset);
3826            // Vector header
3827            let max_ordinal: u64 = self.max_ordinal_present();
3828            encoder.write_num(max_ordinal, offset);
3829            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3830            // Calling encoder.out_of_line_offset(0) is not allowed.
3831            if max_ordinal == 0 {
3832                return Ok(());
3833            }
3834            depth.increment()?;
3835            let envelope_size = 8;
3836            let bytes_len = max_ordinal as usize * envelope_size;
3837            #[allow(unused_variables)]
3838            let offset = encoder.out_of_line_offset(bytes_len);
3839            let mut _prev_end_offset: usize = 0;
3840            if 1 > max_ordinal {
3841                return Ok(());
3842            }
3843
3844            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3845            // are envelope_size bytes.
3846            let cur_offset: usize = (1 - 1) * envelope_size;
3847
3848            // Zero reserved fields.
3849            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3850
3851            // Safety:
3852            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3853            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3854            //   envelope_size bytes, there is always sufficient room.
3855            fidl::encoding::encode_in_envelope_optional::<CompositeInfo, D>(
3856                self.composite
3857                    .as_ref()
3858                    .map(<CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow),
3859                encoder,
3860                offset + cur_offset,
3861                depth,
3862            )?;
3863
3864            _prev_end_offset = cur_offset + envelope_size;
3865            if 2 > max_ordinal {
3866                return Ok(());
3867            }
3868
3869            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3870            // are envelope_size bytes.
3871            let cur_offset: usize = (2 - 1) * envelope_size;
3872
3873            // Zero reserved fields.
3874            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3875
3876            // Safety:
3877            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3878            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3879            //   envelope_size bytes, there is always sufficient room.
3880            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3881                self.index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3882                encoder,
3883                offset + cur_offset,
3884                depth,
3885            )?;
3886
3887            _prev_end_offset = cur_offset + envelope_size;
3888
3889            Ok(())
3890        }
3891    }
3892
3893    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeParent {
3894        #[inline(always)]
3895        fn new_empty() -> Self {
3896            Self::default()
3897        }
3898
3899        unsafe fn decode(
3900            &mut self,
3901            decoder: &mut fidl::encoding::Decoder<'_, D>,
3902            offset: usize,
3903            mut depth: fidl::encoding::Depth,
3904        ) -> fidl::Result<()> {
3905            decoder.debug_check_bounds::<Self>(offset);
3906            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3907                None => return Err(fidl::Error::NotNullable),
3908                Some(len) => len,
3909            };
3910            // Calling decoder.out_of_line_offset(0) is not allowed.
3911            if len == 0 {
3912                return Ok(());
3913            };
3914            depth.increment()?;
3915            let envelope_size = 8;
3916            let bytes_len = len * envelope_size;
3917            let offset = decoder.out_of_line_offset(bytes_len)?;
3918            // Decode the envelope for each type.
3919            let mut _next_ordinal_to_read = 0;
3920            let mut next_offset = offset;
3921            let end_offset = offset + bytes_len;
3922            _next_ordinal_to_read += 1;
3923            if next_offset >= end_offset {
3924                return Ok(());
3925            }
3926
3927            // Decode unknown envelopes for gaps in ordinals.
3928            while _next_ordinal_to_read < 1 {
3929                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3930                _next_ordinal_to_read += 1;
3931                next_offset += envelope_size;
3932            }
3933
3934            let next_out_of_line = decoder.next_out_of_line();
3935            let handles_before = decoder.remaining_handles();
3936            if let Some((inlined, num_bytes, num_handles)) =
3937                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3938            {
3939                let member_inline_size =
3940                    <CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3941                if inlined != (member_inline_size <= 4) {
3942                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3943                }
3944                let inner_offset;
3945                let mut inner_depth = depth.clone();
3946                if inlined {
3947                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3948                    inner_offset = next_offset;
3949                } else {
3950                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3951                    inner_depth.increment()?;
3952                }
3953                let val_ref =
3954                    self.composite.get_or_insert_with(|| fidl::new_empty!(CompositeInfo, D));
3955                fidl::decode!(CompositeInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
3956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3957                {
3958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3959                }
3960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3962                }
3963            }
3964
3965            next_offset += envelope_size;
3966            _next_ordinal_to_read += 1;
3967            if next_offset >= end_offset {
3968                return Ok(());
3969            }
3970
3971            // Decode unknown envelopes for gaps in ordinals.
3972            while _next_ordinal_to_read < 2 {
3973                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3974                _next_ordinal_to_read += 1;
3975                next_offset += envelope_size;
3976            }
3977
3978            let next_out_of_line = decoder.next_out_of_line();
3979            let handles_before = decoder.remaining_handles();
3980            if let Some((inlined, num_bytes, num_handles)) =
3981                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3982            {
3983                let member_inline_size =
3984                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3985                if inlined != (member_inline_size <= 4) {
3986                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3987                }
3988                let inner_offset;
3989                let mut inner_depth = depth.clone();
3990                if inlined {
3991                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3992                    inner_offset = next_offset;
3993                } else {
3994                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3995                    inner_depth.increment()?;
3996                }
3997                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u32, D));
3998                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3999                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4000                {
4001                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4002                }
4003                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4004                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4005                }
4006            }
4007
4008            next_offset += envelope_size;
4009
4010            // Decode the remaining unknown envelopes.
4011            while next_offset < end_offset {
4012                _next_ordinal_to_read += 1;
4013                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4014                next_offset += envelope_size;
4015            }
4016
4017            Ok(())
4018        }
4019    }
4020
4021    impl DeviceCategory {
4022        #[inline(always)]
4023        fn max_ordinal_present(&self) -> u64 {
4024            if let Some(_) = self.subcategory {
4025                return 2;
4026            }
4027            if let Some(_) = self.category {
4028                return 1;
4029            }
4030            0
4031        }
4032    }
4033
4034    impl fidl::encoding::ValueTypeMarker for DeviceCategory {
4035        type Borrowed<'a> = &'a Self;
4036        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4037            value
4038        }
4039    }
4040
4041    unsafe impl fidl::encoding::TypeMarker for DeviceCategory {
4042        type Owned = Self;
4043
4044        #[inline(always)]
4045        fn inline_align(_context: fidl::encoding::Context) -> usize {
4046            8
4047        }
4048
4049        #[inline(always)]
4050        fn inline_size(_context: fidl::encoding::Context) -> usize {
4051            16
4052        }
4053    }
4054
4055    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceCategory, D>
4056        for &DeviceCategory
4057    {
4058        unsafe fn encode(
4059            self,
4060            encoder: &mut fidl::encoding::Encoder<'_, D>,
4061            offset: usize,
4062            mut depth: fidl::encoding::Depth,
4063        ) -> fidl::Result<()> {
4064            encoder.debug_check_bounds::<DeviceCategory>(offset);
4065            // Vector header
4066            let max_ordinal: u64 = self.max_ordinal_present();
4067            encoder.write_num(max_ordinal, offset);
4068            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4069            // Calling encoder.out_of_line_offset(0) is not allowed.
4070            if max_ordinal == 0 {
4071                return Ok(());
4072            }
4073            depth.increment()?;
4074            let envelope_size = 8;
4075            let bytes_len = max_ordinal as usize * envelope_size;
4076            #[allow(unused_variables)]
4077            let offset = encoder.out_of_line_offset(bytes_len);
4078            let mut _prev_end_offset: usize = 0;
4079            if 1 > max_ordinal {
4080                return Ok(());
4081            }
4082
4083            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4084            // are envelope_size bytes.
4085            let cur_offset: usize = (1 - 1) * envelope_size;
4086
4087            // Zero reserved fields.
4088            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4089
4090            // Safety:
4091            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4092            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4093            //   envelope_size bytes, there is always sufficient room.
4094            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4095                self.category.as_ref().map(
4096                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4097                ),
4098                encoder,
4099                offset + cur_offset,
4100                depth,
4101            )?;
4102
4103            _prev_end_offset = cur_offset + envelope_size;
4104            if 2 > max_ordinal {
4105                return Ok(());
4106            }
4107
4108            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4109            // are envelope_size bytes.
4110            let cur_offset: usize = (2 - 1) * envelope_size;
4111
4112            // Zero reserved fields.
4113            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4114
4115            // Safety:
4116            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4117            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4118            //   envelope_size bytes, there is always sufficient room.
4119            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4120                self.subcategory.as_ref().map(
4121                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4122                ),
4123                encoder,
4124                offset + cur_offset,
4125                depth,
4126            )?;
4127
4128            _prev_end_offset = cur_offset + envelope_size;
4129
4130            Ok(())
4131        }
4132    }
4133
4134    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceCategory {
4135        #[inline(always)]
4136        fn new_empty() -> Self {
4137            Self::default()
4138        }
4139
4140        unsafe fn decode(
4141            &mut self,
4142            decoder: &mut fidl::encoding::Decoder<'_, D>,
4143            offset: usize,
4144            mut depth: fidl::encoding::Depth,
4145        ) -> fidl::Result<()> {
4146            decoder.debug_check_bounds::<Self>(offset);
4147            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4148                None => return Err(fidl::Error::NotNullable),
4149                Some(len) => len,
4150            };
4151            // Calling decoder.out_of_line_offset(0) is not allowed.
4152            if len == 0 {
4153                return Ok(());
4154            };
4155            depth.increment()?;
4156            let envelope_size = 8;
4157            let bytes_len = len * envelope_size;
4158            let offset = decoder.out_of_line_offset(bytes_len)?;
4159            // Decode the envelope for each type.
4160            let mut _next_ordinal_to_read = 0;
4161            let mut next_offset = offset;
4162            let end_offset = offset + bytes_len;
4163            _next_ordinal_to_read += 1;
4164            if next_offset >= end_offset {
4165                return Ok(());
4166            }
4167
4168            // Decode unknown envelopes for gaps in ordinals.
4169            while _next_ordinal_to_read < 1 {
4170                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4171                _next_ordinal_to_read += 1;
4172                next_offset += envelope_size;
4173            }
4174
4175            let next_out_of_line = decoder.next_out_of_line();
4176            let handles_before = decoder.remaining_handles();
4177            if let Some((inlined, num_bytes, num_handles)) =
4178                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4179            {
4180                let member_inline_size =
4181                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4182                        decoder.context,
4183                    );
4184                if inlined != (member_inline_size <= 4) {
4185                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4186                }
4187                let inner_offset;
4188                let mut inner_depth = depth.clone();
4189                if inlined {
4190                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4191                    inner_offset = next_offset;
4192                } else {
4193                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4194                    inner_depth.increment()?;
4195                }
4196                let val_ref = self
4197                    .category
4198                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4199                fidl::decode!(
4200                    fidl::encoding::UnboundedString,
4201                    D,
4202                    val_ref,
4203                    decoder,
4204                    inner_offset,
4205                    inner_depth
4206                )?;
4207                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4208                {
4209                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4210                }
4211                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4212                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4213                }
4214            }
4215
4216            next_offset += envelope_size;
4217            _next_ordinal_to_read += 1;
4218            if next_offset >= end_offset {
4219                return Ok(());
4220            }
4221
4222            // Decode unknown envelopes for gaps in ordinals.
4223            while _next_ordinal_to_read < 2 {
4224                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4225                _next_ordinal_to_read += 1;
4226                next_offset += envelope_size;
4227            }
4228
4229            let next_out_of_line = decoder.next_out_of_line();
4230            let handles_before = decoder.remaining_handles();
4231            if let Some((inlined, num_bytes, num_handles)) =
4232                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4233            {
4234                let member_inline_size =
4235                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4236                        decoder.context,
4237                    );
4238                if inlined != (member_inline_size <= 4) {
4239                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4240                }
4241                let inner_offset;
4242                let mut inner_depth = depth.clone();
4243                if inlined {
4244                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4245                    inner_offset = next_offset;
4246                } else {
4247                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4248                    inner_depth.increment()?;
4249                }
4250                let val_ref = self
4251                    .subcategory
4252                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4253                fidl::decode!(
4254                    fidl::encoding::UnboundedString,
4255                    D,
4256                    val_ref,
4257                    decoder,
4258                    inner_offset,
4259                    inner_depth
4260                )?;
4261                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4262                {
4263                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4264                }
4265                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4266                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4267                }
4268            }
4269
4270            next_offset += envelope_size;
4271
4272            // Decode the remaining unknown envelopes.
4273            while next_offset < end_offset {
4274                _next_ordinal_to_read += 1;
4275                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4276                next_offset += envelope_size;
4277            }
4278
4279            Ok(())
4280        }
4281    }
4282
4283    impl DriverInfo {
4284        #[inline(always)]
4285        fn max_ordinal_present(&self) -> u64 {
4286            if let Some(_) = self.is_disabled {
4287                return 9;
4288            }
4289            if let Some(_) = self.driver_framework_version {
4290                return 8;
4291            }
4292            if let Some(_) = self.bind_rules_bytecode {
4293                return 7;
4294            }
4295            if let Some(_) = self.device_categories {
4296                return 6;
4297            }
4298            if let Some(_) = self.is_fallback {
4299                return 5;
4300            }
4301            if let Some(_) = self.package_type {
4302                return 4;
4303            }
4304            if let Some(_) = self.colocate {
4305                return 3;
4306            }
4307            if let Some(_) = self.name {
4308                return 2;
4309            }
4310            if let Some(_) = self.url {
4311                return 1;
4312            }
4313            0
4314        }
4315    }
4316
4317    impl fidl::encoding::ValueTypeMarker for DriverInfo {
4318        type Borrowed<'a> = &'a Self;
4319        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4320            value
4321        }
4322    }
4323
4324    unsafe impl fidl::encoding::TypeMarker for DriverInfo {
4325        type Owned = Self;
4326
4327        #[inline(always)]
4328        fn inline_align(_context: fidl::encoding::Context) -> usize {
4329            8
4330        }
4331
4332        #[inline(always)]
4333        fn inline_size(_context: fidl::encoding::Context) -> usize {
4334            16
4335        }
4336    }
4337
4338    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DriverInfo, D>
4339        for &DriverInfo
4340    {
4341        unsafe fn encode(
4342            self,
4343            encoder: &mut fidl::encoding::Encoder<'_, D>,
4344            offset: usize,
4345            mut depth: fidl::encoding::Depth,
4346        ) -> fidl::Result<()> {
4347            encoder.debug_check_bounds::<DriverInfo>(offset);
4348            // Vector header
4349            let max_ordinal: u64 = self.max_ordinal_present();
4350            encoder.write_num(max_ordinal, offset);
4351            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4352            // Calling encoder.out_of_line_offset(0) is not allowed.
4353            if max_ordinal == 0 {
4354                return Ok(());
4355            }
4356            depth.increment()?;
4357            let envelope_size = 8;
4358            let bytes_len = max_ordinal as usize * envelope_size;
4359            #[allow(unused_variables)]
4360            let offset = encoder.out_of_line_offset(bytes_len);
4361            let mut _prev_end_offset: usize = 0;
4362            if 1 > max_ordinal {
4363                return Ok(());
4364            }
4365
4366            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4367            // are envelope_size bytes.
4368            let cur_offset: usize = (1 - 1) * envelope_size;
4369
4370            // Zero reserved fields.
4371            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4372
4373            // Safety:
4374            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4375            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4376            //   envelope_size bytes, there is always sufficient room.
4377            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
4378            self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
4379            encoder, offset + cur_offset, depth
4380        )?;
4381
4382            _prev_end_offset = cur_offset + envelope_size;
4383            if 2 > max_ordinal {
4384                return Ok(());
4385            }
4386
4387            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4388            // are envelope_size bytes.
4389            let cur_offset: usize = (2 - 1) * envelope_size;
4390
4391            // Zero reserved fields.
4392            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4393
4394            // Safety:
4395            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4396            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4397            //   envelope_size bytes, there is always sufficient room.
4398            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4399                self.name.as_ref().map(
4400                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4401                ),
4402                encoder,
4403                offset + cur_offset,
4404                depth,
4405            )?;
4406
4407            _prev_end_offset = cur_offset + envelope_size;
4408            if 3 > max_ordinal {
4409                return Ok(());
4410            }
4411
4412            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4413            // are envelope_size bytes.
4414            let cur_offset: usize = (3 - 1) * envelope_size;
4415
4416            // Zero reserved fields.
4417            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4418
4419            // Safety:
4420            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4421            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4422            //   envelope_size bytes, there is always sufficient room.
4423            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4424                self.colocate.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4425                encoder,
4426                offset + cur_offset,
4427                depth,
4428            )?;
4429
4430            _prev_end_offset = cur_offset + envelope_size;
4431            if 4 > max_ordinal {
4432                return Ok(());
4433            }
4434
4435            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4436            // are envelope_size bytes.
4437            let cur_offset: usize = (4 - 1) * envelope_size;
4438
4439            // Zero reserved fields.
4440            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4441
4442            // Safety:
4443            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4444            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4445            //   envelope_size bytes, there is always sufficient room.
4446            fidl::encoding::encode_in_envelope_optional::<DriverPackageType, D>(
4447                self.package_type
4448                    .as_ref()
4449                    .map(<DriverPackageType as fidl::encoding::ValueTypeMarker>::borrow),
4450                encoder,
4451                offset + cur_offset,
4452                depth,
4453            )?;
4454
4455            _prev_end_offset = cur_offset + envelope_size;
4456            if 5 > max_ordinal {
4457                return Ok(());
4458            }
4459
4460            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4461            // are envelope_size bytes.
4462            let cur_offset: usize = (5 - 1) * envelope_size;
4463
4464            // Zero reserved fields.
4465            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4466
4467            // Safety:
4468            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4469            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4470            //   envelope_size bytes, there is always sufficient room.
4471            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4472                self.is_fallback.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4473                encoder,
4474                offset + cur_offset,
4475                depth,
4476            )?;
4477
4478            _prev_end_offset = cur_offset + envelope_size;
4479            if 6 > max_ordinal {
4480                return Ok(());
4481            }
4482
4483            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4484            // are envelope_size bytes.
4485            let cur_offset: usize = (6 - 1) * envelope_size;
4486
4487            // Zero reserved fields.
4488            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4489
4490            // Safety:
4491            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4492            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4493            //   envelope_size bytes, there is always sufficient room.
4494            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DeviceCategory>, D>(
4495            self.device_categories.as_ref().map(<fidl::encoding::UnboundedVector<DeviceCategory> as fidl::encoding::ValueTypeMarker>::borrow),
4496            encoder, offset + cur_offset, depth
4497        )?;
4498
4499            _prev_end_offset = cur_offset + envelope_size;
4500            if 7 > max_ordinal {
4501                return Ok(());
4502            }
4503
4504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4505            // are envelope_size bytes.
4506            let cur_offset: usize = (7 - 1) * envelope_size;
4507
4508            // Zero reserved fields.
4509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4510
4511            // Safety:
4512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4514            //   envelope_size bytes, there is always sufficient room.
4515            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
4516            self.bind_rules_bytecode.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
4517            encoder, offset + cur_offset, depth
4518        )?;
4519
4520            _prev_end_offset = cur_offset + envelope_size;
4521            if 8 > max_ordinal {
4522                return Ok(());
4523            }
4524
4525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4526            // are envelope_size bytes.
4527            let cur_offset: usize = (8 - 1) * envelope_size;
4528
4529            // Zero reserved fields.
4530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4531
4532            // Safety:
4533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4535            //   envelope_size bytes, there is always sufficient room.
4536            fidl::encoding::encode_in_envelope_optional::<u8, D>(
4537                self.driver_framework_version
4538                    .as_ref()
4539                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
4540                encoder,
4541                offset + cur_offset,
4542                depth,
4543            )?;
4544
4545            _prev_end_offset = cur_offset + envelope_size;
4546            if 9 > max_ordinal {
4547                return Ok(());
4548            }
4549
4550            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4551            // are envelope_size bytes.
4552            let cur_offset: usize = (9 - 1) * envelope_size;
4553
4554            // Zero reserved fields.
4555            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4556
4557            // Safety:
4558            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4559            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4560            //   envelope_size bytes, there is always sufficient room.
4561            fidl::encoding::encode_in_envelope_optional::<bool, D>(
4562                self.is_disabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
4563                encoder,
4564                offset + cur_offset,
4565                depth,
4566            )?;
4567
4568            _prev_end_offset = cur_offset + envelope_size;
4569
4570            Ok(())
4571        }
4572    }
4573
4574    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverInfo {
4575        #[inline(always)]
4576        fn new_empty() -> Self {
4577            Self::default()
4578        }
4579
4580        unsafe fn decode(
4581            &mut self,
4582            decoder: &mut fidl::encoding::Decoder<'_, D>,
4583            offset: usize,
4584            mut depth: fidl::encoding::Depth,
4585        ) -> fidl::Result<()> {
4586            decoder.debug_check_bounds::<Self>(offset);
4587            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4588                None => return Err(fidl::Error::NotNullable),
4589                Some(len) => len,
4590            };
4591            // Calling decoder.out_of_line_offset(0) is not allowed.
4592            if len == 0 {
4593                return Ok(());
4594            };
4595            depth.increment()?;
4596            let envelope_size = 8;
4597            let bytes_len = len * envelope_size;
4598            let offset = decoder.out_of_line_offset(bytes_len)?;
4599            // Decode the envelope for each type.
4600            let mut _next_ordinal_to_read = 0;
4601            let mut next_offset = offset;
4602            let end_offset = offset + bytes_len;
4603            _next_ordinal_to_read += 1;
4604            if next_offset >= end_offset {
4605                return Ok(());
4606            }
4607
4608            // Decode unknown envelopes for gaps in ordinals.
4609            while _next_ordinal_to_read < 1 {
4610                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4611                _next_ordinal_to_read += 1;
4612                next_offset += envelope_size;
4613            }
4614
4615            let next_out_of_line = decoder.next_out_of_line();
4616            let handles_before = decoder.remaining_handles();
4617            if let Some((inlined, num_bytes, num_handles)) =
4618                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4619            {
4620                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4621                if inlined != (member_inline_size <= 4) {
4622                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4623                }
4624                let inner_offset;
4625                let mut inner_depth = depth.clone();
4626                if inlined {
4627                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4628                    inner_offset = next_offset;
4629                } else {
4630                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4631                    inner_depth.increment()?;
4632                }
4633                let val_ref = self.url.get_or_insert_with(|| {
4634                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
4635                });
4636                fidl::decode!(
4637                    fidl::encoding::BoundedString<4096>,
4638                    D,
4639                    val_ref,
4640                    decoder,
4641                    inner_offset,
4642                    inner_depth
4643                )?;
4644                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4645                {
4646                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4647                }
4648                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4649                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4650                }
4651            }
4652
4653            next_offset += envelope_size;
4654            _next_ordinal_to_read += 1;
4655            if next_offset >= end_offset {
4656                return Ok(());
4657            }
4658
4659            // Decode unknown envelopes for gaps in ordinals.
4660            while _next_ordinal_to_read < 2 {
4661                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4662                _next_ordinal_to_read += 1;
4663                next_offset += envelope_size;
4664            }
4665
4666            let next_out_of_line = decoder.next_out_of_line();
4667            let handles_before = decoder.remaining_handles();
4668            if let Some((inlined, num_bytes, num_handles)) =
4669                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4670            {
4671                let member_inline_size =
4672                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4673                        decoder.context,
4674                    );
4675                if inlined != (member_inline_size <= 4) {
4676                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4677                }
4678                let inner_offset;
4679                let mut inner_depth = depth.clone();
4680                if inlined {
4681                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4682                    inner_offset = next_offset;
4683                } else {
4684                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4685                    inner_depth.increment()?;
4686                }
4687                let val_ref = self
4688                    .name
4689                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4690                fidl::decode!(
4691                    fidl::encoding::UnboundedString,
4692                    D,
4693                    val_ref,
4694                    decoder,
4695                    inner_offset,
4696                    inner_depth
4697                )?;
4698                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4699                {
4700                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4701                }
4702                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4703                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4704                }
4705            }
4706
4707            next_offset += envelope_size;
4708            _next_ordinal_to_read += 1;
4709            if next_offset >= end_offset {
4710                return Ok(());
4711            }
4712
4713            // Decode unknown envelopes for gaps in ordinals.
4714            while _next_ordinal_to_read < 3 {
4715                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4716                _next_ordinal_to_read += 1;
4717                next_offset += envelope_size;
4718            }
4719
4720            let next_out_of_line = decoder.next_out_of_line();
4721            let handles_before = decoder.remaining_handles();
4722            if let Some((inlined, num_bytes, num_handles)) =
4723                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4724            {
4725                let member_inline_size =
4726                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4727                if inlined != (member_inline_size <= 4) {
4728                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4729                }
4730                let inner_offset;
4731                let mut inner_depth = depth.clone();
4732                if inlined {
4733                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4734                    inner_offset = next_offset;
4735                } else {
4736                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4737                    inner_depth.increment()?;
4738                }
4739                let val_ref = self.colocate.get_or_insert_with(|| fidl::new_empty!(bool, D));
4740                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4741                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4742                {
4743                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4744                }
4745                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4746                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4747                }
4748            }
4749
4750            next_offset += envelope_size;
4751            _next_ordinal_to_read += 1;
4752            if next_offset >= end_offset {
4753                return Ok(());
4754            }
4755
4756            // Decode unknown envelopes for gaps in ordinals.
4757            while _next_ordinal_to_read < 4 {
4758                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4759                _next_ordinal_to_read += 1;
4760                next_offset += envelope_size;
4761            }
4762
4763            let next_out_of_line = decoder.next_out_of_line();
4764            let handles_before = decoder.remaining_handles();
4765            if let Some((inlined, num_bytes, num_handles)) =
4766                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4767            {
4768                let member_inline_size =
4769                    <DriverPackageType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4770                if inlined != (member_inline_size <= 4) {
4771                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4772                }
4773                let inner_offset;
4774                let mut inner_depth = depth.clone();
4775                if inlined {
4776                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4777                    inner_offset = next_offset;
4778                } else {
4779                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4780                    inner_depth.increment()?;
4781                }
4782                let val_ref =
4783                    self.package_type.get_or_insert_with(|| fidl::new_empty!(DriverPackageType, D));
4784                fidl::decode!(DriverPackageType, D, val_ref, decoder, inner_offset, inner_depth)?;
4785                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4786                {
4787                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4788                }
4789                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4790                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4791                }
4792            }
4793
4794            next_offset += envelope_size;
4795            _next_ordinal_to_read += 1;
4796            if next_offset >= end_offset {
4797                return Ok(());
4798            }
4799
4800            // Decode unknown envelopes for gaps in ordinals.
4801            while _next_ordinal_to_read < 5 {
4802                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4803                _next_ordinal_to_read += 1;
4804                next_offset += envelope_size;
4805            }
4806
4807            let next_out_of_line = decoder.next_out_of_line();
4808            let handles_before = decoder.remaining_handles();
4809            if let Some((inlined, num_bytes, num_handles)) =
4810                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4811            {
4812                let member_inline_size =
4813                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4814                if inlined != (member_inline_size <= 4) {
4815                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4816                }
4817                let inner_offset;
4818                let mut inner_depth = depth.clone();
4819                if inlined {
4820                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4821                    inner_offset = next_offset;
4822                } else {
4823                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4824                    inner_depth.increment()?;
4825                }
4826                let val_ref = self.is_fallback.get_or_insert_with(|| fidl::new_empty!(bool, D));
4827                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
4828                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4829                {
4830                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4831                }
4832                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4833                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4834                }
4835            }
4836
4837            next_offset += envelope_size;
4838            _next_ordinal_to_read += 1;
4839            if next_offset >= end_offset {
4840                return Ok(());
4841            }
4842
4843            // Decode unknown envelopes for gaps in ordinals.
4844            while _next_ordinal_to_read < 6 {
4845                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4846                _next_ordinal_to_read += 1;
4847                next_offset += envelope_size;
4848            }
4849
4850            let next_out_of_line = decoder.next_out_of_line();
4851            let handles_before = decoder.remaining_handles();
4852            if let Some((inlined, num_bytes, num_handles)) =
4853                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4854            {
4855                let member_inline_size = <fidl::encoding::UnboundedVector<DeviceCategory> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4856                if inlined != (member_inline_size <= 4) {
4857                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4858                }
4859                let inner_offset;
4860                let mut inner_depth = depth.clone();
4861                if inlined {
4862                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4863                    inner_offset = next_offset;
4864                } else {
4865                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4866                    inner_depth.increment()?;
4867                }
4868                let val_ref = self.device_categories.get_or_insert_with(|| {
4869                    fidl::new_empty!(fidl::encoding::UnboundedVector<DeviceCategory>, D)
4870                });
4871                fidl::decode!(
4872                    fidl::encoding::UnboundedVector<DeviceCategory>,
4873                    D,
4874                    val_ref,
4875                    decoder,
4876                    inner_offset,
4877                    inner_depth
4878                )?;
4879                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4880                {
4881                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4882                }
4883                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4884                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4885                }
4886            }
4887
4888            next_offset += envelope_size;
4889            _next_ordinal_to_read += 1;
4890            if next_offset >= end_offset {
4891                return Ok(());
4892            }
4893
4894            // Decode unknown envelopes for gaps in ordinals.
4895            while _next_ordinal_to_read < 7 {
4896                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4897                _next_ordinal_to_read += 1;
4898                next_offset += envelope_size;
4899            }
4900
4901            let next_out_of_line = decoder.next_out_of_line();
4902            let handles_before = decoder.remaining_handles();
4903            if let Some((inlined, num_bytes, num_handles)) =
4904                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4905            {
4906                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4907                if inlined != (member_inline_size <= 4) {
4908                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4909                }
4910                let inner_offset;
4911                let mut inner_depth = depth.clone();
4912                if inlined {
4913                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4914                    inner_offset = next_offset;
4915                } else {
4916                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4917                    inner_depth.increment()?;
4918                }
4919                let val_ref = self.bind_rules_bytecode.get_or_insert_with(|| {
4920                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
4921                });
4922                fidl::decode!(
4923                    fidl::encoding::UnboundedVector<u8>,
4924                    D,
4925                    val_ref,
4926                    decoder,
4927                    inner_offset,
4928                    inner_depth
4929                )?;
4930                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4931                {
4932                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4933                }
4934                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4935                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4936                }
4937            }
4938
4939            next_offset += envelope_size;
4940            _next_ordinal_to_read += 1;
4941            if next_offset >= end_offset {
4942                return Ok(());
4943            }
4944
4945            // Decode unknown envelopes for gaps in ordinals.
4946            while _next_ordinal_to_read < 8 {
4947                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4948                _next_ordinal_to_read += 1;
4949                next_offset += envelope_size;
4950            }
4951
4952            let next_out_of_line = decoder.next_out_of_line();
4953            let handles_before = decoder.remaining_handles();
4954            if let Some((inlined, num_bytes, num_handles)) =
4955                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4956            {
4957                let member_inline_size =
4958                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4959                if inlined != (member_inline_size <= 4) {
4960                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4961                }
4962                let inner_offset;
4963                let mut inner_depth = depth.clone();
4964                if inlined {
4965                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4966                    inner_offset = next_offset;
4967                } else {
4968                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4969                    inner_depth.increment()?;
4970                }
4971                let val_ref =
4972                    self.driver_framework_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
4973                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
4974                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4975                {
4976                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4977                }
4978                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4979                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4980                }
4981            }
4982
4983            next_offset += envelope_size;
4984            _next_ordinal_to_read += 1;
4985            if next_offset >= end_offset {
4986                return Ok(());
4987            }
4988
4989            // Decode unknown envelopes for gaps in ordinals.
4990            while _next_ordinal_to_read < 9 {
4991                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4992                _next_ordinal_to_read += 1;
4993                next_offset += envelope_size;
4994            }
4995
4996            let next_out_of_line = decoder.next_out_of_line();
4997            let handles_before = decoder.remaining_handles();
4998            if let Some((inlined, num_bytes, num_handles)) =
4999                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5000            {
5001                let member_inline_size =
5002                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5003                if inlined != (member_inline_size <= 4) {
5004                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5005                }
5006                let inner_offset;
5007                let mut inner_depth = depth.clone();
5008                if inlined {
5009                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5010                    inner_offset = next_offset;
5011                } else {
5012                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5013                    inner_depth.increment()?;
5014                }
5015                let val_ref = self.is_disabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
5016                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5017                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5018                {
5019                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5020                }
5021                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5022                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5023                }
5024            }
5025
5026            next_offset += envelope_size;
5027
5028            // Decode the remaining unknown envelopes.
5029            while next_offset < end_offset {
5030                _next_ordinal_to_read += 1;
5031                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5032                next_offset += envelope_size;
5033            }
5034
5035            Ok(())
5036        }
5037    }
5038
5039    impl NodeControllerRequestBindRequest {
5040        #[inline(always)]
5041        fn max_ordinal_present(&self) -> u64 {
5042            if let Some(_) = self.driver_url_suffix {
5043                return 2;
5044            }
5045            if let Some(_) = self.force_rebind {
5046                return 1;
5047            }
5048            0
5049        }
5050    }
5051
5052    impl fidl::encoding::ValueTypeMarker for NodeControllerRequestBindRequest {
5053        type Borrowed<'a> = &'a Self;
5054        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5055            value
5056        }
5057    }
5058
5059    unsafe impl fidl::encoding::TypeMarker for NodeControllerRequestBindRequest {
5060        type Owned = Self;
5061
5062        #[inline(always)]
5063        fn inline_align(_context: fidl::encoding::Context) -> usize {
5064            8
5065        }
5066
5067        #[inline(always)]
5068        fn inline_size(_context: fidl::encoding::Context) -> usize {
5069            16
5070        }
5071    }
5072
5073    unsafe impl<D: fidl::encoding::ResourceDialect>
5074        fidl::encoding::Encode<NodeControllerRequestBindRequest, D>
5075        for &NodeControllerRequestBindRequest
5076    {
5077        unsafe fn encode(
5078            self,
5079            encoder: &mut fidl::encoding::Encoder<'_, D>,
5080            offset: usize,
5081            mut depth: fidl::encoding::Depth,
5082        ) -> fidl::Result<()> {
5083            encoder.debug_check_bounds::<NodeControllerRequestBindRequest>(offset);
5084            // Vector header
5085            let max_ordinal: u64 = self.max_ordinal_present();
5086            encoder.write_num(max_ordinal, offset);
5087            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5088            // Calling encoder.out_of_line_offset(0) is not allowed.
5089            if max_ordinal == 0 {
5090                return Ok(());
5091            }
5092            depth.increment()?;
5093            let envelope_size = 8;
5094            let bytes_len = max_ordinal as usize * envelope_size;
5095            #[allow(unused_variables)]
5096            let offset = encoder.out_of_line_offset(bytes_len);
5097            let mut _prev_end_offset: usize = 0;
5098            if 1 > max_ordinal {
5099                return Ok(());
5100            }
5101
5102            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5103            // are envelope_size bytes.
5104            let cur_offset: usize = (1 - 1) * envelope_size;
5105
5106            // Zero reserved fields.
5107            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5108
5109            // Safety:
5110            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5111            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5112            //   envelope_size bytes, there is always sufficient room.
5113            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5114                self.force_rebind.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5115                encoder,
5116                offset + cur_offset,
5117                depth,
5118            )?;
5119
5120            _prev_end_offset = cur_offset + envelope_size;
5121            if 2 > max_ordinal {
5122                return Ok(());
5123            }
5124
5125            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5126            // are envelope_size bytes.
5127            let cur_offset: usize = (2 - 1) * envelope_size;
5128
5129            // Zero reserved fields.
5130            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5131
5132            // Safety:
5133            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5134            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5135            //   envelope_size bytes, there is always sufficient room.
5136            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
5137                self.driver_url_suffix.as_ref().map(
5138                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
5139                ),
5140                encoder,
5141                offset + cur_offset,
5142                depth,
5143            )?;
5144
5145            _prev_end_offset = cur_offset + envelope_size;
5146
5147            Ok(())
5148        }
5149    }
5150
5151    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5152        for NodeControllerRequestBindRequest
5153    {
5154        #[inline(always)]
5155        fn new_empty() -> Self {
5156            Self::default()
5157        }
5158
5159        unsafe fn decode(
5160            &mut self,
5161            decoder: &mut fidl::encoding::Decoder<'_, D>,
5162            offset: usize,
5163            mut depth: fidl::encoding::Depth,
5164        ) -> fidl::Result<()> {
5165            decoder.debug_check_bounds::<Self>(offset);
5166            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5167                None => return Err(fidl::Error::NotNullable),
5168                Some(len) => len,
5169            };
5170            // Calling decoder.out_of_line_offset(0) is not allowed.
5171            if len == 0 {
5172                return Ok(());
5173            };
5174            depth.increment()?;
5175            let envelope_size = 8;
5176            let bytes_len = len * envelope_size;
5177            let offset = decoder.out_of_line_offset(bytes_len)?;
5178            // Decode the envelope for each type.
5179            let mut _next_ordinal_to_read = 0;
5180            let mut next_offset = offset;
5181            let end_offset = offset + bytes_len;
5182            _next_ordinal_to_read += 1;
5183            if next_offset >= end_offset {
5184                return Ok(());
5185            }
5186
5187            // Decode unknown envelopes for gaps in ordinals.
5188            while _next_ordinal_to_read < 1 {
5189                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5190                _next_ordinal_to_read += 1;
5191                next_offset += envelope_size;
5192            }
5193
5194            let next_out_of_line = decoder.next_out_of_line();
5195            let handles_before = decoder.remaining_handles();
5196            if let Some((inlined, num_bytes, num_handles)) =
5197                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5198            {
5199                let member_inline_size =
5200                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5201                if inlined != (member_inline_size <= 4) {
5202                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5203                }
5204                let inner_offset;
5205                let mut inner_depth = depth.clone();
5206                if inlined {
5207                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5208                    inner_offset = next_offset;
5209                } else {
5210                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5211                    inner_depth.increment()?;
5212                }
5213                let val_ref = self.force_rebind.get_or_insert_with(|| fidl::new_empty!(bool, D));
5214                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5215                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5216                {
5217                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5218                }
5219                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5220                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5221                }
5222            }
5223
5224            next_offset += envelope_size;
5225            _next_ordinal_to_read += 1;
5226            if next_offset >= end_offset {
5227                return Ok(());
5228            }
5229
5230            // Decode unknown envelopes for gaps in ordinals.
5231            while _next_ordinal_to_read < 2 {
5232                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5233                _next_ordinal_to_read += 1;
5234                next_offset += envelope_size;
5235            }
5236
5237            let next_out_of_line = decoder.next_out_of_line();
5238            let handles_before = decoder.remaining_handles();
5239            if let Some((inlined, num_bytes, num_handles)) =
5240                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5241            {
5242                let member_inline_size =
5243                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
5244                        decoder.context,
5245                    );
5246                if inlined != (member_inline_size <= 4) {
5247                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5248                }
5249                let inner_offset;
5250                let mut inner_depth = depth.clone();
5251                if inlined {
5252                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5253                    inner_offset = next_offset;
5254                } else {
5255                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5256                    inner_depth.increment()?;
5257                }
5258                let val_ref = self
5259                    .driver_url_suffix
5260                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
5261                fidl::decode!(
5262                    fidl::encoding::UnboundedString,
5263                    D,
5264                    val_ref,
5265                    decoder,
5266                    inner_offset,
5267                    inner_depth
5268                )?;
5269                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5270                {
5271                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5272                }
5273                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5274                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5275                }
5276            }
5277
5278            next_offset += envelope_size;
5279
5280            // Decode the remaining unknown envelopes.
5281            while next_offset < end_offset {
5282                _next_ordinal_to_read += 1;
5283                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5284                next_offset += envelope_size;
5285            }
5286
5287            Ok(())
5288        }
5289    }
5290
5291    impl NodeSymbol {
5292        #[inline(always)]
5293        fn max_ordinal_present(&self) -> u64 {
5294            if let Some(_) = self.module_name {
5295                return 3;
5296            }
5297            if let Some(_) = self.address {
5298                return 2;
5299            }
5300            if let Some(_) = self.name {
5301                return 1;
5302            }
5303            0
5304        }
5305    }
5306
5307    impl fidl::encoding::ValueTypeMarker for NodeSymbol {
5308        type Borrowed<'a> = &'a Self;
5309        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5310            value
5311        }
5312    }
5313
5314    unsafe impl fidl::encoding::TypeMarker for NodeSymbol {
5315        type Owned = Self;
5316
5317        #[inline(always)]
5318        fn inline_align(_context: fidl::encoding::Context) -> usize {
5319            8
5320        }
5321
5322        #[inline(always)]
5323        fn inline_size(_context: fidl::encoding::Context) -> usize {
5324            16
5325        }
5326    }
5327
5328    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeSymbol, D>
5329        for &NodeSymbol
5330    {
5331        unsafe fn encode(
5332            self,
5333            encoder: &mut fidl::encoding::Encoder<'_, D>,
5334            offset: usize,
5335            mut depth: fidl::encoding::Depth,
5336        ) -> fidl::Result<()> {
5337            encoder.debug_check_bounds::<NodeSymbol>(offset);
5338            // Vector header
5339            let max_ordinal: u64 = self.max_ordinal_present();
5340            encoder.write_num(max_ordinal, offset);
5341            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5342            // Calling encoder.out_of_line_offset(0) is not allowed.
5343            if max_ordinal == 0 {
5344                return Ok(());
5345            }
5346            depth.increment()?;
5347            let envelope_size = 8;
5348            let bytes_len = max_ordinal as usize * envelope_size;
5349            #[allow(unused_variables)]
5350            let offset = encoder.out_of_line_offset(bytes_len);
5351            let mut _prev_end_offset: usize = 0;
5352            if 1 > max_ordinal {
5353                return Ok(());
5354            }
5355
5356            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5357            // are envelope_size bytes.
5358            let cur_offset: usize = (1 - 1) * envelope_size;
5359
5360            // Zero reserved fields.
5361            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5362
5363            // Safety:
5364            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5365            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5366            //   envelope_size bytes, there is always sufficient room.
5367            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
5368                self.name.as_ref().map(
5369                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
5370                ),
5371                encoder,
5372                offset + cur_offset,
5373                depth,
5374            )?;
5375
5376            _prev_end_offset = cur_offset + envelope_size;
5377            if 2 > max_ordinal {
5378                return Ok(());
5379            }
5380
5381            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5382            // are envelope_size bytes.
5383            let cur_offset: usize = (2 - 1) * envelope_size;
5384
5385            // Zero reserved fields.
5386            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5387
5388            // Safety:
5389            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5390            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5391            //   envelope_size bytes, there is always sufficient room.
5392            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5393                self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5394                encoder,
5395                offset + cur_offset,
5396                depth,
5397            )?;
5398
5399            _prev_end_offset = cur_offset + envelope_size;
5400            if 3 > max_ordinal {
5401                return Ok(());
5402            }
5403
5404            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5405            // are envelope_size bytes.
5406            let cur_offset: usize = (3 - 1) * envelope_size;
5407
5408            // Zero reserved fields.
5409            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5410
5411            // Safety:
5412            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5413            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5414            //   envelope_size bytes, there is always sufficient room.
5415            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
5416                self.module_name.as_ref().map(
5417                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
5418                ),
5419                encoder,
5420                offset + cur_offset,
5421                depth,
5422            )?;
5423
5424            _prev_end_offset = cur_offset + envelope_size;
5425
5426            Ok(())
5427        }
5428    }
5429
5430    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeSymbol {
5431        #[inline(always)]
5432        fn new_empty() -> Self {
5433            Self::default()
5434        }
5435
5436        unsafe fn decode(
5437            &mut self,
5438            decoder: &mut fidl::encoding::Decoder<'_, D>,
5439            offset: usize,
5440            mut depth: fidl::encoding::Depth,
5441        ) -> fidl::Result<()> {
5442            decoder.debug_check_bounds::<Self>(offset);
5443            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5444                None => return Err(fidl::Error::NotNullable),
5445                Some(len) => len,
5446            };
5447            // Calling decoder.out_of_line_offset(0) is not allowed.
5448            if len == 0 {
5449                return Ok(());
5450            };
5451            depth.increment()?;
5452            let envelope_size = 8;
5453            let bytes_len = len * envelope_size;
5454            let offset = decoder.out_of_line_offset(bytes_len)?;
5455            // Decode the envelope for each type.
5456            let mut _next_ordinal_to_read = 0;
5457            let mut next_offset = offset;
5458            let end_offset = offset + bytes_len;
5459            _next_ordinal_to_read += 1;
5460            if next_offset >= end_offset {
5461                return Ok(());
5462            }
5463
5464            // Decode unknown envelopes for gaps in ordinals.
5465            while _next_ordinal_to_read < 1 {
5466                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5467                _next_ordinal_to_read += 1;
5468                next_offset += envelope_size;
5469            }
5470
5471            let next_out_of_line = decoder.next_out_of_line();
5472            let handles_before = decoder.remaining_handles();
5473            if let Some((inlined, num_bytes, num_handles)) =
5474                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5475            {
5476                let member_inline_size =
5477                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
5478                        decoder.context,
5479                    );
5480                if inlined != (member_inline_size <= 4) {
5481                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5482                }
5483                let inner_offset;
5484                let mut inner_depth = depth.clone();
5485                if inlined {
5486                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5487                    inner_offset = next_offset;
5488                } else {
5489                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5490                    inner_depth.increment()?;
5491                }
5492                let val_ref = self
5493                    .name
5494                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
5495                fidl::decode!(
5496                    fidl::encoding::BoundedString<128>,
5497                    D,
5498                    val_ref,
5499                    decoder,
5500                    inner_offset,
5501                    inner_depth
5502                )?;
5503                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5504                {
5505                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5506                }
5507                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5508                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5509                }
5510            }
5511
5512            next_offset += envelope_size;
5513            _next_ordinal_to_read += 1;
5514            if next_offset >= end_offset {
5515                return Ok(());
5516            }
5517
5518            // Decode unknown envelopes for gaps in ordinals.
5519            while _next_ordinal_to_read < 2 {
5520                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5521                _next_ordinal_to_read += 1;
5522                next_offset += envelope_size;
5523            }
5524
5525            let next_out_of_line = decoder.next_out_of_line();
5526            let handles_before = decoder.remaining_handles();
5527            if let Some((inlined, num_bytes, num_handles)) =
5528                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5529            {
5530                let member_inline_size =
5531                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5532                if inlined != (member_inline_size <= 4) {
5533                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5534                }
5535                let inner_offset;
5536                let mut inner_depth = depth.clone();
5537                if inlined {
5538                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5539                    inner_offset = next_offset;
5540                } else {
5541                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5542                    inner_depth.increment()?;
5543                }
5544                let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
5545                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5546                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5547                {
5548                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5549                }
5550                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5551                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5552                }
5553            }
5554
5555            next_offset += envelope_size;
5556            _next_ordinal_to_read += 1;
5557            if next_offset >= end_offset {
5558                return Ok(());
5559            }
5560
5561            // Decode unknown envelopes for gaps in ordinals.
5562            while _next_ordinal_to_read < 3 {
5563                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5564                _next_ordinal_to_read += 1;
5565                next_offset += envelope_size;
5566            }
5567
5568            let next_out_of_line = decoder.next_out_of_line();
5569            let handles_before = decoder.remaining_handles();
5570            if let Some((inlined, num_bytes, num_handles)) =
5571                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5572            {
5573                let member_inline_size =
5574                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
5575                        decoder.context,
5576                    );
5577                if inlined != (member_inline_size <= 4) {
5578                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5579                }
5580                let inner_offset;
5581                let mut inner_depth = depth.clone();
5582                if inlined {
5583                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5584                    inner_offset = next_offset;
5585                } else {
5586                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5587                    inner_depth.increment()?;
5588                }
5589                let val_ref = self
5590                    .module_name
5591                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
5592                fidl::decode!(
5593                    fidl::encoding::BoundedString<128>,
5594                    D,
5595                    val_ref,
5596                    decoder,
5597                    inner_offset,
5598                    inner_depth
5599                )?;
5600                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5601                {
5602                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5603                }
5604                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5605                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5606                }
5607            }
5608
5609            next_offset += envelope_size;
5610
5611            // Decode the remaining unknown envelopes.
5612            while next_offset < end_offset {
5613                _next_ordinal_to_read += 1;
5614                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5615                next_offset += envelope_size;
5616            }
5617
5618            Ok(())
5619        }
5620    }
5621
5622    impl fidl::encoding::ValueTypeMarker for DeviceAddress {
5623        type Borrowed<'a> = &'a Self;
5624        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5625            value
5626        }
5627    }
5628
5629    unsafe impl fidl::encoding::TypeMarker for DeviceAddress {
5630        type Owned = Self;
5631
5632        #[inline(always)]
5633        fn inline_align(_context: fidl::encoding::Context) -> usize {
5634            8
5635        }
5636
5637        #[inline(always)]
5638        fn inline_size(_context: fidl::encoding::Context) -> usize {
5639            16
5640        }
5641    }
5642
5643    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceAddress, D>
5644        for &DeviceAddress
5645    {
5646        #[inline]
5647        unsafe fn encode(
5648            self,
5649            encoder: &mut fidl::encoding::Encoder<'_, D>,
5650            offset: usize,
5651            _depth: fidl::encoding::Depth,
5652        ) -> fidl::Result<()> {
5653            encoder.debug_check_bounds::<DeviceAddress>(offset);
5654            encoder.write_num::<u64>(self.ordinal(), offset);
5655            match self {
5656            DeviceAddress::IntValue(ref val) => {
5657                fidl::encoding::encode_in_envelope::<u8, D>(
5658                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(val),
5659                    encoder, offset + 8, _depth
5660                )
5661            }
5662            DeviceAddress::ArrayIntValue(ref val) => {
5663                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<u8, 10>, D>(
5664                    <fidl::encoding::Vector<u8, 10> as fidl::encoding::ValueTypeMarker>::borrow(val),
5665                    encoder, offset + 8, _depth
5666                )
5667            }
5668            DeviceAddress::CharIntValue(ref val) => {
5669                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4>, D>(
5670                    <fidl::encoding::BoundedString<4> as fidl::encoding::ValueTypeMarker>::borrow(val),
5671                    encoder, offset + 8, _depth
5672                )
5673            }
5674            DeviceAddress::ArrayCharIntValue(ref val) => {
5675                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>, D>(
5676                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10> as fidl::encoding::ValueTypeMarker>::borrow(val),
5677                    encoder, offset + 8, _depth
5678                )
5679            }
5680            DeviceAddress::StringValue(ref val) => {
5681                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<32>, D>(
5682                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(val),
5683                    encoder, offset + 8, _depth
5684                )
5685            }
5686            DeviceAddress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
5687        }
5688        }
5689    }
5690
5691    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceAddress {
5692        #[inline(always)]
5693        fn new_empty() -> Self {
5694            Self::__SourceBreaking { unknown_ordinal: 0 }
5695        }
5696
5697        #[inline]
5698        unsafe fn decode(
5699            &mut self,
5700            decoder: &mut fidl::encoding::Decoder<'_, D>,
5701            offset: usize,
5702            mut depth: fidl::encoding::Depth,
5703        ) -> fidl::Result<()> {
5704            decoder.debug_check_bounds::<Self>(offset);
5705            #[allow(unused_variables)]
5706            let next_out_of_line = decoder.next_out_of_line();
5707            let handles_before = decoder.remaining_handles();
5708            let (ordinal, inlined, num_bytes, num_handles) =
5709                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5710
5711            let member_inline_size = match ordinal {
5712            1 => <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5713            2 => <fidl::encoding::Vector<u8, 10> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5714            3 => <fidl::encoding::BoundedString<4> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5715            4 => <fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5716            5 => <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5717            0 => return Err(fidl::Error::UnknownUnionTag),
5718            _ => num_bytes as usize,
5719        };
5720
5721            if inlined != (member_inline_size <= 4) {
5722                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5723            }
5724            let _inner_offset;
5725            if inlined {
5726                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5727                _inner_offset = offset + 8;
5728            } else {
5729                depth.increment()?;
5730                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5731            }
5732            match ordinal {
5733                1 => {
5734                    #[allow(irrefutable_let_patterns)]
5735                    if let DeviceAddress::IntValue(_) = self {
5736                        // Do nothing, read the value into the object
5737                    } else {
5738                        // Initialize `self` to the right variant
5739                        *self = DeviceAddress::IntValue(fidl::new_empty!(u8, D));
5740                    }
5741                    #[allow(irrefutable_let_patterns)]
5742                    if let DeviceAddress::IntValue(ref mut val) = self {
5743                        fidl::decode!(u8, D, val, decoder, _inner_offset, depth)?;
5744                    } else {
5745                        unreachable!()
5746                    }
5747                }
5748                2 => {
5749                    #[allow(irrefutable_let_patterns)]
5750                    if let DeviceAddress::ArrayIntValue(_) = self {
5751                        // Do nothing, read the value into the object
5752                    } else {
5753                        // Initialize `self` to the right variant
5754                        *self = DeviceAddress::ArrayIntValue(
5755                            fidl::new_empty!(fidl::encoding::Vector<u8, 10>, D),
5756                        );
5757                    }
5758                    #[allow(irrefutable_let_patterns)]
5759                    if let DeviceAddress::ArrayIntValue(ref mut val) = self {
5760                        fidl::decode!(fidl::encoding::Vector<u8, 10>, D, val, decoder, _inner_offset, depth)?;
5761                    } else {
5762                        unreachable!()
5763                    }
5764                }
5765                3 => {
5766                    #[allow(irrefutable_let_patterns)]
5767                    if let DeviceAddress::CharIntValue(_) = self {
5768                        // Do nothing, read the value into the object
5769                    } else {
5770                        // Initialize `self` to the right variant
5771                        *self = DeviceAddress::CharIntValue(fidl::new_empty!(
5772                            fidl::encoding::BoundedString<4>,
5773                            D
5774                        ));
5775                    }
5776                    #[allow(irrefutable_let_patterns)]
5777                    if let DeviceAddress::CharIntValue(ref mut val) = self {
5778                        fidl::decode!(
5779                            fidl::encoding::BoundedString<4>,
5780                            D,
5781                            val,
5782                            decoder,
5783                            _inner_offset,
5784                            depth
5785                        )?;
5786                    } else {
5787                        unreachable!()
5788                    }
5789                }
5790                4 => {
5791                    #[allow(irrefutable_let_patterns)]
5792                    if let DeviceAddress::ArrayCharIntValue(_) = self {
5793                        // Do nothing, read the value into the object
5794                    } else {
5795                        // Initialize `self` to the right variant
5796                        *self = DeviceAddress::ArrayCharIntValue(fidl::new_empty!(
5797                            fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>,
5798                            D
5799                        ));
5800                    }
5801                    #[allow(irrefutable_let_patterns)]
5802                    if let DeviceAddress::ArrayCharIntValue(ref mut val) = self {
5803                        fidl::decode!(
5804                            fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>,
5805                            D,
5806                            val,
5807                            decoder,
5808                            _inner_offset,
5809                            depth
5810                        )?;
5811                    } else {
5812                        unreachable!()
5813                    }
5814                }
5815                5 => {
5816                    #[allow(irrefutable_let_patterns)]
5817                    if let DeviceAddress::StringValue(_) = self {
5818                        // Do nothing, read the value into the object
5819                    } else {
5820                        // Initialize `self` to the right variant
5821                        *self = DeviceAddress::StringValue(fidl::new_empty!(
5822                            fidl::encoding::BoundedString<32>,
5823                            D
5824                        ));
5825                    }
5826                    #[allow(irrefutable_let_patterns)]
5827                    if let DeviceAddress::StringValue(ref mut val) = self {
5828                        fidl::decode!(
5829                            fidl::encoding::BoundedString<32>,
5830                            D,
5831                            val,
5832                            decoder,
5833                            _inner_offset,
5834                            depth
5835                        )?;
5836                    } else {
5837                        unreachable!()
5838                    }
5839                }
5840                #[allow(deprecated)]
5841                ordinal => {
5842                    for _ in 0..num_handles {
5843                        decoder.drop_next_handle()?;
5844                    }
5845                    *self = DeviceAddress::__SourceBreaking { unknown_ordinal: ordinal };
5846                }
5847            }
5848            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5849                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5850            }
5851            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5852                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5853            }
5854            Ok(())
5855        }
5856    }
5857
5858    impl fidl::encoding::ValueTypeMarker for NodePropertyKey {
5859        type Borrowed<'a> = &'a Self;
5860        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5861            value
5862        }
5863    }
5864
5865    unsafe impl fidl::encoding::TypeMarker for NodePropertyKey {
5866        type Owned = Self;
5867
5868        #[inline(always)]
5869        fn inline_align(_context: fidl::encoding::Context) -> usize {
5870            8
5871        }
5872
5873        #[inline(always)]
5874        fn inline_size(_context: fidl::encoding::Context) -> usize {
5875            16
5876        }
5877    }
5878
5879    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyKey, D>
5880        for &NodePropertyKey
5881    {
5882        #[inline]
5883        unsafe fn encode(
5884            self,
5885            encoder: &mut fidl::encoding::Encoder<'_, D>,
5886            offset: usize,
5887            _depth: fidl::encoding::Depth,
5888        ) -> fidl::Result<()> {
5889            encoder.debug_check_bounds::<NodePropertyKey>(offset);
5890            encoder.write_num::<u64>(self.ordinal(), offset);
5891            match self {
5892                NodePropertyKey::IntValue(ref val) => fidl::encoding::encode_in_envelope::<u32, D>(
5893                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
5894                    encoder,
5895                    offset + 8,
5896                    _depth,
5897                ),
5898                NodePropertyKey::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
5899                    fidl::encoding::BoundedString<256>,
5900                    D,
5901                >(
5902                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
5903                        val,
5904                    ),
5905                    encoder,
5906                    offset + 8,
5907                    _depth,
5908                ),
5909            }
5910        }
5911    }
5912
5913    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyKey {
5914        #[inline(always)]
5915        fn new_empty() -> Self {
5916            Self::IntValue(fidl::new_empty!(u32, D))
5917        }
5918
5919        #[inline]
5920        unsafe fn decode(
5921            &mut self,
5922            decoder: &mut fidl::encoding::Decoder<'_, D>,
5923            offset: usize,
5924            mut depth: fidl::encoding::Depth,
5925        ) -> fidl::Result<()> {
5926            decoder.debug_check_bounds::<Self>(offset);
5927            #[allow(unused_variables)]
5928            let next_out_of_line = decoder.next_out_of_line();
5929            let handles_before = decoder.remaining_handles();
5930            let (ordinal, inlined, num_bytes, num_handles) =
5931                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
5932
5933            let member_inline_size = match ordinal {
5934                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
5935                2 => {
5936                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
5937                        decoder.context,
5938                    )
5939                }
5940                _ => return Err(fidl::Error::UnknownUnionTag),
5941            };
5942
5943            if inlined != (member_inline_size <= 4) {
5944                return Err(fidl::Error::InvalidInlineBitInEnvelope);
5945            }
5946            let _inner_offset;
5947            if inlined {
5948                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
5949                _inner_offset = offset + 8;
5950            } else {
5951                depth.increment()?;
5952                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5953            }
5954            match ordinal {
5955                1 => {
5956                    #[allow(irrefutable_let_patterns)]
5957                    if let NodePropertyKey::IntValue(_) = self {
5958                        // Do nothing, read the value into the object
5959                    } else {
5960                        // Initialize `self` to the right variant
5961                        *self = NodePropertyKey::IntValue(fidl::new_empty!(u32, D));
5962                    }
5963                    #[allow(irrefutable_let_patterns)]
5964                    if let NodePropertyKey::IntValue(ref mut val) = self {
5965                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
5966                    } else {
5967                        unreachable!()
5968                    }
5969                }
5970                2 => {
5971                    #[allow(irrefutable_let_patterns)]
5972                    if let NodePropertyKey::StringValue(_) = self {
5973                        // Do nothing, read the value into the object
5974                    } else {
5975                        // Initialize `self` to the right variant
5976                        *self = NodePropertyKey::StringValue(fidl::new_empty!(
5977                            fidl::encoding::BoundedString<256>,
5978                            D
5979                        ));
5980                    }
5981                    #[allow(irrefutable_let_patterns)]
5982                    if let NodePropertyKey::StringValue(ref mut val) = self {
5983                        fidl::decode!(
5984                            fidl::encoding::BoundedString<256>,
5985                            D,
5986                            val,
5987                            decoder,
5988                            _inner_offset,
5989                            depth
5990                        )?;
5991                    } else {
5992                        unreachable!()
5993                    }
5994                }
5995                ordinal => panic!("unexpected ordinal {:?}", ordinal),
5996            }
5997            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
5998                return Err(fidl::Error::InvalidNumBytesInEnvelope);
5999            }
6000            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6001                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6002            }
6003            Ok(())
6004        }
6005    }
6006
6007    impl fidl::encoding::ValueTypeMarker for NodePropertyValue {
6008        type Borrowed<'a> = &'a Self;
6009        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6010            value
6011        }
6012    }
6013
6014    unsafe impl fidl::encoding::TypeMarker for NodePropertyValue {
6015        type Owned = Self;
6016
6017        #[inline(always)]
6018        fn inline_align(_context: fidl::encoding::Context) -> usize {
6019            8
6020        }
6021
6022        #[inline(always)]
6023        fn inline_size(_context: fidl::encoding::Context) -> usize {
6024            16
6025        }
6026    }
6027
6028    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyValue, D>
6029        for &NodePropertyValue
6030    {
6031        #[inline]
6032        unsafe fn encode(
6033            self,
6034            encoder: &mut fidl::encoding::Encoder<'_, D>,
6035            offset: usize,
6036            _depth: fidl::encoding::Depth,
6037        ) -> fidl::Result<()> {
6038            encoder.debug_check_bounds::<NodePropertyValue>(offset);
6039            encoder.write_num::<u64>(self.ordinal(), offset);
6040            match self {
6041                NodePropertyValue::IntValue(ref val) => {
6042                    fidl::encoding::encode_in_envelope::<u32, D>(
6043                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
6044                        encoder,
6045                        offset + 8,
6046                        _depth,
6047                    )
6048                }
6049                NodePropertyValue::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
6050                    fidl::encoding::BoundedString<256>,
6051                    D,
6052                >(
6053                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
6054                        val,
6055                    ),
6056                    encoder,
6057                    offset + 8,
6058                    _depth,
6059                ),
6060                NodePropertyValue::BoolValue(ref val) => {
6061                    fidl::encoding::encode_in_envelope::<bool, D>(
6062                        <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
6063                        encoder,
6064                        offset + 8,
6065                        _depth,
6066                    )
6067                }
6068                NodePropertyValue::EnumValue(ref val) => fidl::encoding::encode_in_envelope::<
6069                    fidl::encoding::BoundedString<256>,
6070                    D,
6071                >(
6072                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
6073                        val,
6074                    ),
6075                    encoder,
6076                    offset + 8,
6077                    _depth,
6078                ),
6079                NodePropertyValue::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
6080            }
6081        }
6082    }
6083
6084    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyValue {
6085        #[inline(always)]
6086        fn new_empty() -> Self {
6087            Self::__SourceBreaking { unknown_ordinal: 0 }
6088        }
6089
6090        #[inline]
6091        unsafe fn decode(
6092            &mut self,
6093            decoder: &mut fidl::encoding::Decoder<'_, D>,
6094            offset: usize,
6095            mut depth: fidl::encoding::Depth,
6096        ) -> fidl::Result<()> {
6097            decoder.debug_check_bounds::<Self>(offset);
6098            #[allow(unused_variables)]
6099            let next_out_of_line = decoder.next_out_of_line();
6100            let handles_before = decoder.remaining_handles();
6101            let (ordinal, inlined, num_bytes, num_handles) =
6102                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
6103
6104            let member_inline_size = match ordinal {
6105                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6106                2 => {
6107                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6108                        decoder.context,
6109                    )
6110                }
6111                3 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6112                4 => {
6113                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
6114                        decoder.context,
6115                    )
6116                }
6117                0 => return Err(fidl::Error::UnknownUnionTag),
6118                _ => num_bytes as usize,
6119            };
6120
6121            if inlined != (member_inline_size <= 4) {
6122                return Err(fidl::Error::InvalidInlineBitInEnvelope);
6123            }
6124            let _inner_offset;
6125            if inlined {
6126                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
6127                _inner_offset = offset + 8;
6128            } else {
6129                depth.increment()?;
6130                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6131            }
6132            match ordinal {
6133                1 => {
6134                    #[allow(irrefutable_let_patterns)]
6135                    if let NodePropertyValue::IntValue(_) = self {
6136                        // Do nothing, read the value into the object
6137                    } else {
6138                        // Initialize `self` to the right variant
6139                        *self = NodePropertyValue::IntValue(fidl::new_empty!(u32, D));
6140                    }
6141                    #[allow(irrefutable_let_patterns)]
6142                    if let NodePropertyValue::IntValue(ref mut val) = self {
6143                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
6144                    } else {
6145                        unreachable!()
6146                    }
6147                }
6148                2 => {
6149                    #[allow(irrefutable_let_patterns)]
6150                    if let NodePropertyValue::StringValue(_) = self {
6151                        // Do nothing, read the value into the object
6152                    } else {
6153                        // Initialize `self` to the right variant
6154                        *self = NodePropertyValue::StringValue(fidl::new_empty!(
6155                            fidl::encoding::BoundedString<256>,
6156                            D
6157                        ));
6158                    }
6159                    #[allow(irrefutable_let_patterns)]
6160                    if let NodePropertyValue::StringValue(ref mut val) = self {
6161                        fidl::decode!(
6162                            fidl::encoding::BoundedString<256>,
6163                            D,
6164                            val,
6165                            decoder,
6166                            _inner_offset,
6167                            depth
6168                        )?;
6169                    } else {
6170                        unreachable!()
6171                    }
6172                }
6173                3 => {
6174                    #[allow(irrefutable_let_patterns)]
6175                    if let NodePropertyValue::BoolValue(_) = self {
6176                        // Do nothing, read the value into the object
6177                    } else {
6178                        // Initialize `self` to the right variant
6179                        *self = NodePropertyValue::BoolValue(fidl::new_empty!(bool, D));
6180                    }
6181                    #[allow(irrefutable_let_patterns)]
6182                    if let NodePropertyValue::BoolValue(ref mut val) = self {
6183                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
6184                    } else {
6185                        unreachable!()
6186                    }
6187                }
6188                4 => {
6189                    #[allow(irrefutable_let_patterns)]
6190                    if let NodePropertyValue::EnumValue(_) = self {
6191                        // Do nothing, read the value into the object
6192                    } else {
6193                        // Initialize `self` to the right variant
6194                        *self = NodePropertyValue::EnumValue(fidl::new_empty!(
6195                            fidl::encoding::BoundedString<256>,
6196                            D
6197                        ));
6198                    }
6199                    #[allow(irrefutable_let_patterns)]
6200                    if let NodePropertyValue::EnumValue(ref mut val) = self {
6201                        fidl::decode!(
6202                            fidl::encoding::BoundedString<256>,
6203                            D,
6204                            val,
6205                            decoder,
6206                            _inner_offset,
6207                            depth
6208                        )?;
6209                    } else {
6210                        unreachable!()
6211                    }
6212                }
6213                #[allow(deprecated)]
6214                ordinal => {
6215                    for _ in 0..num_handles {
6216                        decoder.drop_next_handle()?;
6217                    }
6218                    *self = NodePropertyValue::__SourceBreaking { unknown_ordinal: ordinal };
6219                }
6220            }
6221            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
6222                return Err(fidl::Error::InvalidNumBytesInEnvelope);
6223            }
6224            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6225                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6226            }
6227            Ok(())
6228        }
6229    }
6230
6231    impl fidl::encoding::ValueTypeMarker for Offer {
6232        type Borrowed<'a> = &'a Self;
6233        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6234            value
6235        }
6236    }
6237
6238    unsafe impl fidl::encoding::TypeMarker for Offer {
6239        type Owned = Self;
6240
6241        #[inline(always)]
6242        fn inline_align(_context: fidl::encoding::Context) -> usize {
6243            8
6244        }
6245
6246        #[inline(always)]
6247        fn inline_size(_context: fidl::encoding::Context) -> usize {
6248            16
6249        }
6250    }
6251
6252    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Offer, D> for &Offer {
6253        #[inline]
6254        unsafe fn encode(
6255            self,
6256            encoder: &mut fidl::encoding::Encoder<'_, D>,
6257            offset: usize,
6258            _depth: fidl::encoding::Depth,
6259        ) -> fidl::Result<()> {
6260            encoder.debug_check_bounds::<Offer>(offset);
6261            encoder.write_num::<u64>(self.ordinal(), offset);
6262            match self {
6263            Offer::ZirconTransport(ref val) => {
6264                fidl::encoding::encode_in_envelope::<fidl_fuchsia_component_decl__common::Offer, D>(
6265                    <fidl_fuchsia_component_decl__common::Offer as fidl::encoding::ValueTypeMarker>::borrow(val),
6266                    encoder, offset + 8, _depth
6267                )
6268            }
6269            Offer::DriverTransport(ref val) => {
6270                fidl::encoding::encode_in_envelope::<fidl_fuchsia_component_decl__common::Offer, D>(
6271                    <fidl_fuchsia_component_decl__common::Offer as fidl::encoding::ValueTypeMarker>::borrow(val),
6272                    encoder, offset + 8, _depth
6273                )
6274            }
6275            Offer::DictionaryOffer(ref val) => {
6276                fidl::encoding::encode_in_envelope::<fidl_fuchsia_component_decl__common::Offer, D>(
6277                    <fidl_fuchsia_component_decl__common::Offer as fidl::encoding::ValueTypeMarker>::borrow(val),
6278                    encoder, offset + 8, _depth
6279                )
6280            }
6281            Offer::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
6282        }
6283        }
6284    }
6285
6286    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Offer {
6287        #[inline(always)]
6288        fn new_empty() -> Self {
6289            Self::__SourceBreaking { unknown_ordinal: 0 }
6290        }
6291
6292        #[inline]
6293        unsafe fn decode(
6294            &mut self,
6295            decoder: &mut fidl::encoding::Decoder<'_, D>,
6296            offset: usize,
6297            mut depth: fidl::encoding::Depth,
6298        ) -> fidl::Result<()> {
6299            decoder.debug_check_bounds::<Self>(offset);
6300            #[allow(unused_variables)]
6301            let next_out_of_line = decoder.next_out_of_line();
6302            let handles_before = decoder.remaining_handles();
6303            let (ordinal, inlined, num_bytes, num_handles) =
6304                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
6305
6306            let member_inline_size = match ordinal {
6307            1 => <fidl_fuchsia_component_decl__common::Offer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6308            2 => <fidl_fuchsia_component_decl__common::Offer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6309            3 => <fidl_fuchsia_component_decl__common::Offer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
6310            0 => return Err(fidl::Error::UnknownUnionTag),
6311            _ => num_bytes as usize,
6312        };
6313
6314            if inlined != (member_inline_size <= 4) {
6315                return Err(fidl::Error::InvalidInlineBitInEnvelope);
6316            }
6317            let _inner_offset;
6318            if inlined {
6319                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
6320                _inner_offset = offset + 8;
6321            } else {
6322                depth.increment()?;
6323                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6324            }
6325            match ordinal {
6326                1 => {
6327                    #[allow(irrefutable_let_patterns)]
6328                    if let Offer::ZirconTransport(_) = self {
6329                        // Do nothing, read the value into the object
6330                    } else {
6331                        // Initialize `self` to the right variant
6332                        *self = Offer::ZirconTransport(fidl::new_empty!(
6333                            fidl_fuchsia_component_decl__common::Offer,
6334                            D
6335                        ));
6336                    }
6337                    #[allow(irrefutable_let_patterns)]
6338                    if let Offer::ZirconTransport(ref mut val) = self {
6339                        fidl::decode!(
6340                            fidl_fuchsia_component_decl__common::Offer,
6341                            D,
6342                            val,
6343                            decoder,
6344                            _inner_offset,
6345                            depth
6346                        )?;
6347                    } else {
6348                        unreachable!()
6349                    }
6350                }
6351                2 => {
6352                    #[allow(irrefutable_let_patterns)]
6353                    if let Offer::DriverTransport(_) = self {
6354                        // Do nothing, read the value into the object
6355                    } else {
6356                        // Initialize `self` to the right variant
6357                        *self = Offer::DriverTransport(fidl::new_empty!(
6358                            fidl_fuchsia_component_decl__common::Offer,
6359                            D
6360                        ));
6361                    }
6362                    #[allow(irrefutable_let_patterns)]
6363                    if let Offer::DriverTransport(ref mut val) = self {
6364                        fidl::decode!(
6365                            fidl_fuchsia_component_decl__common::Offer,
6366                            D,
6367                            val,
6368                            decoder,
6369                            _inner_offset,
6370                            depth
6371                        )?;
6372                    } else {
6373                        unreachable!()
6374                    }
6375                }
6376                3 => {
6377                    #[allow(irrefutable_let_patterns)]
6378                    if let Offer::DictionaryOffer(_) = self {
6379                        // Do nothing, read the value into the object
6380                    } else {
6381                        // Initialize `self` to the right variant
6382                        *self = Offer::DictionaryOffer(fidl::new_empty!(
6383                            fidl_fuchsia_component_decl__common::Offer,
6384                            D
6385                        ));
6386                    }
6387                    #[allow(irrefutable_let_patterns)]
6388                    if let Offer::DictionaryOffer(ref mut val) = self {
6389                        fidl::decode!(
6390                            fidl_fuchsia_component_decl__common::Offer,
6391                            D,
6392                            val,
6393                            decoder,
6394                            _inner_offset,
6395                            depth
6396                        )?;
6397                    } else {
6398                        unreachable!()
6399                    }
6400                }
6401                #[allow(deprecated)]
6402                ordinal => {
6403                    for _ in 0..num_handles {
6404                        decoder.drop_next_handle()?;
6405                    }
6406                    *self = Offer::__SourceBreaking { unknown_ordinal: ordinal };
6407                }
6408            }
6409            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
6410                return Err(fidl::Error::InvalidNumBytesInEnvelope);
6411            }
6412            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6413                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6414            }
6415            Ok(())
6416        }
6417    }
6418}