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