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