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