fidl_fuchsia_driver_framework__common/
fidl_fuchsia_driver_framework__common.rs

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