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