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