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