Skip to main content

fidl_fuchsia_virtualization__common/
fidl_fuchsia_virtualization__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
11/// VM to VM communication is not supported, so all guests will be assigned this default guest CID.
12pub const DEFAULT_GUEST_CID: u32 = 3;
13
14/// `HOST_CID` is the reserved context ID (CID) of the host.
15pub const HOST_CID: u32 = 2;
16
17pub const MAX_BLOCK_DEVICES: u8 = 32;
18
19pub const MAX_BLOCK_DEVICE_ID: u8 = 20;
20
21pub const MAX_MEMORY: u8 = 32;
22
23pub const MAX_NET_DEVICES: u8 = 32;
24
25#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
26#[repr(u32)]
27pub enum BlockMode {
28    /// Reads and writes are allowed.
29    ReadWrite = 0,
30    /// Only reads are allowed.
31    ReadOnly = 1,
32    /// Writes are allowed, but are stored in memory, not to disk.
33    VolatileWrite = 2,
34}
35
36impl BlockMode {
37    #[inline]
38    pub fn from_primitive(prim: u32) -> Option<Self> {
39        match prim {
40            0 => Some(Self::ReadWrite),
41            1 => Some(Self::ReadOnly),
42            2 => Some(Self::VolatileWrite),
43            _ => None,
44        }
45    }
46
47    #[inline]
48    pub const fn into_primitive(self) -> u32 {
49        self as u32
50    }
51}
52
53/// The status of the Linux container.
54#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
55#[repr(u32)]
56pub enum ContainerStatus {
57    Transient = 1,
58    LaunchingGuest = 2,
59    StartingVm = 3,
60    Downloading = 4,
61    Extracting = 5,
62    Starting = 6,
63    Ready = 7,
64    Failed = 8,
65}
66
67impl ContainerStatus {
68    #[inline]
69    pub fn from_primitive(prim: u32) -> Option<Self> {
70        match prim {
71            1 => Some(Self::Transient),
72            2 => Some(Self::LaunchingGuest),
73            3 => Some(Self::StartingVm),
74            4 => Some(Self::Downloading),
75            5 => Some(Self::Extracting),
76            6 => Some(Self::Starting),
77            7 => Some(Self::Ready),
78            8 => Some(Self::Failed),
79            _ => None,
80        }
81    }
82
83    #[inline]
84    pub const fn into_primitive(self) -> u32 {
85        self as u32
86    }
87}
88
89#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
90#[repr(u32)]
91pub enum GuestError {
92    /// Catch all VMM error.
93    InternalError = 1,
94    /// A device endpoint was requested via the guest client API, but the device isn't enabled.
95    DeviceNotPresent = 2,
96    /// The config failed VMM validation for reasons such as a missing required field.
97    BadConfig = 3,
98    /// The VMM failed to initialize the guest object, usually due to capability routing issues
99    /// or memory layout problems.
100    GuestInitializationFailure = 4,
101    /// The VMM failed to initialize a device.
102    DeviceInitializationFailure = 5,
103    /// The VMM failed to start a device, usually because the device component returned a failure.
104    DeviceStartFailure = 6,
105    /// Two or more devices have attempted to register overlapping memory ranges.
106    DeviceMemoryOverlap = 7,
107    /// Failed to connect to a required service. Check the routing in the manifest.
108    FailedServiceConnect = 8,
109    /// Failed to add a public service.
110    DuplicatePublicServices = 9,
111    /// General error when loading the guest kernel.
112    KernelLoadFailure = 10,
113    /// Error when starting a VCPU.
114    VcpuStartFailure = 11,
115    /// A VCPU encountered a fatal error while running.
116    VcpuRuntimeFailure = 12,
117    /// The VMM was asked to run before it was created.
118    NotCreated = 13,
119    /// A VMM is already running. The VMM must be stopped and a new VMM must be created before it
120    /// can be run again.
121    AlreadyRunning = 14,
122    /// A running VMM was forced to stop by the VMM controller.
123    ControllerForcedHalt = 15,
124}
125
126impl GuestError {
127    #[inline]
128    pub fn from_primitive(prim: u32) -> Option<Self> {
129        match prim {
130            1 => Some(Self::InternalError),
131            2 => Some(Self::DeviceNotPresent),
132            3 => Some(Self::BadConfig),
133            4 => Some(Self::GuestInitializationFailure),
134            5 => Some(Self::DeviceInitializationFailure),
135            6 => Some(Self::DeviceStartFailure),
136            7 => Some(Self::DeviceMemoryOverlap),
137            8 => Some(Self::FailedServiceConnect),
138            9 => Some(Self::DuplicatePublicServices),
139            10 => Some(Self::KernelLoadFailure),
140            11 => Some(Self::VcpuStartFailure),
141            12 => Some(Self::VcpuRuntimeFailure),
142            13 => Some(Self::NotCreated),
143            14 => Some(Self::AlreadyRunning),
144            15 => Some(Self::ControllerForcedHalt),
145            _ => None,
146        }
147    }
148
149    #[inline]
150    pub const fn into_primitive(self) -> u32 {
151        self as u32
152    }
153}
154
155#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
156#[repr(u32)]
157pub enum GuestManagerError {
158    /// The guest manager failed to parse the configuration from the guest package, or it was
159    /// otherwise invalid.
160    BadConfig = 1,
161    /// The guest is already running. Stop the guest before attempting to launch again.
162    AlreadyRunning = 2,
163    /// Attempted to connect to a non-running guest.
164    NotRunning = 3,
165    /// Failed to start the guest. See VMM component logs for a more detailed reason.
166    StartFailure = 4,
167    /// The guest required allocating some persistant storage but was unable to
168    /// do so.
169    NoStorage = 5,
170}
171
172impl GuestManagerError {
173    #[inline]
174    pub fn from_primitive(prim: u32) -> Option<Self> {
175        match prim {
176            1 => Some(Self::BadConfig),
177            2 => Some(Self::AlreadyRunning),
178            3 => Some(Self::NotRunning),
179            4 => Some(Self::StartFailure),
180            5 => Some(Self::NoStorage),
181            _ => None,
182        }
183    }
184
185    #[inline]
186    pub const fn into_primitive(self) -> u32 {
187        self as u32
188    }
189}
190
191#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
192#[repr(u32)]
193pub enum GuestStatus {
194    /// Initial state when the guest manager is created but before the guest has ever been run.
195    NotStarted = 1,
196    /// A client has instructed the guest manager to begin launching the guest.
197    Starting = 2,
198    /// The guest's dispatch loops are running. This is the expected steady state.
199    Running = 3,
200    /// A client has instructed the guest manager to begin stopping the guest. If a non-zero
201    /// has been provided, the guest manager may attempt to gracefully shutdown the guest.
202    Stopping = 4,
203    /// The guest is no longer running. A stop reason may be present if the guest stopped due to
204    /// an error.
205    Stopped = 5,
206    /// The VMM component terminated unexpectedly. Attempting to launch the guest again will
207    /// restart the component.
208    VmmUnexpectedTermination = 6,
209}
210
211impl GuestStatus {
212    #[inline]
213    pub fn from_primitive(prim: u32) -> Option<Self> {
214        match prim {
215            1 => Some(Self::NotStarted),
216            2 => Some(Self::Starting),
217            3 => Some(Self::Running),
218            4 => Some(Self::Stopping),
219            5 => Some(Self::Stopped),
220            6 => Some(Self::VmmUnexpectedTermination),
221            _ => None,
222        }
223    }
224
225    #[inline]
226    pub const fn into_primitive(self) -> u32 {
227        self as u32
228    }
229}
230
231/// Type of kernel used by a guest.
232#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
233#[repr(u32)]
234pub enum KernelType {
235    Zircon = 0,
236    Linux = 1,
237}
238
239impl KernelType {
240    #[inline]
241    pub fn from_primitive(prim: u32) -> Option<Self> {
242        match prim {
243            0 => Some(Self::Zircon),
244            1 => Some(Self::Linux),
245            _ => None,
246        }
247    }
248
249    #[inline]
250    pub const fn into_primitive(self) -> u32 {
251        self as u32
252    }
253}
254
255#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
256#[repr(C)]
257pub struct BalloonControllerGetBalloonSizeResponse {
258    pub current_num_pages: u32,
259    pub requested_num_pages: u32,
260}
261
262impl fidl::Persistable for BalloonControllerGetBalloonSizeResponse {}
263
264#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
265pub struct BalloonControllerGetMemStatsResponse {
266    pub status: i32,
267    pub mem_stats: Option<Vec<MemStat>>,
268}
269
270impl fidl::Persistable for BalloonControllerGetMemStatsResponse {}
271
272#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
273#[repr(C)]
274pub struct BalloonControllerRequestNumPagesRequest {
275    pub requested_num_pages: u32,
276}
277
278impl fidl::Persistable for BalloonControllerRequestNumPagesRequest {}
279
280#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
281#[repr(C)]
282pub struct HostVsockAcceptorAcceptRequest {
283    pub src_cid: u32,
284    pub src_port: u32,
285    pub port: u32,
286}
287
288impl fidl::Persistable for HostVsockAcceptorAcceptRequest {}
289
290#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
291#[repr(C)]
292pub struct HostVsockEndpointConnectRequest {
293    pub guest_port: u32,
294}
295
296impl fidl::Persistable for HostVsockEndpointConnectRequest {}
297
298#[derive(Clone, Debug, PartialEq)]
299pub struct LinuxManagerOnGuestInfoChangedRequest {
300    pub label: String,
301    pub info: LinuxGuestInfo,
302}
303
304impl fidl::Persistable for LinuxManagerOnGuestInfoChangedRequest {}
305
306#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
307pub struct LinuxManagerStartAndGetLinuxGuestInfoRequest {
308    pub label: String,
309}
310
311impl fidl::Persistable for LinuxManagerStartAndGetLinuxGuestInfoRequest {}
312
313#[derive(Clone, Debug, PartialEq)]
314pub struct LinuxManagerStartAndGetLinuxGuestInfoResponse {
315    pub info: LinuxGuestInfo,
316}
317
318impl fidl::Persistable for LinuxManagerStartAndGetLinuxGuestInfoResponse {}
319
320/// Properties describing a virtio_magma device.
321#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
322#[repr(C)]
323pub struct MagmaDevice {
324    /// The amount of guest-physical address space to allocate for virtio_magma
325    /// buffers.
326    ///
327    /// Default to a 16GiB allocation.
328    pub memory: u64,
329}
330
331impl fidl::Persistable for MagmaDevice {}
332
333#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
334#[repr(C)]
335pub struct MemControllerGetMemSizeResponse {
336    pub block_size: u64,
337    pub region_size: u64,
338    pub usable_region_size: u64,
339    pub plugged_size: u64,
340    pub requested_size: u64,
341}
342
343impl fidl::Persistable for MemControllerGetMemSizeResponse {}
344
345#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
346#[repr(C)]
347pub struct MemControllerRequestSizeRequest {
348    pub requested_size: u64,
349}
350
351impl fidl::Persistable for MemControllerRequestSizeRequest {}
352
353/// Contains a memory statistic for the balloon device.
354#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
355#[repr(C)]
356pub struct MemStat {
357    pub tag: u16,
358    pub val: u64,
359}
360
361impl fidl::Persistable for MemStat {}
362
363/// Properites describing a network device.
364#[derive(Clone, Debug, PartialEq)]
365pub struct NetSpec {
366    /// MAC address for the network device.
367    pub mac_address: fidl_fuchsia_net__common::MacAddress,
368    /// Whether to bridge the network device with the host network device.
369    pub enable_bridge: bool,
370}
371
372impl fidl::Persistable for NetSpec {}
373
374/// An informational only subset of the GuestConfig. If adding new non-handle entries to the
375/// GuestConfig, consider also adding them here.
376#[derive(Clone, Debug, Default, PartialEq)]
377pub struct GuestDescriptor {
378    /// Number of guest VCPUs.
379    pub num_cpus: Option<u8>,
380    /// Guest memory in bytes.
381    pub guest_memory: Option<u64>,
382    /// Whether the guest was started with the given virtual device.
383    /// "3: wayland bool" was removed
384    /// "4: magma bool" was removed
385    pub balloon: Option<bool>,
386    pub console: Option<bool>,
387    pub gpu: Option<bool>,
388    pub rng: Option<bool>,
389    pub vsock: Option<bool>,
390    pub sound: Option<bool>,
391    /// The configs for each net device the guest was started with. If empty, there is no
392    /// virtual net device (and the guest will have no networking).
393    pub networks: Option<Vec<NetSpec>>,
394    pub mem: Option<bool>,
395    #[doc(hidden)]
396    pub __source_breaking: fidl::marker::SourceBreaking,
397}
398
399impl fidl::Persistable for GuestDescriptor {}
400
401#[derive(Clone, Debug, Default, PartialEq)]
402pub struct GuestInfo {
403    /// The current state of the guest.
404    pub guest_status: Option<GuestStatus>,
405    /// Current uptime of the guest.
406    pub uptime: Option<i64>,
407    /// A subset of the config used to start the guest.
408    pub guest_descriptor: Option<GuestDescriptor>,
409    /// Contains the last value reported to the guest manager if stopped due to an error.
410    pub stop_error: Option<GuestError>,
411    /// Possible problems with a running guest flagged by the guest manager. These are not fatal
412    /// errors, and should be actionable by a user.
413    ///
414    /// Note that these strings are for diagnostic purposes only. Consumers should not take any
415    /// action based on specific strings as they are subject to change without warning.
416    pub detected_problems: Option<Vec<String>>,
417    #[doc(hidden)]
418    pub __source_breaking: fidl::marker::SourceBreaking,
419}
420
421impl fidl::Persistable for GuestInfo {}
422
423/// Linux guest information.
424#[derive(Clone, Debug, Default, PartialEq)]
425pub struct LinuxGuestInfo {
426    /// Linux guest CID.
427    pub cid: Option<u32>,
428    /// The current container status.
429    pub container_status: Option<ContainerStatus>,
430    /// Container download in percentage. Download percent is only
431    /// available if container status is DOWNLOADING.
432    pub download_percent: Option<i32>,
433    /// The reason for failure if the container could not be created,
434    /// set if container status is FAILED.
435    pub failure_reason: Option<String>,
436    #[doc(hidden)]
437    pub __source_breaking: fidl::marker::SourceBreaking,
438}
439
440impl fidl::Persistable for LinuxGuestInfo {}
441
442pub mod android_guest_manager_ordinals {
443    pub const LAUNCH: u64 = 0x394a2e29f750323e;
444    pub const FORCE_SHUTDOWN: u64 = 0x3ad9a012982f872d;
445    pub const CONNECT: u64 = 0x4e489076e3bb15b4;
446    pub const GET_INFO: u64 = 0x76892614aea695dc;
447}
448
449pub mod balloon_controller_ordinals {
450    pub const GET_BALLOON_SIZE: u64 = 0x2bb2ebaa6ff64d0b;
451    pub const REQUEST_NUM_PAGES: u64 = 0x55c444d65e1df1e8;
452    pub const GET_MEM_STATS: u64 = 0x676199795cc01142;
453}
454
455pub mod debian_guest_manager_ordinals {
456    pub const LAUNCH: u64 = 0x394a2e29f750323e;
457    pub const FORCE_SHUTDOWN: u64 = 0x3ad9a012982f872d;
458    pub const CONNECT: u64 = 0x4e489076e3bb15b4;
459    pub const GET_INFO: u64 = 0x76892614aea695dc;
460}
461
462pub mod guest_ordinals {
463    pub const GET_CONSOLE: u64 = 0x48cbcecb7793806e;
464    pub const GET_SERIAL: u64 = 0xcdd541a160d7044;
465    pub const GET_HOST_VSOCK_ENDPOINT: u64 = 0x766e96aeb9c28ed1;
466    pub const GET_BALLOON_CONTROLLER: u64 = 0x7b210bff219ac84e;
467    pub const GET_MEM_CONTROLLER: u64 = 0x170b19f4b867a01c;
468}
469
470pub mod guest_lifecycle_ordinals {
471    pub const CREATE: u64 = 0x152719eed416ed41;
472    pub const BIND: u64 = 0x57dd3e245f9598ed;
473    pub const RUN: u64 = 0x2907fef2ac775657;
474    pub const STOP: u64 = 0x27eef9c535ac8eb4;
475}
476
477pub mod guest_manager_ordinals {
478    pub const LAUNCH: u64 = 0x394a2e29f750323e;
479    pub const FORCE_SHUTDOWN: u64 = 0x3ad9a012982f872d;
480    pub const CONNECT: u64 = 0x4e489076e3bb15b4;
481    pub const GET_INFO: u64 = 0x76892614aea695dc;
482}
483
484pub mod host_vsock_acceptor_ordinals {
485    pub const ACCEPT: u64 = 0x6996ed935beaa2d7;
486}
487
488pub mod host_vsock_endpoint_ordinals {
489    pub const LISTEN: u64 = 0xfd88f3b4767f2c7;
490    pub const CONNECT: u64 = 0x4d12e10e946b43e4;
491}
492
493pub mod linux_manager_ordinals {
494    pub const START_AND_GET_LINUX_GUEST_INFO: u64 = 0x11809ced100a2bea;
495    pub const ON_GUEST_INFO_CHANGED: u64 = 0x30a9be4c43d6a2d6;
496    pub const WIPE_DATA: u64 = 0x732c69394548a76a;
497    pub const GRACEFUL_SHUTDOWN: u64 = 0x5dab12b50bc9909d;
498}
499
500pub mod mem_controller_ordinals {
501    pub const GET_MEM_SIZE: u64 = 0x6e9d496f9b66ea56;
502    pub const REQUEST_SIZE: u64 = 0x12f8e2cc21ee8102;
503}
504
505pub mod termina_guest_manager_ordinals {
506    pub const LAUNCH: u64 = 0x394a2e29f750323e;
507    pub const FORCE_SHUTDOWN: u64 = 0x3ad9a012982f872d;
508    pub const CONNECT: u64 = 0x4e489076e3bb15b4;
509    pub const GET_INFO: u64 = 0x76892614aea695dc;
510}
511
512pub mod zircon_guest_manager_ordinals {
513    pub const LAUNCH: u64 = 0x394a2e29f750323e;
514    pub const FORCE_SHUTDOWN: u64 = 0x3ad9a012982f872d;
515    pub const CONNECT: u64 = 0x4e489076e3bb15b4;
516    pub const GET_INFO: u64 = 0x76892614aea695dc;
517}
518
519mod internal {
520    use super::*;
521    unsafe impl fidl::encoding::TypeMarker for BlockMode {
522        type Owned = Self;
523
524        #[inline(always)]
525        fn inline_align(_context: fidl::encoding::Context) -> usize {
526            std::mem::align_of::<u32>()
527        }
528
529        #[inline(always)]
530        fn inline_size(_context: fidl::encoding::Context) -> usize {
531            std::mem::size_of::<u32>()
532        }
533
534        #[inline(always)]
535        fn encode_is_copy() -> bool {
536            true
537        }
538
539        #[inline(always)]
540        fn decode_is_copy() -> bool {
541            false
542        }
543    }
544
545    impl fidl::encoding::ValueTypeMarker for BlockMode {
546        type Borrowed<'a> = Self;
547        #[inline(always)]
548        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
549            *value
550        }
551    }
552
553    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BlockMode {
554        #[inline]
555        unsafe fn encode(
556            self,
557            encoder: &mut fidl::encoding::Encoder<'_, D>,
558            offset: usize,
559            _depth: fidl::encoding::Depth,
560        ) -> fidl::Result<()> {
561            encoder.debug_check_bounds::<Self>(offset);
562            encoder.write_num(self.into_primitive(), offset);
563            Ok(())
564        }
565    }
566
567    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BlockMode {
568        #[inline(always)]
569        fn new_empty() -> Self {
570            Self::ReadWrite
571        }
572
573        #[inline]
574        unsafe fn decode(
575            &mut self,
576            decoder: &mut fidl::encoding::Decoder<'_, D>,
577            offset: usize,
578            _depth: fidl::encoding::Depth,
579        ) -> fidl::Result<()> {
580            decoder.debug_check_bounds::<Self>(offset);
581            let prim = decoder.read_num::<u32>(offset);
582
583            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
584            Ok(())
585        }
586    }
587    unsafe impl fidl::encoding::TypeMarker for ContainerStatus {
588        type Owned = Self;
589
590        #[inline(always)]
591        fn inline_align(_context: fidl::encoding::Context) -> usize {
592            std::mem::align_of::<u32>()
593        }
594
595        #[inline(always)]
596        fn inline_size(_context: fidl::encoding::Context) -> usize {
597            std::mem::size_of::<u32>()
598        }
599
600        #[inline(always)]
601        fn encode_is_copy() -> bool {
602            true
603        }
604
605        #[inline(always)]
606        fn decode_is_copy() -> bool {
607            false
608        }
609    }
610
611    impl fidl::encoding::ValueTypeMarker for ContainerStatus {
612        type Borrowed<'a> = Self;
613        #[inline(always)]
614        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
615            *value
616        }
617    }
618
619    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
620        for ContainerStatus
621    {
622        #[inline]
623        unsafe fn encode(
624            self,
625            encoder: &mut fidl::encoding::Encoder<'_, D>,
626            offset: usize,
627            _depth: fidl::encoding::Depth,
628        ) -> fidl::Result<()> {
629            encoder.debug_check_bounds::<Self>(offset);
630            encoder.write_num(self.into_primitive(), offset);
631            Ok(())
632        }
633    }
634
635    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ContainerStatus {
636        #[inline(always)]
637        fn new_empty() -> Self {
638            Self::Transient
639        }
640
641        #[inline]
642        unsafe fn decode(
643            &mut self,
644            decoder: &mut fidl::encoding::Decoder<'_, D>,
645            offset: usize,
646            _depth: fidl::encoding::Depth,
647        ) -> fidl::Result<()> {
648            decoder.debug_check_bounds::<Self>(offset);
649            let prim = decoder.read_num::<u32>(offset);
650
651            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
652            Ok(())
653        }
654    }
655    unsafe impl fidl::encoding::TypeMarker for GuestError {
656        type Owned = Self;
657
658        #[inline(always)]
659        fn inline_align(_context: fidl::encoding::Context) -> usize {
660            std::mem::align_of::<u32>()
661        }
662
663        #[inline(always)]
664        fn inline_size(_context: fidl::encoding::Context) -> usize {
665            std::mem::size_of::<u32>()
666        }
667
668        #[inline(always)]
669        fn encode_is_copy() -> bool {
670            true
671        }
672
673        #[inline(always)]
674        fn decode_is_copy() -> bool {
675            false
676        }
677    }
678
679    impl fidl::encoding::ValueTypeMarker for GuestError {
680        type Borrowed<'a> = Self;
681        #[inline(always)]
682        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
683            *value
684        }
685    }
686
687    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GuestError {
688        #[inline]
689        unsafe fn encode(
690            self,
691            encoder: &mut fidl::encoding::Encoder<'_, D>,
692            offset: usize,
693            _depth: fidl::encoding::Depth,
694        ) -> fidl::Result<()> {
695            encoder.debug_check_bounds::<Self>(offset);
696            encoder.write_num(self.into_primitive(), offset);
697            Ok(())
698        }
699    }
700
701    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuestError {
702        #[inline(always)]
703        fn new_empty() -> Self {
704            Self::InternalError
705        }
706
707        #[inline]
708        unsafe fn decode(
709            &mut self,
710            decoder: &mut fidl::encoding::Decoder<'_, D>,
711            offset: usize,
712            _depth: fidl::encoding::Depth,
713        ) -> fidl::Result<()> {
714            decoder.debug_check_bounds::<Self>(offset);
715            let prim = decoder.read_num::<u32>(offset);
716
717            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
718            Ok(())
719        }
720    }
721    unsafe impl fidl::encoding::TypeMarker for GuestManagerError {
722        type Owned = Self;
723
724        #[inline(always)]
725        fn inline_align(_context: fidl::encoding::Context) -> usize {
726            std::mem::align_of::<u32>()
727        }
728
729        #[inline(always)]
730        fn inline_size(_context: fidl::encoding::Context) -> usize {
731            std::mem::size_of::<u32>()
732        }
733
734        #[inline(always)]
735        fn encode_is_copy() -> bool {
736            true
737        }
738
739        #[inline(always)]
740        fn decode_is_copy() -> bool {
741            false
742        }
743    }
744
745    impl fidl::encoding::ValueTypeMarker for GuestManagerError {
746        type Borrowed<'a> = Self;
747        #[inline(always)]
748        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
749            *value
750        }
751    }
752
753    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
754        for GuestManagerError
755    {
756        #[inline]
757        unsafe fn encode(
758            self,
759            encoder: &mut fidl::encoding::Encoder<'_, D>,
760            offset: usize,
761            _depth: fidl::encoding::Depth,
762        ) -> fidl::Result<()> {
763            encoder.debug_check_bounds::<Self>(offset);
764            encoder.write_num(self.into_primitive(), offset);
765            Ok(())
766        }
767    }
768
769    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuestManagerError {
770        #[inline(always)]
771        fn new_empty() -> Self {
772            Self::BadConfig
773        }
774
775        #[inline]
776        unsafe fn decode(
777            &mut self,
778            decoder: &mut fidl::encoding::Decoder<'_, D>,
779            offset: usize,
780            _depth: fidl::encoding::Depth,
781        ) -> fidl::Result<()> {
782            decoder.debug_check_bounds::<Self>(offset);
783            let prim = decoder.read_num::<u32>(offset);
784
785            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
786            Ok(())
787        }
788    }
789    unsafe impl fidl::encoding::TypeMarker for GuestStatus {
790        type Owned = Self;
791
792        #[inline(always)]
793        fn inline_align(_context: fidl::encoding::Context) -> usize {
794            std::mem::align_of::<u32>()
795        }
796
797        #[inline(always)]
798        fn inline_size(_context: fidl::encoding::Context) -> usize {
799            std::mem::size_of::<u32>()
800        }
801
802        #[inline(always)]
803        fn encode_is_copy() -> bool {
804            true
805        }
806
807        #[inline(always)]
808        fn decode_is_copy() -> bool {
809            false
810        }
811    }
812
813    impl fidl::encoding::ValueTypeMarker for GuestStatus {
814        type Borrowed<'a> = Self;
815        #[inline(always)]
816        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
817            *value
818        }
819    }
820
821    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for GuestStatus {
822        #[inline]
823        unsafe fn encode(
824            self,
825            encoder: &mut fidl::encoding::Encoder<'_, D>,
826            offset: usize,
827            _depth: fidl::encoding::Depth,
828        ) -> fidl::Result<()> {
829            encoder.debug_check_bounds::<Self>(offset);
830            encoder.write_num(self.into_primitive(), offset);
831            Ok(())
832        }
833    }
834
835    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuestStatus {
836        #[inline(always)]
837        fn new_empty() -> Self {
838            Self::NotStarted
839        }
840
841        #[inline]
842        unsafe fn decode(
843            &mut self,
844            decoder: &mut fidl::encoding::Decoder<'_, D>,
845            offset: usize,
846            _depth: fidl::encoding::Depth,
847        ) -> fidl::Result<()> {
848            decoder.debug_check_bounds::<Self>(offset);
849            let prim = decoder.read_num::<u32>(offset);
850
851            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
852            Ok(())
853        }
854    }
855    unsafe impl fidl::encoding::TypeMarker for KernelType {
856        type Owned = Self;
857
858        #[inline(always)]
859        fn inline_align(_context: fidl::encoding::Context) -> usize {
860            std::mem::align_of::<u32>()
861        }
862
863        #[inline(always)]
864        fn inline_size(_context: fidl::encoding::Context) -> usize {
865            std::mem::size_of::<u32>()
866        }
867
868        #[inline(always)]
869        fn encode_is_copy() -> bool {
870            true
871        }
872
873        #[inline(always)]
874        fn decode_is_copy() -> bool {
875            false
876        }
877    }
878
879    impl fidl::encoding::ValueTypeMarker for KernelType {
880        type Borrowed<'a> = Self;
881        #[inline(always)]
882        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
883            *value
884        }
885    }
886
887    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for KernelType {
888        #[inline]
889        unsafe fn encode(
890            self,
891            encoder: &mut fidl::encoding::Encoder<'_, D>,
892            offset: usize,
893            _depth: fidl::encoding::Depth,
894        ) -> fidl::Result<()> {
895            encoder.debug_check_bounds::<Self>(offset);
896            encoder.write_num(self.into_primitive(), offset);
897            Ok(())
898        }
899    }
900
901    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for KernelType {
902        #[inline(always)]
903        fn new_empty() -> Self {
904            Self::Zircon
905        }
906
907        #[inline]
908        unsafe fn decode(
909            &mut self,
910            decoder: &mut fidl::encoding::Decoder<'_, D>,
911            offset: usize,
912            _depth: fidl::encoding::Depth,
913        ) -> fidl::Result<()> {
914            decoder.debug_check_bounds::<Self>(offset);
915            let prim = decoder.read_num::<u32>(offset);
916
917            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
918            Ok(())
919        }
920    }
921
922    impl fidl::encoding::ValueTypeMarker for BalloonControllerGetBalloonSizeResponse {
923        type Borrowed<'a> = &'a Self;
924        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
925            value
926        }
927    }
928
929    unsafe impl fidl::encoding::TypeMarker for BalloonControllerGetBalloonSizeResponse {
930        type Owned = Self;
931
932        #[inline(always)]
933        fn inline_align(_context: fidl::encoding::Context) -> usize {
934            4
935        }
936
937        #[inline(always)]
938        fn inline_size(_context: fidl::encoding::Context) -> usize {
939            8
940        }
941        #[inline(always)]
942        fn encode_is_copy() -> bool {
943            true
944        }
945
946        #[inline(always)]
947        fn decode_is_copy() -> bool {
948            true
949        }
950    }
951
952    unsafe impl<D: fidl::encoding::ResourceDialect>
953        fidl::encoding::Encode<BalloonControllerGetBalloonSizeResponse, D>
954        for &BalloonControllerGetBalloonSizeResponse
955    {
956        #[inline]
957        unsafe fn encode(
958            self,
959            encoder: &mut fidl::encoding::Encoder<'_, D>,
960            offset: usize,
961            _depth: fidl::encoding::Depth,
962        ) -> fidl::Result<()> {
963            encoder.debug_check_bounds::<BalloonControllerGetBalloonSizeResponse>(offset);
964            unsafe {
965                // Copy the object into the buffer.
966                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
967                (buf_ptr as *mut BalloonControllerGetBalloonSizeResponse).write_unaligned(
968                    (self as *const BalloonControllerGetBalloonSizeResponse).read(),
969                );
970                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
971                // done second because the memcpy will write garbage to these bytes.
972            }
973            Ok(())
974        }
975    }
976    unsafe impl<
977        D: fidl::encoding::ResourceDialect,
978        T0: fidl::encoding::Encode<u32, D>,
979        T1: fidl::encoding::Encode<u32, D>,
980    > fidl::encoding::Encode<BalloonControllerGetBalloonSizeResponse, D> for (T0, T1)
981    {
982        #[inline]
983        unsafe fn encode(
984            self,
985            encoder: &mut fidl::encoding::Encoder<'_, D>,
986            offset: usize,
987            depth: fidl::encoding::Depth,
988        ) -> fidl::Result<()> {
989            encoder.debug_check_bounds::<BalloonControllerGetBalloonSizeResponse>(offset);
990            // Zero out padding regions. There's no need to apply masks
991            // because the unmasked parts will be overwritten by fields.
992            // Write the fields.
993            self.0.encode(encoder, offset + 0, depth)?;
994            self.1.encode(encoder, offset + 4, depth)?;
995            Ok(())
996        }
997    }
998
999    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1000        for BalloonControllerGetBalloonSizeResponse
1001    {
1002        #[inline(always)]
1003        fn new_empty() -> Self {
1004            Self {
1005                current_num_pages: fidl::new_empty!(u32, D),
1006                requested_num_pages: fidl::new_empty!(u32, D),
1007            }
1008        }
1009
1010        #[inline]
1011        unsafe fn decode(
1012            &mut self,
1013            decoder: &mut fidl::encoding::Decoder<'_, D>,
1014            offset: usize,
1015            _depth: fidl::encoding::Depth,
1016        ) -> fidl::Result<()> {
1017            decoder.debug_check_bounds::<Self>(offset);
1018            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1019            // Verify that padding bytes are zero.
1020            // Copy from the buffer into the object.
1021            unsafe {
1022                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1023            }
1024            Ok(())
1025        }
1026    }
1027
1028    impl fidl::encoding::ValueTypeMarker for BalloonControllerGetMemStatsResponse {
1029        type Borrowed<'a> = &'a Self;
1030        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1031            value
1032        }
1033    }
1034
1035    unsafe impl fidl::encoding::TypeMarker for BalloonControllerGetMemStatsResponse {
1036        type Owned = Self;
1037
1038        #[inline(always)]
1039        fn inline_align(_context: fidl::encoding::Context) -> usize {
1040            8
1041        }
1042
1043        #[inline(always)]
1044        fn inline_size(_context: fidl::encoding::Context) -> usize {
1045            24
1046        }
1047    }
1048
1049    unsafe impl<D: fidl::encoding::ResourceDialect>
1050        fidl::encoding::Encode<BalloonControllerGetMemStatsResponse, D>
1051        for &BalloonControllerGetMemStatsResponse
1052    {
1053        #[inline]
1054        unsafe fn encode(
1055            self,
1056            encoder: &mut fidl::encoding::Encoder<'_, D>,
1057            offset: usize,
1058            _depth: fidl::encoding::Depth,
1059        ) -> fidl::Result<()> {
1060            encoder.debug_check_bounds::<BalloonControllerGetMemStatsResponse>(offset);
1061            // Delegate to tuple encoding.
1062            fidl::encoding::Encode::<BalloonControllerGetMemStatsResponse, D>::encode(
1063                (
1064                    <i32 as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
1065                    <fidl::encoding::Optional<fidl::encoding::UnboundedVector<MemStat>> as fidl::encoding::ValueTypeMarker>::borrow(&self.mem_stats),
1066                ),
1067                encoder, offset, _depth
1068            )
1069        }
1070    }
1071    unsafe impl<
1072        D: fidl::encoding::ResourceDialect,
1073        T0: fidl::encoding::Encode<i32, D>,
1074        T1: fidl::encoding::Encode<
1075                fidl::encoding::Optional<fidl::encoding::UnboundedVector<MemStat>>,
1076                D,
1077            >,
1078    > fidl::encoding::Encode<BalloonControllerGetMemStatsResponse, D> for (T0, T1)
1079    {
1080        #[inline]
1081        unsafe fn encode(
1082            self,
1083            encoder: &mut fidl::encoding::Encoder<'_, D>,
1084            offset: usize,
1085            depth: fidl::encoding::Depth,
1086        ) -> fidl::Result<()> {
1087            encoder.debug_check_bounds::<BalloonControllerGetMemStatsResponse>(offset);
1088            // Zero out padding regions. There's no need to apply masks
1089            // because the unmasked parts will be overwritten by fields.
1090            unsafe {
1091                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1092                (ptr as *mut u64).write_unaligned(0);
1093            }
1094            // Write the fields.
1095            self.0.encode(encoder, offset + 0, depth)?;
1096            self.1.encode(encoder, offset + 8, depth)?;
1097            Ok(())
1098        }
1099    }
1100
1101    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1102        for BalloonControllerGetMemStatsResponse
1103    {
1104        #[inline(always)]
1105        fn new_empty() -> Self {
1106            Self {
1107                status: fidl::new_empty!(i32, D),
1108                mem_stats: fidl::new_empty!(
1109                    fidl::encoding::Optional<fidl::encoding::UnboundedVector<MemStat>>,
1110                    D
1111                ),
1112            }
1113        }
1114
1115        #[inline]
1116        unsafe fn decode(
1117            &mut self,
1118            decoder: &mut fidl::encoding::Decoder<'_, D>,
1119            offset: usize,
1120            _depth: fidl::encoding::Depth,
1121        ) -> fidl::Result<()> {
1122            decoder.debug_check_bounds::<Self>(offset);
1123            // Verify that padding bytes are zero.
1124            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1125            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1126            let mask = 0xffffffff00000000u64;
1127            let maskedval = padval & mask;
1128            if maskedval != 0 {
1129                return Err(fidl::Error::NonZeroPadding {
1130                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1131                });
1132            }
1133            fidl::decode!(i32, D, &mut self.status, decoder, offset + 0, _depth)?;
1134            fidl::decode!(
1135                fidl::encoding::Optional<fidl::encoding::UnboundedVector<MemStat>>,
1136                D,
1137                &mut self.mem_stats,
1138                decoder,
1139                offset + 8,
1140                _depth
1141            )?;
1142            Ok(())
1143        }
1144    }
1145
1146    impl fidl::encoding::ValueTypeMarker for BalloonControllerRequestNumPagesRequest {
1147        type Borrowed<'a> = &'a Self;
1148        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1149            value
1150        }
1151    }
1152
1153    unsafe impl fidl::encoding::TypeMarker for BalloonControllerRequestNumPagesRequest {
1154        type Owned = Self;
1155
1156        #[inline(always)]
1157        fn inline_align(_context: fidl::encoding::Context) -> usize {
1158            4
1159        }
1160
1161        #[inline(always)]
1162        fn inline_size(_context: fidl::encoding::Context) -> usize {
1163            4
1164        }
1165        #[inline(always)]
1166        fn encode_is_copy() -> bool {
1167            true
1168        }
1169
1170        #[inline(always)]
1171        fn decode_is_copy() -> bool {
1172            true
1173        }
1174    }
1175
1176    unsafe impl<D: fidl::encoding::ResourceDialect>
1177        fidl::encoding::Encode<BalloonControllerRequestNumPagesRequest, D>
1178        for &BalloonControllerRequestNumPagesRequest
1179    {
1180        #[inline]
1181        unsafe fn encode(
1182            self,
1183            encoder: &mut fidl::encoding::Encoder<'_, D>,
1184            offset: usize,
1185            _depth: fidl::encoding::Depth,
1186        ) -> fidl::Result<()> {
1187            encoder.debug_check_bounds::<BalloonControllerRequestNumPagesRequest>(offset);
1188            unsafe {
1189                // Copy the object into the buffer.
1190                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1191                (buf_ptr as *mut BalloonControllerRequestNumPagesRequest).write_unaligned(
1192                    (self as *const BalloonControllerRequestNumPagesRequest).read(),
1193                );
1194                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1195                // done second because the memcpy will write garbage to these bytes.
1196            }
1197            Ok(())
1198        }
1199    }
1200    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1201        fidl::encoding::Encode<BalloonControllerRequestNumPagesRequest, D> for (T0,)
1202    {
1203        #[inline]
1204        unsafe fn encode(
1205            self,
1206            encoder: &mut fidl::encoding::Encoder<'_, D>,
1207            offset: usize,
1208            depth: fidl::encoding::Depth,
1209        ) -> fidl::Result<()> {
1210            encoder.debug_check_bounds::<BalloonControllerRequestNumPagesRequest>(offset);
1211            // Zero out padding regions. There's no need to apply masks
1212            // because the unmasked parts will be overwritten by fields.
1213            // Write the fields.
1214            self.0.encode(encoder, offset + 0, depth)?;
1215            Ok(())
1216        }
1217    }
1218
1219    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1220        for BalloonControllerRequestNumPagesRequest
1221    {
1222        #[inline(always)]
1223        fn new_empty() -> Self {
1224            Self { requested_num_pages: fidl::new_empty!(u32, D) }
1225        }
1226
1227        #[inline]
1228        unsafe fn decode(
1229            &mut self,
1230            decoder: &mut fidl::encoding::Decoder<'_, D>,
1231            offset: usize,
1232            _depth: fidl::encoding::Depth,
1233        ) -> fidl::Result<()> {
1234            decoder.debug_check_bounds::<Self>(offset);
1235            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1236            // Verify that padding bytes are zero.
1237            // Copy from the buffer into the object.
1238            unsafe {
1239                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1240            }
1241            Ok(())
1242        }
1243    }
1244
1245    impl fidl::encoding::ValueTypeMarker for HostVsockAcceptorAcceptRequest {
1246        type Borrowed<'a> = &'a Self;
1247        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1248            value
1249        }
1250    }
1251
1252    unsafe impl fidl::encoding::TypeMarker for HostVsockAcceptorAcceptRequest {
1253        type Owned = Self;
1254
1255        #[inline(always)]
1256        fn inline_align(_context: fidl::encoding::Context) -> usize {
1257            4
1258        }
1259
1260        #[inline(always)]
1261        fn inline_size(_context: fidl::encoding::Context) -> usize {
1262            12
1263        }
1264        #[inline(always)]
1265        fn encode_is_copy() -> bool {
1266            true
1267        }
1268
1269        #[inline(always)]
1270        fn decode_is_copy() -> bool {
1271            true
1272        }
1273    }
1274
1275    unsafe impl<D: fidl::encoding::ResourceDialect>
1276        fidl::encoding::Encode<HostVsockAcceptorAcceptRequest, D>
1277        for &HostVsockAcceptorAcceptRequest
1278    {
1279        #[inline]
1280        unsafe fn encode(
1281            self,
1282            encoder: &mut fidl::encoding::Encoder<'_, D>,
1283            offset: usize,
1284            _depth: fidl::encoding::Depth,
1285        ) -> fidl::Result<()> {
1286            encoder.debug_check_bounds::<HostVsockAcceptorAcceptRequest>(offset);
1287            unsafe {
1288                // Copy the object into the buffer.
1289                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1290                (buf_ptr as *mut HostVsockAcceptorAcceptRequest)
1291                    .write_unaligned((self as *const HostVsockAcceptorAcceptRequest).read());
1292                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1293                // done second because the memcpy will write garbage to these bytes.
1294            }
1295            Ok(())
1296        }
1297    }
1298    unsafe impl<
1299        D: fidl::encoding::ResourceDialect,
1300        T0: fidl::encoding::Encode<u32, D>,
1301        T1: fidl::encoding::Encode<u32, D>,
1302        T2: fidl::encoding::Encode<u32, D>,
1303    > fidl::encoding::Encode<HostVsockAcceptorAcceptRequest, D> for (T0, T1, T2)
1304    {
1305        #[inline]
1306        unsafe fn encode(
1307            self,
1308            encoder: &mut fidl::encoding::Encoder<'_, D>,
1309            offset: usize,
1310            depth: fidl::encoding::Depth,
1311        ) -> fidl::Result<()> {
1312            encoder.debug_check_bounds::<HostVsockAcceptorAcceptRequest>(offset);
1313            // Zero out padding regions. There's no need to apply masks
1314            // because the unmasked parts will be overwritten by fields.
1315            // Write the fields.
1316            self.0.encode(encoder, offset + 0, depth)?;
1317            self.1.encode(encoder, offset + 4, depth)?;
1318            self.2.encode(encoder, offset + 8, depth)?;
1319            Ok(())
1320        }
1321    }
1322
1323    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1324        for HostVsockAcceptorAcceptRequest
1325    {
1326        #[inline(always)]
1327        fn new_empty() -> Self {
1328            Self {
1329                src_cid: fidl::new_empty!(u32, D),
1330                src_port: fidl::new_empty!(u32, D),
1331                port: fidl::new_empty!(u32, D),
1332            }
1333        }
1334
1335        #[inline]
1336        unsafe fn decode(
1337            &mut self,
1338            decoder: &mut fidl::encoding::Decoder<'_, D>,
1339            offset: usize,
1340            _depth: fidl::encoding::Depth,
1341        ) -> fidl::Result<()> {
1342            decoder.debug_check_bounds::<Self>(offset);
1343            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1344            // Verify that padding bytes are zero.
1345            // Copy from the buffer into the object.
1346            unsafe {
1347                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
1348            }
1349            Ok(())
1350        }
1351    }
1352
1353    impl fidl::encoding::ValueTypeMarker for HostVsockEndpointConnectRequest {
1354        type Borrowed<'a> = &'a Self;
1355        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1356            value
1357        }
1358    }
1359
1360    unsafe impl fidl::encoding::TypeMarker for HostVsockEndpointConnectRequest {
1361        type Owned = Self;
1362
1363        #[inline(always)]
1364        fn inline_align(_context: fidl::encoding::Context) -> usize {
1365            4
1366        }
1367
1368        #[inline(always)]
1369        fn inline_size(_context: fidl::encoding::Context) -> usize {
1370            4
1371        }
1372        #[inline(always)]
1373        fn encode_is_copy() -> bool {
1374            true
1375        }
1376
1377        #[inline(always)]
1378        fn decode_is_copy() -> bool {
1379            true
1380        }
1381    }
1382
1383    unsafe impl<D: fidl::encoding::ResourceDialect>
1384        fidl::encoding::Encode<HostVsockEndpointConnectRequest, D>
1385        for &HostVsockEndpointConnectRequest
1386    {
1387        #[inline]
1388        unsafe fn encode(
1389            self,
1390            encoder: &mut fidl::encoding::Encoder<'_, D>,
1391            offset: usize,
1392            _depth: fidl::encoding::Depth,
1393        ) -> fidl::Result<()> {
1394            encoder.debug_check_bounds::<HostVsockEndpointConnectRequest>(offset);
1395            unsafe {
1396                // Copy the object into the buffer.
1397                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1398                (buf_ptr as *mut HostVsockEndpointConnectRequest)
1399                    .write_unaligned((self as *const HostVsockEndpointConnectRequest).read());
1400                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1401                // done second because the memcpy will write garbage to these bytes.
1402            }
1403            Ok(())
1404        }
1405    }
1406    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
1407        fidl::encoding::Encode<HostVsockEndpointConnectRequest, D> for (T0,)
1408    {
1409        #[inline]
1410        unsafe fn encode(
1411            self,
1412            encoder: &mut fidl::encoding::Encoder<'_, D>,
1413            offset: usize,
1414            depth: fidl::encoding::Depth,
1415        ) -> fidl::Result<()> {
1416            encoder.debug_check_bounds::<HostVsockEndpointConnectRequest>(offset);
1417            // Zero out padding regions. There's no need to apply masks
1418            // because the unmasked parts will be overwritten by fields.
1419            // Write the fields.
1420            self.0.encode(encoder, offset + 0, depth)?;
1421            Ok(())
1422        }
1423    }
1424
1425    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1426        for HostVsockEndpointConnectRequest
1427    {
1428        #[inline(always)]
1429        fn new_empty() -> Self {
1430            Self { guest_port: fidl::new_empty!(u32, D) }
1431        }
1432
1433        #[inline]
1434        unsafe fn decode(
1435            &mut self,
1436            decoder: &mut fidl::encoding::Decoder<'_, D>,
1437            offset: usize,
1438            _depth: fidl::encoding::Depth,
1439        ) -> fidl::Result<()> {
1440            decoder.debug_check_bounds::<Self>(offset);
1441            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1442            // Verify that padding bytes are zero.
1443            // Copy from the buffer into the object.
1444            unsafe {
1445                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
1446            }
1447            Ok(())
1448        }
1449    }
1450
1451    impl fidl::encoding::ValueTypeMarker for LinuxManagerOnGuestInfoChangedRequest {
1452        type Borrowed<'a> = &'a Self;
1453        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1454            value
1455        }
1456    }
1457
1458    unsafe impl fidl::encoding::TypeMarker for LinuxManagerOnGuestInfoChangedRequest {
1459        type Owned = Self;
1460
1461        #[inline(always)]
1462        fn inline_align(_context: fidl::encoding::Context) -> usize {
1463            8
1464        }
1465
1466        #[inline(always)]
1467        fn inline_size(_context: fidl::encoding::Context) -> usize {
1468            32
1469        }
1470    }
1471
1472    unsafe impl<D: fidl::encoding::ResourceDialect>
1473        fidl::encoding::Encode<LinuxManagerOnGuestInfoChangedRequest, D>
1474        for &LinuxManagerOnGuestInfoChangedRequest
1475    {
1476        #[inline]
1477        unsafe fn encode(
1478            self,
1479            encoder: &mut fidl::encoding::Encoder<'_, D>,
1480            offset: usize,
1481            _depth: fidl::encoding::Depth,
1482        ) -> fidl::Result<()> {
1483            encoder.debug_check_bounds::<LinuxManagerOnGuestInfoChangedRequest>(offset);
1484            // Delegate to tuple encoding.
1485            fidl::encoding::Encode::<LinuxManagerOnGuestInfoChangedRequest, D>::encode(
1486                (
1487                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
1488                        &self.label,
1489                    ),
1490                    <LinuxGuestInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),
1491                ),
1492                encoder,
1493                offset,
1494                _depth,
1495            )
1496        }
1497    }
1498    unsafe impl<
1499        D: fidl::encoding::ResourceDialect,
1500        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
1501        T1: fidl::encoding::Encode<LinuxGuestInfo, D>,
1502    > fidl::encoding::Encode<LinuxManagerOnGuestInfoChangedRequest, D> for (T0, T1)
1503    {
1504        #[inline]
1505        unsafe fn encode(
1506            self,
1507            encoder: &mut fidl::encoding::Encoder<'_, D>,
1508            offset: usize,
1509            depth: fidl::encoding::Depth,
1510        ) -> fidl::Result<()> {
1511            encoder.debug_check_bounds::<LinuxManagerOnGuestInfoChangedRequest>(offset);
1512            // Zero out padding regions. There's no need to apply masks
1513            // because the unmasked parts will be overwritten by fields.
1514            // Write the fields.
1515            self.0.encode(encoder, offset + 0, depth)?;
1516            self.1.encode(encoder, offset + 16, depth)?;
1517            Ok(())
1518        }
1519    }
1520
1521    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1522        for LinuxManagerOnGuestInfoChangedRequest
1523    {
1524        #[inline(always)]
1525        fn new_empty() -> Self {
1526            Self {
1527                label: fidl::new_empty!(fidl::encoding::UnboundedString, D),
1528                info: fidl::new_empty!(LinuxGuestInfo, D),
1529            }
1530        }
1531
1532        #[inline]
1533        unsafe fn decode(
1534            &mut self,
1535            decoder: &mut fidl::encoding::Decoder<'_, D>,
1536            offset: usize,
1537            _depth: fidl::encoding::Depth,
1538        ) -> fidl::Result<()> {
1539            decoder.debug_check_bounds::<Self>(offset);
1540            // Verify that padding bytes are zero.
1541            fidl::decode!(
1542                fidl::encoding::UnboundedString,
1543                D,
1544                &mut self.label,
1545                decoder,
1546                offset + 0,
1547                _depth
1548            )?;
1549            fidl::decode!(LinuxGuestInfo, D, &mut self.info, decoder, offset + 16, _depth)?;
1550            Ok(())
1551        }
1552    }
1553
1554    impl fidl::encoding::ValueTypeMarker for LinuxManagerStartAndGetLinuxGuestInfoRequest {
1555        type Borrowed<'a> = &'a Self;
1556        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1557            value
1558        }
1559    }
1560
1561    unsafe impl fidl::encoding::TypeMarker for LinuxManagerStartAndGetLinuxGuestInfoRequest {
1562        type Owned = Self;
1563
1564        #[inline(always)]
1565        fn inline_align(_context: fidl::encoding::Context) -> usize {
1566            8
1567        }
1568
1569        #[inline(always)]
1570        fn inline_size(_context: fidl::encoding::Context) -> usize {
1571            16
1572        }
1573    }
1574
1575    unsafe impl<D: fidl::encoding::ResourceDialect>
1576        fidl::encoding::Encode<LinuxManagerStartAndGetLinuxGuestInfoRequest, D>
1577        for &LinuxManagerStartAndGetLinuxGuestInfoRequest
1578    {
1579        #[inline]
1580        unsafe fn encode(
1581            self,
1582            encoder: &mut fidl::encoding::Encoder<'_, D>,
1583            offset: usize,
1584            _depth: fidl::encoding::Depth,
1585        ) -> fidl::Result<()> {
1586            encoder.debug_check_bounds::<LinuxManagerStartAndGetLinuxGuestInfoRequest>(offset);
1587            // Delegate to tuple encoding.
1588            fidl::encoding::Encode::<LinuxManagerStartAndGetLinuxGuestInfoRequest, D>::encode(
1589                (<fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow(
1590                    &self.label,
1591                ),),
1592                encoder,
1593                offset,
1594                _depth,
1595            )
1596        }
1597    }
1598    unsafe impl<
1599        D: fidl::encoding::ResourceDialect,
1600        T0: fidl::encoding::Encode<fidl::encoding::UnboundedString, D>,
1601    > fidl::encoding::Encode<LinuxManagerStartAndGetLinuxGuestInfoRequest, D> for (T0,)
1602    {
1603        #[inline]
1604        unsafe fn encode(
1605            self,
1606            encoder: &mut fidl::encoding::Encoder<'_, D>,
1607            offset: usize,
1608            depth: fidl::encoding::Depth,
1609        ) -> fidl::Result<()> {
1610            encoder.debug_check_bounds::<LinuxManagerStartAndGetLinuxGuestInfoRequest>(offset);
1611            // Zero out padding regions. There's no need to apply masks
1612            // because the unmasked parts will be overwritten by fields.
1613            // Write the fields.
1614            self.0.encode(encoder, offset + 0, depth)?;
1615            Ok(())
1616        }
1617    }
1618
1619    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1620        for LinuxManagerStartAndGetLinuxGuestInfoRequest
1621    {
1622        #[inline(always)]
1623        fn new_empty() -> Self {
1624            Self { label: fidl::new_empty!(fidl::encoding::UnboundedString, D) }
1625        }
1626
1627        #[inline]
1628        unsafe fn decode(
1629            &mut self,
1630            decoder: &mut fidl::encoding::Decoder<'_, D>,
1631            offset: usize,
1632            _depth: fidl::encoding::Depth,
1633        ) -> fidl::Result<()> {
1634            decoder.debug_check_bounds::<Self>(offset);
1635            // Verify that padding bytes are zero.
1636            fidl::decode!(
1637                fidl::encoding::UnboundedString,
1638                D,
1639                &mut self.label,
1640                decoder,
1641                offset + 0,
1642                _depth
1643            )?;
1644            Ok(())
1645        }
1646    }
1647
1648    impl fidl::encoding::ValueTypeMarker for LinuxManagerStartAndGetLinuxGuestInfoResponse {
1649        type Borrowed<'a> = &'a Self;
1650        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1651            value
1652        }
1653    }
1654
1655    unsafe impl fidl::encoding::TypeMarker for LinuxManagerStartAndGetLinuxGuestInfoResponse {
1656        type Owned = Self;
1657
1658        #[inline(always)]
1659        fn inline_align(_context: fidl::encoding::Context) -> usize {
1660            8
1661        }
1662
1663        #[inline(always)]
1664        fn inline_size(_context: fidl::encoding::Context) -> usize {
1665            16
1666        }
1667    }
1668
1669    unsafe impl<D: fidl::encoding::ResourceDialect>
1670        fidl::encoding::Encode<LinuxManagerStartAndGetLinuxGuestInfoResponse, D>
1671        for &LinuxManagerStartAndGetLinuxGuestInfoResponse
1672    {
1673        #[inline]
1674        unsafe fn encode(
1675            self,
1676            encoder: &mut fidl::encoding::Encoder<'_, D>,
1677            offset: usize,
1678            _depth: fidl::encoding::Depth,
1679        ) -> fidl::Result<()> {
1680            encoder.debug_check_bounds::<LinuxManagerStartAndGetLinuxGuestInfoResponse>(offset);
1681            // Delegate to tuple encoding.
1682            fidl::encoding::Encode::<LinuxManagerStartAndGetLinuxGuestInfoResponse, D>::encode(
1683                (<LinuxGuestInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
1684                encoder,
1685                offset,
1686                _depth,
1687            )
1688        }
1689    }
1690    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<LinuxGuestInfo, D>>
1691        fidl::encoding::Encode<LinuxManagerStartAndGetLinuxGuestInfoResponse, D> for (T0,)
1692    {
1693        #[inline]
1694        unsafe fn encode(
1695            self,
1696            encoder: &mut fidl::encoding::Encoder<'_, D>,
1697            offset: usize,
1698            depth: fidl::encoding::Depth,
1699        ) -> fidl::Result<()> {
1700            encoder.debug_check_bounds::<LinuxManagerStartAndGetLinuxGuestInfoResponse>(offset);
1701            // Zero out padding regions. There's no need to apply masks
1702            // because the unmasked parts will be overwritten by fields.
1703            // Write the fields.
1704            self.0.encode(encoder, offset + 0, depth)?;
1705            Ok(())
1706        }
1707    }
1708
1709    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1710        for LinuxManagerStartAndGetLinuxGuestInfoResponse
1711    {
1712        #[inline(always)]
1713        fn new_empty() -> Self {
1714            Self { info: fidl::new_empty!(LinuxGuestInfo, D) }
1715        }
1716
1717        #[inline]
1718        unsafe fn decode(
1719            &mut self,
1720            decoder: &mut fidl::encoding::Decoder<'_, D>,
1721            offset: usize,
1722            _depth: fidl::encoding::Depth,
1723        ) -> fidl::Result<()> {
1724            decoder.debug_check_bounds::<Self>(offset);
1725            // Verify that padding bytes are zero.
1726            fidl::decode!(LinuxGuestInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
1727            Ok(())
1728        }
1729    }
1730
1731    impl fidl::encoding::ValueTypeMarker for MagmaDevice {
1732        type Borrowed<'a> = &'a Self;
1733        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1734            value
1735        }
1736    }
1737
1738    unsafe impl fidl::encoding::TypeMarker for MagmaDevice {
1739        type Owned = Self;
1740
1741        #[inline(always)]
1742        fn inline_align(_context: fidl::encoding::Context) -> usize {
1743            8
1744        }
1745
1746        #[inline(always)]
1747        fn inline_size(_context: fidl::encoding::Context) -> usize {
1748            8
1749        }
1750        #[inline(always)]
1751        fn encode_is_copy() -> bool {
1752            true
1753        }
1754
1755        #[inline(always)]
1756        fn decode_is_copy() -> bool {
1757            true
1758        }
1759    }
1760
1761    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MagmaDevice, D>
1762        for &MagmaDevice
1763    {
1764        #[inline]
1765        unsafe fn encode(
1766            self,
1767            encoder: &mut fidl::encoding::Encoder<'_, D>,
1768            offset: usize,
1769            _depth: fidl::encoding::Depth,
1770        ) -> fidl::Result<()> {
1771            encoder.debug_check_bounds::<MagmaDevice>(offset);
1772            unsafe {
1773                // Copy the object into the buffer.
1774                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1775                (buf_ptr as *mut MagmaDevice).write_unaligned((self as *const MagmaDevice).read());
1776                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1777                // done second because the memcpy will write garbage to these bytes.
1778            }
1779            Ok(())
1780        }
1781    }
1782    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
1783        fidl::encoding::Encode<MagmaDevice, D> for (T0,)
1784    {
1785        #[inline]
1786        unsafe fn encode(
1787            self,
1788            encoder: &mut fidl::encoding::Encoder<'_, D>,
1789            offset: usize,
1790            depth: fidl::encoding::Depth,
1791        ) -> fidl::Result<()> {
1792            encoder.debug_check_bounds::<MagmaDevice>(offset);
1793            // Zero out padding regions. There's no need to apply masks
1794            // because the unmasked parts will be overwritten by fields.
1795            // Write the fields.
1796            self.0.encode(encoder, offset + 0, depth)?;
1797            Ok(())
1798        }
1799    }
1800
1801    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MagmaDevice {
1802        #[inline(always)]
1803        fn new_empty() -> Self {
1804            Self { memory: fidl::new_empty!(u64, D) }
1805        }
1806
1807        #[inline]
1808        unsafe fn decode(
1809            &mut self,
1810            decoder: &mut fidl::encoding::Decoder<'_, D>,
1811            offset: usize,
1812            _depth: fidl::encoding::Depth,
1813        ) -> fidl::Result<()> {
1814            decoder.debug_check_bounds::<Self>(offset);
1815            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1816            // Verify that padding bytes are zero.
1817            // Copy from the buffer into the object.
1818            unsafe {
1819                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1820            }
1821            Ok(())
1822        }
1823    }
1824
1825    impl fidl::encoding::ValueTypeMarker for MemControllerGetMemSizeResponse {
1826        type Borrowed<'a> = &'a Self;
1827        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1828            value
1829        }
1830    }
1831
1832    unsafe impl fidl::encoding::TypeMarker for MemControllerGetMemSizeResponse {
1833        type Owned = Self;
1834
1835        #[inline(always)]
1836        fn inline_align(_context: fidl::encoding::Context) -> usize {
1837            8
1838        }
1839
1840        #[inline(always)]
1841        fn inline_size(_context: fidl::encoding::Context) -> usize {
1842            40
1843        }
1844        #[inline(always)]
1845        fn encode_is_copy() -> bool {
1846            true
1847        }
1848
1849        #[inline(always)]
1850        fn decode_is_copy() -> bool {
1851            true
1852        }
1853    }
1854
1855    unsafe impl<D: fidl::encoding::ResourceDialect>
1856        fidl::encoding::Encode<MemControllerGetMemSizeResponse, D>
1857        for &MemControllerGetMemSizeResponse
1858    {
1859        #[inline]
1860        unsafe fn encode(
1861            self,
1862            encoder: &mut fidl::encoding::Encoder<'_, D>,
1863            offset: usize,
1864            _depth: fidl::encoding::Depth,
1865        ) -> fidl::Result<()> {
1866            encoder.debug_check_bounds::<MemControllerGetMemSizeResponse>(offset);
1867            unsafe {
1868                // Copy the object into the buffer.
1869                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1870                (buf_ptr as *mut MemControllerGetMemSizeResponse)
1871                    .write_unaligned((self as *const MemControllerGetMemSizeResponse).read());
1872                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1873                // done second because the memcpy will write garbage to these bytes.
1874            }
1875            Ok(())
1876        }
1877    }
1878    unsafe impl<
1879        D: fidl::encoding::ResourceDialect,
1880        T0: fidl::encoding::Encode<u64, D>,
1881        T1: fidl::encoding::Encode<u64, D>,
1882        T2: fidl::encoding::Encode<u64, D>,
1883        T3: fidl::encoding::Encode<u64, D>,
1884        T4: fidl::encoding::Encode<u64, D>,
1885    > fidl::encoding::Encode<MemControllerGetMemSizeResponse, D> for (T0, T1, T2, T3, T4)
1886    {
1887        #[inline]
1888        unsafe fn encode(
1889            self,
1890            encoder: &mut fidl::encoding::Encoder<'_, D>,
1891            offset: usize,
1892            depth: fidl::encoding::Depth,
1893        ) -> fidl::Result<()> {
1894            encoder.debug_check_bounds::<MemControllerGetMemSizeResponse>(offset);
1895            // Zero out padding regions. There's no need to apply masks
1896            // because the unmasked parts will be overwritten by fields.
1897            // Write the fields.
1898            self.0.encode(encoder, offset + 0, depth)?;
1899            self.1.encode(encoder, offset + 8, depth)?;
1900            self.2.encode(encoder, offset + 16, depth)?;
1901            self.3.encode(encoder, offset + 24, depth)?;
1902            self.4.encode(encoder, offset + 32, depth)?;
1903            Ok(())
1904        }
1905    }
1906
1907    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1908        for MemControllerGetMemSizeResponse
1909    {
1910        #[inline(always)]
1911        fn new_empty() -> Self {
1912            Self {
1913                block_size: fidl::new_empty!(u64, D),
1914                region_size: fidl::new_empty!(u64, D),
1915                usable_region_size: fidl::new_empty!(u64, D),
1916                plugged_size: fidl::new_empty!(u64, D),
1917                requested_size: fidl::new_empty!(u64, D),
1918            }
1919        }
1920
1921        #[inline]
1922        unsafe fn decode(
1923            &mut self,
1924            decoder: &mut fidl::encoding::Decoder<'_, D>,
1925            offset: usize,
1926            _depth: fidl::encoding::Depth,
1927        ) -> fidl::Result<()> {
1928            decoder.debug_check_bounds::<Self>(offset);
1929            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1930            // Verify that padding bytes are zero.
1931            // Copy from the buffer into the object.
1932            unsafe {
1933                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 40);
1934            }
1935            Ok(())
1936        }
1937    }
1938
1939    impl fidl::encoding::ValueTypeMarker for MemControllerRequestSizeRequest {
1940        type Borrowed<'a> = &'a Self;
1941        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1942            value
1943        }
1944    }
1945
1946    unsafe impl fidl::encoding::TypeMarker for MemControllerRequestSizeRequest {
1947        type Owned = Self;
1948
1949        #[inline(always)]
1950        fn inline_align(_context: fidl::encoding::Context) -> usize {
1951            8
1952        }
1953
1954        #[inline(always)]
1955        fn inline_size(_context: fidl::encoding::Context) -> usize {
1956            8
1957        }
1958        #[inline(always)]
1959        fn encode_is_copy() -> bool {
1960            true
1961        }
1962
1963        #[inline(always)]
1964        fn decode_is_copy() -> bool {
1965            true
1966        }
1967    }
1968
1969    unsafe impl<D: fidl::encoding::ResourceDialect>
1970        fidl::encoding::Encode<MemControllerRequestSizeRequest, D>
1971        for &MemControllerRequestSizeRequest
1972    {
1973        #[inline]
1974        unsafe fn encode(
1975            self,
1976            encoder: &mut fidl::encoding::Encoder<'_, D>,
1977            offset: usize,
1978            _depth: fidl::encoding::Depth,
1979        ) -> fidl::Result<()> {
1980            encoder.debug_check_bounds::<MemControllerRequestSizeRequest>(offset);
1981            unsafe {
1982                // Copy the object into the buffer.
1983                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1984                (buf_ptr as *mut MemControllerRequestSizeRequest)
1985                    .write_unaligned((self as *const MemControllerRequestSizeRequest).read());
1986                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1987                // done second because the memcpy will write garbage to these bytes.
1988            }
1989            Ok(())
1990        }
1991    }
1992    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
1993        fidl::encoding::Encode<MemControllerRequestSizeRequest, D> for (T0,)
1994    {
1995        #[inline]
1996        unsafe fn encode(
1997            self,
1998            encoder: &mut fidl::encoding::Encoder<'_, D>,
1999            offset: usize,
2000            depth: fidl::encoding::Depth,
2001        ) -> fidl::Result<()> {
2002            encoder.debug_check_bounds::<MemControllerRequestSizeRequest>(offset);
2003            // Zero out padding regions. There's no need to apply masks
2004            // because the unmasked parts will be overwritten by fields.
2005            // Write the fields.
2006            self.0.encode(encoder, offset + 0, depth)?;
2007            Ok(())
2008        }
2009    }
2010
2011    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2012        for MemControllerRequestSizeRequest
2013    {
2014        #[inline(always)]
2015        fn new_empty() -> Self {
2016            Self { requested_size: fidl::new_empty!(u64, D) }
2017        }
2018
2019        #[inline]
2020        unsafe fn decode(
2021            &mut self,
2022            decoder: &mut fidl::encoding::Decoder<'_, D>,
2023            offset: usize,
2024            _depth: fidl::encoding::Depth,
2025        ) -> fidl::Result<()> {
2026            decoder.debug_check_bounds::<Self>(offset);
2027            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2028            // Verify that padding bytes are zero.
2029            // Copy from the buffer into the object.
2030            unsafe {
2031                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
2032            }
2033            Ok(())
2034        }
2035    }
2036
2037    impl fidl::encoding::ValueTypeMarker for MemStat {
2038        type Borrowed<'a> = &'a Self;
2039        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2040            value
2041        }
2042    }
2043
2044    unsafe impl fidl::encoding::TypeMarker for MemStat {
2045        type Owned = Self;
2046
2047        #[inline(always)]
2048        fn inline_align(_context: fidl::encoding::Context) -> usize {
2049            8
2050        }
2051
2052        #[inline(always)]
2053        fn inline_size(_context: fidl::encoding::Context) -> usize {
2054            16
2055        }
2056    }
2057
2058    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MemStat, D> for &MemStat {
2059        #[inline]
2060        unsafe fn encode(
2061            self,
2062            encoder: &mut fidl::encoding::Encoder<'_, D>,
2063            offset: usize,
2064            _depth: fidl::encoding::Depth,
2065        ) -> fidl::Result<()> {
2066            encoder.debug_check_bounds::<MemStat>(offset);
2067            unsafe {
2068                // Copy the object into the buffer.
2069                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2070                (buf_ptr as *mut MemStat).write_unaligned((self as *const MemStat).read());
2071                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2072                // done second because the memcpy will write garbage to these bytes.
2073                let padding_ptr = buf_ptr.offset(0) as *mut u64;
2074                let padding_mask = 0xffffffffffff0000u64;
2075                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2076            }
2077            Ok(())
2078        }
2079    }
2080    unsafe impl<
2081        D: fidl::encoding::ResourceDialect,
2082        T0: fidl::encoding::Encode<u16, D>,
2083        T1: fidl::encoding::Encode<u64, D>,
2084    > fidl::encoding::Encode<MemStat, D> for (T0, T1)
2085    {
2086        #[inline]
2087        unsafe fn encode(
2088            self,
2089            encoder: &mut fidl::encoding::Encoder<'_, D>,
2090            offset: usize,
2091            depth: fidl::encoding::Depth,
2092        ) -> fidl::Result<()> {
2093            encoder.debug_check_bounds::<MemStat>(offset);
2094            // Zero out padding regions. There's no need to apply masks
2095            // because the unmasked parts will be overwritten by fields.
2096            unsafe {
2097                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2098                (ptr as *mut u64).write_unaligned(0);
2099            }
2100            // Write the fields.
2101            self.0.encode(encoder, offset + 0, depth)?;
2102            self.1.encode(encoder, offset + 8, depth)?;
2103            Ok(())
2104        }
2105    }
2106
2107    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MemStat {
2108        #[inline(always)]
2109        fn new_empty() -> Self {
2110            Self { tag: fidl::new_empty!(u16, D), val: fidl::new_empty!(u64, D) }
2111        }
2112
2113        #[inline]
2114        unsafe fn decode(
2115            &mut self,
2116            decoder: &mut fidl::encoding::Decoder<'_, D>,
2117            offset: usize,
2118            _depth: fidl::encoding::Depth,
2119        ) -> fidl::Result<()> {
2120            decoder.debug_check_bounds::<Self>(offset);
2121            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2122            // Verify that padding bytes are zero.
2123            let ptr = unsafe { buf_ptr.offset(0) };
2124            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2125            let mask = 0xffffffffffff0000u64;
2126            let maskedval = padval & mask;
2127            if maskedval != 0 {
2128                return Err(fidl::Error::NonZeroPadding {
2129                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2130                });
2131            }
2132            // Copy from the buffer into the object.
2133            unsafe {
2134                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2135            }
2136            Ok(())
2137        }
2138    }
2139
2140    impl fidl::encoding::ValueTypeMarker for NetSpec {
2141        type Borrowed<'a> = &'a Self;
2142        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2143            value
2144        }
2145    }
2146
2147    unsafe impl fidl::encoding::TypeMarker for NetSpec {
2148        type Owned = Self;
2149
2150        #[inline(always)]
2151        fn inline_align(_context: fidl::encoding::Context) -> usize {
2152            1
2153        }
2154
2155        #[inline(always)]
2156        fn inline_size(_context: fidl::encoding::Context) -> usize {
2157            7
2158        }
2159    }
2160
2161    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<NetSpec, D> for &NetSpec {
2162        #[inline]
2163        unsafe fn encode(
2164            self,
2165            encoder: &mut fidl::encoding::Encoder<'_, D>,
2166            offset: usize,
2167            _depth: fidl::encoding::Depth,
2168        ) -> fidl::Result<()> {
2169            encoder.debug_check_bounds::<NetSpec>(offset);
2170            // Delegate to tuple encoding.
2171            fidl::encoding::Encode::<NetSpec, D>::encode(
2172                (
2173                    <fidl_fuchsia_net__common::MacAddress as fidl::encoding::ValueTypeMarker>::borrow(&self.mac_address),
2174                    <bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enable_bridge),
2175                ),
2176                encoder, offset, _depth
2177            )
2178        }
2179    }
2180    unsafe impl<
2181        D: fidl::encoding::ResourceDialect,
2182        T0: fidl::encoding::Encode<fidl_fuchsia_net__common::MacAddress, D>,
2183        T1: fidl::encoding::Encode<bool, D>,
2184    > fidl::encoding::Encode<NetSpec, D> for (T0, T1)
2185    {
2186        #[inline]
2187        unsafe fn encode(
2188            self,
2189            encoder: &mut fidl::encoding::Encoder<'_, D>,
2190            offset: usize,
2191            depth: fidl::encoding::Depth,
2192        ) -> fidl::Result<()> {
2193            encoder.debug_check_bounds::<NetSpec>(offset);
2194            // Zero out padding regions. There's no need to apply masks
2195            // because the unmasked parts will be overwritten by fields.
2196            // Write the fields.
2197            self.0.encode(encoder, offset + 0, depth)?;
2198            self.1.encode(encoder, offset + 6, depth)?;
2199            Ok(())
2200        }
2201    }
2202
2203    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for NetSpec {
2204        #[inline(always)]
2205        fn new_empty() -> Self {
2206            Self {
2207                mac_address: fidl::new_empty!(fidl_fuchsia_net__common::MacAddress, D),
2208                enable_bridge: fidl::new_empty!(bool, D),
2209            }
2210        }
2211
2212        #[inline]
2213        unsafe fn decode(
2214            &mut self,
2215            decoder: &mut fidl::encoding::Decoder<'_, D>,
2216            offset: usize,
2217            _depth: fidl::encoding::Depth,
2218        ) -> fidl::Result<()> {
2219            decoder.debug_check_bounds::<Self>(offset);
2220            // Verify that padding bytes are zero.
2221            fidl::decode!(
2222                fidl_fuchsia_net__common::MacAddress,
2223                D,
2224                &mut self.mac_address,
2225                decoder,
2226                offset + 0,
2227                _depth
2228            )?;
2229            fidl::decode!(bool, D, &mut self.enable_bridge, decoder, offset + 6, _depth)?;
2230            Ok(())
2231        }
2232    }
2233
2234    impl GuestDescriptor {
2235        #[inline(always)]
2236        fn max_ordinal_present(&self) -> u64 {
2237            if let Some(_) = self.mem {
2238                return 12;
2239            }
2240            if let Some(_) = self.networks {
2241                return 11;
2242            }
2243            if let Some(_) = self.sound {
2244                return 10;
2245            }
2246            if let Some(_) = self.vsock {
2247                return 9;
2248            }
2249            if let Some(_) = self.rng {
2250                return 8;
2251            }
2252            if let Some(_) = self.gpu {
2253                return 7;
2254            }
2255            if let Some(_) = self.console {
2256                return 6;
2257            }
2258            if let Some(_) = self.balloon {
2259                return 5;
2260            }
2261            if let Some(_) = self.guest_memory {
2262                return 2;
2263            }
2264            if let Some(_) = self.num_cpus {
2265                return 1;
2266            }
2267            0
2268        }
2269    }
2270
2271    impl fidl::encoding::ValueTypeMarker for GuestDescriptor {
2272        type Borrowed<'a> = &'a Self;
2273        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2274            value
2275        }
2276    }
2277
2278    unsafe impl fidl::encoding::TypeMarker for GuestDescriptor {
2279        type Owned = Self;
2280
2281        #[inline(always)]
2282        fn inline_align(_context: fidl::encoding::Context) -> usize {
2283            8
2284        }
2285
2286        #[inline(always)]
2287        fn inline_size(_context: fidl::encoding::Context) -> usize {
2288            16
2289        }
2290    }
2291
2292    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GuestDescriptor, D>
2293        for &GuestDescriptor
2294    {
2295        unsafe fn encode(
2296            self,
2297            encoder: &mut fidl::encoding::Encoder<'_, D>,
2298            offset: usize,
2299            mut depth: fidl::encoding::Depth,
2300        ) -> fidl::Result<()> {
2301            encoder.debug_check_bounds::<GuestDescriptor>(offset);
2302            // Vector header
2303            let max_ordinal: u64 = self.max_ordinal_present();
2304            encoder.write_num(max_ordinal, offset);
2305            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2306            // Calling encoder.out_of_line_offset(0) is not allowed.
2307            if max_ordinal == 0 {
2308                return Ok(());
2309            }
2310            depth.increment()?;
2311            let envelope_size = 8;
2312            let bytes_len = max_ordinal as usize * envelope_size;
2313            #[allow(unused_variables)]
2314            let offset = encoder.out_of_line_offset(bytes_len);
2315            let mut _prev_end_offset: usize = 0;
2316            if 1 > max_ordinal {
2317                return Ok(());
2318            }
2319
2320            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2321            // are envelope_size bytes.
2322            let cur_offset: usize = (1 - 1) * envelope_size;
2323
2324            // Zero reserved fields.
2325            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2326
2327            // Safety:
2328            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2329            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2330            //   envelope_size bytes, there is always sufficient room.
2331            fidl::encoding::encode_in_envelope_optional::<u8, D>(
2332                self.num_cpus.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
2333                encoder,
2334                offset + cur_offset,
2335                depth,
2336            )?;
2337
2338            _prev_end_offset = cur_offset + envelope_size;
2339            if 2 > max_ordinal {
2340                return Ok(());
2341            }
2342
2343            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2344            // are envelope_size bytes.
2345            let cur_offset: usize = (2 - 1) * envelope_size;
2346
2347            // Zero reserved fields.
2348            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2349
2350            // Safety:
2351            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2352            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2353            //   envelope_size bytes, there is always sufficient room.
2354            fidl::encoding::encode_in_envelope_optional::<u64, D>(
2355                self.guest_memory.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
2356                encoder,
2357                offset + cur_offset,
2358                depth,
2359            )?;
2360
2361            _prev_end_offset = cur_offset + envelope_size;
2362            if 5 > max_ordinal {
2363                return Ok(());
2364            }
2365
2366            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2367            // are envelope_size bytes.
2368            let cur_offset: usize = (5 - 1) * envelope_size;
2369
2370            // Zero reserved fields.
2371            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2372
2373            // Safety:
2374            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2375            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2376            //   envelope_size bytes, there is always sufficient room.
2377            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2378                self.balloon.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2379                encoder,
2380                offset + cur_offset,
2381                depth,
2382            )?;
2383
2384            _prev_end_offset = cur_offset + envelope_size;
2385            if 6 > max_ordinal {
2386                return Ok(());
2387            }
2388
2389            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2390            // are envelope_size bytes.
2391            let cur_offset: usize = (6 - 1) * envelope_size;
2392
2393            // Zero reserved fields.
2394            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2395
2396            // Safety:
2397            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2398            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2399            //   envelope_size bytes, there is always sufficient room.
2400            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2401                self.console.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2402                encoder,
2403                offset + cur_offset,
2404                depth,
2405            )?;
2406
2407            _prev_end_offset = cur_offset + envelope_size;
2408            if 7 > max_ordinal {
2409                return Ok(());
2410            }
2411
2412            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2413            // are envelope_size bytes.
2414            let cur_offset: usize = (7 - 1) * envelope_size;
2415
2416            // Zero reserved fields.
2417            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2418
2419            // Safety:
2420            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2421            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2422            //   envelope_size bytes, there is always sufficient room.
2423            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2424                self.gpu.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2425                encoder,
2426                offset + cur_offset,
2427                depth,
2428            )?;
2429
2430            _prev_end_offset = cur_offset + envelope_size;
2431            if 8 > max_ordinal {
2432                return Ok(());
2433            }
2434
2435            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2436            // are envelope_size bytes.
2437            let cur_offset: usize = (8 - 1) * envelope_size;
2438
2439            // Zero reserved fields.
2440            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2441
2442            // Safety:
2443            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2444            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2445            //   envelope_size bytes, there is always sufficient room.
2446            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2447                self.rng.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2448                encoder,
2449                offset + cur_offset,
2450                depth,
2451            )?;
2452
2453            _prev_end_offset = cur_offset + envelope_size;
2454            if 9 > max_ordinal {
2455                return Ok(());
2456            }
2457
2458            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2459            // are envelope_size bytes.
2460            let cur_offset: usize = (9 - 1) * envelope_size;
2461
2462            // Zero reserved fields.
2463            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2464
2465            // Safety:
2466            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2467            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2468            //   envelope_size bytes, there is always sufficient room.
2469            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2470                self.vsock.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2471                encoder,
2472                offset + cur_offset,
2473                depth,
2474            )?;
2475
2476            _prev_end_offset = cur_offset + envelope_size;
2477            if 10 > max_ordinal {
2478                return Ok(());
2479            }
2480
2481            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2482            // are envelope_size bytes.
2483            let cur_offset: usize = (10 - 1) * envelope_size;
2484
2485            // Zero reserved fields.
2486            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2487
2488            // Safety:
2489            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2490            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2491            //   envelope_size bytes, there is always sufficient room.
2492            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2493                self.sound.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2494                encoder,
2495                offset + cur_offset,
2496                depth,
2497            )?;
2498
2499            _prev_end_offset = cur_offset + envelope_size;
2500            if 11 > max_ordinal {
2501                return Ok(());
2502            }
2503
2504            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2505            // are envelope_size bytes.
2506            let cur_offset: usize = (11 - 1) * envelope_size;
2507
2508            // Zero reserved fields.
2509            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2510
2511            // Safety:
2512            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2513            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2514            //   envelope_size bytes, there is always sufficient room.
2515            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<NetSpec, 32>, D>(
2516            self.networks.as_ref().map(<fidl::encoding::Vector<NetSpec, 32> as fidl::encoding::ValueTypeMarker>::borrow),
2517            encoder, offset + cur_offset, depth
2518        )?;
2519
2520            _prev_end_offset = cur_offset + envelope_size;
2521            if 12 > max_ordinal {
2522                return Ok(());
2523            }
2524
2525            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2526            // are envelope_size bytes.
2527            let cur_offset: usize = (12 - 1) * envelope_size;
2528
2529            // Zero reserved fields.
2530            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2531
2532            // Safety:
2533            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2534            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2535            //   envelope_size bytes, there is always sufficient room.
2536            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2537                self.mem.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2538                encoder,
2539                offset + cur_offset,
2540                depth,
2541            )?;
2542
2543            _prev_end_offset = cur_offset + envelope_size;
2544
2545            Ok(())
2546        }
2547    }
2548
2549    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuestDescriptor {
2550        #[inline(always)]
2551        fn new_empty() -> Self {
2552            Self::default()
2553        }
2554
2555        unsafe fn decode(
2556            &mut self,
2557            decoder: &mut fidl::encoding::Decoder<'_, D>,
2558            offset: usize,
2559            mut depth: fidl::encoding::Depth,
2560        ) -> fidl::Result<()> {
2561            decoder.debug_check_bounds::<Self>(offset);
2562            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2563                None => return Err(fidl::Error::NotNullable),
2564                Some(len) => len,
2565            };
2566            // Calling decoder.out_of_line_offset(0) is not allowed.
2567            if len == 0 {
2568                return Ok(());
2569            };
2570            depth.increment()?;
2571            let envelope_size = 8;
2572            let bytes_len = len * envelope_size;
2573            let offset = decoder.out_of_line_offset(bytes_len)?;
2574            // Decode the envelope for each type.
2575            let mut _next_ordinal_to_read = 0;
2576            let mut next_offset = offset;
2577            let end_offset = offset + bytes_len;
2578            _next_ordinal_to_read += 1;
2579            if next_offset >= end_offset {
2580                return Ok(());
2581            }
2582
2583            // Decode unknown envelopes for gaps in ordinals.
2584            while _next_ordinal_to_read < 1 {
2585                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2586                _next_ordinal_to_read += 1;
2587                next_offset += envelope_size;
2588            }
2589
2590            let next_out_of_line = decoder.next_out_of_line();
2591            let handles_before = decoder.remaining_handles();
2592            if let Some((inlined, num_bytes, num_handles)) =
2593                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2594            {
2595                let member_inline_size =
2596                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2597                if inlined != (member_inline_size <= 4) {
2598                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2599                }
2600                let inner_offset;
2601                let mut inner_depth = depth.clone();
2602                if inlined {
2603                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2604                    inner_offset = next_offset;
2605                } else {
2606                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2607                    inner_depth.increment()?;
2608                }
2609                let val_ref = self.num_cpus.get_or_insert_with(|| fidl::new_empty!(u8, D));
2610                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
2611                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2612                {
2613                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2614                }
2615                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2616                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2617                }
2618            }
2619
2620            next_offset += envelope_size;
2621            _next_ordinal_to_read += 1;
2622            if next_offset >= end_offset {
2623                return Ok(());
2624            }
2625
2626            // Decode unknown envelopes for gaps in ordinals.
2627            while _next_ordinal_to_read < 2 {
2628                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2629                _next_ordinal_to_read += 1;
2630                next_offset += envelope_size;
2631            }
2632
2633            let next_out_of_line = decoder.next_out_of_line();
2634            let handles_before = decoder.remaining_handles();
2635            if let Some((inlined, num_bytes, num_handles)) =
2636                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2637            {
2638                let member_inline_size =
2639                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2640                if inlined != (member_inline_size <= 4) {
2641                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2642                }
2643                let inner_offset;
2644                let mut inner_depth = depth.clone();
2645                if inlined {
2646                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2647                    inner_offset = next_offset;
2648                } else {
2649                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2650                    inner_depth.increment()?;
2651                }
2652                let val_ref = self.guest_memory.get_or_insert_with(|| fidl::new_empty!(u64, D));
2653                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
2654                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2655                {
2656                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2657                }
2658                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2659                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2660                }
2661            }
2662
2663            next_offset += envelope_size;
2664            _next_ordinal_to_read += 1;
2665            if next_offset >= end_offset {
2666                return Ok(());
2667            }
2668
2669            // Decode unknown envelopes for gaps in ordinals.
2670            while _next_ordinal_to_read < 5 {
2671                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2672                _next_ordinal_to_read += 1;
2673                next_offset += envelope_size;
2674            }
2675
2676            let next_out_of_line = decoder.next_out_of_line();
2677            let handles_before = decoder.remaining_handles();
2678            if let Some((inlined, num_bytes, num_handles)) =
2679                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2680            {
2681                let member_inline_size =
2682                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2683                if inlined != (member_inline_size <= 4) {
2684                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2685                }
2686                let inner_offset;
2687                let mut inner_depth = depth.clone();
2688                if inlined {
2689                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2690                    inner_offset = next_offset;
2691                } else {
2692                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2693                    inner_depth.increment()?;
2694                }
2695                let val_ref = self.balloon.get_or_insert_with(|| fidl::new_empty!(bool, D));
2696                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2697                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2698                {
2699                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2700                }
2701                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2702                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2703                }
2704            }
2705
2706            next_offset += envelope_size;
2707            _next_ordinal_to_read += 1;
2708            if next_offset >= end_offset {
2709                return Ok(());
2710            }
2711
2712            // Decode unknown envelopes for gaps in ordinals.
2713            while _next_ordinal_to_read < 6 {
2714                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2715                _next_ordinal_to_read += 1;
2716                next_offset += envelope_size;
2717            }
2718
2719            let next_out_of_line = decoder.next_out_of_line();
2720            let handles_before = decoder.remaining_handles();
2721            if let Some((inlined, num_bytes, num_handles)) =
2722                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2723            {
2724                let member_inline_size =
2725                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2726                if inlined != (member_inline_size <= 4) {
2727                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2728                }
2729                let inner_offset;
2730                let mut inner_depth = depth.clone();
2731                if inlined {
2732                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2733                    inner_offset = next_offset;
2734                } else {
2735                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2736                    inner_depth.increment()?;
2737                }
2738                let val_ref = self.console.get_or_insert_with(|| fidl::new_empty!(bool, D));
2739                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2740                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2741                {
2742                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2743                }
2744                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2745                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2746                }
2747            }
2748
2749            next_offset += envelope_size;
2750            _next_ordinal_to_read += 1;
2751            if next_offset >= end_offset {
2752                return Ok(());
2753            }
2754
2755            // Decode unknown envelopes for gaps in ordinals.
2756            while _next_ordinal_to_read < 7 {
2757                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2758                _next_ordinal_to_read += 1;
2759                next_offset += envelope_size;
2760            }
2761
2762            let next_out_of_line = decoder.next_out_of_line();
2763            let handles_before = decoder.remaining_handles();
2764            if let Some((inlined, num_bytes, num_handles)) =
2765                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2766            {
2767                let member_inline_size =
2768                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2769                if inlined != (member_inline_size <= 4) {
2770                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2771                }
2772                let inner_offset;
2773                let mut inner_depth = depth.clone();
2774                if inlined {
2775                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2776                    inner_offset = next_offset;
2777                } else {
2778                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2779                    inner_depth.increment()?;
2780                }
2781                let val_ref = self.gpu.get_or_insert_with(|| fidl::new_empty!(bool, D));
2782                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2783                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2784                {
2785                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2786                }
2787                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2788                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2789                }
2790            }
2791
2792            next_offset += envelope_size;
2793            _next_ordinal_to_read += 1;
2794            if next_offset >= end_offset {
2795                return Ok(());
2796            }
2797
2798            // Decode unknown envelopes for gaps in ordinals.
2799            while _next_ordinal_to_read < 8 {
2800                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2801                _next_ordinal_to_read += 1;
2802                next_offset += envelope_size;
2803            }
2804
2805            let next_out_of_line = decoder.next_out_of_line();
2806            let handles_before = decoder.remaining_handles();
2807            if let Some((inlined, num_bytes, num_handles)) =
2808                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2809            {
2810                let member_inline_size =
2811                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2812                if inlined != (member_inline_size <= 4) {
2813                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2814                }
2815                let inner_offset;
2816                let mut inner_depth = depth.clone();
2817                if inlined {
2818                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2819                    inner_offset = next_offset;
2820                } else {
2821                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2822                    inner_depth.increment()?;
2823                }
2824                let val_ref = self.rng.get_or_insert_with(|| fidl::new_empty!(bool, D));
2825                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2826                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2827                {
2828                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2829                }
2830                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2831                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2832                }
2833            }
2834
2835            next_offset += envelope_size;
2836            _next_ordinal_to_read += 1;
2837            if next_offset >= end_offset {
2838                return Ok(());
2839            }
2840
2841            // Decode unknown envelopes for gaps in ordinals.
2842            while _next_ordinal_to_read < 9 {
2843                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2844                _next_ordinal_to_read += 1;
2845                next_offset += envelope_size;
2846            }
2847
2848            let next_out_of_line = decoder.next_out_of_line();
2849            let handles_before = decoder.remaining_handles();
2850            if let Some((inlined, num_bytes, num_handles)) =
2851                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2852            {
2853                let member_inline_size =
2854                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2855                if inlined != (member_inline_size <= 4) {
2856                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2857                }
2858                let inner_offset;
2859                let mut inner_depth = depth.clone();
2860                if inlined {
2861                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2862                    inner_offset = next_offset;
2863                } else {
2864                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2865                    inner_depth.increment()?;
2866                }
2867                let val_ref = self.vsock.get_or_insert_with(|| fidl::new_empty!(bool, D));
2868                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2869                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2870                {
2871                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2872                }
2873                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2874                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2875                }
2876            }
2877
2878            next_offset += envelope_size;
2879            _next_ordinal_to_read += 1;
2880            if next_offset >= end_offset {
2881                return Ok(());
2882            }
2883
2884            // Decode unknown envelopes for gaps in ordinals.
2885            while _next_ordinal_to_read < 10 {
2886                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2887                _next_ordinal_to_read += 1;
2888                next_offset += envelope_size;
2889            }
2890
2891            let next_out_of_line = decoder.next_out_of_line();
2892            let handles_before = decoder.remaining_handles();
2893            if let Some((inlined, num_bytes, num_handles)) =
2894                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2895            {
2896                let member_inline_size =
2897                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2898                if inlined != (member_inline_size <= 4) {
2899                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2900                }
2901                let inner_offset;
2902                let mut inner_depth = depth.clone();
2903                if inlined {
2904                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2905                    inner_offset = next_offset;
2906                } else {
2907                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2908                    inner_depth.increment()?;
2909                }
2910                let val_ref = self.sound.get_or_insert_with(|| fidl::new_empty!(bool, D));
2911                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2912                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2913                {
2914                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2915                }
2916                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2917                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2918                }
2919            }
2920
2921            next_offset += envelope_size;
2922            _next_ordinal_to_read += 1;
2923            if next_offset >= end_offset {
2924                return Ok(());
2925            }
2926
2927            // Decode unknown envelopes for gaps in ordinals.
2928            while _next_ordinal_to_read < 11 {
2929                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2930                _next_ordinal_to_read += 1;
2931                next_offset += envelope_size;
2932            }
2933
2934            let next_out_of_line = decoder.next_out_of_line();
2935            let handles_before = decoder.remaining_handles();
2936            if let Some((inlined, num_bytes, num_handles)) =
2937                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2938            {
2939                let member_inline_size = <fidl::encoding::Vector<NetSpec, 32> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2940                if inlined != (member_inline_size <= 4) {
2941                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2942                }
2943                let inner_offset;
2944                let mut inner_depth = depth.clone();
2945                if inlined {
2946                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2947                    inner_offset = next_offset;
2948                } else {
2949                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2950                    inner_depth.increment()?;
2951                }
2952                let val_ref = self.networks.get_or_insert_with(
2953                    || fidl::new_empty!(fidl::encoding::Vector<NetSpec, 32>, D),
2954                );
2955                fidl::decode!(fidl::encoding::Vector<NetSpec, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
2956                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2957                {
2958                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2959                }
2960                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2961                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2962                }
2963            }
2964
2965            next_offset += envelope_size;
2966            _next_ordinal_to_read += 1;
2967            if next_offset >= end_offset {
2968                return Ok(());
2969            }
2970
2971            // Decode unknown envelopes for gaps in ordinals.
2972            while _next_ordinal_to_read < 12 {
2973                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2974                _next_ordinal_to_read += 1;
2975                next_offset += envelope_size;
2976            }
2977
2978            let next_out_of_line = decoder.next_out_of_line();
2979            let handles_before = decoder.remaining_handles();
2980            if let Some((inlined, num_bytes, num_handles)) =
2981                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2982            {
2983                let member_inline_size =
2984                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2985                if inlined != (member_inline_size <= 4) {
2986                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2987                }
2988                let inner_offset;
2989                let mut inner_depth = depth.clone();
2990                if inlined {
2991                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2992                    inner_offset = next_offset;
2993                } else {
2994                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2995                    inner_depth.increment()?;
2996                }
2997                let val_ref = self.mem.get_or_insert_with(|| fidl::new_empty!(bool, D));
2998                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2999                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3000                {
3001                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3002                }
3003                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3004                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3005                }
3006            }
3007
3008            next_offset += envelope_size;
3009
3010            // Decode the remaining unknown envelopes.
3011            while next_offset < end_offset {
3012                _next_ordinal_to_read += 1;
3013                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3014                next_offset += envelope_size;
3015            }
3016
3017            Ok(())
3018        }
3019    }
3020
3021    impl GuestInfo {
3022        #[inline(always)]
3023        fn max_ordinal_present(&self) -> u64 {
3024            if let Some(_) = self.detected_problems {
3025                return 5;
3026            }
3027            if let Some(_) = self.stop_error {
3028                return 4;
3029            }
3030            if let Some(_) = self.guest_descriptor {
3031                return 3;
3032            }
3033            if let Some(_) = self.uptime {
3034                return 2;
3035            }
3036            if let Some(_) = self.guest_status {
3037                return 1;
3038            }
3039            0
3040        }
3041    }
3042
3043    impl fidl::encoding::ValueTypeMarker for GuestInfo {
3044        type Borrowed<'a> = &'a Self;
3045        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3046            value
3047        }
3048    }
3049
3050    unsafe impl fidl::encoding::TypeMarker for GuestInfo {
3051        type Owned = Self;
3052
3053        #[inline(always)]
3054        fn inline_align(_context: fidl::encoding::Context) -> usize {
3055            8
3056        }
3057
3058        #[inline(always)]
3059        fn inline_size(_context: fidl::encoding::Context) -> usize {
3060            16
3061        }
3062    }
3063
3064    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<GuestInfo, D>
3065        for &GuestInfo
3066    {
3067        unsafe fn encode(
3068            self,
3069            encoder: &mut fidl::encoding::Encoder<'_, D>,
3070            offset: usize,
3071            mut depth: fidl::encoding::Depth,
3072        ) -> fidl::Result<()> {
3073            encoder.debug_check_bounds::<GuestInfo>(offset);
3074            // Vector header
3075            let max_ordinal: u64 = self.max_ordinal_present();
3076            encoder.write_num(max_ordinal, offset);
3077            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3078            // Calling encoder.out_of_line_offset(0) is not allowed.
3079            if max_ordinal == 0 {
3080                return Ok(());
3081            }
3082            depth.increment()?;
3083            let envelope_size = 8;
3084            let bytes_len = max_ordinal as usize * envelope_size;
3085            #[allow(unused_variables)]
3086            let offset = encoder.out_of_line_offset(bytes_len);
3087            let mut _prev_end_offset: usize = 0;
3088            if 1 > max_ordinal {
3089                return Ok(());
3090            }
3091
3092            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3093            // are envelope_size bytes.
3094            let cur_offset: usize = (1 - 1) * envelope_size;
3095
3096            // Zero reserved fields.
3097            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3098
3099            // Safety:
3100            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3101            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3102            //   envelope_size bytes, there is always sufficient room.
3103            fidl::encoding::encode_in_envelope_optional::<GuestStatus, D>(
3104                self.guest_status
3105                    .as_ref()
3106                    .map(<GuestStatus as fidl::encoding::ValueTypeMarker>::borrow),
3107                encoder,
3108                offset + cur_offset,
3109                depth,
3110            )?;
3111
3112            _prev_end_offset = cur_offset + envelope_size;
3113            if 2 > max_ordinal {
3114                return Ok(());
3115            }
3116
3117            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3118            // are envelope_size bytes.
3119            let cur_offset: usize = (2 - 1) * envelope_size;
3120
3121            // Zero reserved fields.
3122            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3123
3124            // Safety:
3125            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3126            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3127            //   envelope_size bytes, there is always sufficient room.
3128            fidl::encoding::encode_in_envelope_optional::<i64, D>(
3129                self.uptime.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
3130                encoder,
3131                offset + cur_offset,
3132                depth,
3133            )?;
3134
3135            _prev_end_offset = cur_offset + envelope_size;
3136            if 3 > max_ordinal {
3137                return Ok(());
3138            }
3139
3140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3141            // are envelope_size bytes.
3142            let cur_offset: usize = (3 - 1) * envelope_size;
3143
3144            // Zero reserved fields.
3145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3146
3147            // Safety:
3148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3150            //   envelope_size bytes, there is always sufficient room.
3151            fidl::encoding::encode_in_envelope_optional::<GuestDescriptor, D>(
3152                self.guest_descriptor
3153                    .as_ref()
3154                    .map(<GuestDescriptor as fidl::encoding::ValueTypeMarker>::borrow),
3155                encoder,
3156                offset + cur_offset,
3157                depth,
3158            )?;
3159
3160            _prev_end_offset = cur_offset + envelope_size;
3161            if 4 > max_ordinal {
3162                return Ok(());
3163            }
3164
3165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3166            // are envelope_size bytes.
3167            let cur_offset: usize = (4 - 1) * envelope_size;
3168
3169            // Zero reserved fields.
3170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3171
3172            // Safety:
3173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3175            //   envelope_size bytes, there is always sufficient room.
3176            fidl::encoding::encode_in_envelope_optional::<GuestError, D>(
3177                self.stop_error
3178                    .as_ref()
3179                    .map(<GuestError as fidl::encoding::ValueTypeMarker>::borrow),
3180                encoder,
3181                offset + cur_offset,
3182                depth,
3183            )?;
3184
3185            _prev_end_offset = cur_offset + envelope_size;
3186            if 5 > max_ordinal {
3187                return Ok(());
3188            }
3189
3190            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3191            // are envelope_size bytes.
3192            let cur_offset: usize = (5 - 1) * envelope_size;
3193
3194            // Zero reserved fields.
3195            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3196
3197            // Safety:
3198            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3199            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3200            //   envelope_size bytes, there is always sufficient room.
3201            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<fidl::encoding::UnboundedString, 8>, D>(
3202            self.detected_problems.as_ref().map(<fidl::encoding::Vector<fidl::encoding::UnboundedString, 8> as fidl::encoding::ValueTypeMarker>::borrow),
3203            encoder, offset + cur_offset, depth
3204        )?;
3205
3206            _prev_end_offset = cur_offset + envelope_size;
3207
3208            Ok(())
3209        }
3210    }
3211
3212    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for GuestInfo {
3213        #[inline(always)]
3214        fn new_empty() -> Self {
3215            Self::default()
3216        }
3217
3218        unsafe fn decode(
3219            &mut self,
3220            decoder: &mut fidl::encoding::Decoder<'_, D>,
3221            offset: usize,
3222            mut depth: fidl::encoding::Depth,
3223        ) -> fidl::Result<()> {
3224            decoder.debug_check_bounds::<Self>(offset);
3225            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3226                None => return Err(fidl::Error::NotNullable),
3227                Some(len) => len,
3228            };
3229            // Calling decoder.out_of_line_offset(0) is not allowed.
3230            if len == 0 {
3231                return Ok(());
3232            };
3233            depth.increment()?;
3234            let envelope_size = 8;
3235            let bytes_len = len * envelope_size;
3236            let offset = decoder.out_of_line_offset(bytes_len)?;
3237            // Decode the envelope for each type.
3238            let mut _next_ordinal_to_read = 0;
3239            let mut next_offset = offset;
3240            let end_offset = offset + bytes_len;
3241            _next_ordinal_to_read += 1;
3242            if next_offset >= end_offset {
3243                return Ok(());
3244            }
3245
3246            // Decode unknown envelopes for gaps in ordinals.
3247            while _next_ordinal_to_read < 1 {
3248                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3249                _next_ordinal_to_read += 1;
3250                next_offset += envelope_size;
3251            }
3252
3253            let next_out_of_line = decoder.next_out_of_line();
3254            let handles_before = decoder.remaining_handles();
3255            if let Some((inlined, num_bytes, num_handles)) =
3256                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3257            {
3258                let member_inline_size =
3259                    <GuestStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3260                if inlined != (member_inline_size <= 4) {
3261                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3262                }
3263                let inner_offset;
3264                let mut inner_depth = depth.clone();
3265                if inlined {
3266                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3267                    inner_offset = next_offset;
3268                } else {
3269                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3270                    inner_depth.increment()?;
3271                }
3272                let val_ref =
3273                    self.guest_status.get_or_insert_with(|| fidl::new_empty!(GuestStatus, D));
3274                fidl::decode!(GuestStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
3275                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3276                {
3277                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3278                }
3279                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3280                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3281                }
3282            }
3283
3284            next_offset += envelope_size;
3285            _next_ordinal_to_read += 1;
3286            if next_offset >= end_offset {
3287                return Ok(());
3288            }
3289
3290            // Decode unknown envelopes for gaps in ordinals.
3291            while _next_ordinal_to_read < 2 {
3292                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3293                _next_ordinal_to_read += 1;
3294                next_offset += envelope_size;
3295            }
3296
3297            let next_out_of_line = decoder.next_out_of_line();
3298            let handles_before = decoder.remaining_handles();
3299            if let Some((inlined, num_bytes, num_handles)) =
3300                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3301            {
3302                let member_inline_size =
3303                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3304                if inlined != (member_inline_size <= 4) {
3305                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3306                }
3307                let inner_offset;
3308                let mut inner_depth = depth.clone();
3309                if inlined {
3310                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3311                    inner_offset = next_offset;
3312                } else {
3313                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3314                    inner_depth.increment()?;
3315                }
3316                let val_ref = self.uptime.get_or_insert_with(|| fidl::new_empty!(i64, D));
3317                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
3318                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3319                {
3320                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3321                }
3322                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3323                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3324                }
3325            }
3326
3327            next_offset += envelope_size;
3328            _next_ordinal_to_read += 1;
3329            if next_offset >= end_offset {
3330                return Ok(());
3331            }
3332
3333            // Decode unknown envelopes for gaps in ordinals.
3334            while _next_ordinal_to_read < 3 {
3335                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3336                _next_ordinal_to_read += 1;
3337                next_offset += envelope_size;
3338            }
3339
3340            let next_out_of_line = decoder.next_out_of_line();
3341            let handles_before = decoder.remaining_handles();
3342            if let Some((inlined, num_bytes, num_handles)) =
3343                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3344            {
3345                let member_inline_size =
3346                    <GuestDescriptor as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3347                if inlined != (member_inline_size <= 4) {
3348                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3349                }
3350                let inner_offset;
3351                let mut inner_depth = depth.clone();
3352                if inlined {
3353                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3354                    inner_offset = next_offset;
3355                } else {
3356                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3357                    inner_depth.increment()?;
3358                }
3359                let val_ref = self
3360                    .guest_descriptor
3361                    .get_or_insert_with(|| fidl::new_empty!(GuestDescriptor, D));
3362                fidl::decode!(GuestDescriptor, D, val_ref, decoder, inner_offset, inner_depth)?;
3363                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3364                {
3365                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3366                }
3367                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3368                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3369                }
3370            }
3371
3372            next_offset += envelope_size;
3373            _next_ordinal_to_read += 1;
3374            if next_offset >= end_offset {
3375                return Ok(());
3376            }
3377
3378            // Decode unknown envelopes for gaps in ordinals.
3379            while _next_ordinal_to_read < 4 {
3380                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3381                _next_ordinal_to_read += 1;
3382                next_offset += envelope_size;
3383            }
3384
3385            let next_out_of_line = decoder.next_out_of_line();
3386            let handles_before = decoder.remaining_handles();
3387            if let Some((inlined, num_bytes, num_handles)) =
3388                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3389            {
3390                let member_inline_size =
3391                    <GuestError as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3392                if inlined != (member_inline_size <= 4) {
3393                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3394                }
3395                let inner_offset;
3396                let mut inner_depth = depth.clone();
3397                if inlined {
3398                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3399                    inner_offset = next_offset;
3400                } else {
3401                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3402                    inner_depth.increment()?;
3403                }
3404                let val_ref =
3405                    self.stop_error.get_or_insert_with(|| fidl::new_empty!(GuestError, D));
3406                fidl::decode!(GuestError, D, val_ref, decoder, inner_offset, inner_depth)?;
3407                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3408                {
3409                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3410                }
3411                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3412                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3413                }
3414            }
3415
3416            next_offset += envelope_size;
3417            _next_ordinal_to_read += 1;
3418            if next_offset >= end_offset {
3419                return Ok(());
3420            }
3421
3422            // Decode unknown envelopes for gaps in ordinals.
3423            while _next_ordinal_to_read < 5 {
3424                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3425                _next_ordinal_to_read += 1;
3426                next_offset += envelope_size;
3427            }
3428
3429            let next_out_of_line = decoder.next_out_of_line();
3430            let handles_before = decoder.remaining_handles();
3431            if let Some((inlined, num_bytes, num_handles)) =
3432                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3433            {
3434                let member_inline_size = <fidl::encoding::Vector<fidl::encoding::UnboundedString, 8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3435                if inlined != (member_inline_size <= 4) {
3436                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3437                }
3438                let inner_offset;
3439                let mut inner_depth = depth.clone();
3440                if inlined {
3441                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3442                    inner_offset = next_offset;
3443                } else {
3444                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3445                    inner_depth.increment()?;
3446                }
3447                let val_ref =
3448                self.detected_problems.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<fidl::encoding::UnboundedString, 8>, D));
3449                fidl::decode!(fidl::encoding::Vector<fidl::encoding::UnboundedString, 8>, D, val_ref, decoder, inner_offset, inner_depth)?;
3450                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3451                {
3452                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3453                }
3454                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3455                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3456                }
3457            }
3458
3459            next_offset += envelope_size;
3460
3461            // Decode the remaining unknown envelopes.
3462            while next_offset < end_offset {
3463                _next_ordinal_to_read += 1;
3464                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3465                next_offset += envelope_size;
3466            }
3467
3468            Ok(())
3469        }
3470    }
3471
3472    impl LinuxGuestInfo {
3473        #[inline(always)]
3474        fn max_ordinal_present(&self) -> u64 {
3475            if let Some(_) = self.failure_reason {
3476                return 4;
3477            }
3478            if let Some(_) = self.download_percent {
3479                return 3;
3480            }
3481            if let Some(_) = self.container_status {
3482                return 2;
3483            }
3484            if let Some(_) = self.cid {
3485                return 1;
3486            }
3487            0
3488        }
3489    }
3490
3491    impl fidl::encoding::ValueTypeMarker for LinuxGuestInfo {
3492        type Borrowed<'a> = &'a Self;
3493        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3494            value
3495        }
3496    }
3497
3498    unsafe impl fidl::encoding::TypeMarker for LinuxGuestInfo {
3499        type Owned = Self;
3500
3501        #[inline(always)]
3502        fn inline_align(_context: fidl::encoding::Context) -> usize {
3503            8
3504        }
3505
3506        #[inline(always)]
3507        fn inline_size(_context: fidl::encoding::Context) -> usize {
3508            16
3509        }
3510    }
3511
3512    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<LinuxGuestInfo, D>
3513        for &LinuxGuestInfo
3514    {
3515        unsafe fn encode(
3516            self,
3517            encoder: &mut fidl::encoding::Encoder<'_, D>,
3518            offset: usize,
3519            mut depth: fidl::encoding::Depth,
3520        ) -> fidl::Result<()> {
3521            encoder.debug_check_bounds::<LinuxGuestInfo>(offset);
3522            // Vector header
3523            let max_ordinal: u64 = self.max_ordinal_present();
3524            encoder.write_num(max_ordinal, offset);
3525            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3526            // Calling encoder.out_of_line_offset(0) is not allowed.
3527            if max_ordinal == 0 {
3528                return Ok(());
3529            }
3530            depth.increment()?;
3531            let envelope_size = 8;
3532            let bytes_len = max_ordinal as usize * envelope_size;
3533            #[allow(unused_variables)]
3534            let offset = encoder.out_of_line_offset(bytes_len);
3535            let mut _prev_end_offset: usize = 0;
3536            if 1 > max_ordinal {
3537                return Ok(());
3538            }
3539
3540            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3541            // are envelope_size bytes.
3542            let cur_offset: usize = (1 - 1) * envelope_size;
3543
3544            // Zero reserved fields.
3545            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3546
3547            // Safety:
3548            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3549            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3550            //   envelope_size bytes, there is always sufficient room.
3551            fidl::encoding::encode_in_envelope_optional::<u32, D>(
3552                self.cid.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
3553                encoder,
3554                offset + cur_offset,
3555                depth,
3556            )?;
3557
3558            _prev_end_offset = cur_offset + envelope_size;
3559            if 2 > max_ordinal {
3560                return Ok(());
3561            }
3562
3563            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3564            // are envelope_size bytes.
3565            let cur_offset: usize = (2 - 1) * envelope_size;
3566
3567            // Zero reserved fields.
3568            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3569
3570            // Safety:
3571            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3572            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3573            //   envelope_size bytes, there is always sufficient room.
3574            fidl::encoding::encode_in_envelope_optional::<ContainerStatus, D>(
3575                self.container_status
3576                    .as_ref()
3577                    .map(<ContainerStatus as fidl::encoding::ValueTypeMarker>::borrow),
3578                encoder,
3579                offset + cur_offset,
3580                depth,
3581            )?;
3582
3583            _prev_end_offset = cur_offset + envelope_size;
3584            if 3 > max_ordinal {
3585                return Ok(());
3586            }
3587
3588            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3589            // are envelope_size bytes.
3590            let cur_offset: usize = (3 - 1) * envelope_size;
3591
3592            // Zero reserved fields.
3593            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3594
3595            // Safety:
3596            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3597            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3598            //   envelope_size bytes, there is always sufficient room.
3599            fidl::encoding::encode_in_envelope_optional::<i32, D>(
3600                self.download_percent
3601                    .as_ref()
3602                    .map(<i32 as fidl::encoding::ValueTypeMarker>::borrow),
3603                encoder,
3604                offset + cur_offset,
3605                depth,
3606            )?;
3607
3608            _prev_end_offset = cur_offset + envelope_size;
3609            if 4 > max_ordinal {
3610                return Ok(());
3611            }
3612
3613            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3614            // are envelope_size bytes.
3615            let cur_offset: usize = (4 - 1) * envelope_size;
3616
3617            // Zero reserved fields.
3618            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3619
3620            // Safety:
3621            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3622            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3623            //   envelope_size bytes, there is always sufficient room.
3624            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedString, D>(
3625                self.failure_reason.as_ref().map(
3626                    <fidl::encoding::UnboundedString as fidl::encoding::ValueTypeMarker>::borrow,
3627                ),
3628                encoder,
3629                offset + cur_offset,
3630                depth,
3631            )?;
3632
3633            _prev_end_offset = cur_offset + envelope_size;
3634
3635            Ok(())
3636        }
3637    }
3638
3639    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for LinuxGuestInfo {
3640        #[inline(always)]
3641        fn new_empty() -> Self {
3642            Self::default()
3643        }
3644
3645        unsafe fn decode(
3646            &mut self,
3647            decoder: &mut fidl::encoding::Decoder<'_, D>,
3648            offset: usize,
3649            mut depth: fidl::encoding::Depth,
3650        ) -> fidl::Result<()> {
3651            decoder.debug_check_bounds::<Self>(offset);
3652            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3653                None => return Err(fidl::Error::NotNullable),
3654                Some(len) => len,
3655            };
3656            // Calling decoder.out_of_line_offset(0) is not allowed.
3657            if len == 0 {
3658                return Ok(());
3659            };
3660            depth.increment()?;
3661            let envelope_size = 8;
3662            let bytes_len = len * envelope_size;
3663            let offset = decoder.out_of_line_offset(bytes_len)?;
3664            // Decode the envelope for each type.
3665            let mut _next_ordinal_to_read = 0;
3666            let mut next_offset = offset;
3667            let end_offset = offset + bytes_len;
3668            _next_ordinal_to_read += 1;
3669            if next_offset >= end_offset {
3670                return Ok(());
3671            }
3672
3673            // Decode unknown envelopes for gaps in ordinals.
3674            while _next_ordinal_to_read < 1 {
3675                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3676                _next_ordinal_to_read += 1;
3677                next_offset += envelope_size;
3678            }
3679
3680            let next_out_of_line = decoder.next_out_of_line();
3681            let handles_before = decoder.remaining_handles();
3682            if let Some((inlined, num_bytes, num_handles)) =
3683                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3684            {
3685                let member_inline_size =
3686                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3687                if inlined != (member_inline_size <= 4) {
3688                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3689                }
3690                let inner_offset;
3691                let mut inner_depth = depth.clone();
3692                if inlined {
3693                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3694                    inner_offset = next_offset;
3695                } else {
3696                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3697                    inner_depth.increment()?;
3698                }
3699                let val_ref = self.cid.get_or_insert_with(|| fidl::new_empty!(u32, D));
3700                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
3701                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3702                {
3703                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3704                }
3705                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3706                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3707                }
3708            }
3709
3710            next_offset += envelope_size;
3711            _next_ordinal_to_read += 1;
3712            if next_offset >= end_offset {
3713                return Ok(());
3714            }
3715
3716            // Decode unknown envelopes for gaps in ordinals.
3717            while _next_ordinal_to_read < 2 {
3718                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3719                _next_ordinal_to_read += 1;
3720                next_offset += envelope_size;
3721            }
3722
3723            let next_out_of_line = decoder.next_out_of_line();
3724            let handles_before = decoder.remaining_handles();
3725            if let Some((inlined, num_bytes, num_handles)) =
3726                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3727            {
3728                let member_inline_size =
3729                    <ContainerStatus as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3730                if inlined != (member_inline_size <= 4) {
3731                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3732                }
3733                let inner_offset;
3734                let mut inner_depth = depth.clone();
3735                if inlined {
3736                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3737                    inner_offset = next_offset;
3738                } else {
3739                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3740                    inner_depth.increment()?;
3741                }
3742                let val_ref = self
3743                    .container_status
3744                    .get_or_insert_with(|| fidl::new_empty!(ContainerStatus, D));
3745                fidl::decode!(ContainerStatus, D, val_ref, decoder, inner_offset, inner_depth)?;
3746                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3747                {
3748                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3749                }
3750                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3751                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3752                }
3753            }
3754
3755            next_offset += envelope_size;
3756            _next_ordinal_to_read += 1;
3757            if next_offset >= end_offset {
3758                return Ok(());
3759            }
3760
3761            // Decode unknown envelopes for gaps in ordinals.
3762            while _next_ordinal_to_read < 3 {
3763                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3764                _next_ordinal_to_read += 1;
3765                next_offset += envelope_size;
3766            }
3767
3768            let next_out_of_line = decoder.next_out_of_line();
3769            let handles_before = decoder.remaining_handles();
3770            if let Some((inlined, num_bytes, num_handles)) =
3771                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3772            {
3773                let member_inline_size =
3774                    <i32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3775                if inlined != (member_inline_size <= 4) {
3776                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3777                }
3778                let inner_offset;
3779                let mut inner_depth = depth.clone();
3780                if inlined {
3781                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3782                    inner_offset = next_offset;
3783                } else {
3784                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3785                    inner_depth.increment()?;
3786                }
3787                let val_ref = self.download_percent.get_or_insert_with(|| fidl::new_empty!(i32, D));
3788                fidl::decode!(i32, D, val_ref, decoder, inner_offset, inner_depth)?;
3789                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3790                {
3791                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3792                }
3793                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3794                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3795                }
3796            }
3797
3798            next_offset += envelope_size;
3799            _next_ordinal_to_read += 1;
3800            if next_offset >= end_offset {
3801                return Ok(());
3802            }
3803
3804            // Decode unknown envelopes for gaps in ordinals.
3805            while _next_ordinal_to_read < 4 {
3806                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3807                _next_ordinal_to_read += 1;
3808                next_offset += envelope_size;
3809            }
3810
3811            let next_out_of_line = decoder.next_out_of_line();
3812            let handles_before = decoder.remaining_handles();
3813            if let Some((inlined, num_bytes, num_handles)) =
3814                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3815            {
3816                let member_inline_size =
3817                    <fidl::encoding::UnboundedString as fidl::encoding::TypeMarker>::inline_size(
3818                        decoder.context,
3819                    );
3820                if inlined != (member_inline_size <= 4) {
3821                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3822                }
3823                let inner_offset;
3824                let mut inner_depth = depth.clone();
3825                if inlined {
3826                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3827                    inner_offset = next_offset;
3828                } else {
3829                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3830                    inner_depth.increment()?;
3831                }
3832                let val_ref = self
3833                    .failure_reason
3834                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::UnboundedString, D));
3835                fidl::decode!(
3836                    fidl::encoding::UnboundedString,
3837                    D,
3838                    val_ref,
3839                    decoder,
3840                    inner_offset,
3841                    inner_depth
3842                )?;
3843                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3844                {
3845                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3846                }
3847                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3848                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3849                }
3850            }
3851
3852            next_offset += envelope_size;
3853
3854            // Decode the remaining unknown envelopes.
3855            while next_offset < end_offset {
3856                _next_ordinal_to_read += 1;
3857                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3858                next_offset += envelope_size;
3859            }
3860
3861            Ok(())
3862        }
3863    }
3864}