Skip to main content

fidl_fuchsia_ui_pointer_common/
fidl_fuchsia_ui_pointer_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
11/// A floating-point 3x3 matrix.
12/// - The values are placed in column-major order.
13pub type Mat3 = [f32; 9];
14
15/// A floating-point two-dimensional point.
16/// - The values are placed in (x, y) order.
17pub type Point2 = [f32; 2];
18
19/// The relative motion performed by a mouse device.
20/// - The valid range is defined in [`MouseDeviceInfo.RelativeMotionRange`].
21/// - The values are placed in (x, y) order.
22pub type RelativeMotion = [f32; 2];
23
24pub type RelativeMotionRange = [fidl_fuchsia_input_common::Axis; 2];
25
26pub const MOUSE_MAX_EVENT: u32 = 128;
27
28pub const TOUCH_MAX_EVENT: u32 = 128;
29
30/// The possible states of a pointer event. These phases of events in a stream
31/// follow a state machine that starts with the `ADD` phase, followed by zero or
32/// more `CHANGE` phases, and finally terminates with `REMOVE` or `CANCEL`
33/// phase.
34/// ```
35/// ADD ---> CHANGE* -+-> REMOVE
36///                   |
37///                   +-> CANCEL
38/// ```
39///
40/// A finite sequence of pointer events that follows this state machine,
41/// starting from the initial state, is called an **interaction**. A closed (or
42/// past) interaction is one where it has reached the terminal state; an open
43/// (or current) interaction is one where it has not.
44///
45/// For a given device pointer, a stream of events is observed as a succession
46/// of zero or more closed interactions (the past history of user engagement),
47/// followed by at most one open interaction (the current user engagement).
48///
49/// When we need to group pointer events by their interaction, an event carries
50/// an **interaction id** that is unique in that pointer stream. This common
51/// reference makes it possible to operate on a closed interaction, as well as
52/// an open interaction.
53///
54/// For example, touch events are typically observed as a succession of
55/// interactions, as fingers engage and disengage with the display.
56#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
57#[repr(u32)]
58pub enum EventPhase {
59    /// The device has started tracking the pointer.
60    Add = 1,
61    /// The device has reported an update to the pointer state.
62    Change = 2,
63    /// The device has stopped tracking the pointer.
64    Remove = 3,
65    /// The pointer is no longer available.
66    Cancel = 4,
67}
68
69impl EventPhase {
70    #[inline]
71    pub fn from_primitive(prim: u32) -> Option<Self> {
72        match prim {
73            1 => Some(Self::Add),
74            2 => Some(Self::Change),
75            3 => Some(Self::Remove),
76            4 => Some(Self::Cancel),
77            _ => None,
78        }
79    }
80
81    #[inline]
82    pub const fn into_primitive(self) -> u32 {
83        self as u32
84    }
85}
86
87/// A description of mouse event stream's relationship to this view.
88#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
89#[repr(u32)]
90pub enum MouseViewStatus {
91    /// The stream is directed towards this view.
92    Entered = 1,
93    /// The stream is directed away from this view.
94    Exited = 2,
95}
96
97impl MouseViewStatus {
98    #[inline]
99    pub fn from_primitive(prim: u32) -> Option<Self> {
100        match prim {
101            1 => Some(Self::Entered),
102            2 => Some(Self::Exited),
103            _ => None,
104        }
105    }
106
107    #[inline]
108    pub const fn into_primitive(self) -> u32 {
109        self as u32
110    }
111}
112
113/// A description of the interaction's relationship to this client.
114#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
115#[repr(u32)]
116pub enum TouchInteractionStatus {
117    /// The client has been denied ownership of the interaction.
118    Denied = 1,
119    /// The client has been granted ownership of the interaction.
120    Granted = 2,
121}
122
123impl TouchInteractionStatus {
124    #[inline]
125    pub fn from_primitive(prim: u32) -> Option<Self> {
126        match prim {
127            1 => Some(Self::Denied),
128            2 => Some(Self::Granted),
129            _ => None,
130        }
131    }
132
133    #[inline]
134    pub const fn into_primitive(self) -> u32 {
135        self as u32
136    }
137}
138
139/// The possible interaction dispositions that a client can respond with to a
140/// given |TouchPointerSample|. Used as part of a gesture disambiguation scheme.
141///
142/// The responses are based on the idea of an ownership claim on a interaction.
143/// Clients may assert a claim of ownership on an open interaction, but only one
144/// client's claim is granted by the server; other clients' claims are denied.
145#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
146#[repr(u32)]
147pub enum TouchResponseType {
148    /// The client has no further interest in this interaction; it declines
149    /// ownership of the interaction. The client will stop receiving events for
150    /// this interaction.
151    No = 1,
152    /// The client is interested in this interaction, but needs to see more
153    /// events to decide; the client has not yet claimed ownership of this
154    /// interaction.
155    Maybe = 2,
156    /// The client is interested in this interaction, but needs to see more
157    /// events to decide; the client has not yet claimed ownership of the
158    /// interaction. During ownership resolution, it exerts its priority over
159    /// lower-priority "maybe" claims, but always loses to a "yes" claim.
160    MaybePrioritize = 3,
161    /// The client is interested in this interaction, but needs to see more
162    /// events to decide; the client has not yet claimed ownership of the
163    /// interaction. Moreover, it suppresses lower-priority claims that try to
164    /// resolve interaction ownership.
165    MaybeSuppress = 4,
166    /// The client is interested in this interaction, but needs to see more
167    /// events to decide; the client has not yet claimed ownership of the
168    /// interaction. Moreover, it suppresses lower-priority claims that try to
169    /// resolve interaction ownership. During ownership resolution, it exerts
170    /// its priority over lower-priority "maybe" claims, but always loses to a
171    /// "yes" claim.
172    MaybePrioritizeSuppress = 5,
173    /// The client is interested in this interaction, but needs to see a
174    /// subsequent interaction to decide; the client has not yet claimed
175    /// ownership of this interaction. It prevents ownership resolution when the
176    /// interaction closes.
177    Hold = 6,
178    /// The client is interested in this interaction, but needs to see a
179    /// subsequent interaction to decide; the client has not yet claimed
180    /// ownership of this interaction. It prevents ownership resolution when the
181    /// interaction closes. Moreover, it suppresses lower-priority claims that
182    /// try to resolve interaction ownership.
183    HoldSuppress = 7,
184    /// The client wishes exclusive access to the remaining events in this
185    /// interaction; it claims ownership of this interaction (but that claim may
186    /// be granted or denied). During ownership resolution, it yields its
187    /// priority to lower-priority "yes" claims.
188    Yes = 8,
189    /// The client wishes exclusive access to the remaining events in this
190    /// interaction; it claims ownership of this interaction (but that claim may
191    /// be granted or denied). During ownership resolution, it exerts its
192    /// priority over lower-priority "yes" claims.
193    YesPrioritize = 9,
194}
195
196impl TouchResponseType {
197    #[inline]
198    pub fn from_primitive(prim: u32) -> Option<Self> {
199        match prim {
200            1 => Some(Self::No),
201            2 => Some(Self::Maybe),
202            3 => Some(Self::MaybePrioritize),
203            4 => Some(Self::MaybeSuppress),
204            5 => Some(Self::MaybePrioritizeSuppress),
205            6 => Some(Self::Hold),
206            7 => Some(Self::HoldSuppress),
207            8 => Some(Self::Yes),
208            9 => Some(Self::YesPrioritize),
209            _ => None,
210        }
211    }
212
213    #[inline]
214    pub const fn into_primitive(self) -> u32 {
215        self as u32
216    }
217}
218
219/// The status of a mouse event stream, sent from server to client.
220///
221/// Invariant: a client's mouse events are bracketed by
222/// [`MouseViewStatus.ENTERED`] and [`MouseViewStatus.EXITED`].
223#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
224pub struct MouseEventStreamInfo {
225    /// An identifier for the mouse device that issues a mouse event stream.
226    pub device_id: u32,
227    /// The mouse event stream's enter/exit status, sent from server to client.
228    pub status: MouseViewStatus,
229}
230
231impl fidl::Persistable for MouseEventStreamInfo {}
232
233/// An axis-aligned rectangle. It is defined by its minimal and maximal extents
234/// in a coordinate system.
235#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
236pub struct Rectangle {
237    /// The minimal extent of this rectangle, inclusive.
238    /// - Its coordinates are pairwise less than the maximal extent's
239    ///   coordinates.
240    pub min: [f32; 2],
241    /// The maximal extent of this rectangle, inclusive.
242    /// - Its coordinates are pairwise greater than the minimal extent's
243    ///   coordinates.
244    pub max: [f32; 2],
245}
246
247impl fidl::Persistable for Rectangle {}
248
249/// A unique identifier for a "interaction" of touch events in an event stream.
250/// Touch events are observed as a succession of interactions, as fingers engage
251/// and disengage with the display.
252///
253/// A finite sequence of pointer events that follows the `EventPhase` state
254/// machine, starting from the initial state ADD, is called an **interaction**.
255/// A closed (or past) interaction is one where it has reached the terminal
256/// state (REMOVE or CANCEL); an open (or current) interaction is one where it
257/// has not.
258///
259/// For a given device pointer, a stream of events is observed as a succession
260/// of zero or more closed interactions (the past history of user engagement),
261/// followed by at most one open interaction (the current user engagement).
262///
263/// Because we need to group pointer events by their interaction, touch event
264/// carries an **interaction id** that is unique in that pointer stream. This
265/// common reference makes it possible to operate on a closed interaction, as
266/// well as an open interaction.
267///
268/// Also see `EventPhase` for a discussion on event streams by mice.
269#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
270#[repr(C)]
271pub struct TouchInteractionId {
272    /// An identifier for the pointer device that issues touch event streams.
273    /// A device may own multiple pointers, each with its own |pointer_id|.
274    pub device_id: u32,
275    /// An identifier of the pointer that issued this event. It is unique only
276    /// to a specific |device_id|. Each (device_id, pointer_id) pair issues at
277    /// most one open interaction at a time.
278    pub pointer_id: u32,
279    /// An identifier of the interaction. It is unique only to a specific
280    /// (device_id, pointer_id) pair.
281    pub interaction_id: u32,
282}
283
284impl fidl::Persistable for TouchInteractionId {}
285
286/// The result of gesture disambiguation for a interaction of touch events, sent
287/// from server to client.
288#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
289pub struct TouchInteractionResult {
290    /// The interaction that this pointer sample belongs to.
291    pub interaction: TouchInteractionId,
292    /// The interaction's disposition, sent from server to client.
293    pub status: TouchInteractionStatus,
294}
295
296impl fidl::Persistable for TouchInteractionResult {}
297
298#[derive(Clone, Debug, PartialEq)]
299pub struct TouchSourceUpdateResponseRequest {
300    pub interaction: TouchInteractionId,
301    pub response: TouchResponse,
302}
303
304impl fidl::Persistable for TouchSourceUpdateResponseRequest {}
305
306#[derive(Clone, Debug, PartialEq)]
307pub struct TouchSourceWatchRequest {
308    pub responses: Vec<TouchResponse>,
309}
310
311impl fidl::Persistable for TouchSourceWatchRequest {}
312
313/// The parameters of the associated view and viewport, sufficient to correctly
314/// interpret the position and scale of pointer events dispatched to this view.
315///
316/// Ordering. These parameters arrive over the same channel as pointer events,
317/// to provide synchronous context for interpreting the position of pointer
318/// events in the view's local coordinate system.
319///
320/// Inter-protocol redundancy. Some of these parameters may also be sent over an
321/// independent channel dedicated to view control; the client is responsible for
322/// correct use of asynchronously received parameters.
323///
324/// TODO(https://fxbug.dev/42162292): Rename viewport, it is used in Flatland.
325#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)]
326pub struct ViewParameters {
327    /// The view's area of content, placed in the coordinate system of the view.
328    ///
329    /// The rectangle is defined by the parent view's setup of clipping on this
330    /// view.
331    pub view: Rectangle,
332    /// The viewport's area of interaction, placed in an independent coordinate
333    /// system.
334    ///
335    /// A pointer event's position is defined in the coordinate system of this
336    /// viewport.
337    ///
338    /// A change in viewport extents means the region for pointer interaction
339    /// has itself moved, or changed in size, or both.
340    pub viewport: Rectangle,
341    /// The transform matrix that relates a point's position in the viewport's
342    /// coordinate system to its position in the view's coordinate system.
343    pub viewport_to_view_transform: [f32; 9],
344}
345
346impl fidl::Persistable for ViewParameters {}
347
348/// Information about a device that issues a mouse event stream.
349#[derive(Clone, Debug, Default, PartialEq)]
350pub struct MouseDeviceInfo {
351    /// An identifier for the mouse device that issues a mouse event stream.
352    /// Required.
353    pub id: Option<u32>,
354    /// Range of vertical scroll values issued by the device.
355    pub scroll_v_range: Option<fidl_fuchsia_input_common::Axis>,
356    /// Range of horizontal scroll values issued by the device.
357    pub scroll_h_range: Option<fidl_fuchsia_input_common::Axis>,
358    /// Button identifiers issued by the device, in priority order.
359    pub buttons: Option<Vec<u8>>,
360    /// Range of relative movement values issued by the device.
361    pub relative_motion_range: Option<[fidl_fuchsia_input_common::Axis; 2]>,
362    #[doc(hidden)]
363    pub __source_breaking: fidl::marker::SourceBreaking,
364}
365
366impl fidl::Persistable for MouseDeviceInfo {}
367
368/// A description of each sampled data point in a mouse event stream.
369///
370/// `MousePointerSample` may bundle multiple state changes into one event.
371/// For example, if user scrolls mouse wheel and presses the left buttton
372/// down at the same time, client may receive scroll and button state changes
373/// together in 1 event, or receive button change and scroll change in
374/// separate events.
375#[derive(Clone, Debug, Default, PartialEq)]
376pub struct MousePointerSample {
377    /// An identifier for the mouse device that issues a mouse event stream.
378    /// Required.
379    pub device_id: Option<u32>,
380    /// The position of this event, in the viewport's coordinate system.
381    /// Required.
382    pub position_in_viewport: Option<[f32; 2]>,
383    /// Relative vertical scrolling displacement by detent.
384    pub scroll_v: Option<i64>,
385    /// Relative horizontal scrolling displacement by detent.
386    pub scroll_h: Option<i64>,
387    /// Identifiers of currently pressed buttons.
388    pub pressed_buttons: Option<Vec<u8>>,
389    /// The relative movement performed, independent of the viewport's
390    /// coordinate system.
391    pub relative_motion: Option<[f32; 2]>,
392    /// Recommended vertical scrolling displacement by physical pixel, it is
393    /// computed with accelerator, detent / mm to pixel ratio, etc.
394    pub scroll_v_physical_pixel: Option<f64>,
395    /// Recommended horizontal scrolling displacement by physical pixel, it
396    /// is computed with accelerator, detent / mm to pixel ratio, etc.
397    pub scroll_h_physical_pixel: Option<f64>,
398    /// Indicated if the scroll event is from a precision scroll device (HI_RES
399    /// mouse or touchpad). Clients may want to play interpolation animations
400    /// on non precision scroll device for smooth scrolling.
401    pub is_precision_scroll: Option<bool>,
402    #[doc(hidden)]
403    pub __source_breaking: fidl::marker::SourceBreaking,
404}
405
406impl fidl::Persistable for MousePointerSample {}
407
408/// Information about a device that issues touch event streams.
409#[derive(Clone, Debug, Default, PartialEq)]
410pub struct TouchDeviceInfo {
411    /// An identifier for the touch device that issues touch event streams.
412    /// A device may own multiple pointers, each with its own pointer id and its
413    /// own touch event stream.
414    /// Required.
415    pub id: Option<u32>,
416    #[doc(hidden)]
417    pub __source_breaking: fidl::marker::SourceBreaking,
418}
419
420impl fidl::Persistable for TouchDeviceInfo {}
421
422/// A description of each sampled data point in a touch event stream.
423/// All fields are required.
424#[derive(Clone, Debug, Default, PartialEq)]
425pub struct TouchPointerSample {
426    /// The interaction that this pointer sample belongs to.
427    pub interaction: Option<TouchInteractionId>,
428    /// The state of this event in the interaction's state machine.
429    pub phase: Option<EventPhase>,
430    /// The position of this event, in the viewport's coordinate system.
431    pub position_in_viewport: Option<[f32; 2]>,
432    #[doc(hidden)]
433    pub __source_breaking: fidl::marker::SourceBreaking,
434}
435
436impl fidl::Persistable for TouchPointerSample {}
437
438/// A feedback event per |Event|, sent from client to server.
439///
440/// Only |TouchPointerSample| requires a |TouchResponseType|; for other events,
441/// the server expects an empty |TouchResponse| table.
442#[derive(Clone, Debug, Default, PartialEq)]
443pub struct TouchResponse {
444    /// The interaction disposition that a client responds with for a given
445    /// |TouchPointerSample|.
446    pub response_type: Option<TouchResponseType>,
447    /// An identifier to correlate this response's send/receive occurrence across
448    /// component boundaries or abstraction layers.
449    pub trace_flow_id: Option<u64>,
450    #[doc(hidden)]
451    pub __source_breaking: fidl::marker::SourceBreaking,
452}
453
454impl fidl::Persistable for TouchResponse {}
455
456pub mod mouse_source_ordinals {
457    pub const WATCH: u64 = 0x5b1f6e917ac1abb4;
458}
459
460pub mod touch_source_ordinals {
461    pub const WATCH: u64 = 0x38453127dd0fc7d;
462    pub const UPDATE_RESPONSE: u64 = 0x6c746a313b39898a;
463}
464
465mod internal {
466    use super::*;
467    unsafe impl fidl::encoding::TypeMarker for EventPhase {
468        type Owned = Self;
469
470        #[inline(always)]
471        fn inline_align(_context: fidl::encoding::Context) -> usize {
472            std::mem::align_of::<u32>()
473        }
474
475        #[inline(always)]
476        fn inline_size(_context: fidl::encoding::Context) -> usize {
477            std::mem::size_of::<u32>()
478        }
479
480        #[inline(always)]
481        fn encode_is_copy() -> bool {
482            true
483        }
484
485        #[inline(always)]
486        fn decode_is_copy() -> bool {
487            false
488        }
489    }
490
491    impl fidl::encoding::ValueTypeMarker for EventPhase {
492        type Borrowed<'a> = Self;
493        #[inline(always)]
494        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
495            *value
496        }
497    }
498
499    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for EventPhase {
500        #[inline]
501        unsafe fn encode(
502            self,
503            encoder: &mut fidl::encoding::Encoder<'_, D>,
504            offset: usize,
505            _depth: fidl::encoding::Depth,
506        ) -> fidl::Result<()> {
507            encoder.debug_check_bounds::<Self>(offset);
508            encoder.write_num(self.into_primitive(), offset);
509            Ok(())
510        }
511    }
512
513    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for EventPhase {
514        #[inline(always)]
515        fn new_empty() -> Self {
516            Self::Add
517        }
518
519        #[inline]
520        unsafe fn decode(
521            &mut self,
522            decoder: &mut fidl::encoding::Decoder<'_, D>,
523            offset: usize,
524            _depth: fidl::encoding::Depth,
525        ) -> fidl::Result<()> {
526            decoder.debug_check_bounds::<Self>(offset);
527            let prim = decoder.read_num::<u32>(offset);
528
529            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
530            Ok(())
531        }
532    }
533    unsafe impl fidl::encoding::TypeMarker for MouseViewStatus {
534        type Owned = Self;
535
536        #[inline(always)]
537        fn inline_align(_context: fidl::encoding::Context) -> usize {
538            std::mem::align_of::<u32>()
539        }
540
541        #[inline(always)]
542        fn inline_size(_context: fidl::encoding::Context) -> usize {
543            std::mem::size_of::<u32>()
544        }
545
546        #[inline(always)]
547        fn encode_is_copy() -> bool {
548            true
549        }
550
551        #[inline(always)]
552        fn decode_is_copy() -> bool {
553            false
554        }
555    }
556
557    impl fidl::encoding::ValueTypeMarker for MouseViewStatus {
558        type Borrowed<'a> = Self;
559        #[inline(always)]
560        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
561            *value
562        }
563    }
564
565    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
566        for MouseViewStatus
567    {
568        #[inline]
569        unsafe fn encode(
570            self,
571            encoder: &mut fidl::encoding::Encoder<'_, D>,
572            offset: usize,
573            _depth: fidl::encoding::Depth,
574        ) -> fidl::Result<()> {
575            encoder.debug_check_bounds::<Self>(offset);
576            encoder.write_num(self.into_primitive(), offset);
577            Ok(())
578        }
579    }
580
581    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MouseViewStatus {
582        #[inline(always)]
583        fn new_empty() -> Self {
584            Self::Entered
585        }
586
587        #[inline]
588        unsafe fn decode(
589            &mut self,
590            decoder: &mut fidl::encoding::Decoder<'_, D>,
591            offset: usize,
592            _depth: fidl::encoding::Depth,
593        ) -> fidl::Result<()> {
594            decoder.debug_check_bounds::<Self>(offset);
595            let prim = decoder.read_num::<u32>(offset);
596
597            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
598            Ok(())
599        }
600    }
601    unsafe impl fidl::encoding::TypeMarker for TouchInteractionStatus {
602        type Owned = Self;
603
604        #[inline(always)]
605        fn inline_align(_context: fidl::encoding::Context) -> usize {
606            std::mem::align_of::<u32>()
607        }
608
609        #[inline(always)]
610        fn inline_size(_context: fidl::encoding::Context) -> usize {
611            std::mem::size_of::<u32>()
612        }
613
614        #[inline(always)]
615        fn encode_is_copy() -> bool {
616            true
617        }
618
619        #[inline(always)]
620        fn decode_is_copy() -> bool {
621            false
622        }
623    }
624
625    impl fidl::encoding::ValueTypeMarker for TouchInteractionStatus {
626        type Borrowed<'a> = Self;
627        #[inline(always)]
628        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
629            *value
630        }
631    }
632
633    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
634        for TouchInteractionStatus
635    {
636        #[inline]
637        unsafe fn encode(
638            self,
639            encoder: &mut fidl::encoding::Encoder<'_, D>,
640            offset: usize,
641            _depth: fidl::encoding::Depth,
642        ) -> fidl::Result<()> {
643            encoder.debug_check_bounds::<Self>(offset);
644            encoder.write_num(self.into_primitive(), offset);
645            Ok(())
646        }
647    }
648
649    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
650        for TouchInteractionStatus
651    {
652        #[inline(always)]
653        fn new_empty() -> Self {
654            Self::Denied
655        }
656
657        #[inline]
658        unsafe fn decode(
659            &mut self,
660            decoder: &mut fidl::encoding::Decoder<'_, D>,
661            offset: usize,
662            _depth: fidl::encoding::Depth,
663        ) -> fidl::Result<()> {
664            decoder.debug_check_bounds::<Self>(offset);
665            let prim = decoder.read_num::<u32>(offset);
666
667            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
668            Ok(())
669        }
670    }
671    unsafe impl fidl::encoding::TypeMarker for TouchResponseType {
672        type Owned = Self;
673
674        #[inline(always)]
675        fn inline_align(_context: fidl::encoding::Context) -> usize {
676            std::mem::align_of::<u32>()
677        }
678
679        #[inline(always)]
680        fn inline_size(_context: fidl::encoding::Context) -> usize {
681            std::mem::size_of::<u32>()
682        }
683
684        #[inline(always)]
685        fn encode_is_copy() -> bool {
686            true
687        }
688
689        #[inline(always)]
690        fn decode_is_copy() -> bool {
691            false
692        }
693    }
694
695    impl fidl::encoding::ValueTypeMarker for TouchResponseType {
696        type Borrowed<'a> = Self;
697        #[inline(always)]
698        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
699            *value
700        }
701    }
702
703    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D>
704        for TouchResponseType
705    {
706        #[inline]
707        unsafe fn encode(
708            self,
709            encoder: &mut fidl::encoding::Encoder<'_, D>,
710            offset: usize,
711            _depth: fidl::encoding::Depth,
712        ) -> fidl::Result<()> {
713            encoder.debug_check_bounds::<Self>(offset);
714            encoder.write_num(self.into_primitive(), offset);
715            Ok(())
716        }
717    }
718
719    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TouchResponseType {
720        #[inline(always)]
721        fn new_empty() -> Self {
722            Self::No
723        }
724
725        #[inline]
726        unsafe fn decode(
727            &mut self,
728            decoder: &mut fidl::encoding::Decoder<'_, D>,
729            offset: usize,
730            _depth: fidl::encoding::Depth,
731        ) -> fidl::Result<()> {
732            decoder.debug_check_bounds::<Self>(offset);
733            let prim = decoder.read_num::<u32>(offset);
734
735            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
736            Ok(())
737        }
738    }
739
740    impl fidl::encoding::ValueTypeMarker for MouseEventStreamInfo {
741        type Borrowed<'a> = &'a Self;
742        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
743            value
744        }
745    }
746
747    unsafe impl fidl::encoding::TypeMarker for MouseEventStreamInfo {
748        type Owned = Self;
749
750        #[inline(always)]
751        fn inline_align(_context: fidl::encoding::Context) -> usize {
752            4
753        }
754
755        #[inline(always)]
756        fn inline_size(_context: fidl::encoding::Context) -> usize {
757            8
758        }
759    }
760
761    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MouseEventStreamInfo, D>
762        for &MouseEventStreamInfo
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::<MouseEventStreamInfo>(offset);
772            // Delegate to tuple encoding.
773            fidl::encoding::Encode::<MouseEventStreamInfo, D>::encode(
774                (
775                    <u32 as fidl::encoding::ValueTypeMarker>::borrow(&self.device_id),
776                    <MouseViewStatus as fidl::encoding::ValueTypeMarker>::borrow(&self.status),
777                ),
778                encoder,
779                offset,
780                _depth,
781            )
782        }
783    }
784    unsafe impl<
785        D: fidl::encoding::ResourceDialect,
786        T0: fidl::encoding::Encode<u32, D>,
787        T1: fidl::encoding::Encode<MouseViewStatus, D>,
788    > fidl::encoding::Encode<MouseEventStreamInfo, D> for (T0, T1)
789    {
790        #[inline]
791        unsafe fn encode(
792            self,
793            encoder: &mut fidl::encoding::Encoder<'_, D>,
794            offset: usize,
795            depth: fidl::encoding::Depth,
796        ) -> fidl::Result<()> {
797            encoder.debug_check_bounds::<MouseEventStreamInfo>(offset);
798            // Zero out padding regions. There's no need to apply masks
799            // because the unmasked parts will be overwritten by fields.
800            // Write the fields.
801            self.0.encode(encoder, offset + 0, depth)?;
802            self.1.encode(encoder, offset + 4, depth)?;
803            Ok(())
804        }
805    }
806
807    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MouseEventStreamInfo {
808        #[inline(always)]
809        fn new_empty() -> Self {
810            Self {
811                device_id: fidl::new_empty!(u32, D),
812                status: fidl::new_empty!(MouseViewStatus, D),
813            }
814        }
815
816        #[inline]
817        unsafe fn decode(
818            &mut self,
819            decoder: &mut fidl::encoding::Decoder<'_, D>,
820            offset: usize,
821            _depth: fidl::encoding::Depth,
822        ) -> fidl::Result<()> {
823            decoder.debug_check_bounds::<Self>(offset);
824            // Verify that padding bytes are zero.
825            fidl::decode!(u32, D, &mut self.device_id, decoder, offset + 0, _depth)?;
826            fidl::decode!(MouseViewStatus, D, &mut self.status, decoder, offset + 4, _depth)?;
827            Ok(())
828        }
829    }
830
831    impl fidl::encoding::ValueTypeMarker for Rectangle {
832        type Borrowed<'a> = &'a Self;
833        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
834            value
835        }
836    }
837
838    unsafe impl fidl::encoding::TypeMarker for Rectangle {
839        type Owned = Self;
840
841        #[inline(always)]
842        fn inline_align(_context: fidl::encoding::Context) -> usize {
843            4
844        }
845
846        #[inline(always)]
847        fn inline_size(_context: fidl::encoding::Context) -> usize {
848            16
849        }
850    }
851
852    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Rectangle, D>
853        for &Rectangle
854    {
855        #[inline]
856        unsafe fn encode(
857            self,
858            encoder: &mut fidl::encoding::Encoder<'_, D>,
859            offset: usize,
860            _depth: fidl::encoding::Depth,
861        ) -> fidl::Result<()> {
862            encoder.debug_check_bounds::<Rectangle>(offset);
863            // Delegate to tuple encoding.
864            fidl::encoding::Encode::<Rectangle, D>::encode(
865                (
866                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow(
867                        &self.min,
868                    ),
869                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow(
870                        &self.max,
871                    ),
872                ),
873                encoder,
874                offset,
875                _depth,
876            )
877        }
878    }
879    unsafe impl<
880        D: fidl::encoding::ResourceDialect,
881        T0: fidl::encoding::Encode<fidl::encoding::Array<f32, 2>, D>,
882        T1: fidl::encoding::Encode<fidl::encoding::Array<f32, 2>, D>,
883    > fidl::encoding::Encode<Rectangle, D> for (T0, T1)
884    {
885        #[inline]
886        unsafe fn encode(
887            self,
888            encoder: &mut fidl::encoding::Encoder<'_, D>,
889            offset: usize,
890            depth: fidl::encoding::Depth,
891        ) -> fidl::Result<()> {
892            encoder.debug_check_bounds::<Rectangle>(offset);
893            // Zero out padding regions. There's no need to apply masks
894            // because the unmasked parts will be overwritten by fields.
895            // Write the fields.
896            self.0.encode(encoder, offset + 0, depth)?;
897            self.1.encode(encoder, offset + 8, depth)?;
898            Ok(())
899        }
900    }
901
902    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for Rectangle {
903        #[inline(always)]
904        fn new_empty() -> Self {
905            Self {
906                min: fidl::new_empty!(fidl::encoding::Array<f32, 2>, D),
907                max: fidl::new_empty!(fidl::encoding::Array<f32, 2>, D),
908            }
909        }
910
911        #[inline]
912        unsafe fn decode(
913            &mut self,
914            decoder: &mut fidl::encoding::Decoder<'_, D>,
915            offset: usize,
916            _depth: fidl::encoding::Depth,
917        ) -> fidl::Result<()> {
918            decoder.debug_check_bounds::<Self>(offset);
919            // Verify that padding bytes are zero.
920            fidl::decode!(fidl::encoding::Array<f32, 2>, D, &mut self.min, decoder, offset + 0, _depth)?;
921            fidl::decode!(fidl::encoding::Array<f32, 2>, D, &mut self.max, decoder, offset + 8, _depth)?;
922            Ok(())
923        }
924    }
925
926    impl fidl::encoding::ValueTypeMarker for TouchInteractionId {
927        type Borrowed<'a> = &'a Self;
928        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
929            value
930        }
931    }
932
933    unsafe impl fidl::encoding::TypeMarker for TouchInteractionId {
934        type Owned = Self;
935
936        #[inline(always)]
937        fn inline_align(_context: fidl::encoding::Context) -> usize {
938            4
939        }
940
941        #[inline(always)]
942        fn inline_size(_context: fidl::encoding::Context) -> usize {
943            12
944        }
945        #[inline(always)]
946        fn encode_is_copy() -> bool {
947            true
948        }
949
950        #[inline(always)]
951        fn decode_is_copy() -> bool {
952            true
953        }
954    }
955
956    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TouchInteractionId, D>
957        for &TouchInteractionId
958    {
959        #[inline]
960        unsafe fn encode(
961            self,
962            encoder: &mut fidl::encoding::Encoder<'_, D>,
963            offset: usize,
964            _depth: fidl::encoding::Depth,
965        ) -> fidl::Result<()> {
966            encoder.debug_check_bounds::<TouchInteractionId>(offset);
967            unsafe {
968                // Copy the object into the buffer.
969                let buf_ptr = encoder.buf.as_mut_ptr().add(offset);
970                (buf_ptr as *mut TouchInteractionId)
971                    .write_unaligned((self as *const TouchInteractionId).read());
972                // Zero out padding regions. Unlike `fidl_struct_impl_noncopy!`, this must be
973                // done second because the memcpy will write garbage to these bytes.
974            }
975            Ok(())
976        }
977    }
978    unsafe impl<
979        D: fidl::encoding::ResourceDialect,
980        T0: fidl::encoding::Encode<u32, D>,
981        T1: fidl::encoding::Encode<u32, D>,
982        T2: fidl::encoding::Encode<u32, D>,
983    > fidl::encoding::Encode<TouchInteractionId, D> for (T0, T1, T2)
984    {
985        #[inline]
986        unsafe fn encode(
987            self,
988            encoder: &mut fidl::encoding::Encoder<'_, D>,
989            offset: usize,
990            depth: fidl::encoding::Depth,
991        ) -> fidl::Result<()> {
992            encoder.debug_check_bounds::<TouchInteractionId>(offset);
993            // Zero out padding regions. There's no need to apply masks
994            // because the unmasked parts will be overwritten by fields.
995            // Write the fields.
996            self.0.encode(encoder, offset + 0, depth)?;
997            self.1.encode(encoder, offset + 4, depth)?;
998            self.2.encode(encoder, offset + 8, depth)?;
999            Ok(())
1000        }
1001    }
1002
1003    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TouchInteractionId {
1004        #[inline(always)]
1005        fn new_empty() -> Self {
1006            Self {
1007                device_id: fidl::new_empty!(u32, D),
1008                pointer_id: fidl::new_empty!(u32, D),
1009                interaction_id: fidl::new_empty!(u32, D),
1010            }
1011        }
1012
1013        #[inline]
1014        unsafe fn decode(
1015            &mut self,
1016            decoder: &mut fidl::encoding::Decoder<'_, D>,
1017            offset: usize,
1018            _depth: fidl::encoding::Depth,
1019        ) -> fidl::Result<()> {
1020            decoder.debug_check_bounds::<Self>(offset);
1021            let buf_ptr = unsafe { decoder.buf.as_ptr().add(offset) };
1022            // Verify that padding bytes are zero.
1023            // Copy from the buffer into the object.
1024            unsafe {
1025                std::ptr::copy_nonoverlapping(buf_ptr, self as *mut Self as *mut u8, 12);
1026            }
1027            Ok(())
1028        }
1029    }
1030
1031    impl fidl::encoding::ValueTypeMarker for TouchInteractionResult {
1032        type Borrowed<'a> = &'a Self;
1033        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1034            value
1035        }
1036    }
1037
1038    unsafe impl fidl::encoding::TypeMarker for TouchInteractionResult {
1039        type Owned = Self;
1040
1041        #[inline(always)]
1042        fn inline_align(_context: fidl::encoding::Context) -> usize {
1043            4
1044        }
1045
1046        #[inline(always)]
1047        fn inline_size(_context: fidl::encoding::Context) -> usize {
1048            16
1049        }
1050    }
1051
1052    unsafe impl<D: fidl::encoding::ResourceDialect>
1053        fidl::encoding::Encode<TouchInteractionResult, D> for &TouchInteractionResult
1054    {
1055        #[inline]
1056        unsafe fn encode(
1057            self,
1058            encoder: &mut fidl::encoding::Encoder<'_, D>,
1059            offset: usize,
1060            _depth: fidl::encoding::Depth,
1061        ) -> fidl::Result<()> {
1062            encoder.debug_check_bounds::<TouchInteractionResult>(offset);
1063            // Delegate to tuple encoding.
1064            fidl::encoding::Encode::<TouchInteractionResult, D>::encode(
1065                (
1066                    <TouchInteractionId as fidl::encoding::ValueTypeMarker>::borrow(
1067                        &self.interaction,
1068                    ),
1069                    <TouchInteractionStatus as fidl::encoding::ValueTypeMarker>::borrow(
1070                        &self.status,
1071                    ),
1072                ),
1073                encoder,
1074                offset,
1075                _depth,
1076            )
1077        }
1078    }
1079    unsafe impl<
1080        D: fidl::encoding::ResourceDialect,
1081        T0: fidl::encoding::Encode<TouchInteractionId, D>,
1082        T1: fidl::encoding::Encode<TouchInteractionStatus, D>,
1083    > fidl::encoding::Encode<TouchInteractionResult, D> for (T0, T1)
1084    {
1085        #[inline]
1086        unsafe fn encode(
1087            self,
1088            encoder: &mut fidl::encoding::Encoder<'_, D>,
1089            offset: usize,
1090            depth: fidl::encoding::Depth,
1091        ) -> fidl::Result<()> {
1092            encoder.debug_check_bounds::<TouchInteractionResult>(offset);
1093            // Zero out padding regions. There's no need to apply masks
1094            // because the unmasked parts will be overwritten by fields.
1095            // Write the fields.
1096            self.0.encode(encoder, offset + 0, depth)?;
1097            self.1.encode(encoder, offset + 12, depth)?;
1098            Ok(())
1099        }
1100    }
1101
1102    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1103        for TouchInteractionResult
1104    {
1105        #[inline(always)]
1106        fn new_empty() -> Self {
1107            Self {
1108                interaction: fidl::new_empty!(TouchInteractionId, D),
1109                status: fidl::new_empty!(TouchInteractionStatus, D),
1110            }
1111        }
1112
1113        #[inline]
1114        unsafe fn decode(
1115            &mut self,
1116            decoder: &mut fidl::encoding::Decoder<'_, D>,
1117            offset: usize,
1118            _depth: fidl::encoding::Depth,
1119        ) -> fidl::Result<()> {
1120            decoder.debug_check_bounds::<Self>(offset);
1121            // Verify that padding bytes are zero.
1122            fidl::decode!(
1123                TouchInteractionId,
1124                D,
1125                &mut self.interaction,
1126                decoder,
1127                offset + 0,
1128                _depth
1129            )?;
1130            fidl::decode!(
1131                TouchInteractionStatus,
1132                D,
1133                &mut self.status,
1134                decoder,
1135                offset + 12,
1136                _depth
1137            )?;
1138            Ok(())
1139        }
1140    }
1141
1142    impl fidl::encoding::ValueTypeMarker for TouchSourceUpdateResponseRequest {
1143        type Borrowed<'a> = &'a Self;
1144        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1145            value
1146        }
1147    }
1148
1149    unsafe impl fidl::encoding::TypeMarker for TouchSourceUpdateResponseRequest {
1150        type Owned = Self;
1151
1152        #[inline(always)]
1153        fn inline_align(_context: fidl::encoding::Context) -> usize {
1154            8
1155        }
1156
1157        #[inline(always)]
1158        fn inline_size(_context: fidl::encoding::Context) -> usize {
1159            32
1160        }
1161    }
1162
1163    unsafe impl<D: fidl::encoding::ResourceDialect>
1164        fidl::encoding::Encode<TouchSourceUpdateResponseRequest, D>
1165        for &TouchSourceUpdateResponseRequest
1166    {
1167        #[inline]
1168        unsafe fn encode(
1169            self,
1170            encoder: &mut fidl::encoding::Encoder<'_, D>,
1171            offset: usize,
1172            _depth: fidl::encoding::Depth,
1173        ) -> fidl::Result<()> {
1174            encoder.debug_check_bounds::<TouchSourceUpdateResponseRequest>(offset);
1175            // Delegate to tuple encoding.
1176            fidl::encoding::Encode::<TouchSourceUpdateResponseRequest, D>::encode(
1177                (
1178                    <TouchInteractionId as fidl::encoding::ValueTypeMarker>::borrow(
1179                        &self.interaction,
1180                    ),
1181                    <TouchResponse as fidl::encoding::ValueTypeMarker>::borrow(&self.response),
1182                ),
1183                encoder,
1184                offset,
1185                _depth,
1186            )
1187        }
1188    }
1189    unsafe impl<
1190        D: fidl::encoding::ResourceDialect,
1191        T0: fidl::encoding::Encode<TouchInteractionId, D>,
1192        T1: fidl::encoding::Encode<TouchResponse, D>,
1193    > fidl::encoding::Encode<TouchSourceUpdateResponseRequest, D> for (T0, T1)
1194    {
1195        #[inline]
1196        unsafe fn encode(
1197            self,
1198            encoder: &mut fidl::encoding::Encoder<'_, D>,
1199            offset: usize,
1200            depth: fidl::encoding::Depth,
1201        ) -> fidl::Result<()> {
1202            encoder.debug_check_bounds::<TouchSourceUpdateResponseRequest>(offset);
1203            // Zero out padding regions. There's no need to apply masks
1204            // because the unmasked parts will be overwritten by fields.
1205            unsafe {
1206                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
1207                (ptr as *mut u64).write_unaligned(0);
1208            }
1209            // Write the fields.
1210            self.0.encode(encoder, offset + 0, depth)?;
1211            self.1.encode(encoder, offset + 16, depth)?;
1212            Ok(())
1213        }
1214    }
1215
1216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1217        for TouchSourceUpdateResponseRequest
1218    {
1219        #[inline(always)]
1220        fn new_empty() -> Self {
1221            Self {
1222                interaction: fidl::new_empty!(TouchInteractionId, D),
1223                response: fidl::new_empty!(TouchResponse, D),
1224            }
1225        }
1226
1227        #[inline]
1228        unsafe fn decode(
1229            &mut self,
1230            decoder: &mut fidl::encoding::Decoder<'_, D>,
1231            offset: usize,
1232            _depth: fidl::encoding::Depth,
1233        ) -> fidl::Result<()> {
1234            decoder.debug_check_bounds::<Self>(offset);
1235            // Verify that padding bytes are zero.
1236            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
1237            let padval = unsafe { (ptr as *const u64).read_unaligned() };
1238            let mask = 0xffffffff00000000u64;
1239            let maskedval = padval & mask;
1240            if maskedval != 0 {
1241                return Err(fidl::Error::NonZeroPadding {
1242                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
1243                });
1244            }
1245            fidl::decode!(
1246                TouchInteractionId,
1247                D,
1248                &mut self.interaction,
1249                decoder,
1250                offset + 0,
1251                _depth
1252            )?;
1253            fidl::decode!(TouchResponse, D, &mut self.response, decoder, offset + 16, _depth)?;
1254            Ok(())
1255        }
1256    }
1257
1258    impl fidl::encoding::ValueTypeMarker for TouchSourceWatchRequest {
1259        type Borrowed<'a> = &'a Self;
1260        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1261            value
1262        }
1263    }
1264
1265    unsafe impl fidl::encoding::TypeMarker for TouchSourceWatchRequest {
1266        type Owned = Self;
1267
1268        #[inline(always)]
1269        fn inline_align(_context: fidl::encoding::Context) -> usize {
1270            8
1271        }
1272
1273        #[inline(always)]
1274        fn inline_size(_context: fidl::encoding::Context) -> usize {
1275            16
1276        }
1277    }
1278
1279    unsafe impl<D: fidl::encoding::ResourceDialect>
1280        fidl::encoding::Encode<TouchSourceWatchRequest, D> for &TouchSourceWatchRequest
1281    {
1282        #[inline]
1283        unsafe fn encode(
1284            self,
1285            encoder: &mut fidl::encoding::Encoder<'_, D>,
1286            offset: usize,
1287            _depth: fidl::encoding::Depth,
1288        ) -> fidl::Result<()> {
1289            encoder.debug_check_bounds::<TouchSourceWatchRequest>(offset);
1290            // Delegate to tuple encoding.
1291            fidl::encoding::Encode::<TouchSourceWatchRequest, D>::encode(
1292                (
1293                    <fidl::encoding::Vector<TouchResponse, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.responses),
1294                ),
1295                encoder, offset, _depth
1296            )
1297        }
1298    }
1299    unsafe impl<
1300        D: fidl::encoding::ResourceDialect,
1301        T0: fidl::encoding::Encode<fidl::encoding::Vector<TouchResponse, 128>, D>,
1302    > fidl::encoding::Encode<TouchSourceWatchRequest, D> for (T0,)
1303    {
1304        #[inline]
1305        unsafe fn encode(
1306            self,
1307            encoder: &mut fidl::encoding::Encoder<'_, D>,
1308            offset: usize,
1309            depth: fidl::encoding::Depth,
1310        ) -> fidl::Result<()> {
1311            encoder.debug_check_bounds::<TouchSourceWatchRequest>(offset);
1312            // Zero out padding regions. There's no need to apply masks
1313            // because the unmasked parts will be overwritten by fields.
1314            // Write the fields.
1315            self.0.encode(encoder, offset + 0, depth)?;
1316            Ok(())
1317        }
1318    }
1319
1320    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
1321        for TouchSourceWatchRequest
1322    {
1323        #[inline(always)]
1324        fn new_empty() -> Self {
1325            Self { responses: fidl::new_empty!(fidl::encoding::Vector<TouchResponse, 128>, D) }
1326        }
1327
1328        #[inline]
1329        unsafe fn decode(
1330            &mut self,
1331            decoder: &mut fidl::encoding::Decoder<'_, D>,
1332            offset: usize,
1333            _depth: fidl::encoding::Depth,
1334        ) -> fidl::Result<()> {
1335            decoder.debug_check_bounds::<Self>(offset);
1336            // Verify that padding bytes are zero.
1337            fidl::decode!(fidl::encoding::Vector<TouchResponse, 128>, D, &mut self.responses, decoder, offset + 0, _depth)?;
1338            Ok(())
1339        }
1340    }
1341
1342    impl fidl::encoding::ValueTypeMarker for ViewParameters {
1343        type Borrowed<'a> = &'a Self;
1344        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1345            value
1346        }
1347    }
1348
1349    unsafe impl fidl::encoding::TypeMarker for ViewParameters {
1350        type Owned = Self;
1351
1352        #[inline(always)]
1353        fn inline_align(_context: fidl::encoding::Context) -> usize {
1354            4
1355        }
1356
1357        #[inline(always)]
1358        fn inline_size(_context: fidl::encoding::Context) -> usize {
1359            68
1360        }
1361    }
1362
1363    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<ViewParameters, D>
1364        for &ViewParameters
1365    {
1366        #[inline]
1367        unsafe fn encode(
1368            self,
1369            encoder: &mut fidl::encoding::Encoder<'_, D>,
1370            offset: usize,
1371            _depth: fidl::encoding::Depth,
1372        ) -> fidl::Result<()> {
1373            encoder.debug_check_bounds::<ViewParameters>(offset);
1374            // Delegate to tuple encoding.
1375            fidl::encoding::Encode::<ViewParameters, D>::encode(
1376                (
1377                    <Rectangle as fidl::encoding::ValueTypeMarker>::borrow(&self.view),
1378                    <Rectangle as fidl::encoding::ValueTypeMarker>::borrow(&self.viewport),
1379                    <fidl::encoding::Array<f32, 9> as fidl::encoding::ValueTypeMarker>::borrow(
1380                        &self.viewport_to_view_transform,
1381                    ),
1382                ),
1383                encoder,
1384                offset,
1385                _depth,
1386            )
1387        }
1388    }
1389    unsafe impl<
1390        D: fidl::encoding::ResourceDialect,
1391        T0: fidl::encoding::Encode<Rectangle, D>,
1392        T1: fidl::encoding::Encode<Rectangle, D>,
1393        T2: fidl::encoding::Encode<fidl::encoding::Array<f32, 9>, D>,
1394    > fidl::encoding::Encode<ViewParameters, D> for (T0, T1, T2)
1395    {
1396        #[inline]
1397        unsafe fn encode(
1398            self,
1399            encoder: &mut fidl::encoding::Encoder<'_, D>,
1400            offset: usize,
1401            depth: fidl::encoding::Depth,
1402        ) -> fidl::Result<()> {
1403            encoder.debug_check_bounds::<ViewParameters>(offset);
1404            // Zero out padding regions. There's no need to apply masks
1405            // because the unmasked parts will be overwritten by fields.
1406            // Write the fields.
1407            self.0.encode(encoder, offset + 0, depth)?;
1408            self.1.encode(encoder, offset + 16, depth)?;
1409            self.2.encode(encoder, offset + 32, depth)?;
1410            Ok(())
1411        }
1412    }
1413
1414    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ViewParameters {
1415        #[inline(always)]
1416        fn new_empty() -> Self {
1417            Self {
1418                view: fidl::new_empty!(Rectangle, D),
1419                viewport: fidl::new_empty!(Rectangle, D),
1420                viewport_to_view_transform: fidl::new_empty!(fidl::encoding::Array<f32, 9>, D),
1421            }
1422        }
1423
1424        #[inline]
1425        unsafe fn decode(
1426            &mut self,
1427            decoder: &mut fidl::encoding::Decoder<'_, D>,
1428            offset: usize,
1429            _depth: fidl::encoding::Depth,
1430        ) -> fidl::Result<()> {
1431            decoder.debug_check_bounds::<Self>(offset);
1432            // Verify that padding bytes are zero.
1433            fidl::decode!(Rectangle, D, &mut self.view, decoder, offset + 0, _depth)?;
1434            fidl::decode!(Rectangle, D, &mut self.viewport, decoder, offset + 16, _depth)?;
1435            fidl::decode!(fidl::encoding::Array<f32, 9>, D, &mut self.viewport_to_view_transform, decoder, offset + 32, _depth)?;
1436            Ok(())
1437        }
1438    }
1439
1440    impl MouseDeviceInfo {
1441        #[inline(always)]
1442        fn max_ordinal_present(&self) -> u64 {
1443            if let Some(_) = self.relative_motion_range {
1444                return 5;
1445            }
1446            if let Some(_) = self.buttons {
1447                return 4;
1448            }
1449            if let Some(_) = self.scroll_h_range {
1450                return 3;
1451            }
1452            if let Some(_) = self.scroll_v_range {
1453                return 2;
1454            }
1455            if let Some(_) = self.id {
1456                return 1;
1457            }
1458            0
1459        }
1460    }
1461
1462    impl fidl::encoding::ValueTypeMarker for MouseDeviceInfo {
1463        type Borrowed<'a> = &'a Self;
1464        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1465            value
1466        }
1467    }
1468
1469    unsafe impl fidl::encoding::TypeMarker for MouseDeviceInfo {
1470        type Owned = Self;
1471
1472        #[inline(always)]
1473        fn inline_align(_context: fidl::encoding::Context) -> usize {
1474            8
1475        }
1476
1477        #[inline(always)]
1478        fn inline_size(_context: fidl::encoding::Context) -> usize {
1479            16
1480        }
1481    }
1482
1483    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MouseDeviceInfo, D>
1484        for &MouseDeviceInfo
1485    {
1486        unsafe fn encode(
1487            self,
1488            encoder: &mut fidl::encoding::Encoder<'_, D>,
1489            offset: usize,
1490            mut depth: fidl::encoding::Depth,
1491        ) -> fidl::Result<()> {
1492            encoder.debug_check_bounds::<MouseDeviceInfo>(offset);
1493            // Vector header
1494            let max_ordinal: u64 = self.max_ordinal_present();
1495            encoder.write_num(max_ordinal, offset);
1496            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1497            // Calling encoder.out_of_line_offset(0) is not allowed.
1498            if max_ordinal == 0 {
1499                return Ok(());
1500            }
1501            depth.increment()?;
1502            let envelope_size = 8;
1503            let bytes_len = max_ordinal as usize * envelope_size;
1504            #[allow(unused_variables)]
1505            let offset = encoder.out_of_line_offset(bytes_len);
1506            let mut _prev_end_offset: usize = 0;
1507            if 1 > max_ordinal {
1508                return Ok(());
1509            }
1510
1511            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1512            // are envelope_size bytes.
1513            let cur_offset: usize = (1 - 1) * envelope_size;
1514
1515            // Zero reserved fields.
1516            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1517
1518            // Safety:
1519            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1520            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1521            //   envelope_size bytes, there is always sufficient room.
1522            fidl::encoding::encode_in_envelope_optional::<u32, D>(
1523                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
1524                encoder,
1525                offset + cur_offset,
1526                depth,
1527            )?;
1528
1529            _prev_end_offset = cur_offset + envelope_size;
1530            if 2 > max_ordinal {
1531                return Ok(());
1532            }
1533
1534            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1535            // are envelope_size bytes.
1536            let cur_offset: usize = (2 - 1) * envelope_size;
1537
1538            // Zero reserved fields.
1539            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1540
1541            // Safety:
1542            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1543            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1544            //   envelope_size bytes, there is always sufficient room.
1545            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_input_common::Axis, D>(
1546                self.scroll_v_range.as_ref().map(
1547                    <fidl_fuchsia_input_common::Axis as fidl::encoding::ValueTypeMarker>::borrow,
1548                ),
1549                encoder,
1550                offset + cur_offset,
1551                depth,
1552            )?;
1553
1554            _prev_end_offset = cur_offset + envelope_size;
1555            if 3 > max_ordinal {
1556                return Ok(());
1557            }
1558
1559            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1560            // are envelope_size bytes.
1561            let cur_offset: usize = (3 - 1) * envelope_size;
1562
1563            // Zero reserved fields.
1564            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1565
1566            // Safety:
1567            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1568            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1569            //   envelope_size bytes, there is always sufficient room.
1570            fidl::encoding::encode_in_envelope_optional::<fidl_fuchsia_input_common::Axis, D>(
1571                self.scroll_h_range.as_ref().map(
1572                    <fidl_fuchsia_input_common::Axis as fidl::encoding::ValueTypeMarker>::borrow,
1573                ),
1574                encoder,
1575                offset + cur_offset,
1576                depth,
1577            )?;
1578
1579            _prev_end_offset = cur_offset + envelope_size;
1580            if 4 > max_ordinal {
1581                return Ok(());
1582            }
1583
1584            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1585            // are envelope_size bytes.
1586            let cur_offset: usize = (4 - 1) * envelope_size;
1587
1588            // Zero reserved fields.
1589            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1590
1591            // Safety:
1592            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1593            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1594            //   envelope_size bytes, there is always sufficient room.
1595            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
1596                self.buttons.as_ref().map(
1597                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
1598                ),
1599                encoder,
1600                offset + cur_offset,
1601                depth,
1602            )?;
1603
1604            _prev_end_offset = cur_offset + envelope_size;
1605            if 5 > max_ordinal {
1606                return Ok(());
1607            }
1608
1609            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1610            // are envelope_size bytes.
1611            let cur_offset: usize = (5 - 1) * envelope_size;
1612
1613            // Zero reserved fields.
1614            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
1615
1616            // Safety:
1617            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
1618            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
1619            //   envelope_size bytes, there is always sufficient room.
1620            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<fidl_fuchsia_input_common::Axis, 2>, D>(
1621            self.relative_motion_range.as_ref().map(<fidl::encoding::Array<fidl_fuchsia_input_common::Axis, 2> as fidl::encoding::ValueTypeMarker>::borrow),
1622            encoder, offset + cur_offset, depth
1623        )?;
1624
1625            _prev_end_offset = cur_offset + envelope_size;
1626
1627            Ok(())
1628        }
1629    }
1630
1631    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MouseDeviceInfo {
1632        #[inline(always)]
1633        fn new_empty() -> Self {
1634            Self::default()
1635        }
1636
1637        unsafe fn decode(
1638            &mut self,
1639            decoder: &mut fidl::encoding::Decoder<'_, D>,
1640            offset: usize,
1641            mut depth: fidl::encoding::Depth,
1642        ) -> fidl::Result<()> {
1643            decoder.debug_check_bounds::<Self>(offset);
1644            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
1645                None => return Err(fidl::Error::NotNullable),
1646                Some(len) => len,
1647            };
1648            // Calling decoder.out_of_line_offset(0) is not allowed.
1649            if len == 0 {
1650                return Ok(());
1651            };
1652            depth.increment()?;
1653            let envelope_size = 8;
1654            let bytes_len = len * envelope_size;
1655            let offset = decoder.out_of_line_offset(bytes_len)?;
1656            // Decode the envelope for each type.
1657            let mut _next_ordinal_to_read = 0;
1658            let mut next_offset = offset;
1659            let end_offset = offset + bytes_len;
1660            _next_ordinal_to_read += 1;
1661            if next_offset >= end_offset {
1662                return Ok(());
1663            }
1664
1665            // Decode unknown envelopes for gaps in ordinals.
1666            while _next_ordinal_to_read < 1 {
1667                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1668                _next_ordinal_to_read += 1;
1669                next_offset += envelope_size;
1670            }
1671
1672            let next_out_of_line = decoder.next_out_of_line();
1673            let handles_before = decoder.remaining_handles();
1674            if let Some((inlined, num_bytes, num_handles)) =
1675                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1676            {
1677                let member_inline_size =
1678                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1679                if inlined != (member_inline_size <= 4) {
1680                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1681                }
1682                let inner_offset;
1683                let mut inner_depth = depth.clone();
1684                if inlined {
1685                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1686                    inner_offset = next_offset;
1687                } else {
1688                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1689                    inner_depth.increment()?;
1690                }
1691                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
1692                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
1693                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1694                {
1695                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1696                }
1697                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1698                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1699                }
1700            }
1701
1702            next_offset += envelope_size;
1703            _next_ordinal_to_read += 1;
1704            if next_offset >= end_offset {
1705                return Ok(());
1706            }
1707
1708            // Decode unknown envelopes for gaps in ordinals.
1709            while _next_ordinal_to_read < 2 {
1710                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1711                _next_ordinal_to_read += 1;
1712                next_offset += envelope_size;
1713            }
1714
1715            let next_out_of_line = decoder.next_out_of_line();
1716            let handles_before = decoder.remaining_handles();
1717            if let Some((inlined, num_bytes, num_handles)) =
1718                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1719            {
1720                let member_inline_size =
1721                    <fidl_fuchsia_input_common::Axis as fidl::encoding::TypeMarker>::inline_size(
1722                        decoder.context,
1723                    );
1724                if inlined != (member_inline_size <= 4) {
1725                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1726                }
1727                let inner_offset;
1728                let mut inner_depth = depth.clone();
1729                if inlined {
1730                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1731                    inner_offset = next_offset;
1732                } else {
1733                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1734                    inner_depth.increment()?;
1735                }
1736                let val_ref = self
1737                    .scroll_v_range
1738                    .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_input_common::Axis, D));
1739                fidl::decode!(
1740                    fidl_fuchsia_input_common::Axis,
1741                    D,
1742                    val_ref,
1743                    decoder,
1744                    inner_offset,
1745                    inner_depth
1746                )?;
1747                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1748                {
1749                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1750                }
1751                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1752                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1753                }
1754            }
1755
1756            next_offset += envelope_size;
1757            _next_ordinal_to_read += 1;
1758            if next_offset >= end_offset {
1759                return Ok(());
1760            }
1761
1762            // Decode unknown envelopes for gaps in ordinals.
1763            while _next_ordinal_to_read < 3 {
1764                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1765                _next_ordinal_to_read += 1;
1766                next_offset += envelope_size;
1767            }
1768
1769            let next_out_of_line = decoder.next_out_of_line();
1770            let handles_before = decoder.remaining_handles();
1771            if let Some((inlined, num_bytes, num_handles)) =
1772                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1773            {
1774                let member_inline_size =
1775                    <fidl_fuchsia_input_common::Axis as fidl::encoding::TypeMarker>::inline_size(
1776                        decoder.context,
1777                    );
1778                if inlined != (member_inline_size <= 4) {
1779                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1780                }
1781                let inner_offset;
1782                let mut inner_depth = depth.clone();
1783                if inlined {
1784                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1785                    inner_offset = next_offset;
1786                } else {
1787                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1788                    inner_depth.increment()?;
1789                }
1790                let val_ref = self
1791                    .scroll_h_range
1792                    .get_or_insert_with(|| fidl::new_empty!(fidl_fuchsia_input_common::Axis, D));
1793                fidl::decode!(
1794                    fidl_fuchsia_input_common::Axis,
1795                    D,
1796                    val_ref,
1797                    decoder,
1798                    inner_offset,
1799                    inner_depth
1800                )?;
1801                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1802                {
1803                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1804                }
1805                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1806                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1807                }
1808            }
1809
1810            next_offset += envelope_size;
1811            _next_ordinal_to_read += 1;
1812            if next_offset >= end_offset {
1813                return Ok(());
1814            }
1815
1816            // Decode unknown envelopes for gaps in ordinals.
1817            while _next_ordinal_to_read < 4 {
1818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1819                _next_ordinal_to_read += 1;
1820                next_offset += envelope_size;
1821            }
1822
1823            let next_out_of_line = decoder.next_out_of_line();
1824            let handles_before = decoder.remaining_handles();
1825            if let Some((inlined, num_bytes, num_handles)) =
1826                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1827            {
1828                let member_inline_size =
1829                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
1830                        decoder.context,
1831                    );
1832                if inlined != (member_inline_size <= 4) {
1833                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1834                }
1835                let inner_offset;
1836                let mut inner_depth = depth.clone();
1837                if inlined {
1838                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1839                    inner_offset = next_offset;
1840                } else {
1841                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1842                    inner_depth.increment()?;
1843                }
1844                let val_ref = self
1845                    .buttons
1846                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
1847                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
1848                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1849                {
1850                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1851                }
1852                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1853                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1854                }
1855            }
1856
1857            next_offset += envelope_size;
1858            _next_ordinal_to_read += 1;
1859            if next_offset >= end_offset {
1860                return Ok(());
1861            }
1862
1863            // Decode unknown envelopes for gaps in ordinals.
1864            while _next_ordinal_to_read < 5 {
1865                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1866                _next_ordinal_to_read += 1;
1867                next_offset += envelope_size;
1868            }
1869
1870            let next_out_of_line = decoder.next_out_of_line();
1871            let handles_before = decoder.remaining_handles();
1872            if let Some((inlined, num_bytes, num_handles)) =
1873                fidl::encoding::decode_envelope_header(decoder, next_offset)?
1874            {
1875                let member_inline_size = <fidl::encoding::Array<fidl_fuchsia_input_common::Axis, 2> as fidl::encoding::TypeMarker>::inline_size(decoder.context);
1876                if inlined != (member_inline_size <= 4) {
1877                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
1878                }
1879                let inner_offset;
1880                let mut inner_depth = depth.clone();
1881                if inlined {
1882                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
1883                    inner_offset = next_offset;
1884                } else {
1885                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
1886                    inner_depth.increment()?;
1887                }
1888                let val_ref =
1889                self.relative_motion_range.get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<fidl_fuchsia_input_common::Axis, 2>, D));
1890                fidl::decode!(fidl::encoding::Array<fidl_fuchsia_input_common::Axis, 2>, D, val_ref, decoder, inner_offset, inner_depth)?;
1891                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
1892                {
1893                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
1894                }
1895                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
1896                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
1897                }
1898            }
1899
1900            next_offset += envelope_size;
1901
1902            // Decode the remaining unknown envelopes.
1903            while next_offset < end_offset {
1904                _next_ordinal_to_read += 1;
1905                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
1906                next_offset += envelope_size;
1907            }
1908
1909            Ok(())
1910        }
1911    }
1912
1913    impl MousePointerSample {
1914        #[inline(always)]
1915        fn max_ordinal_present(&self) -> u64 {
1916            if let Some(_) = self.is_precision_scroll {
1917                return 9;
1918            }
1919            if let Some(_) = self.scroll_h_physical_pixel {
1920                return 8;
1921            }
1922            if let Some(_) = self.scroll_v_physical_pixel {
1923                return 7;
1924            }
1925            if let Some(_) = self.relative_motion {
1926                return 6;
1927            }
1928            if let Some(_) = self.pressed_buttons {
1929                return 5;
1930            }
1931            if let Some(_) = self.scroll_h {
1932                return 4;
1933            }
1934            if let Some(_) = self.scroll_v {
1935                return 3;
1936            }
1937            if let Some(_) = self.position_in_viewport {
1938                return 2;
1939            }
1940            if let Some(_) = self.device_id {
1941                return 1;
1942            }
1943            0
1944        }
1945    }
1946
1947    impl fidl::encoding::ValueTypeMarker for MousePointerSample {
1948        type Borrowed<'a> = &'a Self;
1949        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
1950            value
1951        }
1952    }
1953
1954    unsafe impl fidl::encoding::TypeMarker for MousePointerSample {
1955        type Owned = Self;
1956
1957        #[inline(always)]
1958        fn inline_align(_context: fidl::encoding::Context) -> usize {
1959            8
1960        }
1961
1962        #[inline(always)]
1963        fn inline_size(_context: fidl::encoding::Context) -> usize {
1964            16
1965        }
1966    }
1967
1968    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<MousePointerSample, D>
1969        for &MousePointerSample
1970    {
1971        unsafe fn encode(
1972            self,
1973            encoder: &mut fidl::encoding::Encoder<'_, D>,
1974            offset: usize,
1975            mut depth: fidl::encoding::Depth,
1976        ) -> fidl::Result<()> {
1977            encoder.debug_check_bounds::<MousePointerSample>(offset);
1978            // Vector header
1979            let max_ordinal: u64 = self.max_ordinal_present();
1980            encoder.write_num(max_ordinal, offset);
1981            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
1982            // Calling encoder.out_of_line_offset(0) is not allowed.
1983            if max_ordinal == 0 {
1984                return Ok(());
1985            }
1986            depth.increment()?;
1987            let envelope_size = 8;
1988            let bytes_len = max_ordinal as usize * envelope_size;
1989            #[allow(unused_variables)]
1990            let offset = encoder.out_of_line_offset(bytes_len);
1991            let mut _prev_end_offset: usize = 0;
1992            if 1 > max_ordinal {
1993                return Ok(());
1994            }
1995
1996            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
1997            // are envelope_size bytes.
1998            let cur_offset: usize = (1 - 1) * envelope_size;
1999
2000            // Zero reserved fields.
2001            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2002
2003            // Safety:
2004            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2005            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2006            //   envelope_size bytes, there is always sufficient room.
2007            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2008                self.device_id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2009                encoder,
2010                offset + cur_offset,
2011                depth,
2012            )?;
2013
2014            _prev_end_offset = cur_offset + envelope_size;
2015            if 2 > max_ordinal {
2016                return Ok(());
2017            }
2018
2019            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2020            // are envelope_size bytes.
2021            let cur_offset: usize = (2 - 1) * envelope_size;
2022
2023            // Zero reserved fields.
2024            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2025
2026            // Safety:
2027            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2028            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2029            //   envelope_size bytes, there is always sufficient room.
2030            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<f32, 2>, D>(
2031                self.position_in_viewport.as_ref().map(
2032                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow,
2033                ),
2034                encoder,
2035                offset + cur_offset,
2036                depth,
2037            )?;
2038
2039            _prev_end_offset = cur_offset + envelope_size;
2040            if 3 > max_ordinal {
2041                return Ok(());
2042            }
2043
2044            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2045            // are envelope_size bytes.
2046            let cur_offset: usize = (3 - 1) * envelope_size;
2047
2048            // Zero reserved fields.
2049            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2050
2051            // Safety:
2052            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2053            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2054            //   envelope_size bytes, there is always sufficient room.
2055            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2056                self.scroll_v.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2057                encoder,
2058                offset + cur_offset,
2059                depth,
2060            )?;
2061
2062            _prev_end_offset = cur_offset + envelope_size;
2063            if 4 > max_ordinal {
2064                return Ok(());
2065            }
2066
2067            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2068            // are envelope_size bytes.
2069            let cur_offset: usize = (4 - 1) * envelope_size;
2070
2071            // Zero reserved fields.
2072            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2073
2074            // Safety:
2075            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2076            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2077            //   envelope_size bytes, there is always sufficient room.
2078            fidl::encoding::encode_in_envelope_optional::<i64, D>(
2079                self.scroll_h.as_ref().map(<i64 as fidl::encoding::ValueTypeMarker>::borrow),
2080                encoder,
2081                offset + cur_offset,
2082                depth,
2083            )?;
2084
2085            _prev_end_offset = cur_offset + envelope_size;
2086            if 5 > max_ordinal {
2087                return Ok(());
2088            }
2089
2090            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2091            // are envelope_size bytes.
2092            let cur_offset: usize = (5 - 1) * envelope_size;
2093
2094            // Zero reserved fields.
2095            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2096
2097            // Safety:
2098            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2099            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2100            //   envelope_size bytes, there is always sufficient room.
2101            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Vector<u8, 32>, D>(
2102                self.pressed_buttons.as_ref().map(
2103                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::ValueTypeMarker>::borrow,
2104                ),
2105                encoder,
2106                offset + cur_offset,
2107                depth,
2108            )?;
2109
2110            _prev_end_offset = cur_offset + envelope_size;
2111            if 6 > max_ordinal {
2112                return Ok(());
2113            }
2114
2115            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2116            // are envelope_size bytes.
2117            let cur_offset: usize = (6 - 1) * envelope_size;
2118
2119            // Zero reserved fields.
2120            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2121
2122            // Safety:
2123            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2124            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2125            //   envelope_size bytes, there is always sufficient room.
2126            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<f32, 2>, D>(
2127                self.relative_motion.as_ref().map(
2128                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow,
2129                ),
2130                encoder,
2131                offset + cur_offset,
2132                depth,
2133            )?;
2134
2135            _prev_end_offset = cur_offset + envelope_size;
2136            if 7 > max_ordinal {
2137                return Ok(());
2138            }
2139
2140            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2141            // are envelope_size bytes.
2142            let cur_offset: usize = (7 - 1) * envelope_size;
2143
2144            // Zero reserved fields.
2145            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2146
2147            // Safety:
2148            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2149            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2150            //   envelope_size bytes, there is always sufficient room.
2151            fidl::encoding::encode_in_envelope_optional::<f64, D>(
2152                self.scroll_v_physical_pixel
2153                    .as_ref()
2154                    .map(<f64 as fidl::encoding::ValueTypeMarker>::borrow),
2155                encoder,
2156                offset + cur_offset,
2157                depth,
2158            )?;
2159
2160            _prev_end_offset = cur_offset + envelope_size;
2161            if 8 > max_ordinal {
2162                return Ok(());
2163            }
2164
2165            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2166            // are envelope_size bytes.
2167            let cur_offset: usize = (8 - 1) * envelope_size;
2168
2169            // Zero reserved fields.
2170            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2171
2172            // Safety:
2173            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2174            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2175            //   envelope_size bytes, there is always sufficient room.
2176            fidl::encoding::encode_in_envelope_optional::<f64, D>(
2177                self.scroll_h_physical_pixel
2178                    .as_ref()
2179                    .map(<f64 as fidl::encoding::ValueTypeMarker>::borrow),
2180                encoder,
2181                offset + cur_offset,
2182                depth,
2183            )?;
2184
2185            _prev_end_offset = cur_offset + envelope_size;
2186            if 9 > max_ordinal {
2187                return Ok(());
2188            }
2189
2190            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2191            // are envelope_size bytes.
2192            let cur_offset: usize = (9 - 1) * envelope_size;
2193
2194            // Zero reserved fields.
2195            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2196
2197            // Safety:
2198            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2199            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2200            //   envelope_size bytes, there is always sufficient room.
2201            fidl::encoding::encode_in_envelope_optional::<bool, D>(
2202                self.is_precision_scroll
2203                    .as_ref()
2204                    .map(<bool as fidl::encoding::ValueTypeMarker>::borrow),
2205                encoder,
2206                offset + cur_offset,
2207                depth,
2208            )?;
2209
2210            _prev_end_offset = cur_offset + envelope_size;
2211
2212            Ok(())
2213        }
2214    }
2215
2216    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for MousePointerSample {
2217        #[inline(always)]
2218        fn new_empty() -> Self {
2219            Self::default()
2220        }
2221
2222        unsafe fn decode(
2223            &mut self,
2224            decoder: &mut fidl::encoding::Decoder<'_, D>,
2225            offset: usize,
2226            mut depth: fidl::encoding::Depth,
2227        ) -> fidl::Result<()> {
2228            decoder.debug_check_bounds::<Self>(offset);
2229            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2230                None => return Err(fidl::Error::NotNullable),
2231                Some(len) => len,
2232            };
2233            // Calling decoder.out_of_line_offset(0) is not allowed.
2234            if len == 0 {
2235                return Ok(());
2236            };
2237            depth.increment()?;
2238            let envelope_size = 8;
2239            let bytes_len = len * envelope_size;
2240            let offset = decoder.out_of_line_offset(bytes_len)?;
2241            // Decode the envelope for each type.
2242            let mut _next_ordinal_to_read = 0;
2243            let mut next_offset = offset;
2244            let end_offset = offset + bytes_len;
2245            _next_ordinal_to_read += 1;
2246            if next_offset >= end_offset {
2247                return Ok(());
2248            }
2249
2250            // Decode unknown envelopes for gaps in ordinals.
2251            while _next_ordinal_to_read < 1 {
2252                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2253                _next_ordinal_to_read += 1;
2254                next_offset += envelope_size;
2255            }
2256
2257            let next_out_of_line = decoder.next_out_of_line();
2258            let handles_before = decoder.remaining_handles();
2259            if let Some((inlined, num_bytes, num_handles)) =
2260                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2261            {
2262                let member_inline_size =
2263                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2264                if inlined != (member_inline_size <= 4) {
2265                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2266                }
2267                let inner_offset;
2268                let mut inner_depth = depth.clone();
2269                if inlined {
2270                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2271                    inner_offset = next_offset;
2272                } else {
2273                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2274                    inner_depth.increment()?;
2275                }
2276                let val_ref = self.device_id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2277                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2278                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2279                {
2280                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2281                }
2282                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2283                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2284                }
2285            }
2286
2287            next_offset += envelope_size;
2288            _next_ordinal_to_read += 1;
2289            if next_offset >= end_offset {
2290                return Ok(());
2291            }
2292
2293            // Decode unknown envelopes for gaps in ordinals.
2294            while _next_ordinal_to_read < 2 {
2295                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2296                _next_ordinal_to_read += 1;
2297                next_offset += envelope_size;
2298            }
2299
2300            let next_out_of_line = decoder.next_out_of_line();
2301            let handles_before = decoder.remaining_handles();
2302            if let Some((inlined, num_bytes, num_handles)) =
2303                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2304            {
2305                let member_inline_size =
2306                    <fidl::encoding::Array<f32, 2> as fidl::encoding::TypeMarker>::inline_size(
2307                        decoder.context,
2308                    );
2309                if inlined != (member_inline_size <= 4) {
2310                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2311                }
2312                let inner_offset;
2313                let mut inner_depth = depth.clone();
2314                if inlined {
2315                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2316                    inner_offset = next_offset;
2317                } else {
2318                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2319                    inner_depth.increment()?;
2320                }
2321                let val_ref = self
2322                    .position_in_viewport
2323                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<f32, 2>, D));
2324                fidl::decode!(fidl::encoding::Array<f32, 2>, D, val_ref, decoder, inner_offset, inner_depth)?;
2325                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2326                {
2327                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2328                }
2329                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2330                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2331                }
2332            }
2333
2334            next_offset += envelope_size;
2335            _next_ordinal_to_read += 1;
2336            if next_offset >= end_offset {
2337                return Ok(());
2338            }
2339
2340            // Decode unknown envelopes for gaps in ordinals.
2341            while _next_ordinal_to_read < 3 {
2342                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2343                _next_ordinal_to_read += 1;
2344                next_offset += envelope_size;
2345            }
2346
2347            let next_out_of_line = decoder.next_out_of_line();
2348            let handles_before = decoder.remaining_handles();
2349            if let Some((inlined, num_bytes, num_handles)) =
2350                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2351            {
2352                let member_inline_size =
2353                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2354                if inlined != (member_inline_size <= 4) {
2355                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2356                }
2357                let inner_offset;
2358                let mut inner_depth = depth.clone();
2359                if inlined {
2360                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2361                    inner_offset = next_offset;
2362                } else {
2363                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2364                    inner_depth.increment()?;
2365                }
2366                let val_ref = self.scroll_v.get_or_insert_with(|| fidl::new_empty!(i64, D));
2367                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2368                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2369                {
2370                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2371                }
2372                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2373                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2374                }
2375            }
2376
2377            next_offset += envelope_size;
2378            _next_ordinal_to_read += 1;
2379            if next_offset >= end_offset {
2380                return Ok(());
2381            }
2382
2383            // Decode unknown envelopes for gaps in ordinals.
2384            while _next_ordinal_to_read < 4 {
2385                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2386                _next_ordinal_to_read += 1;
2387                next_offset += envelope_size;
2388            }
2389
2390            let next_out_of_line = decoder.next_out_of_line();
2391            let handles_before = decoder.remaining_handles();
2392            if let Some((inlined, num_bytes, num_handles)) =
2393                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2394            {
2395                let member_inline_size =
2396                    <i64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2397                if inlined != (member_inline_size <= 4) {
2398                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2399                }
2400                let inner_offset;
2401                let mut inner_depth = depth.clone();
2402                if inlined {
2403                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2404                    inner_offset = next_offset;
2405                } else {
2406                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2407                    inner_depth.increment()?;
2408                }
2409                let val_ref = self.scroll_h.get_or_insert_with(|| fidl::new_empty!(i64, D));
2410                fidl::decode!(i64, D, val_ref, decoder, inner_offset, inner_depth)?;
2411                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2412                {
2413                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2414                }
2415                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2416                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2417                }
2418            }
2419
2420            next_offset += envelope_size;
2421            _next_ordinal_to_read += 1;
2422            if next_offset >= end_offset {
2423                return Ok(());
2424            }
2425
2426            // Decode unknown envelopes for gaps in ordinals.
2427            while _next_ordinal_to_read < 5 {
2428                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2429                _next_ordinal_to_read += 1;
2430                next_offset += envelope_size;
2431            }
2432
2433            let next_out_of_line = decoder.next_out_of_line();
2434            let handles_before = decoder.remaining_handles();
2435            if let Some((inlined, num_bytes, num_handles)) =
2436                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2437            {
2438                let member_inline_size =
2439                    <fidl::encoding::Vector<u8, 32> as fidl::encoding::TypeMarker>::inline_size(
2440                        decoder.context,
2441                    );
2442                if inlined != (member_inline_size <= 4) {
2443                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2444                }
2445                let inner_offset;
2446                let mut inner_depth = depth.clone();
2447                if inlined {
2448                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2449                    inner_offset = next_offset;
2450                } else {
2451                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2452                    inner_depth.increment()?;
2453                }
2454                let val_ref = self
2455                    .pressed_buttons
2456                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Vector<u8, 32>, D));
2457                fidl::decode!(fidl::encoding::Vector<u8, 32>, D, val_ref, decoder, inner_offset, inner_depth)?;
2458                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2459                {
2460                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2461                }
2462                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2463                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2464                }
2465            }
2466
2467            next_offset += envelope_size;
2468            _next_ordinal_to_read += 1;
2469            if next_offset >= end_offset {
2470                return Ok(());
2471            }
2472
2473            // Decode unknown envelopes for gaps in ordinals.
2474            while _next_ordinal_to_read < 6 {
2475                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2476                _next_ordinal_to_read += 1;
2477                next_offset += envelope_size;
2478            }
2479
2480            let next_out_of_line = decoder.next_out_of_line();
2481            let handles_before = decoder.remaining_handles();
2482            if let Some((inlined, num_bytes, num_handles)) =
2483                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2484            {
2485                let member_inline_size =
2486                    <fidl::encoding::Array<f32, 2> as fidl::encoding::TypeMarker>::inline_size(
2487                        decoder.context,
2488                    );
2489                if inlined != (member_inline_size <= 4) {
2490                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2491                }
2492                let inner_offset;
2493                let mut inner_depth = depth.clone();
2494                if inlined {
2495                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2496                    inner_offset = next_offset;
2497                } else {
2498                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2499                    inner_depth.increment()?;
2500                }
2501                let val_ref = self
2502                    .relative_motion
2503                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<f32, 2>, D));
2504                fidl::decode!(fidl::encoding::Array<f32, 2>, D, val_ref, decoder, inner_offset, inner_depth)?;
2505                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2506                {
2507                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2508                }
2509                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2510                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2511                }
2512            }
2513
2514            next_offset += envelope_size;
2515            _next_ordinal_to_read += 1;
2516            if next_offset >= end_offset {
2517                return Ok(());
2518            }
2519
2520            // Decode unknown envelopes for gaps in ordinals.
2521            while _next_ordinal_to_read < 7 {
2522                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2523                _next_ordinal_to_read += 1;
2524                next_offset += envelope_size;
2525            }
2526
2527            let next_out_of_line = decoder.next_out_of_line();
2528            let handles_before = decoder.remaining_handles();
2529            if let Some((inlined, num_bytes, num_handles)) =
2530                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2531            {
2532                let member_inline_size =
2533                    <f64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2534                if inlined != (member_inline_size <= 4) {
2535                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2536                }
2537                let inner_offset;
2538                let mut inner_depth = depth.clone();
2539                if inlined {
2540                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2541                    inner_offset = next_offset;
2542                } else {
2543                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2544                    inner_depth.increment()?;
2545                }
2546                let val_ref =
2547                    self.scroll_v_physical_pixel.get_or_insert_with(|| fidl::new_empty!(f64, D));
2548                fidl::decode!(f64, D, val_ref, decoder, inner_offset, inner_depth)?;
2549                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2550                {
2551                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2552                }
2553                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2554                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2555                }
2556            }
2557
2558            next_offset += envelope_size;
2559            _next_ordinal_to_read += 1;
2560            if next_offset >= end_offset {
2561                return Ok(());
2562            }
2563
2564            // Decode unknown envelopes for gaps in ordinals.
2565            while _next_ordinal_to_read < 8 {
2566                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2567                _next_ordinal_to_read += 1;
2568                next_offset += envelope_size;
2569            }
2570
2571            let next_out_of_line = decoder.next_out_of_line();
2572            let handles_before = decoder.remaining_handles();
2573            if let Some((inlined, num_bytes, num_handles)) =
2574                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2575            {
2576                let member_inline_size =
2577                    <f64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2578                if inlined != (member_inline_size <= 4) {
2579                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2580                }
2581                let inner_offset;
2582                let mut inner_depth = depth.clone();
2583                if inlined {
2584                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2585                    inner_offset = next_offset;
2586                } else {
2587                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2588                    inner_depth.increment()?;
2589                }
2590                let val_ref =
2591                    self.scroll_h_physical_pixel.get_or_insert_with(|| fidl::new_empty!(f64, D));
2592                fidl::decode!(f64, D, val_ref, decoder, inner_offset, inner_depth)?;
2593                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2594                {
2595                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2596                }
2597                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2598                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2599                }
2600            }
2601
2602            next_offset += envelope_size;
2603            _next_ordinal_to_read += 1;
2604            if next_offset >= end_offset {
2605                return Ok(());
2606            }
2607
2608            // Decode unknown envelopes for gaps in ordinals.
2609            while _next_ordinal_to_read < 9 {
2610                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2611                _next_ordinal_to_read += 1;
2612                next_offset += envelope_size;
2613            }
2614
2615            let next_out_of_line = decoder.next_out_of_line();
2616            let handles_before = decoder.remaining_handles();
2617            if let Some((inlined, num_bytes, num_handles)) =
2618                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2619            {
2620                let member_inline_size =
2621                    <bool as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2622                if inlined != (member_inline_size <= 4) {
2623                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2624                }
2625                let inner_offset;
2626                let mut inner_depth = depth.clone();
2627                if inlined {
2628                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2629                    inner_offset = next_offset;
2630                } else {
2631                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2632                    inner_depth.increment()?;
2633                }
2634                let val_ref =
2635                    self.is_precision_scroll.get_or_insert_with(|| fidl::new_empty!(bool, D));
2636                fidl::decode!(bool, D, val_ref, decoder, inner_offset, inner_depth)?;
2637                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2638                {
2639                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2640                }
2641                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2642                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2643                }
2644            }
2645
2646            next_offset += envelope_size;
2647
2648            // Decode the remaining unknown envelopes.
2649            while next_offset < end_offset {
2650                _next_ordinal_to_read += 1;
2651                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2652                next_offset += envelope_size;
2653            }
2654
2655            Ok(())
2656        }
2657    }
2658
2659    impl TouchDeviceInfo {
2660        #[inline(always)]
2661        fn max_ordinal_present(&self) -> u64 {
2662            if let Some(_) = self.id {
2663                return 1;
2664            }
2665            0
2666        }
2667    }
2668
2669    impl fidl::encoding::ValueTypeMarker for TouchDeviceInfo {
2670        type Borrowed<'a> = &'a Self;
2671        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2672            value
2673        }
2674    }
2675
2676    unsafe impl fidl::encoding::TypeMarker for TouchDeviceInfo {
2677        type Owned = Self;
2678
2679        #[inline(always)]
2680        fn inline_align(_context: fidl::encoding::Context) -> usize {
2681            8
2682        }
2683
2684        #[inline(always)]
2685        fn inline_size(_context: fidl::encoding::Context) -> usize {
2686            16
2687        }
2688    }
2689
2690    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TouchDeviceInfo, D>
2691        for &TouchDeviceInfo
2692    {
2693        unsafe fn encode(
2694            self,
2695            encoder: &mut fidl::encoding::Encoder<'_, D>,
2696            offset: usize,
2697            mut depth: fidl::encoding::Depth,
2698        ) -> fidl::Result<()> {
2699            encoder.debug_check_bounds::<TouchDeviceInfo>(offset);
2700            // Vector header
2701            let max_ordinal: u64 = self.max_ordinal_present();
2702            encoder.write_num(max_ordinal, offset);
2703            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2704            // Calling encoder.out_of_line_offset(0) is not allowed.
2705            if max_ordinal == 0 {
2706                return Ok(());
2707            }
2708            depth.increment()?;
2709            let envelope_size = 8;
2710            let bytes_len = max_ordinal as usize * envelope_size;
2711            #[allow(unused_variables)]
2712            let offset = encoder.out_of_line_offset(bytes_len);
2713            let mut _prev_end_offset: usize = 0;
2714            if 1 > max_ordinal {
2715                return Ok(());
2716            }
2717
2718            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2719            // are envelope_size bytes.
2720            let cur_offset: usize = (1 - 1) * envelope_size;
2721
2722            // Zero reserved fields.
2723            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2724
2725            // Safety:
2726            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2727            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2728            //   envelope_size bytes, there is always sufficient room.
2729            fidl::encoding::encode_in_envelope_optional::<u32, D>(
2730                self.id.as_ref().map(<u32 as fidl::encoding::ValueTypeMarker>::borrow),
2731                encoder,
2732                offset + cur_offset,
2733                depth,
2734            )?;
2735
2736            _prev_end_offset = cur_offset + envelope_size;
2737
2738            Ok(())
2739        }
2740    }
2741
2742    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TouchDeviceInfo {
2743        #[inline(always)]
2744        fn new_empty() -> Self {
2745            Self::default()
2746        }
2747
2748        unsafe fn decode(
2749            &mut self,
2750            decoder: &mut fidl::encoding::Decoder<'_, D>,
2751            offset: usize,
2752            mut depth: fidl::encoding::Depth,
2753        ) -> fidl::Result<()> {
2754            decoder.debug_check_bounds::<Self>(offset);
2755            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2756                None => return Err(fidl::Error::NotNullable),
2757                Some(len) => len,
2758            };
2759            // Calling decoder.out_of_line_offset(0) is not allowed.
2760            if len == 0 {
2761                return Ok(());
2762            };
2763            depth.increment()?;
2764            let envelope_size = 8;
2765            let bytes_len = len * envelope_size;
2766            let offset = decoder.out_of_line_offset(bytes_len)?;
2767            // Decode the envelope for each type.
2768            let mut _next_ordinal_to_read = 0;
2769            let mut next_offset = offset;
2770            let end_offset = offset + bytes_len;
2771            _next_ordinal_to_read += 1;
2772            if next_offset >= end_offset {
2773                return Ok(());
2774            }
2775
2776            // Decode unknown envelopes for gaps in ordinals.
2777            while _next_ordinal_to_read < 1 {
2778                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2779                _next_ordinal_to_read += 1;
2780                next_offset += envelope_size;
2781            }
2782
2783            let next_out_of_line = decoder.next_out_of_line();
2784            let handles_before = decoder.remaining_handles();
2785            if let Some((inlined, num_bytes, num_handles)) =
2786                fidl::encoding::decode_envelope_header(decoder, next_offset)?
2787            {
2788                let member_inline_size =
2789                    <u32 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
2790                if inlined != (member_inline_size <= 4) {
2791                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
2792                }
2793                let inner_offset;
2794                let mut inner_depth = depth.clone();
2795                if inlined {
2796                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
2797                    inner_offset = next_offset;
2798                } else {
2799                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
2800                    inner_depth.increment()?;
2801                }
2802                let val_ref = self.id.get_or_insert_with(|| fidl::new_empty!(u32, D));
2803                fidl::decode!(u32, D, val_ref, decoder, inner_offset, inner_depth)?;
2804                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
2805                {
2806                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
2807                }
2808                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
2809                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
2810                }
2811            }
2812
2813            next_offset += envelope_size;
2814
2815            // Decode the remaining unknown envelopes.
2816            while next_offset < end_offset {
2817                _next_ordinal_to_read += 1;
2818                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
2819                next_offset += envelope_size;
2820            }
2821
2822            Ok(())
2823        }
2824    }
2825
2826    impl TouchPointerSample {
2827        #[inline(always)]
2828        fn max_ordinal_present(&self) -> u64 {
2829            if let Some(_) = self.position_in_viewport {
2830                return 3;
2831            }
2832            if let Some(_) = self.phase {
2833                return 2;
2834            }
2835            if let Some(_) = self.interaction {
2836                return 1;
2837            }
2838            0
2839        }
2840    }
2841
2842    impl fidl::encoding::ValueTypeMarker for TouchPointerSample {
2843        type Borrowed<'a> = &'a Self;
2844        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
2845            value
2846        }
2847    }
2848
2849    unsafe impl fidl::encoding::TypeMarker for TouchPointerSample {
2850        type Owned = Self;
2851
2852        #[inline(always)]
2853        fn inline_align(_context: fidl::encoding::Context) -> usize {
2854            8
2855        }
2856
2857        #[inline(always)]
2858        fn inline_size(_context: fidl::encoding::Context) -> usize {
2859            16
2860        }
2861    }
2862
2863    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TouchPointerSample, D>
2864        for &TouchPointerSample
2865    {
2866        unsafe fn encode(
2867            self,
2868            encoder: &mut fidl::encoding::Encoder<'_, D>,
2869            offset: usize,
2870            mut depth: fidl::encoding::Depth,
2871        ) -> fidl::Result<()> {
2872            encoder.debug_check_bounds::<TouchPointerSample>(offset);
2873            // Vector header
2874            let max_ordinal: u64 = self.max_ordinal_present();
2875            encoder.write_num(max_ordinal, offset);
2876            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
2877            // Calling encoder.out_of_line_offset(0) is not allowed.
2878            if max_ordinal == 0 {
2879                return Ok(());
2880            }
2881            depth.increment()?;
2882            let envelope_size = 8;
2883            let bytes_len = max_ordinal as usize * envelope_size;
2884            #[allow(unused_variables)]
2885            let offset = encoder.out_of_line_offset(bytes_len);
2886            let mut _prev_end_offset: usize = 0;
2887            if 1 > max_ordinal {
2888                return Ok(());
2889            }
2890
2891            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2892            // are envelope_size bytes.
2893            let cur_offset: usize = (1 - 1) * envelope_size;
2894
2895            // Zero reserved fields.
2896            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2897
2898            // Safety:
2899            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2900            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2901            //   envelope_size bytes, there is always sufficient room.
2902            fidl::encoding::encode_in_envelope_optional::<TouchInteractionId, D>(
2903                self.interaction
2904                    .as_ref()
2905                    .map(<TouchInteractionId as fidl::encoding::ValueTypeMarker>::borrow),
2906                encoder,
2907                offset + cur_offset,
2908                depth,
2909            )?;
2910
2911            _prev_end_offset = cur_offset + envelope_size;
2912            if 2 > max_ordinal {
2913                return Ok(());
2914            }
2915
2916            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2917            // are envelope_size bytes.
2918            let cur_offset: usize = (2 - 1) * envelope_size;
2919
2920            // Zero reserved fields.
2921            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2922
2923            // Safety:
2924            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2925            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2926            //   envelope_size bytes, there is always sufficient room.
2927            fidl::encoding::encode_in_envelope_optional::<EventPhase, D>(
2928                self.phase.as_ref().map(<EventPhase as fidl::encoding::ValueTypeMarker>::borrow),
2929                encoder,
2930                offset + cur_offset,
2931                depth,
2932            )?;
2933
2934            _prev_end_offset = cur_offset + envelope_size;
2935            if 3 > max_ordinal {
2936                return Ok(());
2937            }
2938
2939            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
2940            // are envelope_size bytes.
2941            let cur_offset: usize = (3 - 1) * envelope_size;
2942
2943            // Zero reserved fields.
2944            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
2945
2946            // Safety:
2947            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
2948            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
2949            //   envelope_size bytes, there is always sufficient room.
2950            fidl::encoding::encode_in_envelope_optional::<fidl::encoding::Array<f32, 2>, D>(
2951                self.position_in_viewport.as_ref().map(
2952                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow,
2953                ),
2954                encoder,
2955                offset + cur_offset,
2956                depth,
2957            )?;
2958
2959            _prev_end_offset = cur_offset + envelope_size;
2960
2961            Ok(())
2962        }
2963    }
2964
2965    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TouchPointerSample {
2966        #[inline(always)]
2967        fn new_empty() -> Self {
2968            Self::default()
2969        }
2970
2971        unsafe fn decode(
2972            &mut self,
2973            decoder: &mut fidl::encoding::Decoder<'_, D>,
2974            offset: usize,
2975            mut depth: fidl::encoding::Depth,
2976        ) -> fidl::Result<()> {
2977            decoder.debug_check_bounds::<Self>(offset);
2978            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
2979                None => return Err(fidl::Error::NotNullable),
2980                Some(len) => len,
2981            };
2982            // Calling decoder.out_of_line_offset(0) is not allowed.
2983            if len == 0 {
2984                return Ok(());
2985            };
2986            depth.increment()?;
2987            let envelope_size = 8;
2988            let bytes_len = len * envelope_size;
2989            let offset = decoder.out_of_line_offset(bytes_len)?;
2990            // Decode the envelope for each type.
2991            let mut _next_ordinal_to_read = 0;
2992            let mut next_offset = offset;
2993            let end_offset = offset + bytes_len;
2994            _next_ordinal_to_read += 1;
2995            if next_offset >= end_offset {
2996                return Ok(());
2997            }
2998
2999            // Decode unknown envelopes for gaps in ordinals.
3000            while _next_ordinal_to_read < 1 {
3001                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3002                _next_ordinal_to_read += 1;
3003                next_offset += envelope_size;
3004            }
3005
3006            let next_out_of_line = decoder.next_out_of_line();
3007            let handles_before = decoder.remaining_handles();
3008            if let Some((inlined, num_bytes, num_handles)) =
3009                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3010            {
3011                let member_inline_size =
3012                    <TouchInteractionId as fidl::encoding::TypeMarker>::inline_size(
3013                        decoder.context,
3014                    );
3015                if inlined != (member_inline_size <= 4) {
3016                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3017                }
3018                let inner_offset;
3019                let mut inner_depth = depth.clone();
3020                if inlined {
3021                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3022                    inner_offset = next_offset;
3023                } else {
3024                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3025                    inner_depth.increment()?;
3026                }
3027                let val_ref =
3028                    self.interaction.get_or_insert_with(|| fidl::new_empty!(TouchInteractionId, D));
3029                fidl::decode!(TouchInteractionId, D, val_ref, decoder, inner_offset, inner_depth)?;
3030                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3031                {
3032                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3033                }
3034                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3035                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3036                }
3037            }
3038
3039            next_offset += envelope_size;
3040            _next_ordinal_to_read += 1;
3041            if next_offset >= end_offset {
3042                return Ok(());
3043            }
3044
3045            // Decode unknown envelopes for gaps in ordinals.
3046            while _next_ordinal_to_read < 2 {
3047                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3048                _next_ordinal_to_read += 1;
3049                next_offset += envelope_size;
3050            }
3051
3052            let next_out_of_line = decoder.next_out_of_line();
3053            let handles_before = decoder.remaining_handles();
3054            if let Some((inlined, num_bytes, num_handles)) =
3055                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3056            {
3057                let member_inline_size =
3058                    <EventPhase as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3059                if inlined != (member_inline_size <= 4) {
3060                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3061                }
3062                let inner_offset;
3063                let mut inner_depth = depth.clone();
3064                if inlined {
3065                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3066                    inner_offset = next_offset;
3067                } else {
3068                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3069                    inner_depth.increment()?;
3070                }
3071                let val_ref = self.phase.get_or_insert_with(|| fidl::new_empty!(EventPhase, D));
3072                fidl::decode!(EventPhase, D, val_ref, decoder, inner_offset, inner_depth)?;
3073                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3074                {
3075                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3076                }
3077                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3078                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3079                }
3080            }
3081
3082            next_offset += envelope_size;
3083            _next_ordinal_to_read += 1;
3084            if next_offset >= end_offset {
3085                return Ok(());
3086            }
3087
3088            // Decode unknown envelopes for gaps in ordinals.
3089            while _next_ordinal_to_read < 3 {
3090                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3091                _next_ordinal_to_read += 1;
3092                next_offset += envelope_size;
3093            }
3094
3095            let next_out_of_line = decoder.next_out_of_line();
3096            let handles_before = decoder.remaining_handles();
3097            if let Some((inlined, num_bytes, num_handles)) =
3098                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3099            {
3100                let member_inline_size =
3101                    <fidl::encoding::Array<f32, 2> as fidl::encoding::TypeMarker>::inline_size(
3102                        decoder.context,
3103                    );
3104                if inlined != (member_inline_size <= 4) {
3105                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3106                }
3107                let inner_offset;
3108                let mut inner_depth = depth.clone();
3109                if inlined {
3110                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3111                    inner_offset = next_offset;
3112                } else {
3113                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3114                    inner_depth.increment()?;
3115                }
3116                let val_ref = self
3117                    .position_in_viewport
3118                    .get_or_insert_with(|| fidl::new_empty!(fidl::encoding::Array<f32, 2>, D));
3119                fidl::decode!(fidl::encoding::Array<f32, 2>, D, val_ref, decoder, inner_offset, inner_depth)?;
3120                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3121                {
3122                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3123                }
3124                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3125                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3126                }
3127            }
3128
3129            next_offset += envelope_size;
3130
3131            // Decode the remaining unknown envelopes.
3132            while next_offset < end_offset {
3133                _next_ordinal_to_read += 1;
3134                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3135                next_offset += envelope_size;
3136            }
3137
3138            Ok(())
3139        }
3140    }
3141
3142    impl TouchResponse {
3143        #[inline(always)]
3144        fn max_ordinal_present(&self) -> u64 {
3145            if let Some(_) = self.trace_flow_id {
3146                return 2;
3147            }
3148            if let Some(_) = self.response_type {
3149                return 1;
3150            }
3151            0
3152        }
3153    }
3154
3155    impl fidl::encoding::ValueTypeMarker for TouchResponse {
3156        type Borrowed<'a> = &'a Self;
3157        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
3158            value
3159        }
3160    }
3161
3162    unsafe impl fidl::encoding::TypeMarker for TouchResponse {
3163        type Owned = Self;
3164
3165        #[inline(always)]
3166        fn inline_align(_context: fidl::encoding::Context) -> usize {
3167            8
3168        }
3169
3170        #[inline(always)]
3171        fn inline_size(_context: fidl::encoding::Context) -> usize {
3172            16
3173        }
3174    }
3175
3176    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<TouchResponse, D>
3177        for &TouchResponse
3178    {
3179        unsafe fn encode(
3180            self,
3181            encoder: &mut fidl::encoding::Encoder<'_, D>,
3182            offset: usize,
3183            mut depth: fidl::encoding::Depth,
3184        ) -> fidl::Result<()> {
3185            encoder.debug_check_bounds::<TouchResponse>(offset);
3186            // Vector header
3187            let max_ordinal: u64 = self.max_ordinal_present();
3188            encoder.write_num(max_ordinal, offset);
3189            encoder.write_num(fidl::encoding::ALLOC_PRESENT_U64, offset + 8);
3190            // Calling encoder.out_of_line_offset(0) is not allowed.
3191            if max_ordinal == 0 {
3192                return Ok(());
3193            }
3194            depth.increment()?;
3195            let envelope_size = 8;
3196            let bytes_len = max_ordinal as usize * envelope_size;
3197            #[allow(unused_variables)]
3198            let offset = encoder.out_of_line_offset(bytes_len);
3199            let mut _prev_end_offset: usize = 0;
3200            if 1 > max_ordinal {
3201                return Ok(());
3202            }
3203
3204            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3205            // are envelope_size bytes.
3206            let cur_offset: usize = (1 - 1) * envelope_size;
3207
3208            // Zero reserved fields.
3209            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3210
3211            // Safety:
3212            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3213            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3214            //   envelope_size bytes, there is always sufficient room.
3215            fidl::encoding::encode_in_envelope_optional::<TouchResponseType, D>(
3216                self.response_type
3217                    .as_ref()
3218                    .map(<TouchResponseType as fidl::encoding::ValueTypeMarker>::borrow),
3219                encoder,
3220                offset + cur_offset,
3221                depth,
3222            )?;
3223
3224            _prev_end_offset = cur_offset + envelope_size;
3225            if 2 > max_ordinal {
3226                return Ok(());
3227            }
3228
3229            // Write at offset+(ordinal-1)*envelope_size, since ordinals are one-based and envelopes
3230            // are envelope_size bytes.
3231            let cur_offset: usize = (2 - 1) * envelope_size;
3232
3233            // Zero reserved fields.
3234            encoder.padding(offset + _prev_end_offset, cur_offset - _prev_end_offset);
3235
3236            // Safety:
3237            // - bytes_len is calculated to fit envelope_size*max(member.ordinal).
3238            // - Since cur_offset is envelope_size*(member.ordinal - 1) and the envelope takes
3239            //   envelope_size bytes, there is always sufficient room.
3240            fidl::encoding::encode_in_envelope_optional::<u64, D>(
3241                self.trace_flow_id.as_ref().map(<u64 as fidl::encoding::ValueTypeMarker>::borrow),
3242                encoder,
3243                offset + cur_offset,
3244                depth,
3245            )?;
3246
3247            _prev_end_offset = cur_offset + envelope_size;
3248
3249            Ok(())
3250        }
3251    }
3252
3253    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for TouchResponse {
3254        #[inline(always)]
3255        fn new_empty() -> Self {
3256            Self::default()
3257        }
3258
3259        unsafe fn decode(
3260            &mut self,
3261            decoder: &mut fidl::encoding::Decoder<'_, D>,
3262            offset: usize,
3263            mut depth: fidl::encoding::Depth,
3264        ) -> fidl::Result<()> {
3265            decoder.debug_check_bounds::<Self>(offset);
3266            let len = match fidl::encoding::decode_vector_header(decoder, offset)? {
3267                None => return Err(fidl::Error::NotNullable),
3268                Some(len) => len,
3269            };
3270            // Calling decoder.out_of_line_offset(0) is not allowed.
3271            if len == 0 {
3272                return Ok(());
3273            };
3274            depth.increment()?;
3275            let envelope_size = 8;
3276            let bytes_len = len * envelope_size;
3277            let offset = decoder.out_of_line_offset(bytes_len)?;
3278            // Decode the envelope for each type.
3279            let mut _next_ordinal_to_read = 0;
3280            let mut next_offset = offset;
3281            let end_offset = offset + bytes_len;
3282            _next_ordinal_to_read += 1;
3283            if next_offset >= end_offset {
3284                return Ok(());
3285            }
3286
3287            // Decode unknown envelopes for gaps in ordinals.
3288            while _next_ordinal_to_read < 1 {
3289                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3290                _next_ordinal_to_read += 1;
3291                next_offset += envelope_size;
3292            }
3293
3294            let next_out_of_line = decoder.next_out_of_line();
3295            let handles_before = decoder.remaining_handles();
3296            if let Some((inlined, num_bytes, num_handles)) =
3297                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3298            {
3299                let member_inline_size =
3300                    <TouchResponseType as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3301                if inlined != (member_inline_size <= 4) {
3302                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3303                }
3304                let inner_offset;
3305                let mut inner_depth = depth.clone();
3306                if inlined {
3307                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3308                    inner_offset = next_offset;
3309                } else {
3310                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3311                    inner_depth.increment()?;
3312                }
3313                let val_ref = self
3314                    .response_type
3315                    .get_or_insert_with(|| fidl::new_empty!(TouchResponseType, D));
3316                fidl::decode!(TouchResponseType, D, val_ref, decoder, inner_offset, inner_depth)?;
3317                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3318                {
3319                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3320                }
3321                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3322                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3323                }
3324            }
3325
3326            next_offset += envelope_size;
3327            _next_ordinal_to_read += 1;
3328            if next_offset >= end_offset {
3329                return Ok(());
3330            }
3331
3332            // Decode unknown envelopes for gaps in ordinals.
3333            while _next_ordinal_to_read < 2 {
3334                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3335                _next_ordinal_to_read += 1;
3336                next_offset += envelope_size;
3337            }
3338
3339            let next_out_of_line = decoder.next_out_of_line();
3340            let handles_before = decoder.remaining_handles();
3341            if let Some((inlined, num_bytes, num_handles)) =
3342                fidl::encoding::decode_envelope_header(decoder, next_offset)?
3343            {
3344                let member_inline_size =
3345                    <u64 as fidl::encoding::TypeMarker>::inline_size(decoder.context);
3346                if inlined != (member_inline_size <= 4) {
3347                    return Err(fidl::Error::InvalidInlineBitInEnvelope);
3348                }
3349                let inner_offset;
3350                let mut inner_depth = depth.clone();
3351                if inlined {
3352                    decoder.check_inline_envelope_padding(next_offset, member_inline_size)?;
3353                    inner_offset = next_offset;
3354                } else {
3355                    inner_offset = decoder.out_of_line_offset(member_inline_size)?;
3356                    inner_depth.increment()?;
3357                }
3358                let val_ref = self.trace_flow_id.get_or_insert_with(|| fidl::new_empty!(u64, D));
3359                fidl::decode!(u64, D, val_ref, decoder, inner_offset, inner_depth)?;
3360                if !inlined && decoder.next_out_of_line() != next_out_of_line + (num_bytes as usize)
3361                {
3362                    return Err(fidl::Error::InvalidNumBytesInEnvelope);
3363                }
3364                if handles_before != decoder.remaining_handles() + (num_handles as usize) {
3365                    return Err(fidl::Error::InvalidNumHandlesInEnvelope);
3366                }
3367            }
3368
3369            next_offset += envelope_size;
3370
3371            // Decode the remaining unknown envelopes.
3372            while next_offset < end_offset {
3373                _next_ordinal_to_read += 1;
3374                fidl::encoding::decode_unknown_envelope(decoder, next_offset, depth)?;
3375                next_offset += envelope_size;
3376            }
3377
3378            Ok(())
3379        }
3380    }
3381}