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