Skip to main content

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