fidl_fuchsia_gpu_magma__common/
fidl_fuchsia_gpu_magma__common.rs

1// WARNING: This file is machine generated by fidlgen.
2
3#![warn(clippy::all)]
4#![allow(unused_parens, unused_mut, unused_imports, nonstandard_style)]
5
6use bitflags::bitflags;
7use fidl::encoding::{MessageBufFor, ProxyChannelBox, ResourceDialect};
8use futures::future::{self, MaybeDone, TryFutureExt};
9use zx_status;
10
11pub type ContextId = u32;
12
13pub type ObjectId = u64;
14
15/// Performance counter pools contain byte ranges of buffers. Whenever a performance counter dump is
16/// triggered, the driver removes a range from the pool, writes the performance counter values from
17/// the hardware into it, then signals the client using OnPerformanceCounterReadCompleted. Pool IDs
18/// are arbitrary uint64 values that are allocated by the client.
19pub type PerformanceCounterPoolId = u64;
20
21/// Describes a set of performance counters. The exact meaning depends on the specific driver, but
22/// often is a bitvector representing whether each performance counter is enabled or disabled.
23pub type PerformanceCounterSet = Vec<u64>;
24
25pub type PerformanceCounterTriggerId = u32;
26
27/// The maximum number of ICDs supported by a Magma system driver.
28pub const MAX_ICD_COUNT: u64 = 8;
29
30/// The batch size used to send multiple inline commands in a single message.
31pub const MAX_INLINE_COMMANDS_DATA_SIZE: u32 = 2048;
32
33bitflags! {
34    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
35    pub struct CommandBufferFlags: u64 {
36        /// Vendor specific definitions start here
37        const VENDOR_FLAG_0 = 65536;
38    }
39}
40
41impl CommandBufferFlags {
42    #[inline(always)]
43    pub fn from_bits_allow_unknown(bits: u64) -> Self {
44        Self::from_bits_retain(bits)
45    }
46
47    #[inline(always)]
48    pub fn has_unknown_bits(&self) -> bool {
49        self.get_unknown_bits() != 0
50    }
51
52    #[inline(always)]
53    pub fn get_unknown_bits(&self) -> u64 {
54        self.bits() & !Self::all().bits()
55    }
56}
57
58bitflags! {
59    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
60    pub struct IcdFlags: u32 {
61        const SUPPORTS_VULKAN = 1;
62        const SUPPORTS_OPENCL = 2;
63        const SUPPORTS_MEDIA_CODEC_FACTORY = 4;
64    }
65}
66
67impl IcdFlags {
68    #[inline(always)]
69    pub fn from_bits_allow_unknown(bits: u32) -> Self {
70        Self::from_bits_retain(bits)
71    }
72
73    #[inline(always)]
74    pub fn has_unknown_bits(&self) -> bool {
75        self.get_unknown_bits() != 0
76    }
77
78    #[inline(always)]
79    pub fn get_unknown_bits(&self) -> u32 {
80        self.bits() & !Self::all().bits()
81    }
82}
83
84bitflags! {
85    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
86    pub struct ImportFlags: u64 {
87        const SEMAPHORE_ONE_SHOT = 1;
88    }
89}
90
91impl ImportFlags {
92    #[inline(always)]
93    pub fn from_bits_allow_unknown(bits: u64) -> Self {
94        Self::from_bits_retain(bits)
95    }
96
97    #[inline(always)]
98    pub fn has_unknown_bits(&self) -> bool {
99        self.get_unknown_bits() != 0
100    }
101
102    #[inline(always)]
103    pub fn get_unknown_bits(&self) -> u64 {
104        self.bits() & !Self::all().bits()
105    }
106}
107
108bitflags! {
109    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
110    pub struct MapFlags: u64 {
111        const READ = 1;
112        const WRITE = 2;
113        const EXECUTE = 4;
114        /// Uncommitted pages may be comitted on a hardware fault. If this flag is not set, access
115        /// faults should cause an error.
116        const GROWABLE = 8;
117        /// Vendor specific definitions start here
118        const VENDOR_FLAG_0 = 65536;
119    }
120}
121
122impl MapFlags {
123    #[inline(always)]
124    pub fn from_bits_allow_unknown(bits: u64) -> Self {
125        Self::from_bits_retain(bits)
126    }
127
128    #[inline(always)]
129    pub fn has_unknown_bits(&self) -> bool {
130        self.get_unknown_bits() != 0
131    }
132
133    #[inline(always)]
134    pub fn get_unknown_bits(&self) -> u64 {
135        self.bits() & !Self::all().bits()
136    }
137}
138
139bitflags! {
140    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
141    pub struct ResultFlags: u32 {
142        /// This bit is set in result_flags if the performance counters missed some samples, e.g. due to
143        /// the hardware being in protected mode for part of the time.
144        const DISCONTINUITY = 1;
145    }
146}
147
148impl ResultFlags {
149    #[inline(always)]
150    pub fn from_bits_allow_unknown(bits: u32) -> Self {
151        Self::from_bits_retain(bits)
152    }
153
154    #[inline(always)]
155    pub fn has_unknown_bits(&self) -> bool {
156        self.get_unknown_bits() != 0
157    }
158
159    #[inline(always)]
160    pub fn get_unknown_bits(&self) -> u32 {
161        self.bits() & !Self::all().bits()
162    }
163}
164
165#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
166pub enum BufferOp {
167    /// Populate the hardware page tables with the pages mapped in this range, committing pages
168    /// as needed. This is not needed for allocations mapped GROWABLE, since the page tables will
169    /// be populated on demand.
170    PopulateTables,
171    /// Depopulate page table mappings for this range. This prevents the hardware from accessing
172    /// pages in that range, but the pages retain their contents.
173    DepopulateTables,
174    #[doc(hidden)]
175    __SourceBreaking { unknown_ordinal: u32 },
176}
177
178/// Pattern that matches an unknown `BufferOp` member.
179#[macro_export]
180macro_rules! BufferOpUnknown {
181    () => {
182        _
183    };
184}
185
186impl BufferOp {
187    #[inline]
188    pub fn from_primitive(prim: u32) -> Option<Self> {
189        match prim {
190            1 => Some(Self::PopulateTables),
191            2 => Some(Self::DepopulateTables),
192            _ => None,
193        }
194    }
195
196    #[inline]
197    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
198        match prim {
199            1 => Self::PopulateTables,
200            2 => Self::DepopulateTables,
201            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
202        }
203    }
204
205    #[inline]
206    pub fn unknown() -> Self {
207        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
208    }
209
210    #[inline]
211    pub const fn into_primitive(self) -> u32 {
212        match self {
213            Self::PopulateTables => 1,
214            Self::DepopulateTables => 2,
215            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
216        }
217    }
218
219    #[inline]
220    pub fn is_unknown(&self) -> bool {
221        match self {
222            Self::__SourceBreaking { unknown_ordinal: _ } => true,
223            _ => false,
224        }
225    }
226}
227
228#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
229pub enum ObjectType {
230    /// A memory object backeed by a Zircon VMO.
231    Buffer,
232    /// A sync object backed by a Zircon event or counter.
233    Semaphore,
234    #[doc(hidden)]
235    __SourceBreaking { unknown_ordinal: u32 },
236}
237
238/// Pattern that matches an unknown `ObjectType` member.
239#[macro_export]
240macro_rules! ObjectTypeUnknown {
241    () => {
242        _
243    };
244}
245
246impl ObjectType {
247    #[inline]
248    pub fn from_primitive(prim: u32) -> Option<Self> {
249        match prim {
250            11 => Some(Self::Buffer),
251            12 => Some(Self::Semaphore),
252            _ => None,
253        }
254    }
255
256    #[inline]
257    pub fn from_primitive_allow_unknown(prim: u32) -> Self {
258        match prim {
259            11 => Self::Buffer,
260            12 => Self::Semaphore,
261            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
262        }
263    }
264
265    #[inline]
266    pub fn unknown() -> Self {
267        Self::__SourceBreaking { unknown_ordinal: 0xffffffff }
268    }
269
270    #[inline]
271    pub const fn into_primitive(self) -> u32 {
272        match self {
273            Self::Buffer => 11,
274            Self::Semaphore => 12,
275            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
276        }
277    }
278
279    #[inline]
280    pub fn is_unknown(&self) -> bool {
281        match self {
282            Self::__SourceBreaking { unknown_ordinal: _ } => true,
283            _ => false,
284        }
285    }
286}
287
288/// Each element of this enum represents a high-level goal of a specific power state.
289#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
290pub enum PowerGoalType {
291    /// The hardware is powered on, but idle and ready to immediately process work.
292    OnReadyForWork,
293    /// The hardware is in a high-performance state for gaming or other intensive activities.
294    HighPerformance,
295    /// The hardware is in a mode that provides a consistent level of performance for a long period
296    /// of time.
297    SustainedPerformance,
298    #[doc(hidden)]
299    __SourceBreaking { unknown_ordinal: u64 },
300}
301
302/// Pattern that matches an unknown `PowerGoalType` member.
303#[macro_export]
304macro_rules! PowerGoalTypeUnknown {
305    () => {
306        _
307    };
308}
309
310impl PowerGoalType {
311    #[inline]
312    pub fn from_primitive(prim: u64) -> Option<Self> {
313        match prim {
314            1 => Some(Self::OnReadyForWork),
315            2 => Some(Self::HighPerformance),
316            3 => Some(Self::SustainedPerformance),
317            _ => None,
318        }
319    }
320
321    #[inline]
322    pub fn from_primitive_allow_unknown(prim: u64) -> Self {
323        match prim {
324            1 => Self::OnReadyForWork,
325            2 => Self::HighPerformance,
326            3 => Self::SustainedPerformance,
327            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
328        }
329    }
330
331    #[inline]
332    pub fn unknown() -> Self {
333        Self::__SourceBreaking { unknown_ordinal: 0xffffffffffffffff }
334    }
335
336    #[inline]
337    pub const fn into_primitive(self) -> u64 {
338        match self {
339            Self::OnReadyForWork => 1,
340            Self::HighPerformance => 2,
341            Self::SustainedPerformance => 3,
342            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
343        }
344    }
345
346    #[inline]
347    pub fn is_unknown(&self) -> bool {
348        match self {
349            Self::__SourceBreaking { unknown_ordinal: _ } => true,
350            _ => false,
351        }
352    }
353}
354
355/// Specified priorities. The hardware will attempt to allocate resources in favor
356/// of higher priority tasks.
357/// Requesting a priority above MEDIUM is only allowed for trusted clients.
358/// MEDIUM is considered to be the default priority.
359#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
360pub enum Priority {
361    Low,
362    Medium,
363    High,
364    Realtime,
365    #[doc(hidden)]
366    __SourceBreaking {
367        unknown_ordinal: u64,
368    },
369}
370
371/// Pattern that matches an unknown `Priority` member.
372#[macro_export]
373macro_rules! PriorityUnknown {
374    () => {
375        _
376    };
377}
378
379impl Priority {
380    #[inline]
381    pub fn from_primitive(prim: u64) -> Option<Self> {
382        match prim {
383            128 => Some(Self::Low),
384            256 => Some(Self::Medium),
385            512 => Some(Self::High),
386            1024 => Some(Self::Realtime),
387            _ => None,
388        }
389    }
390
391    #[inline]
392    pub fn from_primitive_allow_unknown(prim: u64) -> Self {
393        match prim {
394            128 => Self::Low,
395            256 => Self::Medium,
396            512 => Self::High,
397            1024 => Self::Realtime,
398            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
399        }
400    }
401
402    #[inline]
403    pub fn unknown() -> Self {
404        Self::__SourceBreaking { unknown_ordinal: 0xffffffffffffffff }
405    }
406
407    #[inline]
408    pub const fn into_primitive(self) -> u64 {
409        match self {
410            Self::Low => 128,
411            Self::Medium => 256,
412            Self::High => 512,
413            Self::Realtime => 1024,
414            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
415        }
416    }
417
418    #[inline]
419    pub fn is_unknown(&self) -> bool {
420        match self {
421            Self::__SourceBreaking { unknown_ordinal: _ } => true,
422            _ => false,
423        }
424    }
425}
426
427/// Types of information about the hardware and driver that can be queried from the Magma system
428/// driver. Vendor-specific ID numbers may be used, but those IDs will be listed elsewhere.
429#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
430pub enum QueryId {
431    /// Returns the hardware vendor ID (simple result) - should be the PCI ID of the hardware
432    /// vendor if possible, or the Khronos vendor ID otherwise.
433    VendorId,
434    /// Returns the hardware device ID (simple result)
435    DeviceId,
436    /// Returns the version of the vendor interfaces supported by the system driver.
437    VendorVersion,
438    /// Returns true if MAGMA_QUERY_TOTAL_TIME is supported (simple result)
439    IsTotalTimeSupported,
440    /// Upper 32bits: max inflight messages, lower 32bits: max inflight memory (MB) (simple result)
441    MaximumInflightParams,
442    /// Returns a struct magma_total_time_query_result (buffer result); see:
443    /// src/graphics/lib/magma/include/magma/magma_common_defs.h
444    MagmaQueryTotalTime,
445    /// Vendor specific query IDs start here
446    VendorQuery0,
447    #[doc(hidden)]
448    __SourceBreaking { unknown_ordinal: u64 },
449}
450
451/// Pattern that matches an unknown `QueryId` member.
452#[macro_export]
453macro_rules! QueryIdUnknown {
454    () => {
455        _
456    };
457}
458
459impl QueryId {
460    #[inline]
461    pub fn from_primitive(prim: u64) -> Option<Self> {
462        match prim {
463            0 => Some(Self::VendorId),
464            1 => Some(Self::DeviceId),
465            2 => Some(Self::VendorVersion),
466            3 => Some(Self::IsTotalTimeSupported),
467            5 => Some(Self::MaximumInflightParams),
468            500 => Some(Self::MagmaQueryTotalTime),
469            10000 => Some(Self::VendorQuery0),
470            _ => None,
471        }
472    }
473
474    #[inline]
475    pub fn from_primitive_allow_unknown(prim: u64) -> Self {
476        match prim {
477            0 => Self::VendorId,
478            1 => Self::DeviceId,
479            2 => Self::VendorVersion,
480            3 => Self::IsTotalTimeSupported,
481            5 => Self::MaximumInflightParams,
482            500 => Self::MagmaQueryTotalTime,
483            10000 => Self::VendorQuery0,
484            unknown_ordinal => Self::__SourceBreaking { unknown_ordinal },
485        }
486    }
487
488    #[inline]
489    pub fn unknown() -> Self {
490        Self::__SourceBreaking { unknown_ordinal: 0xffffffffffffffff }
491    }
492
493    #[inline]
494    pub const fn into_primitive(self) -> u64 {
495        match self {
496            Self::VendorId => 0,
497            Self::DeviceId => 1,
498            Self::VendorVersion => 2,
499            Self::IsTotalTimeSupported => 3,
500            Self::MaximumInflightParams => 5,
501            Self::MagmaQueryTotalTime => 500,
502            Self::VendorQuery0 => 10000,
503            Self::__SourceBreaking { unknown_ordinal } => unknown_ordinal,
504        }
505    }
506
507    #[inline]
508    pub fn is_unknown(&self) -> bool {
509        match self {
510            Self::__SourceBreaking { unknown_ordinal: _ } => true,
511            _ => false,
512        }
513    }
514}
515
516#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
517#[repr(C)]
518pub struct BufferRange {
519    pub buffer_id: u64,
520    pub offset: u64,
521    pub size: u64,
522}
523
524impl fidl::Persistable for BufferRange {}
525
526/// A command buffer may be used to pass hardware instructions in a shared buffer (VMO).
527#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
528#[repr(C)]
529pub struct CommandBuffer {
530    /// Index of the resource containing instructions to start the command buffer.
531    pub resource_index: u32,
532    /// Starting offset within the resource.
533    pub start_offset: u64,
534}
535
536impl fidl::Persistable for CommandBuffer {}
537
538#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
539#[repr(C)]
540pub struct DebugUtilsSetPowerStateRequest {
541    pub power_state: i64,
542}
543
544impl fidl::Persistable for DebugUtilsSetPowerStateRequest {}
545
546#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
547#[repr(C)]
548pub struct DebugUtilsSetPowerStateResponse {
549    /// The time taken to complete the power state transition, in nanoseconds.
550    pub time_in_ns: u64,
551}
552
553impl fidl::Persistable for DebugUtilsSetPowerStateResponse {}
554
555#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
556pub struct DeviceQueryRequest {
557    pub query_id: QueryId,
558}
559
560impl fidl::Persistable for DeviceQueryRequest {}
561
562#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
563#[repr(C)]
564pub struct DiagnosticDeviceDumpStateRequest {
565    pub dump_type: u32,
566}
567
568impl fidl::Persistable for DiagnosticDeviceDumpStateRequest {}
569
570#[derive(Clone, Debug, PartialEq)]
571pub struct IcdLoaderDeviceGetIcdListResponse {
572    pub icd_list: Vec<IcdInfo>,
573}
574
575impl fidl::Persistable for IcdLoaderDeviceGetIcdListResponse {}
576
577#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
578pub struct PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest {
579    pub pool_id: u64,
580    pub offsets: Vec<BufferRange>,
581}
582
583impl fidl::Persistable for PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest {}
584
585#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
586pub struct PrimaryBufferRangeOp2Request {
587    pub op: BufferOp,
588    pub range: BufferRange,
589}
590
591impl fidl::Persistable for PrimaryBufferRangeOp2Request {}
592
593#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
594pub struct PrimaryClearPerformanceCountersRequest {
595    pub counters: Vec<u64>,
596}
597
598impl fidl::Persistable for PrimaryClearPerformanceCountersRequest {}
599
600#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
601pub struct PrimaryCreateContext2Request {
602    pub context_id: u32,
603    pub priority: Priority,
604}
605
606impl fidl::Persistable for PrimaryCreateContext2Request {}
607
608#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
609#[repr(C)]
610pub struct PrimaryCreateContextRequest {
611    pub context_id: u32,
612}
613
614impl fidl::Persistable for PrimaryCreateContextRequest {}
615
616#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
617#[repr(C)]
618pub struct PrimaryDestroyContextRequest {
619    pub context_id: u32,
620}
621
622impl fidl::Persistable for PrimaryDestroyContextRequest {}
623
624#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
625#[repr(C)]
626pub struct PrimaryDumpPerformanceCountersRequest {
627    pub pool_id: u64,
628    pub trigger_id: u32,
629}
630
631impl fidl::Persistable for PrimaryDumpPerformanceCountersRequest {}
632
633#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
634pub struct PrimaryEnablePerformanceCountersRequest {
635    pub counters: Vec<u64>,
636}
637
638impl fidl::Persistable for PrimaryEnablePerformanceCountersRequest {}
639
640#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
641pub struct PrimaryExecuteCommandRequest {
642    pub context_id: u32,
643    pub resources: Vec<BufferRange>,
644    pub command_buffers: Vec<CommandBuffer>,
645    pub wait_semaphores: Vec<u64>,
646    pub signal_semaphores: Vec<u64>,
647    pub flags: CommandBufferFlags,
648}
649
650impl fidl::Persistable for PrimaryExecuteCommandRequest {}
651
652#[derive(Clone, Debug, PartialEq)]
653pub struct PrimaryExecuteInlineCommandsRequest {
654    pub context_id: u32,
655    pub commands: Vec<InlineCommand>,
656}
657
658impl fidl::Persistable for PrimaryExecuteInlineCommandsRequest {}
659
660#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
661pub struct PrimaryIsPerformanceCounterAccessAllowedResponse {
662    pub enabled: bool,
663}
664
665impl fidl::Persistable for PrimaryIsPerformanceCounterAccessAllowedResponse {}
666
667#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
668#[repr(C)]
669pub struct PrimaryOnNotifyMemoryImportedRequest {
670    pub bytes: u64,
671}
672
673impl fidl::Persistable for PrimaryOnNotifyMemoryImportedRequest {}
674
675#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
676#[repr(C)]
677pub struct PrimaryOnNotifyMessagesConsumedRequest {
678    pub count: u64,
679}
680
681impl fidl::Persistable for PrimaryOnNotifyMessagesConsumedRequest {}
682
683#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
684pub struct PrimaryReleaseObjectRequest {
685    pub object_id: u64,
686    pub object_type: ObjectType,
687}
688
689impl fidl::Persistable for PrimaryReleaseObjectRequest {}
690
691#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
692#[repr(C)]
693pub struct PrimaryReleasePerformanceCounterBufferPoolRequest {
694    pub pool_id: u64,
695}
696
697impl fidl::Persistable for PrimaryReleasePerformanceCounterBufferPoolRequest {}
698
699#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
700#[repr(C)]
701pub struct PrimaryRemovePerformanceCounterBufferFromPoolRequest {
702    pub pool_id: u64,
703    pub buffer_id: u64,
704}
705
706impl fidl::Persistable for PrimaryRemovePerformanceCounterBufferFromPoolRequest {}
707
708#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
709#[repr(C)]
710pub struct TestDevice2GetUnitTestStatusResponse {
711    pub status: i32,
712}
713
714impl fidl::Persistable for TestDevice2GetUnitTestStatusResponse {}
715
716#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
717#[repr(C)]
718pub struct TestDeviceGetUnitTestStatusResponse {
719    pub status: i32,
720}
721
722impl fidl::Persistable for TestDeviceGetUnitTestStatusResponse {}
723
724/// Information about an ICD implementation that can be used with a Magma device.
725#[derive(Clone, Debug, Default, PartialEq)]
726pub struct IcdInfo {
727    /// URL of the component implementation that provides the ICD.
728    pub component_url: Option<String>,
729    /// Flags describing the basic capabilities of the ICD, including what APIs it supports.
730    pub flags: Option<IcdFlags>,
731    #[doc(hidden)]
732    pub __source_breaking: fidl::marker::SourceBreaking,
733}
734
735impl fidl::Persistable for IcdInfo {}
736
737#[derive(Clone, Debug, Default, PartialEq)]
738pub struct InlineCommand {
739    pub data: Option<Vec<u8>>,
740    pub semaphores: Option<Vec<u64>>,
741    #[doc(hidden)]
742    pub __source_breaking: fidl::marker::SourceBreaking,
743}
744
745impl fidl::Persistable for InlineCommand {}
746
747#[derive(Clone, Debug, Default, PartialEq)]
748pub struct PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest {
749    /// Required.
750    pub trigger_id: Option<u32>,
751    /// Required.
752    pub buffer_id: Option<u64>,
753    /// Required.
754    pub buffer_offset: Option<u32>,
755    /// Required.
756    pub timestamp: Option<i64>,
757    /// Required.
758    pub flags: Option<ResultFlags>,
759    #[doc(hidden)]
760    pub __source_breaking: fidl::marker::SourceBreaking,
761}
762
763impl fidl::Persistable for PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest {}
764
765#[derive(Clone, Debug, Default, PartialEq)]
766pub struct PowerElementProviderGetClockSpeedLevelRequest {
767    /// Required. The target frequency.
768    pub hz: Option<u64>,
769    /// If true and `hz` is greater than the maximum clock frequency, then the level
770    /// corresponding to the greatest supported frequency will be returned. If not true (or not
771    /// specified), this call will return `ZX_ERR_OUT_OF_RANGE` if `hz` is greater than the
772    /// maximum clock frequency.
773    pub allow_max: Option<bool>,
774    #[doc(hidden)]
775    pub __source_breaking: fidl::marker::SourceBreaking,
776}
777
778impl fidl::Persistable for PowerElementProviderGetClockSpeedLevelRequest {}
779
780#[derive(Clone, Debug, Default, PartialEq)]
781pub struct PowerElementProviderSetClockLimitRequest {
782    /// Required. The target frequency
783    pub hz: Option<u64>,
784    #[doc(hidden)]
785    pub __source_breaking: fidl::marker::SourceBreaking,
786}
787
788impl fidl::Persistable for PowerElementProviderSetClockLimitRequest {}
789
790#[derive(Clone, Debug, Default, PartialEq)]
791pub struct PrimaryMapBufferRequest {
792    /// Required.
793    pub hw_va: Option<u64>,
794    /// Required.
795    pub range: Option<BufferRange>,
796    pub flags: Option<MapFlags>,
797    #[doc(hidden)]
798    pub __source_breaking: fidl::marker::SourceBreaking,
799}
800
801impl fidl::Persistable for PrimaryMapBufferRequest {}
802
803#[derive(Clone, Debug, Default, PartialEq)]
804pub struct PrimaryUnmapBufferRequest {
805    /// Required.
806    pub hw_va: Option<u64>,
807    /// Required.
808    pub buffer_id: Option<u64>,
809    #[doc(hidden)]
810    pub __source_breaking: fidl::marker::SourceBreaking,
811}
812
813impl fidl::Persistable for PrimaryUnmapBufferRequest {}
814
815pub mod combined_device_ordinals {
816    pub const QUERY: u64 = 0x627d4c6093b078e7;
817    pub const CONNECT2: u64 = 0x3a5b134714c67914;
818    pub const DUMP_STATE: u64 = 0x5420df493d4fa915;
819    pub const GET_ICD_LIST: u64 = 0x7673e76395008257;
820}
821
822pub mod debug_utils_ordinals {
823    pub const SET_POWER_STATE: u64 = 0x1db4f4bbbf7fb866;
824}
825
826pub mod dependency_injection_ordinals {
827    pub const SET_MEMORY_PRESSURE_PROVIDER: u64 = 0x5ef0be960d4b0f4c;
828}
829
830pub mod device_ordinals {
831    pub const QUERY: u64 = 0x627d4c6093b078e7;
832    pub const CONNECT2: u64 = 0x3a5b134714c67914;
833}
834
835pub mod diagnostic_device_ordinals {
836    pub const DUMP_STATE: u64 = 0x5420df493d4fa915;
837}
838
839pub mod icd_loader_device_ordinals {
840    pub const GET_ICD_LIST: u64 = 0x7673e76395008257;
841}
842
843pub mod notification_ordinals {}
844
845pub mod performance_counter_access_ordinals {
846    pub const GET_PERFORMANCE_COUNT_TOKEN: u64 = 0x48410470c5f00f92;
847}
848
849pub mod performance_counter_events_ordinals {
850    pub const ON_PERFORMANCE_COUNTER_READ_COMPLETED: u64 = 0x3f134926720d44d7;
851}
852
853pub mod power_element_provider_ordinals {
854    pub const GET_POWER_GOALS: u64 = 0x2ff49ddffb0e07c0;
855    pub const GET_CLOCK_SPEED_LEVEL: u64 = 0x5315a9bc44a9c53c;
856    pub const SET_CLOCK_LIMIT: u64 = 0x614bf25c3a1571b4;
857}
858
859pub mod primary_ordinals {
860    pub const IMPORT_OBJECT: u64 = 0x5f5a247abb1d9354;
861    pub const RELEASE_OBJECT: u64 = 0x4a65d5885da5e88f;
862    pub const CREATE_CONTEXT: u64 = 0x5a9a91c8b88b5da4;
863    pub const CREATE_CONTEXT2: u64 = 0x5f7e3a5137e758f6;
864    pub const DESTROY_CONTEXT: u64 = 0x26b626e6be162ef0;
865    pub const EXECUTE_COMMAND: u64 = 0xf2799643aadb0db;
866    pub const EXECUTE_INLINE_COMMANDS: u64 = 0x766d5c86f35468a6;
867    pub const FLUSH: u64 = 0x54ccb5572d886039;
868    pub const MAP_BUFFER: u64 = 0x56baa5d2092c8e33;
869    pub const UNMAP_BUFFER: u64 = 0x305188ebd8bcd95c;
870    pub const BUFFER_RANGE_OP2: u64 = 0x4175c8dfef355396;
871    pub const ENABLE_FLOW_CONTROL: u64 = 0x8b5e68f3ee0b22e;
872    pub const ON_NOTIFY_MESSAGES_CONSUMED: u64 = 0x5e8dd0b0b753ac43;
873    pub const ON_NOTIFY_MEMORY_IMPORTED: u64 = 0x50524b7a3503aba6;
874    pub const ENABLE_PERFORMANCE_COUNTER_ACCESS: u64 = 0x51b369ac16588831;
875    pub const IS_PERFORMANCE_COUNTER_ACCESS_ALLOWED: u64 = 0x1933b70c06cc5702;
876    pub const ENABLE_PERFORMANCE_COUNTERS: u64 = 0x52c4db74b601aaa7;
877    pub const CREATE_PERFORMANCE_COUNTER_BUFFER_POOL: u64 = 0x48ccf6519bbbc638;
878    pub const RELEASE_PERFORMANCE_COUNTER_BUFFER_POOL: u64 = 0x18374c4b3ef0b4da;
879    pub const ADD_PERFORMANCE_COUNTER_BUFFER_OFFSETS_TO_POOL: u64 = 0x1f7889571111386b;
880    pub const REMOVE_PERFORMANCE_COUNTER_BUFFER_FROM_POOL: u64 = 0xbf1275f5a36258e;
881    pub const DUMP_PERFORMANCE_COUNTERS: u64 = 0x250b29340be28807;
882    pub const CLEAR_PERFORMANCE_COUNTERS: u64 = 0x236831822eff741a;
883}
884
885pub mod test_device_ordinals {
886    pub const QUERY: u64 = 0x627d4c6093b078e7;
887    pub const CONNECT2: u64 = 0x3a5b134714c67914;
888    pub const DUMP_STATE: u64 = 0x5420df493d4fa915;
889    pub const GET_ICD_LIST: u64 = 0x7673e76395008257;
890    pub const GET_UNIT_TEST_STATUS: u64 = 0x3ebcd9c409c248f1;
891}
892
893pub mod test_device2_ordinals {
894    pub const GET_UNIT_TEST_STATUS: u64 = 0x5be45b0f097813b2;
895}
896
897mod internal {
898    use super::*;
899    unsafe impl fidl::encoding::TypeMarker for CommandBufferFlags {
900        type Owned = Self;
901
902        #[inline(always)]
903        fn inline_align(_context: fidl::encoding::Context) -> usize {
904            8
905        }
906
907        #[inline(always)]
908        fn inline_size(_context: fidl::encoding::Context) -> usize {
909            8
910        }
911    }
912
913    impl fidl::encoding::ValueTypeMarker for CommandBufferFlags {
914        type Borrowed<'a> = Self;
915        #[inline(always)]
916        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
917            *value
918        }
919    }
920
921    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
922        for CommandBufferFlags
923    {
924        #[inline]
925        unsafe fn encode(
926            self,
927            encoder: &mut fidl::encoding::Encoder<'_, D>,
928            offset: usize,
929            _depth: fidl::encoding::Depth,
930        ) -> fidl::Result<()> {
931            encoder.debug_check_bounds::<Self>(offset);
932            encoder.write_num(self.bits(), offset);
933            Ok(())
934        }
935    }
936
937    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommandBufferFlags {
938        #[inline(always)]
939        fn new_empty() -> Self {
940            Self::empty()
941        }
942
943        #[inline]
944        unsafe fn decode(
945            &mut self,
946            decoder: &mut fidl::encoding::Decoder<'_, D>,
947            offset: usize,
948            _depth: fidl::encoding::Depth,
949        ) -> fidl::Result<()> {
950            decoder.debug_check_bounds::<Self>(offset);
951            let prim = decoder.read_num::<u64>(offset);
952            *self = Self::from_bits_allow_unknown(prim);
953            Ok(())
954        }
955    }
956    unsafe impl fidl::encoding::TypeMarker for IcdFlags {
957        type Owned = Self;
958
959        #[inline(always)]
960        fn inline_align(_context: fidl::encoding::Context) -> usize {
961            4
962        }
963
964        #[inline(always)]
965        fn inline_size(_context: fidl::encoding::Context) -> usize {
966            4
967        }
968    }
969
970    impl fidl::encoding::ValueTypeMarker for IcdFlags {
971        type Borrowed<'a> = Self;
972        #[inline(always)]
973        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
974            *value
975        }
976    }
977
978    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for IcdFlags {
979        #[inline]
980        unsafe fn encode(
981            self,
982            encoder: &mut fidl::encoding::Encoder<'_, D>,
983            offset: usize,
984            _depth: fidl::encoding::Depth,
985        ) -> fidl::Result<()> {
986            encoder.debug_check_bounds::<Self>(offset);
987            encoder.write_num(self.bits(), offset);
988            Ok(())
989        }
990    }
991
992    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IcdFlags {
993        #[inline(always)]
994        fn new_empty() -> Self {
995            Self::empty()
996        }
997
998        #[inline]
999        unsafe fn decode(
1000            &mut self,
1001            decoder: &mut fidl::encoding::Decoder<'_, D>,
1002            offset: usize,
1003            _depth: fidl::encoding::Depth,
1004        ) -> fidl::Result<()> {
1005            decoder.debug_check_bounds::<Self>(offset);
1006            let prim = decoder.read_num::<u32>(offset);
1007            *self = Self::from_bits_allow_unknown(prim);
1008            Ok(())
1009        }
1010    }
1011    unsafe impl fidl::encoding::TypeMarker for ImportFlags {
1012        type Owned = Self;
1013
1014        #[inline(always)]
1015        fn inline_align(_context: fidl::encoding::Context) -> usize {
1016            8
1017        }
1018
1019        #[inline(always)]
1020        fn inline_size(_context: fidl::encoding::Context) -> usize {
1021            8
1022        }
1023    }
1024
1025    impl fidl::encoding::ValueTypeMarker for ImportFlags {
1026        type Borrowed<'a> = Self;
1027        #[inline(always)]
1028        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1029            *value
1030        }
1031    }
1032
1033    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ImportFlags {
1034        #[inline]
1035        unsafe fn encode(
1036            self,
1037            encoder: &mut fidl::encoding::Encoder<'_, D>,
1038            offset: usize,
1039            _depth: fidl::encoding::Depth,
1040        ) -> fidl::Result<()> {
1041            encoder.debug_check_bounds::<Self>(offset);
1042            encoder.write_num(self.bits(), offset);
1043            Ok(())
1044        }
1045    }
1046
1047    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ImportFlags {
1048        #[inline(always)]
1049        fn new_empty() -> Self {
1050            Self::empty()
1051        }
1052
1053        #[inline]
1054        unsafe fn decode(
1055            &mut self,
1056            decoder: &mut fidl::encoding::Decoder<'_, D>,
1057            offset: usize,
1058            _depth: fidl::encoding::Depth,
1059        ) -> fidl::Result<()> {
1060            decoder.debug_check_bounds::<Self>(offset);
1061            let prim = decoder.read_num::<u64>(offset);
1062            *self = Self::from_bits_allow_unknown(prim);
1063            Ok(())
1064        }
1065    }
1066    unsafe impl fidl::encoding::TypeMarker for MapFlags {
1067        type Owned = Self;
1068
1069        #[inline(always)]
1070        fn inline_align(_context: fidl::encoding::Context) -> usize {
1071            8
1072        }
1073
1074        #[inline(always)]
1075        fn inline_size(_context: fidl::encoding::Context) -> usize {
1076            8
1077        }
1078    }
1079
1080    impl fidl::encoding::ValueTypeMarker for MapFlags {
1081        type Borrowed<'a> = Self;
1082        #[inline(always)]
1083        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1084            *value
1085        }
1086    }
1087
1088    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for MapFlags {
1089        #[inline]
1090        unsafe fn encode(
1091            self,
1092            encoder: &mut fidl::encoding::Encoder<'_, D>,
1093            offset: usize,
1094            _depth: fidl::encoding::Depth,
1095        ) -> fidl::Result<()> {
1096            encoder.debug_check_bounds::<Self>(offset);
1097            encoder.write_num(self.bits(), offset);
1098            Ok(())
1099        }
1100    }
1101
1102    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MapFlags {
1103        #[inline(always)]
1104        fn new_empty() -> Self {
1105            Self::empty()
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            let prim = decoder.read_num::<u64>(offset);
1117            *self = Self::from_bits_allow_unknown(prim);
1118            Ok(())
1119        }
1120    }
1121    unsafe impl fidl::encoding::TypeMarker for ResultFlags {
1122        type Owned = Self;
1123
1124        #[inline(always)]
1125        fn inline_align(_context: fidl::encoding::Context) -> usize {
1126            4
1127        }
1128
1129        #[inline(always)]
1130        fn inline_size(_context: fidl::encoding::Context) -> usize {
1131            4
1132        }
1133    }
1134
1135    impl fidl::encoding::ValueTypeMarker for ResultFlags {
1136        type Borrowed<'a> = Self;
1137        #[inline(always)]
1138        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1139            *value
1140        }
1141    }
1142
1143    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ResultFlags {
1144        #[inline]
1145        unsafe fn encode(
1146            self,
1147            encoder: &mut fidl::encoding::Encoder<'_, D>,
1148            offset: usize,
1149            _depth: fidl::encoding::Depth,
1150        ) -> fidl::Result<()> {
1151            encoder.debug_check_bounds::<Self>(offset);
1152            encoder.write_num(self.bits(), offset);
1153            Ok(())
1154        }
1155    }
1156
1157    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ResultFlags {
1158        #[inline(always)]
1159        fn new_empty() -> Self {
1160            Self::empty()
1161        }
1162
1163        #[inline]
1164        unsafe fn decode(
1165            &mut self,
1166            decoder: &mut fidl::encoding::Decoder<'_, D>,
1167            offset: usize,
1168            _depth: fidl::encoding::Depth,
1169        ) -> fidl::Result<()> {
1170            decoder.debug_check_bounds::<Self>(offset);
1171            let prim = decoder.read_num::<u32>(offset);
1172            *self = Self::from_bits_allow_unknown(prim);
1173            Ok(())
1174        }
1175    }
1176    unsafe impl fidl::encoding::TypeMarker for BufferOp {
1177        type Owned = Self;
1178
1179        #[inline(always)]
1180        fn inline_align(_context: fidl::encoding::Context) -> usize {
1181            std::mem::align_of::<u32>()
1182        }
1183
1184        #[inline(always)]
1185        fn inline_size(_context: fidl::encoding::Context) -> usize {
1186            std::mem::size_of::<u32>()
1187        }
1188
1189        #[inline(always)]
1190        fn encode_is_copy() -> bool {
1191            false
1192        }
1193
1194        #[inline(always)]
1195        fn decode_is_copy() -> bool {
1196            false
1197        }
1198    }
1199
1200    impl fidl::encoding::ValueTypeMarker for BufferOp {
1201        type Borrowed<'a> = Self;
1202        #[inline(always)]
1203        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1204            *value
1205        }
1206    }
1207
1208    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for BufferOp {
1209        #[inline]
1210        unsafe fn encode(
1211            self,
1212            encoder: &mut fidl::encoding::Encoder<'_, D>,
1213            offset: usize,
1214            _depth: fidl::encoding::Depth,
1215        ) -> fidl::Result<()> {
1216            encoder.debug_check_bounds::<Self>(offset);
1217            encoder.write_num(self.into_primitive(), offset);
1218            Ok(())
1219        }
1220    }
1221
1222    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferOp {
1223        #[inline(always)]
1224        fn new_empty() -> Self {
1225            Self::unknown()
1226        }
1227
1228        #[inline]
1229        unsafe fn decode(
1230            &mut self,
1231            decoder: &mut fidl::encoding::Decoder<'_, D>,
1232            offset: usize,
1233            _depth: fidl::encoding::Depth,
1234        ) -> fidl::Result<()> {
1235            decoder.debug_check_bounds::<Self>(offset);
1236            let prim = decoder.read_num::<u32>(offset);
1237
1238            *self = Self::from_primitive_allow_unknown(prim);
1239            Ok(())
1240        }
1241    }
1242    unsafe impl fidl::encoding::TypeMarker for ObjectType {
1243        type Owned = Self;
1244
1245        #[inline(always)]
1246        fn inline_align(_context: fidl::encoding::Context) -> usize {
1247            std::mem::align_of::<u32>()
1248        }
1249
1250        #[inline(always)]
1251        fn inline_size(_context: fidl::encoding::Context) -> usize {
1252            std::mem::size_of::<u32>()
1253        }
1254
1255        #[inline(always)]
1256        fn encode_is_copy() -> bool {
1257            false
1258        }
1259
1260        #[inline(always)]
1261        fn decode_is_copy() -> bool {
1262            false
1263        }
1264    }
1265
1266    impl fidl::encoding::ValueTypeMarker for ObjectType {
1267        type Borrowed<'a> = Self;
1268        #[inline(always)]
1269        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1270            *value
1271        }
1272    }
1273
1274    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ObjectType {
1275        #[inline]
1276        unsafe fn encode(
1277            self,
1278            encoder: &mut fidl::encoding::Encoder<'_, D>,
1279            offset: usize,
1280            _depth: fidl::encoding::Depth,
1281        ) -> fidl::Result<()> {
1282            encoder.debug_check_bounds::<Self>(offset);
1283            encoder.write_num(self.into_primitive(), offset);
1284            Ok(())
1285        }
1286    }
1287
1288    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ObjectType {
1289        #[inline(always)]
1290        fn new_empty() -> Self {
1291            Self::unknown()
1292        }
1293
1294        #[inline]
1295        unsafe fn decode(
1296            &mut self,
1297            decoder: &mut fidl::encoding::Decoder<'_, D>,
1298            offset: usize,
1299            _depth: fidl::encoding::Depth,
1300        ) -> fidl::Result<()> {
1301            decoder.debug_check_bounds::<Self>(offset);
1302            let prim = decoder.read_num::<u32>(offset);
1303
1304            *self = Self::from_primitive_allow_unknown(prim);
1305            Ok(())
1306        }
1307    }
1308    unsafe impl fidl::encoding::TypeMarker for PowerGoalType {
1309        type Owned = Self;
1310
1311        #[inline(always)]
1312        fn inline_align(_context: fidl::encoding::Context) -> usize {
1313            std::mem::align_of::<u64>()
1314        }
1315
1316        #[inline(always)]
1317        fn inline_size(_context: fidl::encoding::Context) -> usize {
1318            std::mem::size_of::<u64>()
1319        }
1320
1321        #[inline(always)]
1322        fn encode_is_copy() -> bool {
1323            false
1324        }
1325
1326        #[inline(always)]
1327        fn decode_is_copy() -> bool {
1328            false
1329        }
1330    }
1331
1332    impl fidl::encoding::ValueTypeMarker for PowerGoalType {
1333        type Borrowed<'a> = Self;
1334        #[inline(always)]
1335        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1336            *value
1337        }
1338    }
1339
1340    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for PowerGoalType {
1341        #[inline]
1342        unsafe fn encode(
1343            self,
1344            encoder: &mut fidl::encoding::Encoder<'_, D>,
1345            offset: usize,
1346            _depth: fidl::encoding::Depth,
1347        ) -> fidl::Result<()> {
1348            encoder.debug_check_bounds::<Self>(offset);
1349            encoder.write_num(self.into_primitive(), offset);
1350            Ok(())
1351        }
1352    }
1353
1354    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for PowerGoalType {
1355        #[inline(always)]
1356        fn new_empty() -> Self {
1357            Self::unknown()
1358        }
1359
1360        #[inline]
1361        unsafe fn decode(
1362            &mut self,
1363            decoder: &mut fidl::encoding::Decoder<'_, D>,
1364            offset: usize,
1365            _depth: fidl::encoding::Depth,
1366        ) -> fidl::Result<()> {
1367            decoder.debug_check_bounds::<Self>(offset);
1368            let prim = decoder.read_num::<u64>(offset);
1369
1370            *self = Self::from_primitive_allow_unknown(prim);
1371            Ok(())
1372        }
1373    }
1374    unsafe impl fidl::encoding::TypeMarker for Priority {
1375        type Owned = Self;
1376
1377        #[inline(always)]
1378        fn inline_align(_context: fidl::encoding::Context) -> usize {
1379            std::mem::align_of::<u64>()
1380        }
1381
1382        #[inline(always)]
1383        fn inline_size(_context: fidl::encoding::Context) -> usize {
1384            std::mem::size_of::<u64>()
1385        }
1386
1387        #[inline(always)]
1388        fn encode_is_copy() -> bool {
1389            false
1390        }
1391
1392        #[inline(always)]
1393        fn decode_is_copy() -> bool {
1394            false
1395        }
1396    }
1397
1398    impl fidl::encoding::ValueTypeMarker for Priority {
1399        type Borrowed<'a> = Self;
1400        #[inline(always)]
1401        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1402            *value
1403        }
1404    }
1405
1406    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for Priority {
1407        #[inline]
1408        unsafe fn encode(
1409            self,
1410            encoder: &mut fidl::encoding::Encoder<'_, D>,
1411            offset: usize,
1412            _depth: fidl::encoding::Depth,
1413        ) -> fidl::Result<()> {
1414            encoder.debug_check_bounds::<Self>(offset);
1415            encoder.write_num(self.into_primitive(), offset);
1416            Ok(())
1417        }
1418    }
1419
1420    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Priority {
1421        #[inline(always)]
1422        fn new_empty() -> Self {
1423            Self::unknown()
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 prim = decoder.read_num::<u64>(offset);
1435
1436            *self = Self::from_primitive_allow_unknown(prim);
1437            Ok(())
1438        }
1439    }
1440    unsafe impl fidl::encoding::TypeMarker for QueryId {
1441        type Owned = Self;
1442
1443        #[inline(always)]
1444        fn inline_align(_context: fidl::encoding::Context) -> usize {
1445            std::mem::align_of::<u64>()
1446        }
1447
1448        #[inline(always)]
1449        fn inline_size(_context: fidl::encoding::Context) -> usize {
1450            std::mem::size_of::<u64>()
1451        }
1452
1453        #[inline(always)]
1454        fn encode_is_copy() -> bool {
1455            false
1456        }
1457
1458        #[inline(always)]
1459        fn decode_is_copy() -> bool {
1460            false
1461        }
1462    }
1463
1464    impl fidl::encoding::ValueTypeMarker for QueryId {
1465        type Borrowed<'a> = Self;
1466        #[inline(always)]
1467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1468            *value
1469        }
1470    }
1471
1472    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for QueryId {
1473        #[inline]
1474        unsafe fn encode(
1475            self,
1476            encoder: &mut fidl::encoding::Encoder<'_, D>,
1477            offset: usize,
1478            _depth: fidl::encoding::Depth,
1479        ) -> fidl::Result<()> {
1480            encoder.debug_check_bounds::<Self>(offset);
1481            encoder.write_num(self.into_primitive(), offset);
1482            Ok(())
1483        }
1484    }
1485
1486    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for QueryId {
1487        #[inline(always)]
1488        fn new_empty() -> Self {
1489            Self::unknown()
1490        }
1491
1492        #[inline]
1493        unsafe fn decode(
1494            &mut self,
1495            decoder: &mut fidl::encoding::Decoder<'_, D>,
1496            offset: usize,
1497            _depth: fidl::encoding::Depth,
1498        ) -> fidl::Result<()> {
1499            decoder.debug_check_bounds::<Self>(offset);
1500            let prim = decoder.read_num::<u64>(offset);
1501
1502            *self = Self::from_primitive_allow_unknown(prim);
1503            Ok(())
1504        }
1505    }
1506
1507    impl fidl::encoding::ValueTypeMarker for BufferRange {
1508        type Borrowed<'a> = &'a Self;
1509        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1510            value
1511        }
1512    }
1513
1514    unsafe impl fidl::encoding::TypeMarker for BufferRange {
1515        type Owned = Self;
1516
1517        #[inline(always)]
1518        fn inline_align(_context: fidl::encoding::Context) -> usize {
1519            8
1520        }
1521
1522        #[inline(always)]
1523        fn inline_size(_context: fidl::encoding::Context) -> usize {
1524            24
1525        }
1526        #[inline(always)]
1527        fn encode_is_copy() -> bool {
1528            true
1529        }
1530
1531        #[inline(always)]
1532        fn decode_is_copy() -> bool {
1533            true
1534        }
1535    }
1536
1537    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<BufferRange, D>
1538        for &BufferRange
1539    {
1540        #[inline]
1541        unsafe fn encode(
1542            self,
1543            encoder: &mut fidl::encoding::Encoder<'_, D>,
1544            offset: usize,
1545            _depth: fidl::encoding::Depth,
1546        ) -> fidl::Result<()> {
1547            encoder.debug_check_bounds::<BufferRange>(offset);
1548            unsafe {
1549                // Copy the object into the buffer.
1550                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1551                (buf_ptr as *mut BufferRange).write_unaligned((self as *const BufferRange).read());
1552                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1553                // done second because the memcpy will write garbage to these bytes.
1554            }
1555            Ok(())
1556        }
1557    }
1558    unsafe impl<
1559        D: fidl::encoding::ResourceDialect,
1560        T0: fidl::encoding::Encode<u64, D>,
1561        T1: fidl::encoding::Encode<u64, D>,
1562        T2: fidl::encoding::Encode<u64, D>,
1563    > fidl::encoding::Encode<BufferRange, D> for (T0, T1, T2)
1564    {
1565        #[inline]
1566        unsafe fn encode(
1567            self,
1568            encoder: &mut fidl::encoding::Encoder<'_, D>,
1569            offset: usize,
1570            depth: fidl::encoding::Depth,
1571        ) -> fidl::Result<()> {
1572            encoder.debug_check_bounds::<BufferRange>(offset);
1573            // Zero out padding regions. There's no need to apply masks
1574            // because the unmasked parts will be overwritten by fields.
1575            // Write the fields.
1576            self.0.encode(encoder, offset + 0, depth)?;
1577            self.1.encode(encoder, offset + 8, depth)?;
1578            self.2.encode(encoder, offset + 16, depth)?;
1579            Ok(())
1580        }
1581    }
1582
1583    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for BufferRange {
1584        #[inline(always)]
1585        fn new_empty() -> Self {
1586            Self {
1587                buffer_id: fidl::new_empty!(u64, D),
1588                offset: fidl::new_empty!(u64, D),
1589                size: fidl::new_empty!(u64, D),
1590            }
1591        }
1592
1593        #[inline]
1594        unsafe fn decode(
1595            &mut self,
1596            decoder: &mut fidl::encoding::Decoder<'_, D>,
1597            offset: usize,
1598            _depth: fidl::encoding::Depth,
1599        ) -> fidl::Result<()> {
1600            decoder.debug_check_bounds::<Self>(offset);
1601            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1602            // Verify that padding bytes are zero.
1603            // Copy from the buffer into the object.
1604            unsafe {
1605                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 24);
1606            }
1607            Ok(())
1608        }
1609    }
1610
1611    impl fidl::encoding::ValueTypeMarker for CommandBuffer {
1612        type Borrowed<'a> = &'a Self;
1613        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1614            value
1615        }
1616    }
1617
1618    unsafe impl fidl::encoding::TypeMarker for CommandBuffer {
1619        type Owned = Self;
1620
1621        #[inline(always)]
1622        fn inline_align(_context: fidl::encoding::Context) -> usize {
1623            8
1624        }
1625
1626        #[inline(always)]
1627        fn inline_size(_context: fidl::encoding::Context) -> usize {
1628            16
1629        }
1630    }
1631
1632    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<CommandBuffer, D>
1633        for &CommandBuffer
1634    {
1635        #[inline]
1636        unsafe fn encode(
1637            self,
1638            encoder: &mut fidl::encoding::Encoder<'_, D>,
1639            offset: usize,
1640            _depth: fidl::encoding::Depth,
1641        ) -> fidl::Result<()> {
1642            encoder.debug_check_bounds::<CommandBuffer>(offset);
1643            unsafe {
1644                // Copy the object into the buffer.
1645                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1646                (buf_ptr as *mut CommandBuffer)
1647                    .write_unaligned((self as *const CommandBuffer).read());
1648                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1649                // done second because the memcpy will write garbage to these bytes.
1650                let padding_ptr = buf_ptr.offset(0) as *mut u64;
1651                let padding_mask = 0xffffffff00000000u64;
1652                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
1653            }
1654            Ok(())
1655        }
1656    }
1657    unsafe impl<
1658        D: fidl::encoding::ResourceDialect,
1659        T0: fidl::encoding::Encode<u32, D>,
1660        T1: fidl::encoding::Encode<u64, D>,
1661    > fidl::encoding::Encode<CommandBuffer, D> for (T0, T1)
1662    {
1663        #[inline]
1664        unsafe fn encode(
1665            self,
1666            encoder: &mut fidl::encoding::Encoder<'_, D>,
1667            offset: usize,
1668            depth: fidl::encoding::Depth,
1669        ) -> fidl::Result<()> {
1670            encoder.debug_check_bounds::<CommandBuffer>(offset);
1671            // Zero out padding regions. There's no need to apply masks
1672            // because the unmasked parts will be overwritten by fields.
1673            unsafe {
1674                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1675                (ptr as *mut u64).write_unaligned(0);
1676            }
1677            // Write the fields.
1678            self.0.encode(encoder, offset + 0, depth)?;
1679            self.1.encode(encoder, offset + 8, depth)?;
1680            Ok(())
1681        }
1682    }
1683
1684    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for CommandBuffer {
1685        #[inline(always)]
1686        fn new_empty() -> Self {
1687            Self {
1688                resource_index: fidl::new_empty!(u32, D),
1689                start_offset: fidl::new_empty!(u64, D),
1690            }
1691        }
1692
1693        #[inline]
1694        unsafe fn decode(
1695            &mut self,
1696            decoder: &mut fidl::encoding::Decoder<'_, D>,
1697            offset: usize,
1698            _depth: fidl::encoding::Depth,
1699        ) -> fidl::Result<()> {
1700            decoder.debug_check_bounds::<Self>(offset);
1701            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1702            // Verify that padding bytes are zero.
1703            let ptr = unsafe { buf_ptr.offset(0) };
1704            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1705            let mask = 0xffffffff00000000u64;
1706            let maskedval = padval & mask;
1707            if maskedval != 0 {
1708                return Err(fidl::Error::NonZeroPadding {
1709                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1710                });
1711            }
1712            // Copy from the buffer into the object.
1713            unsafe {
1714                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1715            }
1716            Ok(())
1717        }
1718    }
1719
1720    impl fidl::encoding::ValueTypeMarker for DebugUtilsSetPowerStateRequest {
1721        type Borrowed<'a> = &'a Self;
1722        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1723            value
1724        }
1725    }
1726
1727    unsafe impl fidl::encoding::TypeMarker for DebugUtilsSetPowerStateRequest {
1728        type Owned = Self;
1729
1730        #[inline(always)]
1731        fn inline_align(_context: fidl::encoding::Context) -> usize {
1732            8
1733        }
1734
1735        #[inline(always)]
1736        fn inline_size(_context: fidl::encoding::Context) -> usize {
1737            8
1738        }
1739        #[inline(always)]
1740        fn encode_is_copy() -> bool {
1741            true
1742        }
1743
1744        #[inline(always)]
1745        fn decode_is_copy() -> bool {
1746            true
1747        }
1748    }
1749
1750    unsafe impl<D: fidl::encoding::ResourceDialect>
1751        fidl::encoding::Encode<DebugUtilsSetPowerStateRequest, D>
1752        for &DebugUtilsSetPowerStateRequest
1753    {
1754        #[inline]
1755        unsafe fn encode(
1756            self,
1757            encoder: &mut fidl::encoding::Encoder<'_, D>,
1758            offset: usize,
1759            _depth: fidl::encoding::Depth,
1760        ) -> fidl::Result<()> {
1761            encoder.debug_check_bounds::<DebugUtilsSetPowerStateRequest>(offset);
1762            unsafe {
1763                // Copy the object into the buffer.
1764                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1765                (buf_ptr as *mut DebugUtilsSetPowerStateRequest)
1766                    .write_unaligned((self as *const DebugUtilsSetPowerStateRequest).read());
1767                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1768                // done second because the memcpy will write garbage to these bytes.
1769            }
1770            Ok(())
1771        }
1772    }
1773    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1774        fidl::encoding::Encode<DebugUtilsSetPowerStateRequest, D> for (T0,)
1775    {
1776        #[inline]
1777        unsafe fn encode(
1778            self,
1779            encoder: &mut fidl::encoding::Encoder<'_, D>,
1780            offset: usize,
1781            depth: fidl::encoding::Depth,
1782        ) -> fidl::Result<()> {
1783            encoder.debug_check_bounds::<DebugUtilsSetPowerStateRequest>(offset);
1784            // Zero out padding regions. There's no need to apply masks
1785            // because the unmasked parts will be overwritten by fields.
1786            // Write the fields.
1787            self.0.encode(encoder, offset + 0, depth)?;
1788            Ok(())
1789        }
1790    }
1791
1792    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1793        for DebugUtilsSetPowerStateRequest
1794    {
1795        #[inline(always)]
1796        fn new_empty() -> Self {
1797            Self { power_state: fidl::new_empty!(i64, 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 DebugUtilsSetPowerStateResponse {
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 DebugUtilsSetPowerStateResponse {
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            8
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<DebugUtilsSetPowerStateResponse, D>
1850        for &DebugUtilsSetPowerStateResponse
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::<DebugUtilsSetPowerStateResponse>(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 DebugUtilsSetPowerStateResponse)
1864                    .write_unaligned((self as *const DebugUtilsSetPowerStateResponse).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<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
1872        fidl::encoding::Encode<DebugUtilsSetPowerStateResponse, D> for (T0,)
1873    {
1874        #[inline]
1875        unsafe fn encode(
1876            self,
1877            encoder: &mut fidl::encoding::Encoder<'_, D>,
1878            offset: usize,
1879            depth: fidl::encoding::Depth,
1880        ) -> fidl::Result<()> {
1881            encoder.debug_check_bounds::<DebugUtilsSetPowerStateResponse>(offset);
1882            // Zero out padding regions. There's no need to apply masks
1883            // because the unmasked parts will be overwritten by fields.
1884            // Write the fields.
1885            self.0.encode(encoder, offset + 0, depth)?;
1886            Ok(())
1887        }
1888    }
1889
1890    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1891        for DebugUtilsSetPowerStateResponse
1892    {
1893        #[inline(always)]
1894        fn new_empty() -> Self {
1895            Self { time_in_ns: fidl::new_empty!(u64, D) }
1896        }
1897
1898        #[inline]
1899        unsafe fn decode(
1900            &mut self,
1901            decoder: &mut fidl::encoding::Decoder<'_, D>,
1902            offset: usize,
1903            _depth: fidl::encoding::Depth,
1904        ) -> fidl::Result<()> {
1905            decoder.debug_check_bounds::<Self>(offset);
1906            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1907            // Verify that padding bytes are zero.
1908            // Copy from the buffer into the object.
1909            unsafe {
1910                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1911            }
1912            Ok(())
1913        }
1914    }
1915
1916    impl fidl::encoding::ValueTypeMarker for DeviceQueryRequest {
1917        type Borrowed<'a> = &'a Self;
1918        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1919            value
1920        }
1921    }
1922
1923    unsafe impl fidl::encoding::TypeMarker for DeviceQueryRequest {
1924        type Owned = Self;
1925
1926        #[inline(always)]
1927        fn inline_align(_context: fidl::encoding::Context) -> usize {
1928            8
1929        }
1930
1931        #[inline(always)]
1932        fn inline_size(_context: fidl::encoding::Context) -> usize {
1933            8
1934        }
1935    }
1936
1937    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<DeviceQueryRequest, D>
1938        for &DeviceQueryRequest
1939    {
1940        #[inline]
1941        unsafe fn encode(
1942            self,
1943            encoder: &mut fidl::encoding::Encoder<'_, D>,
1944            offset: usize,
1945            _depth: fidl::encoding::Depth,
1946        ) -> fidl::Result<()> {
1947            encoder.debug_check_bounds::<DeviceQueryRequest>(offset);
1948            // Delegate to tuple encoding.
1949            fidl::encoding::Encode::<DeviceQueryRequest, D>::encode(
1950                (<QueryId as fidl::encoding::ValueTypeMarker>::borrow(&self.query_id),),
1951                encoder,
1952                offset,
1953                _depth,
1954            )
1955        }
1956    }
1957    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<QueryId, D>>
1958        fidl::encoding::Encode<DeviceQueryRequest, D> for (T0,)
1959    {
1960        #[inline]
1961        unsafe fn encode(
1962            self,
1963            encoder: &mut fidl::encoding::Encoder<'_, D>,
1964            offset: usize,
1965            depth: fidl::encoding::Depth,
1966        ) -> fidl::Result<()> {
1967            encoder.debug_check_bounds::<DeviceQueryRequest>(offset);
1968            // Zero out padding regions. There's no need to apply masks
1969            // because the unmasked parts will be overwritten by fields.
1970            // Write the fields.
1971            self.0.encode(encoder, offset + 0, depth)?;
1972            Ok(())
1973        }
1974    }
1975
1976    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for DeviceQueryRequest {
1977        #[inline(always)]
1978        fn new_empty() -> Self {
1979            Self { query_id: fidl::new_empty!(QueryId, D) }
1980        }
1981
1982        #[inline]
1983        unsafe fn decode(
1984            &mut self,
1985            decoder: &mut fidl::encoding::Decoder<'_, D>,
1986            offset: usize,
1987            _depth: fidl::encoding::Depth,
1988        ) -> fidl::Result<()> {
1989            decoder.debug_check_bounds::<Self>(offset);
1990            // Verify that padding bytes are zero.
1991            fidl::decode!(QueryId, D, &mut self.query_id, decoder, offset + 0, _depth)?;
1992            Ok(())
1993        }
1994    }
1995
1996    impl fidl::encoding::ValueTypeMarker for DiagnosticDeviceDumpStateRequest {
1997        type Borrowed<'a> = &'a Self;
1998        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1999            value
2000        }
2001    }
2002
2003    unsafe impl fidl::encoding::TypeMarker for DiagnosticDeviceDumpStateRequest {
2004        type Owned = Self;
2005
2006        #[inline(always)]
2007        fn inline_align(_context: fidl::encoding::Context) -> usize {
2008            4
2009        }
2010
2011        #[inline(always)]
2012        fn inline_size(_context: fidl::encoding::Context) -> usize {
2013            4
2014        }
2015        #[inline(always)]
2016        fn encode_is_copy() -> bool {
2017            true
2018        }
2019
2020        #[inline(always)]
2021        fn decode_is_copy() -> bool {
2022            true
2023        }
2024    }
2025
2026    unsafe impl<D: fidl::encoding::ResourceDialect>
2027        fidl::encoding::Encode<DiagnosticDeviceDumpStateRequest, D>
2028        for &DiagnosticDeviceDumpStateRequest
2029    {
2030        #[inline]
2031        unsafe fn encode(
2032            self,
2033            encoder: &mut fidl::encoding::Encoder<'_, D>,
2034            offset: usize,
2035            _depth: fidl::encoding::Depth,
2036        ) -> fidl::Result<()> {
2037            encoder.debug_check_bounds::<DiagnosticDeviceDumpStateRequest>(offset);
2038            unsafe {
2039                // Copy the object into the buffer.
2040                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2041                (buf_ptr as *mut DiagnosticDeviceDumpStateRequest)
2042                    .write_unaligned((self as *const DiagnosticDeviceDumpStateRequest).read());
2043                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2044                // done second because the memcpy will write garbage to these bytes.
2045            }
2046            Ok(())
2047        }
2048    }
2049    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
2050        fidl::encoding::Encode<DiagnosticDeviceDumpStateRequest, D> for (T0,)
2051    {
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::<DiagnosticDeviceDumpStateRequest>(offset);
2060            // Zero out padding regions. There's no need to apply masks
2061            // because the unmasked parts will be overwritten by fields.
2062            // Write the fields.
2063            self.0.encode(encoder, offset + 0, depth)?;
2064            Ok(())
2065        }
2066    }
2067
2068    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2069        for DiagnosticDeviceDumpStateRequest
2070    {
2071        #[inline(always)]
2072        fn new_empty() -> Self {
2073            Self { dump_type: fidl::new_empty!(u32, D) }
2074        }
2075
2076        #[inline]
2077        unsafe fn decode(
2078            &mut self,
2079            decoder: &mut fidl::encoding::Decoder<'_, D>,
2080            offset: usize,
2081            _depth: fidl::encoding::Depth,
2082        ) -> fidl::Result<()> {
2083            decoder.debug_check_bounds::<Self>(offset);
2084            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2085            // Verify that padding bytes are zero.
2086            // Copy from the buffer into the object.
2087            unsafe {
2088                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2089            }
2090            Ok(())
2091        }
2092    }
2093
2094    impl fidl::encoding::ValueTypeMarker for IcdLoaderDeviceGetIcdListResponse {
2095        type Borrowed<'a> = &'a Self;
2096        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2097            value
2098        }
2099    }
2100
2101    unsafe impl fidl::encoding::TypeMarker for IcdLoaderDeviceGetIcdListResponse {
2102        type Owned = Self;
2103
2104        #[inline(always)]
2105        fn inline_align(_context: fidl::encoding::Context) -> usize {
2106            8
2107        }
2108
2109        #[inline(always)]
2110        fn inline_size(_context: fidl::encoding::Context) -> usize {
2111            16
2112        }
2113    }
2114
2115    unsafe impl<D: fidl::encoding::ResourceDialect>
2116        fidl::encoding::Encode<IcdLoaderDeviceGetIcdListResponse, D>
2117        for &IcdLoaderDeviceGetIcdListResponse
2118    {
2119        #[inline]
2120        unsafe fn encode(
2121            self,
2122            encoder: &mut fidl::encoding::Encoder<'_, D>,
2123            offset: usize,
2124            _depth: fidl::encoding::Depth,
2125        ) -> fidl::Result<()> {
2126            encoder.debug_check_bounds::<IcdLoaderDeviceGetIcdListResponse>(offset);
2127            // Delegate to tuple encoding.
2128            fidl::encoding::Encode::<IcdLoaderDeviceGetIcdListResponse, D>::encode(
2129                (<fidl::encoding::Vector<IcdInfo, 8> as fidl::encoding::ValueTypeMarker>::borrow(
2130                    &self.icd_list,
2131                ),),
2132                encoder,
2133                offset,
2134                _depth,
2135            )
2136        }
2137    }
2138    unsafe impl<
2139        D: fidl::encoding::ResourceDialect,
2140        T0: fidl::encoding::Encode<fidl::encoding::Vector<IcdInfo, 8>, D>,
2141    > fidl::encoding::Encode<IcdLoaderDeviceGetIcdListResponse, D> for (T0,)
2142    {
2143        #[inline]
2144        unsafe fn encode(
2145            self,
2146            encoder: &mut fidl::encoding::Encoder<'_, D>,
2147            offset: usize,
2148            depth: fidl::encoding::Depth,
2149        ) -> fidl::Result<()> {
2150            encoder.debug_check_bounds::<IcdLoaderDeviceGetIcdListResponse>(offset);
2151            // Zero out padding regions. There's no need to apply masks
2152            // because the unmasked parts will be overwritten by fields.
2153            // Write the fields.
2154            self.0.encode(encoder, offset + 0, depth)?;
2155            Ok(())
2156        }
2157    }
2158
2159    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2160        for IcdLoaderDeviceGetIcdListResponse
2161    {
2162        #[inline(always)]
2163        fn new_empty() -> Self {
2164            Self { icd_list: fidl::new_empty!(fidl::encoding::Vector<IcdInfo, 8>, D) }
2165        }
2166
2167        #[inline]
2168        unsafe fn decode(
2169            &mut self,
2170            decoder: &mut fidl::encoding::Decoder<'_, D>,
2171            offset: usize,
2172            _depth: fidl::encoding::Depth,
2173        ) -> fidl::Result<()> {
2174            decoder.debug_check_bounds::<Self>(offset);
2175            // Verify that padding bytes are zero.
2176            fidl::decode!(fidl::encoding::Vector<IcdInfo, 8>, D, &mut self.icd_list, decoder, offset + 0, _depth)?;
2177            Ok(())
2178        }
2179    }
2180
2181    impl fidl::encoding::ValueTypeMarker for PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest {
2182        type Borrowed<'a> = &'a Self;
2183        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2184            value
2185        }
2186    }
2187
2188    unsafe impl fidl::encoding::TypeMarker for PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest {
2189        type Owned = Self;
2190
2191        #[inline(always)]
2192        fn inline_align(_context: fidl::encoding::Context) -> usize {
2193            8
2194        }
2195
2196        #[inline(always)]
2197        fn inline_size(_context: fidl::encoding::Context) -> usize {
2198            24
2199        }
2200    }
2201
2202    unsafe impl<D: fidl::encoding::ResourceDialect>
2203        fidl::encoding::Encode<PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest, D>
2204        for &PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest
2205    {
2206        #[inline]
2207        unsafe fn encode(
2208            self,
2209            encoder: &mut fidl::encoding::Encoder<'_, D>,
2210            offset: usize,
2211            _depth: fidl::encoding::Depth,
2212        ) -> fidl::Result<()> {
2213            encoder.debug_check_bounds::<PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest>(
2214                offset,
2215            );
2216            // Delegate to tuple encoding.
2217            fidl::encoding::Encode::<PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest, D>::encode(
2218                (
2219                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.pool_id),
2220                    <fidl::encoding::Vector<BufferRange, 64> as fidl::encoding::ValueTypeMarker>::borrow(&self.offsets),
2221                ),
2222                encoder, offset, _depth
2223            )
2224        }
2225    }
2226    unsafe impl<
2227        D: fidl::encoding::ResourceDialect,
2228        T0: fidl::encoding::Encode<u64, D>,
2229        T1: fidl::encoding::Encode<fidl::encoding::Vector<BufferRange, 64>, D>,
2230    > fidl::encoding::Encode<PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest, D>
2231        for (T0, T1)
2232    {
2233        #[inline]
2234        unsafe fn encode(
2235            self,
2236            encoder: &mut fidl::encoding::Encoder<'_, D>,
2237            offset: usize,
2238            depth: fidl::encoding::Depth,
2239        ) -> fidl::Result<()> {
2240            encoder.debug_check_bounds::<PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest>(
2241                offset,
2242            );
2243            // Zero out padding regions. There's no need to apply masks
2244            // because the unmasked parts will be overwritten by fields.
2245            // Write the fields.
2246            self.0.encode(encoder, offset + 0, depth)?;
2247            self.1.encode(encoder, offset + 8, depth)?;
2248            Ok(())
2249        }
2250    }
2251
2252    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2253        for PrimaryAddPerformanceCounterBufferOffsetsToPoolRequest
2254    {
2255        #[inline(always)]
2256        fn new_empty() -> Self {
2257            Self {
2258                pool_id: fidl::new_empty!(u64, D),
2259                offsets: fidl::new_empty!(fidl::encoding::Vector<BufferRange, 64>, D),
2260            }
2261        }
2262
2263        #[inline]
2264        unsafe fn decode(
2265            &mut self,
2266            decoder: &mut fidl::encoding::Decoder<'_, D>,
2267            offset: usize,
2268            _depth: fidl::encoding::Depth,
2269        ) -> fidl::Result<()> {
2270            decoder.debug_check_bounds::<Self>(offset);
2271            // Verify that padding bytes are zero.
2272            fidl::decode!(u64, D, &mut self.pool_id, decoder, offset + 0, _depth)?;
2273            fidl::decode!(fidl::encoding::Vector<BufferRange, 64>, D, &mut self.offsets, decoder, offset + 8, _depth)?;
2274            Ok(())
2275        }
2276    }
2277
2278    impl fidl::encoding::ValueTypeMarker for PrimaryBufferRangeOp2Request {
2279        type Borrowed<'a> = &'a Self;
2280        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2281            value
2282        }
2283    }
2284
2285    unsafe impl fidl::encoding::TypeMarker for PrimaryBufferRangeOp2Request {
2286        type Owned = Self;
2287
2288        #[inline(always)]
2289        fn inline_align(_context: fidl::encoding::Context) -> usize {
2290            8
2291        }
2292
2293        #[inline(always)]
2294        fn inline_size(_context: fidl::encoding::Context) -> usize {
2295            32
2296        }
2297    }
2298
2299    unsafe impl<D: fidl::encoding::ResourceDialect>
2300        fidl::encoding::Encode<PrimaryBufferRangeOp2Request, D> for &PrimaryBufferRangeOp2Request
2301    {
2302        #[inline]
2303        unsafe fn encode(
2304            self,
2305            encoder: &mut fidl::encoding::Encoder<'_, D>,
2306            offset: usize,
2307            _depth: fidl::encoding::Depth,
2308        ) -> fidl::Result<()> {
2309            encoder.debug_check_bounds::<PrimaryBufferRangeOp2Request>(offset);
2310            // Delegate to tuple encoding.
2311            fidl::encoding::Encode::<PrimaryBufferRangeOp2Request, D>::encode(
2312                (
2313                    <BufferOp as fidl::encoding::ValueTypeMarker>::borrow(&self.op),
2314                    <BufferRange as fidl::encoding::ValueTypeMarker>::borrow(&self.range),
2315                ),
2316                encoder,
2317                offset,
2318                _depth,
2319            )
2320        }
2321    }
2322    unsafe impl<
2323        D: fidl::encoding::ResourceDialect,
2324        T0: fidl::encoding::Encode<BufferOp, D>,
2325        T1: fidl::encoding::Encode<BufferRange, D>,
2326    > fidl::encoding::Encode<PrimaryBufferRangeOp2Request, D> for (T0, T1)
2327    {
2328        #[inline]
2329        unsafe fn encode(
2330            self,
2331            encoder: &mut fidl::encoding::Encoder<'_, D>,
2332            offset: usize,
2333            depth: fidl::encoding::Depth,
2334        ) -> fidl::Result<()> {
2335            encoder.debug_check_bounds::<PrimaryBufferRangeOp2Request>(offset);
2336            // Zero out padding regions. There's no need to apply masks
2337            // because the unmasked parts will be overwritten by fields.
2338            unsafe {
2339                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2340                (ptr as *mut u64).write_unaligned(0);
2341            }
2342            // Write the fields.
2343            self.0.encode(encoder, offset + 0, depth)?;
2344            self.1.encode(encoder, offset + 8, depth)?;
2345            Ok(())
2346        }
2347    }
2348
2349    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2350        for PrimaryBufferRangeOp2Request
2351    {
2352        #[inline(always)]
2353        fn new_empty() -> Self {
2354            Self { op: fidl::new_empty!(BufferOp, D), range: fidl::new_empty!(BufferRange, D) }
2355        }
2356
2357        #[inline]
2358        unsafe fn decode(
2359            &mut self,
2360            decoder: &mut fidl::encoding::Decoder<'_, D>,
2361            offset: usize,
2362            _depth: fidl::encoding::Depth,
2363        ) -> fidl::Result<()> {
2364            decoder.debug_check_bounds::<Self>(offset);
2365            // Verify that padding bytes are zero.
2366            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2367            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2368            let mask = 0xffffffff00000000u64;
2369            let maskedval = padval & mask;
2370            if maskedval != 0 {
2371                return Err(fidl::Error::NonZeroPadding {
2372                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2373                });
2374            }
2375            fidl::decode!(BufferOp, D, &mut self.op, decoder, offset + 0, _depth)?;
2376            fidl::decode!(BufferRange, D, &mut self.range, decoder, offset + 8, _depth)?;
2377            Ok(())
2378        }
2379    }
2380
2381    impl fidl::encoding::ValueTypeMarker for PrimaryClearPerformanceCountersRequest {
2382        type Borrowed<'a> = &'a Self;
2383        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2384            value
2385        }
2386    }
2387
2388    unsafe impl fidl::encoding::TypeMarker for PrimaryClearPerformanceCountersRequest {
2389        type Owned = Self;
2390
2391        #[inline(always)]
2392        fn inline_align(_context: fidl::encoding::Context) -> usize {
2393            8
2394        }
2395
2396        #[inline(always)]
2397        fn inline_size(_context: fidl::encoding::Context) -> usize {
2398            16
2399        }
2400    }
2401
2402    unsafe impl<D: fidl::encoding::ResourceDialect>
2403        fidl::encoding::Encode<PrimaryClearPerformanceCountersRequest, D>
2404        for &PrimaryClearPerformanceCountersRequest
2405    {
2406        #[inline]
2407        unsafe fn encode(
2408            self,
2409            encoder: &mut fidl::encoding::Encoder<'_, D>,
2410            offset: usize,
2411            _depth: fidl::encoding::Depth,
2412        ) -> fidl::Result<()> {
2413            encoder.debug_check_bounds::<PrimaryClearPerformanceCountersRequest>(offset);
2414            // Delegate to tuple encoding.
2415            fidl::encoding::Encode::<PrimaryClearPerformanceCountersRequest, D>::encode(
2416                (<fidl::encoding::Vector<u64, 64> as fidl::encoding::ValueTypeMarker>::borrow(
2417                    &self.counters,
2418                ),),
2419                encoder,
2420                offset,
2421                _depth,
2422            )
2423        }
2424    }
2425    unsafe impl<
2426        D: fidl::encoding::ResourceDialect,
2427        T0: fidl::encoding::Encode<fidl::encoding::Vector<u64, 64>, D>,
2428    > fidl::encoding::Encode<PrimaryClearPerformanceCountersRequest, D> for (T0,)
2429    {
2430        #[inline]
2431        unsafe fn encode(
2432            self,
2433            encoder: &mut fidl::encoding::Encoder<'_, D>,
2434            offset: usize,
2435            depth: fidl::encoding::Depth,
2436        ) -> fidl::Result<()> {
2437            encoder.debug_check_bounds::<PrimaryClearPerformanceCountersRequest>(offset);
2438            // Zero out padding regions. There's no need to apply masks
2439            // because the unmasked parts will be overwritten by fields.
2440            // Write the fields.
2441            self.0.encode(encoder, offset + 0, depth)?;
2442            Ok(())
2443        }
2444    }
2445
2446    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2447        for PrimaryClearPerformanceCountersRequest
2448    {
2449        #[inline(always)]
2450        fn new_empty() -> Self {
2451            Self { counters: fidl::new_empty!(fidl::encoding::Vector<u64, 64>, D) }
2452        }
2453
2454        #[inline]
2455        unsafe fn decode(
2456            &mut self,
2457            decoder: &mut fidl::encoding::Decoder<'_, D>,
2458            offset: usize,
2459            _depth: fidl::encoding::Depth,
2460        ) -> fidl::Result<()> {
2461            decoder.debug_check_bounds::<Self>(offset);
2462            // Verify that padding bytes are zero.
2463            fidl::decode!(fidl::encoding::Vector<u64, 64>, D, &mut self.counters, decoder, offset + 0, _depth)?;
2464            Ok(())
2465        }
2466    }
2467
2468    impl fidl::encoding::ValueTypeMarker for PrimaryCreateContext2Request {
2469        type Borrowed<'a> = &'a Self;
2470        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2471            value
2472        }
2473    }
2474
2475    unsafe impl fidl::encoding::TypeMarker for PrimaryCreateContext2Request {
2476        type Owned = Self;
2477
2478        #[inline(always)]
2479        fn inline_align(_context: fidl::encoding::Context) -> usize {
2480            8
2481        }
2482
2483        #[inline(always)]
2484        fn inline_size(_context: fidl::encoding::Context) -> usize {
2485            16
2486        }
2487    }
2488
2489    unsafe impl<D: fidl::encoding::ResourceDialect>
2490        fidl::encoding::Encode<PrimaryCreateContext2Request, D> for &PrimaryCreateContext2Request
2491    {
2492        #[inline]
2493        unsafe fn encode(
2494            self,
2495            encoder: &mut fidl::encoding::Encoder<'_, D>,
2496            offset: usize,
2497            _depth: fidl::encoding::Depth,
2498        ) -> fidl::Result<()> {
2499            encoder.debug_check_bounds::<PrimaryCreateContext2Request>(offset);
2500            // Delegate to tuple encoding.
2501            fidl::encoding::Encode::<PrimaryCreateContext2Request, D>::encode(
2502                (
2503                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.context_id),
2504                    <Priority as fidl::encoding::ValueTypeMarker>::borrow(&self.priority),
2505                ),
2506                encoder,
2507                offset,
2508                _depth,
2509            )
2510        }
2511    }
2512    unsafe impl<
2513        D: fidl::encoding::ResourceDialect,
2514        T0: fidl::encoding::Encode<u32, D>,
2515        T1: fidl::encoding::Encode<Priority, D>,
2516    > fidl::encoding::Encode<PrimaryCreateContext2Request, D> for (T0, T1)
2517    {
2518        #[inline]
2519        unsafe fn encode(
2520            self,
2521            encoder: &mut fidl::encoding::Encoder<'_, D>,
2522            offset: usize,
2523            depth: fidl::encoding::Depth,
2524        ) -> fidl::Result<()> {
2525            encoder.debug_check_bounds::<PrimaryCreateContext2Request>(offset);
2526            // Zero out padding regions. There's no need to apply masks
2527            // because the unmasked parts will be overwritten by fields.
2528            unsafe {
2529                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
2530                (ptr as *mut u64).write_unaligned(0);
2531            }
2532            // Write the fields.
2533            self.0.encode(encoder, offset + 0, depth)?;
2534            self.1.encode(encoder, offset + 8, depth)?;
2535            Ok(())
2536        }
2537    }
2538
2539    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2540        for PrimaryCreateContext2Request
2541    {
2542        #[inline(always)]
2543        fn new_empty() -> Self {
2544            Self { context_id: fidl::new_empty!(u32, D), priority: fidl::new_empty!(Priority, D) }
2545        }
2546
2547        #[inline]
2548        unsafe fn decode(
2549            &mut self,
2550            decoder: &mut fidl::encoding::Decoder<'_, D>,
2551            offset: usize,
2552            _depth: fidl::encoding::Depth,
2553        ) -> fidl::Result<()> {
2554            decoder.debug_check_bounds::<Self>(offset);
2555            // Verify that padding bytes are zero.
2556            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
2557            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2558            let mask = 0xffffffff00000000u64;
2559            let maskedval = padval & mask;
2560            if maskedval != 0 {
2561                return Err(fidl::Error::NonZeroPadding {
2562                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
2563                });
2564            }
2565            fidl::decode!(u32, D, &mut self.context_id, decoder, offset + 0, _depth)?;
2566            fidl::decode!(Priority, D, &mut self.priority, decoder, offset + 8, _depth)?;
2567            Ok(())
2568        }
2569    }
2570
2571    impl fidl::encoding::ValueTypeMarker for PrimaryCreateContextRequest {
2572        type Borrowed<'a> = &'a Self;
2573        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2574            value
2575        }
2576    }
2577
2578    unsafe impl fidl::encoding::TypeMarker for PrimaryCreateContextRequest {
2579        type Owned = Self;
2580
2581        #[inline(always)]
2582        fn inline_align(_context: fidl::encoding::Context) -> usize {
2583            4
2584        }
2585
2586        #[inline(always)]
2587        fn inline_size(_context: fidl::encoding::Context) -> usize {
2588            4
2589        }
2590        #[inline(always)]
2591        fn encode_is_copy() -> bool {
2592            true
2593        }
2594
2595        #[inline(always)]
2596        fn decode_is_copy() -> bool {
2597            true
2598        }
2599    }
2600
2601    unsafe impl<D: fidl::encoding::ResourceDialect>
2602        fidl::encoding::Encode<PrimaryCreateContextRequest, D> for &PrimaryCreateContextRequest
2603    {
2604        #[inline]
2605        unsafe fn encode(
2606            self,
2607            encoder: &mut fidl::encoding::Encoder<'_, D>,
2608            offset: usize,
2609            _depth: fidl::encoding::Depth,
2610        ) -> fidl::Result<()> {
2611            encoder.debug_check_bounds::<PrimaryCreateContextRequest>(offset);
2612            unsafe {
2613                // Copy the object into the buffer.
2614                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2615                (buf_ptr as *mut PrimaryCreateContextRequest)
2616                    .write_unaligned((self as *const PrimaryCreateContextRequest).read());
2617                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2618                // done second because the memcpy will write garbage to these bytes.
2619            }
2620            Ok(())
2621        }
2622    }
2623    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
2624        fidl::encoding::Encode<PrimaryCreateContextRequest, D> for (T0,)
2625    {
2626        #[inline]
2627        unsafe fn encode(
2628            self,
2629            encoder: &mut fidl::encoding::Encoder<'_, D>,
2630            offset: usize,
2631            depth: fidl::encoding::Depth,
2632        ) -> fidl::Result<()> {
2633            encoder.debug_check_bounds::<PrimaryCreateContextRequest>(offset);
2634            // Zero out padding regions. There's no need to apply masks
2635            // because the unmasked parts will be overwritten by fields.
2636            // Write the fields.
2637            self.0.encode(encoder, offset + 0, depth)?;
2638            Ok(())
2639        }
2640    }
2641
2642    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2643        for PrimaryCreateContextRequest
2644    {
2645        #[inline(always)]
2646        fn new_empty() -> Self {
2647            Self { context_id: fidl::new_empty!(u32, D) }
2648        }
2649
2650        #[inline]
2651        unsafe fn decode(
2652            &mut self,
2653            decoder: &mut fidl::encoding::Decoder<'_, D>,
2654            offset: usize,
2655            _depth: fidl::encoding::Depth,
2656        ) -> fidl::Result<()> {
2657            decoder.debug_check_bounds::<Self>(offset);
2658            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2659            // Verify that padding bytes are zero.
2660            // Copy from the buffer into the object.
2661            unsafe {
2662                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2663            }
2664            Ok(())
2665        }
2666    }
2667
2668    impl fidl::encoding::ValueTypeMarker for PrimaryDestroyContextRequest {
2669        type Borrowed<'a> = &'a Self;
2670        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2671            value
2672        }
2673    }
2674
2675    unsafe impl fidl::encoding::TypeMarker for PrimaryDestroyContextRequest {
2676        type Owned = Self;
2677
2678        #[inline(always)]
2679        fn inline_align(_context: fidl::encoding::Context) -> usize {
2680            4
2681        }
2682
2683        #[inline(always)]
2684        fn inline_size(_context: fidl::encoding::Context) -> usize {
2685            4
2686        }
2687        #[inline(always)]
2688        fn encode_is_copy() -> bool {
2689            true
2690        }
2691
2692        #[inline(always)]
2693        fn decode_is_copy() -> bool {
2694            true
2695        }
2696    }
2697
2698    unsafe impl<D: fidl::encoding::ResourceDialect>
2699        fidl::encoding::Encode<PrimaryDestroyContextRequest, D> for &PrimaryDestroyContextRequest
2700    {
2701        #[inline]
2702        unsafe fn encode(
2703            self,
2704            encoder: &mut fidl::encoding::Encoder<'_, D>,
2705            offset: usize,
2706            _depth: fidl::encoding::Depth,
2707        ) -> fidl::Result<()> {
2708            encoder.debug_check_bounds::<PrimaryDestroyContextRequest>(offset);
2709            unsafe {
2710                // Copy the object into the buffer.
2711                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2712                (buf_ptr as *mut PrimaryDestroyContextRequest)
2713                    .write_unaligned((self as *const PrimaryDestroyContextRequest).read());
2714                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2715                // done second because the memcpy will write garbage to these bytes.
2716            }
2717            Ok(())
2718        }
2719    }
2720    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u32, D>>
2721        fidl::encoding::Encode<PrimaryDestroyContextRequest, D> for (T0,)
2722    {
2723        #[inline]
2724        unsafe fn encode(
2725            self,
2726            encoder: &mut fidl::encoding::Encoder<'_, D>,
2727            offset: usize,
2728            depth: fidl::encoding::Depth,
2729        ) -> fidl::Result<()> {
2730            encoder.debug_check_bounds::<PrimaryDestroyContextRequest>(offset);
2731            // Zero out padding regions. There's no need to apply masks
2732            // because the unmasked parts will be overwritten by fields.
2733            // Write the fields.
2734            self.0.encode(encoder, offset + 0, depth)?;
2735            Ok(())
2736        }
2737    }
2738
2739    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2740        for PrimaryDestroyContextRequest
2741    {
2742        #[inline(always)]
2743        fn new_empty() -> Self {
2744            Self { context_id: fidl::new_empty!(u32, D) }
2745        }
2746
2747        #[inline]
2748        unsafe fn decode(
2749            &mut self,
2750            decoder: &mut fidl::encoding::Decoder<'_, D>,
2751            offset: usize,
2752            _depth: fidl::encoding::Depth,
2753        ) -> fidl::Result<()> {
2754            decoder.debug_check_bounds::<Self>(offset);
2755            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2756            // Verify that padding bytes are zero.
2757            // Copy from the buffer into the object.
2758            unsafe {
2759                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
2760            }
2761            Ok(())
2762        }
2763    }
2764
2765    impl fidl::encoding::ValueTypeMarker for PrimaryDumpPerformanceCountersRequest {
2766        type Borrowed<'a> = &'a Self;
2767        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2768            value
2769        }
2770    }
2771
2772    unsafe impl fidl::encoding::TypeMarker for PrimaryDumpPerformanceCountersRequest {
2773        type Owned = Self;
2774
2775        #[inline(always)]
2776        fn inline_align(_context: fidl::encoding::Context) -> usize {
2777            8
2778        }
2779
2780        #[inline(always)]
2781        fn inline_size(_context: fidl::encoding::Context) -> usize {
2782            16
2783        }
2784    }
2785
2786    unsafe impl<D: fidl::encoding::ResourceDialect>
2787        fidl::encoding::Encode<PrimaryDumpPerformanceCountersRequest, D>
2788        for &PrimaryDumpPerformanceCountersRequest
2789    {
2790        #[inline]
2791        unsafe fn encode(
2792            self,
2793            encoder: &mut fidl::encoding::Encoder<'_, D>,
2794            offset: usize,
2795            _depth: fidl::encoding::Depth,
2796        ) -> fidl::Result<()> {
2797            encoder.debug_check_bounds::<PrimaryDumpPerformanceCountersRequest>(offset);
2798            unsafe {
2799                // Copy the object into the buffer.
2800                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
2801                (buf_ptr as *mut PrimaryDumpPerformanceCountersRequest)
2802                    .write_unaligned((self as *const PrimaryDumpPerformanceCountersRequest).read());
2803                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
2804                // done second because the memcpy will write garbage to these bytes.
2805                let padding_ptr = buf_ptr.offset(8) as *mut u64;
2806                let padding_mask = 0xffffffff00000000u64;
2807                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
2808            }
2809            Ok(())
2810        }
2811    }
2812    unsafe impl<
2813        D: fidl::encoding::ResourceDialect,
2814        T0: fidl::encoding::Encode<u64, D>,
2815        T1: fidl::encoding::Encode<u32, D>,
2816    > fidl::encoding::Encode<PrimaryDumpPerformanceCountersRequest, D> for (T0, T1)
2817    {
2818        #[inline]
2819        unsafe fn encode(
2820            self,
2821            encoder: &mut fidl::encoding::Encoder<'_, D>,
2822            offset: usize,
2823            depth: fidl::encoding::Depth,
2824        ) -> fidl::Result<()> {
2825            encoder.debug_check_bounds::<PrimaryDumpPerformanceCountersRequest>(offset);
2826            // Zero out padding regions. There's no need to apply masks
2827            // because the unmasked parts will be overwritten by fields.
2828            unsafe {
2829                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
2830                (ptr as *mut u64).write_unaligned(0);
2831            }
2832            // Write the fields.
2833            self.0.encode(encoder, offset + 0, depth)?;
2834            self.1.encode(encoder, offset + 8, depth)?;
2835            Ok(())
2836        }
2837    }
2838
2839    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2840        for PrimaryDumpPerformanceCountersRequest
2841    {
2842        #[inline(always)]
2843        fn new_empty() -> Self {
2844            Self { pool_id: fidl::new_empty!(u64, D), trigger_id: fidl::new_empty!(u32, D) }
2845        }
2846
2847        #[inline]
2848        unsafe fn decode(
2849            &mut self,
2850            decoder: &mut fidl::encoding::Decoder<'_, D>,
2851            offset: usize,
2852            _depth: fidl::encoding::Depth,
2853        ) -> fidl::Result<()> {
2854            decoder.debug_check_bounds::<Self>(offset);
2855            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
2856            // Verify that padding bytes are zero.
2857            let ptr = unsafe { buf_ptr.offset(8) };
2858            let padval = unsafe { (ptr as *const u64).read_unaligned() };
2859            let mask = 0xffffffff00000000u64;
2860            let maskedval = padval & mask;
2861            if maskedval != 0 {
2862                return Err(fidl::Error::NonZeroPadding {
2863                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
2864                });
2865            }
2866            // Copy from the buffer into the object.
2867            unsafe {
2868                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
2869            }
2870            Ok(())
2871        }
2872    }
2873
2874    impl fidl::encoding::ValueTypeMarker for PrimaryEnablePerformanceCountersRequest {
2875        type Borrowed<'a> = &'a Self;
2876        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2877            value
2878        }
2879    }
2880
2881    unsafe impl fidl::encoding::TypeMarker for PrimaryEnablePerformanceCountersRequest {
2882        type Owned = Self;
2883
2884        #[inline(always)]
2885        fn inline_align(_context: fidl::encoding::Context) -> usize {
2886            8
2887        }
2888
2889        #[inline(always)]
2890        fn inline_size(_context: fidl::encoding::Context) -> usize {
2891            16
2892        }
2893    }
2894
2895    unsafe impl<D: fidl::encoding::ResourceDialect>
2896        fidl::encoding::Encode<PrimaryEnablePerformanceCountersRequest, D>
2897        for &PrimaryEnablePerformanceCountersRequest
2898    {
2899        #[inline]
2900        unsafe fn encode(
2901            self,
2902            encoder: &mut fidl::encoding::Encoder<'_, D>,
2903            offset: usize,
2904            _depth: fidl::encoding::Depth,
2905        ) -> fidl::Result<()> {
2906            encoder.debug_check_bounds::<PrimaryEnablePerformanceCountersRequest>(offset);
2907            // Delegate to tuple encoding.
2908            fidl::encoding::Encode::<PrimaryEnablePerformanceCountersRequest, D>::encode(
2909                (<fidl::encoding::Vector<u64, 64> as fidl::encoding::ValueTypeMarker>::borrow(
2910                    &self.counters,
2911                ),),
2912                encoder,
2913                offset,
2914                _depth,
2915            )
2916        }
2917    }
2918    unsafe impl<
2919        D: fidl::encoding::ResourceDialect,
2920        T0: fidl::encoding::Encode<fidl::encoding::Vector<u64, 64>, D>,
2921    > fidl::encoding::Encode<PrimaryEnablePerformanceCountersRequest, D> for (T0,)
2922    {
2923        #[inline]
2924        unsafe fn encode(
2925            self,
2926            encoder: &mut fidl::encoding::Encoder<'_, D>,
2927            offset: usize,
2928            depth: fidl::encoding::Depth,
2929        ) -> fidl::Result<()> {
2930            encoder.debug_check_bounds::<PrimaryEnablePerformanceCountersRequest>(offset);
2931            // Zero out padding regions. There's no need to apply masks
2932            // because the unmasked parts will be overwritten by fields.
2933            // Write the fields.
2934            self.0.encode(encoder, offset + 0, depth)?;
2935            Ok(())
2936        }
2937    }
2938
2939    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
2940        for PrimaryEnablePerformanceCountersRequest
2941    {
2942        #[inline(always)]
2943        fn new_empty() -> Self {
2944            Self { counters: fidl::new_empty!(fidl::encoding::Vector<u64, 64>, D) }
2945        }
2946
2947        #[inline]
2948        unsafe fn decode(
2949            &mut self,
2950            decoder: &mut fidl::encoding::Decoder<'_, D>,
2951            offset: usize,
2952            _depth: fidl::encoding::Depth,
2953        ) -> fidl::Result<()> {
2954            decoder.debug_check_bounds::<Self>(offset);
2955            // Verify that padding bytes are zero.
2956            fidl::decode!(fidl::encoding::Vector<u64, 64>, D, &mut self.counters, decoder, offset + 0, _depth)?;
2957            Ok(())
2958        }
2959    }
2960
2961    impl fidl::encoding::ValueTypeMarker for PrimaryExecuteCommandRequest {
2962        type Borrowed<'a> = &'a Self;
2963        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2964            value
2965        }
2966    }
2967
2968    unsafe impl fidl::encoding::TypeMarker for PrimaryExecuteCommandRequest {
2969        type Owned = Self;
2970
2971        #[inline(always)]
2972        fn inline_align(_context: fidl::encoding::Context) -> usize {
2973            8
2974        }
2975
2976        #[inline(always)]
2977        fn inline_size(_context: fidl::encoding::Context) -> usize {
2978            80
2979        }
2980    }
2981
2982    unsafe impl<D: fidl::encoding::ResourceDialect>
2983        fidl::encoding::Encode<PrimaryExecuteCommandRequest, D> for &PrimaryExecuteCommandRequest
2984    {
2985        #[inline]
2986        unsafe fn encode(
2987            self,
2988            encoder: &mut fidl::encoding::Encoder<'_, D>,
2989            offset: usize,
2990            _depth: fidl::encoding::Depth,
2991        ) -> fidl::Result<()> {
2992            encoder.debug_check_bounds::<PrimaryExecuteCommandRequest>(offset);
2993            // Delegate to tuple encoding.
2994            fidl::encoding::Encode::<PrimaryExecuteCommandRequest, D>::encode(
2995                (
2996                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.context_id),
2997                    <fidl::encoding::UnboundedVector<BufferRange> as fidl::encoding::ValueTypeMarker>::borrow(&self.resources),
2998                    <fidl::encoding::UnboundedVector<CommandBuffer> as fidl::encoding::ValueTypeMarker>::borrow(&self.command_buffers),
2999                    <fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow(&self.wait_semaphores),
3000                    <fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow(&self.signal_semaphores),
3001                    <CommandBufferFlags as fidl::encoding::ValueTypeMarker>::borrow(&self.flags),
3002                ),
3003                encoder, offset, _depth
3004            )
3005        }
3006    }
3007    unsafe impl<
3008        D: fidl::encoding::ResourceDialect,
3009        T0: fidl::encoding::Encode<u32, D>,
3010        T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<BufferRange>, D>,
3011        T2: fidl::encoding::Encode<fidl::encoding::UnboundedVector<CommandBuffer>, D>,
3012        T3: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u64>, D>,
3013        T4: fidl::encoding::Encode<fidl::encoding::UnboundedVector<u64>, D>,
3014        T5: fidl::encoding::Encode<CommandBufferFlags, D>,
3015    > fidl::encoding::Encode<PrimaryExecuteCommandRequest, D> for (T0, T1, T2, T3, T4, T5)
3016    {
3017        #[inline]
3018        unsafe fn encode(
3019            self,
3020            encoder: &mut fidl::encoding::Encoder<'_, D>,
3021            offset: usize,
3022            depth: fidl::encoding::Depth,
3023        ) -> fidl::Result<()> {
3024            encoder.debug_check_bounds::<PrimaryExecuteCommandRequest>(offset);
3025            // Zero out padding regions. There's no need to apply masks
3026            // because the unmasked parts will be overwritten by fields.
3027            unsafe {
3028                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3029                (ptr as *mut u64).write_unaligned(0);
3030            }
3031            // Write the fields.
3032            self.0.encode(encoder, offset + 0, depth)?;
3033            self.1.encode(encoder, offset + 8, depth)?;
3034            self.2.encode(encoder, offset + 24, depth)?;
3035            self.3.encode(encoder, offset + 40, depth)?;
3036            self.4.encode(encoder, offset + 56, depth)?;
3037            self.5.encode(encoder, offset + 72, depth)?;
3038            Ok(())
3039        }
3040    }
3041
3042    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3043        for PrimaryExecuteCommandRequest
3044    {
3045        #[inline(always)]
3046        fn new_empty() -> Self {
3047            Self {
3048                context_id: fidl::new_empty!(u32, D),
3049                resources: fidl::new_empty!(fidl::encoding::UnboundedVector<BufferRange>, D),
3050                command_buffers: fidl::new_empty!(
3051                    fidl::encoding::UnboundedVector<CommandBuffer>,
3052                    D
3053                ),
3054                wait_semaphores: fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D),
3055                signal_semaphores: fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D),
3056                flags: fidl::new_empty!(CommandBufferFlags, D),
3057            }
3058        }
3059
3060        #[inline]
3061        unsafe fn decode(
3062            &mut self,
3063            decoder: &mut fidl::encoding::Decoder<'_, D>,
3064            offset: usize,
3065            _depth: fidl::encoding::Depth,
3066        ) -> fidl::Result<()> {
3067            decoder.debug_check_bounds::<Self>(offset);
3068            // Verify that padding bytes are zero.
3069            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3070            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3071            let mask = 0xffffffff00000000u64;
3072            let maskedval = padval & mask;
3073            if maskedval != 0 {
3074                return Err(fidl::Error::NonZeroPadding {
3075                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3076                });
3077            }
3078            fidl::decode!(u32, D, &mut self.context_id, decoder, offset + 0, _depth)?;
3079            fidl::decode!(
3080                fidl::encoding::UnboundedVector<BufferRange>,
3081                D,
3082                &mut self.resources,
3083                decoder,
3084                offset + 8,
3085                _depth
3086            )?;
3087            fidl::decode!(
3088                fidl::encoding::UnboundedVector<CommandBuffer>,
3089                D,
3090                &mut self.command_buffers,
3091                decoder,
3092                offset + 24,
3093                _depth
3094            )?;
3095            fidl::decode!(
3096                fidl::encoding::UnboundedVector<u64>,
3097                D,
3098                &mut self.wait_semaphores,
3099                decoder,
3100                offset + 40,
3101                _depth
3102            )?;
3103            fidl::decode!(
3104                fidl::encoding::UnboundedVector<u64>,
3105                D,
3106                &mut self.signal_semaphores,
3107                decoder,
3108                offset + 56,
3109                _depth
3110            )?;
3111            fidl::decode!(CommandBufferFlags, D, &mut self.flags, decoder, offset + 72, _depth)?;
3112            Ok(())
3113        }
3114    }
3115
3116    impl fidl::encoding::ValueTypeMarker for PrimaryExecuteInlineCommandsRequest {
3117        type Borrowed<'a> = &'a Self;
3118        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3119            value
3120        }
3121    }
3122
3123    unsafe impl fidl::encoding::TypeMarker for PrimaryExecuteInlineCommandsRequest {
3124        type Owned = Self;
3125
3126        #[inline(always)]
3127        fn inline_align(_context: fidl::encoding::Context) -> usize {
3128            8
3129        }
3130
3131        #[inline(always)]
3132        fn inline_size(_context: fidl::encoding::Context) -> usize {
3133            24
3134        }
3135    }
3136
3137    unsafe impl<D: fidl::encoding::ResourceDialect>
3138        fidl::encoding::Encode<PrimaryExecuteInlineCommandsRequest, D>
3139        for &PrimaryExecuteInlineCommandsRequest
3140    {
3141        #[inline]
3142        unsafe fn encode(
3143            self,
3144            encoder: &mut fidl::encoding::Encoder<'_, D>,
3145            offset: usize,
3146            _depth: fidl::encoding::Depth,
3147        ) -> fidl::Result<()> {
3148            encoder.debug_check_bounds::<PrimaryExecuteInlineCommandsRequest>(offset);
3149            // Delegate to tuple encoding.
3150            fidl::encoding::Encode::<PrimaryExecuteInlineCommandsRequest, D>::encode(
3151                (
3152                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.context_id),
3153                    <fidl::encoding::UnboundedVector<InlineCommand> as fidl::encoding::ValueTypeMarker>::borrow(&self.commands),
3154                ),
3155                encoder, offset, _depth
3156            )
3157        }
3158    }
3159    unsafe impl<
3160        D: fidl::encoding::ResourceDialect,
3161        T0: fidl::encoding::Encode<u32, D>,
3162        T1: fidl::encoding::Encode<fidl::encoding::UnboundedVector<InlineCommand>, D>,
3163    > fidl::encoding::Encode<PrimaryExecuteInlineCommandsRequest, D> for (T0, T1)
3164    {
3165        #[inline]
3166        unsafe fn encode(
3167            self,
3168            encoder: &mut fidl::encoding::Encoder<'_, D>,
3169            offset: usize,
3170            depth: fidl::encoding::Depth,
3171        ) -> fidl::Result<()> {
3172            encoder.debug_check_bounds::<PrimaryExecuteInlineCommandsRequest>(offset);
3173            // Zero out padding regions. There's no need to apply masks
3174            // because the unmasked parts will be overwritten by fields.
3175            unsafe {
3176                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
3177                (ptr as *mut u64).write_unaligned(0);
3178            }
3179            // Write the fields.
3180            self.0.encode(encoder, offset + 0, depth)?;
3181            self.1.encode(encoder, offset + 8, depth)?;
3182            Ok(())
3183        }
3184    }
3185
3186    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3187        for PrimaryExecuteInlineCommandsRequest
3188    {
3189        #[inline(always)]
3190        fn new_empty() -> Self {
3191            Self {
3192                context_id: fidl::new_empty!(u32, D),
3193                commands: fidl::new_empty!(fidl::encoding::UnboundedVector<InlineCommand>, D),
3194            }
3195        }
3196
3197        #[inline]
3198        unsafe fn decode(
3199            &mut self,
3200            decoder: &mut fidl::encoding::Decoder<'_, D>,
3201            offset: usize,
3202            _depth: fidl::encoding::Depth,
3203        ) -> fidl::Result<()> {
3204            decoder.debug_check_bounds::<Self>(offset);
3205            // Verify that padding bytes are zero.
3206            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
3207            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3208            let mask = 0xffffffff00000000u64;
3209            let maskedval = padval & mask;
3210            if maskedval != 0 {
3211                return Err(fidl::Error::NonZeroPadding {
3212                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
3213                });
3214            }
3215            fidl::decode!(u32, D, &mut self.context_id, decoder, offset + 0, _depth)?;
3216            fidl::decode!(
3217                fidl::encoding::UnboundedVector<InlineCommand>,
3218                D,
3219                &mut self.commands,
3220                decoder,
3221                offset + 8,
3222                _depth
3223            )?;
3224            Ok(())
3225        }
3226    }
3227
3228    impl fidl::encoding::ValueTypeMarker for PrimaryIsPerformanceCounterAccessAllowedResponse {
3229        type Borrowed<'a> = &'a Self;
3230        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3231            value
3232        }
3233    }
3234
3235    unsafe impl fidl::encoding::TypeMarker for PrimaryIsPerformanceCounterAccessAllowedResponse {
3236        type Owned = Self;
3237
3238        #[inline(always)]
3239        fn inline_align(_context: fidl::encoding::Context) -> usize {
3240            1
3241        }
3242
3243        #[inline(always)]
3244        fn inline_size(_context: fidl::encoding::Context) -> usize {
3245            1
3246        }
3247    }
3248
3249    unsafe impl<D: fidl::encoding::ResourceDialect>
3250        fidl::encoding::Encode<PrimaryIsPerformanceCounterAccessAllowedResponse, D>
3251        for &PrimaryIsPerformanceCounterAccessAllowedResponse
3252    {
3253        #[inline]
3254        unsafe fn encode(
3255            self,
3256            encoder: &mut fidl::encoding::Encoder<'_, D>,
3257            offset: usize,
3258            _depth: fidl::encoding::Depth,
3259        ) -> fidl::Result<()> {
3260            encoder.debug_check_bounds::<PrimaryIsPerformanceCounterAccessAllowedResponse>(offset);
3261            // Delegate to tuple encoding.
3262            fidl::encoding::Encode::<PrimaryIsPerformanceCounterAccessAllowedResponse, D>::encode(
3263                (<bool as fidl::encoding::ValueTypeMarker>::borrow(&self.enabled),),
3264                encoder,
3265                offset,
3266                _depth,
3267            )
3268        }
3269    }
3270    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<bool, D>>
3271        fidl::encoding::Encode<PrimaryIsPerformanceCounterAccessAllowedResponse, D> for (T0,)
3272    {
3273        #[inline]
3274        unsafe fn encode(
3275            self,
3276            encoder: &mut fidl::encoding::Encoder<'_, D>,
3277            offset: usize,
3278            depth: fidl::encoding::Depth,
3279        ) -> fidl::Result<()> {
3280            encoder.debug_check_bounds::<PrimaryIsPerformanceCounterAccessAllowedResponse>(offset);
3281            // Zero out padding regions. There's no need to apply masks
3282            // because the unmasked parts will be overwritten by fields.
3283            // Write the fields.
3284            self.0.encode(encoder, offset + 0, depth)?;
3285            Ok(())
3286        }
3287    }
3288
3289    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3290        for PrimaryIsPerformanceCounterAccessAllowedResponse
3291    {
3292        #[inline(always)]
3293        fn new_empty() -> Self {
3294            Self { enabled: fidl::new_empty!(bool, D) }
3295        }
3296
3297        #[inline]
3298        unsafe fn decode(
3299            &mut self,
3300            decoder: &mut fidl::encoding::Decoder<'_, D>,
3301            offset: usize,
3302            _depth: fidl::encoding::Depth,
3303        ) -> fidl::Result<()> {
3304            decoder.debug_check_bounds::<Self>(offset);
3305            // Verify that padding bytes are zero.
3306            fidl::decode!(bool, D, &mut self.enabled, decoder, offset + 0, _depth)?;
3307            Ok(())
3308        }
3309    }
3310
3311    impl fidl::encoding::ValueTypeMarker for PrimaryOnNotifyMemoryImportedRequest {
3312        type Borrowed<'a> = &'a Self;
3313        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3314            value
3315        }
3316    }
3317
3318    unsafe impl fidl::encoding::TypeMarker for PrimaryOnNotifyMemoryImportedRequest {
3319        type Owned = Self;
3320
3321        #[inline(always)]
3322        fn inline_align(_context: fidl::encoding::Context) -> usize {
3323            8
3324        }
3325
3326        #[inline(always)]
3327        fn inline_size(_context: fidl::encoding::Context) -> usize {
3328            8
3329        }
3330        #[inline(always)]
3331        fn encode_is_copy() -> bool {
3332            true
3333        }
3334
3335        #[inline(always)]
3336        fn decode_is_copy() -> bool {
3337            true
3338        }
3339    }
3340
3341    unsafe impl<D: fidl::encoding::ResourceDialect>
3342        fidl::encoding::Encode<PrimaryOnNotifyMemoryImportedRequest, D>
3343        for &PrimaryOnNotifyMemoryImportedRequest
3344    {
3345        #[inline]
3346        unsafe fn encode(
3347            self,
3348            encoder: &mut fidl::encoding::Encoder<'_, D>,
3349            offset: usize,
3350            _depth: fidl::encoding::Depth,
3351        ) -> fidl::Result<()> {
3352            encoder.debug_check_bounds::<PrimaryOnNotifyMemoryImportedRequest>(offset);
3353            unsafe {
3354                // Copy the object into the buffer.
3355                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3356                (buf_ptr as *mut PrimaryOnNotifyMemoryImportedRequest)
3357                    .write_unaligned((self as *const PrimaryOnNotifyMemoryImportedRequest).read());
3358                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3359                // done second because the memcpy will write garbage to these bytes.
3360            }
3361            Ok(())
3362        }
3363    }
3364    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3365        fidl::encoding::Encode<PrimaryOnNotifyMemoryImportedRequest, D> for (T0,)
3366    {
3367        #[inline]
3368        unsafe fn encode(
3369            self,
3370            encoder: &mut fidl::encoding::Encoder<'_, D>,
3371            offset: usize,
3372            depth: fidl::encoding::Depth,
3373        ) -> fidl::Result<()> {
3374            encoder.debug_check_bounds::<PrimaryOnNotifyMemoryImportedRequest>(offset);
3375            // Zero out padding regions. There's no need to apply masks
3376            // because the unmasked parts will be overwritten by fields.
3377            // Write the fields.
3378            self.0.encode(encoder, offset + 0, depth)?;
3379            Ok(())
3380        }
3381    }
3382
3383    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3384        for PrimaryOnNotifyMemoryImportedRequest
3385    {
3386        #[inline(always)]
3387        fn new_empty() -> Self {
3388            Self { bytes: fidl::new_empty!(u64, D) }
3389        }
3390
3391        #[inline]
3392        unsafe fn decode(
3393            &mut self,
3394            decoder: &mut fidl::encoding::Decoder<'_, D>,
3395            offset: usize,
3396            _depth: fidl::encoding::Depth,
3397        ) -> fidl::Result<()> {
3398            decoder.debug_check_bounds::<Self>(offset);
3399            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3400            // Verify that padding bytes are zero.
3401            // Copy from the buffer into the object.
3402            unsafe {
3403                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3404            }
3405            Ok(())
3406        }
3407    }
3408
3409    impl fidl::encoding::ValueTypeMarker for PrimaryOnNotifyMessagesConsumedRequest {
3410        type Borrowed<'a> = &'a Self;
3411        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3412            value
3413        }
3414    }
3415
3416    unsafe impl fidl::encoding::TypeMarker for PrimaryOnNotifyMessagesConsumedRequest {
3417        type Owned = Self;
3418
3419        #[inline(always)]
3420        fn inline_align(_context: fidl::encoding::Context) -> usize {
3421            8
3422        }
3423
3424        #[inline(always)]
3425        fn inline_size(_context: fidl::encoding::Context) -> usize {
3426            8
3427        }
3428        #[inline(always)]
3429        fn encode_is_copy() -> bool {
3430            true
3431        }
3432
3433        #[inline(always)]
3434        fn decode_is_copy() -> bool {
3435            true
3436        }
3437    }
3438
3439    unsafe impl<D: fidl::encoding::ResourceDialect>
3440        fidl::encoding::Encode<PrimaryOnNotifyMessagesConsumedRequest, D>
3441        for &PrimaryOnNotifyMessagesConsumedRequest
3442    {
3443        #[inline]
3444        unsafe fn encode(
3445            self,
3446            encoder: &mut fidl::encoding::Encoder<'_, D>,
3447            offset: usize,
3448            _depth: fidl::encoding::Depth,
3449        ) -> fidl::Result<()> {
3450            encoder.debug_check_bounds::<PrimaryOnNotifyMessagesConsumedRequest>(offset);
3451            unsafe {
3452                // Copy the object into the buffer.
3453                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3454                (buf_ptr as *mut PrimaryOnNotifyMessagesConsumedRequest).write_unaligned(
3455                    (self as *const PrimaryOnNotifyMessagesConsumedRequest).read(),
3456                );
3457                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3458                // done second because the memcpy will write garbage to these bytes.
3459            }
3460            Ok(())
3461        }
3462    }
3463    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3464        fidl::encoding::Encode<PrimaryOnNotifyMessagesConsumedRequest, D> for (T0,)
3465    {
3466        #[inline]
3467        unsafe fn encode(
3468            self,
3469            encoder: &mut fidl::encoding::Encoder<'_, D>,
3470            offset: usize,
3471            depth: fidl::encoding::Depth,
3472        ) -> fidl::Result<()> {
3473            encoder.debug_check_bounds::<PrimaryOnNotifyMessagesConsumedRequest>(offset);
3474            // Zero out padding regions. There's no need to apply masks
3475            // because the unmasked parts will be overwritten by fields.
3476            // Write the fields.
3477            self.0.encode(encoder, offset + 0, depth)?;
3478            Ok(())
3479        }
3480    }
3481
3482    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3483        for PrimaryOnNotifyMessagesConsumedRequest
3484    {
3485        #[inline(always)]
3486        fn new_empty() -> Self {
3487            Self { count: fidl::new_empty!(u64, D) }
3488        }
3489
3490        #[inline]
3491        unsafe fn decode(
3492            &mut self,
3493            decoder: &mut fidl::encoding::Decoder<'_, D>,
3494            offset: usize,
3495            _depth: fidl::encoding::Depth,
3496        ) -> fidl::Result<()> {
3497            decoder.debug_check_bounds::<Self>(offset);
3498            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3499            // Verify that padding bytes are zero.
3500            // Copy from the buffer into the object.
3501            unsafe {
3502                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3503            }
3504            Ok(())
3505        }
3506    }
3507
3508    impl fidl::encoding::ValueTypeMarker for PrimaryReleaseObjectRequest {
3509        type Borrowed<'a> = &'a Self;
3510        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3511            value
3512        }
3513    }
3514
3515    unsafe impl fidl::encoding::TypeMarker for PrimaryReleaseObjectRequest {
3516        type Owned = Self;
3517
3518        #[inline(always)]
3519        fn inline_align(_context: fidl::encoding::Context) -> usize {
3520            8
3521        }
3522
3523        #[inline(always)]
3524        fn inline_size(_context: fidl::encoding::Context) -> usize {
3525            16
3526        }
3527    }
3528
3529    unsafe impl<D: fidl::encoding::ResourceDialect>
3530        fidl::encoding::Encode<PrimaryReleaseObjectRequest, D> for &PrimaryReleaseObjectRequest
3531    {
3532        #[inline]
3533        unsafe fn encode(
3534            self,
3535            encoder: &mut fidl::encoding::Encoder<'_, D>,
3536            offset: usize,
3537            _depth: fidl::encoding::Depth,
3538        ) -> fidl::Result<()> {
3539            encoder.debug_check_bounds::<PrimaryReleaseObjectRequest>(offset);
3540            // Delegate to tuple encoding.
3541            fidl::encoding::Encode::<PrimaryReleaseObjectRequest, D>::encode(
3542                (
3543                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.object_id),
3544                    <ObjectType as fidl::encoding::ValueTypeMarker>::borrow(&self.object_type),
3545                ),
3546                encoder,
3547                offset,
3548                _depth,
3549            )
3550        }
3551    }
3552    unsafe impl<
3553        D: fidl::encoding::ResourceDialect,
3554        T0: fidl::encoding::Encode<u64, D>,
3555        T1: fidl::encoding::Encode<ObjectType, D>,
3556    > fidl::encoding::Encode<PrimaryReleaseObjectRequest, D> for (T0, T1)
3557    {
3558        #[inline]
3559        unsafe fn encode(
3560            self,
3561            encoder: &mut fidl::encoding::Encoder<'_, D>,
3562            offset: usize,
3563            depth: fidl::encoding::Depth,
3564        ) -> fidl::Result<()> {
3565            encoder.debug_check_bounds::<PrimaryReleaseObjectRequest>(offset);
3566            // Zero out padding regions. There's no need to apply masks
3567            // because the unmasked parts will be overwritten by fields.
3568            unsafe {
3569                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
3570                (ptr as *mut u64).write_unaligned(0);
3571            }
3572            // Write the fields.
3573            self.0.encode(encoder, offset + 0, depth)?;
3574            self.1.encode(encoder, offset + 8, depth)?;
3575            Ok(())
3576        }
3577    }
3578
3579    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3580        for PrimaryReleaseObjectRequest
3581    {
3582        #[inline(always)]
3583        fn new_empty() -> Self {
3584            Self {
3585                object_id: fidl::new_empty!(u64, D),
3586                object_type: fidl::new_empty!(ObjectType, D),
3587            }
3588        }
3589
3590        #[inline]
3591        unsafe fn decode(
3592            &mut self,
3593            decoder: &mut fidl::encoding::Decoder<'_, D>,
3594            offset: usize,
3595            _depth: fidl::encoding::Depth,
3596        ) -> fidl::Result<()> {
3597            decoder.debug_check_bounds::<Self>(offset);
3598            // Verify that padding bytes are zero.
3599            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
3600            let padval = unsafe { (ptr as *const u64).read_unaligned() };
3601            let mask = 0xffffffff00000000u64;
3602            let maskedval = padval & mask;
3603            if maskedval != 0 {
3604                return Err(fidl::Error::NonZeroPadding {
3605                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
3606                });
3607            }
3608            fidl::decode!(u64, D, &mut self.object_id, decoder, offset + 0, _depth)?;
3609            fidl::decode!(ObjectType, D, &mut self.object_type, decoder, offset + 8, _depth)?;
3610            Ok(())
3611        }
3612    }
3613
3614    impl fidl::encoding::ValueTypeMarker for PrimaryReleasePerformanceCounterBufferPoolRequest {
3615        type Borrowed<'a> = &'a Self;
3616        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3617            value
3618        }
3619    }
3620
3621    unsafe impl fidl::encoding::TypeMarker for PrimaryReleasePerformanceCounterBufferPoolRequest {
3622        type Owned = Self;
3623
3624        #[inline(always)]
3625        fn inline_align(_context: fidl::encoding::Context) -> usize {
3626            8
3627        }
3628
3629        #[inline(always)]
3630        fn inline_size(_context: fidl::encoding::Context) -> usize {
3631            8
3632        }
3633        #[inline(always)]
3634        fn encode_is_copy() -> bool {
3635            true
3636        }
3637
3638        #[inline(always)]
3639        fn decode_is_copy() -> bool {
3640            true
3641        }
3642    }
3643
3644    unsafe impl<D: fidl::encoding::ResourceDialect>
3645        fidl::encoding::Encode<PrimaryReleasePerformanceCounterBufferPoolRequest, D>
3646        for &PrimaryReleasePerformanceCounterBufferPoolRequest
3647    {
3648        #[inline]
3649        unsafe fn encode(
3650            self,
3651            encoder: &mut fidl::encoding::Encoder<'_, D>,
3652            offset: usize,
3653            _depth: fidl::encoding::Depth,
3654        ) -> fidl::Result<()> {
3655            encoder.debug_check_bounds::<PrimaryReleasePerformanceCounterBufferPoolRequest>(offset);
3656            unsafe {
3657                // Copy the object into the buffer.
3658                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3659                (buf_ptr as *mut PrimaryReleasePerformanceCounterBufferPoolRequest)
3660                    .write_unaligned(
3661                        (self as *const PrimaryReleasePerformanceCounterBufferPoolRequest).read(),
3662                    );
3663                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3664                // done second because the memcpy will write garbage to these bytes.
3665            }
3666            Ok(())
3667        }
3668    }
3669    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u64, D>>
3670        fidl::encoding::Encode<PrimaryReleasePerformanceCounterBufferPoolRequest, D> for (T0,)
3671    {
3672        #[inline]
3673        unsafe fn encode(
3674            self,
3675            encoder: &mut fidl::encoding::Encoder<'_, D>,
3676            offset: usize,
3677            depth: fidl::encoding::Depth,
3678        ) -> fidl::Result<()> {
3679            encoder.debug_check_bounds::<PrimaryReleasePerformanceCounterBufferPoolRequest>(offset);
3680            // Zero out padding regions. There's no need to apply masks
3681            // because the unmasked parts will be overwritten by fields.
3682            // Write the fields.
3683            self.0.encode(encoder, offset + 0, depth)?;
3684            Ok(())
3685        }
3686    }
3687
3688    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3689        for PrimaryReleasePerformanceCounterBufferPoolRequest
3690    {
3691        #[inline(always)]
3692        fn new_empty() -> Self {
3693            Self { pool_id: fidl::new_empty!(u64, D) }
3694        }
3695
3696        #[inline]
3697        unsafe fn decode(
3698            &mut self,
3699            decoder: &mut fidl::encoding::Decoder<'_, D>,
3700            offset: usize,
3701            _depth: fidl::encoding::Depth,
3702        ) -> fidl::Result<()> {
3703            decoder.debug_check_bounds::<Self>(offset);
3704            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3705            // Verify that padding bytes are zero.
3706            // Copy from the buffer into the object.
3707            unsafe {
3708                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
3709            }
3710            Ok(())
3711        }
3712    }
3713
3714    impl fidl::encoding::ValueTypeMarker for PrimaryRemovePerformanceCounterBufferFromPoolRequest {
3715        type Borrowed<'a> = &'a Self;
3716        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3717            value
3718        }
3719    }
3720
3721    unsafe impl fidl::encoding::TypeMarker for PrimaryRemovePerformanceCounterBufferFromPoolRequest {
3722        type Owned = Self;
3723
3724        #[inline(always)]
3725        fn inline_align(_context: fidl::encoding::Context) -> usize {
3726            8
3727        }
3728
3729        #[inline(always)]
3730        fn inline_size(_context: fidl::encoding::Context) -> usize {
3731            16
3732        }
3733        #[inline(always)]
3734        fn encode_is_copy() -> bool {
3735            true
3736        }
3737
3738        #[inline(always)]
3739        fn decode_is_copy() -> bool {
3740            true
3741        }
3742    }
3743
3744    unsafe impl<D: fidl::encoding::ResourceDialect>
3745        fidl::encoding::Encode<PrimaryRemovePerformanceCounterBufferFromPoolRequest, D>
3746        for &PrimaryRemovePerformanceCounterBufferFromPoolRequest
3747    {
3748        #[inline]
3749        unsafe fn encode(
3750            self,
3751            encoder: &mut fidl::encoding::Encoder<'_, D>,
3752            offset: usize,
3753            _depth: fidl::encoding::Depth,
3754        ) -> fidl::Result<()> {
3755            encoder
3756                .debug_check_bounds::<PrimaryRemovePerformanceCounterBufferFromPoolRequest>(offset);
3757            unsafe {
3758                // Copy the object into the buffer.
3759                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3760                (buf_ptr as *mut PrimaryRemovePerformanceCounterBufferFromPoolRequest)
3761                    .write_unaligned(
3762                        (self as *const PrimaryRemovePerformanceCounterBufferFromPoolRequest)
3763                            .read(),
3764                    );
3765                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3766                // done second because the memcpy will write garbage to these bytes.
3767            }
3768            Ok(())
3769        }
3770    }
3771    unsafe impl<
3772        D: fidl::encoding::ResourceDialect,
3773        T0: fidl::encoding::Encode<u64, D>,
3774        T1: fidl::encoding::Encode<u64, D>,
3775    > fidl::encoding::Encode<PrimaryRemovePerformanceCounterBufferFromPoolRequest, D> for (T0, T1)
3776    {
3777        #[inline]
3778        unsafe fn encode(
3779            self,
3780            encoder: &mut fidl::encoding::Encoder<'_, D>,
3781            offset: usize,
3782            depth: fidl::encoding::Depth,
3783        ) -> fidl::Result<()> {
3784            encoder
3785                .debug_check_bounds::<PrimaryRemovePerformanceCounterBufferFromPoolRequest>(offset);
3786            // Zero out padding regions. There's no need to apply masks
3787            // because the unmasked parts will be overwritten by fields.
3788            // Write the fields.
3789            self.0.encode(encoder, offset + 0, depth)?;
3790            self.1.encode(encoder, offset + 8, depth)?;
3791            Ok(())
3792        }
3793    }
3794
3795    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3796        for PrimaryRemovePerformanceCounterBufferFromPoolRequest
3797    {
3798        #[inline(always)]
3799        fn new_empty() -> Self {
3800            Self { pool_id: fidl::new_empty!(u64, D), buffer_id: fidl::new_empty!(u64, D) }
3801        }
3802
3803        #[inline]
3804        unsafe fn decode(
3805            &mut self,
3806            decoder: &mut fidl::encoding::Decoder<'_, D>,
3807            offset: usize,
3808            _depth: fidl::encoding::Depth,
3809        ) -> fidl::Result<()> {
3810            decoder.debug_check_bounds::<Self>(offset);
3811            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3812            // Verify that padding bytes are zero.
3813            // Copy from the buffer into the object.
3814            unsafe {
3815                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
3816            }
3817            Ok(())
3818        }
3819    }
3820
3821    impl fidl::encoding::ValueTypeMarker for TestDevice2GetUnitTestStatusResponse {
3822        type Borrowed<'a> = &'a Self;
3823        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3824            value
3825        }
3826    }
3827
3828    unsafe impl fidl::encoding::TypeMarker for TestDevice2GetUnitTestStatusResponse {
3829        type Owned = Self;
3830
3831        #[inline(always)]
3832        fn inline_align(_context: fidl::encoding::Context) -> usize {
3833            4
3834        }
3835
3836        #[inline(always)]
3837        fn inline_size(_context: fidl::encoding::Context) -> usize {
3838            4
3839        }
3840        #[inline(always)]
3841        fn encode_is_copy() -> bool {
3842            true
3843        }
3844
3845        #[inline(always)]
3846        fn decode_is_copy() -> bool {
3847            true
3848        }
3849    }
3850
3851    unsafe impl<D: fidl::encoding::ResourceDialect>
3852        fidl::encoding::Encode<TestDevice2GetUnitTestStatusResponse, D>
3853        for &TestDevice2GetUnitTestStatusResponse
3854    {
3855        #[inline]
3856        unsafe fn encode(
3857            self,
3858            encoder: &mut fidl::encoding::Encoder<'_, D>,
3859            offset: usize,
3860            _depth: fidl::encoding::Depth,
3861        ) -> fidl::Result<()> {
3862            encoder.debug_check_bounds::<TestDevice2GetUnitTestStatusResponse>(offset);
3863            unsafe {
3864                // Copy the object into the buffer.
3865                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3866                (buf_ptr as *mut TestDevice2GetUnitTestStatusResponse)
3867                    .write_unaligned((self as *const TestDevice2GetUnitTestStatusResponse).read());
3868                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3869                // done second because the memcpy will write garbage to these bytes.
3870            }
3871            Ok(())
3872        }
3873    }
3874    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
3875        fidl::encoding::Encode<TestDevice2GetUnitTestStatusResponse, D> for (T0,)
3876    {
3877        #[inline]
3878        unsafe fn encode(
3879            self,
3880            encoder: &mut fidl::encoding::Encoder<'_, D>,
3881            offset: usize,
3882            depth: fidl::encoding::Depth,
3883        ) -> fidl::Result<()> {
3884            encoder.debug_check_bounds::<TestDevice2GetUnitTestStatusResponse>(offset);
3885            // Zero out padding regions. There's no need to apply masks
3886            // because the unmasked parts will be overwritten by fields.
3887            // Write the fields.
3888            self.0.encode(encoder, offset + 0, depth)?;
3889            Ok(())
3890        }
3891    }
3892
3893    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3894        for TestDevice2GetUnitTestStatusResponse
3895    {
3896        #[inline(always)]
3897        fn new_empty() -> Self {
3898            Self { status: fidl::new_empty!(i32, D) }
3899        }
3900
3901        #[inline]
3902        unsafe fn decode(
3903            &mut self,
3904            decoder: &mut fidl::encoding::Decoder<'_, D>,
3905            offset: usize,
3906            _depth: fidl::encoding::Depth,
3907        ) -> fidl::Result<()> {
3908            decoder.debug_check_bounds::<Self>(offset);
3909            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
3910            // Verify that padding bytes are zero.
3911            // Copy from the buffer into the object.
3912            unsafe {
3913                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
3914            }
3915            Ok(())
3916        }
3917    }
3918
3919    impl fidl::encoding::ValueTypeMarker for TestDeviceGetUnitTestStatusResponse {
3920        type Borrowed<'a> = &'a Self;
3921        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3922            value
3923        }
3924    }
3925
3926    unsafe impl fidl::encoding::TypeMarker for TestDeviceGetUnitTestStatusResponse {
3927        type Owned = Self;
3928
3929        #[inline(always)]
3930        fn inline_align(_context: fidl::encoding::Context) -> usize {
3931            4
3932        }
3933
3934        #[inline(always)]
3935        fn inline_size(_context: fidl::encoding::Context) -> usize {
3936            4
3937        }
3938        #[inline(always)]
3939        fn encode_is_copy() -> bool {
3940            true
3941        }
3942
3943        #[inline(always)]
3944        fn decode_is_copy() -> bool {
3945            true
3946        }
3947    }
3948
3949    unsafe impl<D: fidl::encoding::ResourceDialect>
3950        fidl::encoding::Encode<TestDeviceGetUnitTestStatusResponse, D>
3951        for &TestDeviceGetUnitTestStatusResponse
3952    {
3953        #[inline]
3954        unsafe fn encode(
3955            self,
3956            encoder: &mut fidl::encoding::Encoder<'_, D>,
3957            offset: usize,
3958            _depth: fidl::encoding::Depth,
3959        ) -> fidl::Result<()> {
3960            encoder.debug_check_bounds::<TestDeviceGetUnitTestStatusResponse>(offset);
3961            unsafe {
3962                // Copy the object into the buffer.
3963                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
3964                (buf_ptr as *mut TestDeviceGetUnitTestStatusResponse)
3965                    .write_unaligned((self as *const TestDeviceGetUnitTestStatusResponse).read());
3966                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
3967                // done second because the memcpy will write garbage to these bytes.
3968            }
3969            Ok(())
3970        }
3971    }
3972    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i32, D>>
3973        fidl::encoding::Encode<TestDeviceGetUnitTestStatusResponse, D> for (T0,)
3974    {
3975        #[inline]
3976        unsafe fn encode(
3977            self,
3978            encoder: &mut fidl::encoding::Encoder<'_, D>,
3979            offset: usize,
3980            depth: fidl::encoding::Depth,
3981        ) -> fidl::Result<()> {
3982            encoder.debug_check_bounds::<TestDeviceGetUnitTestStatusResponse>(offset);
3983            // Zero out padding regions. There's no need to apply masks
3984            // because the unmasked parts will be overwritten by fields.
3985            // Write the fields.
3986            self.0.encode(encoder, offset + 0, depth)?;
3987            Ok(())
3988        }
3989    }
3990
3991    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
3992        for TestDeviceGetUnitTestStatusResponse
3993    {
3994        #[inline(always)]
3995        fn new_empty() -> Self {
3996            Self { status: fidl::new_empty!(i32, D) }
3997        }
3998
3999        #[inline]
4000        unsafe fn decode(
4001            &mut self,
4002            decoder: &mut fidl::encoding::Decoder<'_, D>,
4003            offset: usize,
4004            _depth: fidl::encoding::Depth,
4005        ) -> fidl::Result<()> {
4006            decoder.debug_check_bounds::<Self>(offset);
4007            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
4008            // Verify that padding bytes are zero.
4009            // Copy from the buffer into the object.
4010            unsafe {
4011                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 4);
4012            }
4013            Ok(())
4014        }
4015    }
4016
4017    impl IcdInfo {
4018        #[inline(always)]
4019        fn max_ordinal_present(&self) -> u64 {
4020            if let Some(_) = self.flags {
4021                return 2;
4022            }
4023            if let Some(_) = self.component_url {
4024                return 1;
4025            }
4026            0
4027        }
4028    }
4029
4030    impl fidl::encoding::ValueTypeMarker for IcdInfo {
4031        type Borrowed<'a> = &'a Self;
4032        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4033            value
4034        }
4035    }
4036
4037    unsafe impl fidl::encoding::TypeMarker for IcdInfo {
4038        type Owned = Self;
4039
4040        #[inline(always)]
4041        fn inline_align(_context: fidl::encoding::Context) -> usize {
4042            8
4043        }
4044
4045        #[inline(always)]
4046        fn inline_size(_context: fidl::encoding::Context) -> usize {
4047            16
4048        }
4049    }
4050
4051    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<IcdInfo, D> for &IcdInfo {
4052        unsafe fn encode(
4053            self,
4054            encoder: &mut fidl::encoding::Encoder<'_, D>,
4055            offset: usize,
4056            mut depth: fidl::encoding::Depth,
4057        ) -> fidl::Result<()> {
4058            encoder.debug_check_bounds::<IcdInfo>(offset);
4059            // Vector header
4060            let max_ordinal: u64 = self.max_ordinal_present();
4061            encoder.write_num(max_ordinal, offset);
4062            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4063            // Calling encoder.out_of_line_offset(0) is not allowed.
4064            if max_ordinal == 0 {
4065                return Ok(());
4066            }
4067            depth.increment()?;
4068            let envelope_size = 8;
4069            let bytes_len = max_ordinal as usize * envelope_size;
4070            #[allow(unused_variables)]
4071            let offset = encoder.out_of_line_offset(bytes_len);
4072            let mut _prev_end_offset: usize = 0;
4073            if 1 > max_ordinal {
4074                return Ok(());
4075            }
4076
4077            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4078            // are envelope_size bytes.
4079            let cur_offset: usize = (1 - 1) * envelope_size;
4080
4081            // Zero reserved fields.
4082            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4083
4084            // Safety:
4085            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4086            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4087            //   envelope_size bytes, there is always sufficient room.
4088            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::BoundedString<4096>, D>(
4089            self.component_url.as_ref().map(<fidl::encoding::BoundedString<4096> as fidl::encoding::ValueTypeMarker>::borrow),
4090            encoder, offset + cur_offset, depth
4091        )?;
4092
4093            _prev_end_offset = cur_offset + envelope_size;
4094            if 2 > max_ordinal {
4095                return Ok(());
4096            }
4097
4098            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4099            // are envelope_size bytes.
4100            let cur_offset: usize = (2 - 1) * envelope_size;
4101
4102            // Zero reserved fields.
4103            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4104
4105            // Safety:
4106            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4107            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4108            //   envelope_size bytes, there is always sufficient room.
4109            fidl::encoding::encode_in_envelope_optional::<IcdFlags, D>(
4110                self.flags.as_ref().map(<IcdFlags as fidl::encoding::ValueTypeMarker>::borrow),
4111                encoder,
4112                offset + cur_offset,
4113                depth,
4114            )?;
4115
4116            _prev_end_offset = cur_offset + envelope_size;
4117
4118            Ok(())
4119        }
4120    }
4121
4122    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for IcdInfo {
4123        #[inline(always)]
4124        fn new_empty() -> Self {
4125            Self::default()
4126        }
4127
4128        unsafe fn decode(
4129            &mut self,
4130            decoder: &mut fidl::encoding::Decoder<'_, D>,
4131            offset: usize,
4132            mut depth: fidl::encoding::Depth,
4133        ) -> fidl::Result<()> {
4134            decoder.debug_check_bounds::<Self>(offset);
4135            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4136                None => return Err(fidl::Error::NotNullable),
4137                Some(len) => len,
4138            };
4139            // Calling decoder.out_of_line_offset(0) is not allowed.
4140            if len == 0 {
4141                return Ok(());
4142            };
4143            depth.increment()?;
4144            let envelope_size = 8;
4145            let bytes_len = len * envelope_size;
4146            let offset = decoder.out_of_line_offset(bytes_len)?;
4147            // Decode the envelope for each type.
4148            let mut _next_ordinal_to_read = 0;
4149            let mut next_offset = offset;
4150            let end_offset = offset + bytes_len;
4151            _next_ordinal_to_read += 1;
4152            if next_offset >= end_offset {
4153                return Ok(());
4154            }
4155
4156            // Decode unknown envelopes for gaps in ordinals.
4157            while _next_ordinal_to_read < 1 {
4158                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4159                _next_ordinal_to_read += 1;
4160                next_offset += envelope_size;
4161            }
4162
4163            let next_out_of_line = decoder.next_out_of_line();
4164            let handles_before = decoder.remaining_handles();
4165            if let Some((inlined, num_bytes, num_handles)) =
4166                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4167            {
4168                let member_inline_size = <fidl::encoding::BoundedString<4096> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4169                if inlined != (member_inline_size <= 4) {
4170                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4171                }
4172                let inner_offset;
4173                let mut inner_depth = depth.clone();
4174                if inlined {
4175                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4176                    inner_offset = next_offset;
4177                } else {
4178                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4179                    inner_depth.increment()?;
4180                }
4181                let val_ref = self.component_url.get_or_insert_with(|| {
4182                    fidl::new_empty!(fidl::encoding::BoundedString<4096>, D)
4183                });
4184                fidl::decode!(
4185                    fidl::encoding::BoundedString<4096>,
4186                    D,
4187                    val_ref,
4188                    decoder,
4189                    inner_offset,
4190                    inner_depth
4191                )?;
4192                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4193                {
4194                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4195                }
4196                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4197                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4198                }
4199            }
4200
4201            next_offset += envelope_size;
4202            _next_ordinal_to_read += 1;
4203            if next_offset >= end_offset {
4204                return Ok(());
4205            }
4206
4207            // Decode unknown envelopes for gaps in ordinals.
4208            while _next_ordinal_to_read < 2 {
4209                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4210                _next_ordinal_to_read += 1;
4211                next_offset += envelope_size;
4212            }
4213
4214            let next_out_of_line = decoder.next_out_of_line();
4215            let handles_before = decoder.remaining_handles();
4216            if let Some((inlined, num_bytes, num_handles)) =
4217                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4218            {
4219                let member_inline_size =
4220                    <IcdFlags as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4221                if inlined != (member_inline_size <= 4) {
4222                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4223                }
4224                let inner_offset;
4225                let mut inner_depth = depth.clone();
4226                if inlined {
4227                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4228                    inner_offset = next_offset;
4229                } else {
4230                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4231                    inner_depth.increment()?;
4232                }
4233                let val_ref = self.flags.get_or_insert_with(|| fidl::new_empty!(IcdFlags, D));
4234                fidl::decode!(IcdFlags, D, val_ref, decoder, inner_offset, inner_depth)?;
4235                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4236                {
4237                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4238                }
4239                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4240                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4241                }
4242            }
4243
4244            next_offset += envelope_size;
4245
4246            // Decode the remaining unknown envelopes.
4247            while next_offset < end_offset {
4248                _next_ordinal_to_read += 1;
4249                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4250                next_offset += envelope_size;
4251            }
4252
4253            Ok(())
4254        }
4255    }
4256
4257    impl InlineCommand {
4258        #[inline(always)]
4259        fn max_ordinal_present(&self) -> u64 {
4260            if let Some(_) = self.semaphores {
4261                return 2;
4262            }
4263            if let Some(_) = self.data {
4264                return 1;
4265            }
4266            0
4267        }
4268    }
4269
4270    impl fidl::encoding::ValueTypeMarker for InlineCommand {
4271        type Borrowed<'a> = &'a Self;
4272        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4273            value
4274        }
4275    }
4276
4277    unsafe impl fidl::encoding::TypeMarker for InlineCommand {
4278        type Owned = Self;
4279
4280        #[inline(always)]
4281        fn inline_align(_context: fidl::encoding::Context) -> usize {
4282            8
4283        }
4284
4285        #[inline(always)]
4286        fn inline_size(_context: fidl::encoding::Context) -> usize {
4287            16
4288        }
4289    }
4290
4291    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<InlineCommand, D>
4292        for &InlineCommand
4293    {
4294        unsafe fn encode(
4295            self,
4296            encoder: &mut fidl::encoding::Encoder<'_, D>,
4297            offset: usize,
4298            mut depth: fidl::encoding::Depth,
4299        ) -> fidl::Result<()> {
4300            encoder.debug_check_bounds::<InlineCommand>(offset);
4301            // Vector header
4302            let max_ordinal: u64 = self.max_ordinal_present();
4303            encoder.write_num(max_ordinal, offset);
4304            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4305            // Calling encoder.out_of_line_offset(0) is not allowed.
4306            if max_ordinal == 0 {
4307                return Ok(());
4308            }
4309            depth.increment()?;
4310            let envelope_size = 8;
4311            let bytes_len = max_ordinal as usize * envelope_size;
4312            #[allow(unused_variables)]
4313            let offset = encoder.out_of_line_offset(bytes_len);
4314            let mut _prev_end_offset: usize = 0;
4315            if 1 > max_ordinal {
4316                return Ok(());
4317            }
4318
4319            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4320            // are envelope_size bytes.
4321            let cur_offset: usize = (1 - 1) * envelope_size;
4322
4323            // Zero reserved fields.
4324            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4325
4326            // Safety:
4327            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4328            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4329            //   envelope_size bytes, there is always sufficient room.
4330            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u8>, D>(
4331            self.data.as_ref().map(<fidl::encoding::UnboundedVector<u8> as fidl::encoding::ValueTypeMarker>::borrow),
4332            encoder, offset + cur_offset, depth
4333        )?;
4334
4335            _prev_end_offset = cur_offset + envelope_size;
4336            if 2 > max_ordinal {
4337                return Ok(());
4338            }
4339
4340            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4341            // are envelope_size bytes.
4342            let cur_offset: usize = (2 - 1) * envelope_size;
4343
4344            // Zero reserved fields.
4345            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4346
4347            // Safety:
4348            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4349            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4350            //   envelope_size bytes, there is always sufficient room.
4351            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::UnboundedVector<u64>, D>(
4352            self.semaphores.as_ref().map(<fidl::encoding::UnboundedVector<u64> as fidl::encoding::ValueTypeMarker>::borrow),
4353            encoder, offset + cur_offset, depth
4354        )?;
4355
4356            _prev_end_offset = cur_offset + envelope_size;
4357
4358            Ok(())
4359        }
4360    }
4361
4362    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for InlineCommand {
4363        #[inline(always)]
4364        fn new_empty() -> Self {
4365            Self::default()
4366        }
4367
4368        unsafe fn decode(
4369            &mut self,
4370            decoder: &mut fidl::encoding::Decoder<'_, D>,
4371            offset: usize,
4372            mut depth: fidl::encoding::Depth,
4373        ) -> fidl::Result<()> {
4374            decoder.debug_check_bounds::<Self>(offset);
4375            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4376                None => return Err(fidl::Error::NotNullable),
4377                Some(len) => len,
4378            };
4379            // Calling decoder.out_of_line_offset(0) is not allowed.
4380            if len == 0 {
4381                return Ok(());
4382            };
4383            depth.increment()?;
4384            let envelope_size = 8;
4385            let bytes_len = len * envelope_size;
4386            let offset = decoder.out_of_line_offset(bytes_len)?;
4387            // Decode the envelope for each type.
4388            let mut _next_ordinal_to_read = 0;
4389            let mut next_offset = offset;
4390            let end_offset = offset + bytes_len;
4391            _next_ordinal_to_read += 1;
4392            if next_offset >= end_offset {
4393                return Ok(());
4394            }
4395
4396            // Decode unknown envelopes for gaps in ordinals.
4397            while _next_ordinal_to_read < 1 {
4398                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4399                _next_ordinal_to_read += 1;
4400                next_offset += envelope_size;
4401            }
4402
4403            let next_out_of_line = decoder.next_out_of_line();
4404            let handles_before = decoder.remaining_handles();
4405            if let Some((inlined, num_bytes, num_handles)) =
4406                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4407            {
4408                let member_inline_size = <fidl::encoding::UnboundedVector<u8> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4409                if inlined != (member_inline_size <= 4) {
4410                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4411                }
4412                let inner_offset;
4413                let mut inner_depth = depth.clone();
4414                if inlined {
4415                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4416                    inner_offset = next_offset;
4417                } else {
4418                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4419                    inner_depth.increment()?;
4420                }
4421                let val_ref = self.data.get_or_insert_with(|| {
4422                    fidl::new_empty!(fidl::encoding::UnboundedVector<u8>, D)
4423                });
4424                fidl::decode!(
4425                    fidl::encoding::UnboundedVector<u8>,
4426                    D,
4427                    val_ref,
4428                    decoder,
4429                    inner_offset,
4430                    inner_depth
4431                )?;
4432                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4433                {
4434                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4435                }
4436                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4437                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4438                }
4439            }
4440
4441            next_offset += envelope_size;
4442            _next_ordinal_to_read += 1;
4443            if next_offset >= end_offset {
4444                return Ok(());
4445            }
4446
4447            // Decode unknown envelopes for gaps in ordinals.
4448            while _next_ordinal_to_read < 2 {
4449                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4450                _next_ordinal_to_read += 1;
4451                next_offset += envelope_size;
4452            }
4453
4454            let next_out_of_line = decoder.next_out_of_line();
4455            let handles_before = decoder.remaining_handles();
4456            if let Some((inlined, num_bytes, num_handles)) =
4457                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4458            {
4459                let member_inline_size = <fidl::encoding::UnboundedVector<u64> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4460                if inlined != (member_inline_size <= 4) {
4461                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4462                }
4463                let inner_offset;
4464                let mut inner_depth = depth.clone();
4465                if inlined {
4466                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4467                    inner_offset = next_offset;
4468                } else {
4469                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4470                    inner_depth.increment()?;
4471                }
4472                let val_ref = self.semaphores.get_or_insert_with(|| {
4473                    fidl::new_empty!(fidl::encoding::UnboundedVector<u64>, D)
4474                });
4475                fidl::decode!(
4476                    fidl::encoding::UnboundedVector<u64>,
4477                    D,
4478                    val_ref,
4479                    decoder,
4480                    inner_offset,
4481                    inner_depth
4482                )?;
4483                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4484                {
4485                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4486                }
4487                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4488                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4489                }
4490            }
4491
4492            next_offset += envelope_size;
4493
4494            // Decode the remaining unknown envelopes.
4495            while next_offset < end_offset {
4496                _next_ordinal_to_read += 1;
4497                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4498                next_offset += envelope_size;
4499            }
4500
4501            Ok(())
4502        }
4503    }
4504
4505    impl PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest {
4506        #[inline(always)]
4507        fn max_ordinal_present(&self) -> u64 {
4508            if let Some(_) = self.flags {
4509                return 5;
4510            }
4511            if let Some(_) = self.timestamp {
4512                return 4;
4513            }
4514            if let Some(_) = self.buffer_offset {
4515                return 3;
4516            }
4517            if let Some(_) = self.buffer_id {
4518                return 2;
4519            }
4520            if let Some(_) = self.trigger_id {
4521                return 1;
4522            }
4523            0
4524        }
4525    }
4526
4527    impl fidl::encoding::ValueTypeMarker
4528        for PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest
4529    {
4530        type Borrowed<'a> = &'a Self;
4531        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4532            value
4533        }
4534    }
4535
4536    unsafe impl fidl::encoding::TypeMarker
4537        for PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest
4538    {
4539        type Owned = Self;
4540
4541        #[inline(always)]
4542        fn inline_align(_context: fidl::encoding::Context) -> usize {
4543            8
4544        }
4545
4546        #[inline(always)]
4547        fn inline_size(_context: fidl::encoding::Context) -> usize {
4548            16
4549        }
4550    }
4551
4552    unsafe impl<D: fidl::encoding::ResourceDialect>
4553        fidl::encoding::Encode<PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest, D>
4554        for &PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest
4555    {
4556        unsafe fn encode(
4557            self,
4558            encoder: &mut fidl::encoding::Encoder<'_, D>,
4559            offset: usize,
4560            mut depth: fidl::encoding::Depth,
4561        ) -> fidl::Result<()> {
4562            encoder.debug_check_bounds::<PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest>(offset);
4563            // Vector header
4564            let max_ordinal: u64 = self.max_ordinal_present();
4565            encoder.write_num(max_ordinal, offset);
4566            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
4567            // Calling encoder.out_of_line_offset(0) is not allowed.
4568            if max_ordinal == 0 {
4569                return Ok(());
4570            }
4571            depth.increment()?;
4572            let envelope_size = 8;
4573            let bytes_len = max_ordinal as usize * envelope_size;
4574            #[allow(unused_variables)]
4575            let offset = encoder.out_of_line_offset(bytes_len);
4576            let mut _prev_end_offset: usize = 0;
4577            if 1 > max_ordinal {
4578                return Ok(());
4579            }
4580
4581            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4582            // are envelope_size bytes.
4583            let cur_offset: usize = (1 - 1) * envelope_size;
4584
4585            // Zero reserved fields.
4586            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4587
4588            // Safety:
4589            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4590            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4591            //   envelope_size bytes, there is always sufficient room.
4592            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4593                self.trigger_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4594                encoder,
4595                offset + cur_offset,
4596                depth,
4597            )?;
4598
4599            _prev_end_offset = cur_offset + envelope_size;
4600            if 2 > max_ordinal {
4601                return Ok(());
4602            }
4603
4604            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4605            // are envelope_size bytes.
4606            let cur_offset: usize = (2 - 1) * envelope_size;
4607
4608            // Zero reserved fields.
4609            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4610
4611            // Safety:
4612            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4613            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4614            //   envelope_size bytes, there is always sufficient room.
4615            fidl::encoding::encode_in_envelope_optional::<u64, D>(
4616                self.buffer_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
4617                encoder,
4618                offset + cur_offset,
4619                depth,
4620            )?;
4621
4622            _prev_end_offset = cur_offset + envelope_size;
4623            if 3 > max_ordinal {
4624                return Ok(());
4625            }
4626
4627            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4628            // are envelope_size bytes.
4629            let cur_offset: usize = (3 - 1) * envelope_size;
4630
4631            // Zero reserved fields.
4632            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4633
4634            // Safety:
4635            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4636            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4637            //   envelope_size bytes, there is always sufficient room.
4638            fidl::encoding::encode_in_envelope_optional::<u32, D>(
4639                self.buffer_offset.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
4640                encoder,
4641                offset + cur_offset,
4642                depth,
4643            )?;
4644
4645            _prev_end_offset = cur_offset + envelope_size;
4646            if 4 > max_ordinal {
4647                return Ok(());
4648            }
4649
4650            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4651            // are envelope_size bytes.
4652            let cur_offset: usize = (4 - 1) * envelope_size;
4653
4654            // Zero reserved fields.
4655            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4656
4657            // Safety:
4658            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4659            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4660            //   envelope_size bytes, there is always sufficient room.
4661            fidl::encoding::encode_in_envelope_optional::<i64, D>(
4662                self.timestamp.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
4663                encoder,
4664                offset + cur_offset,
4665                depth,
4666            )?;
4667
4668            _prev_end_offset = cur_offset + envelope_size;
4669            if 5 > max_ordinal {
4670                return Ok(());
4671            }
4672
4673            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
4674            // are envelope_size bytes.
4675            let cur_offset: usize = (5 - 1) * envelope_size;
4676
4677            // Zero reserved fields.
4678            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
4679
4680            // Safety:
4681            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
4682            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
4683            //   envelope_size bytes, there is always sufficient room.
4684            fidl::encoding::encode_in_envelope_optional::<ResultFlags, D>(
4685                self.flags.as_ref().map(<ResultFlags as fidl::encoding::ValueTypeMarker>::borrow),
4686                encoder,
4687                offset + cur_offset,
4688                depth,
4689            )?;
4690
4691            _prev_end_offset = cur_offset + envelope_size;
4692
4693            Ok(())
4694        }
4695    }
4696
4697    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
4698        for PerformanceCounterEventsOnPerformanceCounterReadCompletedRequest
4699    {
4700        #[inline(always)]
4701        fn new_empty() -> Self {
4702            Self::default()
4703        }
4704
4705        unsafe fn decode(
4706            &mut self,
4707            decoder: &mut fidl::encoding::Decoder<'_, D>,
4708            offset: usize,
4709            mut depth: fidl::encoding::Depth,
4710        ) -> fidl::Result<()> {
4711            decoder.debug_check_bounds::<Self>(offset);
4712            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
4713                None => return Err(fidl::Error::NotNullable),
4714                Some(len) => len,
4715            };
4716            // Calling decoder.out_of_line_offset(0) is not allowed.
4717            if len == 0 {
4718                return Ok(());
4719            };
4720            depth.increment()?;
4721            let envelope_size = 8;
4722            let bytes_len = len * envelope_size;
4723            let offset = decoder.out_of_line_offset(bytes_len)?;
4724            // Decode the envelope for each type.
4725            let mut _next_ordinal_to_read = 0;
4726            let mut next_offset = offset;
4727            let end_offset = offset + bytes_len;
4728            _next_ordinal_to_read += 1;
4729            if next_offset >= end_offset {
4730                return Ok(());
4731            }
4732
4733            // Decode unknown envelopes for gaps in ordinals.
4734            while _next_ordinal_to_read < 1 {
4735                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4736                _next_ordinal_to_read += 1;
4737                next_offset += envelope_size;
4738            }
4739
4740            let next_out_of_line = decoder.next_out_of_line();
4741            let handles_before = decoder.remaining_handles();
4742            if let Some((inlined, num_bytes, num_handles)) =
4743                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4744            {
4745                let member_inline_size =
4746                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4747                if inlined != (member_inline_size <= 4) {
4748                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4749                }
4750                let inner_offset;
4751                let mut inner_depth = depth.clone();
4752                if inlined {
4753                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4754                    inner_offset = next_offset;
4755                } else {
4756                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4757                    inner_depth.increment()?;
4758                }
4759                let val_ref = self.trigger_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
4760                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4761                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4762                {
4763                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4764                }
4765                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4766                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4767                }
4768            }
4769
4770            next_offset += envelope_size;
4771            _next_ordinal_to_read += 1;
4772            if next_offset >= end_offset {
4773                return Ok(());
4774            }
4775
4776            // Decode unknown envelopes for gaps in ordinals.
4777            while _next_ordinal_to_read < 2 {
4778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4779                _next_ordinal_to_read += 1;
4780                next_offset += envelope_size;
4781            }
4782
4783            let next_out_of_line = decoder.next_out_of_line();
4784            let handles_before = decoder.remaining_handles();
4785            if let Some((inlined, num_bytes, num_handles)) =
4786                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4787            {
4788                let member_inline_size =
4789                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4790                if inlined != (member_inline_size <= 4) {
4791                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4792                }
4793                let inner_offset;
4794                let mut inner_depth = depth.clone();
4795                if inlined {
4796                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4797                    inner_offset = next_offset;
4798                } else {
4799                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4800                    inner_depth.increment()?;
4801                }
4802                let val_ref = self.buffer_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
4803                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
4804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4805                {
4806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4807                }
4808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4810                }
4811            }
4812
4813            next_offset += envelope_size;
4814            _next_ordinal_to_read += 1;
4815            if next_offset >= end_offset {
4816                return Ok(());
4817            }
4818
4819            // Decode unknown envelopes for gaps in ordinals.
4820            while _next_ordinal_to_read < 3 {
4821                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4822                _next_ordinal_to_read += 1;
4823                next_offset += envelope_size;
4824            }
4825
4826            let next_out_of_line = decoder.next_out_of_line();
4827            let handles_before = decoder.remaining_handles();
4828            if let Some((inlined, num_bytes, num_handles)) =
4829                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4830            {
4831                let member_inline_size =
4832                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4833                if inlined != (member_inline_size <= 4) {
4834                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4835                }
4836                let inner_offset;
4837                let mut inner_depth = depth.clone();
4838                if inlined {
4839                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4840                    inner_offset = next_offset;
4841                } else {
4842                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4843                    inner_depth.increment()?;
4844                }
4845                let val_ref = self.buffer_offset.get_or_insert_with(|| fidl::new_empty!(u32, D));
4846                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
4847                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4848                {
4849                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4850                }
4851                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4852                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4853                }
4854            }
4855
4856            next_offset += envelope_size;
4857            _next_ordinal_to_read += 1;
4858            if next_offset >= end_offset {
4859                return Ok(());
4860            }
4861
4862            // Decode unknown envelopes for gaps in ordinals.
4863            while _next_ordinal_to_read < 4 {
4864                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4865                _next_ordinal_to_read += 1;
4866                next_offset += envelope_size;
4867            }
4868
4869            let next_out_of_line = decoder.next_out_of_line();
4870            let handles_before = decoder.remaining_handles();
4871            if let Some((inlined, num_bytes, num_handles)) =
4872                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4873            {
4874                let member_inline_size =
4875                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4876                if inlined != (member_inline_size <= 4) {
4877                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4878                }
4879                let inner_offset;
4880                let mut inner_depth = depth.clone();
4881                if inlined {
4882                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4883                    inner_offset = next_offset;
4884                } else {
4885                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4886                    inner_depth.increment()?;
4887                }
4888                let val_ref = self.timestamp.get_or_insert_with(|| fidl::new_empty!(i64, D));
4889                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
4890                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4891                {
4892                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4893                }
4894                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4895                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4896                }
4897            }
4898
4899            next_offset += envelope_size;
4900            _next_ordinal_to_read += 1;
4901            if next_offset >= end_offset {
4902                return Ok(());
4903            }
4904
4905            // Decode unknown envelopes for gaps in ordinals.
4906            while _next_ordinal_to_read < 5 {
4907                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4908                _next_ordinal_to_read += 1;
4909                next_offset += envelope_size;
4910            }
4911
4912            let next_out_of_line = decoder.next_out_of_line();
4913            let handles_before = decoder.remaining_handles();
4914            if let Some((inlined, num_bytes, num_handles)) =
4915                fidl::encoding::decode_envelope_header(decoder, next_offset)?
4916            {
4917                let member_inline_size =
4918                    <ResultFlags as fidl::encoding::TypeMarker>::inline_size(decoder.context);
4919                if inlined != (member_inline_size <= 4) {
4920                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
4921                }
4922                let inner_offset;
4923                let mut inner_depth = depth.clone();
4924                if inlined {
4925                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
4926                    inner_offset = next_offset;
4927                } else {
4928                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
4929                    inner_depth.increment()?;
4930                }
4931                let val_ref = self.flags.get_or_insert_with(|| fidl::new_empty!(ResultFlags, D));
4932                fidl::decode!(ResultFlags, D, val_ref, decoder, inner_offset, inner_depth)?;
4933                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
4934                {
4935                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
4936                }
4937                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
4938                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
4939                }
4940            }
4941
4942            next_offset += envelope_size;
4943
4944            // Decode the remaining unknown envelopes.
4945            while next_offset < end_offset {
4946                _next_ordinal_to_read += 1;
4947                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
4948                next_offset += envelope_size;
4949            }
4950
4951            Ok(())
4952        }
4953    }
4954
4955    impl PowerElementProviderGetClockSpeedLevelRequest {
4956        #[inline(always)]
4957        fn max_ordinal_present(&self) -> u64 {
4958            if let Some(_) = self.allow_max {
4959                return 2;
4960            }
4961            if let Some(_) = self.hz {
4962                return 1;
4963            }
4964            0
4965        }
4966    }
4967
4968    impl fidl::encoding::ValueTypeMarker for PowerElementProviderGetClockSpeedLevelRequest {
4969        type Borrowed<'a> = &'a Self;
4970        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
4971            value
4972        }
4973    }
4974
4975    unsafe impl fidl::encoding::TypeMarker for PowerElementProviderGetClockSpeedLevelRequest {
4976        type Owned = Self;
4977
4978        #[inline(always)]
4979        fn inline_align(_context: fidl::encoding::Context) -> usize {
4980            8
4981        }
4982
4983        #[inline(always)]
4984        fn inline_size(_context: fidl::encoding::Context) -> usize {
4985            16
4986        }
4987    }
4988
4989    unsafe impl<D: fidl::encoding::ResourceDialect>
4990        fidl::encoding::Encode<PowerElementProviderGetClockSpeedLevelRequest, D>
4991        for &PowerElementProviderGetClockSpeedLevelRequest
4992    {
4993        unsafe fn encode(
4994            self,
4995            encoder: &mut fidl::encoding::Encoder<'_, D>,
4996            offset: usize,
4997            mut depth: fidl::encoding::Depth,
4998        ) -> fidl::Result<()> {
4999            encoder.debug_check_bounds::<PowerElementProviderGetClockSpeedLevelRequest>(offset);
5000            // Vector header
5001            let max_ordinal: u64 = self.max_ordinal_present();
5002            encoder.write_num(max_ordinal, offset);
5003            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5004            // Calling encoder.out_of_line_offset(0) is not allowed.
5005            if max_ordinal == 0 {
5006                return Ok(());
5007            }
5008            depth.increment()?;
5009            let envelope_size = 8;
5010            let bytes_len = max_ordinal as usize * envelope_size;
5011            #[allow(unused_variables)]
5012            let offset = encoder.out_of_line_offset(bytes_len);
5013            let mut _prev_end_offset: usize = 0;
5014            if 1 > max_ordinal {
5015                return Ok(());
5016            }
5017
5018            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5019            // are envelope_size bytes.
5020            let cur_offset: usize = (1 - 1) * envelope_size;
5021
5022            // Zero reserved fields.
5023            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5024
5025            // Safety:
5026            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5027            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5028            //   envelope_size bytes, there is always sufficient room.
5029            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5030                self.hz.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5031                encoder,
5032                offset + cur_offset,
5033                depth,
5034            )?;
5035
5036            _prev_end_offset = cur_offset + envelope_size;
5037            if 2 > max_ordinal {
5038                return Ok(());
5039            }
5040
5041            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5042            // are envelope_size bytes.
5043            let cur_offset: usize = (2 - 1) * envelope_size;
5044
5045            // Zero reserved fields.
5046            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5047
5048            // Safety:
5049            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5050            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5051            //   envelope_size bytes, there is always sufficient room.
5052            fidl::encoding::encode_in_envelope_optional::<bool, D>(
5053                self.allow_max.as_ref().map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
5054                encoder,
5055                offset + cur_offset,
5056                depth,
5057            )?;
5058
5059            _prev_end_offset = cur_offset + envelope_size;
5060
5061            Ok(())
5062        }
5063    }
5064
5065    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5066        for PowerElementProviderGetClockSpeedLevelRequest
5067    {
5068        #[inline(always)]
5069        fn new_empty() -> Self {
5070            Self::default()
5071        }
5072
5073        unsafe fn decode(
5074            &mut self,
5075            decoder: &mut fidl::encoding::Decoder<'_, D>,
5076            offset: usize,
5077            mut depth: fidl::encoding::Depth,
5078        ) -> fidl::Result<()> {
5079            decoder.debug_check_bounds::<Self>(offset);
5080            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5081                None => return Err(fidl::Error::NotNullable),
5082                Some(len) => len,
5083            };
5084            // Calling decoder.out_of_line_offset(0) is not allowed.
5085            if len == 0 {
5086                return Ok(());
5087            };
5088            depth.increment()?;
5089            let envelope_size = 8;
5090            let bytes_len = len * envelope_size;
5091            let offset = decoder.out_of_line_offset(bytes_len)?;
5092            // Decode the envelope for each type.
5093            let mut _next_ordinal_to_read = 0;
5094            let mut next_offset = offset;
5095            let end_offset = offset + bytes_len;
5096            _next_ordinal_to_read += 1;
5097            if next_offset >= end_offset {
5098                return Ok(());
5099            }
5100
5101            // Decode unknown envelopes for gaps in ordinals.
5102            while _next_ordinal_to_read < 1 {
5103                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5104                _next_ordinal_to_read += 1;
5105                next_offset += envelope_size;
5106            }
5107
5108            let next_out_of_line = decoder.next_out_of_line();
5109            let handles_before = decoder.remaining_handles();
5110            if let Some((inlined, num_bytes, num_handles)) =
5111                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5112            {
5113                let member_inline_size =
5114                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5115                if inlined != (member_inline_size <= 4) {
5116                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5117                }
5118                let inner_offset;
5119                let mut inner_depth = depth.clone();
5120                if inlined {
5121                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5122                    inner_offset = next_offset;
5123                } else {
5124                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5125                    inner_depth.increment()?;
5126                }
5127                let val_ref = self.hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
5128                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5129                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5130                {
5131                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5132                }
5133                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5134                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5135                }
5136            }
5137
5138            next_offset += envelope_size;
5139            _next_ordinal_to_read += 1;
5140            if next_offset >= end_offset {
5141                return Ok(());
5142            }
5143
5144            // Decode unknown envelopes for gaps in ordinals.
5145            while _next_ordinal_to_read < 2 {
5146                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5147                _next_ordinal_to_read += 1;
5148                next_offset += envelope_size;
5149            }
5150
5151            let next_out_of_line = decoder.next_out_of_line();
5152            let handles_before = decoder.remaining_handles();
5153            if let Some((inlined, num_bytes, num_handles)) =
5154                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5155            {
5156                let member_inline_size =
5157                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5158                if inlined != (member_inline_size <= 4) {
5159                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5160                }
5161                let inner_offset;
5162                let mut inner_depth = depth.clone();
5163                if inlined {
5164                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5165                    inner_offset = next_offset;
5166                } else {
5167                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5168                    inner_depth.increment()?;
5169                }
5170                let val_ref = self.allow_max.get_or_insert_with(|| fidl::new_empty!(bool, D));
5171                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
5172                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5173                {
5174                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5175                }
5176                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5177                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5178                }
5179            }
5180
5181            next_offset += envelope_size;
5182
5183            // Decode the remaining unknown envelopes.
5184            while next_offset < end_offset {
5185                _next_ordinal_to_read += 1;
5186                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5187                next_offset += envelope_size;
5188            }
5189
5190            Ok(())
5191        }
5192    }
5193
5194    impl PowerElementProviderSetClockLimitRequest {
5195        #[inline(always)]
5196        fn max_ordinal_present(&self) -> u64 {
5197            if let Some(_) = self.hz {
5198                return 1;
5199            }
5200            0
5201        }
5202    }
5203
5204    impl fidl::encoding::ValueTypeMarker for PowerElementProviderSetClockLimitRequest {
5205        type Borrowed<'a> = &'a Self;
5206        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5207            value
5208        }
5209    }
5210
5211    unsafe impl fidl::encoding::TypeMarker for PowerElementProviderSetClockLimitRequest {
5212        type Owned = Self;
5213
5214        #[inline(always)]
5215        fn inline_align(_context: fidl::encoding::Context) -> usize {
5216            8
5217        }
5218
5219        #[inline(always)]
5220        fn inline_size(_context: fidl::encoding::Context) -> usize {
5221            16
5222        }
5223    }
5224
5225    unsafe impl<D: fidl::encoding::ResourceDialect>
5226        fidl::encoding::Encode<PowerElementProviderSetClockLimitRequest, D>
5227        for &PowerElementProviderSetClockLimitRequest
5228    {
5229        unsafe fn encode(
5230            self,
5231            encoder: &mut fidl::encoding::Encoder<'_, D>,
5232            offset: usize,
5233            mut depth: fidl::encoding::Depth,
5234        ) -> fidl::Result<()> {
5235            encoder.debug_check_bounds::<PowerElementProviderSetClockLimitRequest>(offset);
5236            // Vector header
5237            let max_ordinal: u64 = self.max_ordinal_present();
5238            encoder.write_num(max_ordinal, offset);
5239            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5240            // Calling encoder.out_of_line_offset(0) is not allowed.
5241            if max_ordinal == 0 {
5242                return Ok(());
5243            }
5244            depth.increment()?;
5245            let envelope_size = 8;
5246            let bytes_len = max_ordinal as usize * envelope_size;
5247            #[allow(unused_variables)]
5248            let offset = encoder.out_of_line_offset(bytes_len);
5249            let mut _prev_end_offset: usize = 0;
5250            if 1 > max_ordinal {
5251                return Ok(());
5252            }
5253
5254            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5255            // are envelope_size bytes.
5256            let cur_offset: usize = (1 - 1) * envelope_size;
5257
5258            // Zero reserved fields.
5259            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5260
5261            // Safety:
5262            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5263            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5264            //   envelope_size bytes, there is always sufficient room.
5265            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5266                self.hz.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5267                encoder,
5268                offset + cur_offset,
5269                depth,
5270            )?;
5271
5272            _prev_end_offset = cur_offset + envelope_size;
5273
5274            Ok(())
5275        }
5276    }
5277
5278    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5279        for PowerElementProviderSetClockLimitRequest
5280    {
5281        #[inline(always)]
5282        fn new_empty() -> Self {
5283            Self::default()
5284        }
5285
5286        unsafe fn decode(
5287            &mut self,
5288            decoder: &mut fidl::encoding::Decoder<'_, D>,
5289            offset: usize,
5290            mut depth: fidl::encoding::Depth,
5291        ) -> fidl::Result<()> {
5292            decoder.debug_check_bounds::<Self>(offset);
5293            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5294                None => return Err(fidl::Error::NotNullable),
5295                Some(len) => len,
5296            };
5297            // Calling decoder.out_of_line_offset(0) is not allowed.
5298            if len == 0 {
5299                return Ok(());
5300            };
5301            depth.increment()?;
5302            let envelope_size = 8;
5303            let bytes_len = len * envelope_size;
5304            let offset = decoder.out_of_line_offset(bytes_len)?;
5305            // Decode the envelope for each type.
5306            let mut _next_ordinal_to_read = 0;
5307            let mut next_offset = offset;
5308            let end_offset = offset + bytes_len;
5309            _next_ordinal_to_read += 1;
5310            if next_offset >= end_offset {
5311                return Ok(());
5312            }
5313
5314            // Decode unknown envelopes for gaps in ordinals.
5315            while _next_ordinal_to_read < 1 {
5316                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5317                _next_ordinal_to_read += 1;
5318                next_offset += envelope_size;
5319            }
5320
5321            let next_out_of_line = decoder.next_out_of_line();
5322            let handles_before = decoder.remaining_handles();
5323            if let Some((inlined, num_bytes, num_handles)) =
5324                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5325            {
5326                let member_inline_size =
5327                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5328                if inlined != (member_inline_size <= 4) {
5329                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5330                }
5331                let inner_offset;
5332                let mut inner_depth = depth.clone();
5333                if inlined {
5334                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5335                    inner_offset = next_offset;
5336                } else {
5337                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5338                    inner_depth.increment()?;
5339                }
5340                let val_ref = self.hz.get_or_insert_with(|| fidl::new_empty!(u64, D));
5341                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5342                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5343                {
5344                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5345                }
5346                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5347                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5348                }
5349            }
5350
5351            next_offset += envelope_size;
5352
5353            // Decode the remaining unknown envelopes.
5354            while next_offset < end_offset {
5355                _next_ordinal_to_read += 1;
5356                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5357                next_offset += envelope_size;
5358            }
5359
5360            Ok(())
5361        }
5362    }
5363
5364    impl PrimaryMapBufferRequest {
5365        #[inline(always)]
5366        fn max_ordinal_present(&self) -> u64 {
5367            if let Some(_) = self.flags {
5368                return 3;
5369            }
5370            if let Some(_) = self.range {
5371                return 2;
5372            }
5373            if let Some(_) = self.hw_va {
5374                return 1;
5375            }
5376            0
5377        }
5378    }
5379
5380    impl fidl::encoding::ValueTypeMarker for PrimaryMapBufferRequest {
5381        type Borrowed<'a> = &'a Self;
5382        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5383            value
5384        }
5385    }
5386
5387    unsafe impl fidl::encoding::TypeMarker for PrimaryMapBufferRequest {
5388        type Owned = Self;
5389
5390        #[inline(always)]
5391        fn inline_align(_context: fidl::encoding::Context) -> usize {
5392            8
5393        }
5394
5395        #[inline(always)]
5396        fn inline_size(_context: fidl::encoding::Context) -> usize {
5397            16
5398        }
5399    }
5400
5401    unsafe impl<D: fidl::encoding::ResourceDialect>
5402        fidl::encoding::Encode<PrimaryMapBufferRequest, D> for &PrimaryMapBufferRequest
5403    {
5404        unsafe fn encode(
5405            self,
5406            encoder: &mut fidl::encoding::Encoder<'_, D>,
5407            offset: usize,
5408            mut depth: fidl::encoding::Depth,
5409        ) -> fidl::Result<()> {
5410            encoder.debug_check_bounds::<PrimaryMapBufferRequest>(offset);
5411            // Vector header
5412            let max_ordinal: u64 = self.max_ordinal_present();
5413            encoder.write_num(max_ordinal, offset);
5414            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5415            // Calling encoder.out_of_line_offset(0) is not allowed.
5416            if max_ordinal == 0 {
5417                return Ok(());
5418            }
5419            depth.increment()?;
5420            let envelope_size = 8;
5421            let bytes_len = max_ordinal as usize * envelope_size;
5422            #[allow(unused_variables)]
5423            let offset = encoder.out_of_line_offset(bytes_len);
5424            let mut _prev_end_offset: usize = 0;
5425            if 1 > max_ordinal {
5426                return Ok(());
5427            }
5428
5429            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5430            // are envelope_size bytes.
5431            let cur_offset: usize = (1 - 1) * envelope_size;
5432
5433            // Zero reserved fields.
5434            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5435
5436            // Safety:
5437            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5438            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5439            //   envelope_size bytes, there is always sufficient room.
5440            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5441                self.hw_va.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5442                encoder,
5443                offset + cur_offset,
5444                depth,
5445            )?;
5446
5447            _prev_end_offset = cur_offset + envelope_size;
5448            if 2 > max_ordinal {
5449                return Ok(());
5450            }
5451
5452            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5453            // are envelope_size bytes.
5454            let cur_offset: usize = (2 - 1) * envelope_size;
5455
5456            // Zero reserved fields.
5457            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5458
5459            // Safety:
5460            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5461            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5462            //   envelope_size bytes, there is always sufficient room.
5463            fidl::encoding::encode_in_envelope_optional::<BufferRange, D>(
5464                self.range.as_ref().map(<BufferRange as fidl::encoding::ValueTypeMarker>::borrow),
5465                encoder,
5466                offset + cur_offset,
5467                depth,
5468            )?;
5469
5470            _prev_end_offset = cur_offset + envelope_size;
5471            if 3 > max_ordinal {
5472                return Ok(());
5473            }
5474
5475            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5476            // are envelope_size bytes.
5477            let cur_offset: usize = (3 - 1) * envelope_size;
5478
5479            // Zero reserved fields.
5480            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5481
5482            // Safety:
5483            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5484            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5485            //   envelope_size bytes, there is always sufficient room.
5486            fidl::encoding::encode_in_envelope_optional::<MapFlags, D>(
5487                self.flags.as_ref().map(<MapFlags as fidl::encoding::ValueTypeMarker>::borrow),
5488                encoder,
5489                offset + cur_offset,
5490                depth,
5491            )?;
5492
5493            _prev_end_offset = cur_offset + envelope_size;
5494
5495            Ok(())
5496        }
5497    }
5498
5499    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5500        for PrimaryMapBufferRequest
5501    {
5502        #[inline(always)]
5503        fn new_empty() -> Self {
5504            Self::default()
5505        }
5506
5507        unsafe fn decode(
5508            &mut self,
5509            decoder: &mut fidl::encoding::Decoder<'_, D>,
5510            offset: usize,
5511            mut depth: fidl::encoding::Depth,
5512        ) -> fidl::Result<()> {
5513            decoder.debug_check_bounds::<Self>(offset);
5514            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5515                None => return Err(fidl::Error::NotNullable),
5516                Some(len) => len,
5517            };
5518            // Calling decoder.out_of_line_offset(0) is not allowed.
5519            if len == 0 {
5520                return Ok(());
5521            };
5522            depth.increment()?;
5523            let envelope_size = 8;
5524            let bytes_len = len * envelope_size;
5525            let offset = decoder.out_of_line_offset(bytes_len)?;
5526            // Decode the envelope for each type.
5527            let mut _next_ordinal_to_read = 0;
5528            let mut next_offset = offset;
5529            let end_offset = offset + bytes_len;
5530            _next_ordinal_to_read += 1;
5531            if next_offset >= end_offset {
5532                return Ok(());
5533            }
5534
5535            // Decode unknown envelopes for gaps in ordinals.
5536            while _next_ordinal_to_read < 1 {
5537                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5538                _next_ordinal_to_read += 1;
5539                next_offset += envelope_size;
5540            }
5541
5542            let next_out_of_line = decoder.next_out_of_line();
5543            let handles_before = decoder.remaining_handles();
5544            if let Some((inlined, num_bytes, num_handles)) =
5545                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5546            {
5547                let member_inline_size =
5548                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5549                if inlined != (member_inline_size <= 4) {
5550                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5551                }
5552                let inner_offset;
5553                let mut inner_depth = depth.clone();
5554                if inlined {
5555                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5556                    inner_offset = next_offset;
5557                } else {
5558                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5559                    inner_depth.increment()?;
5560                }
5561                let val_ref = self.hw_va.get_or_insert_with(|| fidl::new_empty!(u64, D));
5562                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5563                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5564                {
5565                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5566                }
5567                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5568                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5569                }
5570            }
5571
5572            next_offset += envelope_size;
5573            _next_ordinal_to_read += 1;
5574            if next_offset >= end_offset {
5575                return Ok(());
5576            }
5577
5578            // Decode unknown envelopes for gaps in ordinals.
5579            while _next_ordinal_to_read < 2 {
5580                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5581                _next_ordinal_to_read += 1;
5582                next_offset += envelope_size;
5583            }
5584
5585            let next_out_of_line = decoder.next_out_of_line();
5586            let handles_before = decoder.remaining_handles();
5587            if let Some((inlined, num_bytes, num_handles)) =
5588                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5589            {
5590                let member_inline_size =
5591                    <BufferRange as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5592                if inlined != (member_inline_size <= 4) {
5593                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5594                }
5595                let inner_offset;
5596                let mut inner_depth = depth.clone();
5597                if inlined {
5598                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5599                    inner_offset = next_offset;
5600                } else {
5601                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5602                    inner_depth.increment()?;
5603                }
5604                let val_ref = self.range.get_or_insert_with(|| fidl::new_empty!(BufferRange, D));
5605                fidl::decode!(BufferRange, D, val_ref, decoder, inner_offset, inner_depth)?;
5606                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5607                {
5608                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5609                }
5610                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5611                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5612                }
5613            }
5614
5615            next_offset += envelope_size;
5616            _next_ordinal_to_read += 1;
5617            if next_offset >= end_offset {
5618                return Ok(());
5619            }
5620
5621            // Decode unknown envelopes for gaps in ordinals.
5622            while _next_ordinal_to_read < 3 {
5623                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5624                _next_ordinal_to_read += 1;
5625                next_offset += envelope_size;
5626            }
5627
5628            let next_out_of_line = decoder.next_out_of_line();
5629            let handles_before = decoder.remaining_handles();
5630            if let Some((inlined, num_bytes, num_handles)) =
5631                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5632            {
5633                let member_inline_size =
5634                    <MapFlags as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5635                if inlined != (member_inline_size <= 4) {
5636                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5637                }
5638                let inner_offset;
5639                let mut inner_depth = depth.clone();
5640                if inlined {
5641                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5642                    inner_offset = next_offset;
5643                } else {
5644                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5645                    inner_depth.increment()?;
5646                }
5647                let val_ref = self.flags.get_or_insert_with(|| fidl::new_empty!(MapFlags, D));
5648                fidl::decode!(MapFlags, D, val_ref, decoder, inner_offset, inner_depth)?;
5649                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5650                {
5651                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5652                }
5653                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5654                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5655                }
5656            }
5657
5658            next_offset += envelope_size;
5659
5660            // Decode the remaining unknown envelopes.
5661            while next_offset < end_offset {
5662                _next_ordinal_to_read += 1;
5663                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5664                next_offset += envelope_size;
5665            }
5666
5667            Ok(())
5668        }
5669    }
5670
5671    impl PrimaryUnmapBufferRequest {
5672        #[inline(always)]
5673        fn max_ordinal_present(&self) -> u64 {
5674            if let Some(_) = self.buffer_id {
5675                return 2;
5676            }
5677            if let Some(_) = self.hw_va {
5678                return 1;
5679            }
5680            0
5681        }
5682    }
5683
5684    impl fidl::encoding::ValueTypeMarker for PrimaryUnmapBufferRequest {
5685        type Borrowed<'a> = &'a Self;
5686        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
5687            value
5688        }
5689    }
5690
5691    unsafe impl fidl::encoding::TypeMarker for PrimaryUnmapBufferRequest {
5692        type Owned = Self;
5693
5694        #[inline(always)]
5695        fn inline_align(_context: fidl::encoding::Context) -> usize {
5696            8
5697        }
5698
5699        #[inline(always)]
5700        fn inline_size(_context: fidl::encoding::Context) -> usize {
5701            16
5702        }
5703    }
5704
5705    unsafe impl<D: fidl::encoding::ResourceDialect>
5706        fidl::encoding::Encode<PrimaryUnmapBufferRequest, D> for &PrimaryUnmapBufferRequest
5707    {
5708        unsafe fn encode(
5709            self,
5710            encoder: &mut fidl::encoding::Encoder<'_, D>,
5711            offset: usize,
5712            mut depth: fidl::encoding::Depth,
5713        ) -> fidl::Result<()> {
5714            encoder.debug_check_bounds::<PrimaryUnmapBufferRequest>(offset);
5715            // Vector header
5716            let max_ordinal: u64 = self.max_ordinal_present();
5717            encoder.write_num(max_ordinal, offset);
5718            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
5719            // Calling encoder.out_of_line_offset(0) is not allowed.
5720            if max_ordinal == 0 {
5721                return Ok(());
5722            }
5723            depth.increment()?;
5724            let envelope_size = 8;
5725            let bytes_len = max_ordinal as usize * envelope_size;
5726            #[allow(unused_variables)]
5727            let offset = encoder.out_of_line_offset(bytes_len);
5728            let mut _prev_end_offset: usize = 0;
5729            if 1 > max_ordinal {
5730                return Ok(());
5731            }
5732
5733            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5734            // are envelope_size bytes.
5735            let cur_offset: usize = (1 - 1) * envelope_size;
5736
5737            // Zero reserved fields.
5738            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5739
5740            // Safety:
5741            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5742            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5743            //   envelope_size bytes, there is always sufficient room.
5744            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5745                self.hw_va.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5746                encoder,
5747                offset + cur_offset,
5748                depth,
5749            )?;
5750
5751            _prev_end_offset = cur_offset + envelope_size;
5752            if 2 > max_ordinal {
5753                return Ok(());
5754            }
5755
5756            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
5757            // are envelope_size bytes.
5758            let cur_offset: usize = (2 - 1) * envelope_size;
5759
5760            // Zero reserved fields.
5761            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
5762
5763            // Safety:
5764            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
5765            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
5766            //   envelope_size bytes, there is always sufficient room.
5767            fidl::encoding::encode_in_envelope_optional::<u64, D>(
5768                self.buffer_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
5769                encoder,
5770                offset + cur_offset,
5771                depth,
5772            )?;
5773
5774            _prev_end_offset = cur_offset + envelope_size;
5775
5776            Ok(())
5777        }
5778    }
5779
5780    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
5781        for PrimaryUnmapBufferRequest
5782    {
5783        #[inline(always)]
5784        fn new_empty() -> Self {
5785            Self::default()
5786        }
5787
5788        unsafe fn decode(
5789            &mut self,
5790            decoder: &mut fidl::encoding::Decoder<'_, D>,
5791            offset: usize,
5792            mut depth: fidl::encoding::Depth,
5793        ) -> fidl::Result<()> {
5794            decoder.debug_check_bounds::<Self>(offset);
5795            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
5796                None => return Err(fidl::Error::NotNullable),
5797                Some(len) => len,
5798            };
5799            // Calling decoder.out_of_line_offset(0) is not allowed.
5800            if len == 0 {
5801                return Ok(());
5802            };
5803            depth.increment()?;
5804            let envelope_size = 8;
5805            let bytes_len = len * envelope_size;
5806            let offset = decoder.out_of_line_offset(bytes_len)?;
5807            // Decode the envelope for each type.
5808            let mut _next_ordinal_to_read = 0;
5809            let mut next_offset = offset;
5810            let end_offset = offset + bytes_len;
5811            _next_ordinal_to_read += 1;
5812            if next_offset >= end_offset {
5813                return Ok(());
5814            }
5815
5816            // Decode unknown envelopes for gaps in ordinals.
5817            while _next_ordinal_to_read < 1 {
5818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5819                _next_ordinal_to_read += 1;
5820                next_offset += envelope_size;
5821            }
5822
5823            let next_out_of_line = decoder.next_out_of_line();
5824            let handles_before = decoder.remaining_handles();
5825            if let Some((inlined, num_bytes, num_handles)) =
5826                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5827            {
5828                let member_inline_size =
5829                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5830                if inlined != (member_inline_size <= 4) {
5831                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5832                }
5833                let inner_offset;
5834                let mut inner_depth = depth.clone();
5835                if inlined {
5836                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5837                    inner_offset = next_offset;
5838                } else {
5839                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5840                    inner_depth.increment()?;
5841                }
5842                let val_ref = self.hw_va.get_or_insert_with(|| fidl::new_empty!(u64, D));
5843                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5844                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5845                {
5846                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5847                }
5848                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5849                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5850                }
5851            }
5852
5853            next_offset += envelope_size;
5854            _next_ordinal_to_read += 1;
5855            if next_offset >= end_offset {
5856                return Ok(());
5857            }
5858
5859            // Decode unknown envelopes for gaps in ordinals.
5860            while _next_ordinal_to_read < 2 {
5861                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5862                _next_ordinal_to_read += 1;
5863                next_offset += envelope_size;
5864            }
5865
5866            let next_out_of_line = decoder.next_out_of_line();
5867            let handles_before = decoder.remaining_handles();
5868            if let Some((inlined, num_bytes, num_handles)) =
5869                fidl::encoding::decode_envelope_header(decoder, next_offset)?
5870            {
5871                let member_inline_size =
5872                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
5873                if inlined != (member_inline_size <= 4) {
5874                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
5875                }
5876                let inner_offset;
5877                let mut inner_depth = depth.clone();
5878                if inlined {
5879                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
5880                    inner_offset = next_offset;
5881                } else {
5882                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
5883                    inner_depth.increment()?;
5884                }
5885                let val_ref = self.buffer_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
5886                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
5887                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
5888                {
5889                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
5890                }
5891                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
5892                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
5893                }
5894            }
5895
5896            next_offset += envelope_size;
5897
5898            // Decode the remaining unknown envelopes.
5899            while next_offset < end_offset {
5900                _next_ordinal_to_read += 1;
5901                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
5902                next_offset += envelope_size;
5903            }
5904
5905            Ok(())
5906        }
5907    }
5908}