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 NodePropertyDictionary2 = Vec<NodePropertyEntry2>;
18
19pub type NodePropertyKeyString = String;
20
21pub type NodePropertyKeyUint = u32;
22
23pub type NodePropertyValueBool = bool;
24
25pub type NodePropertyValueEnum = String;
26
27pub type NodePropertyValueString = String;
28
29pub type NodePropertyValueUint = u32;
30
31pub type ResourceName = String;
32
33pub type ResourceProperties = Vec<NodeProperty2>;
34
35pub type ResourcePropertyValue = NodePropertyValue;
36
37pub type ResourcePropertyValueBool = bool;
38
39pub type ResourcePropertyValueString = String;
40
41pub type ResourcePropertyValueUint = u32;
42
43pub const MAX_DEVICE_ADDRESS_ARRAY_LEN: u32 = 10;
44
45pub const MAX_DEVICE_ADDRESS_STR_LEN: u32 = 32;
46
47pub const MAX_DRIVER_HOST_LENGTH: u8 = 128;
48
49pub const MAX_MODULE_NAME_LENGTH: u8 = 128;
50
51pub const MAX_NAMESPACE_COUNT: u32 =
52    fidl_fuchsia_component_runner_common::MAX_NAMESPACE_COUNT as u32;
53
54pub const MAX_NODE_NAME_LENGTH: u8 = 128;
55
56pub const MAX_OFFER_COUNT: u32 = fidl_fuchsia_component_common::MAX_DYNAMIC_OFFER_COUNT as u32;
57
58pub const MAX_PROPERTY_COUNT: u8 = 64;
59
60pub const MAX_RESOURCE_NAME_LENGTH: u8 = 128;
61
62pub const MAX_SYMBOL_COUNT: u8 = 64;
63
64pub const MAX_SYMBOL_NAME_LENGTH: u8 = 128;
65
66#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
67pub enum BusType {
68    Platform,
69    Acpi,
70    DeviceTree,
71    Pci,
72    Usb,
73    Gpio,
74    I2C,
75    Spi,
76    Sdio,
77    Uart,
78    Spmi,
79    UsbPeripheral,
80    Virtio,
81    #[doc(hidden)]
82    __SourceBreaking {
83        unknown_ordinal: u32,
84    },
85}
86
87/// Pattern that matches an unknown `BusType` member.
88#[macro_export]
89macro_rules! BusTypeUnknown {
90    () => {
91        _
92    };
93}
94
95impl BusType {
96    #[inline]
97    pub fn from_primitive(prim: u32) -> Option<Self> {
98        match prim {
99            1 => Some(Self::Platform),
100            2 => Some(Self::Acpi),
101            3 => Some(Self::DeviceTree),
102            4 => Some(Self::Pci),
103            5 => Some(Self::Usb),
104            6 => Some(Self::Gpio),
105            7 => Some(Self::I2C),
106            8 => Some(Self::Spi),
107            9 => Some(Self::Sdio),
108            10 => Some(Self::Uart),
109            11 => Some(Self::Spmi),
110            12 => Some(Self::UsbPeripheral),
111            13 => Some(Self::Virtio),
112            _ => None,
113        }
114    }
115
116    #[inline]
117    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
118        match prim {
119            1 => Self::Platform,
120            2 => Self::Acpi,
121            3 => Self::DeviceTree,
122            4 => Self::Pci,
123            5 => Self::Usb,
124            6 => Self::Gpio,
125            7 => Self::I2C,
126            8 => Self::Spi,
127            9 => Self::Sdio,
128            10 => Self::Uart,
129            11 => Self::Spmi,
130            12 => Self::UsbPeripheral,
131            13 => Self::Virtio,
132            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
133        }
134    }
135
136    #[inline]
137    pub fn unknown() -> Self {
138        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
139    }
140
141    #[inline]
142    pub const fn into_primitive(self) -> u32 {
143        match self {
144            Self::Platform => 1,
145            Self::Acpi => 2,
146            Self::DeviceTree => 3,
147            Self::Pci => 4,
148            Self::Usb => 5,
149            Self::Gpio => 6,
150            Self::I2C => 7,
151            Self::Spi => 8,
152            Self::Sdio => 9,
153            Self::Uart => 10,
154            Self::Spmi => 11,
155            Self::UsbPeripheral => 12,
156            Self::Virtio => 13,
157            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
158        }
159    }
160
161    #[inline]
162    pub fn is_unknown(&self) -> bool {
163        match self {
164            Self::__SourceBreaking { unknown_ordinal: _ } => true,
165            _ => false,
166        }
167    }
168}
169
170/// Error codes for the CompositeNodeManager protocol.
171#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
172pub enum CompositeNodeSpecError {
173    /// An argument of the composite node spec was not provided.
174    MissingArgs,
175    /// The given composite node spec's `nodes` is empty.
176    EmptyNodes,
177    /// The `name` in the given composite node spec is a duplicate of an already
178    /// created composite node spec.
179    AlreadyExists,
180    /// The spec failed to be added to the driver index.
181    DriverIndexFailure,
182    /// The `parents` and `parents2` fields were both specified.
183    DuplicateParents,
184    #[doc(hidden)]
185    __SourceBreaking { unknown_ordinal: u32 },
186}
187
188/// Pattern that matches an unknown `CompositeNodeSpecError` member.
189#[macro_export]
190macro_rules! CompositeNodeSpecErrorUnknown {
191    () => {
192        _
193    };
194}
195
196impl CompositeNodeSpecError {
197    #[inline]
198    pub fn from_primitive(prim: u32) -> Option<Self> {
199        match prim {
200            1 => Some(Self::MissingArgs),
201            2 => Some(Self::EmptyNodes),
202            3 => Some(Self::AlreadyExists),
203            4 => Some(Self::DriverIndexFailure),
204            5 => Some(Self::DuplicateParents),
205            _ => None,
206        }
207    }
208
209    #[inline]
210    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
211        match prim {
212            1 => Self::MissingArgs,
213            2 => Self::EmptyNodes,
214            3 => Self::AlreadyExists,
215            4 => Self::DriverIndexFailure,
216            5 => Self::DuplicateParents,
217            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
218        }
219    }
220
221    #[inline]
222    pub fn unknown() -> Self {
223        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
224    }
225
226    #[inline]
227    pub const fn into_primitive(self) -> u32 {
228        match self {
229            Self::MissingArgs => 1,
230            Self::EmptyNodes => 2,
231            Self::AlreadyExists => 3,
232            Self::DriverIndexFailure => 4,
233            Self::DuplicateParents => 5,
234            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
235        }
236    }
237
238    #[inline]
239    pub fn is_unknown(&self) -> bool {
240        match self {
241            Self::__SourceBreaking { unknown_ordinal: _ } => true,
242            _ => false,
243        }
244    }
245}
246
247/// Represents a bind rule condition.
248#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
249#[repr(u32)]
250pub enum Condition {
251    Unknown = 0,
252    Accept = 1,
253    Reject = 2,
254}
255
256impl Condition {
257    #[inline]
258    pub fn from_primitive(prim: u32) -> Option<Self> {
259        match prim {
260            0 => Some(Self::Unknown),
261            1 => Some(Self::Accept),
262            2 => Some(Self::Reject),
263            _ => None,
264        }
265    }
266
267    #[inline]
268    pub const fn into_primitive(self) -> u32 {
269        self as u32
270    }
271}
272
273#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
274pub enum DeviceAddressStability {
275    /// When the driver is restarted, the device address may change.
276    UnstableBetweenDriverRestart,
277    /// When the system is restarted, the device address may change.
278    UnstableBetweenBoot,
279    /// When the system is updated, the device address may change.
280    UnstableBetweenSoftwareUpdate,
281    /// The device address on the bus is guaranteed stable for the lifetime of the system.
282    Stable,
283    #[doc(hidden)]
284    __SourceBreaking { unknown_ordinal: u32 },
285}
286
287/// Pattern that matches an unknown `DeviceAddressStability` member.
288#[macro_export]
289macro_rules! DeviceAddressStabilityUnknown {
290    () => {
291        _
292    };
293}
294
295impl DeviceAddressStability {
296    #[inline]
297    pub fn from_primitive(prim: u32) -> Option<Self> {
298        match prim {
299            0 => Some(Self::UnstableBetweenDriverRestart),
300            1 => Some(Self::UnstableBetweenBoot),
301            2 => Some(Self::UnstableBetweenSoftwareUpdate),
302            3 => Some(Self::Stable),
303            _ => None,
304        }
305    }
306
307    #[inline]
308    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
309        match prim {
310            0 => Self::UnstableBetweenDriverRestart,
311            1 => Self::UnstableBetweenBoot,
312            2 => Self::UnstableBetweenSoftwareUpdate,
313            3 => Self::Stable,
314            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
315        }
316    }
317
318    #[inline]
319    pub fn unknown() -> Self {
320        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
321    }
322
323    #[inline]
324    pub const fn into_primitive(self) -> u32 {
325        match self {
326            Self::UnstableBetweenDriverRestart => 0,
327            Self::UnstableBetweenBoot => 1,
328            Self::UnstableBetweenSoftwareUpdate => 2,
329            Self::Stable => 3,
330            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
331        }
332    }
333
334    #[inline]
335    pub fn is_unknown(&self) -> bool {
336        match self {
337            Self::__SourceBreaking { unknown_ordinal: _ } => true,
338            _ => false,
339        }
340    }
341}
342
343/// The type of Fuchsia package that a driver component is inside of.
344/// More details about the various package categories are available at:
345/// https://fuchsia.dev/fuchsia-src/concepts/packages/package#types_of_packages
346#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
347pub enum DriverPackageType {
348    /// BOOT packages are inside the Zircon boot image.
349    Boot,
350    /// BASE packages are included in the Fuchsia build as static local packages.
351    Base,
352    /// CACHED packages are BASE packages that can be updated during a resolve if a full package
353    /// resolver is available.
354    Cached,
355    /// UNIVERSE packages get onto the device only when resolved by the full package resolver.
356    Universe,
357    #[doc(hidden)]
358    __SourceBreaking { unknown_ordinal: u8 },
359}
360
361/// Pattern that matches an unknown `DriverPackageType` member.
362#[macro_export]
363macro_rules! DriverPackageTypeUnknown {
364    () => {
365        _
366    };
367}
368
369impl DriverPackageType {
370    #[inline]
371    pub fn from_primitive(prim: u8) -> Option<Self> {
372        match prim {
373            0 => Some(Self::Boot),
374            1 => Some(Self::Base),
375            2 => Some(Self::Cached),
376            3 => Some(Self::Universe),
377            _ => None,
378        }
379    }
380
381    #[inline]
382    pub fn from_primitive_allow_unknown(prim: u8) -> Self {
383        match prim {
384            0 => Self::Boot,
385            1 => Self::Base,
386            2 => Self::Cached,
387            3 => Self::Universe,
388            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
389        }
390    }
391
392    #[inline]
393    pub fn unknown() -> Self {
394        Self::__SourceBreaking { unknown_ordinal: 0xff }
395    }
396
397    #[inline]
398    pub const fn into_primitive(self) -> u8 {
399        match self {
400            Self::Boot => 0,
401            Self::Base => 1,
402            Self::Cached => 2,
403            Self::Universe => 3,
404            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
405        }
406    }
407
408    #[inline]
409    pub fn is_unknown(&self) -> bool {
410        match self {
411            Self::__SourceBreaking { unknown_ordinal: _ } => true,
412            _ => false,
413        }
414    }
415}
416
417/// Error codes returned when a health check cannot be completed.
418#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
419pub enum HealthCheckError {
420    /// The driver did not respond within the level's deadline (dispatcher wedged).
421    Timeout,
422    /// Internal framework or transport error while routing the check.
423    InternalError,
424    /// The driver or requested `HealthCheckRequest` level is not supported.
425    NotSupported,
426    /// The driver is not in the RUNNING state (e.g., Starting, Stopping, Suspended).
427    InvalidState,
428    /// The requested level cannot be evaluated right now: hardware powered
429    /// off, suspended, not yet initialized, or transiently busy. Consumers
430    /// must treat this as no information, not as unhealthy. `PING` must never
431    /// return this.
432    Unavailable,
433    /// A bus, MMIO, or transport error occurred while performing the check
434    /// itself.
435    CommunicationError,
436    /// No bound node matched the requested moniker (returned by
437    /// `fuchsia.driver.development/Manager.RunHealthCheck`).
438    NotFound,
439    #[doc(hidden)]
440    __SourceBreaking { unknown_ordinal: u32 },
441}
442
443/// Pattern that matches an unknown `HealthCheckError` member.
444#[macro_export]
445macro_rules! HealthCheckErrorUnknown {
446    () => {
447        _
448    };
449}
450
451impl HealthCheckError {
452    #[inline]
453    pub fn from_primitive(prim: u32) -> Option<Self> {
454        match prim {
455            1 => Some(Self::Timeout),
456            2 => Some(Self::InternalError),
457            3 => Some(Self::NotSupported),
458            4 => Some(Self::InvalidState),
459            5 => Some(Self::Unavailable),
460            6 => Some(Self::CommunicationError),
461            7 => Some(Self::NotFound),
462            _ => None,
463        }
464    }
465
466    #[inline]
467    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
468        match prim {
469            1 => Self::Timeout,
470            2 => Self::InternalError,
471            3 => Self::NotSupported,
472            4 => Self::InvalidState,
473            5 => Self::Unavailable,
474            6 => Self::CommunicationError,
475            7 => Self::NotFound,
476            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
477        }
478    }
479
480    #[inline]
481    pub fn unknown() -> Self {
482        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
483    }
484
485    #[inline]
486    pub const fn into_primitive(self) -> u32 {
487        match self {
488            Self::Timeout => 1,
489            Self::InternalError => 2,
490            Self::NotSupported => 3,
491            Self::InvalidState => 4,
492            Self::Unavailable => 5,
493            Self::CommunicationError => 6,
494            Self::NotFound => 7,
495            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
496        }
497    }
498
499    #[inline]
500    pub fn is_unknown(&self) -> bool {
501        match self {
502            Self::__SourceBreaking { unknown_ordinal: _ } => true,
503            _ => false,
504        }
505    }
506}
507
508/// Specifies the depth and latency budget of a driver health check.
509#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
510pub enum HealthCheckRequest {
511    /// Software-only liveness: dispatcher responsive, locks acquirable,
512    /// in-memory state consistent. No bus I/O (I2C/SPI/DSI); MMIO reads only
513    /// if the block is known to be powered and clocked. Must never return
514    /// `UNAVAILABLE`. Recommended: < 1ms. Deadline (enforced by driver-host):
515    /// 250ms.
516    Ping,
517    /// Bounded, non-destructive hardware reads or progress windows (wait one
518    /// frame period for a TE/VSync edge, read a status register over
519    /// I2C/DSI). Must not clear read-on-clear registers or disturb active DMA
520    /// or scanout. Recommended: < 25ms. Deadline: 2s.
521    Fast,
522    /// Extended self-test / BIST. May interrupt active I/O for the duration of
523    /// the check but must restore prior state. Only issued on explicit
524    /// operator request (ffx / lab tests), never during framework-initiated
525    /// sweeps. Recommended: < 10s. Deadline: 2min.
526    Deep,
527    #[doc(hidden)]
528    __SourceBreaking { unknown_ordinal: u32 },
529}
530
531/// Pattern that matches an unknown `HealthCheckRequest` member.
532#[macro_export]
533macro_rules! HealthCheckRequestUnknown {
534    () => {
535        _
536    };
537}
538
539impl HealthCheckRequest {
540    #[inline]
541    pub fn from_primitive(prim: u32) -> Option<Self> {
542        match prim {
543            1 => Some(Self::Ping),
544            2 => Some(Self::Fast),
545            3 => Some(Self::Deep),
546            _ => None,
547        }
548    }
549
550    #[inline]
551    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
552        match prim {
553            1 => Self::Ping,
554            2 => Self::Fast,
555            3 => Self::Deep,
556            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
557        }
558    }
559
560    #[inline]
561    pub fn unknown() -> Self {
562        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
563    }
564
565    #[inline]
566    pub const fn into_primitive(self) -> u32 {
567        match self {
568            Self::Ping => 1,
569            Self::Fast => 2,
570            Self::Deep => 3,
571            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
572        }
573    }
574
575    #[inline]
576    pub fn is_unknown(&self) -> bool {
577        match self {
578            Self::__SourceBreaking { unknown_ordinal: _ } => true,
579            _ => false,
580        }
581    }
582}
583
584/// Operational health status reported for a driver or condition.
585#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
586pub enum HealthStatus {
587    /// Driver and hardware are operating within normal parameters.
588    Ok,
589    /// Driver is functioning but experiencing elevated errors, resource leaks,
590    /// or quality degradation.
591    Degraded,
592    /// Driver or underlying hardware is wedged, unresponsive, or failed initialization.
593    Unhealthy,
594    #[doc(hidden)]
595    __SourceBreaking { unknown_ordinal: u32 },
596}
597
598/// Pattern that matches an unknown `HealthStatus` member.
599#[macro_export]
600macro_rules! HealthStatusUnknown {
601    () => {
602        _
603    };
604}
605
606impl HealthStatus {
607    #[inline]
608    pub fn from_primitive(prim: u32) -> Option<Self> {
609        match prim {
610            1 => Some(Self::Ok),
611            2 => Some(Self::Degraded),
612            3 => Some(Self::Unhealthy),
613            _ => None,
614        }
615    }
616
617    #[inline]
618    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
619        match prim {
620            1 => Self::Ok,
621            2 => Self::Degraded,
622            3 => Self::Unhealthy,
623            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
624        }
625    }
626
627    #[inline]
628    pub fn unknown() -> Self {
629        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
630    }
631
632    #[inline]
633    pub const fn into_primitive(self) -> u32 {
634        match self {
635            Self::Ok => 1,
636            Self::Degraded => 2,
637            Self::Unhealthy => 3,
638            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
639        }
640    }
641
642    #[inline]
643    pub fn is_unknown(&self) -> bool {
644        match self {
645            Self::__SourceBreaking { unknown_ordinal: _ } => true,
646            _ => false,
647        }
648    }
649}
650
651/// Error codes for the Node protocol.
652#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
653pub enum NodeError {
654    Internal,
655    NodeRemoved,
656    NameMissing,
657    /// The Node's name is invalid. Specifically, it must not contain a period
658    /// in its name.
659    NameInvalid,
660    /// A sibling Node exists with the same name.
661    NameAlreadyExists,
662    /// An offer for this Node is missing a source name.
663    OfferSourceNameMissing,
664    /// An offer for this Node should not have a source or target.
665    OfferRefExists,
666    /// A symbol for this Node is missing a name.
667    SymbolNameMissing,
668    /// A symbol for this Node is missing an address.
669    SymbolAddressMissing,
670    /// There is another symbol for this Node with the same name.
671    SymbolAlreadyExists,
672    /// The node is in the process of unbinding all of its children.
673    UnbindChildrenInProgress,
674    /// The Node contains unsupported arguments, such as deprecated property keys or offers.
675    UnsupportedArgs,
676    /// The Node contains multiple properties with the same key.
677    DuplicatePropertyKeys,
678    /// The Node is missing source instance filters,
679    OfferSourceInstanceFilterMissing,
680    /// The Node is missing renamed instances,
681    OfferRenamedInstancesMissing,
682    #[doc(hidden)]
683    __SourceBreaking {
684        unknown_ordinal: u32,
685    },
686}
687
688/// Pattern that matches an unknown `NodeError` member.
689#[macro_export]
690macro_rules! NodeErrorUnknown {
691    () => {
692        _
693    };
694}
695
696impl NodeError {
697    #[inline]
698    pub fn from_primitive(prim: u32) -> Option<Self> {
699        match prim {
700            1 => Some(Self::Internal),
701            2 => Some(Self::NodeRemoved),
702            3 => Some(Self::NameMissing),
703            4 => Some(Self::NameInvalid),
704            5 => Some(Self::NameAlreadyExists),
705            6 => Some(Self::OfferSourceNameMissing),
706            7 => Some(Self::OfferRefExists),
707            8 => Some(Self::SymbolNameMissing),
708            9 => Some(Self::SymbolAddressMissing),
709            10 => Some(Self::SymbolAlreadyExists),
710            11 => Some(Self::UnbindChildrenInProgress),
711            12 => Some(Self::UnsupportedArgs),
712            13 => Some(Self::DuplicatePropertyKeys),
713            14 => Some(Self::OfferSourceInstanceFilterMissing),
714            15 => Some(Self::OfferRenamedInstancesMissing),
715            _ => None,
716        }
717    }
718
719    #[inline]
720    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
721        match prim {
722            1 => Self::Internal,
723            2 => Self::NodeRemoved,
724            3 => Self::NameMissing,
725            4 => Self::NameInvalid,
726            5 => Self::NameAlreadyExists,
727            6 => Self::OfferSourceNameMissing,
728            7 => Self::OfferRefExists,
729            8 => Self::SymbolNameMissing,
730            9 => Self::SymbolAddressMissing,
731            10 => Self::SymbolAlreadyExists,
732            11 => Self::UnbindChildrenInProgress,
733            12 => Self::UnsupportedArgs,
734            13 => Self::DuplicatePropertyKeys,
735            14 => Self::OfferSourceInstanceFilterMissing,
736            15 => Self::OfferRenamedInstancesMissing,
737            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
738        }
739    }
740
741    #[inline]
742    pub fn unknown() -> Self {
743        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
744    }
745
746    #[inline]
747    pub const fn into_primitive(self) -> u32 {
748        match self {
749            Self::Internal => 1,
750            Self::NodeRemoved => 2,
751            Self::NameMissing => 3,
752            Self::NameInvalid => 4,
753            Self::NameAlreadyExists => 5,
754            Self::OfferSourceNameMissing => 6,
755            Self::OfferRefExists => 7,
756            Self::SymbolNameMissing => 8,
757            Self::SymbolAddressMissing => 9,
758            Self::SymbolAlreadyExists => 10,
759            Self::UnbindChildrenInProgress => 11,
760            Self::UnsupportedArgs => 12,
761            Self::DuplicatePropertyKeys => 13,
762            Self::OfferSourceInstanceFilterMissing => 14,
763            Self::OfferRenamedInstancesMissing => 15,
764            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
765        }
766    }
767
768    #[inline]
769    pub fn is_unknown(&self) -> bool {
770        match self {
771            Self::__SourceBreaking { unknown_ordinal: _ } => true,
772            _ => false,
773        }
774    }
775}
776
777/// Represents a bind rule in a parent specification.
778#[derive(Clone, Debug, PartialEq)]
779pub struct BindRule2 {
780    /// Property key.
781    pub key: String,
782    /// Condition for evaluating the property values in
783    /// the matching process. The values must be ACCEPT
784    /// or REJECT.
785    pub condition: Condition,
786    /// A list of property values. Must not be empty. The property
787    /// values must be the same type.
788    pub values: Vec<NodePropertyValue>,
789}
790
791impl fidl::Persistable for BindRule2 {}
792
793/// Key-value diagnostic property captured during a driver health check.
794#[derive(Clone, Debug, PartialEq)]
795pub struct HealthDiagnosticItem {
796    pub key: String,
797    pub value: HealthDiagnosticValue,
798}
799
800impl fidl::Persistable for HealthDiagnosticItem {}
801
802#[derive(Clone, Debug, PartialEq)]
803pub struct NodeProperty2 {
804    /// Property key.
805    pub key: String,
806    /// Property value.
807    pub value: NodePropertyValue,
808}
809
810impl fidl::Persistable for NodeProperty2 {}
811
812/// Contains the node properties that belong to a node.
813#[derive(Clone, Debug, PartialEq)]
814pub struct NodePropertyEntry2 {
815    /// Name of the node that has |node_properties|.
816    pub name: String,
817    /// Node properties that belong to the node whose name is |node_name|. If
818    /// the node is a composite then |properties| is empty and does not contain
819    /// its parents' properties.
820    pub properties: Vec<NodeProperty2>,
821}
822
823impl fidl::Persistable for NodePropertyEntry2 {}
824
825/// Specification for a node that parents the composite node created from the
826/// composite node specification.
827#[derive(Clone, Debug, PartialEq)]
828pub struct ParentSpec2 {
829    /// Parent's bind rules. Property keys must be unique. Must not be empty.
830    pub bind_rules: Vec<BindRule2>,
831    /// Properties for matching against a composite driver's bind rules.
832    /// Keys must be unique and string-based.
833    pub properties: Vec<NodeProperty2>,
834}
835
836impl fidl::Persistable for ParentSpec2 {}
837
838#[derive(Clone, Debug, PartialEq)]
839pub struct ResourceProperty {
840    /// Key for the property.
841    pub key: String,
842    /// Value for the property.
843    pub value: NodePropertyValue,
844}
845
846impl fidl::Persistable for ResourceProperty {}
847
848#[derive(Clone, Debug, Default, PartialEq)]
849pub struct BusInfo {
850    /// The type of bus this node sits on.
851    pub bus: Option<BusType>,
852    /// A unique identifier that describes the identity of this device on the given bus.
853    pub address: Option<DeviceAddress>,
854    /// How stable the address.
855    pub address_stability: Option<DeviceAddressStability>,
856    #[doc(hidden)]
857    pub __source_breaking: fidl::marker::SourceBreaking,
858}
859
860impl fidl::Persistable for BusInfo {}
861
862/// Information for a composite driver.
863#[derive(Clone, Debug, Default, PartialEq)]
864pub struct CompositeDriverInfo {
865    /// The name of the composite as specified in the driver's composite bind rules.
866    pub composite_name: Option<String>,
867    /// General information for the driver.
868    pub driver_info: Option<DriverInfo>,
869    #[doc(hidden)]
870    pub __source_breaking: fidl::marker::SourceBreaking,
871}
872
873impl fidl::Persistable for CompositeDriverInfo {}
874
875/// Information for a composite driver that has matched with a composite.
876#[derive(Clone, Debug, Default, PartialEq)]
877pub struct CompositeDriverMatch {
878    /// Information for the composite driver that has matched.
879    pub composite_driver: Option<CompositeDriverInfo>,
880    /// A list of all the parent names, ordered by index.
881    /// These names come from the node definitions in the driver's composite bind rules.
882    pub parent_names: Option<Vec<String>>,
883    /// The primary node index. Identified by the primary node in the driver's
884    /// composite bind rules.
885    pub primary_parent_index: Option<u32>,
886    #[doc(hidden)]
887    pub __source_breaking: fidl::marker::SourceBreaking,
888}
889
890impl fidl::Persistable for CompositeDriverMatch {}
891
892/// Information for a composite that is defined by a composite node spec.
893#[derive(Clone, Debug, Default, PartialEq)]
894pub struct CompositeInfo {
895    /// The spec information that this composite node spec was created with.
896    pub spec: Option<CompositeNodeSpec>,
897    /// Information for the node spec that is available only when a driver
898    /// has matched to the properties in this spec's parents.
899    pub matched_driver: Option<CompositeDriverMatch>,
900    #[doc(hidden)]
901    pub __source_breaking: fidl::marker::SourceBreaking,
902}
903
904impl fidl::Persistable for CompositeInfo {}
905
906/// Struct that represents a composite node specification.
907#[derive(Clone, Debug, Default, PartialEq)]
908pub struct CompositeNodeSpec {
909    /// The composite node spec's name.
910    pub name: Option<String>,
911    /// The nodes in the composite node spec. Must not be empty. The first node is
912    /// the primary node.
913    pub parents2: Option<Vec<ParentSpec2>>,
914    /// An identifier for the driver host which a driver that binds to this node spec should live
915    /// in. All drivers which specify the same identifier will be colocated into the same driver
916    /// host. If the driver host hasn't been started, it will be started upon the time the node is
917    /// bound to.
918    pub driver_host: Option<String>,
919    #[doc(hidden)]
920    pub __source_breaking: fidl::marker::SourceBreaking,
921}
922
923impl fidl::Persistable for CompositeNodeSpec {}
924
925/// A parent to a composite that is defined by a composite node spec.
926#[derive(Clone, Debug, Default, PartialEq)]
927pub struct CompositeParent {
928    /// Information about the composite that this is a parent of.
929    pub composite: Option<CompositeInfo>,
930    /// The index of this parent in the spec's parents.
931    pub index: Option<u32>,
932    #[doc(hidden)]
933    pub __source_breaking: fidl::marker::SourceBreaking,
934}
935
936impl fidl::Persistable for CompositeParent {}
937
938/// Represents a dependency that a node has on a resource.
939/// The dependency is resolved by matching a resource against the `selector`'s constraints.
940#[derive(Clone, Debug, Default, PartialEq)]
941pub struct Dependency {
942    /// The resources must match the selector's constraints to be depended on.
943    pub selector: Option<Selector>,
944    /// Additional properties tagged to the resource for driver binding
945    pub tags: Option<Vec<ResourceProperty>>,
946    #[doc(hidden)]
947    pub __source_breaking: fidl::marker::SourceBreaking,
948}
949
950impl fidl::Persistable for Dependency {}
951
952/// Device categories as provided in the driver's component manifest.
953#[derive(Clone, Debug, Default, PartialEq)]
954pub struct DeviceCategory {
955    pub category: Option<String>,
956    pub subcategory: Option<String>,
957    #[doc(hidden)]
958    pub __source_breaking: fidl::marker::SourceBreaking,
959}
960
961impl fidl::Persistable for DeviceCategory {}
962
963/// General information for a driver, used with both composite and normal drivers.
964#[derive(Clone, Debug, Default, PartialEq)]
965pub struct DriverInfo {
966    /// URL of the driver component.
967    pub url: Option<String>,
968    /// Name of the driver, taken from the first field of the `ZIRCON_DRIVER`
969    /// macro in the driver.
970    pub name: Option<String>,
971    /// If this is true then the driver should be colocated in its parent's DriverHost.
972    pub colocate: Option<bool>,
973    /// The type of package this driver is in.
974    pub package_type: Option<DriverPackageType>,
975    /// If this is true then the driver is a fallback driver. Fallback drivers have a
976    /// lesser priority for binding, so they will only be chosen for binding if there
977    /// is no non-fallback driver that has matched.
978    pub is_fallback: Option<bool>,
979    /// Device categories
980    pub device_categories: Option<Vec<DeviceCategory>>,
981    /// Bind rules which declare set of constraints to evaluate in order to
982    /// determine whether the driver indexer should bind this driver to a
983    /// device.
984    pub bind_rules_bytecode: Option<Vec<u8>>,
985    /// The version of the driver framework that this driver is using.
986    /// Supported values are 1 (DFv1) and 2 (DFv2).
987    /// If not provided, 1 is the assumed version.
988    pub driver_framework_version: Option<u8>,
989    /// Whether the driver is disabled. If true, this driver is not chosen to bind to nodes.
990    pub is_disabled: Option<bool>,
991    #[doc(hidden)]
992    pub __source_breaking: fidl::marker::SourceBreaking,
993}
994
995impl fidl::Persistable for DriverInfo {}
996
997/// Response returned by a driver health check.
998#[derive(Clone, Debug, Default, PartialEq)]
999pub struct HealthCheckResponse {
1000    /// Diagnostic key-value telemetry for the driver as a whole (power mode,
1001    /// activity counters, last-event timestamps), as opposed to a single
1002    /// condition.
1003    pub diagnostics: Option<Vec<HealthDiagnosticItem>>,
1004    /// Active fault or warning conditions. Absent or empty when the driver is
1005    /// healthy (`HealthStatus.OK`). Overall driver status is the maximum
1006    /// severity across `conditions` (`UNHEALTHY > DEGRADED > OK`), or `OK` if
1007    /// absent or empty.
1008    pub conditions: Option<Vec<HealthCondition>>,
1009    #[doc(hidden)]
1010    pub __source_breaking: fidl::marker::SourceBreaking,
1011}
1012
1013impl fidl::Persistable for HealthCheckResponse {}
1014
1015/// One condition detected by a driver health check.
1016#[derive(Clone, Debug, Default, PartialEq)]
1017pub struct HealthCondition {
1018    /// Severity of this condition. Consumers treat an omitted or unrecognized
1019    /// value as `UNHEALTHY`, so always set it.
1020    pub status: Option<HealthStatus>,
1021    /// Short machine-readable token (e.g. "DSI_CRI_FIFO_WEDGED",
1022    /// "TE_INTERRUPT_STALLED"). Must be unique within a response.
1023    pub reason_code: Option<String>,
1024    /// Human-readable detail for this condition.
1025    pub message: Option<String>,
1026    /// Diagnostic values specific to this condition.
1027    pub diagnostics: Option<Vec<HealthDiagnosticItem>>,
1028    /// Boot-timeline instant at which this condition was first observed.
1029    pub first_observed: Option<fidl::BootInstant>,
1030    /// Boot-timeline instant at which this condition was most recently
1031    /// observed.
1032    pub last_observed: Option<fidl::BootInstant>,
1033    /// Number of times this condition has been observed since
1034    /// `first_observed`.
1035    pub occurrence_count: Option<u64>,
1036    #[doc(hidden)]
1037    pub __source_breaking: fidl::marker::SourceBreaking,
1038}
1039
1040impl fidl::Persistable for HealthCondition {}
1041
1042/// Represents a node added to the driver topology. The node is created after all of its dependencies
1043/// are matched to a resource.
1044#[derive(Clone, Debug, Default, PartialEq)]
1045pub struct Node2 {
1046    pub name: Option<String>,
1047    pub dependencies: Option<Vec<Dependency>>,
1048    #[doc(hidden)]
1049    pub __source_breaking: fidl::marker::SourceBreaking,
1050}
1051
1052impl fidl::Persistable for Node2 {}
1053
1054#[derive(Clone, Debug, Default, PartialEq)]
1055pub struct NodeControllerRequestBindRequest {
1056    /// If this is true, then the node unbinds from its matched driver before it attempts to
1057    /// bind through the normal bind process.
1058    pub force_rebind: Option<bool>,
1059    /// If this is set, then only drivers matching this URL suffix will be considered in
1060    /// binding.
1061    /// E.g: "gpt.cm", "meta/gpt.cm", "fuchsia-boot:///#meta/gpt.cm".
1062    pub driver_url_suffix: Option<String>,
1063    #[doc(hidden)]
1064    pub __source_breaking: fidl::marker::SourceBreaking,
1065}
1066
1067impl fidl::Persistable for NodeControllerRequestBindRequest {}
1068
1069/// Definition of a symbol provided by a driver for a node. A symbol is local to
1070/// a driver host.
1071#[derive(Clone, Debug, Default, PartialEq)]
1072pub struct NodeSymbol {
1073    /// Name of the symbol.
1074    pub name: Option<String>,
1075    /// Virtual address of the symbol, within a driver host's process.
1076    pub address: Option<u64>,
1077    /// Module name that provided the symbol.
1078    /// Will not be provided when the symbol originates from the primary parent.
1079    pub module_name: Option<String>,
1080    #[doc(hidden)]
1081    pub __source_breaking: fidl::marker::SourceBreaking,
1082}
1083
1084impl fidl::Persistable for NodeSymbol {}
1085
1086/// Selector used to match resources as a dependency for nodes.
1087#[derive(Clone, Debug, Default, PartialEq)]
1088pub struct Selector {
1089    /// The resource must contain these offers.
1090    pub offers: Option<Vec<Offer>>,
1091    /// The resource must contain these properties. The property keys must be unique for
1092    /// the Selector to be considered valid.
1093    pub include_properties: Option<Vec<ResourceProperty>>,
1094    /// The resource must not contain these properties.
1095    pub exclude_properties: Option<Vec<ResourceProperty>>,
1096    #[doc(hidden)]
1097    pub __source_breaking: fidl::marker::SourceBreaking,
1098}
1099
1100impl fidl::Persistable for Selector {}
1101
1102#[derive(Clone, Debug)]
1103pub enum DeviceAddress {
1104    /// A fixed integer id, eg a spi bus address
1105    IntValue(u8),
1106    /// An array of integers, eg a PCI BDF.
1107    ArrayIntValue(Vec<u8>),
1108    /// A uint32 value that can be interpretted as a 4 character sequence.
1109    CharIntValue(String),
1110    /// An array of character sequences, eg a ACPI node path.
1111    ArrayCharIntValue(Vec<String>),
1112    /// A generic string, eg the device tree node path.
1113    StringValue(String),
1114    #[doc(hidden)]
1115    __SourceBreaking { unknown_ordinal: u64 },
1116}
1117
1118/// Pattern that matches an unknown `DeviceAddress` member.
1119#[macro_export]
1120macro_rules! DeviceAddressUnknown {
1121    () => {
1122        _
1123    };
1124}
1125
1126// Custom PartialEq so that unknown variants are not equal to themselves.
1127impl PartialEq for DeviceAddress {
1128    fn eq(&self, other: &Self) -> bool {
1129        match (self, other) {
1130            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
1131            (Self::ArrayIntValue(x), Self::ArrayIntValue(y)) => *x == *y,
1132            (Self::CharIntValue(x), Self::CharIntValue(y)) => *x == *y,
1133            (Self::ArrayCharIntValue(x), Self::ArrayCharIntValue(y)) => *x == *y,
1134            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
1135            _ => false,
1136        }
1137    }
1138}
1139
1140impl DeviceAddress {
1141    #[inline]
1142    pub fn ordinal(&self) -> u64 {
1143        match *self {
1144            Self::IntValue(_) => 1,
1145            Self::ArrayIntValue(_) => 2,
1146            Self::CharIntValue(_) => 3,
1147            Self::ArrayCharIntValue(_) => 4,
1148            Self::StringValue(_) => 5,
1149            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1150        }
1151    }
1152
1153    #[inline]
1154    pub fn unknown_variant_for_testing() -> Self {
1155        Self::__SourceBreaking { unknown_ordinal: 0 }
1156    }
1157
1158    #[inline]
1159    pub fn is_unknown(&self) -> bool {
1160        match self {
1161            Self::__SourceBreaking { .. } => true,
1162            _ => false,
1163        }
1164    }
1165}
1166
1167impl fidl::Persistable for DeviceAddress {}
1168
1169/// Payload of a proactive health alert emitted by a driver via `OnHealthAlert`.
1170/// "Upstream" is what the driver depends on (parents: buses, clocks, power
1171/// domains, composite parents). "Downstream" is what depends on the driver
1172/// (children / consumers).
1173#[derive(Clone, Debug)]
1174pub enum HealthAlert {
1175    /// The driver detected an internal hardware or software fault, or
1176    /// recovered from a previously reported fault (when `conditions` is empty).
1177    /// Edge-triggered: send when the driver's overall status worsens
1178    /// (OK->DEGRADED, DEGRADED->UNHEALTHY) and again with empty `conditions`
1179    /// when it recovers; never per occurrence of an already-reported condition.
1180    SelfFault(HealthCheckResponse),
1181    /// The driver cannot make progress because an upstream dependency
1182    /// (parent/bus/clock/power/register provider) is unresponsive or invalid.
1183    UpstreamNeighborFault(HealthCheckResponse),
1184    /// The driver cannot make progress because a downstream consumer
1185    /// (child/client) is wedged or failing to drain queues/buffers.
1186    DownstreamNeighborFault(HealthCheckResponse),
1187    #[doc(hidden)]
1188    __SourceBreaking { unknown_ordinal: u64 },
1189}
1190
1191/// Pattern that matches an unknown `HealthAlert` member.
1192#[macro_export]
1193macro_rules! HealthAlertUnknown {
1194    () => {
1195        _
1196    };
1197}
1198
1199// Custom PartialEq so that unknown variants are not equal to themselves.
1200impl PartialEq for HealthAlert {
1201    fn eq(&self, other: &Self) -> bool {
1202        match (self, other) {
1203            (Self::SelfFault(x), Self::SelfFault(y)) => *x == *y,
1204            (Self::UpstreamNeighborFault(x), Self::UpstreamNeighborFault(y)) => *x == *y,
1205            (Self::DownstreamNeighborFault(x), Self::DownstreamNeighborFault(y)) => *x == *y,
1206            _ => false,
1207        }
1208    }
1209}
1210
1211impl HealthAlert {
1212    #[inline]
1213    pub fn ordinal(&self) -> u64 {
1214        match *self {
1215            Self::SelfFault(_) => 1,
1216            Self::UpstreamNeighborFault(_) => 2,
1217            Self::DownstreamNeighborFault(_) => 3,
1218            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1219        }
1220    }
1221
1222    #[inline]
1223    pub fn unknown_variant_for_testing() -> Self {
1224        Self::__SourceBreaking { unknown_ordinal: 0 }
1225    }
1226
1227    #[inline]
1228    pub fn is_unknown(&self) -> bool {
1229        match self {
1230            Self::__SourceBreaking { .. } => true,
1231            _ => false,
1232        }
1233    }
1234}
1235
1236impl fidl::Persistable for HealthAlert {}
1237
1238/// Diagnostic value returned in a HealthCheckResponse.
1239#[derive(Clone, Debug)]
1240pub enum HealthDiagnosticValue {
1241    StringValue(String),
1242    IntValue(i64),
1243    UintValue(u64),
1244    BoolValue(bool),
1245    /// Boot-timeline instant, e.g. time of the last interrupt or input report.
1246    Timestamp(fidl::BootInstant),
1247    #[doc(hidden)]
1248    __SourceBreaking {
1249        unknown_ordinal: u64,
1250    },
1251}
1252
1253/// Pattern that matches an unknown `HealthDiagnosticValue` member.
1254#[macro_export]
1255macro_rules! HealthDiagnosticValueUnknown {
1256    () => {
1257        _
1258    };
1259}
1260
1261// Custom PartialEq so that unknown variants are not equal to themselves.
1262impl PartialEq for HealthDiagnosticValue {
1263    fn eq(&self, other: &Self) -> bool {
1264        match (self, other) {
1265            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
1266            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
1267            (Self::UintValue(x), Self::UintValue(y)) => *x == *y,
1268            (Self::BoolValue(x), Self::BoolValue(y)) => *x == *y,
1269            (Self::Timestamp(x), Self::Timestamp(y)) => *x == *y,
1270            _ => false,
1271        }
1272    }
1273}
1274
1275impl HealthDiagnosticValue {
1276    #[inline]
1277    pub fn ordinal(&self) -> u64 {
1278        match *self {
1279            Self::StringValue(_) => 1,
1280            Self::IntValue(_) => 2,
1281            Self::UintValue(_) => 3,
1282            Self::BoolValue(_) => 4,
1283            Self::Timestamp(_) => 5,
1284            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1285        }
1286    }
1287
1288    #[inline]
1289    pub fn unknown_variant_for_testing() -> Self {
1290        Self::__SourceBreaking { unknown_ordinal: 0 }
1291    }
1292
1293    #[inline]
1294    pub fn is_unknown(&self) -> bool {
1295        match self {
1296            Self::__SourceBreaking { .. } => true,
1297            _ => false,
1298        }
1299    }
1300}
1301
1302impl fidl::Persistable for HealthDiagnosticValue {}
1303
1304#[derive(Clone, Debug)]
1305pub enum NodePropertyValue {
1306    IntValue(u32),
1307    StringValue(String),
1308    BoolValue(bool),
1309    EnumValue(String),
1310    #[doc(hidden)]
1311    __SourceBreaking {
1312        unknown_ordinal: u64,
1313    },
1314}
1315
1316/// Pattern that matches an unknown `NodePropertyValue` member.
1317#[macro_export]
1318macro_rules! NodePropertyValueUnknown {
1319    () => {
1320        _
1321    };
1322}
1323
1324// Custom PartialEq so that unknown variants are not equal to themselves.
1325impl PartialEq for NodePropertyValue {
1326    fn eq(&self, other: &Self) -> bool {
1327        match (self, other) {
1328            (Self::IntValue(x), Self::IntValue(y)) => *x == *y,
1329            (Self::StringValue(x), Self::StringValue(y)) => *x == *y,
1330            (Self::BoolValue(x), Self::BoolValue(y)) => *x == *y,
1331            (Self::EnumValue(x), Self::EnumValue(y)) => *x == *y,
1332            _ => false,
1333        }
1334    }
1335}
1336
1337impl NodePropertyValue {
1338    #[inline]
1339    pub fn ordinal(&self) -> u64 {
1340        match *self {
1341            Self::IntValue(_) => 1,
1342            Self::StringValue(_) => 2,
1343            Self::BoolValue(_) => 3,
1344            Self::EnumValue(_) => 4,
1345            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1346        }
1347    }
1348
1349    #[inline]
1350    pub fn unknown_variant_for_testing() -> Self {
1351        Self::__SourceBreaking { unknown_ordinal: 0 }
1352    }
1353
1354    #[inline]
1355    pub fn is_unknown(&self) -> bool {
1356        match self {
1357            Self::__SourceBreaking { .. } => true,
1358            _ => false,
1359        }
1360    }
1361}
1362
1363impl fidl::Persistable for NodePropertyValue {}
1364
1365#[derive(Clone, Debug)]
1366pub enum Offer {
1367    ZirconTransport(fidl_fuchsia_component_decl_common::Offer),
1368    DriverTransport(fidl_fuchsia_component_decl_common::Offer),
1369    /// An offer that lives in the |offers_dictionary|. This is equivalent to a |zircon_transport|
1370    /// offer for all other purposes (eg. bind property generation).
1371    DictionaryOffer(fidl_fuchsia_component_decl_common::Offer),
1372    #[doc(hidden)]
1373    __SourceBreaking {
1374        unknown_ordinal: u64,
1375    },
1376}
1377
1378/// Pattern that matches an unknown `Offer` member.
1379#[macro_export]
1380macro_rules! OfferUnknown {
1381    () => {
1382        _
1383    };
1384}
1385
1386// Custom PartialEq so that unknown variants are not equal to themselves.
1387impl PartialEq for Offer {
1388    fn eq(&self, other: &Self) -> bool {
1389        match (self, other) {
1390            (Self::ZirconTransport(x), Self::ZirconTransport(y)) => *x == *y,
1391            (Self::DriverTransport(x), Self::DriverTransport(y)) => *x == *y,
1392            (Self::DictionaryOffer(x), Self::DictionaryOffer(y)) => *x == *y,
1393            _ => false,
1394        }
1395    }
1396}
1397
1398impl Offer {
1399    #[inline]
1400    pub fn ordinal(&self) -> u64 {
1401        match *self {
1402            Self::ZirconTransport(_) => 1,
1403            Self::DriverTransport(_) => 2,
1404            Self::DictionaryOffer(_) => 3,
1405            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
1406        }
1407    }
1408
1409    #[inline]
1410    pub fn unknown_variant_for_testing() -> Self {
1411        Self::__SourceBreaking { unknown_ordinal: 0 }
1412    }
1413
1414    #[inline]
1415    pub fn is_unknown(&self) -> bool {
1416        match self {
1417            Self::__SourceBreaking { .. } => true,
1418            _ => false,
1419        }
1420    }
1421}
1422
1423impl fidl::Persistable for Offer {}
1424
1425pub mod composite_node_manager_ordinals {
1426    pub const ADD_SPEC: u64 = 0x524e353c8130cc74;
1427}
1428
1429pub mod node_ordinals {
1430    pub const ADD_CHILD: u64 = 0x77d10dff3c1ea129;
1431    pub const PROVIDE_RESOURCE: u64 = 0x2ba4a8e5f3409ace;
1432}
1433
1434pub mod node_controller_ordinals {
1435    pub const REMOVE: u64 = 0x54fa8b3dfe7bb341;
1436    pub const REQUEST_BIND: u64 = 0x41b954726b13508f;
1437    pub const ON_BIND: u64 = 0x51f4165bc5ea202a;
1438    pub const WAIT_FOR_DRIVER: u64 = 0x69f7106e47d81387;
1439}
1440
1441pub mod node_manager_ordinals {
1442    pub const ADD_NODE: u64 = 0x71873eed0baf16fd;
1443}
1444
1445pub mod resource_controller_ordinals {
1446    pub const REMOVE: u64 = 0x1257bec06bde4f98;
1447}
1448
1449mod internal {
1450    use super::*;
1451    unsafe impl fidl::encoding::TypeMarker for BusType {
1452        type Owned = Self;
1453
1454        #[inline(always)]
1455        fn inline_align(_context: fidl::encoding::Context) -> usize {
1456            std::mem::align_of::<u32>()
1457        }
1458
1459        #[inline(always)]
1460        fn inline_size(_context: fidl::encoding::Context) -> usize {
1461            std::mem::size_of::<u32>()
1462        }
1463
1464        #[inline(always)]
1465        fn encode_is_copy() -> bool {
1466            false
1467        }
1468
1469        #[inline(always)]
1470        fn decode_is_copy() -> bool {
1471            false
1472        }
1473    }
1474
1475    impl fidl::encoding::ValueTypeMarker for BusType {
1476        type Borrowed<'a> = Self;
1477        #[inline(always)]
1478        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1479            *value
1480        }
1481    }
1482
1483    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BusType {
1484        #[inline]
1485        unsafe fn encode(
1486            self,
1487            encoder: &mut fidl::encoding::Encoder<'_, D>,
1488            offset: usize,
1489            _depth: fidl::encoding::Depth,
1490        ) -> fidl::Result<()> {
1491            encoder.debug_check_bounds::<Self>(offset);
1492            encoder.write_num(self.into_primitive(), offset);
1493            Ok(())
1494        }
1495    }
1496
1497    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BusType {
1498        #[inline(always)]
1499        fn new_empty() -> Self {
1500            Self::unknown()
1501        }
1502
1503        #[inline]
1504        unsafe fn decode(
1505            &mut self,
1506            decoder: &mut fidl::encoding::Decoder<'_, D>,
1507            offset: usize,
1508            _depth: fidl::encoding::Depth,
1509        ) -> fidl::Result<()> {
1510            decoder.debug_check_bounds::<Self>(offset);
1511            let prim = decoder.read_num::<u32>(offset);
1512
1513            *self = Self::from_primitive_allow_unknown(prim);
1514            Ok(())
1515        }
1516    }
1517    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpecError {
1518        type Owned = Self;
1519
1520        #[inline(always)]
1521        fn inline_align(_context: fidl::encoding::Context) -> usize {
1522            std::mem::align_of::<u32>()
1523        }
1524
1525        #[inline(always)]
1526        fn inline_size(_context: fidl::encoding::Context) -> usize {
1527            std::mem::size_of::<u32>()
1528        }
1529
1530        #[inline(always)]
1531        fn encode_is_copy() -> bool {
1532            false
1533        }
1534
1535        #[inline(always)]
1536        fn decode_is_copy() -> bool {
1537            false
1538        }
1539    }
1540
1541    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpecError {
1542        type Borrowed<'a> = Self;
1543        #[inline(always)]
1544        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1545            *value
1546        }
1547    }
1548
1549    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1550        for CompositeNodeSpecError
1551    {
1552        #[inline]
1553        unsafe fn encode(
1554            self,
1555            encoder: &mut fidl::encoding::Encoder<'_, D>,
1556            offset: usize,
1557            _depth: fidl::encoding::Depth,
1558        ) -> fidl::Result<()> {
1559            encoder.debug_check_bounds::<Self>(offset);
1560            encoder.write_num(self.into_primitive(), offset);
1561            Ok(())
1562        }
1563    }
1564
1565    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1566        for CompositeNodeSpecError
1567    {
1568        #[inline(always)]
1569        fn new_empty() -> Self {
1570            Self::unknown()
1571        }
1572
1573        #[inline]
1574        unsafe fn decode(
1575            &mut self,
1576            decoder: &mut fidl::encoding::Decoder<'_, D>,
1577            offset: usize,
1578            _depth: fidl::encoding::Depth,
1579        ) -> fidl::Result<()> {
1580            decoder.debug_check_bounds::<Self>(offset);
1581            let prim = decoder.read_num::<u32>(offset);
1582
1583            *self = Self::from_primitive_allow_unknown(prim);
1584            Ok(())
1585        }
1586    }
1587    unsafe impl fidl::encoding::TypeMarker for Condition {
1588        type Owned = Self;
1589
1590        #[inline(always)]
1591        fn inline_align(_context: fidl::encoding::Context) -> usize {
1592            std::mem::align_of::<u32>()
1593        }
1594
1595        #[inline(always)]
1596        fn inline_size(_context: fidl::encoding::Context) -> usize {
1597            std::mem::size_of::<u32>()
1598        }
1599
1600        #[inline(always)]
1601        fn encode_is_copy() -> bool {
1602            true
1603        }
1604
1605        #[inline(always)]
1606        fn decode_is_copy() -> bool {
1607            false
1608        }
1609    }
1610
1611    impl fidl::encoding::ValueTypeMarker for Condition {
1612        type Borrowed<'a> = Self;
1613        #[inline(always)]
1614        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1615            *value
1616        }
1617    }
1618
1619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Condition {
1620        #[inline]
1621        unsafe fn encode(
1622            self,
1623            encoder: &mut fidl::encoding::Encoder<'_, D>,
1624            offset: usize,
1625            _depth: fidl::encoding::Depth,
1626        ) -> fidl::Result<()> {
1627            encoder.debug_check_bounds::<Self>(offset);
1628            encoder.write_num(self.into_primitive(), offset);
1629            Ok(())
1630        }
1631    }
1632
1633    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Condition {
1634        #[inline(always)]
1635        fn new_empty() -> Self {
1636            Self::Unknown
1637        }
1638
1639        #[inline]
1640        unsafe fn decode(
1641            &mut self,
1642            decoder: &mut fidl::encoding::Decoder<'_, D>,
1643            offset: usize,
1644            _depth: fidl::encoding::Depth,
1645        ) -> fidl::Result<()> {
1646            decoder.debug_check_bounds::<Self>(offset);
1647            let prim = decoder.read_num::<u32>(offset);
1648
1649            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
1650            Ok(())
1651        }
1652    }
1653    unsafe impl fidl::encoding::TypeMarker for DeviceAddressStability {
1654        type Owned = Self;
1655
1656        #[inline(always)]
1657        fn inline_align(_context: fidl::encoding::Context) -> usize {
1658            std::mem::align_of::<u32>()
1659        }
1660
1661        #[inline(always)]
1662        fn inline_size(_context: fidl::encoding::Context) -> usize {
1663            std::mem::size_of::<u32>()
1664        }
1665
1666        #[inline(always)]
1667        fn encode_is_copy() -> bool {
1668            false
1669        }
1670
1671        #[inline(always)]
1672        fn decode_is_copy() -> bool {
1673            false
1674        }
1675    }
1676
1677    impl fidl::encoding::ValueTypeMarker for DeviceAddressStability {
1678        type Borrowed<'a> = Self;
1679        #[inline(always)]
1680        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1681            *value
1682        }
1683    }
1684
1685    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1686        for DeviceAddressStability
1687    {
1688        #[inline]
1689        unsafe fn encode(
1690            self,
1691            encoder: &mut fidl::encoding::Encoder<'_, D>,
1692            offset: usize,
1693            _depth: fidl::encoding::Depth,
1694        ) -> fidl::Result<()> {
1695            encoder.debug_check_bounds::<Self>(offset);
1696            encoder.write_num(self.into_primitive(), offset);
1697            Ok(())
1698        }
1699    }
1700
1701    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1702        for DeviceAddressStability
1703    {
1704        #[inline(always)]
1705        fn new_empty() -> Self {
1706            Self::unknown()
1707        }
1708
1709        #[inline]
1710        unsafe fn decode(
1711            &mut self,
1712            decoder: &mut fidl::encoding::Decoder<'_, D>,
1713            offset: usize,
1714            _depth: fidl::encoding::Depth,
1715        ) -> fidl::Result<()> {
1716            decoder.debug_check_bounds::<Self>(offset);
1717            let prim = decoder.read_num::<u32>(offset);
1718
1719            *self = Self::from_primitive_allow_unknown(prim);
1720            Ok(())
1721        }
1722    }
1723    unsafe impl fidl::encoding::TypeMarker for DriverPackageType {
1724        type Owned = Self;
1725
1726        #[inline(always)]
1727        fn inline_align(_context: fidl::encoding::Context) -> usize {
1728            std::mem::align_of::<u8>()
1729        }
1730
1731        #[inline(always)]
1732        fn inline_size(_context: fidl::encoding::Context) -> usize {
1733            std::mem::size_of::<u8>()
1734        }
1735
1736        #[inline(always)]
1737        fn encode_is_copy() -> bool {
1738            false
1739        }
1740
1741        #[inline(always)]
1742        fn decode_is_copy() -> bool {
1743            false
1744        }
1745    }
1746
1747    impl fidl::encoding::ValueTypeMarker for DriverPackageType {
1748        type Borrowed<'a> = Self;
1749        #[inline(always)]
1750        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1751            *value
1752        }
1753    }
1754
1755    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1756        for DriverPackageType
1757    {
1758        #[inline]
1759        unsafe fn encode(
1760            self,
1761            encoder: &mut fidl::encoding::Encoder<'_, D>,
1762            offset: usize,
1763            _depth: fidl::encoding::Depth,
1764        ) -> fidl::Result<()> {
1765            encoder.debug_check_bounds::<Self>(offset);
1766            encoder.write_num(self.into_primitive(), offset);
1767            Ok(())
1768        }
1769    }
1770
1771    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverPackageType {
1772        #[inline(always)]
1773        fn new_empty() -> Self {
1774            Self::unknown()
1775        }
1776
1777        #[inline]
1778        unsafe fn decode(
1779            &mut self,
1780            decoder: &mut fidl::encoding::Decoder<'_, D>,
1781            offset: usize,
1782            _depth: fidl::encoding::Depth,
1783        ) -> fidl::Result<()> {
1784            decoder.debug_check_bounds::<Self>(offset);
1785            let prim = decoder.read_num::<u8>(offset);
1786
1787            *self = Self::from_primitive_allow_unknown(prim);
1788            Ok(())
1789        }
1790    }
1791    unsafe impl fidl::encoding::TypeMarker for HealthCheckError {
1792        type Owned = Self;
1793
1794        #[inline(always)]
1795        fn inline_align(_context: fidl::encoding::Context) -> usize {
1796            std::mem::align_of::<u32>()
1797        }
1798
1799        #[inline(always)]
1800        fn inline_size(_context: fidl::encoding::Context) -> usize {
1801            std::mem::size_of::<u32>()
1802        }
1803
1804        #[inline(always)]
1805        fn encode_is_copy() -> bool {
1806            false
1807        }
1808
1809        #[inline(always)]
1810        fn decode_is_copy() -> bool {
1811            false
1812        }
1813    }
1814
1815    impl fidl::encoding::ValueTypeMarker for HealthCheckError {
1816        type Borrowed<'a> = Self;
1817        #[inline(always)]
1818        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1819            *value
1820        }
1821    }
1822
1823    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1824        for HealthCheckError
1825    {
1826        #[inline]
1827        unsafe fn encode(
1828            self,
1829            encoder: &mut fidl::encoding::Encoder<'_, D>,
1830            offset: usize,
1831            _depth: fidl::encoding::Depth,
1832        ) -> fidl::Result<()> {
1833            encoder.debug_check_bounds::<Self>(offset);
1834            encoder.write_num(self.into_primitive(), offset);
1835            Ok(())
1836        }
1837    }
1838
1839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthCheckError {
1840        #[inline(always)]
1841        fn new_empty() -> Self {
1842            Self::unknown()
1843        }
1844
1845        #[inline]
1846        unsafe fn decode(
1847            &mut self,
1848            decoder: &mut fidl::encoding::Decoder<'_, D>,
1849            offset: usize,
1850            _depth: fidl::encoding::Depth,
1851        ) -> fidl::Result<()> {
1852            decoder.debug_check_bounds::<Self>(offset);
1853            let prim = decoder.read_num::<u32>(offset);
1854
1855            *self = Self::from_primitive_allow_unknown(prim);
1856            Ok(())
1857        }
1858    }
1859    unsafe impl fidl::encoding::TypeMarker for HealthCheckRequest {
1860        type Owned = Self;
1861
1862        #[inline(always)]
1863        fn inline_align(_context: fidl::encoding::Context) -> usize {
1864            std::mem::align_of::<u32>()
1865        }
1866
1867        #[inline(always)]
1868        fn inline_size(_context: fidl::encoding::Context) -> usize {
1869            std::mem::size_of::<u32>()
1870        }
1871
1872        #[inline(always)]
1873        fn encode_is_copy() -> bool {
1874            false
1875        }
1876
1877        #[inline(always)]
1878        fn decode_is_copy() -> bool {
1879            false
1880        }
1881    }
1882
1883    impl fidl::encoding::ValueTypeMarker for HealthCheckRequest {
1884        type Borrowed<'a> = Self;
1885        #[inline(always)]
1886        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1887            *value
1888        }
1889    }
1890
1891    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
1892        for HealthCheckRequest
1893    {
1894        #[inline]
1895        unsafe fn encode(
1896            self,
1897            encoder: &mut fidl::encoding::Encoder<'_, D>,
1898            offset: usize,
1899            _depth: fidl::encoding::Depth,
1900        ) -> fidl::Result<()> {
1901            encoder.debug_check_bounds::<Self>(offset);
1902            encoder.write_num(self.into_primitive(), offset);
1903            Ok(())
1904        }
1905    }
1906
1907    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthCheckRequest {
1908        #[inline(always)]
1909        fn new_empty() -> Self {
1910            Self::unknown()
1911        }
1912
1913        #[inline]
1914        unsafe fn decode(
1915            &mut self,
1916            decoder: &mut fidl::encoding::Decoder<'_, D>,
1917            offset: usize,
1918            _depth: fidl::encoding::Depth,
1919        ) -> fidl::Result<()> {
1920            decoder.debug_check_bounds::<Self>(offset);
1921            let prim = decoder.read_num::<u32>(offset);
1922
1923            *self = Self::from_primitive_allow_unknown(prim);
1924            Ok(())
1925        }
1926    }
1927    unsafe impl fidl::encoding::TypeMarker for HealthStatus {
1928        type Owned = Self;
1929
1930        #[inline(always)]
1931        fn inline_align(_context: fidl::encoding::Context) -> usize {
1932            std::mem::align_of::<u32>()
1933        }
1934
1935        #[inline(always)]
1936        fn inline_size(_context: fidl::encoding::Context) -> usize {
1937            std::mem::size_of::<u32>()
1938        }
1939
1940        #[inline(always)]
1941        fn encode_is_copy() -> bool {
1942            false
1943        }
1944
1945        #[inline(always)]
1946        fn decode_is_copy() -> bool {
1947            false
1948        }
1949    }
1950
1951    impl fidl::encoding::ValueTypeMarker for HealthStatus {
1952        type Borrowed<'a> = Self;
1953        #[inline(always)]
1954        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1955            *value
1956        }
1957    }
1958
1959    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HealthStatus {
1960        #[inline]
1961        unsafe fn encode(
1962            self,
1963            encoder: &mut fidl::encoding::Encoder<'_, D>,
1964            offset: usize,
1965            _depth: fidl::encoding::Depth,
1966        ) -> fidl::Result<()> {
1967            encoder.debug_check_bounds::<Self>(offset);
1968            encoder.write_num(self.into_primitive(), offset);
1969            Ok(())
1970        }
1971    }
1972
1973    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthStatus {
1974        #[inline(always)]
1975        fn new_empty() -> Self {
1976            Self::unknown()
1977        }
1978
1979        #[inline]
1980        unsafe fn decode(
1981            &mut self,
1982            decoder: &mut fidl::encoding::Decoder<'_, D>,
1983            offset: usize,
1984            _depth: fidl::encoding::Depth,
1985        ) -> fidl::Result<()> {
1986            decoder.debug_check_bounds::<Self>(offset);
1987            let prim = decoder.read_num::<u32>(offset);
1988
1989            *self = Self::from_primitive_allow_unknown(prim);
1990            Ok(())
1991        }
1992    }
1993    unsafe impl fidl::encoding::TypeMarker for NodeError {
1994        type Owned = Self;
1995
1996        #[inline(always)]
1997        fn inline_align(_context: fidl::encoding::Context) -> usize {
1998            std::mem::align_of::<u32>()
1999        }
2000
2001        #[inline(always)]
2002        fn inline_size(_context: fidl::encoding::Context) -> usize {
2003            std::mem::size_of::<u32>()
2004        }
2005
2006        #[inline(always)]
2007        fn encode_is_copy() -> bool {
2008            false
2009        }
2010
2011        #[inline(always)]
2012        fn decode_is_copy() -> bool {
2013            false
2014        }
2015    }
2016
2017    impl fidl::encoding::ValueTypeMarker for NodeError {
2018        type Borrowed<'a> = Self;
2019        #[inline(always)]
2020        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2021            *value
2022        }
2023    }
2024
2025    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for NodeError {
2026        #[inline]
2027        unsafe fn encode(
2028            self,
2029            encoder: &mut fidl::encoding::Encoder<'_, D>,
2030            offset: usize,
2031            _depth: fidl::encoding::Depth,
2032        ) -> fidl::Result<()> {
2033            encoder.debug_check_bounds::<Self>(offset);
2034            encoder.write_num(self.into_primitive(), offset);
2035            Ok(())
2036        }
2037    }
2038
2039    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeError {
2040        #[inline(always)]
2041        fn new_empty() -> Self {
2042            Self::unknown()
2043        }
2044
2045        #[inline]
2046        unsafe fn decode(
2047            &mut self,
2048            decoder: &mut fidl::encoding::Decoder<'_, D>,
2049            offset: usize,
2050            _depth: fidl::encoding::Depth,
2051        ) -> fidl::Result<()> {
2052            decoder.debug_check_bounds::<Self>(offset);
2053            let prim = decoder.read_num::<u32>(offset);
2054
2055            *self = Self::from_primitive_allow_unknown(prim);
2056            Ok(())
2057        }
2058    }
2059
2060    impl fidl::encoding::ValueTypeMarker for BindRule2 {
2061        type Borrowed<'a> = &'a Self;
2062        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2063            value
2064        }
2065    }
2066
2067    unsafe impl fidl::encoding::TypeMarker for BindRule2 {
2068        type Owned = Self;
2069
2070        #[inline(always)]
2071        fn inline_align(_context: fidl::encoding::Context) -> usize {
2072            8
2073        }
2074
2075        #[inline(always)]
2076        fn inline_size(_context: fidl::encoding::Context) -> usize {
2077            40
2078        }
2079    }
2080
2081    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BindRule2, D>
2082        for &BindRule2
2083    {
2084        #[inline]
2085        unsafe fn encode(
2086            self,
2087            encoder: &mut fidl::encoding::Encoder<'_, D>,
2088            offset: usize,
2089            _depth: fidl::encoding::Depth,
2090        ) -> fidl::Result<()> {
2091            encoder.debug_check_bounds::<BindRule2>(offset);
2092            // Delegate to tuple encoding.
2093            fidl::encoding::Encode::<BindRule2, D>::encode(
2094                (
2095                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(&self.key),
2096                    <Condition as fidl::encoding::ValueTypeMarker>::borrow(&self.condition),
2097                    <fidl::encoding::Vector<NodePropertyValue, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.values),
2098                ),
2099                encoder, offset, _depth
2100            )
2101        }
2102    }
2103    unsafe impl<
2104        D: fidl::encoding::ResourceDialect,
2105        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
2106        T1: fidl::encoding::Encode<Condition, D>,
2107        T2: fidl::encoding::Encode<fidl::encoding::Vector<NodePropertyValue, 64>, D>,
2108    > fidl::encoding::Encode<BindRule2, D> for (T0, T1, T2)
2109    {
2110        #[inline]
2111        unsafe fn encode(
2112            self,
2113            encoder: &mut fidl::encoding::Encoder<'_, D>,
2114            offset: usize,
2115            depth: fidl::encoding::Depth,
2116        ) -> fidl::Result<()> {
2117            encoder.debug_check_bounds::<BindRule2>(offset);
2118            // Zero out padding regions. There's no need to apply masks
2119            // because the unmasked parts will be overwritten by fields.
2120            unsafe {
2121                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(16);
2122                (ptr as *mut u64).write_unaligned(0);
2123            }
2124            // Write the fields.
2125            self.0.encode(encoder, offset + 0, depth)?;
2126            self.1.encode(encoder, offset + 16, depth)?;
2127            self.2.encode(encoder, offset + 24, depth)?;
2128            Ok(())
2129        }
2130    }
2131
2132    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BindRule2 {
2133        #[inline(always)]
2134        fn new_empty() -> Self {
2135            Self {
2136                key: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
2137                condition: fidl::new_empty!(Condition, D),
2138                values: fidl::new_empty!(fidl::encoding::Vector<NodePropertyValue, 64>, D),
2139            }
2140        }
2141
2142        #[inline]
2143        unsafe fn decode(
2144            &mut self,
2145            decoder: &mut fidl::encoding::Decoder<'_, D>,
2146            offset: usize,
2147            _depth: fidl::encoding::Depth,
2148        ) -> fidl::Result<()> {
2149            decoder.debug_check_bounds::<Self>(offset);
2150            // Verify that padding bytes are zero.
2151            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(16) };
2152            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2153            let mask = 0xffffffff00000000u64;
2154            let maskedval = padval & mask;
2155            if maskedval != 0 {
2156                return Err(fidl::Error::NonZeroPadding {
2157                    padding_start: offset + 16 + ((mask as u64).trailing_zeros() / 8) as usize,
2158                });
2159            }
2160            fidl::decode!(
2161                fidl::encoding::BoundedString<256>,
2162                D,
2163                &mut self.key,
2164                decoder,
2165                offset + 0,
2166                _depth
2167            )?;
2168            fidl::decode!(Condition, D, &mut self.condition, decoder, offset + 16, _depth)?;
2169            fidl::decode!(fidl::encoding::Vector<NodePropertyValue, 64>, D, &mut self.values, decoder, offset + 24, _depth)?;
2170            Ok(())
2171        }
2172    }
2173
2174    impl fidl::encoding::ValueTypeMarker for HealthDiagnosticItem {
2175        type Borrowed<'a> = &'a Self;
2176        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2177            value
2178        }
2179    }
2180
2181    unsafe impl fidl::encoding::TypeMarker for HealthDiagnosticItem {
2182        type Owned = Self;
2183
2184        #[inline(always)]
2185        fn inline_align(_context: fidl::encoding::Context) -> usize {
2186            8
2187        }
2188
2189        #[inline(always)]
2190        fn inline_size(_context: fidl::encoding::Context) -> usize {
2191            32
2192        }
2193    }
2194
2195    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthDiagnosticItem, D>
2196        for &HealthDiagnosticItem
2197    {
2198        #[inline]
2199        unsafe fn encode(
2200            self,
2201            encoder: &mut fidl::encoding::Encoder<'_, D>,
2202            offset: usize,
2203            _depth: fidl::encoding::Depth,
2204        ) -> fidl::Result<()> {
2205            encoder.debug_check_bounds::<HealthDiagnosticItem>(offset);
2206            // Delegate to tuple encoding.
2207            fidl::encoding::Encode::<HealthDiagnosticItem, D>::encode(
2208                (
2209                    <fidl::encoding::BoundedString<64> as fidl::encoding::ValueTypeMarker>::borrow(
2210                        &self.key,
2211                    ),
2212                    <HealthDiagnosticValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
2213                ),
2214                encoder,
2215                offset,
2216                _depth,
2217            )
2218        }
2219    }
2220    unsafe impl<
2221        D: fidl::encoding::ResourceDialect,
2222        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<64>, D>,
2223        T1: fidl::encoding::Encode<HealthDiagnosticValue, D>,
2224    > fidl::encoding::Encode<HealthDiagnosticItem, D> for (T0, T1)
2225    {
2226        #[inline]
2227        unsafe fn encode(
2228            self,
2229            encoder: &mut fidl::encoding::Encoder<'_, D>,
2230            offset: usize,
2231            depth: fidl::encoding::Depth,
2232        ) -> fidl::Result<()> {
2233            encoder.debug_check_bounds::<HealthDiagnosticItem>(offset);
2234            // Zero out padding regions. There's no need to apply masks
2235            // because the unmasked parts will be overwritten by fields.
2236            // Write the fields.
2237            self.0.encode(encoder, offset + 0, depth)?;
2238            self.1.encode(encoder, offset + 16, depth)?;
2239            Ok(())
2240        }
2241    }
2242
2243    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthDiagnosticItem {
2244        #[inline(always)]
2245        fn new_empty() -> Self {
2246            Self {
2247                key: fidl::new_empty!(fidl::encoding::BoundedString<64>, D),
2248                value: fidl::new_empty!(HealthDiagnosticValue, D),
2249            }
2250        }
2251
2252        #[inline]
2253        unsafe fn decode(
2254            &mut self,
2255            decoder: &mut fidl::encoding::Decoder<'_, D>,
2256            offset: usize,
2257            _depth: fidl::encoding::Depth,
2258        ) -> fidl::Result<()> {
2259            decoder.debug_check_bounds::<Self>(offset);
2260            // Verify that padding bytes are zero.
2261            fidl::decode!(
2262                fidl::encoding::BoundedString<64>,
2263                D,
2264                &mut self.key,
2265                decoder,
2266                offset + 0,
2267                _depth
2268            )?;
2269            fidl::decode!(HealthDiagnosticValue, D, &mut self.value, decoder, offset + 16, _depth)?;
2270            Ok(())
2271        }
2272    }
2273
2274    impl fidl::encoding::ValueTypeMarker for NodeProperty2 {
2275        type Borrowed<'a> = &'a Self;
2276        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2277            value
2278        }
2279    }
2280
2281    unsafe impl fidl::encoding::TypeMarker for NodeProperty2 {
2282        type Owned = Self;
2283
2284        #[inline(always)]
2285        fn inline_align(_context: fidl::encoding::Context) -> usize {
2286            8
2287        }
2288
2289        #[inline(always)]
2290        fn inline_size(_context: fidl::encoding::Context) -> usize {
2291            32
2292        }
2293    }
2294
2295    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeProperty2, D>
2296        for &NodeProperty2
2297    {
2298        #[inline]
2299        unsafe fn encode(
2300            self,
2301            encoder: &mut fidl::encoding::Encoder<'_, D>,
2302            offset: usize,
2303            _depth: fidl::encoding::Depth,
2304        ) -> fidl::Result<()> {
2305            encoder.debug_check_bounds::<NodeProperty2>(offset);
2306            // Delegate to tuple encoding.
2307            fidl::encoding::Encode::<NodeProperty2, D>::encode(
2308                (
2309                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
2310                        &self.key,
2311                    ),
2312                    <NodePropertyValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
2313                ),
2314                encoder,
2315                offset,
2316                _depth,
2317            )
2318        }
2319    }
2320    unsafe impl<
2321        D: fidl::encoding::ResourceDialect,
2322        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<256>, D>,
2323        T1: fidl::encoding::Encode<NodePropertyValue, D>,
2324    > fidl::encoding::Encode<NodeProperty2, D> for (T0, T1)
2325    {
2326        #[inline]
2327        unsafe fn encode(
2328            self,
2329            encoder: &mut fidl::encoding::Encoder<'_, D>,
2330            offset: usize,
2331            depth: fidl::encoding::Depth,
2332        ) -> fidl::Result<()> {
2333            encoder.debug_check_bounds::<NodeProperty2>(offset);
2334            // Zero out padding regions. There's no need to apply masks
2335            // because the unmasked parts will be overwritten by fields.
2336            // Write the fields.
2337            self.0.encode(encoder, offset + 0, depth)?;
2338            self.1.encode(encoder, offset + 16, depth)?;
2339            Ok(())
2340        }
2341    }
2342
2343    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeProperty2 {
2344        #[inline(always)]
2345        fn new_empty() -> Self {
2346            Self {
2347                key: fidl::new_empty!(fidl::encoding::BoundedString<256>, D),
2348                value: fidl::new_empty!(NodePropertyValue, D),
2349            }
2350        }
2351
2352        #[inline]
2353        unsafe fn decode(
2354            &mut self,
2355            decoder: &mut fidl::encoding::Decoder<'_, D>,
2356            offset: usize,
2357            _depth: fidl::encoding::Depth,
2358        ) -> fidl::Result<()> {
2359            decoder.debug_check_bounds::<Self>(offset);
2360            // Verify that padding bytes are zero.
2361            fidl::decode!(
2362                fidl::encoding::BoundedString<256>,
2363                D,
2364                &mut self.key,
2365                decoder,
2366                offset + 0,
2367                _depth
2368            )?;
2369            fidl::decode!(NodePropertyValue, D, &mut self.value, decoder, offset + 16, _depth)?;
2370            Ok(())
2371        }
2372    }
2373
2374    impl fidl::encoding::ValueTypeMarker for NodePropertyEntry2 {
2375        type Borrowed<'a> = &'a Self;
2376        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2377            value
2378        }
2379    }
2380
2381    unsafe impl fidl::encoding::TypeMarker for NodePropertyEntry2 {
2382        type Owned = Self;
2383
2384        #[inline(always)]
2385        fn inline_align(_context: fidl::encoding::Context) -> usize {
2386            8
2387        }
2388
2389        #[inline(always)]
2390        fn inline_size(_context: fidl::encoding::Context) -> usize {
2391            32
2392        }
2393    }
2394
2395    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyEntry2, D>
2396        for &NodePropertyEntry2
2397    {
2398        #[inline]
2399        unsafe fn encode(
2400            self,
2401            encoder: &mut fidl::encoding::Encoder<'_, D>,
2402            offset: usize,
2403            _depth: fidl::encoding::Depth,
2404        ) -> fidl::Result<()> {
2405            encoder.debug_check_bounds::<NodePropertyEntry2>(offset);
2406            // Delegate to tuple encoding.
2407            fidl::encoding::Encode::<NodePropertyEntry2, D>::encode(
2408                (
2409                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow(&self.name),
2410                    <fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
2411                ),
2412                encoder, offset, _depth
2413            )
2414        }
2415    }
2416    unsafe impl<
2417        D: fidl::encoding::ResourceDialect,
2418        T0: fidl::encoding::Encode<fidl::encoding::BoundedString<128>, D>,
2419        T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty2, 64>, D>,
2420    > fidl::encoding::Encode<NodePropertyEntry2, D> for (T0, T1)
2421    {
2422        #[inline]
2423        unsafe fn encode(
2424            self,
2425            encoder: &mut fidl::encoding::Encoder<'_, D>,
2426            offset: usize,
2427            depth: fidl::encoding::Depth,
2428        ) -> fidl::Result<()> {
2429            encoder.debug_check_bounds::<NodePropertyEntry2>(offset);
2430            // Zero out padding regions. There's no need to apply masks
2431            // because the unmasked parts will be overwritten by fields.
2432            // Write the fields.
2433            self.0.encode(encoder, offset + 0, depth)?;
2434            self.1.encode(encoder, offset + 16, depth)?;
2435            Ok(())
2436        }
2437    }
2438
2439    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyEntry2 {
2440        #[inline(always)]
2441        fn new_empty() -> Self {
2442            Self {
2443                name: fidl::new_empty!(fidl::encoding::BoundedString<128>, D),
2444                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty2, 64>, D),
2445            }
2446        }
2447
2448        #[inline]
2449        unsafe fn decode(
2450            &mut self,
2451            decoder: &mut fidl::encoding::Decoder<'_, D>,
2452            offset: usize,
2453            _depth: fidl::encoding::Depth,
2454        ) -> fidl::Result<()> {
2455            decoder.debug_check_bounds::<Self>(offset);
2456            // Verify that padding bytes are zero.
2457            fidl::decode!(
2458                fidl::encoding::BoundedString<128>,
2459                D,
2460                &mut self.name,
2461                decoder,
2462                offset + 0,
2463                _depth
2464            )?;
2465            fidl::decode!(fidl::encoding::Vector<NodeProperty2, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
2466            Ok(())
2467        }
2468    }
2469
2470    impl fidl::encoding::ValueTypeMarker for ParentSpec2 {
2471        type Borrowed<'a> = &'a Self;
2472        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2473            value
2474        }
2475    }
2476
2477    unsafe impl fidl::encoding::TypeMarker for ParentSpec2 {
2478        type Owned = Self;
2479
2480        #[inline(always)]
2481        fn inline_align(_context: fidl::encoding::Context) -> usize {
2482            8
2483        }
2484
2485        #[inline(always)]
2486        fn inline_size(_context: fidl::encoding::Context) -> usize {
2487            32
2488        }
2489    }
2490
2491    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ParentSpec2, D>
2492        for &ParentSpec2
2493    {
2494        #[inline]
2495        unsafe fn encode(
2496            self,
2497            encoder: &mut fidl::encoding::Encoder<'_, D>,
2498            offset: usize,
2499            _depth: fidl::encoding::Depth,
2500        ) -> fidl::Result<()> {
2501            encoder.debug_check_bounds::<ParentSpec2>(offset);
2502            // Delegate to tuple encoding.
2503            fidl::encoding::Encode::<ParentSpec2, D>::encode(
2504                (
2505                    <fidl::encoding::Vector<BindRule2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.bind_rules),
2506                    <fidl::encoding::Vector<NodeProperty2, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.properties),
2507                ),
2508                encoder, offset, _depth
2509            )
2510        }
2511    }
2512    unsafe impl<
2513        D: fidl::encoding::ResourceDialect,
2514        T0: fidl::encoding::Encode<fidl::encoding::Vector<BindRule2, 64>, D>,
2515        T1: fidl::encoding::Encode<fidl::encoding::Vector<NodeProperty2, 64>, D>,
2516    > fidl::encoding::Encode<ParentSpec2, D> for (T0, T1)
2517    {
2518        #[inline]
2519        unsafe fn encode(
2520            self,
2521            encoder: &mut fidl::encoding::Encoder<'_, D>,
2522            offset: usize,
2523            depth: fidl::encoding::Depth,
2524        ) -> fidl::Result<()> {
2525            encoder.debug_check_bounds::<ParentSpec2>(offset);
2526            // Zero out padding regions. There's no need to apply masks
2527            // because the unmasked parts will be overwritten by fields.
2528            // Write the fields.
2529            self.0.encode(encoder, offset + 0, depth)?;
2530            self.1.encode(encoder, offset + 16, depth)?;
2531            Ok(())
2532        }
2533    }
2534
2535    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ParentSpec2 {
2536        #[inline(always)]
2537        fn new_empty() -> Self {
2538            Self {
2539                bind_rules: fidl::new_empty!(fidl::encoding::Vector<BindRule2, 64>, D),
2540                properties: fidl::new_empty!(fidl::encoding::Vector<NodeProperty2, 64>, D),
2541            }
2542        }
2543
2544        #[inline]
2545        unsafe fn decode(
2546            &mut self,
2547            decoder: &mut fidl::encoding::Decoder<'_, D>,
2548            offset: usize,
2549            _depth: fidl::encoding::Depth,
2550        ) -> fidl::Result<()> {
2551            decoder.debug_check_bounds::<Self>(offset);
2552            // Verify that padding bytes are zero.
2553            fidl::decode!(fidl::encoding::Vector<BindRule2, 64>, D, &mut self.bind_rules, decoder, offset + 0, _depth)?;
2554            fidl::decode!(fidl::encoding::Vector<NodeProperty2, 64>, D, &mut self.properties, decoder, offset + 16, _depth)?;
2555            Ok(())
2556        }
2557    }
2558
2559    impl fidl::encoding::ValueTypeMarker for ResourceProperty {
2560        type Borrowed<'a> = &'a Self;
2561        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2562            value
2563        }
2564    }
2565
2566    unsafe impl fidl::encoding::TypeMarker for ResourceProperty {
2567        type Owned = Self;
2568
2569        #[inline(always)]
2570        fn inline_align(_context: fidl::encoding::Context) -> usize {
2571            8
2572        }
2573
2574        #[inline(always)]
2575        fn inline_size(_context: fidl::encoding::Context) -> usize {
2576            32
2577        }
2578    }
2579
2580    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ResourceProperty, D>
2581        for &ResourceProperty
2582    {
2583        #[inline]
2584        unsafe fn encode(
2585            self,
2586            encoder: &mut fidl::encoding::Encoder<'_, D>,
2587            offset: usize,
2588            _depth: fidl::encoding::Depth,
2589        ) -> fidl::Result<()> {
2590            encoder.debug_check_bounds::<ResourceProperty>(offset);
2591            // Delegate to tuple encoding.
2592            fidl::encoding::Encode::<ResourceProperty, D>::encode(
2593                (
2594                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
2595                        &self.key,
2596                    ),
2597                    <NodePropertyValue as fidl::encoding::ValueTypeMarker>::borrow(&self.value),
2598                ),
2599                encoder,
2600                offset,
2601                _depth,
2602            )
2603        }
2604    }
2605    unsafe impl<
2606        D: fidl::encoding::ResourceDialect,
2607        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
2608        T1: fidl::encoding::Encode<NodePropertyValue, D>,
2609    > fidl::encoding::Encode<ResourceProperty, D> for (T0, T1)
2610    {
2611        #[inline]
2612        unsafe fn encode(
2613            self,
2614            encoder: &mut fidl::encoding::Encoder<'_, D>,
2615            offset: usize,
2616            depth: fidl::encoding::Depth,
2617        ) -> fidl::Result<()> {
2618            encoder.debug_check_bounds::<ResourceProperty>(offset);
2619            // Zero out padding regions. There's no need to apply masks
2620            // because the unmasked parts will be overwritten by fields.
2621            // Write the fields.
2622            self.0.encode(encoder, offset + 0, depth)?;
2623            self.1.encode(encoder, offset + 16, depth)?;
2624            Ok(())
2625        }
2626    }
2627
2628    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ResourceProperty {
2629        #[inline(always)]
2630        fn new_empty() -> Self {
2631            Self {
2632                key: fidl::new_empty!(fidl::encoding::UnboundedString, D),
2633                value: fidl::new_empty!(NodePropertyValue, D),
2634            }
2635        }
2636
2637        #[inline]
2638        unsafe fn decode(
2639            &mut self,
2640            decoder: &mut fidl::encoding::Decoder<'_, D>,
2641            offset: usize,
2642            _depth: fidl::encoding::Depth,
2643        ) -> fidl::Result<()> {
2644            decoder.debug_check_bounds::<Self>(offset);
2645            // Verify that padding bytes are zero.
2646            fidl::decode!(
2647                fidl::encoding::UnboundedString,
2648                D,
2649                &mut self.key,
2650                decoder,
2651                offset + 0,
2652                _depth
2653            )?;
2654            fidl::decode!(NodePropertyValue, D, &mut self.value, decoder, offset + 16, _depth)?;
2655            Ok(())
2656        }
2657    }
2658
2659    impl BusInfo {
2660        #[inline(always)]
2661        fn max_ordinal_present(&self) -> u64 {
2662            if let Some(_) = self.address_stability {
2663                return 3;
2664            }
2665            if let Some(_) = self.address {
2666                return 2;
2667            }
2668            if let Some(_) = self.bus {
2669                return 1;
2670            }
2671            0
2672        }
2673    }
2674
2675    impl fidl::encoding::ValueTypeMarker for BusInfo {
2676        type Borrowed<'a> = &'a Self;
2677        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2678            value
2679        }
2680    }
2681
2682    unsafe impl fidl::encoding::TypeMarker for BusInfo {
2683        type Owned = Self;
2684
2685        #[inline(always)]
2686        fn inline_align(_context: fidl::encoding::Context) -> usize {
2687            8
2688        }
2689
2690        #[inline(always)]
2691        fn inline_size(_context: fidl::encoding::Context) -> usize {
2692            16
2693        }
2694    }
2695
2696    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BusInfo, D> for &BusInfo {
2697        unsafe fn encode(
2698            self,
2699            encoder: &mut fidl::encoding::Encoder<'_, D>,
2700            offset: usize,
2701            mut depth: fidl::encoding::Depth,
2702        ) -> fidl::Result<()> {
2703            encoder.debug_check_bounds::<BusInfo>(offset);
2704            // Vector header
2705            let max_ordinal: u64 = self.max_ordinal_present();
2706            encoder.write_num(max_ordinal, offset);
2707            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2708            // Calling encoder.out_of_line_offset(0) is not allowed.
2709            if max_ordinal == 0 {
2710                return Ok(());
2711            }
2712            depth.increment()?;
2713            let envelope_size = 8;
2714            let bytes_len = max_ordinal as usize * envelope_size;
2715            #[allow(unused_variables)]
2716            let offset = encoder.out_of_line_offset(bytes_len);
2717            let mut _prev_end_offset: usize = 0;
2718            if 1 > max_ordinal {
2719                return Ok(());
2720            }
2721
2722            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2723            // are envelope_size bytes.
2724            let cur_offset: usize = (1 - 1) * envelope_size;
2725
2726            // Zero reserved fields.
2727            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2728
2729            // Safety:
2730            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2731            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2732            //   envelope_size bytes, there is always sufficient room.
2733            fidl::encoding::encode_in_envelope_optional::<BusType, D>(
2734                self.bus.as_ref().map(<BusType as fidl::encoding::ValueTypeMarker>::borrow),
2735                encoder,
2736                offset + cur_offset,
2737                depth,
2738            )?;
2739
2740            _prev_end_offset = cur_offset + envelope_size;
2741            if 2 > max_ordinal {
2742                return Ok(());
2743            }
2744
2745            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2746            // are envelope_size bytes.
2747            let cur_offset: usize = (2 - 1) * envelope_size;
2748
2749            // Zero reserved fields.
2750            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2751
2752            // Safety:
2753            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2754            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2755            //   envelope_size bytes, there is always sufficient room.
2756            fidl::encoding::encode_in_envelope_optional::<DeviceAddress, D>(
2757                self.address
2758                    .as_ref()
2759                    .map(<DeviceAddress as fidl::encoding::ValueTypeMarker>::borrow),
2760                encoder,
2761                offset + cur_offset,
2762                depth,
2763            )?;
2764
2765            _prev_end_offset = cur_offset + envelope_size;
2766            if 3 > max_ordinal {
2767                return Ok(());
2768            }
2769
2770            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2771            // are envelope_size bytes.
2772            let cur_offset: usize = (3 - 1) * envelope_size;
2773
2774            // Zero reserved fields.
2775            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2776
2777            // Safety:
2778            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2779            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2780            //   envelope_size bytes, there is always sufficient room.
2781            fidl::encoding::encode_in_envelope_optional::<DeviceAddressStability, D>(
2782                self.address_stability
2783                    .as_ref()
2784                    .map(<DeviceAddressStability as fidl::encoding::ValueTypeMarker>::borrow),
2785                encoder,
2786                offset + cur_offset,
2787                depth,
2788            )?;
2789
2790            _prev_end_offset = cur_offset + envelope_size;
2791
2792            Ok(())
2793        }
2794    }
2795
2796    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BusInfo {
2797        #[inline(always)]
2798        fn new_empty() -> Self {
2799            Self::default()
2800        }
2801
2802        unsafe fn decode(
2803            &mut self,
2804            decoder: &mut fidl::encoding::Decoder<'_, D>,
2805            offset: usize,
2806            mut depth: fidl::encoding::Depth,
2807        ) -> fidl::Result<()> {
2808            decoder.debug_check_bounds::<Self>(offset);
2809            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2810                None => return Err(fidl::Error::NotNullable),
2811                Some(len) => len,
2812            };
2813            // Calling decoder.out_of_line_offset(0) is not allowed.
2814            if len == 0 {
2815                return Ok(());
2816            };
2817            depth.increment()?;
2818            let envelope_size = 8;
2819            let bytes_len = len * envelope_size;
2820            let offset = decoder.out_of_line_offset(bytes_len)?;
2821            // Decode the envelope for each type.
2822            let mut _next_ordinal_to_read = 0;
2823            let mut next_offset = offset;
2824            let end_offset = offset + bytes_len;
2825            _next_ordinal_to_read += 1;
2826            if next_offset >= end_offset {
2827                return Ok(());
2828            }
2829
2830            // Decode unknown envelopes for gaps in ordinals.
2831            while _next_ordinal_to_read < 1 {
2832                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2833                _next_ordinal_to_read += 1;
2834                next_offset += envelope_size;
2835            }
2836
2837            let next_out_of_line = decoder.next_out_of_line();
2838            let handles_before = decoder.remaining_handles();
2839            if let Some((inlined, num_bytes, num_handles)) =
2840                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2841            {
2842                let member_inline_size =
2843                    <BusType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2844                if inlined != (member_inline_size <= 4) {
2845                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2846                }
2847                let inner_offset;
2848                let mut inner_depth = depth.clone();
2849                if inlined {
2850                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2851                    inner_offset = next_offset;
2852                } else {
2853                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2854                    inner_depth.increment()?;
2855                }
2856                let val_ref = self.bus.get_or_insert_with(|| fidl::new_empty!(BusType, D));
2857                fidl::decode!(BusType, D, val_ref, decoder, inner_offset, inner_depth)?;
2858                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2859                {
2860                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2861                }
2862                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2863                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2864                }
2865            }
2866
2867            next_offset += envelope_size;
2868            _next_ordinal_to_read += 1;
2869            if next_offset >= end_offset {
2870                return Ok(());
2871            }
2872
2873            // Decode unknown envelopes for gaps in ordinals.
2874            while _next_ordinal_to_read < 2 {
2875                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2876                _next_ordinal_to_read += 1;
2877                next_offset += envelope_size;
2878            }
2879
2880            let next_out_of_line = decoder.next_out_of_line();
2881            let handles_before = decoder.remaining_handles();
2882            if let Some((inlined, num_bytes, num_handles)) =
2883                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2884            {
2885                let member_inline_size =
2886                    <DeviceAddress as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2887                if inlined != (member_inline_size <= 4) {
2888                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2889                }
2890                let inner_offset;
2891                let mut inner_depth = depth.clone();
2892                if inlined {
2893                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2894                    inner_offset = next_offset;
2895                } else {
2896                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2897                    inner_depth.increment()?;
2898                }
2899                let val_ref =
2900                    self.address.get_or_insert_with(|| fidl::new_empty!(DeviceAddress, D));
2901                fidl::decode!(DeviceAddress, D, val_ref, decoder, inner_offset, inner_depth)?;
2902                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2903                {
2904                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2905                }
2906                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2907                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2908                }
2909            }
2910
2911            next_offset += envelope_size;
2912            _next_ordinal_to_read += 1;
2913            if next_offset >= end_offset {
2914                return Ok(());
2915            }
2916
2917            // Decode unknown envelopes for gaps in ordinals.
2918            while _next_ordinal_to_read < 3 {
2919                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2920                _next_ordinal_to_read += 1;
2921                next_offset += envelope_size;
2922            }
2923
2924            let next_out_of_line = decoder.next_out_of_line();
2925            let handles_before = decoder.remaining_handles();
2926            if let Some((inlined, num_bytes, num_handles)) =
2927                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2928            {
2929                let member_inline_size =
2930                    <DeviceAddressStability as fidl::encoding::TypeMarker>::inline_size(
2931                        decoder.context,
2932                    );
2933                if inlined != (member_inline_size <= 4) {
2934                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2935                }
2936                let inner_offset;
2937                let mut inner_depth = depth.clone();
2938                if inlined {
2939                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2940                    inner_offset = next_offset;
2941                } else {
2942                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2943                    inner_depth.increment()?;
2944                }
2945                let val_ref = self
2946                    .address_stability
2947                    .get_or_insert_with(|| fidl::new_empty!(DeviceAddressStability, D));
2948                fidl::decode!(
2949                    DeviceAddressStability,
2950                    D,
2951                    val_ref,
2952                    decoder,
2953                    inner_offset,
2954                    inner_depth
2955                )?;
2956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2957                {
2958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2959                }
2960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2962                }
2963            }
2964
2965            next_offset += envelope_size;
2966
2967            // Decode the remaining unknown envelopes.
2968            while next_offset < end_offset {
2969                _next_ordinal_to_read += 1;
2970                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2971                next_offset += envelope_size;
2972            }
2973
2974            Ok(())
2975        }
2976    }
2977
2978    impl CompositeDriverInfo {
2979        #[inline(always)]
2980        fn max_ordinal_present(&self) -> u64 {
2981            if let Some(_) = self.driver_info {
2982                return 2;
2983            }
2984            if let Some(_) = self.composite_name {
2985                return 1;
2986            }
2987            0
2988        }
2989    }
2990
2991    impl fidl::encoding::ValueTypeMarker for CompositeDriverInfo {
2992        type Borrowed<'a> = &'a Self;
2993        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2994            value
2995        }
2996    }
2997
2998    unsafe impl fidl::encoding::TypeMarker for CompositeDriverInfo {
2999        type Owned = Self;
3000
3001        #[inline(always)]
3002        fn inline_align(_context: fidl::encoding::Context) -> usize {
3003            8
3004        }
3005
3006        #[inline(always)]
3007        fn inline_size(_context: fidl::encoding::Context) -> usize {
3008            16
3009        }
3010    }
3011
3012    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeDriverInfo, D>
3013        for &CompositeDriverInfo
3014    {
3015        unsafe fn encode(
3016            self,
3017            encoder: &mut fidl::encoding::Encoder<'_, D>,
3018            offset: usize,
3019            mut depth: fidl::encoding::Depth,
3020        ) -> fidl::Result<()> {
3021            encoder.debug_check_bounds::<CompositeDriverInfo>(offset);
3022            // Vector header
3023            let max_ordinal: u64 = self.max_ordinal_present();
3024            encoder.write_num(max_ordinal, offset);
3025            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3026            // Calling encoder.out_of_line_offset(0) is not allowed.
3027            if max_ordinal == 0 {
3028                return Ok(());
3029            }
3030            depth.increment()?;
3031            let envelope_size = 8;
3032            let bytes_len = max_ordinal as usize * envelope_size;
3033            #[allow(unused_variables)]
3034            let offset = encoder.out_of_line_offset(bytes_len);
3035            let mut _prev_end_offset: usize = 0;
3036            if 1 > max_ordinal {
3037                return Ok(());
3038            }
3039
3040            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3041            // are envelope_size bytes.
3042            let cur_offset: usize = (1 - 1) * envelope_size;
3043
3044            // Zero reserved fields.
3045            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3046
3047            // Safety:
3048            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3049            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3050            //   envelope_size bytes, there is always sufficient room.
3051            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3052                self.composite_name.as_ref().map(
3053                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3054                ),
3055                encoder,
3056                offset + cur_offset,
3057                depth,
3058            )?;
3059
3060            _prev_end_offset = cur_offset + envelope_size;
3061            if 2 > max_ordinal {
3062                return Ok(());
3063            }
3064
3065            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3066            // are envelope_size bytes.
3067            let cur_offset: usize = (2 - 1) * envelope_size;
3068
3069            // Zero reserved fields.
3070            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3071
3072            // Safety:
3073            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3074            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3075            //   envelope_size bytes, there is always sufficient room.
3076            fidl::encoding::encode_in_envelope_optional::<DriverInfo, D>(
3077                self.driver_info
3078                    .as_ref()
3079                    .map(<DriverInfo as fidl::encoding::ValueTypeMarker>::borrow),
3080                encoder,
3081                offset + cur_offset,
3082                depth,
3083            )?;
3084
3085            _prev_end_offset = cur_offset + envelope_size;
3086
3087            Ok(())
3088        }
3089    }
3090
3091    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeDriverInfo {
3092        #[inline(always)]
3093        fn new_empty() -> Self {
3094            Self::default()
3095        }
3096
3097        unsafe fn decode(
3098            &mut self,
3099            decoder: &mut fidl::encoding::Decoder<'_, D>,
3100            offset: usize,
3101            mut depth: fidl::encoding::Depth,
3102        ) -> fidl::Result<()> {
3103            decoder.debug_check_bounds::<Self>(offset);
3104            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3105                None => return Err(fidl::Error::NotNullable),
3106                Some(len) => len,
3107            };
3108            // Calling decoder.out_of_line_offset(0) is not allowed.
3109            if len == 0 {
3110                return Ok(());
3111            };
3112            depth.increment()?;
3113            let envelope_size = 8;
3114            let bytes_len = len * envelope_size;
3115            let offset = decoder.out_of_line_offset(bytes_len)?;
3116            // Decode the envelope for each type.
3117            let mut _next_ordinal_to_read = 0;
3118            let mut next_offset = offset;
3119            let end_offset = offset + bytes_len;
3120            _next_ordinal_to_read += 1;
3121            if next_offset >= end_offset {
3122                return Ok(());
3123            }
3124
3125            // Decode unknown envelopes for gaps in ordinals.
3126            while _next_ordinal_to_read < 1 {
3127                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3128                _next_ordinal_to_read += 1;
3129                next_offset += envelope_size;
3130            }
3131
3132            let next_out_of_line = decoder.next_out_of_line();
3133            let handles_before = decoder.remaining_handles();
3134            if let Some((inlined, num_bytes, num_handles)) =
3135                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3136            {
3137                let member_inline_size =
3138                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3139                        decoder.context,
3140                    );
3141                if inlined != (member_inline_size <= 4) {
3142                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3143                }
3144                let inner_offset;
3145                let mut inner_depth = depth.clone();
3146                if inlined {
3147                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3148                    inner_offset = next_offset;
3149                } else {
3150                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3151                    inner_depth.increment()?;
3152                }
3153                let val_ref = self
3154                    .composite_name
3155                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3156                fidl::decode!(
3157                    fidl::encoding::UnboundedString,
3158                    D,
3159                    val_ref,
3160                    decoder,
3161                    inner_offset,
3162                    inner_depth
3163                )?;
3164                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3165                {
3166                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3167                }
3168                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3169                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3170                }
3171            }
3172
3173            next_offset += envelope_size;
3174            _next_ordinal_to_read += 1;
3175            if next_offset >= end_offset {
3176                return Ok(());
3177            }
3178
3179            // Decode unknown envelopes for gaps in ordinals.
3180            while _next_ordinal_to_read < 2 {
3181                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3182                _next_ordinal_to_read += 1;
3183                next_offset += envelope_size;
3184            }
3185
3186            let next_out_of_line = decoder.next_out_of_line();
3187            let handles_before = decoder.remaining_handles();
3188            if let Some((inlined, num_bytes, num_handles)) =
3189                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3190            {
3191                let member_inline_size =
3192                    <DriverInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3193                if inlined != (member_inline_size <= 4) {
3194                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3195                }
3196                let inner_offset;
3197                let mut inner_depth = depth.clone();
3198                if inlined {
3199                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3200                    inner_offset = next_offset;
3201                } else {
3202                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3203                    inner_depth.increment()?;
3204                }
3205                let val_ref =
3206                    self.driver_info.get_or_insert_with(|| fidl::new_empty!(DriverInfo, D));
3207                fidl::decode!(DriverInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
3208                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3209                {
3210                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3211                }
3212                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3213                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3214                }
3215            }
3216
3217            next_offset += envelope_size;
3218
3219            // Decode the remaining unknown envelopes.
3220            while next_offset < end_offset {
3221                _next_ordinal_to_read += 1;
3222                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3223                next_offset += envelope_size;
3224            }
3225
3226            Ok(())
3227        }
3228    }
3229
3230    impl CompositeDriverMatch {
3231        #[inline(always)]
3232        fn max_ordinal_present(&self) -> u64 {
3233            if let Some(_) = self.primary_parent_index {
3234                return 3;
3235            }
3236            if let Some(_) = self.parent_names {
3237                return 2;
3238            }
3239            if let Some(_) = self.composite_driver {
3240                return 1;
3241            }
3242            0
3243        }
3244    }
3245
3246    impl fidl::encoding::ValueTypeMarker for CompositeDriverMatch {
3247        type Borrowed<'a> = &'a Self;
3248        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3249            value
3250        }
3251    }
3252
3253    unsafe impl fidl::encoding::TypeMarker for CompositeDriverMatch {
3254        type Owned = Self;
3255
3256        #[inline(always)]
3257        fn inline_align(_context: fidl::encoding::Context) -> usize {
3258            8
3259        }
3260
3261        #[inline(always)]
3262        fn inline_size(_context: fidl::encoding::Context) -> usize {
3263            16
3264        }
3265    }
3266
3267    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeDriverMatch, D>
3268        for &CompositeDriverMatch
3269    {
3270        unsafe fn encode(
3271            self,
3272            encoder: &mut fidl::encoding::Encoder<'_, D>,
3273            offset: usize,
3274            mut depth: fidl::encoding::Depth,
3275        ) -> fidl::Result<()> {
3276            encoder.debug_check_bounds::<CompositeDriverMatch>(offset);
3277            // Vector header
3278            let max_ordinal: u64 = self.max_ordinal_present();
3279            encoder.write_num(max_ordinal, offset);
3280            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3281            // Calling encoder.out_of_line_offset(0) is not allowed.
3282            if max_ordinal == 0 {
3283                return Ok(());
3284            }
3285            depth.increment()?;
3286            let envelope_size = 8;
3287            let bytes_len = max_ordinal as usize * envelope_size;
3288            #[allow(unused_variables)]
3289            let offset = encoder.out_of_line_offset(bytes_len);
3290            let mut _prev_end_offset: usize = 0;
3291            if 1 > max_ordinal {
3292                return Ok(());
3293            }
3294
3295            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3296            // are envelope_size bytes.
3297            let cur_offset: usize = (1 - 1) * envelope_size;
3298
3299            // Zero reserved fields.
3300            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3301
3302            // Safety:
3303            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3304            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3305            //   envelope_size bytes, there is always sufficient room.
3306            fidl::encoding::encode_in_envelope_optional::<CompositeDriverInfo, D>(
3307                self.composite_driver
3308                    .as_ref()
3309                    .map(<CompositeDriverInfo as fidl::encoding::ValueTypeMarker>::borrow),
3310                encoder,
3311                offset + cur_offset,
3312                depth,
3313            )?;
3314
3315            _prev_end_offset = cur_offset + envelope_size;
3316            if 2 > max_ordinal {
3317                return Ok(());
3318            }
3319
3320            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3321            // are envelope_size bytes.
3322            let cur_offset: usize = (2 - 1) * envelope_size;
3323
3324            // Zero reserved fields.
3325            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3326
3327            // Safety:
3328            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3329            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3330            //   envelope_size bytes, there is always sufficient room.
3331            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>, D>(
3332            self.parent_names.as_ref().map(<fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString> as fidl::encoding::ValueTypeMarker>::borrow),
3333            encoder, offset + cur_offset, depth
3334        )?;
3335
3336            _prev_end_offset = cur_offset + envelope_size;
3337            if 3 > max_ordinal {
3338                return Ok(());
3339            }
3340
3341            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3342            // are envelope_size bytes.
3343            let cur_offset: usize = (3 - 1) * envelope_size;
3344
3345            // Zero reserved fields.
3346            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3347
3348            // Safety:
3349            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3350            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3351            //   envelope_size bytes, there is always sufficient room.
3352            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3353                self.primary_parent_index
3354                    .as_ref()
3355                    .map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3356                encoder,
3357                offset + cur_offset,
3358                depth,
3359            )?;
3360
3361            _prev_end_offset = cur_offset + envelope_size;
3362
3363            Ok(())
3364        }
3365    }
3366
3367    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeDriverMatch {
3368        #[inline(always)]
3369        fn new_empty() -> Self {
3370            Self::default()
3371        }
3372
3373        unsafe fn decode(
3374            &mut self,
3375            decoder: &mut fidl::encoding::Decoder<'_, D>,
3376            offset: usize,
3377            mut depth: fidl::encoding::Depth,
3378        ) -> fidl::Result<()> {
3379            decoder.debug_check_bounds::<Self>(offset);
3380            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3381                None => return Err(fidl::Error::NotNullable),
3382                Some(len) => len,
3383            };
3384            // Calling decoder.out_of_line_offset(0) is not allowed.
3385            if len == 0 {
3386                return Ok(());
3387            };
3388            depth.increment()?;
3389            let envelope_size = 8;
3390            let bytes_len = len * envelope_size;
3391            let offset = decoder.out_of_line_offset(bytes_len)?;
3392            // Decode the envelope for each type.
3393            let mut _next_ordinal_to_read = 0;
3394            let mut next_offset = offset;
3395            let end_offset = offset + bytes_len;
3396            _next_ordinal_to_read += 1;
3397            if next_offset >= end_offset {
3398                return Ok(());
3399            }
3400
3401            // Decode unknown envelopes for gaps in ordinals.
3402            while _next_ordinal_to_read < 1 {
3403                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3404                _next_ordinal_to_read += 1;
3405                next_offset += envelope_size;
3406            }
3407
3408            let next_out_of_line = decoder.next_out_of_line();
3409            let handles_before = decoder.remaining_handles();
3410            if let Some((inlined, num_bytes, num_handles)) =
3411                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3412            {
3413                let member_inline_size =
3414                    <CompositeDriverInfo as fidl::encoding::TypeMarker>::inline_size(
3415                        decoder.context,
3416                    );
3417                if inlined != (member_inline_size <= 4) {
3418                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3419                }
3420                let inner_offset;
3421                let mut inner_depth = depth.clone();
3422                if inlined {
3423                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3424                    inner_offset = next_offset;
3425                } else {
3426                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3427                    inner_depth.increment()?;
3428                }
3429                let val_ref = self
3430                    .composite_driver
3431                    .get_or_insert_with(|| fidl::new_empty!(CompositeDriverInfo, D));
3432                fidl::decode!(CompositeDriverInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
3433                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3434                {
3435                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3436                }
3437                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3438                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3439                }
3440            }
3441
3442            next_offset += envelope_size;
3443            _next_ordinal_to_read += 1;
3444            if next_offset >= end_offset {
3445                return Ok(());
3446            }
3447
3448            // Decode unknown envelopes for gaps in ordinals.
3449            while _next_ordinal_to_read < 2 {
3450                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3451                _next_ordinal_to_read += 1;
3452                next_offset += envelope_size;
3453            }
3454
3455            let next_out_of_line = decoder.next_out_of_line();
3456            let handles_before = decoder.remaining_handles();
3457            if let Some((inlined, num_bytes, num_handles)) =
3458                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3459            {
3460                let member_inline_size = <fidl::encoding::UnboundedVector<
3461                    fidl::encoding::UnboundedString,
3462                > as fidl::encoding::TypeMarker>::inline_size(
3463                    decoder.context
3464                );
3465                if inlined != (member_inline_size <= 4) {
3466                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3467                }
3468                let inner_offset;
3469                let mut inner_depth = depth.clone();
3470                if inlined {
3471                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3472                    inner_offset = next_offset;
3473                } else {
3474                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3475                    inner_depth.increment()?;
3476                }
3477                let val_ref = self.parent_names.get_or_insert_with(|| {
3478                    fidl::new_empty!(
3479                        fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
3480                        D
3481                    )
3482                });
3483                fidl::decode!(
3484                    fidl::encoding::UnboundedVector<fidl::encoding::UnboundedString>,
3485                    D,
3486                    val_ref,
3487                    decoder,
3488                    inner_offset,
3489                    inner_depth
3490                )?;
3491                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3492                {
3493                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3494                }
3495                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3496                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3497                }
3498            }
3499
3500            next_offset += envelope_size;
3501            _next_ordinal_to_read += 1;
3502            if next_offset >= end_offset {
3503                return Ok(());
3504            }
3505
3506            // Decode unknown envelopes for gaps in ordinals.
3507            while _next_ordinal_to_read < 3 {
3508                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3509                _next_ordinal_to_read += 1;
3510                next_offset += envelope_size;
3511            }
3512
3513            let next_out_of_line = decoder.next_out_of_line();
3514            let handles_before = decoder.remaining_handles();
3515            if let Some((inlined, num_bytes, num_handles)) =
3516                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3517            {
3518                let member_inline_size =
3519                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3520                if inlined != (member_inline_size <= 4) {
3521                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3522                }
3523                let inner_offset;
3524                let mut inner_depth = depth.clone();
3525                if inlined {
3526                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3527                    inner_offset = next_offset;
3528                } else {
3529                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3530                    inner_depth.increment()?;
3531                }
3532                let val_ref =
3533                    self.primary_parent_index.get_or_insert_with(|| fidl::new_empty!(u32, D));
3534                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3535                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3536                {
3537                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3538                }
3539                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3540                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3541                }
3542            }
3543
3544            next_offset += envelope_size;
3545
3546            // Decode the remaining unknown envelopes.
3547            while next_offset < end_offset {
3548                _next_ordinal_to_read += 1;
3549                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3550                next_offset += envelope_size;
3551            }
3552
3553            Ok(())
3554        }
3555    }
3556
3557    impl CompositeInfo {
3558        #[inline(always)]
3559        fn max_ordinal_present(&self) -> u64 {
3560            if let Some(_) = self.matched_driver {
3561                return 2;
3562            }
3563            if let Some(_) = self.spec {
3564                return 1;
3565            }
3566            0
3567        }
3568    }
3569
3570    impl fidl::encoding::ValueTypeMarker for CompositeInfo {
3571        type Borrowed<'a> = &'a Self;
3572        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3573            value
3574        }
3575    }
3576
3577    unsafe impl fidl::encoding::TypeMarker for CompositeInfo {
3578        type Owned = Self;
3579
3580        #[inline(always)]
3581        fn inline_align(_context: fidl::encoding::Context) -> usize {
3582            8
3583        }
3584
3585        #[inline(always)]
3586        fn inline_size(_context: fidl::encoding::Context) -> usize {
3587            16
3588        }
3589    }
3590
3591    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeInfo, D>
3592        for &CompositeInfo
3593    {
3594        unsafe fn encode(
3595            self,
3596            encoder: &mut fidl::encoding::Encoder<'_, D>,
3597            offset: usize,
3598            mut depth: fidl::encoding::Depth,
3599        ) -> fidl::Result<()> {
3600            encoder.debug_check_bounds::<CompositeInfo>(offset);
3601            // Vector header
3602            let max_ordinal: u64 = self.max_ordinal_present();
3603            encoder.write_num(max_ordinal, offset);
3604            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3605            // Calling encoder.out_of_line_offset(0) is not allowed.
3606            if max_ordinal == 0 {
3607                return Ok(());
3608            }
3609            depth.increment()?;
3610            let envelope_size = 8;
3611            let bytes_len = max_ordinal as usize * envelope_size;
3612            #[allow(unused_variables)]
3613            let offset = encoder.out_of_line_offset(bytes_len);
3614            let mut _prev_end_offset: usize = 0;
3615            if 1 > max_ordinal {
3616                return Ok(());
3617            }
3618
3619            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3620            // are envelope_size bytes.
3621            let cur_offset: usize = (1 - 1) * envelope_size;
3622
3623            // Zero reserved fields.
3624            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3625
3626            // Safety:
3627            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3628            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3629            //   envelope_size bytes, there is always sufficient room.
3630            fidl::encoding::encode_in_envelope_optional::<CompositeNodeSpec, D>(
3631                self.spec
3632                    .as_ref()
3633                    .map(<CompositeNodeSpec as fidl::encoding::ValueTypeMarker>::borrow),
3634                encoder,
3635                offset + cur_offset,
3636                depth,
3637            )?;
3638
3639            _prev_end_offset = cur_offset + envelope_size;
3640            if 2 > max_ordinal {
3641                return Ok(());
3642            }
3643
3644            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3645            // are envelope_size bytes.
3646            let cur_offset: usize = (2 - 1) * envelope_size;
3647
3648            // Zero reserved fields.
3649            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3650
3651            // Safety:
3652            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3653            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3654            //   envelope_size bytes, there is always sufficient room.
3655            fidl::encoding::encode_in_envelope_optional::<CompositeDriverMatch, D>(
3656                self.matched_driver
3657                    .as_ref()
3658                    .map(<CompositeDriverMatch as fidl::encoding::ValueTypeMarker>::borrow),
3659                encoder,
3660                offset + cur_offset,
3661                depth,
3662            )?;
3663
3664            _prev_end_offset = cur_offset + envelope_size;
3665
3666            Ok(())
3667        }
3668    }
3669
3670    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeInfo {
3671        #[inline(always)]
3672        fn new_empty() -> Self {
3673            Self::default()
3674        }
3675
3676        unsafe fn decode(
3677            &mut self,
3678            decoder: &mut fidl::encoding::Decoder<'_, D>,
3679            offset: usize,
3680            mut depth: fidl::encoding::Depth,
3681        ) -> fidl::Result<()> {
3682            decoder.debug_check_bounds::<Self>(offset);
3683            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3684                None => return Err(fidl::Error::NotNullable),
3685                Some(len) => len,
3686            };
3687            // Calling decoder.out_of_line_offset(0) is not allowed.
3688            if len == 0 {
3689                return Ok(());
3690            };
3691            depth.increment()?;
3692            let envelope_size = 8;
3693            let bytes_len = len * envelope_size;
3694            let offset = decoder.out_of_line_offset(bytes_len)?;
3695            // Decode the envelope for each type.
3696            let mut _next_ordinal_to_read = 0;
3697            let mut next_offset = offset;
3698            let end_offset = offset + bytes_len;
3699            _next_ordinal_to_read += 1;
3700            if next_offset >= end_offset {
3701                return Ok(());
3702            }
3703
3704            // Decode unknown envelopes for gaps in ordinals.
3705            while _next_ordinal_to_read < 1 {
3706                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3707                _next_ordinal_to_read += 1;
3708                next_offset += envelope_size;
3709            }
3710
3711            let next_out_of_line = decoder.next_out_of_line();
3712            let handles_before = decoder.remaining_handles();
3713            if let Some((inlined, num_bytes, num_handles)) =
3714                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3715            {
3716                let member_inline_size =
3717                    <CompositeNodeSpec as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3718                if inlined != (member_inline_size <= 4) {
3719                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3720                }
3721                let inner_offset;
3722                let mut inner_depth = depth.clone();
3723                if inlined {
3724                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3725                    inner_offset = next_offset;
3726                } else {
3727                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3728                    inner_depth.increment()?;
3729                }
3730                let val_ref =
3731                    self.spec.get_or_insert_with(|| fidl::new_empty!(CompositeNodeSpec, D));
3732                fidl::decode!(CompositeNodeSpec, D, val_ref, decoder, inner_offset, inner_depth)?;
3733                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3734                {
3735                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3736                }
3737                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3738                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3739                }
3740            }
3741
3742            next_offset += envelope_size;
3743            _next_ordinal_to_read += 1;
3744            if next_offset >= end_offset {
3745                return Ok(());
3746            }
3747
3748            // Decode unknown envelopes for gaps in ordinals.
3749            while _next_ordinal_to_read < 2 {
3750                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3751                _next_ordinal_to_read += 1;
3752                next_offset += envelope_size;
3753            }
3754
3755            let next_out_of_line = decoder.next_out_of_line();
3756            let handles_before = decoder.remaining_handles();
3757            if let Some((inlined, num_bytes, num_handles)) =
3758                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3759            {
3760                let member_inline_size =
3761                    <CompositeDriverMatch as fidl::encoding::TypeMarker>::inline_size(
3762                        decoder.context,
3763                    );
3764                if inlined != (member_inline_size <= 4) {
3765                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3766                }
3767                let inner_offset;
3768                let mut inner_depth = depth.clone();
3769                if inlined {
3770                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3771                    inner_offset = next_offset;
3772                } else {
3773                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3774                    inner_depth.increment()?;
3775                }
3776                let val_ref = self
3777                    .matched_driver
3778                    .get_or_insert_with(|| fidl::new_empty!(CompositeDriverMatch, D));
3779                fidl::decode!(
3780                    CompositeDriverMatch,
3781                    D,
3782                    val_ref,
3783                    decoder,
3784                    inner_offset,
3785                    inner_depth
3786                )?;
3787                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3788                {
3789                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3790                }
3791                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3792                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3793                }
3794            }
3795
3796            next_offset += envelope_size;
3797
3798            // Decode the remaining unknown envelopes.
3799            while next_offset < end_offset {
3800                _next_ordinal_to_read += 1;
3801                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3802                next_offset += envelope_size;
3803            }
3804
3805            Ok(())
3806        }
3807    }
3808
3809    impl CompositeNodeSpec {
3810        #[inline(always)]
3811        fn max_ordinal_present(&self) -> u64 {
3812            if let Some(_) = self.driver_host {
3813                return 4;
3814            }
3815            if let Some(_) = self.parents2 {
3816                return 3;
3817            }
3818            if let Some(_) = self.name {
3819                return 1;
3820            }
3821            0
3822        }
3823    }
3824
3825    impl fidl::encoding::ValueTypeMarker for CompositeNodeSpec {
3826        type Borrowed<'a> = &'a Self;
3827        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3828            value
3829        }
3830    }
3831
3832    unsafe impl fidl::encoding::TypeMarker for CompositeNodeSpec {
3833        type Owned = Self;
3834
3835        #[inline(always)]
3836        fn inline_align(_context: fidl::encoding::Context) -> usize {
3837            8
3838        }
3839
3840        #[inline(always)]
3841        fn inline_size(_context: fidl::encoding::Context) -> usize {
3842            16
3843        }
3844    }
3845
3846    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeNodeSpec, D>
3847        for &CompositeNodeSpec
3848    {
3849        unsafe fn encode(
3850            self,
3851            encoder: &mut fidl::encoding::Encoder<'_, D>,
3852            offset: usize,
3853            mut depth: fidl::encoding::Depth,
3854        ) -> fidl::Result<()> {
3855            encoder.debug_check_bounds::<CompositeNodeSpec>(offset);
3856            // Vector header
3857            let max_ordinal: u64 = self.max_ordinal_present();
3858            encoder.write_num(max_ordinal, offset);
3859            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3860            // Calling encoder.out_of_line_offset(0) is not allowed.
3861            if max_ordinal == 0 {
3862                return Ok(());
3863            }
3864            depth.increment()?;
3865            let envelope_size = 8;
3866            let bytes_len = max_ordinal as usize * envelope_size;
3867            #[allow(unused_variables)]
3868            let offset = encoder.out_of_line_offset(bytes_len);
3869            let mut _prev_end_offset: usize = 0;
3870            if 1 > max_ordinal {
3871                return Ok(());
3872            }
3873
3874            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3875            // are envelope_size bytes.
3876            let cur_offset: usize = (1 - 1) * envelope_size;
3877
3878            // Zero reserved fields.
3879            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3880
3881            // Safety:
3882            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3883            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3884            //   envelope_size bytes, there is always sufficient room.
3885            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3886                self.name.as_ref().map(
3887                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3888                ),
3889                encoder,
3890                offset + cur_offset,
3891                depth,
3892            )?;
3893
3894            _prev_end_offset = cur_offset + envelope_size;
3895            if 3 > max_ordinal {
3896                return Ok(());
3897            }
3898
3899            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3900            // are envelope_size bytes.
3901            let cur_offset: usize = (3 - 1) * envelope_size;
3902
3903            // Zero reserved fields.
3904            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3905
3906            // Safety:
3907            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3908            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3909            //   envelope_size bytes, there is always sufficient room.
3910            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<ParentSpec2>, D>(
3911            self.parents2.as_ref().map(<fidl::encoding::UnboundedVector<ParentSpec2> as fidl::encoding::ValueTypeMarker>::borrow),
3912            encoder, offset + cur_offset, depth
3913        )?;
3914
3915            _prev_end_offset = cur_offset + envelope_size;
3916            if 4 > max_ordinal {
3917                return Ok(());
3918            }
3919
3920            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3921            // are envelope_size bytes.
3922            let cur_offset: usize = (4 - 1) * envelope_size;
3923
3924            // Zero reserved fields.
3925            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3926
3927            // Safety:
3928            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3929            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3930            //   envelope_size bytes, there is always sufficient room.
3931            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
3932                self.driver_host.as_ref().map(
3933                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
3934                ),
3935                encoder,
3936                offset + cur_offset,
3937                depth,
3938            )?;
3939
3940            _prev_end_offset = cur_offset + envelope_size;
3941
3942            Ok(())
3943        }
3944    }
3945
3946    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeNodeSpec {
3947        #[inline(always)]
3948        fn new_empty() -> Self {
3949            Self::default()
3950        }
3951
3952        unsafe fn decode(
3953            &mut self,
3954            decoder: &mut fidl::encoding::Decoder<'_, D>,
3955            offset: usize,
3956            mut depth: fidl::encoding::Depth,
3957        ) -> fidl::Result<()> {
3958            decoder.debug_check_bounds::<Self>(offset);
3959            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3960                None => return Err(fidl::Error::NotNullable),
3961                Some(len) => len,
3962            };
3963            // Calling decoder.out_of_line_offset(0) is not allowed.
3964            if len == 0 {
3965                return Ok(());
3966            };
3967            depth.increment()?;
3968            let envelope_size = 8;
3969            let bytes_len = len * envelope_size;
3970            let offset = decoder.out_of_line_offset(bytes_len)?;
3971            // Decode the envelope for each type.
3972            let mut _next_ordinal_to_read = 0;
3973            let mut next_offset = offset;
3974            let end_offset = offset + bytes_len;
3975            _next_ordinal_to_read += 1;
3976            if next_offset >= end_offset {
3977                return Ok(());
3978            }
3979
3980            // Decode unknown envelopes for gaps in ordinals.
3981            while _next_ordinal_to_read < 1 {
3982                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3983                _next_ordinal_to_read += 1;
3984                next_offset += envelope_size;
3985            }
3986
3987            let next_out_of_line = decoder.next_out_of_line();
3988            let handles_before = decoder.remaining_handles();
3989            if let Some((inlined, num_bytes, num_handles)) =
3990                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3991            {
3992                let member_inline_size =
3993                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3994                        decoder.context,
3995                    );
3996                if inlined != (member_inline_size <= 4) {
3997                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3998                }
3999                let inner_offset;
4000                let mut inner_depth = depth.clone();
4001                if inlined {
4002                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4003                    inner_offset = next_offset;
4004                } else {
4005                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4006                    inner_depth.increment()?;
4007                }
4008                let val_ref = self
4009                    .name
4010                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4011                fidl::decode!(
4012                    fidl::encoding::UnboundedString,
4013                    D,
4014                    val_ref,
4015                    decoder,
4016                    inner_offset,
4017                    inner_depth
4018                )?;
4019                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4020                {
4021                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4022                }
4023                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4024                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4025                }
4026            }
4027
4028            next_offset += envelope_size;
4029            _next_ordinal_to_read += 1;
4030            if next_offset >= end_offset {
4031                return Ok(());
4032            }
4033
4034            // Decode unknown envelopes for gaps in ordinals.
4035            while _next_ordinal_to_read < 3 {
4036                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4037                _next_ordinal_to_read += 1;
4038                next_offset += envelope_size;
4039            }
4040
4041            let next_out_of_line = decoder.next_out_of_line();
4042            let handles_before = decoder.remaining_handles();
4043            if let Some((inlined, num_bytes, num_handles)) =
4044                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4045            {
4046                let member_inline_size = <fidl::encoding::UnboundedVector<ParentSpec2> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4047                if inlined != (member_inline_size <= 4) {
4048                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4049                }
4050                let inner_offset;
4051                let mut inner_depth = depth.clone();
4052                if inlined {
4053                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4054                    inner_offset = next_offset;
4055                } else {
4056                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4057                    inner_depth.increment()?;
4058                }
4059                let val_ref = self.parents2.get_or_insert_with(|| {
4060                    fidl::new_empty!(fidl::encoding::UnboundedVector<ParentSpec2>, D)
4061                });
4062                fidl::decode!(
4063                    fidl::encoding::UnboundedVector<ParentSpec2>,
4064                    D,
4065                    val_ref,
4066                    decoder,
4067                    inner_offset,
4068                    inner_depth
4069                )?;
4070                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4071                {
4072                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4073                }
4074                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4075                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4076                }
4077            }
4078
4079            next_offset += envelope_size;
4080            _next_ordinal_to_read += 1;
4081            if next_offset >= end_offset {
4082                return Ok(());
4083            }
4084
4085            // Decode unknown envelopes for gaps in ordinals.
4086            while _next_ordinal_to_read < 4 {
4087                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4088                _next_ordinal_to_read += 1;
4089                next_offset += envelope_size;
4090            }
4091
4092            let next_out_of_line = decoder.next_out_of_line();
4093            let handles_before = decoder.remaining_handles();
4094            if let Some((inlined, num_bytes, num_handles)) =
4095                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4096            {
4097                let member_inline_size =
4098                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
4099                        decoder.context,
4100                    );
4101                if inlined != (member_inline_size <= 4) {
4102                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4103                }
4104                let inner_offset;
4105                let mut inner_depth = depth.clone();
4106                if inlined {
4107                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4108                    inner_offset = next_offset;
4109                } else {
4110                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4111                    inner_depth.increment()?;
4112                }
4113                let val_ref = self
4114                    .driver_host
4115                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
4116                fidl::decode!(
4117                    fidl::encoding::BoundedString<128>,
4118                    D,
4119                    val_ref,
4120                    decoder,
4121                    inner_offset,
4122                    inner_depth
4123                )?;
4124                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4125                {
4126                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4127                }
4128                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4129                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4130                }
4131            }
4132
4133            next_offset += envelope_size;
4134
4135            // Decode the remaining unknown envelopes.
4136            while next_offset < end_offset {
4137                _next_ordinal_to_read += 1;
4138                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4139                next_offset += envelope_size;
4140            }
4141
4142            Ok(())
4143        }
4144    }
4145
4146    impl CompositeParent {
4147        #[inline(always)]
4148        fn max_ordinal_present(&self) -> u64 {
4149            if let Some(_) = self.index {
4150                return 2;
4151            }
4152            if let Some(_) = self.composite {
4153                return 1;
4154            }
4155            0
4156        }
4157    }
4158
4159    impl fidl::encoding::ValueTypeMarker for CompositeParent {
4160        type Borrowed<'a> = &'a Self;
4161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4162            value
4163        }
4164    }
4165
4166    unsafe impl fidl::encoding::TypeMarker for CompositeParent {
4167        type Owned = Self;
4168
4169        #[inline(always)]
4170        fn inline_align(_context: fidl::encoding::Context) -> usize {
4171            8
4172        }
4173
4174        #[inline(always)]
4175        fn inline_size(_context: fidl::encoding::Context) -> usize {
4176            16
4177        }
4178    }
4179
4180    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CompositeParent, D>
4181        for &CompositeParent
4182    {
4183        unsafe fn encode(
4184            self,
4185            encoder: &mut fidl::encoding::Encoder<'_, D>,
4186            offset: usize,
4187            mut depth: fidl::encoding::Depth,
4188        ) -> fidl::Result<()> {
4189            encoder.debug_check_bounds::<CompositeParent>(offset);
4190            // Vector header
4191            let max_ordinal: u64 = self.max_ordinal_present();
4192            encoder.write_num(max_ordinal, offset);
4193            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4194            // Calling encoder.out_of_line_offset(0) is not allowed.
4195            if max_ordinal == 0 {
4196                return Ok(());
4197            }
4198            depth.increment()?;
4199            let envelope_size = 8;
4200            let bytes_len = max_ordinal as usize * envelope_size;
4201            #[allow(unused_variables)]
4202            let offset = encoder.out_of_line_offset(bytes_len);
4203            let mut _prev_end_offset: usize = 0;
4204            if 1 > max_ordinal {
4205                return Ok(());
4206            }
4207
4208            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4209            // are envelope_size bytes.
4210            let cur_offset: usize = (1 - 1) * envelope_size;
4211
4212            // Zero reserved fields.
4213            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4214
4215            // Safety:
4216            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4217            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4218            //   envelope_size bytes, there is always sufficient room.
4219            fidl::encoding::encode_in_envelope_optional::<CompositeInfo, D>(
4220                self.composite
4221                    .as_ref()
4222                    .map(<CompositeInfo as fidl::encoding::ValueTypeMarker>::borrow),
4223                encoder,
4224                offset + cur_offset,
4225                depth,
4226            )?;
4227
4228            _prev_end_offset = cur_offset + envelope_size;
4229            if 2 > max_ordinal {
4230                return Ok(());
4231            }
4232
4233            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4234            // are envelope_size bytes.
4235            let cur_offset: usize = (2 - 1) * envelope_size;
4236
4237            // Zero reserved fields.
4238            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4239
4240            // Safety:
4241            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4242            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4243            //   envelope_size bytes, there is always sufficient room.
4244            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4245                self.index.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4246                encoder,
4247                offset + cur_offset,
4248                depth,
4249            )?;
4250
4251            _prev_end_offset = cur_offset + envelope_size;
4252
4253            Ok(())
4254        }
4255    }
4256
4257    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CompositeParent {
4258        #[inline(always)]
4259        fn new_empty() -> Self {
4260            Self::default()
4261        }
4262
4263        unsafe fn decode(
4264            &mut self,
4265            decoder: &mut fidl::encoding::Decoder<'_, D>,
4266            offset: usize,
4267            mut depth: fidl::encoding::Depth,
4268        ) -> fidl::Result<()> {
4269            decoder.debug_check_bounds::<Self>(offset);
4270            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4271                None => return Err(fidl::Error::NotNullable),
4272                Some(len) => len,
4273            };
4274            // Calling decoder.out_of_line_offset(0) is not allowed.
4275            if len == 0 {
4276                return Ok(());
4277            };
4278            depth.increment()?;
4279            let envelope_size = 8;
4280            let bytes_len = len * envelope_size;
4281            let offset = decoder.out_of_line_offset(bytes_len)?;
4282            // Decode the envelope for each type.
4283            let mut _next_ordinal_to_read = 0;
4284            let mut next_offset = offset;
4285            let end_offset = offset + bytes_len;
4286            _next_ordinal_to_read += 1;
4287            if next_offset >= end_offset {
4288                return Ok(());
4289            }
4290
4291            // Decode unknown envelopes for gaps in ordinals.
4292            while _next_ordinal_to_read < 1 {
4293                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4294                _next_ordinal_to_read += 1;
4295                next_offset += envelope_size;
4296            }
4297
4298            let next_out_of_line = decoder.next_out_of_line();
4299            let handles_before = decoder.remaining_handles();
4300            if let Some((inlined, num_bytes, num_handles)) =
4301                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4302            {
4303                let member_inline_size =
4304                    <CompositeInfo as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4305                if inlined != (member_inline_size <= 4) {
4306                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4307                }
4308                let inner_offset;
4309                let mut inner_depth = depth.clone();
4310                if inlined {
4311                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4312                    inner_offset = next_offset;
4313                } else {
4314                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4315                    inner_depth.increment()?;
4316                }
4317                let val_ref =
4318                    self.composite.get_or_insert_with(|| fidl::new_empty!(CompositeInfo, D));
4319                fidl::decode!(CompositeInfo, D, val_ref, decoder, inner_offset, inner_depth)?;
4320                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4321                {
4322                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4323                }
4324                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4325                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4326                }
4327            }
4328
4329            next_offset += envelope_size;
4330            _next_ordinal_to_read += 1;
4331            if next_offset >= end_offset {
4332                return Ok(());
4333            }
4334
4335            // Decode unknown envelopes for gaps in ordinals.
4336            while _next_ordinal_to_read < 2 {
4337                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4338                _next_ordinal_to_read += 1;
4339                next_offset += envelope_size;
4340            }
4341
4342            let next_out_of_line = decoder.next_out_of_line();
4343            let handles_before = decoder.remaining_handles();
4344            if let Some((inlined, num_bytes, num_handles)) =
4345                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4346            {
4347                let member_inline_size =
4348                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4349                if inlined != (member_inline_size <= 4) {
4350                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4351                }
4352                let inner_offset;
4353                let mut inner_depth = depth.clone();
4354                if inlined {
4355                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4356                    inner_offset = next_offset;
4357                } else {
4358                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4359                    inner_depth.increment()?;
4360                }
4361                let val_ref = self.index.get_or_insert_with(|| fidl::new_empty!(u32, D));
4362                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4363                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4364                {
4365                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4366                }
4367                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4368                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4369                }
4370            }
4371
4372            next_offset += envelope_size;
4373
4374            // Decode the remaining unknown envelopes.
4375            while next_offset < end_offset {
4376                _next_ordinal_to_read += 1;
4377                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4378                next_offset += envelope_size;
4379            }
4380
4381            Ok(())
4382        }
4383    }
4384
4385    impl Dependency {
4386        #[inline(always)]
4387        fn max_ordinal_present(&self) -> u64 {
4388            if let Some(_) = self.tags {
4389                return 2;
4390            }
4391            if let Some(_) = self.selector {
4392                return 1;
4393            }
4394            0
4395        }
4396    }
4397
4398    impl fidl::encoding::ValueTypeMarker for Dependency {
4399        type Borrowed<'a> = &'a Self;
4400        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4401            value
4402        }
4403    }
4404
4405    unsafe impl fidl::encoding::TypeMarker for Dependency {
4406        type Owned = Self;
4407
4408        #[inline(always)]
4409        fn inline_align(_context: fidl::encoding::Context) -> usize {
4410            8
4411        }
4412
4413        #[inline(always)]
4414        fn inline_size(_context: fidl::encoding::Context) -> usize {
4415            16
4416        }
4417    }
4418
4419    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Dependency, D>
4420        for &Dependency
4421    {
4422        unsafe fn encode(
4423            self,
4424            encoder: &mut fidl::encoding::Encoder<'_, D>,
4425            offset: usize,
4426            mut depth: fidl::encoding::Depth,
4427        ) -> fidl::Result<()> {
4428            encoder.debug_check_bounds::<Dependency>(offset);
4429            // Vector header
4430            let max_ordinal: u64 = self.max_ordinal_present();
4431            encoder.write_num(max_ordinal, offset);
4432            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4433            // Calling encoder.out_of_line_offset(0) is not allowed.
4434            if max_ordinal == 0 {
4435                return Ok(());
4436            }
4437            depth.increment()?;
4438            let envelope_size = 8;
4439            let bytes_len = max_ordinal as usize * envelope_size;
4440            #[allow(unused_variables)]
4441            let offset = encoder.out_of_line_offset(bytes_len);
4442            let mut _prev_end_offset: usize = 0;
4443            if 1 > max_ordinal {
4444                return Ok(());
4445            }
4446
4447            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4448            // are envelope_size bytes.
4449            let cur_offset: usize = (1 - 1) * envelope_size;
4450
4451            // Zero reserved fields.
4452            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4453
4454            // Safety:
4455            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4456            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4457            //   envelope_size bytes, there is always sufficient room.
4458            fidl::encoding::encode_in_envelope_optional::<Selector, D>(
4459                self.selector.as_ref().map(<Selector 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 2 > 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 = (2 - 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::<fidl::encoding::Vector<ResourceProperty, 64>, D>(
4482            self.tags.as_ref().map(<fidl::encoding::Vector<ResourceProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
4483            encoder, offset + cur_offset, depth
4484        )?;
4485
4486            _prev_end_offset = cur_offset + envelope_size;
4487
4488            Ok(())
4489        }
4490    }
4491
4492    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Dependency {
4493        #[inline(always)]
4494        fn new_empty() -> Self {
4495            Self::default()
4496        }
4497
4498        unsafe fn decode(
4499            &mut self,
4500            decoder: &mut fidl::encoding::Decoder<'_, D>,
4501            offset: usize,
4502            mut depth: fidl::encoding::Depth,
4503        ) -> fidl::Result<()> {
4504            decoder.debug_check_bounds::<Self>(offset);
4505            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4506                None => return Err(fidl::Error::NotNullable),
4507                Some(len) => len,
4508            };
4509            // Calling decoder.out_of_line_offset(0) is not allowed.
4510            if len == 0 {
4511                return Ok(());
4512            };
4513            depth.increment()?;
4514            let envelope_size = 8;
4515            let bytes_len = len * envelope_size;
4516            let offset = decoder.out_of_line_offset(bytes_len)?;
4517            // Decode the envelope for each type.
4518            let mut _next_ordinal_to_read = 0;
4519            let mut next_offset = offset;
4520            let end_offset = offset + bytes_len;
4521            _next_ordinal_to_read += 1;
4522            if next_offset >= end_offset {
4523                return Ok(());
4524            }
4525
4526            // Decode unknown envelopes for gaps in ordinals.
4527            while _next_ordinal_to_read < 1 {
4528                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4529                _next_ordinal_to_read += 1;
4530                next_offset += envelope_size;
4531            }
4532
4533            let next_out_of_line = decoder.next_out_of_line();
4534            let handles_before = decoder.remaining_handles();
4535            if let Some((inlined, num_bytes, num_handles)) =
4536                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4537            {
4538                let member_inline_size =
4539                    <Selector as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4540                if inlined != (member_inline_size <= 4) {
4541                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4542                }
4543                let inner_offset;
4544                let mut inner_depth = depth.clone();
4545                if inlined {
4546                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4547                    inner_offset = next_offset;
4548                } else {
4549                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4550                    inner_depth.increment()?;
4551                }
4552                let val_ref = self.selector.get_or_insert_with(|| fidl::new_empty!(Selector, D));
4553                fidl::decode!(Selector, D, val_ref, decoder, inner_offset, inner_depth)?;
4554                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4555                {
4556                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4557                }
4558                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4559                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4560                }
4561            }
4562
4563            next_offset += envelope_size;
4564            _next_ordinal_to_read += 1;
4565            if next_offset >= end_offset {
4566                return Ok(());
4567            }
4568
4569            // Decode unknown envelopes for gaps in ordinals.
4570            while _next_ordinal_to_read < 2 {
4571                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4572                _next_ordinal_to_read += 1;
4573                next_offset += envelope_size;
4574            }
4575
4576            let next_out_of_line = decoder.next_out_of_line();
4577            let handles_before = decoder.remaining_handles();
4578            if let Some((inlined, num_bytes, num_handles)) =
4579                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4580            {
4581                let member_inline_size = <fidl::encoding::Vector<ResourceProperty, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4582                if inlined != (member_inline_size <= 4) {
4583                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4584                }
4585                let inner_offset;
4586                let mut inner_depth = depth.clone();
4587                if inlined {
4588                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4589                    inner_offset = next_offset;
4590                } else {
4591                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4592                    inner_depth.increment()?;
4593                }
4594                let val_ref = self.tags.get_or_insert_with(
4595                    || fidl::new_empty!(fidl::encoding::Vector<ResourceProperty, 64>, D),
4596                );
4597                fidl::decode!(fidl::encoding::Vector<ResourceProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
4598                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4599                {
4600                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4601                }
4602                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4603                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4604                }
4605            }
4606
4607            next_offset += envelope_size;
4608
4609            // Decode the remaining unknown envelopes.
4610            while next_offset < end_offset {
4611                _next_ordinal_to_read += 1;
4612                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4613                next_offset += envelope_size;
4614            }
4615
4616            Ok(())
4617        }
4618    }
4619
4620    impl DeviceCategory {
4621        #[inline(always)]
4622        fn max_ordinal_present(&self) -> u64 {
4623            if let Some(_) = self.subcategory {
4624                return 2;
4625            }
4626            if let Some(_) = self.category {
4627                return 1;
4628            }
4629            0
4630        }
4631    }
4632
4633    impl fidl::encoding::ValueTypeMarker for DeviceCategory {
4634        type Borrowed<'a> = &'a Self;
4635        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4636            value
4637        }
4638    }
4639
4640    unsafe impl fidl::encoding::TypeMarker for DeviceCategory {
4641        type Owned = Self;
4642
4643        #[inline(always)]
4644        fn inline_align(_context: fidl::encoding::Context) -> usize {
4645            8
4646        }
4647
4648        #[inline(always)]
4649        fn inline_size(_context: fidl::encoding::Context) -> usize {
4650            16
4651        }
4652    }
4653
4654    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceCategory, D>
4655        for &DeviceCategory
4656    {
4657        unsafe fn encode(
4658            self,
4659            encoder: &mut fidl::encoding::Encoder<'_, D>,
4660            offset: usize,
4661            mut depth: fidl::encoding::Depth,
4662        ) -> fidl::Result<()> {
4663            encoder.debug_check_bounds::<DeviceCategory>(offset);
4664            // Vector header
4665            let max_ordinal: u64 = self.max_ordinal_present();
4666            encoder.write_num(max_ordinal, offset);
4667            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4668            // Calling encoder.out_of_line_offset(0) is not allowed.
4669            if max_ordinal == 0 {
4670                return Ok(());
4671            }
4672            depth.increment()?;
4673            let envelope_size = 8;
4674            let bytes_len = max_ordinal as usize * envelope_size;
4675            #[allow(unused_variables)]
4676            let offset = encoder.out_of_line_offset(bytes_len);
4677            let mut _prev_end_offset: usize = 0;
4678            if 1 > max_ordinal {
4679                return Ok(());
4680            }
4681
4682            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4683            // are envelope_size bytes.
4684            let cur_offset: usize = (1 - 1) * envelope_size;
4685
4686            // Zero reserved fields.
4687            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4688
4689            // Safety:
4690            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4691            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4692            //   envelope_size bytes, there is always sufficient room.
4693            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4694                self.category.as_ref().map(
4695                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4696                ),
4697                encoder,
4698                offset + cur_offset,
4699                depth,
4700            )?;
4701
4702            _prev_end_offset = cur_offset + envelope_size;
4703            if 2 > max_ordinal {
4704                return Ok(());
4705            }
4706
4707            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4708            // are envelope_size bytes.
4709            let cur_offset: usize = (2 - 1) * envelope_size;
4710
4711            // Zero reserved fields.
4712            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4713
4714            // Safety:
4715            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4716            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4717            //   envelope_size bytes, there is always sufficient room.
4718            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4719                self.subcategory.as_ref().map(
4720                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
4721                ),
4722                encoder,
4723                offset + cur_offset,
4724                depth,
4725            )?;
4726
4727            _prev_end_offset = cur_offset + envelope_size;
4728
4729            Ok(())
4730        }
4731    }
4732
4733    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceCategory {
4734        #[inline(always)]
4735        fn new_empty() -> Self {
4736            Self::default()
4737        }
4738
4739        unsafe fn decode(
4740            &mut self,
4741            decoder: &mut fidl::encoding::Decoder<'_, D>,
4742            offset: usize,
4743            mut depth: fidl::encoding::Depth,
4744        ) -> fidl::Result<()> {
4745            decoder.debug_check_bounds::<Self>(offset);
4746            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4747                None => return Err(fidl::Error::NotNullable),
4748                Some(len) => len,
4749            };
4750            // Calling decoder.out_of_line_offset(0) is not allowed.
4751            if len == 0 {
4752                return Ok(());
4753            };
4754            depth.increment()?;
4755            let envelope_size = 8;
4756            let bytes_len = len * envelope_size;
4757            let offset = decoder.out_of_line_offset(bytes_len)?;
4758            // Decode the envelope for each type.
4759            let mut _next_ordinal_to_read = 0;
4760            let mut next_offset = offset;
4761            let end_offset = offset + bytes_len;
4762            _next_ordinal_to_read += 1;
4763            if next_offset >= end_offset {
4764                return Ok(());
4765            }
4766
4767            // Decode unknown envelopes for gaps in ordinals.
4768            while _next_ordinal_to_read < 1 {
4769                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4770                _next_ordinal_to_read += 1;
4771                next_offset += envelope_size;
4772            }
4773
4774            let next_out_of_line = decoder.next_out_of_line();
4775            let handles_before = decoder.remaining_handles();
4776            if let Some((inlined, num_bytes, num_handles)) =
4777                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4778            {
4779                let member_inline_size =
4780                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4781                        decoder.context,
4782                    );
4783                if inlined != (member_inline_size <= 4) {
4784                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4785                }
4786                let inner_offset;
4787                let mut inner_depth = depth.clone();
4788                if inlined {
4789                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4790                    inner_offset = next_offset;
4791                } else {
4792                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4793                    inner_depth.increment()?;
4794                }
4795                let val_ref = self
4796                    .category
4797                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4798                fidl::decode!(
4799                    fidl::encoding::UnboundedString,
4800                    D,
4801                    val_ref,
4802                    decoder,
4803                    inner_offset,
4804                    inner_depth
4805                )?;
4806                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4807                {
4808                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4809                }
4810                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4811                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4812                }
4813            }
4814
4815            next_offset += envelope_size;
4816            _next_ordinal_to_read += 1;
4817            if next_offset >= end_offset {
4818                return Ok(());
4819            }
4820
4821            // Decode unknown envelopes for gaps in ordinals.
4822            while _next_ordinal_to_read < 2 {
4823                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4824                _next_ordinal_to_read += 1;
4825                next_offset += envelope_size;
4826            }
4827
4828            let next_out_of_line = decoder.next_out_of_line();
4829            let handles_before = decoder.remaining_handles();
4830            if let Some((inlined, num_bytes, num_handles)) =
4831                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4832            {
4833                let member_inline_size =
4834                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
4835                        decoder.context,
4836                    );
4837                if inlined != (member_inline_size <= 4) {
4838                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4839                }
4840                let inner_offset;
4841                let mut inner_depth = depth.clone();
4842                if inlined {
4843                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4844                    inner_offset = next_offset;
4845                } else {
4846                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4847                    inner_depth.increment()?;
4848                }
4849                let val_ref = self
4850                    .subcategory
4851                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
4852                fidl::decode!(
4853                    fidl::encoding::UnboundedString,
4854                    D,
4855                    val_ref,
4856                    decoder,
4857                    inner_offset,
4858                    inner_depth
4859                )?;
4860                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4861                {
4862                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4863                }
4864                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4865                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4866                }
4867            }
4868
4869            next_offset += envelope_size;
4870
4871            // Decode the remaining unknown envelopes.
4872            while next_offset < end_offset {
4873                _next_ordinal_to_read += 1;
4874                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4875                next_offset += envelope_size;
4876            }
4877
4878            Ok(())
4879        }
4880    }
4881
4882    impl DriverInfo {
4883        #[inline(always)]
4884        fn max_ordinal_present(&self) -> u64 {
4885            if let Some(_) = self.is_disabled {
4886                return 9;
4887            }
4888            if let Some(_) = self.driver_framework_version {
4889                return 8;
4890            }
4891            if let Some(_) = self.bind_rules_bytecode {
4892                return 7;
4893            }
4894            if let Some(_) = self.device_categories {
4895                return 6;
4896            }
4897            if let Some(_) = self.is_fallback {
4898                return 5;
4899            }
4900            if let Some(_) = self.package_type {
4901                return 4;
4902            }
4903            if let Some(_) = self.colocate {
4904                return 3;
4905            }
4906            if let Some(_) = self.name {
4907                return 2;
4908            }
4909            if let Some(_) = self.url {
4910                return 1;
4911            }
4912            0
4913        }
4914    }
4915
4916    impl fidl::encoding::ValueTypeMarker for DriverInfo {
4917        type Borrowed<'a> = &'a Self;
4918        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4919            value
4920        }
4921    }
4922
4923    unsafe impl fidl::encoding::TypeMarker for DriverInfo {
4924        type Owned = Self;
4925
4926        #[inline(always)]
4927        fn inline_align(_context: fidl::encoding::Context) -> usize {
4928            8
4929        }
4930
4931        #[inline(always)]
4932        fn inline_size(_context: fidl::encoding::Context) -> usize {
4933            16
4934        }
4935    }
4936
4937    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DriverInfo, D>
4938        for &DriverInfo
4939    {
4940        unsafe fn encode(
4941            self,
4942            encoder: &mut fidl::encoding::Encoder<'_, D>,
4943            offset: usize,
4944            mut depth: fidl::encoding::Depth,
4945        ) -> fidl::Result<()> {
4946            encoder.debug_check_bounds::<DriverInfo>(offset);
4947            // Vector header
4948            let max_ordinal: u64 = self.max_ordinal_present();
4949            encoder.write_num(max_ordinal, offset);
4950            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4951            // Calling encoder.out_of_line_offset(0) is not allowed.
4952            if max_ordinal == 0 {
4953                return Ok(());
4954            }
4955            depth.increment()?;
4956            let envelope_size = 8;
4957            let bytes_len = max_ordinal as usize * envelope_size;
4958            #[allow(unused_variables)]
4959            let offset = encoder.out_of_line_offset(bytes_len);
4960            let mut _prev_end_offset: usize = 0;
4961            if 1 > max_ordinal {
4962                return Ok(());
4963            }
4964
4965            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4966            // are envelope_size bytes.
4967            let cur_offset: usize = (1 - 1) * envelope_size;
4968
4969            // Zero reserved fields.
4970            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4971
4972            // Safety:
4973            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4974            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4975            //   envelope_size bytes, there is always sufficient room.
4976            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
4977            self.url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
4978            encoder, offset + cur_offset, depth
4979        )?;
4980
4981            _prev_end_offset = cur_offset + envelope_size;
4982            if 2 > max_ordinal {
4983                return Ok(());
4984            }
4985
4986            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4987            // are envelope_size bytes.
4988            let cur_offset: usize = (2 - 1) * envelope_size;
4989
4990            // Zero reserved fields.
4991            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4992
4993            // Safety:
4994            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4995            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4996            //   envelope_size bytes, there is always sufficient room.
4997            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
4998                self.name.as_ref().map(
4999                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
5000                ),
5001                encoder,
5002                offset + cur_offset,
5003                depth,
5004            )?;
5005
5006            _prev_end_offset = cur_offset + envelope_size;
5007            if 3 > max_ordinal {
5008                return Ok(());
5009            }
5010
5011            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5012            // are envelope_size bytes.
5013            let cur_offset: usize = (3 - 1) * envelope_size;
5014
5015            // Zero reserved fields.
5016            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5017
5018            // Safety:
5019            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5020            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5021            //   envelope_size bytes, there is always sufficient room.
5022            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5023                self.colocate.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5024                encoder,
5025                offset + cur_offset,
5026                depth,
5027            )?;
5028
5029            _prev_end_offset = cur_offset + envelope_size;
5030            if 4 > max_ordinal {
5031                return Ok(());
5032            }
5033
5034            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5035            // are envelope_size bytes.
5036            let cur_offset: usize = (4 - 1) * envelope_size;
5037
5038            // Zero reserved fields.
5039            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5040
5041            // Safety:
5042            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5043            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5044            //   envelope_size bytes, there is always sufficient room.
5045            fidl::encoding::encode_in_envelope_optional::<DriverPackageType, D>(
5046                self.package_type
5047                    .as_ref()
5048                    .map(<DriverPackageType as fidl::encoding::ValueTypeMarker>::borrow),
5049                encoder,
5050                offset + cur_offset,
5051                depth,
5052            )?;
5053
5054            _prev_end_offset = cur_offset + envelope_size;
5055            if 5 > max_ordinal {
5056                return Ok(());
5057            }
5058
5059            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5060            // are envelope_size bytes.
5061            let cur_offset: usize = (5 - 1) * envelope_size;
5062
5063            // Zero reserved fields.
5064            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5065
5066            // Safety:
5067            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5068            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5069            //   envelope_size bytes, there is always sufficient room.
5070            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5071                self.is_fallback.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5072                encoder,
5073                offset + cur_offset,
5074                depth,
5075            )?;
5076
5077            _prev_end_offset = cur_offset + envelope_size;
5078            if 6 > max_ordinal {
5079                return Ok(());
5080            }
5081
5082            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5083            // are envelope_size bytes.
5084            let cur_offset: usize = (6 - 1) * envelope_size;
5085
5086            // Zero reserved fields.
5087            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5088
5089            // Safety:
5090            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5091            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5092            //   envelope_size bytes, there is always sufficient room.
5093            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<DeviceCategory>, D>(
5094            self.device_categories.as_ref().map(<fidl::encoding::UnboundedVector<DeviceCategory> as fidl::encoding::ValueTypeMarker>::borrow),
5095            encoder, offset + cur_offset, depth
5096        )?;
5097
5098            _prev_end_offset = cur_offset + envelope_size;
5099            if 7 > max_ordinal {
5100                return Ok(());
5101            }
5102
5103            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5104            // are envelope_size bytes.
5105            let cur_offset: usize = (7 - 1) * envelope_size;
5106
5107            // Zero reserved fields.
5108            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5109
5110            // Safety:
5111            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5112            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5113            //   envelope_size bytes, there is always sufficient room.
5114            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
5115            self.bind_rules_bytecode.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
5116            encoder, offset + cur_offset, depth
5117        )?;
5118
5119            _prev_end_offset = cur_offset + envelope_size;
5120            if 8 > max_ordinal {
5121                return Ok(());
5122            }
5123
5124            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5125            // are envelope_size bytes.
5126            let cur_offset: usize = (8 - 1) * envelope_size;
5127
5128            // Zero reserved fields.
5129            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5130
5131            // Safety:
5132            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5133            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5134            //   envelope_size bytes, there is always sufficient room.
5135            fidl::encoding::encode_in_envelope_optional::<u8, D>(
5136                self.driver_framework_version
5137                    .as_ref()
5138                    .map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
5139                encoder,
5140                offset + cur_offset,
5141                depth,
5142            )?;
5143
5144            _prev_end_offset = cur_offset + envelope_size;
5145            if 9 > max_ordinal {
5146                return Ok(());
5147            }
5148
5149            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5150            // are envelope_size bytes.
5151            let cur_offset: usize = (9 - 1) * envelope_size;
5152
5153            // Zero reserved fields.
5154            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5155
5156            // Safety:
5157            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5158            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5159            //   envelope_size bytes, there is always sufficient room.
5160            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5161                self.is_disabled.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5162                encoder,
5163                offset + cur_offset,
5164                depth,
5165            )?;
5166
5167            _prev_end_offset = cur_offset + envelope_size;
5168
5169            Ok(())
5170        }
5171    }
5172
5173    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DriverInfo {
5174        #[inline(always)]
5175        fn new_empty() -> Self {
5176            Self::default()
5177        }
5178
5179        unsafe fn decode(
5180            &mut self,
5181            decoder: &mut fidl::encoding::Decoder<'_, D>,
5182            offset: usize,
5183            mut depth: fidl::encoding::Depth,
5184        ) -> fidl::Result<()> {
5185            decoder.debug_check_bounds::<Self>(offset);
5186            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5187                None => return Err(fidl::Error::NotNullable),
5188                Some(len) => len,
5189            };
5190            // Calling decoder.out_of_line_offset(0) is not allowed.
5191            if len == 0 {
5192                return Ok(());
5193            };
5194            depth.increment()?;
5195            let envelope_size = 8;
5196            let bytes_len = len * envelope_size;
5197            let offset = decoder.out_of_line_offset(bytes_len)?;
5198            // Decode the envelope for each type.
5199            let mut _next_ordinal_to_read = 0;
5200            let mut next_offset = offset;
5201            let end_offset = offset + bytes_len;
5202            _next_ordinal_to_read += 1;
5203            if next_offset >= end_offset {
5204                return Ok(());
5205            }
5206
5207            // Decode unknown envelopes for gaps in ordinals.
5208            while _next_ordinal_to_read < 1 {
5209                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5210                _next_ordinal_to_read += 1;
5211                next_offset += envelope_size;
5212            }
5213
5214            let next_out_of_line = decoder.next_out_of_line();
5215            let handles_before = decoder.remaining_handles();
5216            if let Some((inlined, num_bytes, num_handles)) =
5217                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5218            {
5219                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5220                if inlined != (member_inline_size <= 4) {
5221                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5222                }
5223                let inner_offset;
5224                let mut inner_depth = depth.clone();
5225                if inlined {
5226                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5227                    inner_offset = next_offset;
5228                } else {
5229                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5230                    inner_depth.increment()?;
5231                }
5232                let val_ref = self.url.get_or_insert_with(|| {
5233                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
5234                });
5235                fidl::decode!(
5236                    fidl::encoding::BoundedString<4096>,
5237                    D,
5238                    val_ref,
5239                    decoder,
5240                    inner_offset,
5241                    inner_depth
5242                )?;
5243                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5244                {
5245                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5246                }
5247                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5248                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5249                }
5250            }
5251
5252            next_offset += envelope_size;
5253            _next_ordinal_to_read += 1;
5254            if next_offset >= end_offset {
5255                return Ok(());
5256            }
5257
5258            // Decode unknown envelopes for gaps in ordinals.
5259            while _next_ordinal_to_read < 2 {
5260                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5261                _next_ordinal_to_read += 1;
5262                next_offset += envelope_size;
5263            }
5264
5265            let next_out_of_line = decoder.next_out_of_line();
5266            let handles_before = decoder.remaining_handles();
5267            if let Some((inlined, num_bytes, num_handles)) =
5268                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5269            {
5270                let member_inline_size =
5271                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
5272                        decoder.context,
5273                    );
5274                if inlined != (member_inline_size <= 4) {
5275                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5276                }
5277                let inner_offset;
5278                let mut inner_depth = depth.clone();
5279                if inlined {
5280                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5281                    inner_offset = next_offset;
5282                } else {
5283                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5284                    inner_depth.increment()?;
5285                }
5286                let val_ref = self
5287                    .name
5288                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
5289                fidl::decode!(
5290                    fidl::encoding::UnboundedString,
5291                    D,
5292                    val_ref,
5293                    decoder,
5294                    inner_offset,
5295                    inner_depth
5296                )?;
5297                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5298                {
5299                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5300                }
5301                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5302                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5303                }
5304            }
5305
5306            next_offset += envelope_size;
5307            _next_ordinal_to_read += 1;
5308            if next_offset >= end_offset {
5309                return Ok(());
5310            }
5311
5312            // Decode unknown envelopes for gaps in ordinals.
5313            while _next_ordinal_to_read < 3 {
5314                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5315                _next_ordinal_to_read += 1;
5316                next_offset += envelope_size;
5317            }
5318
5319            let next_out_of_line = decoder.next_out_of_line();
5320            let handles_before = decoder.remaining_handles();
5321            if let Some((inlined, num_bytes, num_handles)) =
5322                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5323            {
5324                let member_inline_size =
5325                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5326                if inlined != (member_inline_size <= 4) {
5327                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5328                }
5329                let inner_offset;
5330                let mut inner_depth = depth.clone();
5331                if inlined {
5332                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5333                    inner_offset = next_offset;
5334                } else {
5335                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5336                    inner_depth.increment()?;
5337                }
5338                let val_ref = self.colocate.get_or_insert_with(|| fidl::new_empty!(bool, D));
5339                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5340                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5341                {
5342                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5343                }
5344                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5345                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5346                }
5347            }
5348
5349            next_offset += envelope_size;
5350            _next_ordinal_to_read += 1;
5351            if next_offset >= end_offset {
5352                return Ok(());
5353            }
5354
5355            // Decode unknown envelopes for gaps in ordinals.
5356            while _next_ordinal_to_read < 4 {
5357                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5358                _next_ordinal_to_read += 1;
5359                next_offset += envelope_size;
5360            }
5361
5362            let next_out_of_line = decoder.next_out_of_line();
5363            let handles_before = decoder.remaining_handles();
5364            if let Some((inlined, num_bytes, num_handles)) =
5365                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5366            {
5367                let member_inline_size =
5368                    <DriverPackageType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5369                if inlined != (member_inline_size <= 4) {
5370                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5371                }
5372                let inner_offset;
5373                let mut inner_depth = depth.clone();
5374                if inlined {
5375                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5376                    inner_offset = next_offset;
5377                } else {
5378                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5379                    inner_depth.increment()?;
5380                }
5381                let val_ref =
5382                    self.package_type.get_or_insert_with(|| fidl::new_empty!(DriverPackageType, D));
5383                fidl::decode!(DriverPackageType, D, val_ref, decoder, inner_offset, inner_depth)?;
5384                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5385                {
5386                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5387                }
5388                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5389                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5390                }
5391            }
5392
5393            next_offset += envelope_size;
5394            _next_ordinal_to_read += 1;
5395            if next_offset >= end_offset {
5396                return Ok(());
5397            }
5398
5399            // Decode unknown envelopes for gaps in ordinals.
5400            while _next_ordinal_to_read < 5 {
5401                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5402                _next_ordinal_to_read += 1;
5403                next_offset += envelope_size;
5404            }
5405
5406            let next_out_of_line = decoder.next_out_of_line();
5407            let handles_before = decoder.remaining_handles();
5408            if let Some((inlined, num_bytes, num_handles)) =
5409                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5410            {
5411                let member_inline_size =
5412                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5413                if inlined != (member_inline_size <= 4) {
5414                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5415                }
5416                let inner_offset;
5417                let mut inner_depth = depth.clone();
5418                if inlined {
5419                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5420                    inner_offset = next_offset;
5421                } else {
5422                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5423                    inner_depth.increment()?;
5424                }
5425                let val_ref = self.is_fallback.get_or_insert_with(|| fidl::new_empty!(bool, D));
5426                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5427                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5428                {
5429                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5430                }
5431                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5432                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5433                }
5434            }
5435
5436            next_offset += envelope_size;
5437            _next_ordinal_to_read += 1;
5438            if next_offset >= end_offset {
5439                return Ok(());
5440            }
5441
5442            // Decode unknown envelopes for gaps in ordinals.
5443            while _next_ordinal_to_read < 6 {
5444                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5445                _next_ordinal_to_read += 1;
5446                next_offset += envelope_size;
5447            }
5448
5449            let next_out_of_line = decoder.next_out_of_line();
5450            let handles_before = decoder.remaining_handles();
5451            if let Some((inlined, num_bytes, num_handles)) =
5452                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5453            {
5454                let member_inline_size = <fidl::encoding::UnboundedVector<DeviceCategory> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5455                if inlined != (member_inline_size <= 4) {
5456                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5457                }
5458                let inner_offset;
5459                let mut inner_depth = depth.clone();
5460                if inlined {
5461                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5462                    inner_offset = next_offset;
5463                } else {
5464                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5465                    inner_depth.increment()?;
5466                }
5467                let val_ref = self.device_categories.get_or_insert_with(|| {
5468                    fidl::new_empty!(fidl::encoding::UnboundedVector<DeviceCategory>, D)
5469                });
5470                fidl::decode!(
5471                    fidl::encoding::UnboundedVector<DeviceCategory>,
5472                    D,
5473                    val_ref,
5474                    decoder,
5475                    inner_offset,
5476                    inner_depth
5477                )?;
5478                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5479                {
5480                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5481                }
5482                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5483                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5484                }
5485            }
5486
5487            next_offset += envelope_size;
5488            _next_ordinal_to_read += 1;
5489            if next_offset >= end_offset {
5490                return Ok(());
5491            }
5492
5493            // Decode unknown envelopes for gaps in ordinals.
5494            while _next_ordinal_to_read < 7 {
5495                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5496                _next_ordinal_to_read += 1;
5497                next_offset += envelope_size;
5498            }
5499
5500            let next_out_of_line = decoder.next_out_of_line();
5501            let handles_before = decoder.remaining_handles();
5502            if let Some((inlined, num_bytes, num_handles)) =
5503                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5504            {
5505                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5506                if inlined != (member_inline_size <= 4) {
5507                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5508                }
5509                let inner_offset;
5510                let mut inner_depth = depth.clone();
5511                if inlined {
5512                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5513                    inner_offset = next_offset;
5514                } else {
5515                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5516                    inner_depth.increment()?;
5517                }
5518                let val_ref = self.bind_rules_bytecode.get_or_insert_with(|| {
5519                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
5520                });
5521                fidl::decode!(
5522                    fidl::encoding::UnboundedVector<u8>,
5523                    D,
5524                    val_ref,
5525                    decoder,
5526                    inner_offset,
5527                    inner_depth
5528                )?;
5529                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5530                {
5531                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5532                }
5533                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5534                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5535                }
5536            }
5537
5538            next_offset += envelope_size;
5539            _next_ordinal_to_read += 1;
5540            if next_offset >= end_offset {
5541                return Ok(());
5542            }
5543
5544            // Decode unknown envelopes for gaps in ordinals.
5545            while _next_ordinal_to_read < 8 {
5546                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5547                _next_ordinal_to_read += 1;
5548                next_offset += envelope_size;
5549            }
5550
5551            let next_out_of_line = decoder.next_out_of_line();
5552            let handles_before = decoder.remaining_handles();
5553            if let Some((inlined, num_bytes, num_handles)) =
5554                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5555            {
5556                let member_inline_size =
5557                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5558                if inlined != (member_inline_size <= 4) {
5559                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5560                }
5561                let inner_offset;
5562                let mut inner_depth = depth.clone();
5563                if inlined {
5564                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5565                    inner_offset = next_offset;
5566                } else {
5567                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5568                    inner_depth.increment()?;
5569                }
5570                let val_ref =
5571                    self.driver_framework_version.get_or_insert_with(|| fidl::new_empty!(u8, D));
5572                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
5573                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5574                {
5575                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5576                }
5577                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5578                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5579                }
5580            }
5581
5582            next_offset += envelope_size;
5583            _next_ordinal_to_read += 1;
5584            if next_offset >= end_offset {
5585                return Ok(());
5586            }
5587
5588            // Decode unknown envelopes for gaps in ordinals.
5589            while _next_ordinal_to_read < 9 {
5590                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5591                _next_ordinal_to_read += 1;
5592                next_offset += envelope_size;
5593            }
5594
5595            let next_out_of_line = decoder.next_out_of_line();
5596            let handles_before = decoder.remaining_handles();
5597            if let Some((inlined, num_bytes, num_handles)) =
5598                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5599            {
5600                let member_inline_size =
5601                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5602                if inlined != (member_inline_size <= 4) {
5603                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5604                }
5605                let inner_offset;
5606                let mut inner_depth = depth.clone();
5607                if inlined {
5608                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5609                    inner_offset = next_offset;
5610                } else {
5611                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5612                    inner_depth.increment()?;
5613                }
5614                let val_ref = self.is_disabled.get_or_insert_with(|| fidl::new_empty!(bool, D));
5615                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5616                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5617                {
5618                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5619                }
5620                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5621                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5622                }
5623            }
5624
5625            next_offset += envelope_size;
5626
5627            // Decode the remaining unknown envelopes.
5628            while next_offset < end_offset {
5629                _next_ordinal_to_read += 1;
5630                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5631                next_offset += envelope_size;
5632            }
5633
5634            Ok(())
5635        }
5636    }
5637
5638    impl HealthCheckResponse {
5639        #[inline(always)]
5640        fn max_ordinal_present(&self) -> u64 {
5641            if let Some(_) = self.conditions {
5642                return 2;
5643            }
5644            if let Some(_) = self.diagnostics {
5645                return 1;
5646            }
5647            0
5648        }
5649    }
5650
5651    impl fidl::encoding::ValueTypeMarker for HealthCheckResponse {
5652        type Borrowed<'a> = &'a Self;
5653        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5654            value
5655        }
5656    }
5657
5658    unsafe impl fidl::encoding::TypeMarker for HealthCheckResponse {
5659        type Owned = Self;
5660
5661        #[inline(always)]
5662        fn inline_align(_context: fidl::encoding::Context) -> usize {
5663            8
5664        }
5665
5666        #[inline(always)]
5667        fn inline_size(_context: fidl::encoding::Context) -> usize {
5668            16
5669        }
5670    }
5671
5672    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthCheckResponse, D>
5673        for &HealthCheckResponse
5674    {
5675        unsafe fn encode(
5676            self,
5677            encoder: &mut fidl::encoding::Encoder<'_, D>,
5678            offset: usize,
5679            mut depth: fidl::encoding::Depth,
5680        ) -> fidl::Result<()> {
5681            encoder.debug_check_bounds::<HealthCheckResponse>(offset);
5682            // Vector header
5683            let max_ordinal: u64 = self.max_ordinal_present();
5684            encoder.write_num(max_ordinal, offset);
5685            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5686            // Calling encoder.out_of_line_offset(0) is not allowed.
5687            if max_ordinal == 0 {
5688                return Ok(());
5689            }
5690            depth.increment()?;
5691            let envelope_size = 8;
5692            let bytes_len = max_ordinal as usize * envelope_size;
5693            #[allow(unused_variables)]
5694            let offset = encoder.out_of_line_offset(bytes_len);
5695            let mut _prev_end_offset: usize = 0;
5696            if 1 > max_ordinal {
5697                return Ok(());
5698            }
5699
5700            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5701            // are envelope_size bytes.
5702            let cur_offset: usize = (1 - 1) * envelope_size;
5703
5704            // Zero reserved fields.
5705            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5706
5707            // Safety:
5708            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5709            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5710            //   envelope_size bytes, there is always sufficient room.
5711            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<HealthDiagnosticItem, 32>, D>(
5712            self.diagnostics.as_ref().map(<fidl::encoding::Vector<HealthDiagnosticItem, 32> as fidl::encoding::ValueTypeMarker>::borrow),
5713            encoder, offset + cur_offset, depth
5714        )?;
5715
5716            _prev_end_offset = cur_offset + envelope_size;
5717            if 2 > max_ordinal {
5718                return Ok(());
5719            }
5720
5721            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5722            // are envelope_size bytes.
5723            let cur_offset: usize = (2 - 1) * envelope_size;
5724
5725            // Zero reserved fields.
5726            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5727
5728            // Safety:
5729            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5730            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5731            //   envelope_size bytes, there is always sufficient room.
5732            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<HealthCondition, 16>, D>(
5733            self.conditions.as_ref().map(<fidl::encoding::Vector<HealthCondition, 16> as fidl::encoding::ValueTypeMarker>::borrow),
5734            encoder, offset + cur_offset, depth
5735        )?;
5736
5737            _prev_end_offset = cur_offset + envelope_size;
5738
5739            Ok(())
5740        }
5741    }
5742
5743    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthCheckResponse {
5744        #[inline(always)]
5745        fn new_empty() -> Self {
5746            Self::default()
5747        }
5748
5749        unsafe fn decode(
5750            &mut self,
5751            decoder: &mut fidl::encoding::Decoder<'_, D>,
5752            offset: usize,
5753            mut depth: fidl::encoding::Depth,
5754        ) -> fidl::Result<()> {
5755            decoder.debug_check_bounds::<Self>(offset);
5756            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5757                None => return Err(fidl::Error::NotNullable),
5758                Some(len) => len,
5759            };
5760            // Calling decoder.out_of_line_offset(0) is not allowed.
5761            if len == 0 {
5762                return Ok(());
5763            };
5764            depth.increment()?;
5765            let envelope_size = 8;
5766            let bytes_len = len * envelope_size;
5767            let offset = decoder.out_of_line_offset(bytes_len)?;
5768            // Decode the envelope for each type.
5769            let mut _next_ordinal_to_read = 0;
5770            let mut next_offset = offset;
5771            let end_offset = offset + bytes_len;
5772            _next_ordinal_to_read += 1;
5773            if next_offset >= end_offset {
5774                return Ok(());
5775            }
5776
5777            // Decode unknown envelopes for gaps in ordinals.
5778            while _next_ordinal_to_read < 1 {
5779                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5780                _next_ordinal_to_read += 1;
5781                next_offset += envelope_size;
5782            }
5783
5784            let next_out_of_line = decoder.next_out_of_line();
5785            let handles_before = decoder.remaining_handles();
5786            if let Some((inlined, num_bytes, num_handles)) =
5787                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5788            {
5789                let member_inline_size = <fidl::encoding::Vector<HealthDiagnosticItem, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5790                if inlined != (member_inline_size <= 4) {
5791                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5792                }
5793                let inner_offset;
5794                let mut inner_depth = depth.clone();
5795                if inlined {
5796                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5797                    inner_offset = next_offset;
5798                } else {
5799                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5800                    inner_depth.increment()?;
5801                }
5802                let val_ref = self.diagnostics.get_or_insert_with(
5803                    || fidl::new_empty!(fidl::encoding::Vector<HealthDiagnosticItem, 32>, D),
5804                );
5805                fidl::decode!(fidl::encoding::Vector<HealthDiagnosticItem, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
5806                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5807                {
5808                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5809                }
5810                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5811                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5812                }
5813            }
5814
5815            next_offset += envelope_size;
5816            _next_ordinal_to_read += 1;
5817            if next_offset >= end_offset {
5818                return Ok(());
5819            }
5820
5821            // Decode unknown envelopes for gaps in ordinals.
5822            while _next_ordinal_to_read < 2 {
5823                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5824                _next_ordinal_to_read += 1;
5825                next_offset += envelope_size;
5826            }
5827
5828            let next_out_of_line = decoder.next_out_of_line();
5829            let handles_before = decoder.remaining_handles();
5830            if let Some((inlined, num_bytes, num_handles)) =
5831                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5832            {
5833                let member_inline_size = <fidl::encoding::Vector<HealthCondition, 16> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5834                if inlined != (member_inline_size <= 4) {
5835                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5836                }
5837                let inner_offset;
5838                let mut inner_depth = depth.clone();
5839                if inlined {
5840                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5841                    inner_offset = next_offset;
5842                } else {
5843                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5844                    inner_depth.increment()?;
5845                }
5846                let val_ref = self.conditions.get_or_insert_with(
5847                    || fidl::new_empty!(fidl::encoding::Vector<HealthCondition, 16>, D),
5848                );
5849                fidl::decode!(fidl::encoding::Vector<HealthCondition, 16>, D, val_ref, decoder, inner_offset, inner_depth)?;
5850                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5851                {
5852                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5853                }
5854                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5855                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5856                }
5857            }
5858
5859            next_offset += envelope_size;
5860
5861            // Decode the remaining unknown envelopes.
5862            while next_offset < end_offset {
5863                _next_ordinal_to_read += 1;
5864                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5865                next_offset += envelope_size;
5866            }
5867
5868            Ok(())
5869        }
5870    }
5871
5872    impl HealthCondition {
5873        #[inline(always)]
5874        fn max_ordinal_present(&self) -> u64 {
5875            if let Some(_) = self.occurrence_count {
5876                return 7;
5877            }
5878            if let Some(_) = self.last_observed {
5879                return 6;
5880            }
5881            if let Some(_) = self.first_observed {
5882                return 5;
5883            }
5884            if let Some(_) = self.diagnostics {
5885                return 4;
5886            }
5887            if let Some(_) = self.message {
5888                return 3;
5889            }
5890            if let Some(_) = self.reason_code {
5891                return 2;
5892            }
5893            if let Some(_) = self.status {
5894                return 1;
5895            }
5896            0
5897        }
5898    }
5899
5900    impl fidl::encoding::ValueTypeMarker for HealthCondition {
5901        type Borrowed<'a> = &'a Self;
5902        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5903            value
5904        }
5905    }
5906
5907    unsafe impl fidl::encoding::TypeMarker for HealthCondition {
5908        type Owned = Self;
5909
5910        #[inline(always)]
5911        fn inline_align(_context: fidl::encoding::Context) -> usize {
5912            8
5913        }
5914
5915        #[inline(always)]
5916        fn inline_size(_context: fidl::encoding::Context) -> usize {
5917            16
5918        }
5919    }
5920
5921    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthCondition, D>
5922        for &HealthCondition
5923    {
5924        unsafe fn encode(
5925            self,
5926            encoder: &mut fidl::encoding::Encoder<'_, D>,
5927            offset: usize,
5928            mut depth: fidl::encoding::Depth,
5929        ) -> fidl::Result<()> {
5930            encoder.debug_check_bounds::<HealthCondition>(offset);
5931            // Vector header
5932            let max_ordinal: u64 = self.max_ordinal_present();
5933            encoder.write_num(max_ordinal, offset);
5934            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5935            // Calling encoder.out_of_line_offset(0) is not allowed.
5936            if max_ordinal == 0 {
5937                return Ok(());
5938            }
5939            depth.increment()?;
5940            let envelope_size = 8;
5941            let bytes_len = max_ordinal as usize * envelope_size;
5942            #[allow(unused_variables)]
5943            let offset = encoder.out_of_line_offset(bytes_len);
5944            let mut _prev_end_offset: usize = 0;
5945            if 1 > max_ordinal {
5946                return Ok(());
5947            }
5948
5949            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5950            // are envelope_size bytes.
5951            let cur_offset: usize = (1 - 1) * envelope_size;
5952
5953            // Zero reserved fields.
5954            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5955
5956            // Safety:
5957            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5958            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5959            //   envelope_size bytes, there is always sufficient room.
5960            fidl::encoding::encode_in_envelope_optional::<HealthStatus, D>(
5961                self.status.as_ref().map(<HealthStatus as fidl::encoding::ValueTypeMarker>::borrow),
5962                encoder,
5963                offset + cur_offset,
5964                depth,
5965            )?;
5966
5967            _prev_end_offset = cur_offset + envelope_size;
5968            if 2 > max_ordinal {
5969                return Ok(());
5970            }
5971
5972            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5973            // are envelope_size bytes.
5974            let cur_offset: usize = (2 - 1) * envelope_size;
5975
5976            // Zero reserved fields.
5977            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5978
5979            // Safety:
5980            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5981            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5982            //   envelope_size bytes, there is always sufficient room.
5983            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
5984                self.reason_code.as_ref().map(
5985                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
5986                ),
5987                encoder,
5988                offset + cur_offset,
5989                depth,
5990            )?;
5991
5992            _prev_end_offset = cur_offset + envelope_size;
5993            if 3 > max_ordinal {
5994                return Ok(());
5995            }
5996
5997            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5998            // are envelope_size bytes.
5999            let cur_offset: usize = (3 - 1) * envelope_size;
6000
6001            // Zero reserved fields.
6002            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6003
6004            // Safety:
6005            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6006            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6007            //   envelope_size bytes, there is always sufficient room.
6008            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<1024>, D>(
6009            self.message.as_ref().map(<fidl::encoding::BoundedString<1024> as fidl::encoding::ValueTypeMarker>::borrow),
6010            encoder, offset + cur_offset, depth
6011        )?;
6012
6013            _prev_end_offset = cur_offset + envelope_size;
6014            if 4 > max_ordinal {
6015                return Ok(());
6016            }
6017
6018            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6019            // are envelope_size bytes.
6020            let cur_offset: usize = (4 - 1) * envelope_size;
6021
6022            // Zero reserved fields.
6023            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6024
6025            // Safety:
6026            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6027            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6028            //   envelope_size bytes, there is always sufficient room.
6029            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<HealthDiagnosticItem, 32>, D>(
6030            self.diagnostics.as_ref().map(<fidl::encoding::Vector<HealthDiagnosticItem, 32> as fidl::encoding::ValueTypeMarker>::borrow),
6031            encoder, offset + cur_offset, depth
6032        )?;
6033
6034            _prev_end_offset = cur_offset + envelope_size;
6035            if 5 > max_ordinal {
6036                return Ok(());
6037            }
6038
6039            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6040            // are envelope_size bytes.
6041            let cur_offset: usize = (5 - 1) * envelope_size;
6042
6043            // Zero reserved fields.
6044            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6045
6046            // Safety:
6047            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6048            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6049            //   envelope_size bytes, there is always sufficient room.
6050            fidl::encoding::encode_in_envelope_optional::<fidl::BootInstant, D>(
6051                self.first_observed
6052                    .as_ref()
6053                    .map(<fidl::BootInstant as fidl::encoding::ValueTypeMarker>::borrow),
6054                encoder,
6055                offset + cur_offset,
6056                depth,
6057            )?;
6058
6059            _prev_end_offset = cur_offset + envelope_size;
6060            if 6 > max_ordinal {
6061                return Ok(());
6062            }
6063
6064            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6065            // are envelope_size bytes.
6066            let cur_offset: usize = (6 - 1) * envelope_size;
6067
6068            // Zero reserved fields.
6069            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6070
6071            // Safety:
6072            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6073            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6074            //   envelope_size bytes, there is always sufficient room.
6075            fidl::encoding::encode_in_envelope_optional::<fidl::BootInstant, D>(
6076                self.last_observed
6077                    .as_ref()
6078                    .map(<fidl::BootInstant as fidl::encoding::ValueTypeMarker>::borrow),
6079                encoder,
6080                offset + cur_offset,
6081                depth,
6082            )?;
6083
6084            _prev_end_offset = cur_offset + envelope_size;
6085            if 7 > max_ordinal {
6086                return Ok(());
6087            }
6088
6089            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6090            // are envelope_size bytes.
6091            let cur_offset: usize = (7 - 1) * envelope_size;
6092
6093            // Zero reserved fields.
6094            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6095
6096            // Safety:
6097            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6098            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6099            //   envelope_size bytes, there is always sufficient room.
6100            fidl::encoding::encode_in_envelope_optional::<u64, D>(
6101                self.occurrence_count
6102                    .as_ref()
6103                    .map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
6104                encoder,
6105                offset + cur_offset,
6106                depth,
6107            )?;
6108
6109            _prev_end_offset = cur_offset + envelope_size;
6110
6111            Ok(())
6112        }
6113    }
6114
6115    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthCondition {
6116        #[inline(always)]
6117        fn new_empty() -> Self {
6118            Self::default()
6119        }
6120
6121        unsafe fn decode(
6122            &mut self,
6123            decoder: &mut fidl::encoding::Decoder<'_, D>,
6124            offset: usize,
6125            mut depth: fidl::encoding::Depth,
6126        ) -> fidl::Result<()> {
6127            decoder.debug_check_bounds::<Self>(offset);
6128            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6129                None => return Err(fidl::Error::NotNullable),
6130                Some(len) => len,
6131            };
6132            // Calling decoder.out_of_line_offset(0) is not allowed.
6133            if len == 0 {
6134                return Ok(());
6135            };
6136            depth.increment()?;
6137            let envelope_size = 8;
6138            let bytes_len = len * envelope_size;
6139            let offset = decoder.out_of_line_offset(bytes_len)?;
6140            // Decode the envelope for each type.
6141            let mut _next_ordinal_to_read = 0;
6142            let mut next_offset = offset;
6143            let end_offset = offset + bytes_len;
6144            _next_ordinal_to_read += 1;
6145            if next_offset >= end_offset {
6146                return Ok(());
6147            }
6148
6149            // Decode unknown envelopes for gaps in ordinals.
6150            while _next_ordinal_to_read < 1 {
6151                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6152                _next_ordinal_to_read += 1;
6153                next_offset += envelope_size;
6154            }
6155
6156            let next_out_of_line = decoder.next_out_of_line();
6157            let handles_before = decoder.remaining_handles();
6158            if let Some((inlined, num_bytes, num_handles)) =
6159                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6160            {
6161                let member_inline_size =
6162                    <HealthStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6163                if inlined != (member_inline_size <= 4) {
6164                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6165                }
6166                let inner_offset;
6167                let mut inner_depth = depth.clone();
6168                if inlined {
6169                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6170                    inner_offset = next_offset;
6171                } else {
6172                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6173                    inner_depth.increment()?;
6174                }
6175                let val_ref = self.status.get_or_insert_with(|| fidl::new_empty!(HealthStatus, D));
6176                fidl::decode!(HealthStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
6177                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6178                {
6179                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6180                }
6181                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6182                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6183                }
6184            }
6185
6186            next_offset += envelope_size;
6187            _next_ordinal_to_read += 1;
6188            if next_offset >= end_offset {
6189                return Ok(());
6190            }
6191
6192            // Decode unknown envelopes for gaps in ordinals.
6193            while _next_ordinal_to_read < 2 {
6194                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6195                _next_ordinal_to_read += 1;
6196                next_offset += envelope_size;
6197            }
6198
6199            let next_out_of_line = decoder.next_out_of_line();
6200            let handles_before = decoder.remaining_handles();
6201            if let Some((inlined, num_bytes, num_handles)) =
6202                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6203            {
6204                let member_inline_size =
6205                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
6206                        decoder.context,
6207                    );
6208                if inlined != (member_inline_size <= 4) {
6209                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6210                }
6211                let inner_offset;
6212                let mut inner_depth = depth.clone();
6213                if inlined {
6214                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6215                    inner_offset = next_offset;
6216                } else {
6217                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6218                    inner_depth.increment()?;
6219                }
6220                let val_ref = self
6221                    .reason_code
6222                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
6223                fidl::decode!(
6224                    fidl::encoding::BoundedString<128>,
6225                    D,
6226                    val_ref,
6227                    decoder,
6228                    inner_offset,
6229                    inner_depth
6230                )?;
6231                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6232                {
6233                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6234                }
6235                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6236                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6237                }
6238            }
6239
6240            next_offset += envelope_size;
6241            _next_ordinal_to_read += 1;
6242            if next_offset >= end_offset {
6243                return Ok(());
6244            }
6245
6246            // Decode unknown envelopes for gaps in ordinals.
6247            while _next_ordinal_to_read < 3 {
6248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6249                _next_ordinal_to_read += 1;
6250                next_offset += envelope_size;
6251            }
6252
6253            let next_out_of_line = decoder.next_out_of_line();
6254            let handles_before = decoder.remaining_handles();
6255            if let Some((inlined, num_bytes, num_handles)) =
6256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6257            {
6258                let member_inline_size = <fidl::encoding::BoundedString<1024> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6259                if inlined != (member_inline_size <= 4) {
6260                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6261                }
6262                let inner_offset;
6263                let mut inner_depth = depth.clone();
6264                if inlined {
6265                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6266                    inner_offset = next_offset;
6267                } else {
6268                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6269                    inner_depth.increment()?;
6270                }
6271                let val_ref = self.message.get_or_insert_with(|| {
6272                    fidl::new_empty!(fidl::encoding::BoundedString<1024>, D)
6273                });
6274                fidl::decode!(
6275                    fidl::encoding::BoundedString<1024>,
6276                    D,
6277                    val_ref,
6278                    decoder,
6279                    inner_offset,
6280                    inner_depth
6281                )?;
6282                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6283                {
6284                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6285                }
6286                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6287                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6288                }
6289            }
6290
6291            next_offset += envelope_size;
6292            _next_ordinal_to_read += 1;
6293            if next_offset >= end_offset {
6294                return Ok(());
6295            }
6296
6297            // Decode unknown envelopes for gaps in ordinals.
6298            while _next_ordinal_to_read < 4 {
6299                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6300                _next_ordinal_to_read += 1;
6301                next_offset += envelope_size;
6302            }
6303
6304            let next_out_of_line = decoder.next_out_of_line();
6305            let handles_before = decoder.remaining_handles();
6306            if let Some((inlined, num_bytes, num_handles)) =
6307                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6308            {
6309                let member_inline_size = <fidl::encoding::Vector<HealthDiagnosticItem, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6310                if inlined != (member_inline_size <= 4) {
6311                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6312                }
6313                let inner_offset;
6314                let mut inner_depth = depth.clone();
6315                if inlined {
6316                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6317                    inner_offset = next_offset;
6318                } else {
6319                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6320                    inner_depth.increment()?;
6321                }
6322                let val_ref = self.diagnostics.get_or_insert_with(
6323                    || fidl::new_empty!(fidl::encoding::Vector<HealthDiagnosticItem, 32>, D),
6324                );
6325                fidl::decode!(fidl::encoding::Vector<HealthDiagnosticItem, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
6326                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6327                {
6328                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6329                }
6330                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6331                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6332                }
6333            }
6334
6335            next_offset += envelope_size;
6336            _next_ordinal_to_read += 1;
6337            if next_offset >= end_offset {
6338                return Ok(());
6339            }
6340
6341            // Decode unknown envelopes for gaps in ordinals.
6342            while _next_ordinal_to_read < 5 {
6343                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6344                _next_ordinal_to_read += 1;
6345                next_offset += envelope_size;
6346            }
6347
6348            let next_out_of_line = decoder.next_out_of_line();
6349            let handles_before = decoder.remaining_handles();
6350            if let Some((inlined, num_bytes, num_handles)) =
6351                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6352            {
6353                let member_inline_size =
6354                    <fidl::BootInstant as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6355                if inlined != (member_inline_size <= 4) {
6356                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6357                }
6358                let inner_offset;
6359                let mut inner_depth = depth.clone();
6360                if inlined {
6361                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6362                    inner_offset = next_offset;
6363                } else {
6364                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6365                    inner_depth.increment()?;
6366                }
6367                let val_ref = self
6368                    .first_observed
6369                    .get_or_insert_with(|| fidl::new_empty!(fidl::BootInstant, D));
6370                fidl::decode!(fidl::BootInstant, D, val_ref, decoder, inner_offset, inner_depth)?;
6371                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6372                {
6373                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6374                }
6375                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6376                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6377                }
6378            }
6379
6380            next_offset += envelope_size;
6381            _next_ordinal_to_read += 1;
6382            if next_offset >= end_offset {
6383                return Ok(());
6384            }
6385
6386            // Decode unknown envelopes for gaps in ordinals.
6387            while _next_ordinal_to_read < 6 {
6388                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6389                _next_ordinal_to_read += 1;
6390                next_offset += envelope_size;
6391            }
6392
6393            let next_out_of_line = decoder.next_out_of_line();
6394            let handles_before = decoder.remaining_handles();
6395            if let Some((inlined, num_bytes, num_handles)) =
6396                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6397            {
6398                let member_inline_size =
6399                    <fidl::BootInstant as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6400                if inlined != (member_inline_size <= 4) {
6401                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6402                }
6403                let inner_offset;
6404                let mut inner_depth = depth.clone();
6405                if inlined {
6406                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6407                    inner_offset = next_offset;
6408                } else {
6409                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6410                    inner_depth.increment()?;
6411                }
6412                let val_ref = self
6413                    .last_observed
6414                    .get_or_insert_with(|| fidl::new_empty!(fidl::BootInstant, D));
6415                fidl::decode!(fidl::BootInstant, D, val_ref, decoder, inner_offset, inner_depth)?;
6416                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6417                {
6418                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6419                }
6420                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6421                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6422                }
6423            }
6424
6425            next_offset += envelope_size;
6426            _next_ordinal_to_read += 1;
6427            if next_offset >= end_offset {
6428                return Ok(());
6429            }
6430
6431            // Decode unknown envelopes for gaps in ordinals.
6432            while _next_ordinal_to_read < 7 {
6433                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6434                _next_ordinal_to_read += 1;
6435                next_offset += envelope_size;
6436            }
6437
6438            let next_out_of_line = decoder.next_out_of_line();
6439            let handles_before = decoder.remaining_handles();
6440            if let Some((inlined, num_bytes, num_handles)) =
6441                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6442            {
6443                let member_inline_size =
6444                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6445                if inlined != (member_inline_size <= 4) {
6446                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6447                }
6448                let inner_offset;
6449                let mut inner_depth = depth.clone();
6450                if inlined {
6451                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6452                    inner_offset = next_offset;
6453                } else {
6454                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6455                    inner_depth.increment()?;
6456                }
6457                let val_ref = self.occurrence_count.get_or_insert_with(|| fidl::new_empty!(u64, D));
6458                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
6459                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6460                {
6461                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6462                }
6463                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6464                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6465                }
6466            }
6467
6468            next_offset += envelope_size;
6469
6470            // Decode the remaining unknown envelopes.
6471            while next_offset < end_offset {
6472                _next_ordinal_to_read += 1;
6473                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6474                next_offset += envelope_size;
6475            }
6476
6477            Ok(())
6478        }
6479    }
6480
6481    impl Node2 {
6482        #[inline(always)]
6483        fn max_ordinal_present(&self) -> u64 {
6484            if let Some(_) = self.dependencies {
6485                return 2;
6486            }
6487            if let Some(_) = self.name {
6488                return 1;
6489            }
6490            0
6491        }
6492    }
6493
6494    impl fidl::encoding::ValueTypeMarker for Node2 {
6495        type Borrowed<'a> = &'a Self;
6496        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6497            value
6498        }
6499    }
6500
6501    unsafe impl fidl::encoding::TypeMarker for Node2 {
6502        type Owned = Self;
6503
6504        #[inline(always)]
6505        fn inline_align(_context: fidl::encoding::Context) -> usize {
6506            8
6507        }
6508
6509        #[inline(always)]
6510        fn inline_size(_context: fidl::encoding::Context) -> usize {
6511            16
6512        }
6513    }
6514
6515    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Node2, D> for &Node2 {
6516        unsafe fn encode(
6517            self,
6518            encoder: &mut fidl::encoding::Encoder<'_, D>,
6519            offset: usize,
6520            mut depth: fidl::encoding::Depth,
6521        ) -> fidl::Result<()> {
6522            encoder.debug_check_bounds::<Node2>(offset);
6523            // Vector header
6524            let max_ordinal: u64 = self.max_ordinal_present();
6525            encoder.write_num(max_ordinal, offset);
6526            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6527            // Calling encoder.out_of_line_offset(0) is not allowed.
6528            if max_ordinal == 0 {
6529                return Ok(());
6530            }
6531            depth.increment()?;
6532            let envelope_size = 8;
6533            let bytes_len = max_ordinal as usize * envelope_size;
6534            #[allow(unused_variables)]
6535            let offset = encoder.out_of_line_offset(bytes_len);
6536            let mut _prev_end_offset: usize = 0;
6537            if 1 > max_ordinal {
6538                return Ok(());
6539            }
6540
6541            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6542            // are envelope_size bytes.
6543            let cur_offset: usize = (1 - 1) * envelope_size;
6544
6545            // Zero reserved fields.
6546            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6547
6548            // Safety:
6549            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6550            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6551            //   envelope_size bytes, there is always sufficient room.
6552            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
6553                self.name.as_ref().map(
6554                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6555                ),
6556                encoder,
6557                offset + cur_offset,
6558                depth,
6559            )?;
6560
6561            _prev_end_offset = cur_offset + envelope_size;
6562            if 2 > max_ordinal {
6563                return Ok(());
6564            }
6565
6566            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6567            // are envelope_size bytes.
6568            let cur_offset: usize = (2 - 1) * envelope_size;
6569
6570            // Zero reserved fields.
6571            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6572
6573            // Safety:
6574            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6575            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6576            //   envelope_size bytes, there is always sufficient room.
6577            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<Dependency>, D>(
6578            self.dependencies.as_ref().map(<fidl::encoding::UnboundedVector<Dependency> as fidl::encoding::ValueTypeMarker>::borrow),
6579            encoder, offset + cur_offset, depth
6580        )?;
6581
6582            _prev_end_offset = cur_offset + envelope_size;
6583
6584            Ok(())
6585        }
6586    }
6587
6588    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Node2 {
6589        #[inline(always)]
6590        fn new_empty() -> Self {
6591            Self::default()
6592        }
6593
6594        unsafe fn decode(
6595            &mut self,
6596            decoder: &mut fidl::encoding::Decoder<'_, D>,
6597            offset: usize,
6598            mut depth: fidl::encoding::Depth,
6599        ) -> fidl::Result<()> {
6600            decoder.debug_check_bounds::<Self>(offset);
6601            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6602                None => return Err(fidl::Error::NotNullable),
6603                Some(len) => len,
6604            };
6605            // Calling decoder.out_of_line_offset(0) is not allowed.
6606            if len == 0 {
6607                return Ok(());
6608            };
6609            depth.increment()?;
6610            let envelope_size = 8;
6611            let bytes_len = len * envelope_size;
6612            let offset = decoder.out_of_line_offset(bytes_len)?;
6613            // Decode the envelope for each type.
6614            let mut _next_ordinal_to_read = 0;
6615            let mut next_offset = offset;
6616            let end_offset = offset + bytes_len;
6617            _next_ordinal_to_read += 1;
6618            if next_offset >= end_offset {
6619                return Ok(());
6620            }
6621
6622            // Decode unknown envelopes for gaps in ordinals.
6623            while _next_ordinal_to_read < 1 {
6624                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6625                _next_ordinal_to_read += 1;
6626                next_offset += envelope_size;
6627            }
6628
6629            let next_out_of_line = decoder.next_out_of_line();
6630            let handles_before = decoder.remaining_handles();
6631            if let Some((inlined, num_bytes, num_handles)) =
6632                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6633            {
6634                let member_inline_size =
6635                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
6636                        decoder.context,
6637                    );
6638                if inlined != (member_inline_size <= 4) {
6639                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6640                }
6641                let inner_offset;
6642                let mut inner_depth = depth.clone();
6643                if inlined {
6644                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6645                    inner_offset = next_offset;
6646                } else {
6647                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6648                    inner_depth.increment()?;
6649                }
6650                let val_ref = self
6651                    .name
6652                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
6653                fidl::decode!(
6654                    fidl::encoding::UnboundedString,
6655                    D,
6656                    val_ref,
6657                    decoder,
6658                    inner_offset,
6659                    inner_depth
6660                )?;
6661                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6662                {
6663                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6664                }
6665                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6666                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6667                }
6668            }
6669
6670            next_offset += envelope_size;
6671            _next_ordinal_to_read += 1;
6672            if next_offset >= end_offset {
6673                return Ok(());
6674            }
6675
6676            // Decode unknown envelopes for gaps in ordinals.
6677            while _next_ordinal_to_read < 2 {
6678                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6679                _next_ordinal_to_read += 1;
6680                next_offset += envelope_size;
6681            }
6682
6683            let next_out_of_line = decoder.next_out_of_line();
6684            let handles_before = decoder.remaining_handles();
6685            if let Some((inlined, num_bytes, num_handles)) =
6686                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6687            {
6688                let member_inline_size = <fidl::encoding::UnboundedVector<Dependency> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6689                if inlined != (member_inline_size <= 4) {
6690                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6691                }
6692                let inner_offset;
6693                let mut inner_depth = depth.clone();
6694                if inlined {
6695                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6696                    inner_offset = next_offset;
6697                } else {
6698                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6699                    inner_depth.increment()?;
6700                }
6701                let val_ref = self.dependencies.get_or_insert_with(|| {
6702                    fidl::new_empty!(fidl::encoding::UnboundedVector<Dependency>, D)
6703                });
6704                fidl::decode!(
6705                    fidl::encoding::UnboundedVector<Dependency>,
6706                    D,
6707                    val_ref,
6708                    decoder,
6709                    inner_offset,
6710                    inner_depth
6711                )?;
6712                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6713                {
6714                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6715                }
6716                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6717                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6718                }
6719            }
6720
6721            next_offset += envelope_size;
6722
6723            // Decode the remaining unknown envelopes.
6724            while next_offset < end_offset {
6725                _next_ordinal_to_read += 1;
6726                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6727                next_offset += envelope_size;
6728            }
6729
6730            Ok(())
6731        }
6732    }
6733
6734    impl NodeControllerRequestBindRequest {
6735        #[inline(always)]
6736        fn max_ordinal_present(&self) -> u64 {
6737            if let Some(_) = self.driver_url_suffix {
6738                return 2;
6739            }
6740            if let Some(_) = self.force_rebind {
6741                return 1;
6742            }
6743            0
6744        }
6745    }
6746
6747    impl fidl::encoding::ValueTypeMarker for NodeControllerRequestBindRequest {
6748        type Borrowed<'a> = &'a Self;
6749        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
6750            value
6751        }
6752    }
6753
6754    unsafe impl fidl::encoding::TypeMarker for NodeControllerRequestBindRequest {
6755        type Owned = Self;
6756
6757        #[inline(always)]
6758        fn inline_align(_context: fidl::encoding::Context) -> usize {
6759            8
6760        }
6761
6762        #[inline(always)]
6763        fn inline_size(_context: fidl::encoding::Context) -> usize {
6764            16
6765        }
6766    }
6767
6768    unsafe impl<D: fidl::encoding::ResourceDialect>
6769        fidl::encoding::Encode<NodeControllerRequestBindRequest, D>
6770        for &NodeControllerRequestBindRequest
6771    {
6772        unsafe fn encode(
6773            self,
6774            encoder: &mut fidl::encoding::Encoder<'_, D>,
6775            offset: usize,
6776            mut depth: fidl::encoding::Depth,
6777        ) -> fidl::Result<()> {
6778            encoder.debug_check_bounds::<NodeControllerRequestBindRequest>(offset);
6779            // Vector header
6780            let max_ordinal: u64 = self.max_ordinal_present();
6781            encoder.write_num(max_ordinal, offset);
6782            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
6783            // Calling encoder.out_of_line_offset(0) is not allowed.
6784            if max_ordinal == 0 {
6785                return Ok(());
6786            }
6787            depth.increment()?;
6788            let envelope_size = 8;
6789            let bytes_len = max_ordinal as usize * envelope_size;
6790            #[allow(unused_variables)]
6791            let offset = encoder.out_of_line_offset(bytes_len);
6792            let mut _prev_end_offset: usize = 0;
6793            if 1 > max_ordinal {
6794                return Ok(());
6795            }
6796
6797            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6798            // are envelope_size bytes.
6799            let cur_offset: usize = (1 - 1) * envelope_size;
6800
6801            // Zero reserved fields.
6802            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6803
6804            // Safety:
6805            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6806            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6807            //   envelope_size bytes, there is always sufficient room.
6808            fidl::encoding::encode_in_envelope_optional::<bool, D>(
6809                self.force_rebind.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
6810                encoder,
6811                offset + cur_offset,
6812                depth,
6813            )?;
6814
6815            _prev_end_offset = cur_offset + envelope_size;
6816            if 2 > max_ordinal {
6817                return Ok(());
6818            }
6819
6820            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
6821            // are envelope_size bytes.
6822            let cur_offset: usize = (2 - 1) * envelope_size;
6823
6824            // Zero reserved fields.
6825            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
6826
6827            // Safety:
6828            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
6829            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
6830            //   envelope_size bytes, there is always sufficient room.
6831            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
6832                self.driver_url_suffix.as_ref().map(
6833                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
6834                ),
6835                encoder,
6836                offset + cur_offset,
6837                depth,
6838            )?;
6839
6840            _prev_end_offset = cur_offset + envelope_size;
6841
6842            Ok(())
6843        }
6844    }
6845
6846    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
6847        for NodeControllerRequestBindRequest
6848    {
6849        #[inline(always)]
6850        fn new_empty() -> Self {
6851            Self::default()
6852        }
6853
6854        unsafe fn decode(
6855            &mut self,
6856            decoder: &mut fidl::encoding::Decoder<'_, D>,
6857            offset: usize,
6858            mut depth: fidl::encoding::Depth,
6859        ) -> fidl::Result<()> {
6860            decoder.debug_check_bounds::<Self>(offset);
6861            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
6862                None => return Err(fidl::Error::NotNullable),
6863                Some(len) => len,
6864            };
6865            // Calling decoder.out_of_line_offset(0) is not allowed.
6866            if len == 0 {
6867                return Ok(());
6868            };
6869            depth.increment()?;
6870            let envelope_size = 8;
6871            let bytes_len = len * envelope_size;
6872            let offset = decoder.out_of_line_offset(bytes_len)?;
6873            // Decode the envelope for each type.
6874            let mut _next_ordinal_to_read = 0;
6875            let mut next_offset = offset;
6876            let end_offset = offset + bytes_len;
6877            _next_ordinal_to_read += 1;
6878            if next_offset >= end_offset {
6879                return Ok(());
6880            }
6881
6882            // Decode unknown envelopes for gaps in ordinals.
6883            while _next_ordinal_to_read < 1 {
6884                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6885                _next_ordinal_to_read += 1;
6886                next_offset += envelope_size;
6887            }
6888
6889            let next_out_of_line = decoder.next_out_of_line();
6890            let handles_before = decoder.remaining_handles();
6891            if let Some((inlined, num_bytes, num_handles)) =
6892                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6893            {
6894                let member_inline_size =
6895                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
6896                if inlined != (member_inline_size <= 4) {
6897                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6898                }
6899                let inner_offset;
6900                let mut inner_depth = depth.clone();
6901                if inlined {
6902                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6903                    inner_offset = next_offset;
6904                } else {
6905                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6906                    inner_depth.increment()?;
6907                }
6908                let val_ref = self.force_rebind.get_or_insert_with(|| fidl::new_empty!(bool, D));
6909                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
6910                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6911                {
6912                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6913                }
6914                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6915                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6916                }
6917            }
6918
6919            next_offset += envelope_size;
6920            _next_ordinal_to_read += 1;
6921            if next_offset >= end_offset {
6922                return Ok(());
6923            }
6924
6925            // Decode unknown envelopes for gaps in ordinals.
6926            while _next_ordinal_to_read < 2 {
6927                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6928                _next_ordinal_to_read += 1;
6929                next_offset += envelope_size;
6930            }
6931
6932            let next_out_of_line = decoder.next_out_of_line();
6933            let handles_before = decoder.remaining_handles();
6934            if let Some((inlined, num_bytes, num_handles)) =
6935                fidl::encoding::decode_envelope_header(decoder, next_offset)?
6936            {
6937                let member_inline_size =
6938                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
6939                        decoder.context,
6940                    );
6941                if inlined != (member_inline_size <= 4) {
6942                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
6943                }
6944                let inner_offset;
6945                let mut inner_depth = depth.clone();
6946                if inlined {
6947                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
6948                    inner_offset = next_offset;
6949                } else {
6950                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
6951                    inner_depth.increment()?;
6952                }
6953                let val_ref = self
6954                    .driver_url_suffix
6955                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
6956                fidl::decode!(
6957                    fidl::encoding::UnboundedString,
6958                    D,
6959                    val_ref,
6960                    decoder,
6961                    inner_offset,
6962                    inner_depth
6963                )?;
6964                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
6965                {
6966                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
6967                }
6968                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
6969                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
6970                }
6971            }
6972
6973            next_offset += envelope_size;
6974
6975            // Decode the remaining unknown envelopes.
6976            while next_offset < end_offset {
6977                _next_ordinal_to_read += 1;
6978                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
6979                next_offset += envelope_size;
6980            }
6981
6982            Ok(())
6983        }
6984    }
6985
6986    impl NodeSymbol {
6987        #[inline(always)]
6988        fn max_ordinal_present(&self) -> u64 {
6989            if let Some(_) = self.module_name {
6990                return 3;
6991            }
6992            if let Some(_) = self.address {
6993                return 2;
6994            }
6995            if let Some(_) = self.name {
6996                return 1;
6997            }
6998            0
6999        }
7000    }
7001
7002    impl fidl::encoding::ValueTypeMarker for NodeSymbol {
7003        type Borrowed<'a> = &'a Self;
7004        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7005            value
7006        }
7007    }
7008
7009    unsafe impl fidl::encoding::TypeMarker for NodeSymbol {
7010        type Owned = Self;
7011
7012        #[inline(always)]
7013        fn inline_align(_context: fidl::encoding::Context) -> usize {
7014            8
7015        }
7016
7017        #[inline(always)]
7018        fn inline_size(_context: fidl::encoding::Context) -> usize {
7019            16
7020        }
7021    }
7022
7023    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodeSymbol, D>
7024        for &NodeSymbol
7025    {
7026        unsafe fn encode(
7027            self,
7028            encoder: &mut fidl::encoding::Encoder<'_, D>,
7029            offset: usize,
7030            mut depth: fidl::encoding::Depth,
7031        ) -> fidl::Result<()> {
7032            encoder.debug_check_bounds::<NodeSymbol>(offset);
7033            // Vector header
7034            let max_ordinal: u64 = self.max_ordinal_present();
7035            encoder.write_num(max_ordinal, offset);
7036            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7037            // Calling encoder.out_of_line_offset(0) is not allowed.
7038            if max_ordinal == 0 {
7039                return Ok(());
7040            }
7041            depth.increment()?;
7042            let envelope_size = 8;
7043            let bytes_len = max_ordinal as usize * envelope_size;
7044            #[allow(unused_variables)]
7045            let offset = encoder.out_of_line_offset(bytes_len);
7046            let mut _prev_end_offset: usize = 0;
7047            if 1 > max_ordinal {
7048                return Ok(());
7049            }
7050
7051            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7052            // are envelope_size bytes.
7053            let cur_offset: usize = (1 - 1) * envelope_size;
7054
7055            // Zero reserved fields.
7056            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7057
7058            // Safety:
7059            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7060            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7061            //   envelope_size bytes, there is always sufficient room.
7062            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
7063                self.name.as_ref().map(
7064                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
7065                ),
7066                encoder,
7067                offset + cur_offset,
7068                depth,
7069            )?;
7070
7071            _prev_end_offset = cur_offset + envelope_size;
7072            if 2 > max_ordinal {
7073                return Ok(());
7074            }
7075
7076            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7077            // are envelope_size bytes.
7078            let cur_offset: usize = (2 - 1) * envelope_size;
7079
7080            // Zero reserved fields.
7081            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7082
7083            // Safety:
7084            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7085            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7086            //   envelope_size bytes, there is always sufficient room.
7087            fidl::encoding::encode_in_envelope_optional::<u64, D>(
7088                self.address.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
7089                encoder,
7090                offset + cur_offset,
7091                depth,
7092            )?;
7093
7094            _prev_end_offset = cur_offset + envelope_size;
7095            if 3 > max_ordinal {
7096                return Ok(());
7097            }
7098
7099            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7100            // are envelope_size bytes.
7101            let cur_offset: usize = (3 - 1) * envelope_size;
7102
7103            // Zero reserved fields.
7104            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7105
7106            // Safety:
7107            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7108            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7109            //   envelope_size bytes, there is always sufficient room.
7110            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<128>, D>(
7111                self.module_name.as_ref().map(
7112                    <fidl::encoding::BoundedString<128> as fidl::encoding::ValueTypeMarker>::borrow,
7113                ),
7114                encoder,
7115                offset + cur_offset,
7116                depth,
7117            )?;
7118
7119            _prev_end_offset = cur_offset + envelope_size;
7120
7121            Ok(())
7122        }
7123    }
7124
7125    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodeSymbol {
7126        #[inline(always)]
7127        fn new_empty() -> Self {
7128            Self::default()
7129        }
7130
7131        unsafe fn decode(
7132            &mut self,
7133            decoder: &mut fidl::encoding::Decoder<'_, D>,
7134            offset: usize,
7135            mut depth: fidl::encoding::Depth,
7136        ) -> fidl::Result<()> {
7137            decoder.debug_check_bounds::<Self>(offset);
7138            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7139                None => return Err(fidl::Error::NotNullable),
7140                Some(len) => len,
7141            };
7142            // Calling decoder.out_of_line_offset(0) is not allowed.
7143            if len == 0 {
7144                return Ok(());
7145            };
7146            depth.increment()?;
7147            let envelope_size = 8;
7148            let bytes_len = len * envelope_size;
7149            let offset = decoder.out_of_line_offset(bytes_len)?;
7150            // Decode the envelope for each type.
7151            let mut _next_ordinal_to_read = 0;
7152            let mut next_offset = offset;
7153            let end_offset = offset + bytes_len;
7154            _next_ordinal_to_read += 1;
7155            if next_offset >= end_offset {
7156                return Ok(());
7157            }
7158
7159            // Decode unknown envelopes for gaps in ordinals.
7160            while _next_ordinal_to_read < 1 {
7161                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7162                _next_ordinal_to_read += 1;
7163                next_offset += envelope_size;
7164            }
7165
7166            let next_out_of_line = decoder.next_out_of_line();
7167            let handles_before = decoder.remaining_handles();
7168            if let Some((inlined, num_bytes, num_handles)) =
7169                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7170            {
7171                let member_inline_size =
7172                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
7173                        decoder.context,
7174                    );
7175                if inlined != (member_inline_size <= 4) {
7176                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7177                }
7178                let inner_offset;
7179                let mut inner_depth = depth.clone();
7180                if inlined {
7181                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7182                    inner_offset = next_offset;
7183                } else {
7184                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7185                    inner_depth.increment()?;
7186                }
7187                let val_ref = self
7188                    .name
7189                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
7190                fidl::decode!(
7191                    fidl::encoding::BoundedString<128>,
7192                    D,
7193                    val_ref,
7194                    decoder,
7195                    inner_offset,
7196                    inner_depth
7197                )?;
7198                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7199                {
7200                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7201                }
7202                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7203                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7204                }
7205            }
7206
7207            next_offset += envelope_size;
7208            _next_ordinal_to_read += 1;
7209            if next_offset >= end_offset {
7210                return Ok(());
7211            }
7212
7213            // Decode unknown envelopes for gaps in ordinals.
7214            while _next_ordinal_to_read < 2 {
7215                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7216                _next_ordinal_to_read += 1;
7217                next_offset += envelope_size;
7218            }
7219
7220            let next_out_of_line = decoder.next_out_of_line();
7221            let handles_before = decoder.remaining_handles();
7222            if let Some((inlined, num_bytes, num_handles)) =
7223                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7224            {
7225                let member_inline_size =
7226                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7227                if inlined != (member_inline_size <= 4) {
7228                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7229                }
7230                let inner_offset;
7231                let mut inner_depth = depth.clone();
7232                if inlined {
7233                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7234                    inner_offset = next_offset;
7235                } else {
7236                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7237                    inner_depth.increment()?;
7238                }
7239                let val_ref = self.address.get_or_insert_with(|| fidl::new_empty!(u64, D));
7240                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
7241                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7242                {
7243                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7244                }
7245                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7246                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7247                }
7248            }
7249
7250            next_offset += envelope_size;
7251            _next_ordinal_to_read += 1;
7252            if next_offset >= end_offset {
7253                return Ok(());
7254            }
7255
7256            // Decode unknown envelopes for gaps in ordinals.
7257            while _next_ordinal_to_read < 3 {
7258                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7259                _next_ordinal_to_read += 1;
7260                next_offset += envelope_size;
7261            }
7262
7263            let next_out_of_line = decoder.next_out_of_line();
7264            let handles_before = decoder.remaining_handles();
7265            if let Some((inlined, num_bytes, num_handles)) =
7266                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7267            {
7268                let member_inline_size =
7269                    <fidl::encoding::BoundedString<128> as fidl::encoding::TypeMarker>::inline_size(
7270                        decoder.context,
7271                    );
7272                if inlined != (member_inline_size <= 4) {
7273                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7274                }
7275                let inner_offset;
7276                let mut inner_depth = depth.clone();
7277                if inlined {
7278                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7279                    inner_offset = next_offset;
7280                } else {
7281                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7282                    inner_depth.increment()?;
7283                }
7284                let val_ref = self
7285                    .module_name
7286                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::BoundedString<128>, D));
7287                fidl::decode!(
7288                    fidl::encoding::BoundedString<128>,
7289                    D,
7290                    val_ref,
7291                    decoder,
7292                    inner_offset,
7293                    inner_depth
7294                )?;
7295                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7296                {
7297                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7298                }
7299                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7300                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7301                }
7302            }
7303
7304            next_offset += envelope_size;
7305
7306            // Decode the remaining unknown envelopes.
7307            while next_offset < end_offset {
7308                _next_ordinal_to_read += 1;
7309                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7310                next_offset += envelope_size;
7311            }
7312
7313            Ok(())
7314        }
7315    }
7316
7317    impl Selector {
7318        #[inline(always)]
7319        fn max_ordinal_present(&self) -> u64 {
7320            if let Some(_) = self.exclude_properties {
7321                return 3;
7322            }
7323            if let Some(_) = self.include_properties {
7324                return 2;
7325            }
7326            if let Some(_) = self.offers {
7327                return 1;
7328            }
7329            0
7330        }
7331    }
7332
7333    impl fidl::encoding::ValueTypeMarker for Selector {
7334        type Borrowed<'a> = &'a Self;
7335        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7336            value
7337        }
7338    }
7339
7340    unsafe impl fidl::encoding::TypeMarker for Selector {
7341        type Owned = Self;
7342
7343        #[inline(always)]
7344        fn inline_align(_context: fidl::encoding::Context) -> usize {
7345            8
7346        }
7347
7348        #[inline(always)]
7349        fn inline_size(_context: fidl::encoding::Context) -> usize {
7350            16
7351        }
7352    }
7353
7354    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Selector, D> for &Selector {
7355        unsafe fn encode(
7356            self,
7357            encoder: &mut fidl::encoding::Encoder<'_, D>,
7358            offset: usize,
7359            mut depth: fidl::encoding::Depth,
7360        ) -> fidl::Result<()> {
7361            encoder.debug_check_bounds::<Selector>(offset);
7362            // Vector header
7363            let max_ordinal: u64 = self.max_ordinal_present();
7364            encoder.write_num(max_ordinal, offset);
7365            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
7366            // Calling encoder.out_of_line_offset(0) is not allowed.
7367            if max_ordinal == 0 {
7368                return Ok(());
7369            }
7370            depth.increment()?;
7371            let envelope_size = 8;
7372            let bytes_len = max_ordinal as usize * envelope_size;
7373            #[allow(unused_variables)]
7374            let offset = encoder.out_of_line_offset(bytes_len);
7375            let mut _prev_end_offset: usize = 0;
7376            if 1 > max_ordinal {
7377                return Ok(());
7378            }
7379
7380            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7381            // are envelope_size bytes.
7382            let cur_offset: usize = (1 - 1) * envelope_size;
7383
7384            // Zero reserved fields.
7385            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7386
7387            // Safety:
7388            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7389            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7390            //   envelope_size bytes, there is always sufficient room.
7391            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<Offer, 128>, D>(
7392                self.offers.as_ref().map(
7393                    <fidl::encoding::Vector<Offer, 128> as fidl::encoding::ValueTypeMarker>::borrow,
7394                ),
7395                encoder,
7396                offset + cur_offset,
7397                depth,
7398            )?;
7399
7400            _prev_end_offset = cur_offset + envelope_size;
7401            if 2 > max_ordinal {
7402                return Ok(());
7403            }
7404
7405            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7406            // are envelope_size bytes.
7407            let cur_offset: usize = (2 - 1) * envelope_size;
7408
7409            // Zero reserved fields.
7410            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7411
7412            // Safety:
7413            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7414            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7415            //   envelope_size bytes, there is always sufficient room.
7416            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ResourceProperty, 64>, D>(
7417            self.include_properties.as_ref().map(<fidl::encoding::Vector<ResourceProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
7418            encoder, offset + cur_offset, depth
7419        )?;
7420
7421            _prev_end_offset = cur_offset + envelope_size;
7422            if 3 > max_ordinal {
7423                return Ok(());
7424            }
7425
7426            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
7427            // are envelope_size bytes.
7428            let cur_offset: usize = (3 - 1) * envelope_size;
7429
7430            // Zero reserved fields.
7431            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
7432
7433            // Safety:
7434            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
7435            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
7436            //   envelope_size bytes, there is always sufficient room.
7437            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<ResourceProperty, 64>, D>(
7438            self.exclude_properties.as_ref().map(<fidl::encoding::Vector<ResourceProperty, 64> as fidl::encoding::ValueTypeMarker>::borrow),
7439            encoder, offset + cur_offset, depth
7440        )?;
7441
7442            _prev_end_offset = cur_offset + envelope_size;
7443
7444            Ok(())
7445        }
7446    }
7447
7448    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Selector {
7449        #[inline(always)]
7450        fn new_empty() -> Self {
7451            Self::default()
7452        }
7453
7454        unsafe fn decode(
7455            &mut self,
7456            decoder: &mut fidl::encoding::Decoder<'_, D>,
7457            offset: usize,
7458            mut depth: fidl::encoding::Depth,
7459        ) -> fidl::Result<()> {
7460            decoder.debug_check_bounds::<Self>(offset);
7461            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
7462                None => return Err(fidl::Error::NotNullable),
7463                Some(len) => len,
7464            };
7465            // Calling decoder.out_of_line_offset(0) is not allowed.
7466            if len == 0 {
7467                return Ok(());
7468            };
7469            depth.increment()?;
7470            let envelope_size = 8;
7471            let bytes_len = len * envelope_size;
7472            let offset = decoder.out_of_line_offset(bytes_len)?;
7473            // Decode the envelope for each type.
7474            let mut _next_ordinal_to_read = 0;
7475            let mut next_offset = offset;
7476            let end_offset = offset + bytes_len;
7477            _next_ordinal_to_read += 1;
7478            if next_offset >= end_offset {
7479                return Ok(());
7480            }
7481
7482            // Decode unknown envelopes for gaps in ordinals.
7483            while _next_ordinal_to_read < 1 {
7484                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7485                _next_ordinal_to_read += 1;
7486                next_offset += envelope_size;
7487            }
7488
7489            let next_out_of_line = decoder.next_out_of_line();
7490            let handles_before = decoder.remaining_handles();
7491            if let Some((inlined, num_bytes, num_handles)) =
7492                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7493            {
7494                let member_inline_size =
7495                    <fidl::encoding::Vector<Offer, 128> as fidl::encoding::TypeMarker>::inline_size(
7496                        decoder.context,
7497                    );
7498                if inlined != (member_inline_size <= 4) {
7499                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7500                }
7501                let inner_offset;
7502                let mut inner_depth = depth.clone();
7503                if inlined {
7504                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7505                    inner_offset = next_offset;
7506                } else {
7507                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7508                    inner_depth.increment()?;
7509                }
7510                let val_ref = self
7511                    .offers
7512                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<Offer, 128>, D));
7513                fidl::decode!(fidl::encoding::Vector<Offer, 128>, D, val_ref, decoder, inner_offset, inner_depth)?;
7514                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7515                {
7516                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7517                }
7518                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7519                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7520                }
7521            }
7522
7523            next_offset += envelope_size;
7524            _next_ordinal_to_read += 1;
7525            if next_offset >= end_offset {
7526                return Ok(());
7527            }
7528
7529            // Decode unknown envelopes for gaps in ordinals.
7530            while _next_ordinal_to_read < 2 {
7531                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7532                _next_ordinal_to_read += 1;
7533                next_offset += envelope_size;
7534            }
7535
7536            let next_out_of_line = decoder.next_out_of_line();
7537            let handles_before = decoder.remaining_handles();
7538            if let Some((inlined, num_bytes, num_handles)) =
7539                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7540            {
7541                let member_inline_size = <fidl::encoding::Vector<ResourceProperty, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7542                if inlined != (member_inline_size <= 4) {
7543                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7544                }
7545                let inner_offset;
7546                let mut inner_depth = depth.clone();
7547                if inlined {
7548                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7549                    inner_offset = next_offset;
7550                } else {
7551                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7552                    inner_depth.increment()?;
7553                }
7554                let val_ref = self.include_properties.get_or_insert_with(
7555                    || fidl::new_empty!(fidl::encoding::Vector<ResourceProperty, 64>, D),
7556                );
7557                fidl::decode!(fidl::encoding::Vector<ResourceProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
7558                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7559                {
7560                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7561                }
7562                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7563                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7564                }
7565            }
7566
7567            next_offset += envelope_size;
7568            _next_ordinal_to_read += 1;
7569            if next_offset >= end_offset {
7570                return Ok(());
7571            }
7572
7573            // Decode unknown envelopes for gaps in ordinals.
7574            while _next_ordinal_to_read < 3 {
7575                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7576                _next_ordinal_to_read += 1;
7577                next_offset += envelope_size;
7578            }
7579
7580            let next_out_of_line = decoder.next_out_of_line();
7581            let handles_before = decoder.remaining_handles();
7582            if let Some((inlined, num_bytes, num_handles)) =
7583                fidl::encoding::decode_envelope_header(decoder, next_offset)?
7584            {
7585                let member_inline_size = <fidl::encoding::Vector<ResourceProperty, 64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
7586                if inlined != (member_inline_size <= 4) {
7587                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
7588                }
7589                let inner_offset;
7590                let mut inner_depth = depth.clone();
7591                if inlined {
7592                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
7593                    inner_offset = next_offset;
7594                } else {
7595                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7596                    inner_depth.increment()?;
7597                }
7598                let val_ref = self.exclude_properties.get_or_insert_with(
7599                    || fidl::new_empty!(fidl::encoding::Vector<ResourceProperty, 64>, D),
7600                );
7601                fidl::decode!(fidl::encoding::Vector<ResourceProperty, 64>, D, val_ref, decoder, inner_offset, inner_depth)?;
7602                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
7603                {
7604                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
7605                }
7606                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7607                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7608                }
7609            }
7610
7611            next_offset += envelope_size;
7612
7613            // Decode the remaining unknown envelopes.
7614            while next_offset < end_offset {
7615                _next_ordinal_to_read += 1;
7616                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
7617                next_offset += envelope_size;
7618            }
7619
7620            Ok(())
7621        }
7622    }
7623
7624    impl fidl::encoding::ValueTypeMarker for DeviceAddress {
7625        type Borrowed<'a> = &'a Self;
7626        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7627            value
7628        }
7629    }
7630
7631    unsafe impl fidl::encoding::TypeMarker for DeviceAddress {
7632        type Owned = Self;
7633
7634        #[inline(always)]
7635        fn inline_align(_context: fidl::encoding::Context) -> usize {
7636            8
7637        }
7638
7639        #[inline(always)]
7640        fn inline_size(_context: fidl::encoding::Context) -> usize {
7641            16
7642        }
7643    }
7644
7645    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceAddress, D>
7646        for &DeviceAddress
7647    {
7648        #[inline]
7649        unsafe fn encode(
7650            self,
7651            encoder: &mut fidl::encoding::Encoder<'_, D>,
7652            offset: usize,
7653            _depth: fidl::encoding::Depth,
7654        ) -> fidl::Result<()> {
7655            encoder.debug_check_bounds::<DeviceAddress>(offset);
7656            encoder.write_num::<u64>(self.ordinal(), offset);
7657            match self {
7658            DeviceAddress::IntValue(ref val) => {
7659                fidl::encoding::encode_in_envelope::<u8, D>(
7660                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(val),
7661                    encoder, offset + 8, _depth
7662                )
7663            }
7664            DeviceAddress::ArrayIntValue(ref val) => {
7665                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<u8, 10>, D>(
7666                    <fidl::encoding::Vector<u8, 10> as fidl::encoding::ValueTypeMarker>::borrow(val),
7667                    encoder, offset + 8, _depth
7668                )
7669            }
7670            DeviceAddress::CharIntValue(ref val) => {
7671                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<4>, D>(
7672                    <fidl::encoding::BoundedString<4> as fidl::encoding::ValueTypeMarker>::borrow(val),
7673                    encoder, offset + 8, _depth
7674                )
7675            }
7676            DeviceAddress::ArrayCharIntValue(ref val) => {
7677                fidl::encoding::encode_in_envelope::<fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>, D>(
7678                    <fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10> as fidl::encoding::ValueTypeMarker>::borrow(val),
7679                    encoder, offset + 8, _depth
7680                )
7681            }
7682            DeviceAddress::StringValue(ref val) => {
7683                fidl::encoding::encode_in_envelope::<fidl::encoding::BoundedString<32>, D>(
7684                    <fidl::encoding::BoundedString<32> as fidl::encoding::ValueTypeMarker>::borrow(val),
7685                    encoder, offset + 8, _depth
7686                )
7687            }
7688            DeviceAddress::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7689        }
7690        }
7691    }
7692
7693    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceAddress {
7694        #[inline(always)]
7695        fn new_empty() -> Self {
7696            Self::__SourceBreaking { unknown_ordinal: 0 }
7697        }
7698
7699        #[inline]
7700        unsafe fn decode(
7701            &mut self,
7702            decoder: &mut fidl::encoding::Decoder<'_, D>,
7703            offset: usize,
7704            mut depth: fidl::encoding::Depth,
7705        ) -> fidl::Result<()> {
7706            decoder.debug_check_bounds::<Self>(offset);
7707            #[allow(unused_variables)]
7708            let next_out_of_line = decoder.next_out_of_line();
7709            let handles_before = decoder.remaining_handles();
7710            let (ordinal, inlined, num_bytes, num_handles) =
7711                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7712
7713            let member_inline_size = match ordinal {
7714            1 => <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7715            2 => <fidl::encoding::Vector<u8, 10> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7716            3 => <fidl::encoding::BoundedString<4> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7717            4 => <fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7718            5 => <fidl::encoding::BoundedString<32> as fidl::encoding::TypeMarker>::inline_size(decoder.context),
7719            0 => return Err(fidl::Error::UnknownUnionTag),
7720            _ => num_bytes as usize,
7721        };
7722
7723            if inlined != (member_inline_size <= 4) {
7724                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7725            }
7726            let _inner_offset;
7727            if inlined {
7728                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7729                _inner_offset = offset + 8;
7730            } else {
7731                depth.increment()?;
7732                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7733            }
7734            match ordinal {
7735                1 => {
7736                    #[allow(irrefutable_let_patterns)]
7737                    if let DeviceAddress::IntValue(_) = self {
7738                        // Do nothing, read the value into the object
7739                    } else {
7740                        // Initialize `self` to the right variant
7741                        *self = DeviceAddress::IntValue(fidl::new_empty!(u8, D));
7742                    }
7743                    #[allow(irrefutable_let_patterns)]
7744                    if let DeviceAddress::IntValue(ref mut val) = self {
7745                        fidl::decode!(u8, D, val, decoder, _inner_offset, depth)?;
7746                    } else {
7747                        unreachable!()
7748                    }
7749                }
7750                2 => {
7751                    #[allow(irrefutable_let_patterns)]
7752                    if let DeviceAddress::ArrayIntValue(_) = self {
7753                        // Do nothing, read the value into the object
7754                    } else {
7755                        // Initialize `self` to the right variant
7756                        *self = DeviceAddress::ArrayIntValue(
7757                            fidl::new_empty!(fidl::encoding::Vector<u8, 10>, D),
7758                        );
7759                    }
7760                    #[allow(irrefutable_let_patterns)]
7761                    if let DeviceAddress::ArrayIntValue(ref mut val) = self {
7762                        fidl::decode!(fidl::encoding::Vector<u8, 10>, D, val, decoder, _inner_offset, depth)?;
7763                    } else {
7764                        unreachable!()
7765                    }
7766                }
7767                3 => {
7768                    #[allow(irrefutable_let_patterns)]
7769                    if let DeviceAddress::CharIntValue(_) = self {
7770                        // Do nothing, read the value into the object
7771                    } else {
7772                        // Initialize `self` to the right variant
7773                        *self = DeviceAddress::CharIntValue(fidl::new_empty!(
7774                            fidl::encoding::BoundedString<4>,
7775                            D
7776                        ));
7777                    }
7778                    #[allow(irrefutable_let_patterns)]
7779                    if let DeviceAddress::CharIntValue(ref mut val) = self {
7780                        fidl::decode!(
7781                            fidl::encoding::BoundedString<4>,
7782                            D,
7783                            val,
7784                            decoder,
7785                            _inner_offset,
7786                            depth
7787                        )?;
7788                    } else {
7789                        unreachable!()
7790                    }
7791                }
7792                4 => {
7793                    #[allow(irrefutable_let_patterns)]
7794                    if let DeviceAddress::ArrayCharIntValue(_) = self {
7795                        // Do nothing, read the value into the object
7796                    } else {
7797                        // Initialize `self` to the right variant
7798                        *self = DeviceAddress::ArrayCharIntValue(fidl::new_empty!(
7799                            fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>,
7800                            D
7801                        ));
7802                    }
7803                    #[allow(irrefutable_let_patterns)]
7804                    if let DeviceAddress::ArrayCharIntValue(ref mut val) = self {
7805                        fidl::decode!(
7806                            fidl::encoding::Vector<fidl::encoding::BoundedString<4>, 10>,
7807                            D,
7808                            val,
7809                            decoder,
7810                            _inner_offset,
7811                            depth
7812                        )?;
7813                    } else {
7814                        unreachable!()
7815                    }
7816                }
7817                5 => {
7818                    #[allow(irrefutable_let_patterns)]
7819                    if let DeviceAddress::StringValue(_) = self {
7820                        // Do nothing, read the value into the object
7821                    } else {
7822                        // Initialize `self` to the right variant
7823                        *self = DeviceAddress::StringValue(fidl::new_empty!(
7824                            fidl::encoding::BoundedString<32>,
7825                            D
7826                        ));
7827                    }
7828                    #[allow(irrefutable_let_patterns)]
7829                    if let DeviceAddress::StringValue(ref mut val) = self {
7830                        fidl::decode!(
7831                            fidl::encoding::BoundedString<32>,
7832                            D,
7833                            val,
7834                            decoder,
7835                            _inner_offset,
7836                            depth
7837                        )?;
7838                    } else {
7839                        unreachable!()
7840                    }
7841                }
7842                #[allow(deprecated)]
7843                ordinal => {
7844                    for _ in 0..num_handles {
7845                        decoder.drop_next_handle()?;
7846                    }
7847                    *self = DeviceAddress::__SourceBreaking { unknown_ordinal: ordinal };
7848                }
7849            }
7850            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
7851                return Err(fidl::Error::InvalidNumBytesInEnvelope);
7852            }
7853            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
7854                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
7855            }
7856            Ok(())
7857        }
7858    }
7859
7860    impl fidl::encoding::ValueTypeMarker for HealthAlert {
7861        type Borrowed<'a> = &'a Self;
7862        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
7863            value
7864        }
7865    }
7866
7867    unsafe impl fidl::encoding::TypeMarker for HealthAlert {
7868        type Owned = Self;
7869
7870        #[inline(always)]
7871        fn inline_align(_context: fidl::encoding::Context) -> usize {
7872            8
7873        }
7874
7875        #[inline(always)]
7876        fn inline_size(_context: fidl::encoding::Context) -> usize {
7877            16
7878        }
7879    }
7880
7881    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthAlert, D>
7882        for &HealthAlert
7883    {
7884        #[inline]
7885        unsafe fn encode(
7886            self,
7887            encoder: &mut fidl::encoding::Encoder<'_, D>,
7888            offset: usize,
7889            _depth: fidl::encoding::Depth,
7890        ) -> fidl::Result<()> {
7891            encoder.debug_check_bounds::<HealthAlert>(offset);
7892            encoder.write_num::<u64>(self.ordinal(), offset);
7893            match self {
7894                HealthAlert::SelfFault(ref val) => {
7895                    fidl::encoding::encode_in_envelope::<HealthCheckResponse, D>(
7896                        <HealthCheckResponse as fidl::encoding::ValueTypeMarker>::borrow(val),
7897                        encoder,
7898                        offset + 8,
7899                        _depth,
7900                    )
7901                }
7902                HealthAlert::UpstreamNeighborFault(ref val) => {
7903                    fidl::encoding::encode_in_envelope::<HealthCheckResponse, D>(
7904                        <HealthCheckResponse as fidl::encoding::ValueTypeMarker>::borrow(val),
7905                        encoder,
7906                        offset + 8,
7907                        _depth,
7908                    )
7909                }
7910                HealthAlert::DownstreamNeighborFault(ref val) => {
7911                    fidl::encoding::encode_in_envelope::<HealthCheckResponse, D>(
7912                        <HealthCheckResponse as fidl::encoding::ValueTypeMarker>::borrow(val),
7913                        encoder,
7914                        offset + 8,
7915                        _depth,
7916                    )
7917                }
7918                HealthAlert::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
7919            }
7920        }
7921    }
7922
7923    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthAlert {
7924        #[inline(always)]
7925        fn new_empty() -> Self {
7926            Self::__SourceBreaking { unknown_ordinal: 0 }
7927        }
7928
7929        #[inline]
7930        unsafe fn decode(
7931            &mut self,
7932            decoder: &mut fidl::encoding::Decoder<'_, D>,
7933            offset: usize,
7934            mut depth: fidl::encoding::Depth,
7935        ) -> fidl::Result<()> {
7936            decoder.debug_check_bounds::<Self>(offset);
7937            #[allow(unused_variables)]
7938            let next_out_of_line = decoder.next_out_of_line();
7939            let handles_before = decoder.remaining_handles();
7940            let (ordinal, inlined, num_bytes, num_handles) =
7941                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
7942
7943            let member_inline_size = match ordinal {
7944                1 => <HealthCheckResponse as fidl::encoding::TypeMarker>::inline_size(
7945                    decoder.context,
7946                ),
7947                2 => <HealthCheckResponse as fidl::encoding::TypeMarker>::inline_size(
7948                    decoder.context,
7949                ),
7950                3 => <HealthCheckResponse as fidl::encoding::TypeMarker>::inline_size(
7951                    decoder.context,
7952                ),
7953                0 => return Err(fidl::Error::UnknownUnionTag),
7954                _ => num_bytes as usize,
7955            };
7956
7957            if inlined != (member_inline_size <= 4) {
7958                return Err(fidl::Error::InvalidInlineBitInEnvelope);
7959            }
7960            let _inner_offset;
7961            if inlined {
7962                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
7963                _inner_offset = offset + 8;
7964            } else {
7965                depth.increment()?;
7966                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
7967            }
7968            match ordinal {
7969                1 => {
7970                    #[allow(irrefutable_let_patterns)]
7971                    if let HealthAlert::SelfFault(_) = self {
7972                        // Do nothing, read the value into the object
7973                    } else {
7974                        // Initialize `self` to the right variant
7975                        *self = HealthAlert::SelfFault(fidl::new_empty!(HealthCheckResponse, D));
7976                    }
7977                    #[allow(irrefutable_let_patterns)]
7978                    if let HealthAlert::SelfFault(ref mut val) = self {
7979                        fidl::decode!(HealthCheckResponse, D, val, decoder, _inner_offset, depth)?;
7980                    } else {
7981                        unreachable!()
7982                    }
7983                }
7984                2 => {
7985                    #[allow(irrefutable_let_patterns)]
7986                    if let HealthAlert::UpstreamNeighborFault(_) = self {
7987                        // Do nothing, read the value into the object
7988                    } else {
7989                        // Initialize `self` to the right variant
7990                        *self = HealthAlert::UpstreamNeighborFault(fidl::new_empty!(
7991                            HealthCheckResponse,
7992                            D
7993                        ));
7994                    }
7995                    #[allow(irrefutable_let_patterns)]
7996                    if let HealthAlert::UpstreamNeighborFault(ref mut val) = self {
7997                        fidl::decode!(HealthCheckResponse, D, val, decoder, _inner_offset, depth)?;
7998                    } else {
7999                        unreachable!()
8000                    }
8001                }
8002                3 => {
8003                    #[allow(irrefutable_let_patterns)]
8004                    if let HealthAlert::DownstreamNeighborFault(_) = self {
8005                        // Do nothing, read the value into the object
8006                    } else {
8007                        // Initialize `self` to the right variant
8008                        *self = HealthAlert::DownstreamNeighborFault(fidl::new_empty!(
8009                            HealthCheckResponse,
8010                            D
8011                        ));
8012                    }
8013                    #[allow(irrefutable_let_patterns)]
8014                    if let HealthAlert::DownstreamNeighborFault(ref mut val) = self {
8015                        fidl::decode!(HealthCheckResponse, D, val, decoder, _inner_offset, depth)?;
8016                    } else {
8017                        unreachable!()
8018                    }
8019                }
8020                #[allow(deprecated)]
8021                ordinal => {
8022                    for _ in 0..num_handles {
8023                        decoder.drop_next_handle()?;
8024                    }
8025                    *self = HealthAlert::__SourceBreaking { unknown_ordinal: ordinal };
8026                }
8027            }
8028            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8029                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8030            }
8031            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8032                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8033            }
8034            Ok(())
8035        }
8036    }
8037
8038    impl fidl::encoding::ValueTypeMarker for HealthDiagnosticValue {
8039        type Borrowed<'a> = &'a Self;
8040        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8041            value
8042        }
8043    }
8044
8045    unsafe impl fidl::encoding::TypeMarker for HealthDiagnosticValue {
8046        type Owned = Self;
8047
8048        #[inline(always)]
8049        fn inline_align(_context: fidl::encoding::Context) -> usize {
8050            8
8051        }
8052
8053        #[inline(always)]
8054        fn inline_size(_context: fidl::encoding::Context) -> usize {
8055            16
8056        }
8057    }
8058
8059    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HealthDiagnosticValue, D>
8060        for &HealthDiagnosticValue
8061    {
8062        #[inline]
8063        unsafe fn encode(
8064            self,
8065            encoder: &mut fidl::encoding::Encoder<'_, D>,
8066            offset: usize,
8067            _depth: fidl::encoding::Depth,
8068        ) -> fidl::Result<()> {
8069            encoder.debug_check_bounds::<HealthDiagnosticValue>(offset);
8070            encoder.write_num::<u64>(self.ordinal(), offset);
8071            match self {
8072                HealthDiagnosticValue::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
8073                    fidl::encoding::BoundedString<256>,
8074                    D,
8075                >(
8076                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
8077                        val,
8078                    ),
8079                    encoder,
8080                    offset + 8,
8081                    _depth,
8082                ),
8083                HealthDiagnosticValue::IntValue(ref val) => {
8084                    fidl::encoding::encode_in_envelope::<i64, D>(
8085                        <i64 as fidl::encoding::ValueTypeMarker>::borrow(val),
8086                        encoder,
8087                        offset + 8,
8088                        _depth,
8089                    )
8090                }
8091                HealthDiagnosticValue::UintValue(ref val) => {
8092                    fidl::encoding::encode_in_envelope::<u64, D>(
8093                        <u64 as fidl::encoding::ValueTypeMarker>::borrow(val),
8094                        encoder,
8095                        offset + 8,
8096                        _depth,
8097                    )
8098                }
8099                HealthDiagnosticValue::BoolValue(ref val) => {
8100                    fidl::encoding::encode_in_envelope::<bool, D>(
8101                        <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
8102                        encoder,
8103                        offset + 8,
8104                        _depth,
8105                    )
8106                }
8107                HealthDiagnosticValue::Timestamp(ref val) => {
8108                    fidl::encoding::encode_in_envelope::<fidl::BootInstant, D>(
8109                        <fidl::BootInstant as fidl::encoding::ValueTypeMarker>::borrow(val),
8110                        encoder,
8111                        offset + 8,
8112                        _depth,
8113                    )
8114                }
8115                HealthDiagnosticValue::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
8116            }
8117        }
8118    }
8119
8120    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HealthDiagnosticValue {
8121        #[inline(always)]
8122        fn new_empty() -> Self {
8123            Self::__SourceBreaking { unknown_ordinal: 0 }
8124        }
8125
8126        #[inline]
8127        unsafe fn decode(
8128            &mut self,
8129            decoder: &mut fidl::encoding::Decoder<'_, D>,
8130            offset: usize,
8131            mut depth: fidl::encoding::Depth,
8132        ) -> fidl::Result<()> {
8133            decoder.debug_check_bounds::<Self>(offset);
8134            #[allow(unused_variables)]
8135            let next_out_of_line = decoder.next_out_of_line();
8136            let handles_before = decoder.remaining_handles();
8137            let (ordinal, inlined, num_bytes, num_handles) =
8138                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8139
8140            let member_inline_size = match ordinal {
8141                1 => {
8142                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8143                        decoder.context,
8144                    )
8145                }
8146                2 => <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8147                3 => <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8148                4 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8149                5 => {
8150                    <fidl::BootInstant as fidl::encoding::TypeMarker>::inline_size(decoder.context)
8151                }
8152                0 => return Err(fidl::Error::UnknownUnionTag),
8153                _ => num_bytes as usize,
8154            };
8155
8156            if inlined != (member_inline_size <= 4) {
8157                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8158            }
8159            let _inner_offset;
8160            if inlined {
8161                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8162                _inner_offset = offset + 8;
8163            } else {
8164                depth.increment()?;
8165                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8166            }
8167            match ordinal {
8168                1 => {
8169                    #[allow(irrefutable_let_patterns)]
8170                    if let HealthDiagnosticValue::StringValue(_) = self {
8171                        // Do nothing, read the value into the object
8172                    } else {
8173                        // Initialize `self` to the right variant
8174                        *self = HealthDiagnosticValue::StringValue(fidl::new_empty!(
8175                            fidl::encoding::BoundedString<256>,
8176                            D
8177                        ));
8178                    }
8179                    #[allow(irrefutable_let_patterns)]
8180                    if let HealthDiagnosticValue::StringValue(ref mut val) = self {
8181                        fidl::decode!(
8182                            fidl::encoding::BoundedString<256>,
8183                            D,
8184                            val,
8185                            decoder,
8186                            _inner_offset,
8187                            depth
8188                        )?;
8189                    } else {
8190                        unreachable!()
8191                    }
8192                }
8193                2 => {
8194                    #[allow(irrefutable_let_patterns)]
8195                    if let HealthDiagnosticValue::IntValue(_) = self {
8196                        // Do nothing, read the value into the object
8197                    } else {
8198                        // Initialize `self` to the right variant
8199                        *self = HealthDiagnosticValue::IntValue(fidl::new_empty!(i64, D));
8200                    }
8201                    #[allow(irrefutable_let_patterns)]
8202                    if let HealthDiagnosticValue::IntValue(ref mut val) = self {
8203                        fidl::decode!(i64, D, val, decoder, _inner_offset, depth)?;
8204                    } else {
8205                        unreachable!()
8206                    }
8207                }
8208                3 => {
8209                    #[allow(irrefutable_let_patterns)]
8210                    if let HealthDiagnosticValue::UintValue(_) = self {
8211                        // Do nothing, read the value into the object
8212                    } else {
8213                        // Initialize `self` to the right variant
8214                        *self = HealthDiagnosticValue::UintValue(fidl::new_empty!(u64, D));
8215                    }
8216                    #[allow(irrefutable_let_patterns)]
8217                    if let HealthDiagnosticValue::UintValue(ref mut val) = self {
8218                        fidl::decode!(u64, D, val, decoder, _inner_offset, depth)?;
8219                    } else {
8220                        unreachable!()
8221                    }
8222                }
8223                4 => {
8224                    #[allow(irrefutable_let_patterns)]
8225                    if let HealthDiagnosticValue::BoolValue(_) = self {
8226                        // Do nothing, read the value into the object
8227                    } else {
8228                        // Initialize `self` to the right variant
8229                        *self = HealthDiagnosticValue::BoolValue(fidl::new_empty!(bool, D));
8230                    }
8231                    #[allow(irrefutable_let_patterns)]
8232                    if let HealthDiagnosticValue::BoolValue(ref mut val) = self {
8233                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
8234                    } else {
8235                        unreachable!()
8236                    }
8237                }
8238                5 => {
8239                    #[allow(irrefutable_let_patterns)]
8240                    if let HealthDiagnosticValue::Timestamp(_) = self {
8241                        // Do nothing, read the value into the object
8242                    } else {
8243                        // Initialize `self` to the right variant
8244                        *self = HealthDiagnosticValue::Timestamp(fidl::new_empty!(
8245                            fidl::BootInstant,
8246                            D
8247                        ));
8248                    }
8249                    #[allow(irrefutable_let_patterns)]
8250                    if let HealthDiagnosticValue::Timestamp(ref mut val) = self {
8251                        fidl::decode!(fidl::BootInstant, D, val, decoder, _inner_offset, depth)?;
8252                    } else {
8253                        unreachable!()
8254                    }
8255                }
8256                #[allow(deprecated)]
8257                ordinal => {
8258                    for _ in 0..num_handles {
8259                        decoder.drop_next_handle()?;
8260                    }
8261                    *self = HealthDiagnosticValue::__SourceBreaking { unknown_ordinal: ordinal };
8262                }
8263            }
8264            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8265                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8266            }
8267            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8268                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8269            }
8270            Ok(())
8271        }
8272    }
8273
8274    impl fidl::encoding::ValueTypeMarker for NodePropertyValue {
8275        type Borrowed<'a> = &'a Self;
8276        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8277            value
8278        }
8279    }
8280
8281    unsafe impl fidl::encoding::TypeMarker for NodePropertyValue {
8282        type Owned = Self;
8283
8284        #[inline(always)]
8285        fn inline_align(_context: fidl::encoding::Context) -> usize {
8286            8
8287        }
8288
8289        #[inline(always)]
8290        fn inline_size(_context: fidl::encoding::Context) -> usize {
8291            16
8292        }
8293    }
8294
8295    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NodePropertyValue, D>
8296        for &NodePropertyValue
8297    {
8298        #[inline]
8299        unsafe fn encode(
8300            self,
8301            encoder: &mut fidl::encoding::Encoder<'_, D>,
8302            offset: usize,
8303            _depth: fidl::encoding::Depth,
8304        ) -> fidl::Result<()> {
8305            encoder.debug_check_bounds::<NodePropertyValue>(offset);
8306            encoder.write_num::<u64>(self.ordinal(), offset);
8307            match self {
8308                NodePropertyValue::IntValue(ref val) => {
8309                    fidl::encoding::encode_in_envelope::<u32, D>(
8310                        <u32 as fidl::encoding::ValueTypeMarker>::borrow(val),
8311                        encoder,
8312                        offset + 8,
8313                        _depth,
8314                    )
8315                }
8316                NodePropertyValue::StringValue(ref val) => fidl::encoding::encode_in_envelope::<
8317                    fidl::encoding::BoundedString<256>,
8318                    D,
8319                >(
8320                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
8321                        val,
8322                    ),
8323                    encoder,
8324                    offset + 8,
8325                    _depth,
8326                ),
8327                NodePropertyValue::BoolValue(ref val) => {
8328                    fidl::encoding::encode_in_envelope::<bool, D>(
8329                        <bool as fidl::encoding::ValueTypeMarker>::borrow(val),
8330                        encoder,
8331                        offset + 8,
8332                        _depth,
8333                    )
8334                }
8335                NodePropertyValue::EnumValue(ref val) => fidl::encoding::encode_in_envelope::<
8336                    fidl::encoding::BoundedString<256>,
8337                    D,
8338                >(
8339                    <fidl::encoding::BoundedString<256> as fidl::encoding::ValueTypeMarker>::borrow(
8340                        val,
8341                    ),
8342                    encoder,
8343                    offset + 8,
8344                    _depth,
8345                ),
8346                NodePropertyValue::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
8347            }
8348        }
8349    }
8350
8351    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NodePropertyValue {
8352        #[inline(always)]
8353        fn new_empty() -> Self {
8354            Self::__SourceBreaking { unknown_ordinal: 0 }
8355        }
8356
8357        #[inline]
8358        unsafe fn decode(
8359            &mut self,
8360            decoder: &mut fidl::encoding::Decoder<'_, D>,
8361            offset: usize,
8362            mut depth: fidl::encoding::Depth,
8363        ) -> fidl::Result<()> {
8364            decoder.debug_check_bounds::<Self>(offset);
8365            #[allow(unused_variables)]
8366            let next_out_of_line = decoder.next_out_of_line();
8367            let handles_before = decoder.remaining_handles();
8368            let (ordinal, inlined, num_bytes, num_handles) =
8369                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8370
8371            let member_inline_size = match ordinal {
8372                1 => <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8373                2 => {
8374                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8375                        decoder.context,
8376                    )
8377                }
8378                3 => <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8379                4 => {
8380                    <fidl::encoding::BoundedString<256> as fidl::encoding::TypeMarker>::inline_size(
8381                        decoder.context,
8382                    )
8383                }
8384                0 => return Err(fidl::Error::UnknownUnionTag),
8385                _ => num_bytes as usize,
8386            };
8387
8388            if inlined != (member_inline_size <= 4) {
8389                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8390            }
8391            let _inner_offset;
8392            if inlined {
8393                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8394                _inner_offset = offset + 8;
8395            } else {
8396                depth.increment()?;
8397                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8398            }
8399            match ordinal {
8400                1 => {
8401                    #[allow(irrefutable_let_patterns)]
8402                    if let NodePropertyValue::IntValue(_) = self {
8403                        // Do nothing, read the value into the object
8404                    } else {
8405                        // Initialize `self` to the right variant
8406                        *self = NodePropertyValue::IntValue(fidl::new_empty!(u32, D));
8407                    }
8408                    #[allow(irrefutable_let_patterns)]
8409                    if let NodePropertyValue::IntValue(ref mut val) = self {
8410                        fidl::decode!(u32, D, val, decoder, _inner_offset, depth)?;
8411                    } else {
8412                        unreachable!()
8413                    }
8414                }
8415                2 => {
8416                    #[allow(irrefutable_let_patterns)]
8417                    if let NodePropertyValue::StringValue(_) = self {
8418                        // Do nothing, read the value into the object
8419                    } else {
8420                        // Initialize `self` to the right variant
8421                        *self = NodePropertyValue::StringValue(fidl::new_empty!(
8422                            fidl::encoding::BoundedString<256>,
8423                            D
8424                        ));
8425                    }
8426                    #[allow(irrefutable_let_patterns)]
8427                    if let NodePropertyValue::StringValue(ref mut val) = self {
8428                        fidl::decode!(
8429                            fidl::encoding::BoundedString<256>,
8430                            D,
8431                            val,
8432                            decoder,
8433                            _inner_offset,
8434                            depth
8435                        )?;
8436                    } else {
8437                        unreachable!()
8438                    }
8439                }
8440                3 => {
8441                    #[allow(irrefutable_let_patterns)]
8442                    if let NodePropertyValue::BoolValue(_) = self {
8443                        // Do nothing, read the value into the object
8444                    } else {
8445                        // Initialize `self` to the right variant
8446                        *self = NodePropertyValue::BoolValue(fidl::new_empty!(bool, D));
8447                    }
8448                    #[allow(irrefutable_let_patterns)]
8449                    if let NodePropertyValue::BoolValue(ref mut val) = self {
8450                        fidl::decode!(bool, D, val, decoder, _inner_offset, depth)?;
8451                    } else {
8452                        unreachable!()
8453                    }
8454                }
8455                4 => {
8456                    #[allow(irrefutable_let_patterns)]
8457                    if let NodePropertyValue::EnumValue(_) = self {
8458                        // Do nothing, read the value into the object
8459                    } else {
8460                        // Initialize `self` to the right variant
8461                        *self = NodePropertyValue::EnumValue(fidl::new_empty!(
8462                            fidl::encoding::BoundedString<256>,
8463                            D
8464                        ));
8465                    }
8466                    #[allow(irrefutable_let_patterns)]
8467                    if let NodePropertyValue::EnumValue(ref mut val) = self {
8468                        fidl::decode!(
8469                            fidl::encoding::BoundedString<256>,
8470                            D,
8471                            val,
8472                            decoder,
8473                            _inner_offset,
8474                            depth
8475                        )?;
8476                    } else {
8477                        unreachable!()
8478                    }
8479                }
8480                #[allow(deprecated)]
8481                ordinal => {
8482                    for _ in 0..num_handles {
8483                        decoder.drop_next_handle()?;
8484                    }
8485                    *self = NodePropertyValue::__SourceBreaking { unknown_ordinal: ordinal };
8486                }
8487            }
8488            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8489                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8490            }
8491            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8492                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8493            }
8494            Ok(())
8495        }
8496    }
8497
8498    impl fidl::encoding::ValueTypeMarker for Offer {
8499        type Borrowed<'a> = &'a Self;
8500        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
8501            value
8502        }
8503    }
8504
8505    unsafe impl fidl::encoding::TypeMarker for Offer {
8506        type Owned = Self;
8507
8508        #[inline(always)]
8509        fn inline_align(_context: fidl::encoding::Context) -> usize {
8510            8
8511        }
8512
8513        #[inline(always)]
8514        fn inline_size(_context: fidl::encoding::Context) -> usize {
8515            16
8516        }
8517    }
8518
8519    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Offer, D> for &Offer {
8520        #[inline]
8521        unsafe fn encode(
8522            self,
8523            encoder: &mut fidl::encoding::Encoder<'_, D>,
8524            offset: usize,
8525            _depth: fidl::encoding::Depth,
8526        ) -> fidl::Result<()> {
8527            encoder.debug_check_bounds::<Offer>(offset);
8528            encoder.write_num::<u64>(self.ordinal(), offset);
8529            match self {
8530            Offer::ZirconTransport(ref val) => {
8531                fidl::encoding::encode_in_envelope::<fidl_fuchsia_component_decl_common::Offer, D>(
8532                    <fidl_fuchsia_component_decl_common::Offer as fidl::encoding::ValueTypeMarker>::borrow(val),
8533                    encoder, offset + 8, _depth
8534                )
8535            }
8536            Offer::DriverTransport(ref val) => {
8537                fidl::encoding::encode_in_envelope::<fidl_fuchsia_component_decl_common::Offer, D>(
8538                    <fidl_fuchsia_component_decl_common::Offer as fidl::encoding::ValueTypeMarker>::borrow(val),
8539                    encoder, offset + 8, _depth
8540                )
8541            }
8542            Offer::DictionaryOffer(ref val) => {
8543                fidl::encoding::encode_in_envelope::<fidl_fuchsia_component_decl_common::Offer, D>(
8544                    <fidl_fuchsia_component_decl_common::Offer as fidl::encoding::ValueTypeMarker>::borrow(val),
8545                    encoder, offset + 8, _depth
8546                )
8547            }
8548            Offer::__SourceBreaking { .. } => Err(fidl::Error::UnknownUnionTag),
8549        }
8550        }
8551    }
8552
8553    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Offer {
8554        #[inline(always)]
8555        fn new_empty() -> Self {
8556            Self::__SourceBreaking { unknown_ordinal: 0 }
8557        }
8558
8559        #[inline]
8560        unsafe fn decode(
8561            &mut self,
8562            decoder: &mut fidl::encoding::Decoder<'_, D>,
8563            offset: usize,
8564            mut depth: fidl::encoding::Depth,
8565        ) -> fidl::Result<()> {
8566            decoder.debug_check_bounds::<Self>(offset);
8567            #[allow(unused_variables)]
8568            let next_out_of_line = decoder.next_out_of_line();
8569            let handles_before = decoder.remaining_handles();
8570            let (ordinal, inlined, num_bytes, num_handles) =
8571                fidl::encoding::decode_union_inline_portion(decoder, offset)?;
8572
8573            let member_inline_size = match ordinal {
8574            1 => <fidl_fuchsia_component_decl_common::Offer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8575            2 => <fidl_fuchsia_component_decl_common::Offer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8576            3 => <fidl_fuchsia_component_decl_common::Offer as fidl::encoding::TypeMarker>::inline_size(decoder.context),
8577            0 => return Err(fidl::Error::UnknownUnionTag),
8578            _ => num_bytes as usize,
8579        };
8580
8581            if inlined != (member_inline_size <= 4) {
8582                return Err(fidl::Error::InvalidInlineBitInEnvelope);
8583            }
8584            let _inner_offset;
8585            if inlined {
8586                decoder.check_inline_envelope_padding(offset + 8, member_inline_size)?;
8587                _inner_offset = offset + 8;
8588            } else {
8589                depth.increment()?;
8590                _inner_offset = decoder.out_of_line_offset(member_inline_size)?;
8591            }
8592            match ordinal {
8593                1 => {
8594                    #[allow(irrefutable_let_patterns)]
8595                    if let Offer::ZirconTransport(_) = self {
8596                        // Do nothing, read the value into the object
8597                    } else {
8598                        // Initialize `self` to the right variant
8599                        *self = Offer::ZirconTransport(fidl::new_empty!(
8600                            fidl_fuchsia_component_decl_common::Offer,
8601                            D
8602                        ));
8603                    }
8604                    #[allow(irrefutable_let_patterns)]
8605                    if let Offer::ZirconTransport(ref mut val) = self {
8606                        fidl::decode!(
8607                            fidl_fuchsia_component_decl_common::Offer,
8608                            D,
8609                            val,
8610                            decoder,
8611                            _inner_offset,
8612                            depth
8613                        )?;
8614                    } else {
8615                        unreachable!()
8616                    }
8617                }
8618                2 => {
8619                    #[allow(irrefutable_let_patterns)]
8620                    if let Offer::DriverTransport(_) = self {
8621                        // Do nothing, read the value into the object
8622                    } else {
8623                        // Initialize `self` to the right variant
8624                        *self = Offer::DriverTransport(fidl::new_empty!(
8625                            fidl_fuchsia_component_decl_common::Offer,
8626                            D
8627                        ));
8628                    }
8629                    #[allow(irrefutable_let_patterns)]
8630                    if let Offer::DriverTransport(ref mut val) = self {
8631                        fidl::decode!(
8632                            fidl_fuchsia_component_decl_common::Offer,
8633                            D,
8634                            val,
8635                            decoder,
8636                            _inner_offset,
8637                            depth
8638                        )?;
8639                    } else {
8640                        unreachable!()
8641                    }
8642                }
8643                3 => {
8644                    #[allow(irrefutable_let_patterns)]
8645                    if let Offer::DictionaryOffer(_) = self {
8646                        // Do nothing, read the value into the object
8647                    } else {
8648                        // Initialize `self` to the right variant
8649                        *self = Offer::DictionaryOffer(fidl::new_empty!(
8650                            fidl_fuchsia_component_decl_common::Offer,
8651                            D
8652                        ));
8653                    }
8654                    #[allow(irrefutable_let_patterns)]
8655                    if let Offer::DictionaryOffer(ref mut val) = self {
8656                        fidl::decode!(
8657                            fidl_fuchsia_component_decl_common::Offer,
8658                            D,
8659                            val,
8660                            decoder,
8661                            _inner_offset,
8662                            depth
8663                        )?;
8664                    } else {
8665                        unreachable!()
8666                    }
8667                }
8668                #[allow(deprecated)]
8669                ordinal => {
8670                    for _ in 0..num_handles {
8671                        decoder.drop_next_handle()?;
8672                    }
8673                    *self = Offer::__SourceBreaking { unknown_ordinal: ordinal };
8674                }
8675            }
8676            if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize) {
8677                return Err(fidl::Error::InvalidNumBytesInEnvelope);
8678            }
8679            if handles_before != decoder.remaining_handles() + (num_handles as usize) {
8680                return Err(fidl::Error::InvalidNumHandlesInEnvelope);
8681            }
8682            Ok(())
8683        }
8684    }
8685}