Skip to main content

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