fidl_fuchsia_ui_pointer_augment__common/
fidl_fuchsia_ui_pointer_augment__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 two-dimensional point.
12/// - The values are placed in (x, y) order.
13pub type Point2 = [f32; 2];
14
15/// Abnormal conditions for augmentation protocols.
16#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
17#[repr(u32)]
18pub enum ErrorReason {
19    /// The augmentation attempt was denied.
20    Denied = 1,
21}
22
23impl ErrorReason {
24    #[inline]
25    pub fn from_primitive(prim: u32) -> Option<Self> {
26        match prim {
27            1 => Some(Self::Denied),
28            _ => None,
29        }
30    }
31
32    #[inline]
33    pub const fn into_primitive(self) -> u32 {
34        self as u32
35    }
36}
37
38/// An augmentation of [`fuchsia.ui.pointer.TouchEvent`] to provide local-hit
39/// data for a touch event.
40///
41/// For a given touch event `e`, consider the ordered list of intersections with
42/// graphical content: its "hits" from top to bottom. The "local hit" of `e` is
43/// the location of `e` in the coordinate system of the view in which `e` has
44/// the top-most intersection.
45#[derive(Clone, Debug, PartialEq)]
46pub struct TouchEventWithLocalHit {
47    /// Identical usage to [`fuchsia.ui.pointer.TouchEvent`].
48    pub touch_event: fidl_fuchsia_ui_pointer__common::TouchEvent,
49    /// Augmented data for `touch_event` that describes the top-most client
50    /// KOID that it hits.
51    pub local_viewref_koid: u64,
52    /// Augmented data for `touch_event` that describes its local coordinates in
53    /// the coordinate space for `local_viewref_koid`.
54    pub local_point: [f32; 2],
55}
56
57impl fidl::Persistable for TouchEventWithLocalHit {}
58
59#[derive(Clone, Debug, PartialEq)]
60pub struct TouchSourceWithLocalHitUpdateResponseRequest {
61    pub interaction: fidl_fuchsia_ui_pointer__common::TouchInteractionId,
62    pub response: fidl_fuchsia_ui_pointer__common::TouchResponse,
63}
64
65impl fidl::Persistable for TouchSourceWithLocalHitUpdateResponseRequest {}
66
67#[derive(Clone, Debug, PartialEq)]
68pub struct TouchSourceWithLocalHitWatchRequest {
69    pub responses: Vec<fidl_fuchsia_ui_pointer__common::TouchResponse>,
70}
71
72impl fidl::Persistable for TouchSourceWithLocalHitWatchRequest {}
73
74#[derive(Clone, Debug, PartialEq)]
75pub struct TouchSourceWithLocalHitWatchResponse {
76    pub events: Vec<TouchEventWithLocalHit>,
77}
78
79impl fidl::Persistable for TouchSourceWithLocalHitWatchResponse {}
80
81pub mod local_hit_ordinals {
82    pub const UPGRADE: u64 = 0x1ec0c985bbfe4e8c;
83}
84
85pub mod touch_source_with_local_hit_ordinals {
86    pub const WATCH: u64 = 0x4eb5acc052ada449;
87    pub const UPDATE_RESPONSE: u64 = 0x1f2fde6734e7da1;
88}
89
90mod internal {
91    use super::*;
92    unsafe impl fidl::encoding::TypeMarker for ErrorReason {
93        type Owned = Self;
94
95        #[inline(always)]
96        fn inline_align(_context: fidl::encoding::Context) -> usize {
97            std::mem::align_of::<u32>()
98        }
99
100        #[inline(always)]
101        fn inline_size(_context: fidl::encoding::Context) -> usize {
102            std::mem::size_of::<u32>()
103        }
104
105        #[inline(always)]
106        fn encode_is_copy() -> bool {
107            true
108        }
109
110        #[inline(always)]
111        fn decode_is_copy() -> bool {
112            false
113        }
114    }
115
116    impl fidl::encoding::ValueTypeMarker for ErrorReason {
117        type Borrowed<'a> = Self;
118        #[inline(always)]
119        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
120            *value
121        }
122    }
123
124    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ErrorReason {
125        #[inline]
126        unsafe fn encode(
127            self,
128            encoder: &mut fidl::encoding::Encoder<'_, D>,
129            offset: usize,
130            _depth: fidl::encoding::Depth,
131        ) -> fidl::Result<()> {
132            encoder.debug_check_bounds::<Self>(offset);
133            encoder.write_num(self.into_primitive(), offset);
134            Ok(())
135        }
136    }
137
138    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ErrorReason {
139        #[inline(always)]
140        fn new_empty() -> Self {
141            Self::Denied
142        }
143
144        #[inline]
145        unsafe fn decode(
146            &mut self,
147            decoder: &mut fidl::encoding::Decoder<'_, D>,
148            offset: usize,
149            _depth: fidl::encoding::Depth,
150        ) -> fidl::Result<()> {
151            decoder.debug_check_bounds::<Self>(offset);
152            let prim = decoder.read_num::<u32>(offset);
153
154            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
155            Ok(())
156        }
157    }
158
159    impl fidl::encoding::ValueTypeMarker for TouchEventWithLocalHit {
160        type Borrowed<'a> = &'a Self;
161        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
162            value
163        }
164    }
165
166    unsafe impl fidl::encoding::TypeMarker for TouchEventWithLocalHit {
167        type Owned = Self;
168
169        #[inline(always)]
170        fn inline_align(_context: fidl::encoding::Context) -> usize {
171            8
172        }
173
174        #[inline(always)]
175        fn inline_size(_context: fidl::encoding::Context) -> usize {
176            32
177        }
178    }
179
180    unsafe impl<D: fidl::encoding::ResourceDialect>
181        fidl::encoding::Encode<TouchEventWithLocalHit, D> for &TouchEventWithLocalHit
182    {
183        #[inline]
184        unsafe fn encode(
185            self,
186            encoder: &mut fidl::encoding::Encoder<'_, D>,
187            offset: usize,
188            _depth: fidl::encoding::Depth,
189        ) -> fidl::Result<()> {
190            encoder.debug_check_bounds::<TouchEventWithLocalHit>(offset);
191            // Delegate to tuple encoding.
192            fidl::encoding::Encode::<TouchEventWithLocalHit, D>::encode(
193                (
194                    <fidl_fuchsia_ui_pointer__common::TouchEvent as fidl::encoding::ValueTypeMarker>::borrow(&self.touch_event),
195                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.local_viewref_koid),
196                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow(&self.local_point),
197                ),
198                encoder, offset, _depth
199            )
200        }
201    }
202    unsafe impl<
203            D: fidl::encoding::ResourceDialect,
204            T0: fidl::encoding::Encode<fidl_fuchsia_ui_pointer__common::TouchEvent, D>,
205            T1: fidl::encoding::Encode<u64, D>,
206            T2: fidl::encoding::Encode<fidl::encoding::Array<f32, 2>, D>,
207        > fidl::encoding::Encode<TouchEventWithLocalHit, D> for (T0, T1, T2)
208    {
209        #[inline]
210        unsafe fn encode(
211            self,
212            encoder: &mut fidl::encoding::Encoder<'_, D>,
213            offset: usize,
214            depth: fidl::encoding::Depth,
215        ) -> fidl::Result<()> {
216            encoder.debug_check_bounds::<TouchEventWithLocalHit>(offset);
217            // Zero out padding regions. There's no need to apply masks
218            // because the unmasked parts will be overwritten by fields.
219            // Write the fields.
220            self.0.encode(encoder, offset + 0, depth)?;
221            self.1.encode(encoder, offset + 16, depth)?;
222            self.2.encode(encoder, offset + 24, depth)?;
223            Ok(())
224        }
225    }
226
227    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
228        for TouchEventWithLocalHit
229    {
230        #[inline(always)]
231        fn new_empty() -> Self {
232            Self {
233                touch_event: fidl::new_empty!(fidl_fuchsia_ui_pointer__common::TouchEvent, D),
234                local_viewref_koid: fidl::new_empty!(u64, D),
235                local_point: fidl::new_empty!(fidl::encoding::Array<f32, 2>, D),
236            }
237        }
238
239        #[inline]
240        unsafe fn decode(
241            &mut self,
242            decoder: &mut fidl::encoding::Decoder<'_, D>,
243            offset: usize,
244            _depth: fidl::encoding::Depth,
245        ) -> fidl::Result<()> {
246            decoder.debug_check_bounds::<Self>(offset);
247            // Verify that padding bytes are zero.
248            fidl::decode!(
249                fidl_fuchsia_ui_pointer__common::TouchEvent,
250                D,
251                &mut self.touch_event,
252                decoder,
253                offset + 0,
254                _depth
255            )?;
256            fidl::decode!(u64, D, &mut self.local_viewref_koid, decoder, offset + 16, _depth)?;
257            fidl::decode!(fidl::encoding::Array<f32, 2>, D, &mut self.local_point, decoder, offset + 24, _depth)?;
258            Ok(())
259        }
260    }
261
262    impl fidl::encoding::ValueTypeMarker for TouchSourceWithLocalHitUpdateResponseRequest {
263        type Borrowed<'a> = &'a Self;
264        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
265            value
266        }
267    }
268
269    unsafe impl fidl::encoding::TypeMarker for TouchSourceWithLocalHitUpdateResponseRequest {
270        type Owned = Self;
271
272        #[inline(always)]
273        fn inline_align(_context: fidl::encoding::Context) -> usize {
274            8
275        }
276
277        #[inline(always)]
278        fn inline_size(_context: fidl::encoding::Context) -> usize {
279            32
280        }
281    }
282
283    unsafe impl<D: fidl::encoding::ResourceDialect>
284        fidl::encoding::Encode<TouchSourceWithLocalHitUpdateResponseRequest, D>
285        for &TouchSourceWithLocalHitUpdateResponseRequest
286    {
287        #[inline]
288        unsafe fn encode(
289            self,
290            encoder: &mut fidl::encoding::Encoder<'_, D>,
291            offset: usize,
292            _depth: fidl::encoding::Depth,
293        ) -> fidl::Result<()> {
294            encoder.debug_check_bounds::<TouchSourceWithLocalHitUpdateResponseRequest>(offset);
295            // Delegate to tuple encoding.
296            fidl::encoding::Encode::<TouchSourceWithLocalHitUpdateResponseRequest, D>::encode(
297                (
298                    <fidl_fuchsia_ui_pointer__common::TouchInteractionId as fidl::encoding::ValueTypeMarker>::borrow(&self.interaction),
299                    <fidl_fuchsia_ui_pointer__common::TouchResponse as fidl::encoding::ValueTypeMarker>::borrow(&self.response),
300                ),
301                encoder, offset, _depth
302            )
303        }
304    }
305    unsafe impl<
306            D: fidl::encoding::ResourceDialect,
307            T0: fidl::encoding::Encode<fidl_fuchsia_ui_pointer__common::TouchInteractionId, D>,
308            T1: fidl::encoding::Encode<fidl_fuchsia_ui_pointer__common::TouchResponse, D>,
309        > fidl::encoding::Encode<TouchSourceWithLocalHitUpdateResponseRequest, D> for (T0, T1)
310    {
311        #[inline]
312        unsafe fn encode(
313            self,
314            encoder: &mut fidl::encoding::Encoder<'_, D>,
315            offset: usize,
316            depth: fidl::encoding::Depth,
317        ) -> fidl::Result<()> {
318            encoder.debug_check_bounds::<TouchSourceWithLocalHitUpdateResponseRequest>(offset);
319            // Zero out padding regions. There's no need to apply masks
320            // because the unmasked parts will be overwritten by fields.
321            unsafe {
322                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
323                (ptr as *mut u64).write_unaligned(0);
324            }
325            // Write the fields.
326            self.0.encode(encoder, offset + 0, depth)?;
327            self.1.encode(encoder, offset + 16, depth)?;
328            Ok(())
329        }
330    }
331
332    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
333        for TouchSourceWithLocalHitUpdateResponseRequest
334    {
335        #[inline(always)]
336        fn new_empty() -> Self {
337            Self {
338                interaction: fidl::new_empty!(
339                    fidl_fuchsia_ui_pointer__common::TouchInteractionId,
340                    D
341                ),
342                response: fidl::new_empty!(fidl_fuchsia_ui_pointer__common::TouchResponse, D),
343            }
344        }
345
346        #[inline]
347        unsafe fn decode(
348            &mut self,
349            decoder: &mut fidl::encoding::Decoder<'_, D>,
350            offset: usize,
351            _depth: fidl::encoding::Depth,
352        ) -> fidl::Result<()> {
353            decoder.debug_check_bounds::<Self>(offset);
354            // Verify that padding bytes are zero.
355            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
356            let padval = unsafe { (ptr as *const u64).read_unaligned() };
357            let mask = 0xffffffff00000000u64;
358            let maskedval = padval & mask;
359            if maskedval != 0 {
360                return Err(fidl::Error::NonZeroPadding {
361                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
362                });
363            }
364            fidl::decode!(
365                fidl_fuchsia_ui_pointer__common::TouchInteractionId,
366                D,
367                &mut self.interaction,
368                decoder,
369                offset + 0,
370                _depth
371            )?;
372            fidl::decode!(
373                fidl_fuchsia_ui_pointer__common::TouchResponse,
374                D,
375                &mut self.response,
376                decoder,
377                offset + 16,
378                _depth
379            )?;
380            Ok(())
381        }
382    }
383
384    impl fidl::encoding::ValueTypeMarker for TouchSourceWithLocalHitWatchRequest {
385        type Borrowed<'a> = &'a Self;
386        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
387            value
388        }
389    }
390
391    unsafe impl fidl::encoding::TypeMarker for TouchSourceWithLocalHitWatchRequest {
392        type Owned = Self;
393
394        #[inline(always)]
395        fn inline_align(_context: fidl::encoding::Context) -> usize {
396            8
397        }
398
399        #[inline(always)]
400        fn inline_size(_context: fidl::encoding::Context) -> usize {
401            16
402        }
403    }
404
405    unsafe impl<D: fidl::encoding::ResourceDialect>
406        fidl::encoding::Encode<TouchSourceWithLocalHitWatchRequest, D>
407        for &TouchSourceWithLocalHitWatchRequest
408    {
409        #[inline]
410        unsafe fn encode(
411            self,
412            encoder: &mut fidl::encoding::Encoder<'_, D>,
413            offset: usize,
414            _depth: fidl::encoding::Depth,
415        ) -> fidl::Result<()> {
416            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchRequest>(offset);
417            // Delegate to tuple encoding.
418            fidl::encoding::Encode::<TouchSourceWithLocalHitWatchRequest, D>::encode(
419                (
420                    <fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.responses),
421                ),
422                encoder, offset, _depth
423            )
424        }
425    }
426    unsafe impl<
427            D: fidl::encoding::ResourceDialect,
428            T0: fidl::encoding::Encode<
429                fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128>,
430                D,
431            >,
432        > fidl::encoding::Encode<TouchSourceWithLocalHitWatchRequest, D> for (T0,)
433    {
434        #[inline]
435        unsafe fn encode(
436            self,
437            encoder: &mut fidl::encoding::Encoder<'_, D>,
438            offset: usize,
439            depth: fidl::encoding::Depth,
440        ) -> fidl::Result<()> {
441            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchRequest>(offset);
442            // Zero out padding regions. There's no need to apply masks
443            // because the unmasked parts will be overwritten by fields.
444            // Write the fields.
445            self.0.encode(encoder, offset + 0, depth)?;
446            Ok(())
447        }
448    }
449
450    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
451        for TouchSourceWithLocalHitWatchRequest
452    {
453        #[inline(always)]
454        fn new_empty() -> Self {
455            Self {
456                responses: fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128>, D),
457            }
458        }
459
460        #[inline]
461        unsafe fn decode(
462            &mut self,
463            decoder: &mut fidl::encoding::Decoder<'_, D>,
464            offset: usize,
465            _depth: fidl::encoding::Depth,
466        ) -> fidl::Result<()> {
467            decoder.debug_check_bounds::<Self>(offset);
468            // Verify that padding bytes are zero.
469            fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128>, D, &mut self.responses, decoder, offset + 0, _depth)?;
470            Ok(())
471        }
472    }
473
474    impl fidl::encoding::ValueTypeMarker for TouchSourceWithLocalHitWatchResponse {
475        type Borrowed<'a> = &'a Self;
476        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
477            value
478        }
479    }
480
481    unsafe impl fidl::encoding::TypeMarker for TouchSourceWithLocalHitWatchResponse {
482        type Owned = Self;
483
484        #[inline(always)]
485        fn inline_align(_context: fidl::encoding::Context) -> usize {
486            8
487        }
488
489        #[inline(always)]
490        fn inline_size(_context: fidl::encoding::Context) -> usize {
491            16
492        }
493    }
494
495    unsafe impl<D: fidl::encoding::ResourceDialect>
496        fidl::encoding::Encode<TouchSourceWithLocalHitWatchResponse, D>
497        for &TouchSourceWithLocalHitWatchResponse
498    {
499        #[inline]
500        unsafe fn encode(
501            self,
502            encoder: &mut fidl::encoding::Encoder<'_, D>,
503            offset: usize,
504            _depth: fidl::encoding::Depth,
505        ) -> fidl::Result<()> {
506            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchResponse>(offset);
507            // Delegate to tuple encoding.
508            fidl::encoding::Encode::<TouchSourceWithLocalHitWatchResponse, D>::encode(
509                (
510                    <fidl::encoding::Vector<TouchEventWithLocalHit, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.events),
511                ),
512                encoder, offset, _depth
513            )
514        }
515    }
516    unsafe impl<
517            D: fidl::encoding::ResourceDialect,
518            T0: fidl::encoding::Encode<fidl::encoding::Vector<TouchEventWithLocalHit, 128>, D>,
519        > fidl::encoding::Encode<TouchSourceWithLocalHitWatchResponse, D> for (T0,)
520    {
521        #[inline]
522        unsafe fn encode(
523            self,
524            encoder: &mut fidl::encoding::Encoder<'_, D>,
525            offset: usize,
526            depth: fidl::encoding::Depth,
527        ) -> fidl::Result<()> {
528            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchResponse>(offset);
529            // Zero out padding regions. There's no need to apply masks
530            // because the unmasked parts will be overwritten by fields.
531            // Write the fields.
532            self.0.encode(encoder, offset + 0, depth)?;
533            Ok(())
534        }
535    }
536
537    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
538        for TouchSourceWithLocalHitWatchResponse
539    {
540        #[inline(always)]
541        fn new_empty() -> Self {
542            Self {
543                events: fidl::new_empty!(fidl::encoding::Vector<TouchEventWithLocalHit, 128>, D),
544            }
545        }
546
547        #[inline]
548        unsafe fn decode(
549            &mut self,
550            decoder: &mut fidl::encoding::Decoder<'_, D>,
551            offset: usize,
552            _depth: fidl::encoding::Depth,
553        ) -> fidl::Result<()> {
554            decoder.debug_check_bounds::<Self>(offset);
555            // Verify that padding bytes are zero.
556            fidl::decode!(fidl::encoding::Vector<TouchEventWithLocalHit, 128>, D, &mut self.events, decoder, offset + 0, _depth)?;
557            Ok(())
558        }
559    }
560}