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