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