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