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