fidl_fuchsia_hardware_hidbus__common/
fidl_fuchsia_hardware_hidbus__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 ReportId = u8;
12
13pub const MAX_DESC_LEN: u16 = 8192;
14
15pub const MAX_REPORT_DATA: u16 = 8192;
16
17pub const MAX_REPORT_LEN: u16 = 8192;
18
19/// HID 1.11 Chapter 4.3 Protocols
20#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
21#[repr(u8)]
22pub enum HidBootProtocol {
23    None = 0,
24    Kbd = 1,
25    Pointer = 2,
26    Other = 3,
27}
28
29impl HidBootProtocol {
30    #[inline]
31    pub fn from_primitive(prim: u8) -> Option<Self> {
32        match prim {
33            0 => Some(Self::None),
34            1 => Some(Self::Kbd),
35            2 => Some(Self::Pointer),
36            3 => Some(Self::Other),
37            _ => None,
38        }
39    }
40
41    #[inline]
42    pub const fn into_primitive(self) -> u8 {
43        self as u8
44    }
45}
46
47/// HID 1.11 Chapter 7.1 Class Descriptor Types
48#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
49#[repr(u8)]
50pub enum HidDescriptorType {
51    Hid = 33,
52    Report = 34,
53    Physical = 35,
54}
55
56impl HidDescriptorType {
57    #[inline]
58    pub fn from_primitive(prim: u8) -> Option<Self> {
59        match prim {
60            33 => Some(Self::Hid),
61            34 => Some(Self::Report),
62            35 => Some(Self::Physical),
63            _ => None,
64        }
65    }
66
67    #[inline]
68    pub const fn into_primitive(self) -> u8 {
69        self as u8
70    }
71}
72
73/// HID 1.11 Chapter 4.2 Subclass
74#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
75#[repr(u8)]
76pub enum HidProtocol {
77    Boot = 0,
78    Report = 1,
79}
80
81impl HidProtocol {
82    #[inline]
83    pub fn from_primitive(prim: u8) -> Option<Self> {
84        match prim {
85            0 => Some(Self::Boot),
86            1 => Some(Self::Report),
87            _ => None,
88        }
89    }
90
91    #[inline]
92    pub const fn into_primitive(self) -> u8 {
93        self as u8
94    }
95}
96
97#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
98#[repr(u8)]
99pub enum ReportType {
100    Input = 1,
101    Output = 2,
102    Feature = 3,
103}
104
105impl ReportType {
106    #[inline]
107    pub fn from_primitive(prim: u8) -> Option<Self> {
108        match prim {
109            1 => Some(Self::Input),
110            2 => Some(Self::Output),
111            3 => Some(Self::Feature),
112            _ => None,
113        }
114    }
115
116    #[inline]
117    pub const fn into_primitive(self) -> u8 {
118        self as u8
119    }
120}
121
122#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
123pub struct HidbusGetDescriptorRequest {
124    pub desc_type: HidDescriptorType,
125}
126
127impl fidl::Persistable for HidbusGetDescriptorRequest {}
128
129#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
130#[repr(C)]
131pub struct HidbusGetIdleRequest {
132    pub rpt_id: u8,
133}
134
135impl fidl::Persistable for HidbusGetIdleRequest {}
136
137#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
138pub struct HidbusGetReportRequest {
139    pub rpt_type: ReportType,
140    pub rpt_id: u8,
141    pub len: u64,
142}
143
144impl fidl::Persistable for HidbusGetReportRequest {}
145
146#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
147pub struct HidbusSetDescriptorRequest {
148    pub desc_type: HidDescriptorType,
149    pub data: Vec<u8>,
150}
151
152impl fidl::Persistable for HidbusSetDescriptorRequest {}
153
154#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
155#[repr(C)]
156pub struct HidbusSetIdleRequest {
157    pub rpt_id: u8,
158    pub duration: i64,
159}
160
161impl fidl::Persistable for HidbusSetIdleRequest {}
162
163#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
164pub struct HidbusSetProtocolRequest {
165    pub protocol: HidProtocol,
166}
167
168impl fidl::Persistable for HidbusSetProtocolRequest {}
169
170#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
171pub struct HidbusSetReportRequest {
172    pub rpt_type: ReportType,
173    pub rpt_id: u8,
174    pub data: Vec<u8>,
175}
176
177impl fidl::Persistable for HidbusSetReportRequest {}
178
179#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
180pub struct HidbusGetDescriptorResponse {
181    pub data: Vec<u8>,
182}
183
184impl fidl::Persistable for HidbusGetDescriptorResponse {}
185
186#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
187#[repr(C)]
188pub struct HidbusGetIdleResponse {
189    pub duration: i64,
190}
191
192impl fidl::Persistable for HidbusGetIdleResponse {}
193
194#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
195pub struct HidbusGetProtocolResponse {
196    pub protocol: HidProtocol,
197}
198
199impl fidl::Persistable for HidbusGetProtocolResponse {}
200
201#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
202pub struct HidbusGetReportResponse {
203    pub data: Vec<u8>,
204}
205
206impl fidl::Persistable for HidbusGetReportResponse {}
207
208#[derive(Clone, Debug, PartialEq)]
209pub struct HidbusQueryResponse {
210    pub info: HidInfo,
211}
212
213impl fidl::Persistable for HidbusQueryResponse {}
214
215#[derive(Clone, Debug, Default, PartialEq)]
216pub struct HidInfo {
217    pub dev_num: Option<u8>,
218    pub boot_protocol: Option<HidBootProtocol>,
219    pub vendor_id: Option<u32>,
220    pub product_id: Option<u32>,
221    pub version: Option<u32>,
222    /// polling rate if applicable in usec
223    pub polling_rate: Option<i64>,
224    #[doc(hidden)]
225    pub __source_breaking: fidl::marker::SourceBreaking,
226}
227
228impl fidl::Persistable for HidInfo {}
229
230pub mod hidbus_ordinals {
231    pub const QUERY: u64 = 0x23eb61f83d06efa9;
232    pub const START: u64 = 0x1ba15adf96bade4a;
233    pub const STOP: u64 = 0x61b973ecd69cfff8;
234    pub const ON_REPORT_RECEIVED: u64 = 0x6093963f2efe1e56;
235    pub const GET_DESCRIPTOR: u64 = 0x29343a1289ceb2e5;
236    pub const SET_DESCRIPTOR: u64 = 0x7567278eba076777;
237    pub const GET_REPORT: u64 = 0x69b5538a28dc472c;
238    pub const SET_REPORT: u64 = 0x1172863081673c55;
239    pub const GET_IDLE: u64 = 0xa95c2c504d9aa0b;
240    pub const SET_IDLE: u64 = 0x7c387cbaa4c09b3c;
241    pub const GET_PROTOCOL: u64 = 0x3ec61a9b2d5c50eb;
242    pub const SET_PROTOCOL: u64 = 0x1655cdfd0f316b0b;
243}
244
245mod internal {
246    use super::*;
247    unsafe impl fidl::encoding::TypeMarker for HidBootProtocol {
248        type Owned = Self;
249
250        #[inline(always)]
251        fn inline_align(_context: fidl::encoding::Context) -> usize {
252            std::mem::align_of::<u8>()
253        }
254
255        #[inline(always)]
256        fn inline_size(_context: fidl::encoding::Context) -> usize {
257            std::mem::size_of::<u8>()
258        }
259
260        #[inline(always)]
261        fn encode_is_copy() -> bool {
262            true
263        }
264
265        #[inline(always)]
266        fn decode_is_copy() -> bool {
267            false
268        }
269    }
270
271    impl fidl::encoding::ValueTypeMarker for HidBootProtocol {
272        type Borrowed<'a> = Self;
273        #[inline(always)]
274        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
275            *value
276        }
277    }
278
279    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
280        for HidBootProtocol
281    {
282        #[inline]
283        unsafe fn encode(
284            self,
285            encoder: &mut fidl::encoding::Encoder<'_, D>,
286            offset: usize,
287            _depth: fidl::encoding::Depth,
288        ) -> fidl::Result<()> {
289            encoder.debug_check_bounds::<Self>(offset);
290            encoder.write_num(self.into_primitive(), offset);
291            Ok(())
292        }
293    }
294
295    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidBootProtocol {
296        #[inline(always)]
297        fn new_empty() -> Self {
298            Self::None
299        }
300
301        #[inline]
302        unsafe fn decode(
303            &mut self,
304            decoder: &mut fidl::encoding::Decoder<'_, D>,
305            offset: usize,
306            _depth: fidl::encoding::Depth,
307        ) -> fidl::Result<()> {
308            decoder.debug_check_bounds::<Self>(offset);
309            let prim = decoder.read_num::<u8>(offset);
310
311            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
312            Ok(())
313        }
314    }
315    unsafe impl fidl::encoding::TypeMarker for HidDescriptorType {
316        type Owned = Self;
317
318        #[inline(always)]
319        fn inline_align(_context: fidl::encoding::Context) -> usize {
320            std::mem::align_of::<u8>()
321        }
322
323        #[inline(always)]
324        fn inline_size(_context: fidl::encoding::Context) -> usize {
325            std::mem::size_of::<u8>()
326        }
327
328        #[inline(always)]
329        fn encode_is_copy() -> bool {
330            true
331        }
332
333        #[inline(always)]
334        fn decode_is_copy() -> bool {
335            false
336        }
337    }
338
339    impl fidl::encoding::ValueTypeMarker for HidDescriptorType {
340        type Borrowed<'a> = Self;
341        #[inline(always)]
342        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
343            *value
344        }
345    }
346
347    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
348        for HidDescriptorType
349    {
350        #[inline]
351        unsafe fn encode(
352            self,
353            encoder: &mut fidl::encoding::Encoder<'_, D>,
354            offset: usize,
355            _depth: fidl::encoding::Depth,
356        ) -> fidl::Result<()> {
357            encoder.debug_check_bounds::<Self>(offset);
358            encoder.write_num(self.into_primitive(), offset);
359            Ok(())
360        }
361    }
362
363    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidDescriptorType {
364        #[inline(always)]
365        fn new_empty() -> Self {
366            Self::Hid
367        }
368
369        #[inline]
370        unsafe fn decode(
371            &mut self,
372            decoder: &mut fidl::encoding::Decoder<'_, D>,
373            offset: usize,
374            _depth: fidl::encoding::Depth,
375        ) -> fidl::Result<()> {
376            decoder.debug_check_bounds::<Self>(offset);
377            let prim = decoder.read_num::<u8>(offset);
378
379            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
380            Ok(())
381        }
382    }
383    unsafe impl fidl::encoding::TypeMarker for HidProtocol {
384        type Owned = Self;
385
386        #[inline(always)]
387        fn inline_align(_context: fidl::encoding::Context) -> usize {
388            std::mem::align_of::<u8>()
389        }
390
391        #[inline(always)]
392        fn inline_size(_context: fidl::encoding::Context) -> usize {
393            std::mem::size_of::<u8>()
394        }
395
396        #[inline(always)]
397        fn encode_is_copy() -> bool {
398            true
399        }
400
401        #[inline(always)]
402        fn decode_is_copy() -> bool {
403            false
404        }
405    }
406
407    impl fidl::encoding::ValueTypeMarker for HidProtocol {
408        type Borrowed<'a> = Self;
409        #[inline(always)]
410        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
411            *value
412        }
413    }
414
415    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for HidProtocol {
416        #[inline]
417        unsafe fn encode(
418            self,
419            encoder: &mut fidl::encoding::Encoder<'_, D>,
420            offset: usize,
421            _depth: fidl::encoding::Depth,
422        ) -> fidl::Result<()> {
423            encoder.debug_check_bounds::<Self>(offset);
424            encoder.write_num(self.into_primitive(), offset);
425            Ok(())
426        }
427    }
428
429    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidProtocol {
430        #[inline(always)]
431        fn new_empty() -> Self {
432            Self::Boot
433        }
434
435        #[inline]
436        unsafe fn decode(
437            &mut self,
438            decoder: &mut fidl::encoding::Decoder<'_, D>,
439            offset: usize,
440            _depth: fidl::encoding::Depth,
441        ) -> fidl::Result<()> {
442            decoder.debug_check_bounds::<Self>(offset);
443            let prim = decoder.read_num::<u8>(offset);
444
445            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
446            Ok(())
447        }
448    }
449    unsafe impl fidl::encoding::TypeMarker for ReportType {
450        type Owned = Self;
451
452        #[inline(always)]
453        fn inline_align(_context: fidl::encoding::Context) -> usize {
454            std::mem::align_of::<u8>()
455        }
456
457        #[inline(always)]
458        fn inline_size(_context: fidl::encoding::Context) -> usize {
459            std::mem::size_of::<u8>()
460        }
461
462        #[inline(always)]
463        fn encode_is_copy() -> bool {
464            true
465        }
466
467        #[inline(always)]
468        fn decode_is_copy() -> bool {
469            false
470        }
471    }
472
473    impl fidl::encoding::ValueTypeMarker for ReportType {
474        type Borrowed<'a> = Self;
475        #[inline(always)]
476        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
477            *value
478        }
479    }
480
481    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ReportType {
482        #[inline]
483        unsafe fn encode(
484            self,
485            encoder: &mut fidl::encoding::Encoder<'_, D>,
486            offset: usize,
487            _depth: fidl::encoding::Depth,
488        ) -> fidl::Result<()> {
489            encoder.debug_check_bounds::<Self>(offset);
490            encoder.write_num(self.into_primitive(), offset);
491            Ok(())
492        }
493    }
494
495    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ReportType {
496        #[inline(always)]
497        fn new_empty() -> Self {
498            Self::Input
499        }
500
501        #[inline]
502        unsafe fn decode(
503            &mut self,
504            decoder: &mut fidl::encoding::Decoder<'_, D>,
505            offset: usize,
506            _depth: fidl::encoding::Depth,
507        ) -> fidl::Result<()> {
508            decoder.debug_check_bounds::<Self>(offset);
509            let prim = decoder.read_num::<u8>(offset);
510
511            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
512            Ok(())
513        }
514    }
515
516    impl fidl::encoding::ValueTypeMarker for HidbusGetDescriptorRequest {
517        type Borrowed<'a> = &'a Self;
518        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
519            value
520        }
521    }
522
523    unsafe impl fidl::encoding::TypeMarker for HidbusGetDescriptorRequest {
524        type Owned = Self;
525
526        #[inline(always)]
527        fn inline_align(_context: fidl::encoding::Context) -> usize {
528            1
529        }
530
531        #[inline(always)]
532        fn inline_size(_context: fidl::encoding::Context) -> usize {
533            1
534        }
535    }
536
537    unsafe impl<D: fidl::encoding::ResourceDialect>
538        fidl::encoding::Encode<HidbusGetDescriptorRequest, D> for &HidbusGetDescriptorRequest
539    {
540        #[inline]
541        unsafe fn encode(
542            self,
543            encoder: &mut fidl::encoding::Encoder<'_, D>,
544            offset: usize,
545            _depth: fidl::encoding::Depth,
546        ) -> fidl::Result<()> {
547            encoder.debug_check_bounds::<HidbusGetDescriptorRequest>(offset);
548            // Delegate to tuple encoding.
549            fidl::encoding::Encode::<HidbusGetDescriptorRequest, D>::encode(
550                (<HidDescriptorType as fidl::encoding::ValueTypeMarker>::borrow(&self.desc_type),),
551                encoder,
552                offset,
553                _depth,
554            )
555        }
556    }
557    unsafe impl<
558        D: fidl::encoding::ResourceDialect,
559        T0: fidl::encoding::Encode<HidDescriptorType, D>,
560    > fidl::encoding::Encode<HidbusGetDescriptorRequest, D> for (T0,)
561    {
562        #[inline]
563        unsafe fn encode(
564            self,
565            encoder: &mut fidl::encoding::Encoder<'_, D>,
566            offset: usize,
567            depth: fidl::encoding::Depth,
568        ) -> fidl::Result<()> {
569            encoder.debug_check_bounds::<HidbusGetDescriptorRequest>(offset);
570            // Zero out padding regions. There's no need to apply masks
571            // because the unmasked parts will be overwritten by fields.
572            // Write the fields.
573            self.0.encode(encoder, offset + 0, depth)?;
574            Ok(())
575        }
576    }
577
578    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
579        for HidbusGetDescriptorRequest
580    {
581        #[inline(always)]
582        fn new_empty() -> Self {
583            Self { desc_type: fidl::new_empty!(HidDescriptorType, D) }
584        }
585
586        #[inline]
587        unsafe fn decode(
588            &mut self,
589            decoder: &mut fidl::encoding::Decoder<'_, D>,
590            offset: usize,
591            _depth: fidl::encoding::Depth,
592        ) -> fidl::Result<()> {
593            decoder.debug_check_bounds::<Self>(offset);
594            // Verify that padding bytes are zero.
595            fidl::decode!(HidDescriptorType, D, &mut self.desc_type, decoder, offset + 0, _depth)?;
596            Ok(())
597        }
598    }
599
600    impl fidl::encoding::ValueTypeMarker for HidbusGetIdleRequest {
601        type Borrowed<'a> = &'a Self;
602        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
603            value
604        }
605    }
606
607    unsafe impl fidl::encoding::TypeMarker for HidbusGetIdleRequest {
608        type Owned = Self;
609
610        #[inline(always)]
611        fn inline_align(_context: fidl::encoding::Context) -> usize {
612            1
613        }
614
615        #[inline(always)]
616        fn inline_size(_context: fidl::encoding::Context) -> usize {
617            1
618        }
619        #[inline(always)]
620        fn encode_is_copy() -> bool {
621            true
622        }
623
624        #[inline(always)]
625        fn decode_is_copy() -> bool {
626            true
627        }
628    }
629
630    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HidbusGetIdleRequest, D>
631        for &HidbusGetIdleRequest
632    {
633        #[inline]
634        unsafe fn encode(
635            self,
636            encoder: &mut fidl::encoding::Encoder<'_, D>,
637            offset: usize,
638            _depth: fidl::encoding::Depth,
639        ) -> fidl::Result<()> {
640            encoder.debug_check_bounds::<HidbusGetIdleRequest>(offset);
641            unsafe {
642                // Copy the object into the buffer.
643                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
644                (buf_ptr as *mut HidbusGetIdleRequest)
645                    .write_unaligned((self as *const HidbusGetIdleRequest).read());
646                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
647                // done second because the memcpy will write garbage to these bytes.
648            }
649            Ok(())
650        }
651    }
652    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<u8, D>>
653        fidl::encoding::Encode<HidbusGetIdleRequest, D> for (T0,)
654    {
655        #[inline]
656        unsafe fn encode(
657            self,
658            encoder: &mut fidl::encoding::Encoder<'_, D>,
659            offset: usize,
660            depth: fidl::encoding::Depth,
661        ) -> fidl::Result<()> {
662            encoder.debug_check_bounds::<HidbusGetIdleRequest>(offset);
663            // Zero out padding regions. There's no need to apply masks
664            // because the unmasked parts will be overwritten by fields.
665            // Write the fields.
666            self.0.encode(encoder, offset + 0, depth)?;
667            Ok(())
668        }
669    }
670
671    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidbusGetIdleRequest {
672        #[inline(always)]
673        fn new_empty() -> Self {
674            Self { rpt_id: fidl::new_empty!(u8, D) }
675        }
676
677        #[inline]
678        unsafe fn decode(
679            &mut self,
680            decoder: &mut fidl::encoding::Decoder<'_, D>,
681            offset: usize,
682            _depth: fidl::encoding::Depth,
683        ) -> fidl::Result<()> {
684            decoder.debug_check_bounds::<Self>(offset);
685            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
686            // Verify that padding bytes are zero.
687            // Copy from the buffer into the object.
688            unsafe {
689                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 1);
690            }
691            Ok(())
692        }
693    }
694
695    impl fidl::encoding::ValueTypeMarker for HidbusGetReportRequest {
696        type Borrowed<'a> = &'a Self;
697        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
698            value
699        }
700    }
701
702    unsafe impl fidl::encoding::TypeMarker for HidbusGetReportRequest {
703        type Owned = Self;
704
705        #[inline(always)]
706        fn inline_align(_context: fidl::encoding::Context) -> usize {
707            8
708        }
709
710        #[inline(always)]
711        fn inline_size(_context: fidl::encoding::Context) -> usize {
712            16
713        }
714    }
715
716    unsafe impl<D: fidl::encoding::ResourceDialect>
717        fidl::encoding::Encode<HidbusGetReportRequest, D> for &HidbusGetReportRequest
718    {
719        #[inline]
720        unsafe fn encode(
721            self,
722            encoder: &mut fidl::encoding::Encoder<'_, D>,
723            offset: usize,
724            _depth: fidl::encoding::Depth,
725        ) -> fidl::Result<()> {
726            encoder.debug_check_bounds::<HidbusGetReportRequest>(offset);
727            // Delegate to tuple encoding.
728            fidl::encoding::Encode::<HidbusGetReportRequest, D>::encode(
729                (
730                    <ReportType as fidl::encoding::ValueTypeMarker>::borrow(&self.rpt_type),
731                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.rpt_id),
732                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.len),
733                ),
734                encoder,
735                offset,
736                _depth,
737            )
738        }
739    }
740    unsafe impl<
741        D: fidl::encoding::ResourceDialect,
742        T0: fidl::encoding::Encode<ReportType, D>,
743        T1: fidl::encoding::Encode<u8, D>,
744        T2: fidl::encoding::Encode<u64, D>,
745    > fidl::encoding::Encode<HidbusGetReportRequest, D> for (T0, T1, T2)
746    {
747        #[inline]
748        unsafe fn encode(
749            self,
750            encoder: &mut fidl::encoding::Encoder<'_, D>,
751            offset: usize,
752            depth: fidl::encoding::Depth,
753        ) -> fidl::Result<()> {
754            encoder.debug_check_bounds::<HidbusGetReportRequest>(offset);
755            // Zero out padding regions. There's no need to apply masks
756            // because the unmasked parts will be overwritten by fields.
757            unsafe {
758                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
759                (ptr as *mut u64).write_unaligned(0);
760            }
761            // Write the fields.
762            self.0.encode(encoder, offset + 0, depth)?;
763            self.1.encode(encoder, offset + 1, depth)?;
764            self.2.encode(encoder, offset + 8, depth)?;
765            Ok(())
766        }
767    }
768
769    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
770        for HidbusGetReportRequest
771    {
772        #[inline(always)]
773        fn new_empty() -> Self {
774            Self {
775                rpt_type: fidl::new_empty!(ReportType, D),
776                rpt_id: fidl::new_empty!(u8, D),
777                len: fidl::new_empty!(u64, D),
778            }
779        }
780
781        #[inline]
782        unsafe fn decode(
783            &mut self,
784            decoder: &mut fidl::encoding::Decoder<'_, D>,
785            offset: usize,
786            _depth: fidl::encoding::Depth,
787        ) -> fidl::Result<()> {
788            decoder.debug_check_bounds::<Self>(offset);
789            // Verify that padding bytes are zero.
790            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
791            let padval = unsafe { (ptr as *const u64).read_unaligned() };
792            let mask = 0xffffffffffff0000u64;
793            let maskedval = padval & mask;
794            if maskedval != 0 {
795                return Err(fidl::Error::NonZeroPadding {
796                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
797                });
798            }
799            fidl::decode!(ReportType, D, &mut self.rpt_type, decoder, offset + 0, _depth)?;
800            fidl::decode!(u8, D, &mut self.rpt_id, decoder, offset + 1, _depth)?;
801            fidl::decode!(u64, D, &mut self.len, decoder, offset + 8, _depth)?;
802            Ok(())
803        }
804    }
805
806    impl fidl::encoding::ValueTypeMarker for HidbusSetDescriptorRequest {
807        type Borrowed<'a> = &'a Self;
808        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
809            value
810        }
811    }
812
813    unsafe impl fidl::encoding::TypeMarker for HidbusSetDescriptorRequest {
814        type Owned = Self;
815
816        #[inline(always)]
817        fn inline_align(_context: fidl::encoding::Context) -> usize {
818            8
819        }
820
821        #[inline(always)]
822        fn inline_size(_context: fidl::encoding::Context) -> usize {
823            24
824        }
825    }
826
827    unsafe impl<D: fidl::encoding::ResourceDialect>
828        fidl::encoding::Encode<HidbusSetDescriptorRequest, D> for &HidbusSetDescriptorRequest
829    {
830        #[inline]
831        unsafe fn encode(
832            self,
833            encoder: &mut fidl::encoding::Encoder<'_, D>,
834            offset: usize,
835            _depth: fidl::encoding::Depth,
836        ) -> fidl::Result<()> {
837            encoder.debug_check_bounds::<HidbusSetDescriptorRequest>(offset);
838            // Delegate to tuple encoding.
839            fidl::encoding::Encode::<HidbusSetDescriptorRequest, D>::encode(
840                (
841                    <HidDescriptorType as fidl::encoding::ValueTypeMarker>::borrow(&self.desc_type),
842                    <fidl::encoding::Vector<u8, 8192> as fidl::encoding::ValueTypeMarker>::borrow(
843                        &self.data,
844                    ),
845                ),
846                encoder,
847                offset,
848                _depth,
849            )
850        }
851    }
852    unsafe impl<
853        D: fidl::encoding::ResourceDialect,
854        T0: fidl::encoding::Encode<HidDescriptorType, D>,
855        T1: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8192>, D>,
856    > fidl::encoding::Encode<HidbusSetDescriptorRequest, D> for (T0, T1)
857    {
858        #[inline]
859        unsafe fn encode(
860            self,
861            encoder: &mut fidl::encoding::Encoder<'_, D>,
862            offset: usize,
863            depth: fidl::encoding::Depth,
864        ) -> fidl::Result<()> {
865            encoder.debug_check_bounds::<HidbusSetDescriptorRequest>(offset);
866            // Zero out padding regions. There's no need to apply masks
867            // because the unmasked parts will be overwritten by fields.
868            unsafe {
869                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
870                (ptr as *mut u64).write_unaligned(0);
871            }
872            // Write the fields.
873            self.0.encode(encoder, offset + 0, depth)?;
874            self.1.encode(encoder, offset + 8, depth)?;
875            Ok(())
876        }
877    }
878
879    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
880        for HidbusSetDescriptorRequest
881    {
882        #[inline(always)]
883        fn new_empty() -> Self {
884            Self {
885                desc_type: fidl::new_empty!(HidDescriptorType, D),
886                data: fidl::new_empty!(fidl::encoding::Vector<u8, 8192>, D),
887            }
888        }
889
890        #[inline]
891        unsafe fn decode(
892            &mut self,
893            decoder: &mut fidl::encoding::Decoder<'_, D>,
894            offset: usize,
895            _depth: fidl::encoding::Depth,
896        ) -> fidl::Result<()> {
897            decoder.debug_check_bounds::<Self>(offset);
898            // Verify that padding bytes are zero.
899            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
900            let padval = unsafe { (ptr as *const u64).read_unaligned() };
901            let mask = 0xffffffffffffff00u64;
902            let maskedval = padval & mask;
903            if maskedval != 0 {
904                return Err(fidl::Error::NonZeroPadding {
905                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
906                });
907            }
908            fidl::decode!(HidDescriptorType, D, &mut self.desc_type, decoder, offset + 0, _depth)?;
909            fidl::decode!(fidl::encoding::Vector<u8, 8192>, D, &mut self.data, decoder, offset + 8, _depth)?;
910            Ok(())
911        }
912    }
913
914    impl fidl::encoding::ValueTypeMarker for HidbusSetIdleRequest {
915        type Borrowed<'a> = &'a Self;
916        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
917            value
918        }
919    }
920
921    unsafe impl fidl::encoding::TypeMarker for HidbusSetIdleRequest {
922        type Owned = Self;
923
924        #[inline(always)]
925        fn inline_align(_context: fidl::encoding::Context) -> usize {
926            8
927        }
928
929        #[inline(always)]
930        fn inline_size(_context: fidl::encoding::Context) -> usize {
931            16
932        }
933    }
934
935    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HidbusSetIdleRequest, D>
936        for &HidbusSetIdleRequest
937    {
938        #[inline]
939        unsafe fn encode(
940            self,
941            encoder: &mut fidl::encoding::Encoder<'_, D>,
942            offset: usize,
943            _depth: fidl::encoding::Depth,
944        ) -> fidl::Result<()> {
945            encoder.debug_check_bounds::<HidbusSetIdleRequest>(offset);
946            unsafe {
947                // Copy the object into the buffer.
948                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
949                (buf_ptr as *mut HidbusSetIdleRequest)
950                    .write_unaligned((self as *const HidbusSetIdleRequest).read());
951                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
952                // done second because the memcpy will write garbage to these bytes.
953                let padding_ptr = buf_ptr.offset(0) as *mut u64;
954                let padding_mask = 0xffffffffffffff00u64;
955                padding_ptr.write_unaligned(padding_ptr.read_unaligned() & !padding_mask);
956            }
957            Ok(())
958        }
959    }
960    unsafe impl<
961        D: fidl::encoding::ResourceDialect,
962        T0: fidl::encoding::Encode<u8, D>,
963        T1: fidl::encoding::Encode<i64, D>,
964    > fidl::encoding::Encode<HidbusSetIdleRequest, D> for (T0, T1)
965    {
966        #[inline]
967        unsafe fn encode(
968            self,
969            encoder: &mut fidl::encoding::Encoder<'_, D>,
970            offset: usize,
971            depth: fidl::encoding::Depth,
972        ) -> fidl::Result<()> {
973            encoder.debug_check_bounds::<HidbusSetIdleRequest>(offset);
974            // Zero out padding regions. There's no need to apply masks
975            // because the unmasked parts will be overwritten by fields.
976            unsafe {
977                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
978                (ptr as *mut u64).write_unaligned(0);
979            }
980            // Write the fields.
981            self.0.encode(encoder, offset + 0, depth)?;
982            self.1.encode(encoder, offset + 8, depth)?;
983            Ok(())
984        }
985    }
986
987    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidbusSetIdleRequest {
988        #[inline(always)]
989        fn new_empty() -> Self {
990            Self { rpt_id: fidl::new_empty!(u8, D), duration: fidl::new_empty!(i64, D) }
991        }
992
993        #[inline]
994        unsafe fn decode(
995            &mut self,
996            decoder: &mut fidl::encoding::Decoder<'_, D>,
997            offset: usize,
998            _depth: fidl::encoding::Depth,
999        ) -> fidl::Result<()> {
1000            decoder.debug_check_bounds::<Self>(offset);
1001            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1002            // Verify that padding bytes are zero.
1003            let ptr = unsafe { buf_ptr.offset(0) };
1004            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1005            let mask = 0xffffffffffffff00u64;
1006            let maskedval = padval & mask;
1007            if maskedval != 0 {
1008                return Err(fidl::Error::NonZeroPadding {
1009                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1010                });
1011            }
1012            // Copy from the buffer into the object.
1013            unsafe {
1014                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 16);
1015            }
1016            Ok(())
1017        }
1018    }
1019
1020    impl fidl::encoding::ValueTypeMarker for HidbusSetProtocolRequest {
1021        type Borrowed<'a> = &'a Self;
1022        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1023            value
1024        }
1025    }
1026
1027    unsafe impl fidl::encoding::TypeMarker for HidbusSetProtocolRequest {
1028        type Owned = Self;
1029
1030        #[inline(always)]
1031        fn inline_align(_context: fidl::encoding::Context) -> usize {
1032            1
1033        }
1034
1035        #[inline(always)]
1036        fn inline_size(_context: fidl::encoding::Context) -> usize {
1037            1
1038        }
1039    }
1040
1041    unsafe impl<D: fidl::encoding::ResourceDialect>
1042        fidl::encoding::Encode<HidbusSetProtocolRequest, D> for &HidbusSetProtocolRequest
1043    {
1044        #[inline]
1045        unsafe fn encode(
1046            self,
1047            encoder: &mut fidl::encoding::Encoder<'_, D>,
1048            offset: usize,
1049            _depth: fidl::encoding::Depth,
1050        ) -> fidl::Result<()> {
1051            encoder.debug_check_bounds::<HidbusSetProtocolRequest>(offset);
1052            // Delegate to tuple encoding.
1053            fidl::encoding::Encode::<HidbusSetProtocolRequest, D>::encode(
1054                (<HidProtocol as fidl::encoding::ValueTypeMarker>::borrow(&self.protocol),),
1055                encoder,
1056                offset,
1057                _depth,
1058            )
1059        }
1060    }
1061    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HidProtocol, D>>
1062        fidl::encoding::Encode<HidbusSetProtocolRequest, D> for (T0,)
1063    {
1064        #[inline]
1065        unsafe fn encode(
1066            self,
1067            encoder: &mut fidl::encoding::Encoder<'_, D>,
1068            offset: usize,
1069            depth: fidl::encoding::Depth,
1070        ) -> fidl::Result<()> {
1071            encoder.debug_check_bounds::<HidbusSetProtocolRequest>(offset);
1072            // Zero out padding regions. There's no need to apply masks
1073            // because the unmasked parts will be overwritten by fields.
1074            // Write the fields.
1075            self.0.encode(encoder, offset + 0, depth)?;
1076            Ok(())
1077        }
1078    }
1079
1080    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1081        for HidbusSetProtocolRequest
1082    {
1083        #[inline(always)]
1084        fn new_empty() -> Self {
1085            Self { protocol: fidl::new_empty!(HidProtocol, D) }
1086        }
1087
1088        #[inline]
1089        unsafe fn decode(
1090            &mut self,
1091            decoder: &mut fidl::encoding::Decoder<'_, D>,
1092            offset: usize,
1093            _depth: fidl::encoding::Depth,
1094        ) -> fidl::Result<()> {
1095            decoder.debug_check_bounds::<Self>(offset);
1096            // Verify that padding bytes are zero.
1097            fidl::decode!(HidProtocol, D, &mut self.protocol, decoder, offset + 0, _depth)?;
1098            Ok(())
1099        }
1100    }
1101
1102    impl fidl::encoding::ValueTypeMarker for HidbusSetReportRequest {
1103        type Borrowed<'a> = &'a Self;
1104        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1105            value
1106        }
1107    }
1108
1109    unsafe impl fidl::encoding::TypeMarker for HidbusSetReportRequest {
1110        type Owned = Self;
1111
1112        #[inline(always)]
1113        fn inline_align(_context: fidl::encoding::Context) -> usize {
1114            8
1115        }
1116
1117        #[inline(always)]
1118        fn inline_size(_context: fidl::encoding::Context) -> usize {
1119            24
1120        }
1121    }
1122
1123    unsafe impl<D: fidl::encoding::ResourceDialect>
1124        fidl::encoding::Encode<HidbusSetReportRequest, D> for &HidbusSetReportRequest
1125    {
1126        #[inline]
1127        unsafe fn encode(
1128            self,
1129            encoder: &mut fidl::encoding::Encoder<'_, D>,
1130            offset: usize,
1131            _depth: fidl::encoding::Depth,
1132        ) -> fidl::Result<()> {
1133            encoder.debug_check_bounds::<HidbusSetReportRequest>(offset);
1134            // Delegate to tuple encoding.
1135            fidl::encoding::Encode::<HidbusSetReportRequest, D>::encode(
1136                (
1137                    <ReportType as fidl::encoding::ValueTypeMarker>::borrow(&self.rpt_type),
1138                    <u8 as fidl::encoding::ValueTypeMarker>::borrow(&self.rpt_id),
1139                    <fidl::encoding::Vector<u8, 8192> as fidl::encoding::ValueTypeMarker>::borrow(
1140                        &self.data,
1141                    ),
1142                ),
1143                encoder,
1144                offset,
1145                _depth,
1146            )
1147        }
1148    }
1149    unsafe impl<
1150        D: fidl::encoding::ResourceDialect,
1151        T0: fidl::encoding::Encode<ReportType, D>,
1152        T1: fidl::encoding::Encode<u8, D>,
1153        T2: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8192>, D>,
1154    > fidl::encoding::Encode<HidbusSetReportRequest, D> for (T0, T1, T2)
1155    {
1156        #[inline]
1157        unsafe fn encode(
1158            self,
1159            encoder: &mut fidl::encoding::Encoder<'_, D>,
1160            offset: usize,
1161            depth: fidl::encoding::Depth,
1162        ) -> fidl::Result<()> {
1163            encoder.debug_check_bounds::<HidbusSetReportRequest>(offset);
1164            // Zero out padding regions. There's no need to apply masks
1165            // because the unmasked parts will be overwritten by fields.
1166            unsafe {
1167                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(0);
1168                (ptr as *mut u64).write_unaligned(0);
1169            }
1170            // Write the fields.
1171            self.0.encode(encoder, offset + 0, depth)?;
1172            self.1.encode(encoder, offset + 1, depth)?;
1173            self.2.encode(encoder, offset + 8, depth)?;
1174            Ok(())
1175        }
1176    }
1177
1178    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1179        for HidbusSetReportRequest
1180    {
1181        #[inline(always)]
1182        fn new_empty() -> Self {
1183            Self {
1184                rpt_type: fidl::new_empty!(ReportType, D),
1185                rpt_id: fidl::new_empty!(u8, D),
1186                data: fidl::new_empty!(fidl::encoding::Vector<u8, 8192>, D),
1187            }
1188        }
1189
1190        #[inline]
1191        unsafe fn decode(
1192            &mut self,
1193            decoder: &mut fidl::encoding::Decoder<'_, D>,
1194            offset: usize,
1195            _depth: fidl::encoding::Depth,
1196        ) -> fidl::Result<()> {
1197            decoder.debug_check_bounds::<Self>(offset);
1198            // Verify that padding bytes are zero.
1199            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(0) };
1200            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1201            let mask = 0xffffffffffff0000u64;
1202            let maskedval = padval & mask;
1203            if maskedval != 0 {
1204                return Err(fidl::Error::NonZeroPadding {
1205                    padding_start: offset + 0 + ((mask as u64).trailing_zeros() / 8) as usize,
1206                });
1207            }
1208            fidl::decode!(ReportType, D, &mut self.rpt_type, decoder, offset + 0, _depth)?;
1209            fidl::decode!(u8, D, &mut self.rpt_id, decoder, offset + 1, _depth)?;
1210            fidl::decode!(fidl::encoding::Vector<u8, 8192>, D, &mut self.data, decoder, offset + 8, _depth)?;
1211            Ok(())
1212        }
1213    }
1214
1215    impl fidl::encoding::ValueTypeMarker for HidbusGetDescriptorResponse {
1216        type Borrowed<'a> = &'a Self;
1217        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1218            value
1219        }
1220    }
1221
1222    unsafe impl fidl::encoding::TypeMarker for HidbusGetDescriptorResponse {
1223        type Owned = Self;
1224
1225        #[inline(always)]
1226        fn inline_align(_context: fidl::encoding::Context) -> usize {
1227            8
1228        }
1229
1230        #[inline(always)]
1231        fn inline_size(_context: fidl::encoding::Context) -> usize {
1232            16
1233        }
1234    }
1235
1236    unsafe impl<D: fidl::encoding::ResourceDialect>
1237        fidl::encoding::Encode<HidbusGetDescriptorResponse, D> for &HidbusGetDescriptorResponse
1238    {
1239        #[inline]
1240        unsafe fn encode(
1241            self,
1242            encoder: &mut fidl::encoding::Encoder<'_, D>,
1243            offset: usize,
1244            _depth: fidl::encoding::Depth,
1245        ) -> fidl::Result<()> {
1246            encoder.debug_check_bounds::<HidbusGetDescriptorResponse>(offset);
1247            // Delegate to tuple encoding.
1248            fidl::encoding::Encode::<HidbusGetDescriptorResponse, D>::encode(
1249                (<fidl::encoding::Vector<u8, 8192> as fidl::encoding::ValueTypeMarker>::borrow(
1250                    &self.data,
1251                ),),
1252                encoder,
1253                offset,
1254                _depth,
1255            )
1256        }
1257    }
1258    unsafe impl<
1259        D: fidl::encoding::ResourceDialect,
1260        T0: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8192>, D>,
1261    > fidl::encoding::Encode<HidbusGetDescriptorResponse, D> for (T0,)
1262    {
1263        #[inline]
1264        unsafe fn encode(
1265            self,
1266            encoder: &mut fidl::encoding::Encoder<'_, D>,
1267            offset: usize,
1268            depth: fidl::encoding::Depth,
1269        ) -> fidl::Result<()> {
1270            encoder.debug_check_bounds::<HidbusGetDescriptorResponse>(offset);
1271            // Zero out padding regions. There's no need to apply masks
1272            // because the unmasked parts will be overwritten by fields.
1273            // Write the fields.
1274            self.0.encode(encoder, offset + 0, depth)?;
1275            Ok(())
1276        }
1277    }
1278
1279    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1280        for HidbusGetDescriptorResponse
1281    {
1282        #[inline(always)]
1283        fn new_empty() -> Self {
1284            Self { data: fidl::new_empty!(fidl::encoding::Vector<u8, 8192>, D) }
1285        }
1286
1287        #[inline]
1288        unsafe fn decode(
1289            &mut self,
1290            decoder: &mut fidl::encoding::Decoder<'_, D>,
1291            offset: usize,
1292            _depth: fidl::encoding::Depth,
1293        ) -> fidl::Result<()> {
1294            decoder.debug_check_bounds::<Self>(offset);
1295            // Verify that padding bytes are zero.
1296            fidl::decode!(fidl::encoding::Vector<u8, 8192>, D, &mut self.data, decoder, offset + 0, _depth)?;
1297            Ok(())
1298        }
1299    }
1300
1301    impl fidl::encoding::ValueTypeMarker for HidbusGetIdleResponse {
1302        type Borrowed<'a> = &'a Self;
1303        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1304            value
1305        }
1306    }
1307
1308    unsafe impl fidl::encoding::TypeMarker for HidbusGetIdleResponse {
1309        type Owned = Self;
1310
1311        #[inline(always)]
1312        fn inline_align(_context: fidl::encoding::Context) -> usize {
1313            8
1314        }
1315
1316        #[inline(always)]
1317        fn inline_size(_context: fidl::encoding::Context) -> usize {
1318            8
1319        }
1320        #[inline(always)]
1321        fn encode_is_copy() -> bool {
1322            true
1323        }
1324
1325        #[inline(always)]
1326        fn decode_is_copy() -> bool {
1327            true
1328        }
1329    }
1330
1331    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HidbusGetIdleResponse, D>
1332        for &HidbusGetIdleResponse
1333    {
1334        #[inline]
1335        unsafe fn encode(
1336            self,
1337            encoder: &mut fidl::encoding::Encoder<'_, D>,
1338            offset: usize,
1339            _depth: fidl::encoding::Depth,
1340        ) -> fidl::Result<()> {
1341            encoder.debug_check_bounds::<HidbusGetIdleResponse>(offset);
1342            unsafe {
1343                // Copy the object into the buffer.
1344                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
1345                (buf_ptr as *mut HidbusGetIdleResponse)
1346                    .write_unaligned((self as *const HidbusGetIdleResponse).read());
1347                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
1348                // done second because the memcpy will write garbage to these bytes.
1349            }
1350            Ok(())
1351        }
1352    }
1353    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<i64, D>>
1354        fidl::encoding::Encode<HidbusGetIdleResponse, D> for (T0,)
1355    {
1356        #[inline]
1357        unsafe fn encode(
1358            self,
1359            encoder: &mut fidl::encoding::Encoder<'_, D>,
1360            offset: usize,
1361            depth: fidl::encoding::Depth,
1362        ) -> fidl::Result<()> {
1363            encoder.debug_check_bounds::<HidbusGetIdleResponse>(offset);
1364            // Zero out padding regions. There's no need to apply masks
1365            // because the unmasked parts will be overwritten by fields.
1366            // Write the fields.
1367            self.0.encode(encoder, offset + 0, depth)?;
1368            Ok(())
1369        }
1370    }
1371
1372    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidbusGetIdleResponse {
1373        #[inline(always)]
1374        fn new_empty() -> Self {
1375            Self { duration: fidl::new_empty!(i64, D) }
1376        }
1377
1378        #[inline]
1379        unsafe fn decode(
1380            &mut self,
1381            decoder: &mut fidl::encoding::Decoder<'_, D>,
1382            offset: usize,
1383            _depth: fidl::encoding::Depth,
1384        ) -> fidl::Result<()> {
1385            decoder.debug_check_bounds::<Self>(offset);
1386            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1387            // Verify that padding bytes are zero.
1388            // Copy from the buffer into the object.
1389            unsafe {
1390                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 8);
1391            }
1392            Ok(())
1393        }
1394    }
1395
1396    impl fidl::encoding::ValueTypeMarker for HidbusGetProtocolResponse {
1397        type Borrowed<'a> = &'a Self;
1398        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1399            value
1400        }
1401    }
1402
1403    unsafe impl fidl::encoding::TypeMarker for HidbusGetProtocolResponse {
1404        type Owned = Self;
1405
1406        #[inline(always)]
1407        fn inline_align(_context: fidl::encoding::Context) -> usize {
1408            1
1409        }
1410
1411        #[inline(always)]
1412        fn inline_size(_context: fidl::encoding::Context) -> usize {
1413            1
1414        }
1415    }
1416
1417    unsafe impl<D: fidl::encoding::ResourceDialect>
1418        fidl::encoding::Encode<HidbusGetProtocolResponse, D> for &HidbusGetProtocolResponse
1419    {
1420        #[inline]
1421        unsafe fn encode(
1422            self,
1423            encoder: &mut fidl::encoding::Encoder<'_, D>,
1424            offset: usize,
1425            _depth: fidl::encoding::Depth,
1426        ) -> fidl::Result<()> {
1427            encoder.debug_check_bounds::<HidbusGetProtocolResponse>(offset);
1428            // Delegate to tuple encoding.
1429            fidl::encoding::Encode::<HidbusGetProtocolResponse, D>::encode(
1430                (<HidProtocol as fidl::encoding::ValueTypeMarker>::borrow(&self.protocol),),
1431                encoder,
1432                offset,
1433                _depth,
1434            )
1435        }
1436    }
1437    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HidProtocol, D>>
1438        fidl::encoding::Encode<HidbusGetProtocolResponse, D> for (T0,)
1439    {
1440        #[inline]
1441        unsafe fn encode(
1442            self,
1443            encoder: &mut fidl::encoding::Encoder<'_, D>,
1444            offset: usize,
1445            depth: fidl::encoding::Depth,
1446        ) -> fidl::Result<()> {
1447            encoder.debug_check_bounds::<HidbusGetProtocolResponse>(offset);
1448            // Zero out padding regions. There's no need to apply masks
1449            // because the unmasked parts will be overwritten by fields.
1450            // Write the fields.
1451            self.0.encode(encoder, offset + 0, depth)?;
1452            Ok(())
1453        }
1454    }
1455
1456    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1457        for HidbusGetProtocolResponse
1458    {
1459        #[inline(always)]
1460        fn new_empty() -> Self {
1461            Self { protocol: fidl::new_empty!(HidProtocol, D) }
1462        }
1463
1464        #[inline]
1465        unsafe fn decode(
1466            &mut self,
1467            decoder: &mut fidl::encoding::Decoder<'_, D>,
1468            offset: usize,
1469            _depth: fidl::encoding::Depth,
1470        ) -> fidl::Result<()> {
1471            decoder.debug_check_bounds::<Self>(offset);
1472            // Verify that padding bytes are zero.
1473            fidl::decode!(HidProtocol, D, &mut self.protocol, decoder, offset + 0, _depth)?;
1474            Ok(())
1475        }
1476    }
1477
1478    impl fidl::encoding::ValueTypeMarker for HidbusGetReportResponse {
1479        type Borrowed<'a> = &'a Self;
1480        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1481            value
1482        }
1483    }
1484
1485    unsafe impl fidl::encoding::TypeMarker for HidbusGetReportResponse {
1486        type Owned = Self;
1487
1488        #[inline(always)]
1489        fn inline_align(_context: fidl::encoding::Context) -> usize {
1490            8
1491        }
1492
1493        #[inline(always)]
1494        fn inline_size(_context: fidl::encoding::Context) -> usize {
1495            16
1496        }
1497    }
1498
1499    unsafe impl<D: fidl::encoding::ResourceDialect>
1500        fidl::encoding::Encode<HidbusGetReportResponse, D> for &HidbusGetReportResponse
1501    {
1502        #[inline]
1503        unsafe fn encode(
1504            self,
1505            encoder: &mut fidl::encoding::Encoder<'_, D>,
1506            offset: usize,
1507            _depth: fidl::encoding::Depth,
1508        ) -> fidl::Result<()> {
1509            encoder.debug_check_bounds::<HidbusGetReportResponse>(offset);
1510            // Delegate to tuple encoding.
1511            fidl::encoding::Encode::<HidbusGetReportResponse, D>::encode(
1512                (<fidl::encoding::Vector<u8, 8192> as fidl::encoding::ValueTypeMarker>::borrow(
1513                    &self.data,
1514                ),),
1515                encoder,
1516                offset,
1517                _depth,
1518            )
1519        }
1520    }
1521    unsafe impl<
1522        D: fidl::encoding::ResourceDialect,
1523        T0: fidl::encoding::Encode<fidl::encoding::Vector<u8, 8192>, D>,
1524    > fidl::encoding::Encode<HidbusGetReportResponse, D> for (T0,)
1525    {
1526        #[inline]
1527        unsafe fn encode(
1528            self,
1529            encoder: &mut fidl::encoding::Encoder<'_, D>,
1530            offset: usize,
1531            depth: fidl::encoding::Depth,
1532        ) -> fidl::Result<()> {
1533            encoder.debug_check_bounds::<HidbusGetReportResponse>(offset);
1534            // Zero out padding regions. There's no need to apply masks
1535            // because the unmasked parts will be overwritten by fields.
1536            // Write the fields.
1537            self.0.encode(encoder, offset + 0, depth)?;
1538            Ok(())
1539        }
1540    }
1541
1542    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1543        for HidbusGetReportResponse
1544    {
1545        #[inline(always)]
1546        fn new_empty() -> Self {
1547            Self { data: fidl::new_empty!(fidl::encoding::Vector<u8, 8192>, D) }
1548        }
1549
1550        #[inline]
1551        unsafe fn decode(
1552            &mut self,
1553            decoder: &mut fidl::encoding::Decoder<'_, D>,
1554            offset: usize,
1555            _depth: fidl::encoding::Depth,
1556        ) -> fidl::Result<()> {
1557            decoder.debug_check_bounds::<Self>(offset);
1558            // Verify that padding bytes are zero.
1559            fidl::decode!(fidl::encoding::Vector<u8, 8192>, D, &mut self.data, decoder, offset + 0, _depth)?;
1560            Ok(())
1561        }
1562    }
1563
1564    impl fidl::encoding::ValueTypeMarker for HidbusQueryResponse {
1565        type Borrowed<'a> = &'a Self;
1566        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1567            value
1568        }
1569    }
1570
1571    unsafe impl fidl::encoding::TypeMarker for HidbusQueryResponse {
1572        type Owned = Self;
1573
1574        #[inline(always)]
1575        fn inline_align(_context: fidl::encoding::Context) -> usize {
1576            8
1577        }
1578
1579        #[inline(always)]
1580        fn inline_size(_context: fidl::encoding::Context) -> usize {
1581            16
1582        }
1583    }
1584
1585    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HidbusQueryResponse, D>
1586        for &HidbusQueryResponse
1587    {
1588        #[inline]
1589        unsafe fn encode(
1590            self,
1591            encoder: &mut fidl::encoding::Encoder<'_, D>,
1592            offset: usize,
1593            _depth: fidl::encoding::Depth,
1594        ) -> fidl::Result<()> {
1595            encoder.debug_check_bounds::<HidbusQueryResponse>(offset);
1596            // Delegate to tuple encoding.
1597            fidl::encoding::Encode::<HidbusQueryResponse, D>::encode(
1598                (<HidInfo as fidl::encoding::ValueTypeMarker>::borrow(&self.info),),
1599                encoder,
1600                offset,
1601                _depth,
1602            )
1603        }
1604    }
1605    unsafe impl<D: fidl::encoding::ResourceDialect, T0: fidl::encoding::Encode<HidInfo, D>>
1606        fidl::encoding::Encode<HidbusQueryResponse, D> for (T0,)
1607    {
1608        #[inline]
1609        unsafe fn encode(
1610            self,
1611            encoder: &mut fidl::encoding::Encoder<'_, D>,
1612            offset: usize,
1613            depth: fidl::encoding::Depth,
1614        ) -> fidl::Result<()> {
1615            encoder.debug_check_bounds::<HidbusQueryResponse>(offset);
1616            // Zero out padding regions. There's no need to apply masks
1617            // because the unmasked parts will be overwritten by fields.
1618            // Write the fields.
1619            self.0.encode(encoder, offset + 0, depth)?;
1620            Ok(())
1621        }
1622    }
1623
1624    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidbusQueryResponse {
1625        #[inline(always)]
1626        fn new_empty() -> Self {
1627            Self { info: fidl::new_empty!(HidInfo, D) }
1628        }
1629
1630        #[inline]
1631        unsafe fn decode(
1632            &mut self,
1633            decoder: &mut fidl::encoding::Decoder<'_, D>,
1634            offset: usize,
1635            _depth: fidl::encoding::Depth,
1636        ) -> fidl::Result<()> {
1637            decoder.debug_check_bounds::<Self>(offset);
1638            // Verify that padding bytes are zero.
1639            fidl::decode!(HidInfo, D, &mut self.info, decoder, offset + 0, _depth)?;
1640            Ok(())
1641        }
1642    }
1643
1644    impl HidInfo {
1645        #[inline(always)]
1646        fn max_ordinal_present(&self) -> u64 {
1647            if let Some(_) = self.polling_rate {
1648                return 6;
1649            }
1650            if let Some(_) = self.version {
1651                return 5;
1652            }
1653            if let Some(_) = self.product_id {
1654                return 4;
1655            }
1656            if let Some(_) = self.vendor_id {
1657                return 3;
1658            }
1659            if let Some(_) = self.boot_protocol {
1660                return 2;
1661            }
1662            if let Some(_) = self.dev_num {
1663                return 1;
1664            }
1665            0
1666        }
1667    }
1668
1669    impl fidl::encoding::ValueTypeMarker for HidInfo {
1670        type Borrowed<'a> = &'a Self;
1671        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1672            value
1673        }
1674    }
1675
1676    unsafe impl fidl::encoding::TypeMarker for HidInfo {
1677        type Owned = Self;
1678
1679        #[inline(always)]
1680        fn inline_align(_context: fidl::encoding::Context) -> usize {
1681            8
1682        }
1683
1684        #[inline(always)]
1685        fn inline_size(_context: fidl::encoding::Context) -> usize {
1686            16
1687        }
1688    }
1689
1690    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<HidInfo, D> for &HidInfo {
1691        unsafe fn encode(
1692            self,
1693            encoder: &mut fidl::encoding::Encoder<'_, D>,
1694            offset: usize,
1695            mut depth: fidl::encoding::Depth,
1696        ) -> fidl::Result<()> {
1697            encoder.debug_check_bounds::<HidInfo>(offset);
1698            // Vector header
1699            let max_ordinal: u64 = self.max_ordinal_present();
1700            encoder.write_num(max_ordinal, offset);
1701            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1702            // Calling encoder.out_of_line_offset(0) is not allowed.
1703            if max_ordinal == 0 {
1704                return Ok(());
1705            }
1706            depth.increment()?;
1707            let envelope_size = 8;
1708            let bytes_len = max_ordinal as usize * envelope_size;
1709            #[allow(unused_variables)]
1710            let offset = encoder.out_of_line_offset(bytes_len);
1711            let mut _prev_end_offset: usize = 0;
1712            if 1 > max_ordinal {
1713                return Ok(());
1714            }
1715
1716            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1717            // are envelope_size bytes.
1718            let cur_offset: usize = (1 - 1) * envelope_size;
1719
1720            // Zero reserved fields.
1721            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1722
1723            // Safety:
1724            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1725            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1726            //   envelope_size bytes, there is always sufficient room.
1727            fidl::encoding::encode_in_envelope_optional::<u8, D>(
1728                self.dev_num.as_ref().map(<u8 as fidl::encoding::ValueTypeMarker>::borrow),
1729                encoder,
1730                offset + cur_offset,
1731                depth,
1732            )?;
1733
1734            _prev_end_offset = cur_offset + envelope_size;
1735            if 2 > max_ordinal {
1736                return Ok(());
1737            }
1738
1739            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1740            // are envelope_size bytes.
1741            let cur_offset: usize = (2 - 1) * envelope_size;
1742
1743            // Zero reserved fields.
1744            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1745
1746            // Safety:
1747            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1748            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1749            //   envelope_size bytes, there is always sufficient room.
1750            fidl::encoding::encode_in_envelope_optional::<HidBootProtocol, D>(
1751                self.boot_protocol
1752                    .as_ref()
1753                    .map(<HidBootProtocol as fidl::encoding::ValueTypeMarker>::borrow),
1754                encoder,
1755                offset + cur_offset,
1756                depth,
1757            )?;
1758
1759            _prev_end_offset = cur_offset + envelope_size;
1760            if 3 > max_ordinal {
1761                return Ok(());
1762            }
1763
1764            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1765            // are envelope_size bytes.
1766            let cur_offset: usize = (3 - 1) * envelope_size;
1767
1768            // Zero reserved fields.
1769            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1770
1771            // Safety:
1772            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1773            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1774            //   envelope_size bytes, there is always sufficient room.
1775            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1776                self.vendor_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1777                encoder,
1778                offset + cur_offset,
1779                depth,
1780            )?;
1781
1782            _prev_end_offset = cur_offset + envelope_size;
1783            if 4 > max_ordinal {
1784                return Ok(());
1785            }
1786
1787            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1788            // are envelope_size bytes.
1789            let cur_offset: usize = (4 - 1) * envelope_size;
1790
1791            // Zero reserved fields.
1792            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1793
1794            // Safety:
1795            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1796            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1797            //   envelope_size bytes, there is always sufficient room.
1798            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1799                self.product_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1800                encoder,
1801                offset + cur_offset,
1802                depth,
1803            )?;
1804
1805            _prev_end_offset = cur_offset + envelope_size;
1806            if 5 > max_ordinal {
1807                return Ok(());
1808            }
1809
1810            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1811            // are envelope_size bytes.
1812            let cur_offset: usize = (5 - 1) * envelope_size;
1813
1814            // Zero reserved fields.
1815            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1816
1817            // Safety:
1818            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1819            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1820            //   envelope_size bytes, there is always sufficient room.
1821            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1822                self.version.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1823                encoder,
1824                offset + cur_offset,
1825                depth,
1826            )?;
1827
1828            _prev_end_offset = cur_offset + envelope_size;
1829            if 6 > max_ordinal {
1830                return Ok(());
1831            }
1832
1833            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1834            // are envelope_size bytes.
1835            let cur_offset: usize = (6 - 1) * envelope_size;
1836
1837            // Zero reserved fields.
1838            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1839
1840            // Safety:
1841            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1842            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1843            //   envelope_size bytes, there is always sufficient room.
1844            fidl::encoding::encode_in_envelope_optional::<i64, D>(
1845                self.polling_rate.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
1846                encoder,
1847                offset + cur_offset,
1848                depth,
1849            )?;
1850
1851            _prev_end_offset = cur_offset + envelope_size;
1852
1853            Ok(())
1854        }
1855    }
1856
1857    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for HidInfo {
1858        #[inline(always)]
1859        fn new_empty() -> Self {
1860            Self::default()
1861        }
1862
1863        unsafe fn decode(
1864            &mut self,
1865            decoder: &mut fidl::encoding::Decoder<'_, D>,
1866            offset: usize,
1867            mut depth: fidl::encoding::Depth,
1868        ) -> fidl::Result<()> {
1869            decoder.debug_check_bounds::<Self>(offset);
1870            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1871                None => return Err(fidl::Error::NotNullable),
1872                Some(len) => len,
1873            };
1874            // Calling decoder.out_of_line_offset(0) is not allowed.
1875            if len == 0 {
1876                return Ok(());
1877            };
1878            depth.increment()?;
1879            let envelope_size = 8;
1880            let bytes_len = len * envelope_size;
1881            let offset = decoder.out_of_line_offset(bytes_len)?;
1882            // Decode the envelope for each type.
1883            let mut _next_ordinal_to_read = 0;
1884            let mut next_offset = offset;
1885            let end_offset = offset + bytes_len;
1886            _next_ordinal_to_read += 1;
1887            if next_offset >= end_offset {
1888                return Ok(());
1889            }
1890
1891            // Decode unknown envelopes for gaps in ordinals.
1892            while _next_ordinal_to_read < 1 {
1893                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1894                _next_ordinal_to_read += 1;
1895                next_offset += envelope_size;
1896            }
1897
1898            let next_out_of_line = decoder.next_out_of_line();
1899            let handles_before = decoder.remaining_handles();
1900            if let Some((inlined, num_bytes, num_handles)) =
1901                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1902            {
1903                let member_inline_size =
1904                    <u8 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1905                if inlined != (member_inline_size <= 4) {
1906                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1907                }
1908                let inner_offset;
1909                let mut inner_depth = depth.clone();
1910                if inlined {
1911                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1912                    inner_offset = next_offset;
1913                } else {
1914                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1915                    inner_depth.increment()?;
1916                }
1917                let val_ref = self.dev_num.get_or_insert_with(|| fidl::new_empty!(u8, D));
1918                fidl::decode!(u8, D, val_ref, decoder, inner_offset, inner_depth)?;
1919                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1920                {
1921                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1922                }
1923                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1924                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1925                }
1926            }
1927
1928            next_offset += envelope_size;
1929            _next_ordinal_to_read += 1;
1930            if next_offset >= end_offset {
1931                return Ok(());
1932            }
1933
1934            // Decode unknown envelopes for gaps in ordinals.
1935            while _next_ordinal_to_read < 2 {
1936                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1937                _next_ordinal_to_read += 1;
1938                next_offset += envelope_size;
1939            }
1940
1941            let next_out_of_line = decoder.next_out_of_line();
1942            let handles_before = decoder.remaining_handles();
1943            if let Some((inlined, num_bytes, num_handles)) =
1944                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1945            {
1946                let member_inline_size =
1947                    <HidBootProtocol as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1948                if inlined != (member_inline_size <= 4) {
1949                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1950                }
1951                let inner_offset;
1952                let mut inner_depth = depth.clone();
1953                if inlined {
1954                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1955                    inner_offset = next_offset;
1956                } else {
1957                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1958                    inner_depth.increment()?;
1959                }
1960                let val_ref =
1961                    self.boot_protocol.get_or_insert_with(|| fidl::new_empty!(HidBootProtocol, D));
1962                fidl::decode!(HidBootProtocol, D, val_ref, decoder, inner_offset, inner_depth)?;
1963                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1964                {
1965                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1966                }
1967                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1968                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1969                }
1970            }
1971
1972            next_offset += envelope_size;
1973            _next_ordinal_to_read += 1;
1974            if next_offset >= end_offset {
1975                return Ok(());
1976            }
1977
1978            // Decode unknown envelopes for gaps in ordinals.
1979            while _next_ordinal_to_read < 3 {
1980                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1981                _next_ordinal_to_read += 1;
1982                next_offset += envelope_size;
1983            }
1984
1985            let next_out_of_line = decoder.next_out_of_line();
1986            let handles_before = decoder.remaining_handles();
1987            if let Some((inlined, num_bytes, num_handles)) =
1988                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1989            {
1990                let member_inline_size =
1991                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1992                if inlined != (member_inline_size <= 4) {
1993                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1994                }
1995                let inner_offset;
1996                let mut inner_depth = depth.clone();
1997                if inlined {
1998                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1999                    inner_offset = next_offset;
2000                } else {
2001                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2002                    inner_depth.increment()?;
2003                }
2004                let val_ref = self.vendor_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2005                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2006                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2007                {
2008                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2009                }
2010                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2011                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2012                }
2013            }
2014
2015            next_offset += envelope_size;
2016            _next_ordinal_to_read += 1;
2017            if next_offset >= end_offset {
2018                return Ok(());
2019            }
2020
2021            // Decode unknown envelopes for gaps in ordinals.
2022            while _next_ordinal_to_read < 4 {
2023                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2024                _next_ordinal_to_read += 1;
2025                next_offset += envelope_size;
2026            }
2027
2028            let next_out_of_line = decoder.next_out_of_line();
2029            let handles_before = decoder.remaining_handles();
2030            if let Some((inlined, num_bytes, num_handles)) =
2031                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2032            {
2033                let member_inline_size =
2034                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2035                if inlined != (member_inline_size <= 4) {
2036                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2037                }
2038                let inner_offset;
2039                let mut inner_depth = depth.clone();
2040                if inlined {
2041                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2042                    inner_offset = next_offset;
2043                } else {
2044                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2045                    inner_depth.increment()?;
2046                }
2047                let val_ref = self.product_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2048                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2049                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2050                {
2051                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2052                }
2053                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2054                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2055                }
2056            }
2057
2058            next_offset += envelope_size;
2059            _next_ordinal_to_read += 1;
2060            if next_offset >= end_offset {
2061                return Ok(());
2062            }
2063
2064            // Decode unknown envelopes for gaps in ordinals.
2065            while _next_ordinal_to_read < 5 {
2066                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2067                _next_ordinal_to_read += 1;
2068                next_offset += envelope_size;
2069            }
2070
2071            let next_out_of_line = decoder.next_out_of_line();
2072            let handles_before = decoder.remaining_handles();
2073            if let Some((inlined, num_bytes, num_handles)) =
2074                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2075            {
2076                let member_inline_size =
2077                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2078                if inlined != (member_inline_size <= 4) {
2079                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2080                }
2081                let inner_offset;
2082                let mut inner_depth = depth.clone();
2083                if inlined {
2084                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2085                    inner_offset = next_offset;
2086                } else {
2087                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2088                    inner_depth.increment()?;
2089                }
2090                let val_ref = self.version.get_or_insert_with(|| fidl::new_empty!(u32, D));
2091                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2092                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2093                {
2094                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2095                }
2096                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2097                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2098                }
2099            }
2100
2101            next_offset += envelope_size;
2102            _next_ordinal_to_read += 1;
2103            if next_offset >= end_offset {
2104                return Ok(());
2105            }
2106
2107            // Decode unknown envelopes for gaps in ordinals.
2108            while _next_ordinal_to_read < 6 {
2109                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2110                _next_ordinal_to_read += 1;
2111                next_offset += envelope_size;
2112            }
2113
2114            let next_out_of_line = decoder.next_out_of_line();
2115            let handles_before = decoder.remaining_handles();
2116            if let Some((inlined, num_bytes, num_handles)) =
2117                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2118            {
2119                let member_inline_size =
2120                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2121                if inlined != (member_inline_size <= 4) {
2122                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2123                }
2124                let inner_offset;
2125                let mut inner_depth = depth.clone();
2126                if inlined {
2127                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2128                    inner_offset = next_offset;
2129                } else {
2130                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2131                    inner_depth.increment()?;
2132                }
2133                let val_ref = self.polling_rate.get_or_insert_with(|| fidl::new_empty!(i64, D));
2134                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2135                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2136                {
2137                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2138                }
2139                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2140                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2141                }
2142            }
2143
2144            next_offset += envelope_size;
2145
2146            // Decode the remaining unknown envelopes.
2147            while next_offset < end_offset {
2148                _next_ordinal_to_read += 1;
2149                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2150                next_offset += envelope_size;
2151            }
2152
2153            Ok(())
2154        }
2155    }
2156}