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
81mod internal {
82    use super::*;
83    unsafe impl fidl::encoding::TypeMarker for ErrorReason {
84        type Owned = Self;
85
86        #[inline(always)]
87        fn inline_align(_context: fidl::encoding::Context) -> usize {
88            std::mem::align_of::<u32>()
89        }
90
91        #[inline(always)]
92        fn inline_size(_context: fidl::encoding::Context) -> usize {
93            std::mem::size_of::<u32>()
94        }
95
96        #[inline(always)]
97        fn encode_is_copy() -> bool {
98            true
99        }
100
101        #[inline(always)]
102        fn decode_is_copy() -> bool {
103            false
104        }
105    }
106
107    impl fidl::encoding::ValueTypeMarker for ErrorReason {
108        type Borrowed<'a> = Self;
109        #[inline(always)]
110        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
111            *value
112        }
113    }
114
115    unsafe impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Encode<Self, D> for ErrorReason {
116        #[inline]
117        unsafe fn encode(
118            self,
119            encoder: &mut fidl::encoding::Encoder<'_, D>,
120            offset: usize,
121            _depth: fidl::encoding::Depth,
122        ) -> fidl::Result<()> {
123            encoder.debug_check_bounds::<Self>(offset);
124            encoder.write_num(self.into_primitive(), offset);
125            Ok(())
126        }
127    }
128
129    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D> for ErrorReason {
130        #[inline(always)]
131        fn new_empty() -> Self {
132            Self::Denied
133        }
134
135        #[inline]
136        unsafe fn decode(
137            &mut self,
138            decoder: &mut fidl::encoding::Decoder<'_, D>,
139            offset: usize,
140            _depth: fidl::encoding::Depth,
141        ) -> fidl::Result<()> {
142            decoder.debug_check_bounds::<Self>(offset);
143            let prim = decoder.read_num::<u32>(offset);
144
145            *self = Self::from_primitive(prim).ok_or(fidl::Error::InvalidEnumValue)?;
146            Ok(())
147        }
148    }
149
150    impl fidl::encoding::ValueTypeMarker for TouchEventWithLocalHit {
151        type Borrowed<'a> = &'a Self;
152        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
153            value
154        }
155    }
156
157    unsafe impl fidl::encoding::TypeMarker for TouchEventWithLocalHit {
158        type Owned = Self;
159
160        #[inline(always)]
161        fn inline_align(_context: fidl::encoding::Context) -> usize {
162            8
163        }
164
165        #[inline(always)]
166        fn inline_size(_context: fidl::encoding::Context) -> usize {
167            32
168        }
169    }
170
171    unsafe impl<D: fidl::encoding::ResourceDialect>
172        fidl::encoding::Encode<TouchEventWithLocalHit, D> for &TouchEventWithLocalHit
173    {
174        #[inline]
175        unsafe fn encode(
176            self,
177            encoder: &mut fidl::encoding::Encoder<'_, D>,
178            offset: usize,
179            _depth: fidl::encoding::Depth,
180        ) -> fidl::Result<()> {
181            encoder.debug_check_bounds::<TouchEventWithLocalHit>(offset);
182            // Delegate to tuple encoding.
183            fidl::encoding::Encode::<TouchEventWithLocalHit, D>::encode(
184                (
185                    <fidl_fuchsia_ui_pointer__common::TouchEvent as fidl::encoding::ValueTypeMarker>::borrow(&self.touch_event),
186                    <u64 as fidl::encoding::ValueTypeMarker>::borrow(&self.local_viewref_koid),
187                    <fidl::encoding::Array<f32, 2> as fidl::encoding::ValueTypeMarker>::borrow(&self.local_point),
188                ),
189                encoder, offset, _depth
190            )
191        }
192    }
193    unsafe impl<
194            D: fidl::encoding::ResourceDialect,
195            T0: fidl::encoding::Encode<fidl_fuchsia_ui_pointer__common::TouchEvent, D>,
196            T1: fidl::encoding::Encode<u64, D>,
197            T2: fidl::encoding::Encode<fidl::encoding::Array<f32, 2>, D>,
198        > fidl::encoding::Encode<TouchEventWithLocalHit, D> for (T0, T1, T2)
199    {
200        #[inline]
201        unsafe fn encode(
202            self,
203            encoder: &mut fidl::encoding::Encoder<'_, D>,
204            offset: usize,
205            depth: fidl::encoding::Depth,
206        ) -> fidl::Result<()> {
207            encoder.debug_check_bounds::<TouchEventWithLocalHit>(offset);
208            // Zero out padding regions. There's no need to apply masks
209            // because the unmasked parts will be overwritten by fields.
210            // Write the fields.
211            self.0.encode(encoder, offset + 0, depth)?;
212            self.1.encode(encoder, offset + 16, depth)?;
213            self.2.encode(encoder, offset + 24, depth)?;
214            Ok(())
215        }
216    }
217
218    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
219        for TouchEventWithLocalHit
220    {
221        #[inline(always)]
222        fn new_empty() -> Self {
223            Self {
224                touch_event: fidl::new_empty!(fidl_fuchsia_ui_pointer__common::TouchEvent, D),
225                local_viewref_koid: fidl::new_empty!(u64, D),
226                local_point: fidl::new_empty!(fidl::encoding::Array<f32, 2>, D),
227            }
228        }
229
230        #[inline]
231        unsafe fn decode(
232            &mut self,
233            decoder: &mut fidl::encoding::Decoder<'_, D>,
234            offset: usize,
235            _depth: fidl::encoding::Depth,
236        ) -> fidl::Result<()> {
237            decoder.debug_check_bounds::<Self>(offset);
238            // Verify that padding bytes are zero.
239            fidl::decode!(
240                fidl_fuchsia_ui_pointer__common::TouchEvent,
241                D,
242                &mut self.touch_event,
243                decoder,
244                offset + 0,
245                _depth
246            )?;
247            fidl::decode!(u64, D, &mut self.local_viewref_koid, decoder, offset + 16, _depth)?;
248            fidl::decode!(fidl::encoding::Array<f32, 2>, D, &mut self.local_point, decoder, offset + 24, _depth)?;
249            Ok(())
250        }
251    }
252
253    impl fidl::encoding::ValueTypeMarker for TouchSourceWithLocalHitUpdateResponseRequest {
254        type Borrowed<'a> = &'a Self;
255        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
256            value
257        }
258    }
259
260    unsafe impl fidl::encoding::TypeMarker for TouchSourceWithLocalHitUpdateResponseRequest {
261        type Owned = Self;
262
263        #[inline(always)]
264        fn inline_align(_context: fidl::encoding::Context) -> usize {
265            8
266        }
267
268        #[inline(always)]
269        fn inline_size(_context: fidl::encoding::Context) -> usize {
270            32
271        }
272    }
273
274    unsafe impl<D: fidl::encoding::ResourceDialect>
275        fidl::encoding::Encode<TouchSourceWithLocalHitUpdateResponseRequest, D>
276        for &TouchSourceWithLocalHitUpdateResponseRequest
277    {
278        #[inline]
279        unsafe fn encode(
280            self,
281            encoder: &mut fidl::encoding::Encoder<'_, D>,
282            offset: usize,
283            _depth: fidl::encoding::Depth,
284        ) -> fidl::Result<()> {
285            encoder.debug_check_bounds::<TouchSourceWithLocalHitUpdateResponseRequest>(offset);
286            // Delegate to tuple encoding.
287            fidl::encoding::Encode::<TouchSourceWithLocalHitUpdateResponseRequest, D>::encode(
288                (
289                    <fidl_fuchsia_ui_pointer__common::TouchInteractionId as fidl::encoding::ValueTypeMarker>::borrow(&self.interaction),
290                    <fidl_fuchsia_ui_pointer__common::TouchResponse as fidl::encoding::ValueTypeMarker>::borrow(&self.response),
291                ),
292                encoder, offset, _depth
293            )
294        }
295    }
296    unsafe impl<
297            D: fidl::encoding::ResourceDialect,
298            T0: fidl::encoding::Encode<fidl_fuchsia_ui_pointer__common::TouchInteractionId, D>,
299            T1: fidl::encoding::Encode<fidl_fuchsia_ui_pointer__common::TouchResponse, D>,
300        > fidl::encoding::Encode<TouchSourceWithLocalHitUpdateResponseRequest, D> for (T0, T1)
301    {
302        #[inline]
303        unsafe fn encode(
304            self,
305            encoder: &mut fidl::encoding::Encoder<'_, D>,
306            offset: usize,
307            depth: fidl::encoding::Depth,
308        ) -> fidl::Result<()> {
309            encoder.debug_check_bounds::<TouchSourceWithLocalHitUpdateResponseRequest>(offset);
310            // Zero out padding regions. There's no need to apply masks
311            // because the unmasked parts will be overwritten by fields.
312            unsafe {
313                let ptr = encoder.buf.as_mut_ptr().add(offset).offset(8);
314                (ptr as *mut u64).write_unaligned(0);
315            }
316            // Write the fields.
317            self.0.encode(encoder, offset + 0, depth)?;
318            self.1.encode(encoder, offset + 16, depth)?;
319            Ok(())
320        }
321    }
322
323    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
324        for TouchSourceWithLocalHitUpdateResponseRequest
325    {
326        #[inline(always)]
327        fn new_empty() -> Self {
328            Self {
329                interaction: fidl::new_empty!(
330                    fidl_fuchsia_ui_pointer__common::TouchInteractionId,
331                    D
332                ),
333                response: fidl::new_empty!(fidl_fuchsia_ui_pointer__common::TouchResponse, D),
334            }
335        }
336
337        #[inline]
338        unsafe fn decode(
339            &mut self,
340            decoder: &mut fidl::encoding::Decoder<'_, D>,
341            offset: usize,
342            _depth: fidl::encoding::Depth,
343        ) -> fidl::Result<()> {
344            decoder.debug_check_bounds::<Self>(offset);
345            // Verify that padding bytes are zero.
346            let ptr = unsafe { decoder.buf.as_ptr().add(offset).offset(8) };
347            let padval = unsafe { (ptr as *const u64).read_unaligned() };
348            let mask = 0xffffffff00000000u64;
349            let maskedval = padval & mask;
350            if maskedval != 0 {
351                return Err(fidl::Error::NonZeroPadding {
352                    padding_start: offset + 8 + ((mask as u64).trailing_zeros() / 8) as usize,
353                });
354            }
355            fidl::decode!(
356                fidl_fuchsia_ui_pointer__common::TouchInteractionId,
357                D,
358                &mut self.interaction,
359                decoder,
360                offset + 0,
361                _depth
362            )?;
363            fidl::decode!(
364                fidl_fuchsia_ui_pointer__common::TouchResponse,
365                D,
366                &mut self.response,
367                decoder,
368                offset + 16,
369                _depth
370            )?;
371            Ok(())
372        }
373    }
374
375    impl fidl::encoding::ValueTypeMarker for TouchSourceWithLocalHitWatchRequest {
376        type Borrowed<'a> = &'a Self;
377        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
378            value
379        }
380    }
381
382    unsafe impl fidl::encoding::TypeMarker for TouchSourceWithLocalHitWatchRequest {
383        type Owned = Self;
384
385        #[inline(always)]
386        fn inline_align(_context: fidl::encoding::Context) -> usize {
387            8
388        }
389
390        #[inline(always)]
391        fn inline_size(_context: fidl::encoding::Context) -> usize {
392            16
393        }
394    }
395
396    unsafe impl<D: fidl::encoding::ResourceDialect>
397        fidl::encoding::Encode<TouchSourceWithLocalHitWatchRequest, D>
398        for &TouchSourceWithLocalHitWatchRequest
399    {
400        #[inline]
401        unsafe fn encode(
402            self,
403            encoder: &mut fidl::encoding::Encoder<'_, D>,
404            offset: usize,
405            _depth: fidl::encoding::Depth,
406        ) -> fidl::Result<()> {
407            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchRequest>(offset);
408            // Delegate to tuple encoding.
409            fidl::encoding::Encode::<TouchSourceWithLocalHitWatchRequest, D>::encode(
410                (
411                    <fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.responses),
412                ),
413                encoder, offset, _depth
414            )
415        }
416    }
417    unsafe impl<
418            D: fidl::encoding::ResourceDialect,
419            T0: fidl::encoding::Encode<
420                fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128>,
421                D,
422            >,
423        > fidl::encoding::Encode<TouchSourceWithLocalHitWatchRequest, D> for (T0,)
424    {
425        #[inline]
426        unsafe fn encode(
427            self,
428            encoder: &mut fidl::encoding::Encoder<'_, D>,
429            offset: usize,
430            depth: fidl::encoding::Depth,
431        ) -> fidl::Result<()> {
432            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchRequest>(offset);
433            // Zero out padding regions. There's no need to apply masks
434            // because the unmasked parts will be overwritten by fields.
435            // Write the fields.
436            self.0.encode(encoder, offset + 0, depth)?;
437            Ok(())
438        }
439    }
440
441    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
442        for TouchSourceWithLocalHitWatchRequest
443    {
444        #[inline(always)]
445        fn new_empty() -> Self {
446            Self {
447                responses: fidl::new_empty!(fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128>, D),
448            }
449        }
450
451        #[inline]
452        unsafe fn decode(
453            &mut self,
454            decoder: &mut fidl::encoding::Decoder<'_, D>,
455            offset: usize,
456            _depth: fidl::encoding::Depth,
457        ) -> fidl::Result<()> {
458            decoder.debug_check_bounds::<Self>(offset);
459            // Verify that padding bytes are zero.
460            fidl::decode!(fidl::encoding::Vector<fidl_fuchsia_ui_pointer__common::TouchResponse, 128>, D, &mut self.responses, decoder, offset + 0, _depth)?;
461            Ok(())
462        }
463    }
464
465    impl fidl::encoding::ValueTypeMarker for TouchSourceWithLocalHitWatchResponse {
466        type Borrowed<'a> = &'a Self;
467        fn borrow(value: &<Self as fidl::encoding::TypeMarker>::Owned) -> Self::Borrowed<'_> {
468            value
469        }
470    }
471
472    unsafe impl fidl::encoding::TypeMarker for TouchSourceWithLocalHitWatchResponse {
473        type Owned = Self;
474
475        #[inline(always)]
476        fn inline_align(_context: fidl::encoding::Context) -> usize {
477            8
478        }
479
480        #[inline(always)]
481        fn inline_size(_context: fidl::encoding::Context) -> usize {
482            16
483        }
484    }
485
486    unsafe impl<D: fidl::encoding::ResourceDialect>
487        fidl::encoding::Encode<TouchSourceWithLocalHitWatchResponse, D>
488        for &TouchSourceWithLocalHitWatchResponse
489    {
490        #[inline]
491        unsafe fn encode(
492            self,
493            encoder: &mut fidl::encoding::Encoder<'_, D>,
494            offset: usize,
495            _depth: fidl::encoding::Depth,
496        ) -> fidl::Result<()> {
497            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchResponse>(offset);
498            // Delegate to tuple encoding.
499            fidl::encoding::Encode::<TouchSourceWithLocalHitWatchResponse, D>::encode(
500                (
501                    <fidl::encoding::Vector<TouchEventWithLocalHit, 128> as fidl::encoding::ValueTypeMarker>::borrow(&self.events),
502                ),
503                encoder, offset, _depth
504            )
505        }
506    }
507    unsafe impl<
508            D: fidl::encoding::ResourceDialect,
509            T0: fidl::encoding::Encode<fidl::encoding::Vector<TouchEventWithLocalHit, 128>, D>,
510        > fidl::encoding::Encode<TouchSourceWithLocalHitWatchResponse, D> for (T0,)
511    {
512        #[inline]
513        unsafe fn encode(
514            self,
515            encoder: &mut fidl::encoding::Encoder<'_, D>,
516            offset: usize,
517            depth: fidl::encoding::Depth,
518        ) -> fidl::Result<()> {
519            encoder.debug_check_bounds::<TouchSourceWithLocalHitWatchResponse>(offset);
520            // Zero out padding regions. There's no need to apply masks
521            // because the unmasked parts will be overwritten by fields.
522            // Write the fields.
523            self.0.encode(encoder, offset + 0, depth)?;
524            Ok(())
525        }
526    }
527
528    impl<D: fidl::encoding::ResourceDialect> fidl::encoding::Decode<Self, D>
529        for TouchSourceWithLocalHitWatchResponse
530    {
531        #[inline(always)]
532        fn new_empty() -> Self {
533            Self {
534                events: fidl::new_empty!(fidl::encoding::Vector<TouchEventWithLocalHit, 128>, D),
535            }
536        }
537
538        #[inline]
539        unsafe fn decode(
540            &mut self,
541            decoder: &mut fidl::encoding::Decoder<'_, D>,
542            offset: usize,
543            _depth: fidl::encoding::Depth,
544        ) -> fidl::Result<()> {
545            decoder.debug_check_bounds::<Self>(offset);
546            // Verify that padding bytes are zero.
547            fidl::decode!(fidl::encoding::Vector<TouchEventWithLocalHit, 128>, D, &mut self.events, decoder, offset + 0, _depth)?;
548            Ok(())
549        }
550    }
551}