Skip to main content

fidl_fuchsia_driver_framework__common/
fidl_fuchsia_driver_framework__common.rs

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